Compare commits

..

94 commits
v0.1.0 ... main

Author SHA1 Message Date
46039dc7f1 Merge pull request 'add resume, update/cleanup' (#9) from dev into main
All checks were successful
deploy / deploy (push) Successful in 49s
Reviewed-on: #9
2024-06-17 16:44:17 -05:00
cbd39fd67b Merge branch 'main' into dev
All checks were successful
build / build (push) Successful in 59s
2024-06-17 16:44:06 -05:00
1f20d8746e
npm update
Some checks failed
build / build (push) Has been cancelled
2024-06-17 17:43:26 -04:00
85269833b6
Add resume 2024-06-17 17:43:09 -04:00
75667f275c
reformat and cleanup 2024-06-17 17:37:27 -04:00
37220934d7 Merge pull request 'change home text and cleanup' (#8) from dev into main
All checks were successful
deploy / deploy (push) Successful in 56s
Reviewed-on: #8
2024-06-17 15:15:32 -05:00
6f3c5d97ea
update home text
All checks were successful
build / build (push) Successful in 3m15s
2024-06-17 16:12:52 -04:00
0b4b40707c
remove obsolete version from compose.yaml
Some checks failed
build / build (push) Has been cancelled
2024-06-03 15:25:59 -05:00
ab666e4efe Merge pull request 'housekeeping updates' (#7) from dev into main
All checks were successful
deploy / deploy (push) Successful in 3m10s
Reviewed-on: #7
2024-03-29 14:10:44 -05:00
e70ad7c08a Merge branch 'main' into dev
All checks were successful
build / build (push) Successful in 39s
2024-02-27 19:27:39 -06:00
b03f320af3
add exception details if available
All checks were successful
build / build (push) Successful in 42s
2024-02-27 19:26:42 -06:00
ef898769ea
update exception page 2024-02-27 19:18:56 -06:00
1aad60fb8c
cleanup
All checks were successful
build / build (push) Successful in 41s
2024-02-27 19:16:57 -06:00
3ddbfd2a9b
housekeeping
All checks were successful
build / build (push) Successful in 53s
2024-02-27 19:06:16 -06:00
79f6d80b89
housekeeping
All checks were successful
build / build (push) Successful in 55s
2024-02-27 19:03:51 -06:00
83feaaab40
add script/stylesheet versioning 2024-02-27 18:38:49 -06:00
9078b50298
Recreate blazor error ui in tailwind 2024-02-27 18:17:07 -06:00
eb7a000733
remove leftover bootstrap css config 2024-02-27 17:55:03 -06:00
173aa9a3ed
add standard tailwind plugins, remove unused dev dependency 2024-02-27 17:53:40 -06:00
a7e21abe79
remove leftover authentication components 2024-02-27 17:46:59 -06:00
57e3fb1a7e
cleanup autofocus 2024-02-27 17:45:57 -06:00
5450522e37
move some styling into SimpleLayout.razor
All checks were successful
build / build (push) Successful in 40s
2024-02-25 23:33:37 -06:00
d244292ef8
add attributions page
All checks were successful
build / build (push) Successful in 55s
2024-02-25 23:27:24 -06:00
1d1aefcd96
cleanup old images after build
All checks were successful
build / build (push) Successful in 41s
2024-02-25 20:15:02 -06:00
e9a7099e25 Merge pull request 'temporarily remove contact form' (#6) from dev into main
All checks were successful
deploy / deploy (push) Successful in 47s
Reviewed-on: #6
2024-02-25 20:13:02 -06:00
6abd602a91
temporarily remove contact form
All checks were successful
build / build (push) Successful in 42s
2024-02-25 20:12:43 -06:00
5a9fbfb8e8 Merge pull request 'fix secret client' (#5) from dev into main
All checks were successful
deploy / deploy (push) Successful in 45s
Reviewed-on: #5
2024-02-25 19:57:58 -06:00
8bcba134f1
attempt to fix secret client
All checks were successful
build / build (push) Successful in 40s
2024-02-25 19:56:49 -06:00
1c984859cb
Revert "include antiforgerytoken in contactform"
This reverts commit 4dc3e92c4c.
2024-02-25 19:50:03 -06:00
4dc3e92c4c
include antiforgerytoken in contactform
All checks were successful
build / build (push) Successful in 40s
2024-02-25 19:46:29 -06:00
fde3425eda Merge pull request 'fix heroicons' (#4) from dev into main
All checks were successful
deploy / deploy (push) Successful in 48s
Reviewed-on: #4
2024-02-25 19:38:39 -06:00
552413acca
gitignore heroicons files
All checks were successful
build / build (push) Successful in 40s
2024-02-25 19:37:26 -06:00
ae1ce31905
fix libman restore
All checks were successful
build / build (push) Successful in 1m0s
2024-02-25 19:35:19 -06:00
ea84dca0a2
fix dockerfile
Some checks failed
build / build (push) Has been cancelled
2024-02-25 19:34:23 -06:00
378a4f39b6
remove heroicons project
Some checks failed
build / build (push) Failing after 4s
2024-02-25 19:32:47 -06:00
c144d40eae
Merge remote-tracking branch 'origin/dev' into dev
All checks were successful
build / build (push) Successful in 40s
2024-02-25 19:20:02 -06:00
ce772fa221
fix misalignment at certain responsive breakpoints 2024-02-25 19:19:57 -06:00
45920dc6bf Merge pull request 'remove fileprovider' (#3) from dev into main
All checks were successful
deploy / deploy (push) Successful in 45s
Reviewed-on: #3
2024-02-25 18:59:41 -06:00
f1499fa03b Merge branch 'main' into dev
All checks were successful
build / build (push) Successful in 38s
2024-02-25 18:57:13 -06:00
faaee707c3
remove fileprovider
All checks were successful
build / build (push) Successful in 39s
2024-02-25 18:56:15 -06:00
b066bc00e4 Merge pull request 'fix file provider' (#2) from dev into main
All checks were successful
deploy / deploy (push) Successful in 44s
Reviewed-on: #2
2024-02-25 18:54:23 -06:00
010cb224bb
fix file provider
All checks were successful
build / build (push) Successful in 39s
2024-02-25 18:53:59 -06:00
5ad6847d30 Merge pull request 'Merge dev into main' (#1) from dev into main
All checks were successful
deploy / deploy (push) Successful in 45s
Reviewed-on: #1
2024-02-25 18:51:10 -06:00
b14405a0fc
amend previous
All checks were successful
build / build (push) Successful in 54s
2024-02-25 18:49:50 -06:00
2478de2758
include heroicons source in project
Some checks failed
build / build (push) Failing after 38s
2024-02-25 18:47:52 -06:00
bbc0ec0eb8
fix possible race condition 2024-02-25 18:46:36 -06:00
317ae47889
Revert "test fileprovider fix"
This reverts commit a8653ec3f7.
2024-02-25 18:36:12 -06:00
a8653ec3f7
test fileprovider fix
Some checks failed
build / build (push) Failing after 28s
2024-02-25 18:33:25 -06:00
ed4af111a9
fix job name
Some checks failed
build / build (push) Failing after 13s
2024-02-25 18:24:09 -06:00
f97ffce447
test
Some checks failed
build / deploy (push) Failing after 28s
2024-02-25 18:23:33 -06:00
67eb590604
add libman.json
Some checks failed
build / deploy (push) Failing after 28s
2024-02-25 18:14:42 -06:00
fea2012b88
attempt to fix libman restore
Some checks failed
build / deploy (push) Failing after 26s
2024-02-25 18:12:54 -06:00
ea54628d8e
only include .svg in embedded resource
Some checks failed
build / deploy (push) Failing after 26s
2024-02-25 18:06:03 -06:00
365cb6289e
whitespace 2024-02-25 18:05:49 -06:00
311aafdd9b
trigger deploy on push to main
Some checks failed
build / deploy (push) Failing after 29s
2024-02-25 17:58:43 -06:00
4ec9f69429
trigger build on push to dev 2024-02-25 17:58:27 -06:00
194d08f521
use correct heroicon 2024-02-25 17:57:30 -06:00
e5a8b88d02
fix heroicons 2024-02-25 17:57:14 -06:00
2785aa0b34
remove redundant options registration, don't validate options on start if they depend on Azure App Config
All checks were successful
build / deploy (push) Successful in 38s
2024-02-25 17:42:51 -06:00
ab5d100615
only push website:latest to docker hub
All checks were successful
build / deploy (push) Successful in 38s
2024-02-25 17:35:23 -06:00
449fbadc29
fix dockerfile
All checks were successful
build / deploy (push) Successful in 52s
2024-02-25 17:32:51 -06:00
d63a09d9ab
cleanup csproj 2024-02-25 17:30:15 -06:00
3e313c4943
update build/deploy pipelines
All checks were successful
build / deploy (push) Successful in 1m0s
2024-02-25 17:26:44 -06:00
f5d6ecaecc
update dockerfile 2024-02-25 17:23:27 -06:00
61460da314
update package.json 2024-02-25 17:19:23 -06:00
96289c3c65
update dockerfile 2024-02-25 17:17:09 -06:00
4ca56ad55e
fix dockerfile
All checks were successful
build / deploy (push) Successful in 1m0s
2024-02-25 17:14:54 -06:00
37a69fd440
fix dockerfile
Some checks failed
build / deploy (push) Has been cancelled
2024-02-25 17:14:17 -06:00
9d2a5539a7
move HeroIcons to separate project 2024-02-25 17:12:10 -06:00
6a9800bb31
update .gitignore 2024-02-25 17:10:59 -06:00
950f2fed4d
whitespace
Some checks failed
build / deploy (push) Failing after 39s
2024-02-25 16:13:50 -06:00
00d41c4801
replace build pipeline with dockerized version 2024-02-25 16:13:47 -06:00
b09bafd4f6
fix build, update tailwindcss
Some checks failed
dotnet build / build (push) Failing after 9s
2024-02-25 16:10:04 -06:00
99b6b29b6f
fix dockerfile
Some checks failed
dotnet build / build (push) Failing after 9s
2024-02-25 15:34:31 -06:00
401bb59218
move web/js/ts files to web project 2024-02-25 15:33:09 -06:00
640ba83e90
fix dockerfile 2024-02-25 14:31:54 -06:00
533497c32c
fix dockerfile 2024-02-25 14:25:18 -06:00
4990d82b60
Only use package locking in docker build
Some checks failed
dotnet build / build (push) Has been cancelled
Causes builds to fail when different versions of the SDK are used
2024-02-25 14:20:28 -06:00
6ec34653bd
pass --force-evaluate to dotnet restore 2024-02-25 14:18:47 -06:00
64a57790fd
update packages.lock.json
Some checks failed
dotnet build / build (push) Failing after 28s
2024-02-25 14:14:36 -06:00
3e4b46c828
update wasm-tools workload
Some checks failed
dotnet build / build (push) Failing after 26s
2024-02-25 14:12:33 -06:00
6d88e6bbba
fix Dockerfile 2024-02-25 14:03:54 -06:00
02ac7d950e
Merge remote-tracking branch 'origin/main'
Some checks failed
dotnet build / build (push) Failing after 28s
2024-02-25 14:00:43 -06:00
a7e465c998
fix dockerfile 2024-02-25 13:17:53 -06:00
ca06255cc9 update README.md 2024-02-25 00:43:05 -06:00
e66d4cabaa
add dotnet tool manifest
Some checks failed
dotnet build / build (push) Failing after 43s
2024-02-25 00:36:25 -06:00
a05c75877c
default contact form to hidden
Some checks failed
dotnet build / build (push) Failing after 3m51s
2024-02-25 00:28:17 -06:00
7447214512
move elementreference for autofocus 2024-02-25 00:27:40 -06:00
eb05a6659b
tweak docstring
Some checks are pending
dotnet build / build (push) Waiting to run
2024-02-25 00:24:56 -06:00
e6e1ab21ad
remove extra spaces
Some checks are pending
dotnet build / build (push) Waiting to run
2024-02-25 00:24:22 -06:00
1de7280c40
HeroIcons: add incremental source generator, use async io
Some checks are pending
dotnet build / build (push) Waiting to run
2024-02-25 00:21:50 -06:00
a656aa9022
.
Some checks are pending
dotnet build / build (push) Waiting to run
2024-02-24 21:06:01 -06:00
11459722b0
local var name
Some checks are pending
dotnet build / build (push) Waiting to run
2024-02-24 21:05:21 -06:00
f8ac2ab1ab
update dependencies tch version 2024-02-24 21:04:22 -06:00
55 changed files with 1618 additions and 3556 deletions

View file

@ -1,76 +1,18 @@
name: dotnet build
name: build
on:
push:
branches:
- main
paths:
- 'src/**'
- 'tests/**'
- 'targets/**'
- 'package.json'
- 'pnpm-lock.yaml'
- 'tailwind.config.ts'
- 'tsconfig.json'
- '*.props'
- '*.targets'
- dev
jobs:
build:
runs-on: docker
container:
image: nseguin42/forgejo-runner:ubuntu
env:
DOCKER_HOST: tcp://0.0.0.0:2375
steps:
- uses: actions/checkout@v4
- name: install pnpm
run: npm install -g pnpm
- name: get npm cache directory
id: pnpm-cache-dir
shell: bash
run: pnpm config set store-dir .pnpm-store
- uses: actions/cache@v3
id: pnpm-cache
name: restore pnpm cache
with:
path: .pnpm-store
key: ${{ runner.os }}-pnpm-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-
- name: pnpm install
run: pnpm install --prefer-offline --frozen-lockfile
- uses: actions/cache/save@v3
name: save pnpm cache
if: steps.pnpm-cache.outputs.cache-hit != 'true'
with:
path: .pnpm-store
key: ${{ runner.os }}-pnpm-${{ hashFiles('pnpm-lock.yaml') }}
- uses: actions/cache@v3
id: nuget-cache
name: restore nuget cache
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: dotnet tool restore
run: dotnet tool restore
if: steps.nuget-cache.outputs.cache-hit != 'true'
- name: dotnet restore
run: dotnet restore -p:Configuration=Release --configfile nuget.config --locked-mode
if: steps.nuget-cache.outputs.cache-hit != 'true'
- name: dotnet workload restore
run: dotnet workload restore
if: steps.nuget-cache.outputs.cache-hit != 'true'
- name: dotnet workload install wasm-tools
run: dotnet workload install wasm-tools
if: steps.nuget-cache.outputs.cache-hit != 'true'
- name: save nuget cache
uses: actions/cache/save@v3
if: steps.nuget-cache.outputs.cache-hit != 'true'
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
- name: dotnet build
run: dotnet build --no-restore --configuration Release
- name: dotnet test
run: dotnet test
- name: docker build
run: docker build -t nseguin42/website:${{ github.sha }} .
- name: cleanup old images
run: docker image prune -f --filter "until=24h"

View file

@ -1,11 +1,8 @@
name: deploy
on:
release:
types:
- published
- edited
push:
branches:
- main
jobs:
deploy:
runs-on: docker
@ -18,8 +15,8 @@ jobs:
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
- uses: actions/checkout@v4
- name: docker build
run: docker build -t nseguin42/website:latest .
run: if [ -z "$(docker images -q nseguin42/website:${{ github.sha }} 2> /dev/null)" ]; then docker build -t nseguin42/website:${{ github.sha }} .; fi
- name: docker tag
run: docker tag nseguin42/website:latest nseguin42/website:${{ github.sha }}
run: docker tag nseguin42/website:${{ github.sha }} nseguin42/website:latest
- name: docker push
run: docker push nseguin42/website:latest && docker push nseguin42/website:${{ github.sha }}
run: docker push nseguin42/website:latest

883
.gitignore vendored
View file

@ -1,4 +1,4 @@
src/NSeguin.Dev.Web/wwroot/lib/**
src/NSeguin.Dev.Web/wwwroot/lib/
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
@ -489,883 +489,4 @@ $RECYCLE.BIN/
*.lnk
# Vim temporary swap files
*.swp
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/academic-cap.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/academic-cap.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/academic-cap.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/adjustments-horizontal.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/adjustments-horizontal.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/adjustments-horizontal.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/adjustments-vertical.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/adjustments-vertical.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/adjustments-vertical.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/archive-box.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/archive-box.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/archive-box.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/archive-box-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/archive-box-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/archive-box-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/archive-box-x-mark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/archive-box-x-mark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/archive-box-x-mark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-down-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-down-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-down-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-down-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-down-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-down-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-down-on-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-down-on-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-down-on-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-down-on-square-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-down-on-square-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-down-on-square-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-down-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-down-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-down-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-down-tray.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-down-tray.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-down-tray.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-left-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-left-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-left-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-left-on-rectangle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-left-on-rectangle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-left-on-rectangle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-long-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-long-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-long-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-long-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-long-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-long-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-long-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-long-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-long-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-long-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-long-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-long-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-path.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-path.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-path.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-path-rounded-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-path-rounded-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-path-rounded-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-right-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-right-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-right-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-right-on-rectangle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-right-on-rectangle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-right-on-rectangle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-small-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-small-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-small-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-small-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-small-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-small-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-small-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-small-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-small-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-small-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-small-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-small-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-top-right-on-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-top-right-on-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-top-right-on-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-trending-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-trending-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-trending-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-trending-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-trending-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-trending-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-up-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-up-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-up-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-up-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-up-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-up-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-up-on-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-up-on-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-up-on-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-up-on-square-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-up-on-square-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-up-on-square-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-up-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-up-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-up-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-up-tray.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-up-tray.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-up-tray.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-uturn-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-uturn-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-uturn-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-uturn-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-uturn-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-uturn-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-uturn-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-uturn-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-uturn-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrow-uturn-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrow-uturn-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrow-uturn-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrows-pointing-in.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrows-pointing-in.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrows-pointing-in.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrows-pointing-out.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrows-pointing-out.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrows-pointing-out.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrows-right-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrows-right-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrows-right-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/arrows-up-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/arrows-up-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/arrows-up-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/at-symbol.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/at-symbol.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/at-symbol.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/backspace.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/backspace.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/backspace.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/backward.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/backward.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/backward.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/banknotes.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/banknotes.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/banknotes.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bars-2.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bars-2.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bars-2.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bars-3.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bars-3.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bars-3.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bars-3-bottom-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bars-3-bottom-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bars-3-bottom-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bars-3-bottom-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bars-3-bottom-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bars-3-bottom-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bars-3-center-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bars-3-center-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bars-3-center-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bars-4.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bars-4.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bars-4.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bars-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bars-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bars-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bars-arrow-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bars-arrow-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bars-arrow-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/battery-0.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/battery-0.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/battery-0.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/battery-50.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/battery-50.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/battery-50.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/battery-100.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/battery-100.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/battery-100.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/beaker.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/beaker.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/beaker.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bell.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bell.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bell.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bell-alert.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bell-alert.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bell-alert.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bell-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bell-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bell-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bell-snooze.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bell-snooze.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bell-snooze.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bolt.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bolt.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bolt.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bolt-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bolt-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bolt-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/book-open.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/book-open.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/book-open.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bookmark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bookmark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bookmark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bookmark-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bookmark-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bookmark-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bookmark-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bookmark-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bookmark-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/briefcase.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/briefcase.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/briefcase.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/bug-ant.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/bug-ant.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/bug-ant.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/building-library.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/building-library.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/building-library.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/building-office.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/building-office.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/building-office.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/building-office-2.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/building-office-2.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/building-office-2.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/building-storefront.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/building-storefront.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/building-storefront.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/cake.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/cake.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/cake.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/calculator.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/calculator.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/calculator.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/calendar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/calendar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/calendar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/calendar-days.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/calendar-days.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/calendar-days.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/camera.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/camera.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/camera.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chart-bar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chart-bar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chart-bar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chart-bar-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chart-bar-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chart-bar-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chart-pie.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chart-pie.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chart-pie.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chat-bubble-bottom-center.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chat-bubble-bottom-center.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chat-bubble-bottom-center.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chat-bubble-bottom-center-text.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chat-bubble-bottom-center-text.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chat-bubble-bottom-center-text.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chat-bubble-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chat-bubble-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chat-bubble-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chat-bubble-left-ellipsis.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chat-bubble-left-ellipsis.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chat-bubble-left-ellipsis.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chat-bubble-left-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chat-bubble-left-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chat-bubble-left-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chat-bubble-oval-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chat-bubble-oval-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chat-bubble-oval-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chat-bubble-oval-left-ellipsis.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chat-bubble-oval-left-ellipsis.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chat-bubble-oval-left-ellipsis.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/check.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/check.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/check.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/check-badge.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/check-badge.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/check-badge.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/check-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/check-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/check-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chevron-double-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chevron-double-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chevron-double-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chevron-double-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chevron-double-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chevron-double-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chevron-double-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chevron-double-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chevron-double-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chevron-double-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chevron-double-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chevron-double-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chevron-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chevron-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chevron-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chevron-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chevron-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chevron-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chevron-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chevron-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chevron-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chevron-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chevron-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chevron-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/chevron-up-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/chevron-up-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/chevron-up-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/circle-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/circle-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/circle-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/clipboard.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/clipboard.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/clipboard.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/clipboard-document.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/clipboard-document.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/clipboard-document.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/clipboard-document-check.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/clipboard-document-check.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/clipboard-document-check.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/clipboard-document-list.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/clipboard-document-list.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/clipboard-document-list.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/clock.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/clock.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/clock.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/cloud.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/cloud.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/cloud.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/cloud-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/cloud-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/cloud-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/cloud-arrow-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/cloud-arrow-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/cloud-arrow-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/code-bracket.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/code-bracket.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/code-bracket.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/code-bracket-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/code-bracket-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/code-bracket-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/cog.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/cog.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/cog.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/cog-6-tooth.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/cog-6-tooth.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/cog-6-tooth.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/cog-8-tooth.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/cog-8-tooth.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/cog-8-tooth.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/command-line.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/command-line.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/command-line.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/computer-desktop.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/computer-desktop.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/computer-desktop.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/cpu-chip.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/cpu-chip.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/cpu-chip.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/credit-card.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/credit-card.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/credit-card.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/cube.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/cube.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/cube.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/cube-transparent.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/cube-transparent.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/cube-transparent.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/currency-bangladeshi.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/currency-bangladeshi.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/currency-bangladeshi.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/currency-dollar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/currency-dollar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/currency-dollar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/currency-euro.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/currency-euro.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/currency-euro.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/currency-pound.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/currency-pound.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/currency-pound.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/currency-rupee.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/currency-rupee.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/currency-rupee.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/currency-yen.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/currency-yen.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/currency-yen.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/cursor-arrow-rays.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/cursor-arrow-rays.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/cursor-arrow-rays.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/cursor-arrow-ripple.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/cursor-arrow-ripple.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/cursor-arrow-ripple.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/device-phone-mobile.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/device-phone-mobile.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/device-phone-mobile.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/device-tablet.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/device-tablet.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/device-tablet.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/document.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/document.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/document.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/document-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/document-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/document-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/document-arrow-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/document-arrow-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/document-arrow-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/document-chart-bar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/document-chart-bar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/document-chart-bar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/document-check.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/document-check.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/document-check.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/document-duplicate.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/document-duplicate.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/document-duplicate.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/document-magnifying-glass.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/document-magnifying-glass.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/document-magnifying-glass.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/document-minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/document-minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/document-minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/document-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/document-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/document-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/document-text.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/document-text.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/document-text.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/ellipsis-horizontal.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/ellipsis-horizontal.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/ellipsis-horizontal.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/ellipsis-horizontal-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/ellipsis-horizontal-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/ellipsis-horizontal-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/ellipsis-vertical.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/ellipsis-vertical.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/ellipsis-vertical.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/envelope.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/envelope.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/envelope.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/envelope-open.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/envelope-open.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/envelope-open.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/exclamation-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/exclamation-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/exclamation-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/exclamation-triangle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/exclamation-triangle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/exclamation-triangle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/eye.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/eye.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/eye.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/eye-dropper.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/eye-dropper.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/eye-dropper.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/eye-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/eye-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/eye-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/face-frown.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/face-frown.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/face-frown.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/face-smile.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/face-smile.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/face-smile.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/film.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/film.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/film.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/finger-print.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/finger-print.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/finger-print.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/fire.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/fire.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/fire.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/flag.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/flag.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/flag.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/folder.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/folder.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/folder.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/folder-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/folder-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/folder-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/folder-minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/folder-minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/folder-minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/folder-open.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/folder-open.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/folder-open.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/folder-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/folder-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/folder-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/forward.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/forward.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/forward.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/funnel.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/funnel.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/funnel.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/gif.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/gif.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/gif.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/gift.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/gift.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/gift.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/gift-top.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/gift-top.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/gift-top.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/globe-alt.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/globe-alt.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/globe-alt.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/globe-americas.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/globe-americas.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/globe-americas.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/globe-asia-australia.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/globe-asia-australia.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/globe-asia-australia.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/globe-europe-africa.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/globe-europe-africa.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/globe-europe-africa.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/hand-raised.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/hand-raised.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/hand-raised.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/hand-thumb-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/hand-thumb-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/hand-thumb-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/hand-thumb-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/hand-thumb-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/hand-thumb-up.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/hashtag.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/hashtag.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/hashtag.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/heart.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/heart.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/heart.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/home.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/home.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/home.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/home-modern.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/home-modern.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/home-modern.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/identification.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/identification.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/identification.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/inbox.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/inbox.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/inbox.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/inbox-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/inbox-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/inbox-arrow-down.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/inbox-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/inbox-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/inbox-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/information-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/information-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/information-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/key.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/key.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/key.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/language.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/language.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/language.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/LICENSE
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/lifebuoy.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/lifebuoy.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/lifebuoy.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/light-bulb.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/light-bulb.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/light-bulb.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/link.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/link.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/link.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/list-bullet.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/list-bullet.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/list-bullet.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/lock-closed.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/lock-closed.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/lock-closed.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/lock-open.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/lock-open.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/lock-open.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/magnifying-glass.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/magnifying-glass.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/magnifying-glass.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/magnifying-glass-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/magnifying-glass-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/magnifying-glass-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/magnifying-glass-minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/magnifying-glass-minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/magnifying-glass-minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/magnifying-glass-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/magnifying-glass-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/magnifying-glass-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/map.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/map.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/map.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/map-pin.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/map-pin.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/map-pin.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/megaphone.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/megaphone.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/megaphone.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/microphone.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/microphone.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/microphone.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/minus-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/minus-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/minus-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/minus-small.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/minus-small.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/minus-small.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/moon.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/moon.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/moon.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/musical-note.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/musical-note.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/musical-note.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/newspaper.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/newspaper.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/newspaper.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/no-symbol.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/no-symbol.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/no-symbol.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/package.json
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/paint-brush.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/paint-brush.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/paint-brush.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/paper-airplane.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/paper-airplane.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/paper-airplane.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/paper-clip.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/paper-clip.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/paper-clip.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/pause.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/pause.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/pause.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/pause-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/pause-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/pause-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/pencil.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/pencil.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/pencil.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/pencil-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/pencil-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/pencil-square.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/phone.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/phone.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/phone.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/phone-arrow-down-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/phone-arrow-down-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/phone-arrow-down-left.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/phone-arrow-up-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/phone-arrow-up-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/phone-arrow-up-right.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/phone-x-mark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/phone-x-mark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/phone-x-mark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/photo.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/photo.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/photo.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/play.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/play.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/play.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/play-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/play-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/play-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/play-pause.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/play-pause.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/play-pause.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/plus-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/plus-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/plus-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/plus-small.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/plus-small.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/plus-small.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/power.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/power.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/power.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/presentation-chart-bar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/presentation-chart-bar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/presentation-chart-bar.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/presentation-chart-line.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/presentation-chart-line.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/presentation-chart-line.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/printer.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/printer.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/printer.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/puzzle-piece.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/puzzle-piece.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/puzzle-piece.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/qr-code.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/qr-code.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/qr-code.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/question-mark-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/question-mark-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/question-mark-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/queue-list.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/queue-list.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/queue-list.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/radio.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/radio.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/radio.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/README.md
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/receipt-percent.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/receipt-percent.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/receipt-percent.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/receipt-refund.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/receipt-refund.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/receipt-refund.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/rectangle-group.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/rectangle-group.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/rectangle-group.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/rectangle-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/rectangle-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/rectangle-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/rocket-launch.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/rocket-launch.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/rocket-launch.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/rss.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/rss.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/rss.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/scale.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/scale.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/scale.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/scissors.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/scissors.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/scissors.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/server.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/server.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/server.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/server-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/server-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/server-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/share.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/share.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/share.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/shield-check.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/shield-check.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/shield-check.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/shield-exclamation.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/shield-exclamation.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/shield-exclamation.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/shopping-bag.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/shopping-bag.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/shopping-bag.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/shopping-cart.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/shopping-cart.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/shopping-cart.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/signal.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/signal.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/signal.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/signal-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/signal-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/signal-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/sparkles.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/sparkles.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/sparkles.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/speaker-wave.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/speaker-wave.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/speaker-wave.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/speaker-x-mark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/speaker-x-mark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/speaker-x-mark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/square-2-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/square-2-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/square-2-stack.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/square-3-stack-3d.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/square-3-stack-3d.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/square-3-stack-3d.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/squares-2x2.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/squares-2x2.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/squares-2x2.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/squares-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/squares-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/squares-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/star.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/star.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/star.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/stop.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/stop.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/stop.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/stop-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/stop-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/stop-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/sun.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/sun.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/sun.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/swatch.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/swatch.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/swatch.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/table-cells.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/table-cells.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/table-cells.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/tag.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/tag.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/tag.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/ticket.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/ticket.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/ticket.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/trash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/trash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/trash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/trophy.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/trophy.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/trophy.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/truck.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/truck.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/truck.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/tv.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/tv.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/tv.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/user.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/user.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/user.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/user-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/user-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/user-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/user-group.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/user-group.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/user-group.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/user-minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/user-minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/user-minus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/user-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/user-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/user-plus.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/users.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/users.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/users.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/variable.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/variable.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/variable.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/video-camera.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/video-camera.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/video-camera.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/video-camera-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/video-camera-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/video-camera-slash.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/view-columns.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/view-columns.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/view-columns.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/viewfinder-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/viewfinder-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/viewfinder-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/wallet.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/wallet.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/wallet.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/wifi.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/wifi.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/wifi.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/window.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/window.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/window.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/wrench.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/wrench.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/wrench.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/wrench-screwdriver.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/wrench-screwdriver.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/wrench-screwdriver.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/x-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/x-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/x-circle.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/20/solid/x-mark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/outline/x-mark.svg
/src/NSeguin.Dev.Web/wwwroot/lib/heroicons/24/solid/x-mark.svg
*.swp

View file

@ -4,35 +4,36 @@
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.3.0" />
<PackageVersion Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.3.1" />
<PackageVersion Include="Azure.Identity" Version="1.10.4" />
<PackageVersion Include="Blazored.LocalStorage" Version="4.5.0" />
<PackageVersion Include="CommunityToolkit.Common" Version="8.2.2" />
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.2.2" />
<PackageVersion Include="JetBrains.Annotations" Version="2023.3.0" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.1" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="8.0.1" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.1" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.2" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="8.0.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="8.0.0" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.1" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.1" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.2" />
<PackageVersion Include="Microsoft.Authentication.WebAssembly.Msal" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.AzureAppConfiguration" Version="7.0.0" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Embedded" Version="8.0.2" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="8.0.2" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Options.DataAnnotations" Version="8.0.0" />
<PackageVersion Include="Microsoft.Identity.Client.Extensions.Msal" Version="4.57.0" />
<PackageVersion Include="Microsoft.Identity.Web" Version="2.17.0" />
<PackageVersion Include="Microsoft.Identity.Web.UI" Version="2.17.0" />
<PackageVersion Include="Microsoft.Web.LibraryManager.Build" Version="2.1.175" />
<PackageVersion Include="Microsoft.TypeScript.MSBuild" Version="5.3.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageVersion>
<PackageVersion Include="Microsoft.TypeScript.MSBuild" Version="5.3.3" />
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.507" />
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.8.0" />
</ItemGroup>
</Project>

View file

@ -1,3 +1,4 @@
#syntax=docker/dockerfile:1
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
RUN apt-get update && apt-get install -y \
@ -16,50 +17,59 @@ RUN apt-get update && apt-get install nodejs -y --no-install-recommends && rm -r
# update npm and install pnpm
RUN npm install -g npm && npm install -g pnpm && npm cache clean --force
WORKDIR /app
# install wasm-tools workload
RUN dotnet workload install wasm-tools
# Copy csproj and restore as distinct layers
COPY *.sln .
COPY src/NSeguin.Dev.Web/*.csproj ./src/NSeguin.Dev.Web/
COPY src/NSeguin.Dev.Web/packages.lock.json ./src/NSeguin.Dev.Web/
COPY src/NSeguin.Dev.Web/libman.json ./src/NSeguin.Dev.Web/
COPY src/NSeguin.Dev.Web.Client/*.csproj ./src/NSeguin.Dev.Web.Client/
COPY src/NSeguin.Dev.Web.Client/packages.lock.json ./src/NSeguin.Dev.Web.Client/
COPY src/NSeguin.Dev.Web.Common/*.csproj ./src/NSeguin.Dev.Web.Common/
COPY src/NSeguin.Dev.Web.Common/packages.lock.json ./src/NSeguin.Dev.Web.Common/
COPY targets/*.targets ./targets/
COPY targets/*.props ./targets/
COPY Directory.Build.props .
COPY Directory.Build.targets .
COPY Directory.Packages.props .
COPY nuget.config ./
COPY pnpm-lock.yaml ./
COPY tailwind.config.ts ./
COPY package.json ./
COPY global.json ./
RUN dotnet tool restore
RUN dotnet restore --configfile nuget.config --locked-mode
# Copy everything else and build
COPY . ./
RUN dotnet publish ./src/NSeguin.Dev.Web/NSeguin.Dev.Web.csproj -c Release -o out /p:RestoreLockedMode=true
# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY --from=build /app/out ./
# install dotnet tools
COPY --link .config/dotnet-tools.json .config/
RUN dotnet tool restore
# restore libman dependencies
COPY --link src/NSeguin.Dev.Web/libman.json ./src/NSeguin.Dev.Web/
RUN cd src/NSeguin.Dev.Web && dotnet libman restore
# copy and restore dotnet solution
COPY --link *.sln .
COPY --link global.json ./
COPY --link nuget.config ./
COPY --link targets/*.targets ./targets/
COPY --link targets/*.props ./targets/
COPY --link Directory.Build.props .
COPY --link Directory.Build.targets .
COPY --link Directory.Packages.props .
COPY --link src/NSeguin.Dev.Web/*.csproj ./src/NSeguin.Dev.Web/
COPY --link src/NSeguin.Dev.Web.Client/*.csproj ./src/NSeguin.Dev.Web.Client/
COPY --link src/NSeguin.Dev.Web.Common/*.csproj ./src/NSeguin.Dev.Web.Common/
COPY --link src/NSeguin.Dev.Web.HeroIcons.SourceGenerator/*.csproj ./src/NSeguin.Dev.Web.HeroIcons.SourceGenerator/
COPY --link src/NSeguin.Dev.Web/package.json ./src/NSeguin.Dev.Web/
COPY --link src/NSeguin.Dev.Web/pnpm-lock.yaml ./src/NSeguin.Dev.Web/
COPY --link src/NSeguin.Dev.Web/tailwind.config.ts ./src/NSeguin.Dev.Web/
RUN cd src/NSeguin.Dev.Web && pnpm install --frozen-lockfile
RUN dotnet restore --configfile nuget.config --locked-mode --force-evaluate
# copy everything else and build solution
COPY --link ./ .
ENV NODE_ENV=production
ENV CI=true
ENV SkipNodeBuild=true
RUN cd src/NSeguin.Dev.Web && pnpm run css:build
RUN dotnet publish -c Release -o publish /p:RestoreLockedMode=true src/NSeguin.Dev.Web/NSeguin.Dev.Web.csproj
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
# authenticate with Azure CLI
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "NSeguin.Dev.Web.dll"]

View file

@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NSeguin.Dev.Web", "src\NSeg
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NSeguin.Dev.Web.Common", "src\NSeguin.Dev.Web.Common\NSeguin.Dev.Web.Common.csproj", "{EC472D1C-8319-4454-BE67-66DDB70C2512}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NSeguin.Dev.Web.HeroIcons.SourceGenerator", "src\NSeguin.Dev.Web.HeroIcons.SourceGenerator\NSeguin.Dev.Web.HeroIcons.SourceGenerator.csproj", "{8F18495F-F6A0-4144-B29F-055E03032A60}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -32,10 +34,15 @@ Global
{EC472D1C-8319-4454-BE67-66DDB70C2512}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EC472D1C-8319-4454-BE67-66DDB70C2512}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EC472D1C-8319-4454-BE67-66DDB70C2512}.Release|Any CPU.Build.0 = Release|Any CPU
{8F18495F-F6A0-4144-B29F-055E03032A60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8F18495F-F6A0-4144-B29F-055E03032A60}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8F18495F-F6A0-4144-B29F-055E03032A60}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8F18495F-F6A0-4144-B29F-055E03032A60}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{17BD1A48-1797-469E-8D83-24A5CCA6B131} = {30B827BB-3B45-4D5C-B989-5471C7DE497B}
{D9AAF405-A6F0-4B92-96C5-825F02E46FCF} = {30B827BB-3B45-4D5C-B989-5471C7DE497B}
{EC472D1C-8319-4454-BE67-66DDB70C2512} = {30B827BB-3B45-4D5C-B989-5471C7DE497B}
{8F18495F-F6A0-4144-B29F-055E03032A60} = {30B827BB-3B45-4D5C-B989-5471C7DE497B}
EndGlobalSection
EndGlobal
EndGlobal

View file

@ -1,3 +1,5 @@
# NSeguin.Dev.Web
WIP
![release](https://git.nseguin.dev/nseguin/website/badges/release.svg)

View file

@ -1,4 +1,3 @@
version: '3.8'
services:
web:
image: nseguin42/website:latest
@ -6,4 +5,4 @@ services:
- .env
ports:
- "42080:8080"
entrypoint: dotnet NSeguin.Dev.Web.dll
entrypoint: dotnet NSeguin.Dev.Web.dll

View file

View file

@ -1,20 +0,0 @@
{
"name": "nseguin.dev.web",
"module": "index.ts",
"type": "module",
"devDependencies": {
"bun-types": "latest",
"tailwindcss": "^3.3.6 "
},
"peerDependencies": {
"typescript": "^5.0.0"
},
"scripts": {
"css:build": "pnpm tailwindcss -i ./src/NSeguin.Dev.Web/wwwroot/css/site.css -o ./src/NSeguin.Dev.Web/wwwroot/css/styles.css -c ./tailwind.config.ts --minify",
"css:watch": "pnpm tailwindcss -i ./src/NSeguin.Dev.Web/wwwroot/css/site.css -o ./src/NSeguin.Dev.Web/wwwroot/css/styles.css -c ./tailwind.config.ts --watch"
},
"dependencies": {
"heroicons": "^2.0.18",
"tailwind-nord": "^1.3.0"
}
}

View file

@ -1,595 +0,0 @@
lockfileVersion: '6.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
dependencies:
heroicons:
specifier: ^2.0.18
version: 2.0.18
tailwind-nord:
specifier: ^1.3.0
version: 1.3.0
typescript:
specifier: ^5.0.0
version: 5.3.3
devDependencies:
bun-types:
specifier: latest
version: 1.0.15
tailwindcss:
specifier: '^3.3.6 '
version: 3.3.6
packages:
/@alloc/quick-lru@5.2.0:
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
dev: true
/@jridgewell/gen-mapping@0.3.3:
resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
engines: {node: '>=6.0.0'}
dependencies:
'@jridgewell/set-array': 1.1.2
'@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/trace-mapping': 0.3.20
dev: true
/@jridgewell/resolve-uri@3.1.1:
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
engines: {node: '>=6.0.0'}
dev: true
/@jridgewell/set-array@1.1.2:
resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
engines: {node: '>=6.0.0'}
dev: true
/@jridgewell/sourcemap-codec@1.4.15:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
dev: true
/@jridgewell/trace-mapping@0.3.20:
resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==}
dependencies:
'@jridgewell/resolve-uri': 3.1.1
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
/@nodelib/fs.scandir@2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
dependencies:
'@nodelib/fs.stat': 2.0.5
run-parallel: 1.2.0
dev: true
/@nodelib/fs.stat@2.0.5:
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
engines: {node: '>= 8'}
dev: true
/@nodelib/fs.walk@1.2.8:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
dependencies:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.15.0
dev: true
/any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
dev: true
/anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
dev: true
/arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
dev: true
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: true
/binary-extensions@2.2.0:
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
engines: {node: '>=8'}
dev: true
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: true
/braces@3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
engines: {node: '>=8'}
dependencies:
fill-range: 7.0.1
dev: true
/bun-types@1.0.15:
resolution: {integrity: sha512-XkEvWLV1JIhcVIpf2Lu6FXnZUxRUkQVJmgY+VT7os6Tk5X1nkXx11q4Rtu6txsqpDJZfUeZXblnnD59K+6wsVA==}
dev: true
/camelcase-css@2.0.1:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
dev: true
/chokidar@3.5.3:
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
engines: {node: '>= 8.10.0'}
dependencies:
anymatch: 3.1.3
braces: 3.0.2
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.3
dev: true
/commander@4.1.1:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
dev: true
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true
/cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
hasBin: true
dev: true
/didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
dev: true
/dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
dev: true
/fast-glob@3.3.2:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
dependencies:
'@nodelib/fs.stat': 2.0.5
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.5
dev: true
/fastq@1.15.0:
resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
dependencies:
reusify: 1.0.4
dev: true
/fill-range@7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'}
dependencies:
to-regex-range: 5.0.1
dev: true
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: true
/fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
dev: true
optional: true
/function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
dev: true
/glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
dependencies:
is-glob: 4.0.3
dev: true
/glob-parent@6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
dependencies:
is-glob: 4.0.3
dev: true
/glob@7.1.6:
resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: true
/hasown@2.0.0:
resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
dev: true
/heroicons@2.0.18:
resolution: {integrity: sha512-3iaqznaz5GJ8Mox/eDfKHo7tYKuPiZV4vbg6pB6wjJhBa7ZKQlXT1KuUnsjkEiPy/ezyiqppOX6wUqYguMIq8w==}
dev: false
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: true
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: true
/is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
dependencies:
binary-extensions: 2.2.0
dev: true
/is-core-module@2.13.1:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
dependencies:
hasown: 2.0.0
dev: true
/is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
dev: true
/is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
dependencies:
is-extglob: 2.1.1
dev: true
/is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
dev: true
/jiti@1.21.0:
resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
hasBin: true
dev: true
/lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'}
dev: true
/lilconfig@3.0.0:
resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==}
engines: {node: '>=14'}
dev: true
/lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
dev: true
/merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
dev: true
/micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
dependencies:
braces: 3.0.2
picomatch: 2.3.1
dev: true
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: true
/mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
dependencies:
any-promise: 1.3.0
object-assign: 4.1.1
thenify-all: 1.6.0
dev: true
/nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
dev: true
/normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
dev: true
/object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
dev: true
/object-hash@3.0.0:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
dev: true
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
dev: true
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
dev: true
/path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
/picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
dev: true
/picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
dev: true
/pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
dev: true
/pirates@4.0.6:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
dev: true
/postcss-import@15.1.0(postcss@8.4.32):
resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
engines: {node: '>=14.0.0'}
peerDependencies:
postcss: ^8.0.0
dependencies:
postcss: 8.4.32
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.8
dev: true
/postcss-js@4.0.1(postcss@8.4.32):
resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
engines: {node: ^12 || ^14 || >= 16}
peerDependencies:
postcss: ^8.4.21
dependencies:
camelcase-css: 2.0.1
postcss: 8.4.32
dev: true
/postcss-load-config@4.0.2(postcss@8.4.32):
resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
engines: {node: '>= 14'}
peerDependencies:
postcss: '>=8.0.9'
ts-node: '>=9.0.0'
peerDependenciesMeta:
postcss:
optional: true
ts-node:
optional: true
dependencies:
lilconfig: 3.0.0
postcss: 8.4.32
yaml: 2.3.4
dev: true
/postcss-nested@6.0.1(postcss@8.4.32):
resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.2.14
dependencies:
postcss: 8.4.32
postcss-selector-parser: 6.0.13
dev: true
/postcss-selector-parser@6.0.13:
resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
engines: {node: '>=4'}
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
dev: true
/postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
dev: true
/postcss@8.4.32:
resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.7
picocolors: 1.0.0
source-map-js: 1.0.2
dev: true
/queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: true
/read-cache@1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
dependencies:
pify: 2.3.0
dev: true
/readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
dependencies:
picomatch: 2.3.1
dev: true
/resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
dependencies:
is-core-module: 2.13.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
/reusify@1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
dev: true
/run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
dependencies:
queue-microtask: 1.2.3
dev: true
/source-map-js@1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
dev: true
/sucrase@3.34.0:
resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==}
engines: {node: '>=8'}
hasBin: true
dependencies:
'@jridgewell/gen-mapping': 0.3.3
commander: 4.1.1
glob: 7.1.6
lines-and-columns: 1.2.4
mz: 2.7.0
pirates: 4.0.6
ts-interface-checker: 0.1.13
dev: true
/supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
dev: true
/tailwind-nord@1.3.0:
resolution: {integrity: sha512-F5tdTG3n9zzctAuRqjX2sdpmwSjbYC/HQdXSg/TQIxaynO1DNvnqBaE+IhmPbQIttMvvY54KiYMDXJqMdQLi1Q==}
dev: false
/tailwindcss@3.3.6:
resolution: {integrity: sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==}
engines: {node: '>=14.0.0'}
hasBin: true
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
chokidar: 3.5.3
didyoumean: 1.2.2
dlv: 1.1.3
fast-glob: 3.3.2
glob-parent: 6.0.2
is-glob: 4.0.3
jiti: 1.21.0
lilconfig: 2.1.0
micromatch: 4.0.5
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.0.0
postcss: 8.4.32
postcss-import: 15.1.0(postcss@8.4.32)
postcss-js: 4.0.1(postcss@8.4.32)
postcss-load-config: 4.0.2(postcss@8.4.32)
postcss-nested: 6.0.1(postcss@8.4.32)
postcss-selector-parser: 6.0.13
resolve: 1.22.8
sucrase: 3.34.0
transitivePeerDependencies:
- ts-node
dev: true
/thenify-all@1.6.0:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
dependencies:
thenify: 3.3.1
dev: true
/thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
dependencies:
any-promise: 1.3.0
dev: true
/to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
dependencies:
is-number: 7.0.0
dev: true
/ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
dev: true
/typescript@5.3.3:
resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
engines: {node: '>=14.17'}
hasBin: true
dev: false
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
dev: true
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: true
/yaml@2.3.4:
resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
engines: {node: '>= 14'}
dev: true

View file

@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"microsoft.web.librarymanager.cli": {
"version": "2.1.175",
"commands": [
"libman"
]
}
}
}

View file

@ -17,20 +17,4 @@
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"/>
<PackageReference Include="Microsoft.Extensions.Http"/>
</ItemGroup>
<ItemGroup>
<_ContentIncludedByDefault Remove="wwwroot\css\app.css"/>
<_ContentIncludedByDefault Remove="wwwroot\css\bootstrap\bootstrap.min.css"/>
<_ContentIncludedByDefault Remove="wwwroot\css\bootstrap\bootstrap.min.css.map"/>
<_ContentIncludedByDefault Remove="Components\Shared\CascadingDarkMode.razor"/>
<_ContentIncludedByDefault Remove="Components\Shared\DarkModeSwitcher.razor"/>
</ItemGroup>
<ItemGroup>
<Content Update="packages.lock.json">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</Content>
</ItemGroup>
</Project>

View file

@ -8,7 +8,7 @@
@using NSeguin.Dev.Web.Services
@inject IContactService ContactService
<div class="max-w-lg lg:ms-auto mx-auto text-center @(Model.IsHidden ? "hidden" : "")" id="@Id">
<div class="max-w-lg lg:ms-auto mx-auto text-center @(Model.IsHidden ? "hidden" : "")" id="@Id" @ref="_elementReference">
<div class="py-16 px-7 rounded-md bg-white shadow-blue-100">
<EditForm Model="@Model" OnValidSubmit="@Model.Send" class="w-full">
<DataAnnotationsValidator/>
@ -40,14 +40,13 @@
<ValidationMessage For="@(() => Model.Message)" class="text-red-500"/>
<InputTextArea @bind-Value="Model.Message" id="contact-form-message" Placeholder="Enter your message here..." rows="5" cols="" class="w-full border border-gray-300 rounded-md py-2 px-3 focus:outline-none focus:border-blue-700"></InputTextArea>
</div>
<div class="md:col-span-2" @ref="_elementReference">
<div class="md:col-span-2">
<button type="submit" class="py-3 text-base font-medium rounded text-slate-50 bg-blue-600 w-full hover:bg-blue-700 transition duration-300">Submit</button>
</div>
@if (Model.IsSending)
{
<Spinner AltText="Sending..."></Spinner>
}
</div>
}
else
@ -84,7 +83,7 @@
{
Model.Sending += OnSending;
Model.Sent += OnSent;
Model.PropertyChanged += (_, __) =>
Model.PropertyChanged += (_, _) =>
{
InvokeAsync(StateHasChanged);
};

View file

@ -1,365 +0,0 @@
{
"version": 2,
"dependencies": {
"net8.0": {
"Microsoft.AspNetCore.Components.WebAssembly": {
"type": "Direct",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "fOGM6Wc6QULk8GVH+QNmzRjifQhAMaEcWUaxxJGxvyfSQHdHxGP/vj89xvhJI7N42BRqULCEMlQu3UpDpompUQ==",
"dependencies": {
"Microsoft.AspNetCore.Components.Web": "8.0.1",
"Microsoft.Extensions.Configuration.Binder": "8.0.1",
"Microsoft.Extensions.Configuration.Json": "8.0.0",
"Microsoft.Extensions.Logging": "8.0.0",
"Microsoft.JSInterop.WebAssembly": "8.0.1"
}
},
"Microsoft.AspNetCore.Components.WebAssembly.DevServer": {
"type": "Direct",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "dhHTKbhAg1Z+0P4qP1Sbb9IhBXvvoGKtffBjpQElPhYKWxuQilStol0p5zeAOvi6UnXpI32h9YCWLKuJyp8FCA=="
},
"Microsoft.Extensions.Http": {
"type": "Direct",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "cWz4caHwvx0emoYe7NkHPxII/KkTI8R/LC9qdqJqnKv2poTJ4e2qqPGQqvRoQ5kaSA4FU5IV3qFAuLuOhoqULQ==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Diagnostics": "8.0.0",
"Microsoft.Extensions.Logging": "8.0.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.NET.ILLink.Tasks": {
"type": "Direct",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "ADdJXuKNjwZDfBmybMnpvwd5CK3gp92WkWqqeQhW4W+q4MO3Qaa9QyW2DcFLAvCDMcCWxT5hRXqGdv13oon7nA=="
},
"Microsoft.NET.Sdk.WebAssembly.Pack": {
"type": "Direct",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "WE5sCiA6FbpmHBA7SeIApjBhBFfHQlWTqn5N5jCTncpSHFchjsc6hyXhPjS0PqIV8eiWayNmJpN+VmV1nHFVAw=="
},
"StyleCop.Analyzers": {
"type": "Direct",
"requested": "[1.2.0-beta.507, )",
"resolved": "1.2.0-beta.507",
"contentHash": "/FtugDT66cKJJ+GGH7rNpG6UDrT4iIWz45M6lrXXHobDUFDHw+q5VgkbiR+6ffTO564ge7w6fQh/eoQhVdJO8Q==",
"dependencies": {
"StyleCop.Analyzers.Unstable": "1.2.0.507"
}
},
"Microsoft.AspNetCore.Authorization": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "RYBk9d+Zb6V2u2hpgSSlCTvV6HvNf8T8OA7coLn+J4sdWLbdVkb8/b2tpRRENTGXK31ayCvtUPhP4wv2ZMn4cQ==",
"dependencies": {
"Microsoft.AspNetCore.Metadata": "8.0.1",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.1"
}
},
"Microsoft.AspNetCore.Components": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "nHn5ZSyL/5HAa2Lh9CCInxMvIBsifLbkt3GkeiIdWe4uWhjZ+O/ykD1wjKoUnjVsrinaO2OZocqujXk2jnE+8g==",
"dependencies": {
"Microsoft.AspNetCore.Authorization": "8.0.1",
"Microsoft.AspNetCore.Components.Analyzers": "8.0.1"
}
},
"Microsoft.AspNetCore.Components.Analyzers": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "8+Cv84+XYd/xKaAPAZvJBg9ZKxpH7sszs5MjsGOw3inmDa3MOlGHBkSbki2AzMuK0kpj9vu9mWhcJf7/6Jd8qQ=="
},
"Microsoft.AspNetCore.Components.Forms": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "OT05sVxJVJG8+ODSOadxy0UWBnFMu4Wb3XszqRRaGhcaCe4lEIxg9OjR8zo77r6w/AI9LoT/Enou+v02q7yZOA==",
"dependencies": {
"Microsoft.AspNetCore.Components": "8.0.1"
}
},
"Microsoft.AspNetCore.Components.Web": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "EcM5S0goZOMZckt87Bb7IAbDivtMzw2DdtMLgO/87WH4NZTHLuHykNtufIWsR1ZTbSR8RfBeEE0QuAagnTsAWg==",
"dependencies": {
"Microsoft.AspNetCore.Components": "8.0.1",
"Microsoft.AspNetCore.Components.Forms": "8.0.1",
"Microsoft.Extensions.DependencyInjection": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0",
"Microsoft.JSInterop": "8.0.1",
"System.IO.Pipelines": "8.0.0"
}
},
"Microsoft.AspNetCore.Metadata": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "8Uyh4D/9Z9xfL1f6Ap9Y12q/JU717sqWNMxCD7lytyK28YFtLIYG1jSCQOq+TvPDzgIaaGXGtLq+lM8fcAisMg=="
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==",
"dependencies": {
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Configuration.FileExtensions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "McP+Lz/EKwvtCv48z0YImw+L1gi1gy5rHhNaNIY2CrjloV+XY8gydT8DjMR6zWeL13AFK+DioVpppwAuO1Gi1w==",
"dependencies": {
"Microsoft.Extensions.Configuration": "8.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
"Microsoft.Extensions.FileProviders.Physical": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Configuration.Json": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "C2wqUoh9OmRL1akaCcKSTmRU8z0kckfImG7zLNI8uyi47Lp+zd5LWAD17waPQEqCz3ioWOCrFUo+JJuoeZLOBw==",
"dependencies": {
"Microsoft.Extensions.Configuration": "8.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "8.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
"System.Text.Json": "8.0.0"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Diagnostics": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==",
"dependencies": {
"Microsoft.Extensions.Configuration": "8.0.0",
"Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0"
}
},
"Microsoft.Extensions.Diagnostics.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0",
"System.Diagnostics.DiagnosticSource": "8.0.0"
}
},
"Microsoft.Extensions.FileProviders.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==",
"dependencies": {
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.FileProviders.Physical": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==",
"dependencies": {
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
"Microsoft.Extensions.FileSystemGlobbing": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.FileSystemGlobbing": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ=="
},
"Microsoft.Extensions.Logging": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "8.0.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.JSInterop": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "ePBj1uoRa+KZnkQwB3Cjxq025QT+erIcDgbDgc+yGb0FCzrE38gSBWMfbwlASPX1fifMnCwHzYvt2/gUFVp3qw=="
},
"Microsoft.JSInterop.WebAssembly": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "yvWSzDRBD0tfEyT+RUni2Nct5iKHP2ZtOnh8fU/6fkFpiISSkXZRON9Rg+G3258EnFGktzpYTSgq5Qo8L9Ax0g==",
"dependencies": {
"Microsoft.JSInterop": "8.0.1"
}
},
"StyleCop.Analyzers.Unstable": {
"type": "Transitive",
"resolved": "1.2.0.507",
"contentHash": "gTY3IQdRqDJ4hbhSA3e/R48oE8b/OiKfvwkt1QdNVfrJK2gMHBV8ldaHJ885jxWZfllK66soa/sdcjh9bX49Tw=="
},
"System.Diagnostics.DiagnosticSource": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ=="
},
"System.IO.Pipelines": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA=="
},
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
},
"System.Text.Json": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==",
"dependencies": {
"System.Text.Encodings.Web": "8.0.0"
}
},
"nseguin.dev.web.common": {
"type": "Project",
"dependencies": {
"Blazored.LocalStorage": "[4.5.0, )",
"CommunityToolkit.Common": "[8.2.2, )",
"CommunityToolkit.Mvvm": "[8.2.2, )",
"JetBrains.Annotations": "[2023.3.0, )",
"Microsoft.Extensions.Configuration": "[8.0.0, )",
"Microsoft.Extensions.Configuration.Binder": "[8.0.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[8.0.0, )",
"Microsoft.Extensions.Options": "[8.0.1, )",
"Microsoft.Extensions.Options.ConfigurationExtensions": "[8.0.0, )",
"Microsoft.Extensions.Options.DataAnnotations": "[8.0.0, )"
}
},
"Blazored.LocalStorage": {
"type": "CentralTransitive",
"requested": "[4.5.0, )",
"resolved": "4.5.0",
"contentHash": "6nZuJwA7zNIKx83IsObiHXZb09ponJOpCClU3en+hI8ZFvrOKXeOw+H7TegQZQrvdR1n9fkrVkEBQZg8vx6ZTw==",
"dependencies": {
"Microsoft.AspNetCore.Components.Web": "8.0.0"
}
},
"CommunityToolkit.Common": {
"type": "CentralTransitive",
"requested": "[8.2.2, )",
"resolved": "8.2.2",
"contentHash": "8/enuV1R68d0hK66UO8/HQ3yEsMjxUqondiEXlA499XB3tYgIqhCM+ITe8fHfH3l4JN3gY6h21SvkJnxfaG3NQ=="
},
"CommunityToolkit.Mvvm": {
"type": "CentralTransitive",
"requested": "[8.2.2, )",
"resolved": "8.2.2",
"contentHash": "r0g0k9tGYdrnz8R7T3x5UiokDffeevzK/2P/9SBL6fqLgN8B157MIi/bVUWI1KAz6ZorZrK9AdABCWUeXZZsvA=="
},
"JetBrains.Annotations": {
"type": "CentralTransitive",
"requested": "[2023.3.0, )",
"resolved": "2023.3.0",
"contentHash": "PHfnvdBUdGaTVG9bR/GEfxgTwWM0Z97Y6X3710wiljELBISipSfF5okn/vz+C2gfO+ihoEyVPjaJwn8ZalVukA=="
},
"Microsoft.Extensions.Configuration": {
"type": "CentralTransitive",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "CentralTransitive",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "2UKFJnLiBt7Od6nCnTqP9rTIUNhzmn9Hv1l2FchyKbz8xieB9ULwZTbQZMw+M24Qw3F5dzzH1U9PPleN0LNLOQ==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "CentralTransitive",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Options": {
"type": "CentralTransitive",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "wmpp+BSU3oGifaev6Z9rrlwHoITLFfpVOSbgBrOXjkbJSCXnZVCsoRGE5c3fJFI4VlNgnNkNlI9y+5jC4fmOEA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Options.ConfigurationExtensions": {
"type": "CentralTransitive",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.Configuration.Binder": "8.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Options.DataAnnotations": {
"type": "CentralTransitive",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "z6p6q/N/hiU19A9tK7pjhXHpiYArO4oIICipxUviBEIOiDIoKRO7k6qItvw7alKcLtfHZOWmspuSKpvIvH0N8w==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0"
}
}
},
"net8.0/browser-wasm": {
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
}
}
}
}

View file

@ -30,7 +30,7 @@ public partial class ContactFormVM : ObservableValidator
private bool _isSent;
[ObservableProperty]
private bool _isHidden;
private bool _isHidden = true;
public ContactFormVM()
{

View file

@ -4,7 +4,6 @@
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RunAOTCompilation>true</RunAOTCompilation>
<WasmStripILAfterAOT>true</WasmStripILAfterAOT>
<RootNamespace>NSeguin.Dev.Web</RootNamespace>
@ -27,14 +26,4 @@
</PackageReference>
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.Extensions.Configuration.Abstractions">
<HintPath>..\..\..\..\..\.nuget\packages\microsoft.extensions.configuration.abstractions\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.Abstractions.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Folder Include="Components\" />
</ItemGroup>
</Project>

View file

@ -1,201 +0,0 @@
{
"version": 2,
"dependencies": {
"net8.0": {
"Blazored.LocalStorage": {
"type": "Direct",
"requested": "[4.5.0, )",
"resolved": "4.5.0",
"contentHash": "6nZuJwA7zNIKx83IsObiHXZb09ponJOpCClU3en+hI8ZFvrOKXeOw+H7TegQZQrvdR1n9fkrVkEBQZg8vx6ZTw==",
"dependencies": {
"Microsoft.AspNetCore.Components.Web": "8.0.0"
}
},
"CommunityToolkit.Common": {
"type": "Direct",
"requested": "[8.2.2, )",
"resolved": "8.2.2",
"contentHash": "8/enuV1R68d0hK66UO8/HQ3yEsMjxUqondiEXlA499XB3tYgIqhCM+ITe8fHfH3l4JN3gY6h21SvkJnxfaG3NQ=="
},
"CommunityToolkit.Mvvm": {
"type": "Direct",
"requested": "[8.2.2, )",
"resolved": "8.2.2",
"contentHash": "r0g0k9tGYdrnz8R7T3x5UiokDffeevzK/2P/9SBL6fqLgN8B157MIi/bVUWI1KAz6ZorZrK9AdABCWUeXZZsvA=="
},
"JetBrains.Annotations": {
"type": "Direct",
"requested": "[2023.3.0, )",
"resolved": "2023.3.0",
"contentHash": "PHfnvdBUdGaTVG9bR/GEfxgTwWM0Z97Y6X3710wiljELBISipSfF5okn/vz+C2gfO+ihoEyVPjaJwn8ZalVukA=="
},
"Microsoft.Extensions.Configuration": {
"type": "Direct",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "Direct",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "2UKFJnLiBt7Od6nCnTqP9rTIUNhzmn9Hv1l2FchyKbz8xieB9ULwZTbQZMw+M24Qw3F5dzzH1U9PPleN0LNLOQ==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Direct",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Options": {
"type": "Direct",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "wmpp+BSU3oGifaev6Z9rrlwHoITLFfpVOSbgBrOXjkbJSCXnZVCsoRGE5c3fJFI4VlNgnNkNlI9y+5jC4fmOEA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Options.ConfigurationExtensions": {
"type": "Direct",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.Configuration.Binder": "8.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Options.DataAnnotations": {
"type": "Direct",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "z6p6q/N/hiU19A9tK7pjhXHpiYArO4oIICipxUviBEIOiDIoKRO7k6qItvw7alKcLtfHZOWmspuSKpvIvH0N8w==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.TypeScript.MSBuild": {
"type": "Direct",
"requested": "[5.3.3, )",
"resolved": "5.3.3",
"contentHash": "sFxHtBLDgNp+vhCS0usd7F/5NfWSGJ7KiYy8YLKeQit19szQZ6oqxRYyOmQsFlZt2GLHpTkXffFqjZIDvGCdaQ=="
},
"StyleCop.Analyzers": {
"type": "Direct",
"requested": "[1.2.0-beta.507, )",
"resolved": "1.2.0-beta.507",
"contentHash": "/FtugDT66cKJJ+GGH7rNpG6UDrT4iIWz45M6lrXXHobDUFDHw+q5VgkbiR+6ffTO564ge7w6fQh/eoQhVdJO8Q==",
"dependencies": {
"StyleCop.Analyzers.Unstable": "1.2.0.507"
}
},
"Microsoft.AspNetCore.Authorization": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "OGIGJMnlWvQgcweHcv1Mq/P24Zx/brUHeEdD05NzqkSXmQSnFomTvVyCuBtCXT4JPfv2m70y1RSocmd9bIbJRg==",
"dependencies": {
"Microsoft.AspNetCore.Metadata": "8.0.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.AspNetCore.Components": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "kqspqWo3lT+rrSd39kvrV7SZYl0znYZQbQ8SJaHjDA8ffMPV6BkfVe0i6LvxRPwq/agwSWdIDq2j4x+78Frypg==",
"dependencies": {
"Microsoft.AspNetCore.Authorization": "8.0.0",
"Microsoft.AspNetCore.Components.Analyzers": "8.0.0"
}
},
"Microsoft.AspNetCore.Components.Analyzers": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "lJMa9kQDw3vkqcMMbuicIpyax7QH6imQFbLRzVqJzrGs5LN954IPaJVkDzRCEXFVAN24Cml6g4mEF3b0D7Oa+Q=="
},
"Microsoft.AspNetCore.Components.Forms": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "iiYB/7Sl/vTURO4EiTUCmfIXujlJOl+Gh7nknCFhvFQ+kKMFFXYcrszYwLN9aQSolpswc/A9a78KL59/UIezig==",
"dependencies": {
"Microsoft.AspNetCore.Components": "8.0.0"
}
},
"Microsoft.AspNetCore.Components.Web": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "aokUKvFoNqxR6bf0+iKrDfQ79OLHWYn5UGYp5MU65/il1vuRK7MAF18oGj7QgiZJUu3cMAZjCFkHbsWLhQxCsA==",
"dependencies": {
"Microsoft.AspNetCore.Components": "8.0.0",
"Microsoft.AspNetCore.Components.Forms": "8.0.0",
"Microsoft.Extensions.DependencyInjection": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0",
"Microsoft.JSInterop": "8.0.0",
"System.IO.Pipelines": "8.0.0"
}
},
"Microsoft.AspNetCore.Metadata": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "OmuSztiZMitRTYlbMNDkBk3BinSsVcOApSNBAsrw+KYNJh6ALarPhWLlKdtvMgrKzpyCY06xtLAjTmQLURHSlQ=="
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==",
"dependencies": {
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.JSInterop": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "qQqASbHxWIddssdEBKUQ/49j21SEstiho6VAepPQa9eISLCBCE6wq0m3YaB6cpdF5U+AWX5F3FvDfmssql3xtw=="
},
"StyleCop.Analyzers.Unstable": {
"type": "Transitive",
"resolved": "1.2.0.507",
"contentHash": "gTY3IQdRqDJ4hbhSA3e/R48oE8b/OiKfvwkt1QdNVfrJK2gMHBV8ldaHJ885jxWZfllK66soa/sdcjh9bX49Tw=="
},
"System.IO.Pipelines": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA=="
}
}
}
}

View file

@ -0,0 +1,79 @@
using System.Text;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Text;
namespace NSeguin.Dev.Web.HeroIcons.SourceGenerator;
[Generator]
public class HeroIconsSourceGenerator : IIncrementalGenerator
{
private const string PathBase = "wwwroot/lib/heroicons/24/solid";
public void Initialize(IncrementalGeneratorInitializationContext context)
{
var files = context.AdditionalTextsProvider.Where(
t => t.Path.Contains(PathBase) && t.Path.EndsWith(".svg"));
context.RegisterSourceOutput(files, GenerateCode);
}
private static void GenerateCode(SourceProductionContext context, AdditionalText file)
{
var template = new HeroIconPropertyTemplate(file.Path);
var source = template.Code;
context.AddSource(template.OutputFileName, SourceText.From(source, Encoding.UTF8));
}
private class HeroIconPropertyTemplate
{
public HeroIconPropertyTemplate(string path)
{
Path = path.IndexOf(PathBase, StringComparison.Ordinal) switch
{
-1 => throw new ArgumentException("Path must contain the base path", nameof(path)),
var index => path.Substring(index + PathBase.Length + 1)
};
SvgFileName = System.IO.Path.GetFileName(path);
PropertyName = ToPascalCase(System.IO.Path.GetFileNameWithoutExtension(path));
}
public string Path { get; }
public string SvgFileName { get; }
public string OutputFileName => $"HeroIcon_{PropertyName}.g.cs";
public string PropertyName { get; }
public string Code =>
$$"""
// <auto-generated/>
namespace NSeguin.Dev.Web.Components.Shared.HeroIcons
{
public partial class HeroIcon
{
/// <summary>
/// Gets the <see cref="HeroIconKind"/> for the <c>{{SvgFileName}}</c> icon.
/// </summary>
public static readonly HeroIconKind {{PropertyName}} = new HeroIconKind("{{SvgFileName}}");
}
}
""";
private static string ToPascalCase(string value)
{
if (string.IsNullOrEmpty(value))
{
return value;
}
return string.Join(
string.Empty,
value.Split(['-', '_'], StringSplitOptions.RemoveEmptyEntries)
.Select(
word => word.Length == 1
? word.ToUpperInvariant()
: char.ToUpperInvariant(word[0]) + word.Substring(1)));
}
}
}

View file

@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<IsPackable>false</IsPackable>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
<IsRoslynComponent>true</IsRoslynComponent>
<PackageId>NSeguin.Dev.Web.HeroIcons.SourceGenerator</PackageId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp"/>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces"/>
</ItemGroup>
</Project>

View file

@ -0,0 +1,9 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"DebugRoslynSourceGenerator": {
"commandName": "DebugRoslynComponent",
"targetProject": "../NSeguin.Dev.Web.HeroIconSourceGenerator.Sample/NSeguin.Dev.Web.HeroIconSourceGenerator.Sample.csproj"
}
}
}

View file

@ -1,19 +1,30 @@
<!DOCTYPE html>
@using Microsoft.AspNetCore.Mvc.ViewFeatures
@using JetBrains.Annotations
@inject IFileVersionProvider FileVersionProvider
<!DOCTYPE html>
<html lang="en">
<!--suppress HtmlRequiredTitleElement -->
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<base href="/"/>
<link rel="stylesheet" href="css/styles.css" asp-append-version="true"/>
<link rel="stylesheet" href="app.css"/>
<link rel="stylesheet" href="NSeguin.Dev.Web.styles.css"/>
<base href="@PathBase"/>
<link rel="stylesheet" href="@AddVersionToPath("css/styles.css")"/>
<link rel="stylesheet" href="@AddVersionToPath("app.css")"/>
<link rel="icon" type="image/png" href="favicon.ico"/>
<HeadOutlet/>
</head>
<body>
<Routes/>
@* ReSharper disable once Html.PathError *@
<script src="_framework/blazor.web.js"></script>
<script src="js/app.js"></script>
<script src="@AddVersionToPath("js/app.js")"></script>
</body>
</html>
</html>
@code {
private const string PathBase = "/";
private string AddVersionToPath([PathReference] string path) => FileVersionProvider.AddFileVersionToPath(PathBase, path);
}

View file

@ -1,15 +1,26 @@
@inherits LayoutComponentBase
<div class="page">
<main>
<article class="content px-4">
@Body
</article>
</main>
<div class="fixed inset-y-0 right-0 left-[40rem] hidden lg:block xl:left-[50rem] z-0">
<svg
viewBox="0 0 1080 957"
fill="none"
aria-hidden="true"
class="absolute inset-0 h-full w-full"
preserveAspectRatio="xMinYMid slice">
<path fill="#2e3440" d="M0 0h1080v957H0z"/>
</svg>
</div>
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
<main>
<div class="px-4 py-10 sm:py-28 sm:px-6 lg:px-8 xl:py-32 xl:px-28">
<div class="mx-auto max-w-xl lg:mx-0">
<article class="px-4">
<ErrorBoundary>
@Body
</ErrorBoundary>
</article>
</div>
</div>
</main>
<BlazorErrorUI/>

View file

@ -1,92 +0,0 @@
.page {
position: relative;
display: flex;
flex-direction: column;
}
main {
flex: 1;
}
.top-row {
background-color: #f7f7f7;
border-bottom: 1px solid #d6d5d5;
justify-content: flex-end;
height: 3.5rem;
display: flex;
align-items: center;
}
.top-row ::deep a, .top-row ::deep .btn-link {
white-space: nowrap;
margin-left: 1.5rem;
text-decoration: none;
}
.top-row ::deep a:hover, .top-row ::deep .btn-link:hover {
text-decoration: underline;
}
.top-row ::deep a:first-child {
overflow: hidden;
text-overflow: ellipsis;
}
@media (max-width: 640.98px) {
.top-row {
justify-content: space-between;
}
.top-row ::deep a, .top-row ::deep .btn-link {
margin-left: 0;
}
}
@media (min-width: 641px) {
.page {
flex-direction: row;
}
.sidebar {
width: 250px;
height: 100vh;
position: sticky;
top: 0;
}
.top-row {
position: sticky;
top: 0;
z-index: 1;
}
.top-row.auth ::deep a:first-child {
flex: 1;
text-align: right;
width: 0;
}
.top-row, article {
padding-left: 2rem !important;
padding-right: 1.5rem !important;
}
}
#blazor-error-ui {
background: lightyellow;
bottom: 0;
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
display: none;
left: 0;
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
position: fixed;
width: 100%;
z-index: 1000;
}
#blazor-error-ui .dismiss {
cursor: pointer;
position: absolute;
right: 0.75rem;
top: 0.5rem;
}

View file

@ -0,0 +1,65 @@
@page "/attributions"
@using System.Text.Json
<PageTitle>Attributions</PageTitle>
<h1 class="mt-4 text-4xl md:text-5xl lg:text-6xl font-extrabold text-[2rem] leading-10 tracking-tighter">
Attributions
</h1>
<p class="mt-4 text-base text-slate-900">
The source code for this website is available on
<a href="https://www.git.nseguin.dev/nseguin/website" class="text-blue-600">Forgejo (git.nseguin.dev).</a>
</p>
<p class="mt-4 text-base text-slate-900">
It is licensed under the <a href="@LicenseUrl" class="text-blue-600">MIT License</a>.
</p>
<ul class="list-disc mt-4 text-base leading-7 text-slate-900">
@if (AttributionsList != null)
{
@foreach (var attribution in AttributionsList)
{
<li class="mt-4" key="@attribution.Name">
<h2 class="text-lg font-bold">@attribution.Name</h2>
@if (!string.IsNullOrWhiteSpace(attribution.Url?.ToString()))
{
<p class="mt-2">URL: <a href="@attribution.Url.ToString()" class="text-blue-600">@attribution.Url</a></p>
}
@if (attribution.Authors?.Any() ?? false)
{
<p class="mt-2">Author(s): @string.Join(", ", attribution.Authors)</p>
}
@if (!string.IsNullOrWhiteSpace(attribution.License))
{
<p class="mt-2">License: <a href="@attribution.LicenseUrl?.ToString()" class="text-blue-600">@attribution.License</a></p>
}
</li>
}
}
</ul>
@code {
public record Attribution(string Name, Uri Url, string? License, Uri? LicenseUrl, string[]? Authors);
private string? AttributionsJson { get; set; }
private List<Attribution>? AttributionsList { get; set; }
private string? LicenseUrl => "static/LICENSE.txt";
[Inject]
private IWebHostEnvironment HostEnvironment { get; set; }
protected override async Task OnInitializedAsync()
{
var attributionsFile = HostEnvironment.WebRootFileProvider.GetFileInfo("static/attributions.json");
using var reader = new StreamReader(attributionsFile.CreateReadStream());
AttributionsJson = await reader.ReadToEndAsync();
AttributionsList = JsonSerializer.Deserialize<List<Attribution>>(AttributionsJson);
await base.OnInitializedAsync();
}
}

View file

@ -1,42 +0,0 @@
@page "/authentication/{action}"
@using System.Security.Claims
@code{
private const string Login = "login";
private const string Logout = "logout";
public ClaimsPrincipal? User { get; private set; }
[CascadingParameter]
public required Task<AuthenticationState> AuthenticationState { get; set; }
[Parameter]
public string? Action { get; set; }
[Inject]
public required NavigationManager NavigationManager { get; set; }
private void SignOut()
{
NavigationManager.NavigateTo("MicrosoftIdentity/Account/SignOut", true);
}
private void SignIn()
{
NavigationManager.NavigateTo("MicrosoftIdentity/Account/SignIn", true);
}
protected override async Task OnInitializedAsync()
{
var authenticationState = await AuthenticationState;
User = authenticationState.User;
if (Action == Logout)
{
SignOut();
}
else if (Action == Login)
{
SignIn();
}
}
}

View file

@ -1,40 +1,49 @@
@page "/Error"
@using System.Diagnostics
@using Microsoft.AspNetCore.Diagnostics
<PageTitle>Error</PageTitle>
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
<h1 class="mt-4 text-4xl md:text-5xl lg:text-6xl font-semibold text-[2rem] leading-10 tracking-tighter">Error</h1>
<p class="text-slate text-xl mt-4">
An error occurred while processing your request.
</p>
@if (ShowRequestId)
{
<p>
<p class="text-slate text-md mt-4 mb-4">
<strong>Request ID:</strong> <code>@RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
@if (ShowException)
{
<p class="text-slate mt-4 mb-4">
<h2 class="text-2xl font-bold">Exception</h2>
<pre class="text-md">
<code>@(Exception?.ToString())</code>
</pre>
</p>
}
@code{
[CascadingParameter]
private HttpContext? HttpContext { get; set; }
[Inject]
private IHostEnvironment HostEnvironment { get; set; } = default!;
private Exception? Exception { get; set; }
private string? RequestId { get; set; }
private bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
private bool ShowException => Exception is not null && HostEnvironment.IsDevelopment();
protected override void OnInitialized()
{
RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;
Exception = HttpContext?.Features.Get<IExceptionHandlerFeature>()?.Error ?? new Exception("An error occurred while processing your request.");
}
}

View file

@ -1,92 +1,68 @@
@page "/"
@layout SimpleLayout
@using NSeguin.Dev.Web.Components.Shared.HeroIcons
@rendermode InteractiveServer
<PageTitle>Home</PageTitle>
<div class="fixed inset-y-0 right-0 left-[40rem] hidden lg:block xl:left-[50rem] z-0">
<svg
viewBox="0 0 1080 957"
fill="none"
aria-hidden="true"
class="absolute inset-0 h-full w-full"
preserveAspectRatio="xMinYMid slice">
<path fill="#2e3440" d="M0 0h1080v957H0z"/>
</svg>
</div>
<p class="mt-10 flex items-center text-sm font-semibold leading-6 text-brand">
<a href="https://git.nseguin.dev/nseguin/website">nseguin/website</a>
<small class="ml-3 rounded-full bg-brand/5 px-2 text-[0.8125rem] font-medium leading-6">
</small>
</p>
<div class="px-4 py-10 sm:py-28 sm:px-6 lg:px-8 xl:py-32 xl:px-28">
<div class="mx-auto max-w-xl lg:mx-0">
<h1 class="mt-4 text-4xl md:text-5xl lg:text-6xl font-extrabold text-[2rem] leading-10 tracking-tighter">
Nick Seguin
</h1>
<h1 class="mt-10 flex items-center text-sm font-semibold leading-6 text-brand">
<a href="https://git.nseguin.dev/nseguin/website">nseguin/website</a>
<small class="ml-3 rounded-full bg-brand/5 px-2 text-[0.8125rem] font-medium leading-6">
</small>
</h1>
<p class="mt-4 text-base leading-7 text-slate-900">
I'm a software developer based in Florida.
I'm currently working on a few projects, including this website.
Thanks for visiting!
</p>
<h1 class="mt-4 text-4xl md:text-5xl lg:text-6xl font-extrabold text-[2rem] leading-10 tracking-tighter">
Nick Seguin
</h1>
<p class="mt-4 text-base leading-7 text-slate-900">
I'm a software developer based in Iowa.
I'm currently working on a few projects, including this website.
Thanks for visiting!
</p>
</div>
<div class="flex">
<div class="w-full sm:w-auto">
<div class="mt-10 grid grid-cols-1 gap-x-6 gap-y-4 sm:grid-cols-3">
<a
href="/resume"
class="group relative rounded-2xl px-6 py-4 text-sm font-semibold leading-6 text-nord-1 sm:py-6">
<span class="absolute inset-0 rounded-2xl bg-slate-50 transition group-hover:bg-slate-100 sm:group-hover:scale-105">
</span>
<span class="relative flex items-center gap-4 sm:flex-col">
<HeroIcon Name="document-text" Class="w-6 h-6"/>
Resumé
</span>
</a>
<a
href="https://github.com/nseguin42"
class="group relative rounded-2xl px-6 py-4 text-sm font-semibold leading-6 text-nord-1 sm:py-6">
<span class="absolute inset-0 rounded-2xl bg-slate-50 transition group-hover:bg-slate-100 sm:group-hover:scale-105">
</span>
<span class="relative flex items-center gap-4 sm:flex-col">
<svg viewBox="0 0 24 24" aria-hidden="true" class="h-6 w-6">
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M12 0C5.37 0 0 5.506 0 12.303c0 5.445 3.435 10.043 8.205 11.674.6.107.825-.262.825-.585 0-.292-.015-1.261-.015-2.291C6 21.67 5.22 20.346 4.98 19.654c-.135-.354-.72-1.446-1.23-1.738-.42-.23-1.02-.8-.015-.815.945-.015 1.62.892 1.845 1.261 1.08 1.86 2.805 1.338 3.495 1.015.105-.8.42-1.338.765-1.645-2.67-.308-5.46-1.37-5.46-6.075 0-1.338.465-2.446 1.23-3.307-.12-.308-.54-1.569.12-3.26 0 0 1.005-.323 3.3 1.26.96-.276 1.98-.415 3-.415s2.04.139 3 .416c2.295-1.6 3.3-1.261 3.3-1.261.66 1.691.24 2.952.12 3.26.765.861 1.23 1.953 1.23 3.307 0 4.721-2.805 5.767-5.475 6.075.435.384.81 1.122.81 2.276 0 1.645-.015 2.968-.015 3.383 0 .323.225.707.825.585a12.047 12.047 0 0 0 5.919-4.489A12.536 12.536 0 0 0 24 12.304C24 5.505 18.63 0 12 0Z"
fill="#18181B"/>
</svg>
GitHub
</span>
</a>
<button
@onclick="() => ContactForm.Toggle()"
class="group relative rounded-2xl px-6 py-4 text-sm font-semibold leading-6 text-nord-1 sm:py-6">
<span class="absolute inset-0 rounded-2xl bg-slate-50 transition group-hover:bg-slate-100 sm:group-hover:scale-105">
</span>
<span class="relative flex items-center gap-4 sm:flex-col">
<HeroIcon Name="envelope" Class="text-black w-6 h-6"/>
Contact
</span>
</button>
</div>
<div class="flex">
<div class="w-full sm:w-auto">
<div class="mt-10 grid grid-cols-1 gap-x-6 gap-y-4 sm:grid-cols-3">
<a
href="/resume"
class="group relative rounded-2xl px-6 py-4 text-sm font-semibold leading-6 text-nord-1 sm:py-6">
<span class="absolute inset-0 rounded-2xl bg-slate-50 transition group-hover:bg-slate-100 sm:group-hover:scale-105">
</span>
<span class="relative flex items-center gap-4 sm:flex-col">
<div class="w-6 h-6">
<HeroIcon Kind="HeroIcon.DocumentText"/>
</div>
<a href="/static/resume.pdf">Resumé</a>
</span>
</a>
<a
href="https://github.com/nseguin42"
class="group relative rounded-2xl px-6 py-4 text-sm font-semibold leading-6 text-nord-1 sm:py-6">
<span class="absolute inset-0 rounded-2xl bg-slate-50 transition group-hover:bg-slate-100 sm:group-hover:scale-105">
</span>
<span class="relative flex items-center gap-4 sm:flex-col">
<svg viewBox="0 0 24 24" aria-hidden="true" class="h-6 w-6">
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M12 0C5.37 0 0 5.506 0 12.303c0 5.445 3.435 10.043 8.205 11.674.6.107.825-.262.825-.585 0-.292-.015-1.261-.015-2.291C6 21.67 5.22 20.346 4.98 19.654c-.135-.354-.72-1.446-1.23-1.738-.42-.23-1.02-.8-.015-.815.945-.015 1.62.892 1.845 1.261 1.08 1.86 2.805 1.338 3.495 1.015.105-.8.42-1.338.765-1.645-2.67-.308-5.46-1.37-5.46-6.075 0-1.338.465-2.446 1.23-3.307-.12-.308-.54-1.569.12-3.26 0 0 1.005-.323 3.3 1.26.96-.276 1.98-.415 3-.415s2.04.139 3 .416c2.295-1.6 3.3-1.261 3.3-1.261.66 1.691.24 2.952.12 3.26.765.861 1.23 1.953 1.23 3.307 0 4.721-2.805 5.767-5.475 6.075.435.384.81 1.122.81 2.276 0 1.645-.015 2.968-.015 3.383 0 .323.225.707.825.585a12.047 12.047 0 0 0 5.919-4.489A12.536 12.536 0 0 0 24 12.304C24 5.505 18.63 0 12 0Z"
fill="#18181B"/>
</svg>
GitHub
</span>
</a>
<a
href="mailto:mail@nseguin.dev"
class="group relative rounded-2xl px-6 py-4 text-sm font-semibold leading-6 text-nord-1 sm:py-6">
<span class="absolute inset-0 rounded-2xl bg-slate-50 transition group-hover:bg-slate-100 sm:group-hover:scale-105">
</span>
<span class="relative flex items-center gap-4 sm:flex-col text-black">
<div class="w-6 h-6">
<HeroIcon Kind="HeroIcon.Envelope"/>
</div>
Contact
</span>
</a>
</div>
</div>
<div class="flex">
<div class="w-full sm:w-auto">
<ContactForm Id="contact-form" @ref="ContactForm" />
</div>
</div>
</div>
@code {
public ContactForm ContactForm { get; set; }
}
</div>

View file

@ -1,34 +1,17 @@
@page "/NotFound"
@using Microsoft.AspNetCore.WebUtilities
@layout SimpleLayout
@inject NavigationManager NavigationManager
<PageTitle>Not Found</PageTitle>
<div class="fixed inset-y-0 right-0 left-[40rem] hidden lg:block xl:left-[50rem] z-0">
<svg
viewBox="0 0 1080 957"
fill="none"
aria-hidden="true"
class="absolute inset-0 h-full w-full"
preserveAspectRatio="xMinYMid slice">
<path fill="#2e3440" d="M0 0h1080v957H0z"/>
</svg>
</div>
<h1 class="mt-4 text-4xl md:text-5xl lg:text-6xl font-semibold text-[2rem] leading-10 tracking-tighter">Not Found</h1>
<p class="text-slate text-xl mt-4">
No page was found at <code>@Path</code>.
</p>
<div class="px-4 py-10 sm:py-28 sm:px-6 lg:px-8 xl:py-32 xl:px-28">
<div class="mx-auto max-w-xl lg:mx-0">
<h1 class="mt-4 text-4xl md:text-5xl lg:text-6xl font-semibold text-[2rem] leading-10 tracking-tighter">Not Found</h1>
<p class="text-slate text-xl mt-4">
No page was found at <code>@Path</code>.<br/>
</p>
<p class="text-blue-600 text-xl mt-4">
<a href="/" aria-label="Home" class="underline">Go to home page</a>
</p>
</div>
</div>
<p class="text-blue-600 text-xl mt-4">
<a href="/" aria-label="Home" class="underline">Go to home page</a>
</p>
@code {
private string Path { get; set; }

View file

@ -1,24 +1,5 @@
<CascadingAuthenticationState>
<Router AppAssembly="@typeof(Program).Assembly" AdditionalAssemblies="new[] {typeof(Client._Imports).Assembly}">
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(SimpleLayout)">
<NotAuthorized>
@if (context.User.Identity?.IsAuthenticated != true)
{
<RedirectToLogin/>
}
else
{
<p role="alert">You are not authorized to access this resource.</p>
}
</NotAuthorized>
</AuthorizeRouteView>
</Found>
<NotFound>
<PageTitle>Not found</PageTitle>
<LayoutView Layout="@typeof(SimpleLayout)">
<p role="alert">Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
</CascadingAuthenticationState>
<Router AppAssembly="@typeof(Program).Assembly" AdditionalAssemblies="new[] {typeof(Client._Imports).Assembly, typeof(AsyncEventHandler).Assembly}">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(SimpleLayout)"/>
</Found>
</Router>

View file

@ -1,14 +1,21 @@
@inject IJSRuntime JSRuntime
@code {
[Parameter]
public Func<ElementReference> GetControl { get; set; }
public Func<ElementReference>? GetControl { get; set; }
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (GetControl is null)
{
throw new ArgumentNullException(nameof(GetControl));
}
if (firstRender)
{
await JSRuntime.InvokeVoidAsync("App.scrollIntoView", GetControl(), true);
}
}
}

View file

@ -0,0 +1,11 @@
@inject IHostEnvironment HostEnvironment
<div id="blazor-error-ui"
class="bg-yellow-400 bottom-0 shadow-md fixed left-0 py-2 px-4 w-full z-50 hidden"
role="alertdialog"
tabindex="-1"
data-nosnippet>
An unhandled error has occurred.
<a href="#" class="reload underline">Reload</a>
<button class="dismiss" type="button">🗙</button>
</div>

View file

@ -1,66 +0,0 @@
using System.Collections.Concurrent;
using System.Text.RegularExpressions;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Rendering;
namespace NSeguin.Dev.Web.Components.Shared;
public partial class HeroIcon : ComponentBase
{
private const string PathBase = "wwwroot/lib/heroicons";
private static readonly ConcurrentDictionary<string, string> Cache = new();
private readonly Lazy<string> _rawSvg;
private readonly Lazy<string> _svg;
public HeroIcon()
{
_rawSvg = new Lazy<string>(GetRawSvg);
_svg = new Lazy<string>(GetSvg);
}
[Parameter]
public string Name { get; set; }
[Parameter]
public bool UseSmallIcon { get; set; } = false;
[Parameter]
public bool UseOutline { get; set; } = true;
[Parameter]
public string? Class { get; set; }
private string Svg => _svg.Value;
private string FileName =>
Path.Combine(
PathBase,
UseSmallIcon ? "20" : "24",
UseOutline ? "outline" : "solid",
Name + ".svg");
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.AddMarkupContent(0, Svg);
}
[GeneratedRegex("""<svg\s+(?:class=\s*"[^"]*"\s+)?""")]
private static partial Regex SvgRegex();
private string GetSvg()
{
if (Class is null)
{
return _rawSvg.Value;
}
string svg = SvgRegex().Replace(_rawSvg.Value, $"""<svg class="{Class}" """);
return svg;
}
private string GetRawSvg()
{
return Cache.GetOrAdd(FileName, File.ReadAllText);
}
}

View file

@ -0,0 +1,65 @@
using System.Diagnostics;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Rendering;
namespace NSeguin.Dev.Web.Components.Shared.HeroIcons;
public partial class HeroIcon : ComponentBase
{
private Task<string>? _loadSvgTask;
private string? _rawSvg;
[Parameter] public HeroIconKind? Kind { get; set; }
[Parameter] public HeroIconVariant Variant { get; set; }
private string? RawSvg => _rawSvg;
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.AddMarkupContent(0, RawSvg);
}
protected override void OnParametersSet()
{
if (Kind is not { } kind)
{
throw new InvalidOperationException("Kind cannot be null.");
}
HeroIconParameters parameters = new(kind, Variant);
_loadSvgTask = parameters.GetSvgAsync();
if (_loadSvgTask.IsCompletedSuccessfully)
{
TrySetRawSvg(_loadSvgTask.Result);
}
else
{
_loadSvgTask.ContinueWith(
task => TrySetRawSvg(task.Result));
}
}
protected override async Task OnInitializedAsync()
{
if (Kind is null)
{
throw new InvalidOperationException("Kind cannot be null.");
}
if (RawSvg is null && _loadSvgTask is not null)
{
await _loadSvgTask;
}
}
private void TrySetRawSvg(string rawSvg)
{
Debug.Assert(_loadSvgTask is not null, "_loadSvgTask is not null");
if (Interlocked.CompareExchange(ref _rawSvg, _loadSvgTask.Result, null) is null)
{
StateHasChanged();
}
}
}

View file

@ -0,0 +1,3 @@
namespace NSeguin.Dev.Web.Components.Shared.HeroIcons;
public readonly record struct HeroIconKind(string FileName);

View file

@ -0,0 +1,43 @@
using System.Collections.Concurrent;
namespace NSeguin.Dev.Web.Components.Shared.HeroIcons;
internal readonly record struct HeroIconParameters(HeroIconKind Kind, HeroIconVariant Variant)
{
private const string PathBase = "wwwroot/lib/heroicons";
private static readonly ConcurrentDictionary<HeroIconParameters, string> SvgCache = new();
public Task<string> GetSvgAsync()
{
if (SvgCache.TryGetValue(this, out var svg))
{
return Task.FromResult(svg);
}
return LoadSvgAsync();
}
private static string GetPath(HeroIconVariant variant, HeroIconKind kind)
{
var pathSuffix = variant switch
{
HeroIconVariant.Solid => "24/solid",
HeroIconVariant.Outline => "24/outline",
HeroIconVariant.Small => "20/solid",
HeroIconVariant.ExtraSmall => "16/solid",
_ => throw new ArgumentOutOfRangeException(nameof(variant))
};
return Path.Combine(PathBase, pathSuffix, kind.FileName);
}
private string GetPath() => GetPath(Variant, Kind);
private async Task<string> LoadSvgAsync()
{
var path = GetPath();
var svg = await File.ReadAllTextAsync(path);
SvgCache.TryAdd(this, svg);
return svg;
}
}

View file

@ -0,0 +1,9 @@
namespace NSeguin.Dev.Web.Components.Shared.HeroIcons;
public enum HeroIconVariant
{
Solid,
Outline,
Small,
ExtraSmall
}

View file

@ -1,20 +0,0 @@
@inject NavigationManager Navigation
<AuthorizeView>
<Authorized>
Hello, @context.User.Identity?.Name!
<button class="nav-link btn btn-link" @onclick="BeginLogout">Log out</button>
</Authorized>
<NotAuthorized>
<a href="authentication/login">Log in</a>
</NotAuthorized>
</AuthorizeView>
@code{
private void BeginLogout(MouseEventArgs args)
{
Navigation.NavigateTo("authentication/logout");
}
}

View file

@ -1,10 +0,0 @@
@inject NavigationManager Navigation
@code {
protected override void OnInitialized()
{
Navigation.NavigateTo($"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
}
}

View file

@ -7,47 +7,58 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\NSeguin.Dev.Web.Common\NSeguin.Dev.Web.Common.csproj" />
<ProjectReference Include="..\NSeguin.Dev.Web.Client\NSeguin.Dev.Web.Client.csproj" />
<ProjectReference Include="..\NSeguin.Dev.Web.Common\NSeguin.Dev.Web.Common.csproj"/>
<ProjectReference Include="..\NSeguin.Dev.Web.Client\NSeguin.Dev.Web.Client.csproj"/>
<ProjectReference Include="..\NSeguin.Dev.Web.HeroIcons.SourceGenerator\NSeguin.Dev.Web.HeroIcons.SourceGenerator.csproj" ReferenceOutputAssembly="false" OutputItemType="Analyzer"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Azure.Extensions.AspNetCore.Configuration.Secrets" />
<PackageReference Include="Azure.Identity" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" />
<PackageReference Include="Microsoft.Extensions.Configuration.AzureAppConfiguration" />
<PackageReference Include="Microsoft.Identity.Web" />
<PackageReference Include="Microsoft.Identity.Web.UI" />
<PackageReference Include="Microsoft.Web.LibraryManager.Build" />
<PackageReference Include="Azure.Extensions.AspNetCore.Configuration.Secrets"/>
<PackageReference Include="Azure.Identity"/>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer"/>
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect"/>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server"/>
<PackageReference Include="Microsoft.Extensions.Configuration.AzureAppConfiguration"/>
<PackageReference Include="Microsoft.Identity.Web"/>
<PackageReference Include="Microsoft.Identity.Web.UI"/>
<PackageReference Include="Microsoft.Web.LibraryManager.Build"/>
</ItemGroup>
<ItemGroup>
<UpToDateCheckBuilt Include="wwwroot/css/site.css" Set="Css" />
<TypeScriptCompile Include="..\..\tailwind.config.ts" Set="Css">
<UpToDateCheckBuilt Include="wwwroot/css/site.css" Set="Css"/>
<TypeScriptCompile Include="tailwind.config.ts" Set="Css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</TypeScriptCompile>
</ItemGroup>
<ItemGroup>
<_ContentIncludedByDefault Remove="wwwroot\bootstrap\bootstrap.min.css" />
<_ContentIncludedByDefault Remove="wwwroot\bootstrap\bootstrap.min.css.map" />
</ItemGroup>
<ItemGroup>
<Content Update="packages.lock.json">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
<Content Remove="package.json"/>
<AdditionalFiles Include="package.json" CopyToOutputDirectory="Always"/>
<None Remove="pnpm-lock.yaml"/>
<AdditionalFiles Include="pnpm-lock.yaml" CopyToOutputDirectory="Always"/>
<Content Remove="libman.json"/>
<AdditionalFiles Include="libman.json" CopyToOutputDirectory="Always"/>
<Content Update="wwwroot\static\attributions.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\static\LICENSE.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="wwwroot/lib/heroicons/**/*" CopyToOutputDirectory="Always" CopyToPublishDirectory="Always"/>
</ItemGroup>
<ItemGroup>
<Folder Include="wwwroot\lib\heroicons\" />
</ItemGroup>
<Target Name="NodeInstall" BeforeTargets="Build">
<Exec Command="pnpm install" />
<Target Name="NodeInstall" BeforeTargets="TailwindBuild" Condition="'$(SkipNodeBuild)' != 'true'">
<Exec Command="pnpm install"/>
</Target>
<Target Name="TailwindBuild" BeforeTargets="Build">
<Exec Command="pnpm run css:build" />
<Target Name="TailwindBuild" BeforeTargets="Build" Condition="'$(SkipNodeBuild)' != 'true'">
<Exec Command="pnpm run css:build"/>
</Target>
</Project>

View file

@ -0,0 +1,2 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=components_005Cmodels/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View file

@ -1,6 +1,8 @@
using Azure.Identity;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.FileProviders;
using Microsoft.Identity.Web;
using Microsoft.Identity.Web.UI;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
@ -30,6 +32,20 @@ builder.Services.AddRazorComponents()
.AddInteractiveServerComponents()
.AddInteractiveWebAssemblyComponents();
builder.Services.AddProblemDetails(
options =>
{
options.CustomizeProblemDetails = ctx =>
{
ctx.ProblemDetails.Extensions.TryAdd("traceId", ctx.HttpContext.TraceIdentifier);
if (ctx.HttpContext.RequestServices.GetRequiredService<IHostEnvironment>()
.IsDevelopment())
{
ctx.ProblemDetails.Extensions.TryAdd("exception", ctx.Exception?.ToString());
}
};
});
if (builder.Environment.IsStaging() || builder.Environment.IsProduction())
{
builder.Configuration.AddAzureAppConfiguration(
@ -45,7 +61,7 @@ if (builder.Environment.IsStaging() || builder.Environment.IsProduction())
}
a.Connect(connectionString)
.ConfigureKeyVault(kv => kv.SetCredential(new DefaultAzureCredential()));
.ConfigureKeyVault(kv => kv.SetCredential(new EnvironmentCredential()));
});
}
else
@ -67,16 +83,7 @@ builder.Services.Configure<OpenIdConnectOptions>(
});
builder.Services.AddTransient<IContactService, ContactService>();
builder.Services.AddOptions<MailSettings>()
.BindConfiguration("Mail")
.ValidateDataAnnotations()
.ValidateOnStart();
builder.Services.AddOptions<SmtpSettings>()
.BindConfiguration("Mail:Smtp")
.ValidateDataAnnotations()
.ValidateOnStart();
builder.Services.AddOptions<MailSettings>().BindConfiguration("Mail").ValidateDataAnnotations();
builder.Services.AddHttpLogging(
o =>
{
@ -84,7 +91,6 @@ builder.Services.AddHttpLogging(
});
builder.Services.AddNSeguinDevWebServer();
WebApplication app = builder.Build();
// Configure the HTTP request pipeline.
@ -95,8 +101,6 @@ if (app.Environment.IsDevelopment())
else
{
app.UseExceptionHandler("/Error", true);
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpLogging();
@ -109,14 +113,21 @@ app.UseAuthorization();
app.UseAntiforgery();
app.MapRazorComponents<App>()
.AddAdditionalAssemblies(typeof(Counter).Assembly)
.AddAdditionalAssemblies(typeof(AsyncEventHandler).Assembly)
.AddInteractiveServerRenderMode()
.AddInteractiveWebAssemblyRenderMode();
app.MapControllers();
app.UseExceptionHandler();
app.MapFallback(
ctx =>
{
ctx.Response.Redirect($"/NotFound?path={ctx.Request.Path}");
ctx.Response.StatusCode = StatusCodes.Status404NotFound;
var headers = ctx.Request.GetTypedHeaders();
if (headers.Accept.Any(h => h.MatchesMediaType("text/html")))
{
ctx.Response.Redirect($"/NotFound?path={ctx.Request.Path}");
}
return Task.CompletedTask;
});

View file

@ -1,12 +1,11 @@
{
"version": "1.0",
"defaultProvider": "cdnjs",
"defaultDestination": "wwwroot/lib",
"libraries": [
{
"provider": "jsdelivr",
"library": "heroicons@2.0.18",
"library": "heroicons@2.1.1",
"destination": "wwwroot/lib/heroicons"
}
]
}
}

View file

@ -0,0 +1,19 @@
{
"name": "nseguin.dev.web",
"type": "module",
"peerDependencies": {
"typescript": "^5.0.0"
},
"scripts": {
"css:build": "pnpm tailwindcss -i ./wwwroot/css/site.css -o ./wwwroot/css/styles.css -c ./tailwind.config.ts --minify",
"css:watch": "pnpm tailwindcss -i ./wwwroot/css/site.css -o ./wwwroot/css/styles.css -c ./tailwind.config.ts --watch"
},
"dependencies": {
"@tailwindcss/aspect-ratio": "^0.4.2",
"@tailwindcss/container-queries": "^0.1.1",
"@tailwindcss/forms": "^0.5.7",
"@tailwindcss/typography": "^0.5.13",
"tailwind-nord": "^1.3.0",
"tailwindcss": "^3.4.4"
}
}

View file

@ -1,889 +0,0 @@
{
"version": 2,
"dependencies": {
"net8.0": {
"Azure.Extensions.AspNetCore.Configuration.Secrets": {
"type": "Direct",
"requested": "[1.3.0, )",
"resolved": "1.3.0",
"contentHash": "1ugCXAzxwfx/8DbOMlPbVr80++1O6xXUXtXWo7fNRmFnQC4mclDaml2H26kvhaWbof7XHnwt7/9g5dDIoU3FIw==",
"dependencies": {
"Azure.Core": "1.35.0",
"Azure.Security.KeyVault.Secrets": "4.2.0",
"Microsoft.Extensions.Configuration": "2.1.0"
}
},
"Azure.Identity": {
"type": "Direct",
"requested": "[1.10.4, )",
"resolved": "1.10.4",
"contentHash": "hSvisZy9sld0Gik1X94od3+rRXCx+AKgi+iLH6fFdlnRZRePn7RtrqUGSsORiH2h8H2sc4NLTrnuUte1WL+QuQ==",
"dependencies": {
"Azure.Core": "1.36.0",
"Microsoft.Identity.Client": "4.56.0",
"Microsoft.Identity.Client.Extensions.Msal": "4.56.0",
"System.Memory": "4.5.4",
"System.Security.Cryptography.ProtectedData": "4.7.0",
"System.Text.Json": "4.7.2",
"System.Threading.Tasks.Extensions": "4.5.4"
}
},
"Microsoft.AspNetCore.Authentication.JwtBearer": {
"type": "Direct",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "6xI3L6n8ucpUSkVn0Ax0MOtSJKIT6lrIkYGxIRda9LgmAjOFS3wPj2J2Y75dGUFkgTgpxPNq9K0oDCMPS2zBMg==",
"dependencies": {
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "7.1.2"
}
},
"Microsoft.AspNetCore.Authentication.OpenIdConnect": {
"type": "Direct",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "gx344DYqTjhotuG56JchlqArEvytZGgYuIuaNP/B+FcvXMuexO3mujamvs4qWXH+5g96poi2+p/Cek5KpVmaQA==",
"dependencies": {
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "7.1.2"
}
},
"Microsoft.AspNetCore.Components.WebAssembly.Server": {
"type": "Direct",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "psmEQsAjbWKBYqczOdBb6qeI92zkE0S2Cq+M2vtvrK967jVk5SeV7awTdGnRLfWzAT30mi87eWsT7KbcqFLE5Q=="
},
"Microsoft.Extensions.Configuration.AzureAppConfiguration": {
"type": "Direct",
"requested": "[7.0.0, )",
"resolved": "7.0.0",
"contentHash": "ef49XuB+STPg0Yw/UcDKEyom5qm9dR1klR/PLVpAX6+hRdBuQOffZfilbfTNAYT6jsn3dgRjsOtq90hYlcI9vQ==",
"dependencies": {
"Azure.Data.AppConfiguration": "1.3.0",
"Azure.Messaging.EventGrid": "4.7.0",
"Azure.Security.KeyVault.Secrets": "4.3.0",
"Microsoft.Extensions.Configuration": "6.0.1",
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Logging": "6.0.0"
}
},
"Microsoft.Identity.Web": {
"type": "Direct",
"requested": "[2.17.0, )",
"resolved": "2.17.0",
"contentHash": "iNAPu3XiLpfczHkyjshd1OdvOp0aFPgCqhM3CsiIlT7A5TLH+03+kYI0DtXMns47Cmkzj87VpuFzQwe0J5ofrg==",
"dependencies": {
"Microsoft.Extensions.Http": "3.1.3",
"Microsoft.Identity.Web.Certificate": "2.17.0",
"Microsoft.Identity.Web.Certificateless": "2.17.0",
"Microsoft.Identity.Web.TokenAcquisition": "2.17.0",
"Microsoft.Identity.Web.TokenCache": "2.17.0",
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "7.3.1",
"Microsoft.IdentityModel.Validators": "7.3.1",
"System.IdentityModel.Tokens.Jwt": "7.3.1"
}
},
"Microsoft.Identity.Web.UI": {
"type": "Direct",
"requested": "[2.17.0, )",
"resolved": "2.17.0",
"contentHash": "I2q7t02znPMKIBA50nOMh8jbkMOMHAKkxfzvEwmSrUoMzRGgRSn5ofhCmLG1xbFDbQ24KFoTr8XVQnMg2eu1cQ==",
"dependencies": {
"Microsoft.Identity.Web": "2.17.0"
}
},
"Microsoft.Web.LibraryManager.Build": {
"type": "Direct",
"requested": "[2.1.175, )",
"resolved": "2.1.175",
"contentHash": "OhJ8cfzvX/rxCuEezniBQCaCqKuQtU2tNr3m3Qryu+V30lZcUrjtsg39DGZWLw6EzbJA+TUdZPfuLeEDuz3cXA==",
"dependencies": {
"System.Runtime.Loader": "4.3.0"
}
},
"StyleCop.Analyzers": {
"type": "Direct",
"requested": "[1.2.0-beta.507, )",
"resolved": "1.2.0-beta.507",
"contentHash": "/FtugDT66cKJJ+GGH7rNpG6UDrT4iIWz45M6lrXXHobDUFDHw+q5VgkbiR+6ffTO564ge7w6fQh/eoQhVdJO8Q==",
"dependencies": {
"StyleCop.Analyzers.Unstable": "1.2.0.507"
}
},
"Azure.Core": {
"type": "Transitive",
"resolved": "1.36.0",
"contentHash": "vwqFZdHS4dzPlI7FFRkPx9ctA+aGGeRev3gnzG8lntWvKMmBhAmulABi1O9CEvS3/jzYt7yA+0pqVdxkpAd7dQ==",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "1.1.1",
"System.Diagnostics.DiagnosticSource": "6.0.1",
"System.Memory.Data": "1.0.2",
"System.Numerics.Vectors": "4.5.0",
"System.Text.Encodings.Web": "4.7.2",
"System.Text.Json": "4.7.2",
"System.Threading.Tasks.Extensions": "4.5.4"
}
},
"Azure.Data.AppConfiguration": {
"type": "Transitive",
"resolved": "1.3.0",
"contentHash": "9f+HzKqf56R2clVMBbbC6u1aQiiL6ov+7e3evcrMFo+cuhKGZhPWKO7vLLun8u3pY2jQ6VJ7ltZZyvzapYZNhA==",
"dependencies": {
"Azure.Core": "1.35.0",
"Microsoft.Bcl.AsyncInterfaces": "1.1.1",
"System.Text.Json": "4.7.2"
}
},
"Azure.Messaging.EventGrid": {
"type": "Transitive",
"resolved": "4.7.0",
"contentHash": "Wm5+RY6hNoIPVLPwmr3T1ijVm5GdLVZBij93c4Brwe9iB3X8nlUYNjlnQVVJqK4QLs85nGwqBGUpB4BfYdGXVQ==",
"dependencies": {
"Azure.Core": "1.20.0",
"System.Memory.Data": "1.0.2",
"System.Text.Json": "4.6.0"
}
},
"Azure.Security.KeyVault.Certificates": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "fUUUhs77HPVJZ1ZqKIpCo6qrYDAeol2EzpwIK1j/14HD1DKB2EIWu0FsmtNLivpc6mPI4OA+YPfJpDzu47Azuw==",
"dependencies": {
"Azure.Core": "1.30.0",
"System.Memory": "4.5.4",
"System.Text.Json": "4.7.2",
"System.Threading.Tasks.Extensions": "4.5.4"
}
},
"Azure.Security.KeyVault.Secrets": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "ztr26Ai4K7AZGuw68/ffLDn+2G3WL0myjC7nY1RYkxPMnsplTPEH+Ke4RGxvSkg4kC7bJ9NwdlqpEwfDX0qhdw==",
"dependencies": {
"Azure.Core": "1.30.0",
"System.Memory": "4.5.4",
"System.Text.Json": "4.7.2",
"System.Threading.Tasks.Extensions": "4.5.4"
}
},
"Microsoft.AspNetCore.Authorization": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "RYBk9d+Zb6V2u2hpgSSlCTvV6HvNf8T8OA7coLn+J4sdWLbdVkb8/b2tpRRENTGXK31ayCvtUPhP4wv2ZMn4cQ==",
"dependencies": {
"Microsoft.AspNetCore.Metadata": "8.0.1",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.1"
}
},
"Microsoft.AspNetCore.Components": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "nHn5ZSyL/5HAa2Lh9CCInxMvIBsifLbkt3GkeiIdWe4uWhjZ+O/ykD1wjKoUnjVsrinaO2OZocqujXk2jnE+8g==",
"dependencies": {
"Microsoft.AspNetCore.Authorization": "8.0.1",
"Microsoft.AspNetCore.Components.Analyzers": "8.0.1"
}
},
"Microsoft.AspNetCore.Components.Analyzers": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "8+Cv84+XYd/xKaAPAZvJBg9ZKxpH7sszs5MjsGOw3inmDa3MOlGHBkSbki2AzMuK0kpj9vu9mWhcJf7/6Jd8qQ=="
},
"Microsoft.AspNetCore.Components.Forms": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "OT05sVxJVJG8+ODSOadxy0UWBnFMu4Wb3XszqRRaGhcaCe4lEIxg9OjR8zo77r6w/AI9LoT/Enou+v02q7yZOA==",
"dependencies": {
"Microsoft.AspNetCore.Components": "8.0.1"
}
},
"Microsoft.AspNetCore.Components.Web": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "EcM5S0goZOMZckt87Bb7IAbDivtMzw2DdtMLgO/87WH4NZTHLuHykNtufIWsR1ZTbSR8RfBeEE0QuAagnTsAWg==",
"dependencies": {
"Microsoft.AspNetCore.Components": "8.0.1",
"Microsoft.AspNetCore.Components.Forms": "8.0.1",
"Microsoft.Extensions.DependencyInjection": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0",
"Microsoft.JSInterop": "8.0.1",
"System.IO.Pipelines": "8.0.0"
}
},
"Microsoft.AspNetCore.Cryptography.Internal": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "buuMMCTxFcVkOkEftb2OafYxrveNGre9KJF4Oi1DkR4rxIj6oLam7Wq3g0Fp9hNVpJteKEPiupsxYnPrD/oUGA=="
},
"Microsoft.AspNetCore.DataProtection": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "XNeup9/wVm9orvynhmhRHh1GOHbboXoCyz0jp+LcNcHWYyMEEJyZKSpyh3TNKgM9sBMIDwrj8aSVPm81GGjzNQ==",
"dependencies": {
"Microsoft.AspNetCore.Cryptography.Internal": "8.0.0",
"Microsoft.AspNetCore.DataProtection.Abstractions": "8.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Hosting.Abstractions": "8.0.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0",
"System.Security.Cryptography.Xml": "8.0.0"
}
},
"Microsoft.AspNetCore.DataProtection.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "ObNtj57DXbIIVAhNSKA6/c1/EaW35Dct480dzZ9NPXZ2fw3Z5FS/xiKKC7+1R2PBwt2Vw7a2Amu1tNvBKwyFNQ=="
},
"Microsoft.AspNetCore.Metadata": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "8Uyh4D/9Z9xfL1f6Ap9Y12q/JU717sqWNMxCD7lytyK28YFtLIYG1jSCQOq+TvPDzgIaaGXGtLq+lM8fcAisMg=="
},
"Microsoft.Bcl.AsyncInterfaces": {
"type": "Transitive",
"resolved": "1.1.1",
"contentHash": "yuvf07qFWFqtK3P/MRkEKLhn5r2UbSpVueRziSqj0yJQIKFwG1pq9mOayK3zE5qZCTs0CbrwL9M6R8VwqyGy2w=="
},
"Microsoft.Extensions.Caching.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==",
"dependencies": {
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Caching.Memory": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "7pqivmrZDzo1ADPkRwjy+8jtRKWRCPag9qPI+p7sgu7Q4QreWhcvbiWXsbhP+yY8XSiDvZpu2/LWdBv7PnmOpQ==",
"dependencies": {
"Microsoft.Extensions.Caching.Abstractions": "8.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==",
"dependencies": {
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Configuration.FileExtensions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "McP+Lz/EKwvtCv48z0YImw+L1gi1gy5rHhNaNIY2CrjloV+XY8gydT8DjMR6zWeL13AFK+DioVpppwAuO1Gi1w==",
"dependencies": {
"Microsoft.Extensions.Configuration": "8.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
"Microsoft.Extensions.FileProviders.Physical": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Configuration.Json": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "C2wqUoh9OmRL1akaCcKSTmRU8z0kckfImG7zLNI8uyi47Lp+zd5LWAD17waPQEqCz3ioWOCrFUo+JJuoeZLOBw==",
"dependencies": {
"Microsoft.Extensions.Configuration": "8.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "8.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
"System.Text.Json": "8.0.0"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Diagnostics": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==",
"dependencies": {
"Microsoft.Extensions.Configuration": "8.0.0",
"Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0"
}
},
"Microsoft.Extensions.Diagnostics.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0",
"System.Diagnostics.DiagnosticSource": "8.0.0"
}
},
"Microsoft.Extensions.FileProviders.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==",
"dependencies": {
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.FileProviders.Physical": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==",
"dependencies": {
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
"Microsoft.Extensions.FileSystemGlobbing": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.FileSystemGlobbing": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ=="
},
"Microsoft.Extensions.Hosting.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "8.0.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.Identity.Abstractions": {
"type": "Transitive",
"resolved": "5.1.0",
"contentHash": "GctoEcSJcmfw1rSmgVtH99jmawQjVGitDaSOHe+WfazPpzvf9eh+ovWbECZ8MIPL7NFzaj+d6ZwuDu3kzcy7ig=="
},
"Microsoft.Identity.Client": {
"type": "Transitive",
"resolved": "4.59.0",
"contentHash": "PbuMAe/h1/WoEqhHwJ4UhmL6pdo1ZxeesWyhKyhSF/S653c0i1XX8DSFLVia+WT1+j3ppqBYFyfrQgwatlaU+Q==",
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "6.22.0",
"System.Diagnostics.DiagnosticSource": "6.0.1"
}
},
"Microsoft.Identity.Web.Certificate": {
"type": "Transitive",
"resolved": "2.17.0",
"contentHash": "Dsl8BajwWWpKqQ+Lx57q+IBMnuq92JK4PbmjkfyKtwTXPiAlFG1SqLqC5bV49UhTlpVEz7mUk6q6TJchiTbBPQ==",
"dependencies": {
"Azure.Identity": "1.10.4",
"Azure.Security.KeyVault.Certificates": "4.5.1",
"Azure.Security.KeyVault.Secrets": "4.5.0",
"Microsoft.Identity.Abstractions": "5.1.0",
"Microsoft.Identity.Web.Certificateless": "2.17.0",
"Microsoft.Identity.Web.Diagnostics": "2.17.0"
}
},
"Microsoft.Identity.Web.Certificateless": {
"type": "Transitive",
"resolved": "2.17.0",
"contentHash": "1FJtyCzzCNgMnevjPBTR8/9jgbGfkoZawl9PYj3AaLYYcpYNxOyhjYLchQWuobh4tBVntVr0fl7sE0SXBST9tg==",
"dependencies": {
"Azure.Identity": "1.10.4",
"Microsoft.Extensions.Logging.Abstractions": "2.1.0",
"Microsoft.IdentityModel.JsonWebTokens": "6.35.0",
"System.Text.Encodings.Web": "4.7.2"
}
},
"Microsoft.Identity.Web.Diagnostics": {
"type": "Transitive",
"resolved": "2.17.0",
"contentHash": "tPuJeTaJ+g1d/z3V8IgQFYvyt5euM5GiftpBiVYMIoO3R5Fliq0sJE8Jx/wurAfOO1tqaiollK6a33l22qt3kg=="
},
"Microsoft.Identity.Web.TokenAcquisition": {
"type": "Transitive",
"resolved": "2.17.0",
"contentHash": "YCy3Vxl0m8Jpt+LlFl44ojxG1IKuZLbvIcVS1fGV8lYHj3J2cXRe7+EEitNexIBrQ3Zi6piomM9TS9bjygXP4g==",
"dependencies": {
"Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.0",
"Microsoft.AspNetCore.Authentication.OpenIdConnect": "8.0.0",
"Microsoft.Extensions.Http": "3.1.3",
"Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0",
"Microsoft.Identity.Abstractions": "5.1.0",
"Microsoft.Identity.Web.Certificate": "2.17.0",
"Microsoft.Identity.Web.Certificateless": "2.17.0",
"Microsoft.Identity.Web.TokenCache": "2.17.0",
"Microsoft.IdentityModel.Logging": "7.3.1",
"Microsoft.IdentityModel.LoggingExtensions": "7.3.1",
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "7.3.1",
"System.IdentityModel.Tokens.Jwt": "7.3.1"
}
},
"Microsoft.Identity.Web.TokenCache": {
"type": "Transitive",
"resolved": "2.17.0",
"contentHash": "Qmerm3BTDTMXxRb4ZPqCF1SYYfxehaY0xP/KqE2RnkT1MgrDYF6/dmhjy4ga/N5xCVo9F6u9taHFnT16nJsFvg==",
"dependencies": {
"Microsoft.AspNetCore.DataProtection": "8.0.0",
"Microsoft.Extensions.Caching.Memory": "8.0.0",
"Microsoft.Extensions.Logging": "8.0.0",
"Microsoft.Identity.Client": "4.59.0",
"Microsoft.Identity.Web.Diagnostics": "2.17.0",
"System.Security.Cryptography.Pkcs": "8.0.0",
"System.Security.Cryptography.Xml": "8.0.0"
}
},
"Microsoft.IdentityModel.Abstractions": {
"type": "Transitive",
"resolved": "7.3.1",
"contentHash": "gIw8Sr5ZpuzKFBTfJonh2F54DivTzm5IIK15QB4Y6uE30uQdEO1NnCojTC/b6sWZoZzD0sdBa6SqwMXhucD+nA=="
},
"Microsoft.IdentityModel.JsonWebTokens": {
"type": "Transitive",
"resolved": "7.3.1",
"contentHash": "mXA6AoaD5uZqtsKghgRiupBhyXNii8p9F2BjNLnDGud0tZLS5+4Fio2YAGjFXhnkc80CqgQ61X5U1gUNnDEoKQ==",
"dependencies": {
"Microsoft.IdentityModel.Tokens": "7.3.1"
}
},
"Microsoft.IdentityModel.Logging": {
"type": "Transitive",
"resolved": "7.3.1",
"contentHash": "uPt2aiRUCbcOc0Wk+dDCSClFfPNs3S3Z7fmy50MoxJ1mGmtVUDMpyRJeYzZ/16x4rL19T+g2zrzjcWoitp5+gQ==",
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "7.3.1"
}
},
"Microsoft.IdentityModel.LoggingExtensions": {
"type": "Transitive",
"resolved": "7.3.1",
"contentHash": "CJGUiST+tPVssfDrjrkzwWXlN7ZMw+yuI59dYz17vyRfAW3PPkCYCnqOCHiJSO0D0isQD0C8dah++Pk9cKae1w==",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "2.1.1",
"Microsoft.IdentityModel.Abstractions": "7.3.1"
}
},
"Microsoft.IdentityModel.Protocols": {
"type": "Transitive",
"resolved": "7.3.1",
"contentHash": "BA+048lSJsWecQDaRYoEAtvSxb9LKv54eku1jiWHc5Giu0FG5nNgm/pKiBheOJSmXw2ZPl048HyqotDzDU6jXg==",
"dependencies": {
"Microsoft.IdentityModel.Logging": "7.3.1",
"Microsoft.IdentityModel.Tokens": "7.3.1"
}
},
"Microsoft.IdentityModel.Protocols.OpenIdConnect": {
"type": "Transitive",
"resolved": "7.3.1",
"contentHash": "TK3XOKE+7/BXciZyn71K8Csyr4zYbyo0EA/G5AUSR8wfrh3NBCwhytJeKq8QN41bJV++8xAmqesR9g/paoQ2zg==",
"dependencies": {
"Microsoft.IdentityModel.Protocols": "7.3.1",
"System.IdentityModel.Tokens.Jwt": "7.3.1"
}
},
"Microsoft.IdentityModel.Tokens": {
"type": "Transitive",
"resolved": "7.3.1",
"contentHash": "/c/p8/3CAH706c0ii5uTgSb/8M/jwyuurtdMeKTBeKFU9aA+EZrLu1M8aaS3CSlGaxoxsoaxr4/+KXykgQ4VgQ==",
"dependencies": {
"Microsoft.IdentityModel.Logging": "7.3.1"
}
},
"Microsoft.IdentityModel.Validators": {
"type": "Transitive",
"resolved": "7.3.1",
"contentHash": "O+O8W1e+ARtu/YYnDiuWw3cLsB4CoCCk15qQDjFyf6Gg+e/aHLentt8QIHbIkgzZd7o4aR6BZG5dF8vmGHB0bg==",
"dependencies": {
"Microsoft.IdentityModel.Protocols": "7.3.1",
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "7.3.1",
"Microsoft.IdentityModel.Tokens": "7.3.1",
"System.IdentityModel.Tokens.Jwt": "7.3.1"
}
},
"Microsoft.JSInterop": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "ePBj1uoRa+KZnkQwB3Cjxq025QT+erIcDgbDgc+yGb0FCzrE38gSBWMfbwlASPX1fifMnCwHzYvt2/gUFVp3qw=="
},
"Microsoft.JSInterop.WebAssembly": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "yvWSzDRBD0tfEyT+RUni2Nct5iKHP2ZtOnh8fU/6fkFpiISSkXZRON9Rg+G3258EnFGktzpYTSgq5Qo8L9Ax0g==",
"dependencies": {
"Microsoft.JSInterop": "8.0.1"
}
},
"Microsoft.NETCore.Platforms": {
"type": "Transitive",
"resolved": "5.0.0",
"contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ=="
},
"Microsoft.NETCore.Targets": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg=="
},
"StyleCop.Analyzers.Unstable": {
"type": "Transitive",
"resolved": "1.2.0.507",
"contentHash": "gTY3IQdRqDJ4hbhSA3e/R48oE8b/OiKfvwkt1QdNVfrJK2gMHBV8ldaHJ885jxWZfllK66soa/sdcjh9bX49Tw=="
},
"System.Diagnostics.DiagnosticSource": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ=="
},
"System.Formats.Asn1": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "AJukBuLoe3QeAF+mfaRKQb2dgyrvt340iMBHYv+VdBzCUM06IxGlvl0o/uPOS7lHnXPN6u8fFRHSHudx5aTi8w=="
},
"System.IdentityModel.Tokens.Jwt": {
"type": "Transitive",
"resolved": "7.3.1",
"contentHash": "iE8biOWyAC1NnYcZGcgXErNACvIQ6Gcmg5s28gsjVbyyYdF9NdKsYzAPAsO3KGK86EQjpToI1AO82XbG8chkzA==",
"dependencies": {
"Microsoft.IdentityModel.JsonWebTokens": "7.3.1",
"Microsoft.IdentityModel.Tokens": "7.3.1"
}
},
"System.IO": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.IO.FileSystem.AccessControl": {
"type": "Transitive",
"resolved": "5.0.0",
"contentHash": "SxHB3nuNrpptVk+vZ/F+7OHEpoHUIKKMl02bUmYHQr1r+glbZQxs7pRtsf4ENO29TVm2TH3AEeep2fJcy92oYw==",
"dependencies": {
"System.Security.AccessControl": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"System.IO.Pipelines": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA=="
},
"System.Memory": {
"type": "Transitive",
"resolved": "4.5.4",
"contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw=="
},
"System.Memory.Data": {
"type": "Transitive",
"resolved": "1.0.2",
"contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==",
"dependencies": {
"System.Text.Encodings.Web": "4.7.2",
"System.Text.Json": "4.6.0"
}
},
"System.Numerics.Vectors": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
},
"System.Reflection": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Runtime": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"System.Runtime.Loader": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "DHMaRn8D8YCK2GG2pw+UzNxn/OHVfaWx7OTLBD/hPegHZZgcZh3H6seWegrC4BYwsfuGrywIuT+MQs+rPqRLTQ==",
"dependencies": {
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Security.AccessControl": {
"type": "Transitive",
"resolved": "5.0.0",
"contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"System.Security.Cryptography.Pkcs": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "ULmp3xoOwNYjOYp4JZ2NK/6NdTgiN1GQXzVVN1njQ7LOZ0d0B9vyMnhyqbIi9Qw4JXj1JgCsitkTShboHRx7Eg==",
"dependencies": {
"System.Formats.Asn1": "8.0.0"
}
},
"System.Security.Cryptography.ProtectedData": {
"type": "Transitive",
"resolved": "4.7.0",
"contentHash": "ehYW0m9ptxpGWvE4zgqongBVWpSDU/JCFD4K7krxkQwSz/sFQjEXCUqpvencjy6DYDbn7Ig09R8GFffu8TtneQ=="
},
"System.Security.Cryptography.Xml": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "HQSFbakswZ1OXFz2Bt3AJlC6ENDqWeVpgqhf213xqQUMDifzydOHIKVb1RV4prayobvR3ETIScMaQdDF2hwGZA==",
"dependencies": {
"System.Security.Cryptography.Pkcs": "8.0.0"
}
},
"System.Security.Principal.Windows": {
"type": "Transitive",
"resolved": "5.0.0",
"contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA=="
},
"System.Text.Encoding": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
},
"System.Text.Json": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==",
"dependencies": {
"System.Text.Encodings.Web": "8.0.0"
}
},
"System.Threading.Tasks": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Threading.Tasks.Extensions": {
"type": "Transitive",
"resolved": "4.5.4",
"contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg=="
},
"nseguin.dev.web.client": {
"type": "Project",
"dependencies": {
"Microsoft.AspNetCore.Components.WebAssembly": "[8.0.1, )",
"Microsoft.AspNetCore.Components.WebAssembly.DevServer": "[8.0.1, )",
"Microsoft.Extensions.Http": "[8.0.0, )",
"NSeguin.Dev.Web.Common": "[1.0.0, )"
}
},
"nseguin.dev.web.common": {
"type": "Project",
"dependencies": {
"Blazored.LocalStorage": "[4.5.0, )",
"CommunityToolkit.Common": "[8.2.2, )",
"CommunityToolkit.Mvvm": "[8.2.2, )",
"JetBrains.Annotations": "[2023.3.0, )",
"Microsoft.Extensions.Configuration": "[8.0.0, )",
"Microsoft.Extensions.Configuration.Binder": "[8.0.1, )",
"Microsoft.Extensions.DependencyInjection.Abstractions": "[8.0.0, )",
"Microsoft.Extensions.Options": "[8.0.1, )",
"Microsoft.Extensions.Options.ConfigurationExtensions": "[8.0.0, )",
"Microsoft.Extensions.Options.DataAnnotations": "[8.0.0, )"
}
},
"Blazored.LocalStorage": {
"type": "CentralTransitive",
"requested": "[4.5.0, )",
"resolved": "4.5.0",
"contentHash": "6nZuJwA7zNIKx83IsObiHXZb09ponJOpCClU3en+hI8ZFvrOKXeOw+H7TegQZQrvdR1n9fkrVkEBQZg8vx6ZTw==",
"dependencies": {
"Microsoft.AspNetCore.Components.Web": "8.0.0"
}
},
"CommunityToolkit.Common": {
"type": "CentralTransitive",
"requested": "[8.2.2, )",
"resolved": "8.2.2",
"contentHash": "8/enuV1R68d0hK66UO8/HQ3yEsMjxUqondiEXlA499XB3tYgIqhCM+ITe8fHfH3l4JN3gY6h21SvkJnxfaG3NQ=="
},
"CommunityToolkit.Mvvm": {
"type": "CentralTransitive",
"requested": "[8.2.2, )",
"resolved": "8.2.2",
"contentHash": "r0g0k9tGYdrnz8R7T3x5UiokDffeevzK/2P/9SBL6fqLgN8B157MIi/bVUWI1KAz6ZorZrK9AdABCWUeXZZsvA=="
},
"JetBrains.Annotations": {
"type": "CentralTransitive",
"requested": "[2023.3.0, )",
"resolved": "2023.3.0",
"contentHash": "PHfnvdBUdGaTVG9bR/GEfxgTwWM0Z97Y6X3710wiljELBISipSfF5okn/vz+C2gfO+ihoEyVPjaJwn8ZalVukA=="
},
"Microsoft.AspNetCore.Components.WebAssembly": {
"type": "CentralTransitive",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "fOGM6Wc6QULk8GVH+QNmzRjifQhAMaEcWUaxxJGxvyfSQHdHxGP/vj89xvhJI7N42BRqULCEMlQu3UpDpompUQ==",
"dependencies": {
"Microsoft.AspNetCore.Components.Web": "8.0.1",
"Microsoft.Extensions.Configuration.Binder": "8.0.1",
"Microsoft.Extensions.Configuration.Json": "8.0.0",
"Microsoft.Extensions.Logging": "8.0.0",
"Microsoft.JSInterop.WebAssembly": "8.0.1"
}
},
"Microsoft.AspNetCore.Components.WebAssembly.DevServer": {
"type": "CentralTransitive",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "dhHTKbhAg1Z+0P4qP1Sbb9IhBXvvoGKtffBjpQElPhYKWxuQilStol0p5zeAOvi6UnXpI32h9YCWLKuJyp8FCA=="
},
"Microsoft.Extensions.Configuration": {
"type": "CentralTransitive",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "CentralTransitive",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "2UKFJnLiBt7Od6nCnTqP9rTIUNhzmn9Hv1l2FchyKbz8xieB9ULwZTbQZMw+M24Qw3F5dzzH1U9PPleN0LNLOQ==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "CentralTransitive",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Http": {
"type": "CentralTransitive",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "cWz4caHwvx0emoYe7NkHPxII/KkTI8R/LC9qdqJqnKv2poTJ4e2qqPGQqvRoQ5kaSA4FU5IV3qFAuLuOhoqULQ==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Diagnostics": "8.0.0",
"Microsoft.Extensions.Logging": "8.0.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "CentralTransitive",
"requested": "[8.0.1, )",
"resolved": "8.0.1",
"contentHash": "wmpp+BSU3oGifaev6Z9rrlwHoITLFfpVOSbgBrOXjkbJSCXnZVCsoRGE5c3fJFI4VlNgnNkNlI9y+5jC4fmOEA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Options.ConfigurationExtensions": {
"type": "CentralTransitive",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
"Microsoft.Extensions.Configuration.Binder": "8.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0",
"Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Options.DataAnnotations": {
"type": "CentralTransitive",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "z6p6q/N/hiU19A9tK7pjhXHpiYArO4oIICipxUviBEIOiDIoKRO7k6qItvw7alKcLtfHZOWmspuSKpvIvH0N8w==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
"Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Identity.Client.Extensions.Msal": {
"type": "CentralTransitive",
"requested": "[4.57.0, )",
"resolved": "4.57.0",
"contentHash": "kIm9mro7XWxsJMYfzscIlg12tNnzLx9c1WjnPinVrbM6zpZ1DyIt5iApK1tT4sIqsnPZ8D9iSQxtMZ5mQedNbw==",
"dependencies": {
"Microsoft.Identity.Client": "4.57.0",
"System.IO.FileSystem.AccessControl": "5.0.0",
"System.Security.Cryptography.ProtectedData": "4.5.0"
}
}
}
}
}

View file

@ -0,0 +1,939 @@
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
dependencies:
'@tailwindcss/aspect-ratio':
specifier: ^0.4.2
version: 0.4.2(tailwindcss@3.4.4)
'@tailwindcss/container-queries':
specifier: ^0.1.1
version: 0.1.1(tailwindcss@3.4.4)
'@tailwindcss/forms':
specifier: ^0.5.7
version: 0.5.7(tailwindcss@3.4.4)
'@tailwindcss/typography':
specifier: ^0.5.13
version: 0.5.13(tailwindcss@3.4.4)
tailwind-nord:
specifier: ^1.3.0
version: 1.3.0
tailwindcss:
specifier: ^3.4.4
version: 3.4.4
typescript:
specifier: ^5.0.0
version: 5.4.5
packages:
'@alloc/quick-lru@5.2.0':
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
'@jridgewell/gen-mapping@0.3.5':
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
'@jridgewell/set-array@1.2.1':
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
'@jridgewell/sourcemap-codec@1.4.15':
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
'@nodelib/fs.stat@2.0.5':
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
engines: {node: '>= 8'}
'@nodelib/fs.walk@1.2.8':
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
'@tailwindcss/aspect-ratio@0.4.2':
resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==}
peerDependencies:
tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1'
'@tailwindcss/container-queries@0.1.1':
resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==}
peerDependencies:
tailwindcss: '>=3.2.0'
'@tailwindcss/forms@0.5.7':
resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==}
peerDependencies:
tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1'
'@tailwindcss/typography@0.5.13':
resolution: {integrity: sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==}
peerDependencies:
tailwindcss: '>=3.0.0 || insiders'
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
ansi-regex@6.0.1:
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
engines: {node: '>=12'}
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
binary-extensions@2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
brace-expansion@2.0.1:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
camelcase-css@2.0.1:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
commander@4.1.1:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
cross-spawn@7.0.3:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
hasBin: true
didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
fast-glob@3.3.2:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
fastq@1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
foreground-child@3.2.1:
resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==}
engines: {node: '>=14'}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
glob-parent@6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
glob@10.4.1:
resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==}
engines: {node: '>=16 || 14 >=14.18'}
hasBin: true
hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
is-core-module@2.13.1:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
jackspeak@3.4.0:
resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==}
engines: {node: '>=14'}
jiti@1.21.6:
resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
hasBin: true
lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'}
lilconfig@3.1.2:
resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
engines: {node: '>=14'}
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
lodash.castarray@4.4.0:
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
lodash.isplainobject@4.0.6:
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
lru-cache@10.2.2:
resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==}
engines: {node: 14 || >=16.14}
merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
micromatch@4.0.7:
resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
engines: {node: '>=8.6'}
mini-svg-data-uri@1.4.4:
resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
hasBin: true
minimatch@9.0.4:
resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==}
engines: {node: '>=16 || 14 >=14.17'}
minipass@7.1.2:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
object-hash@3.0.0:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
path-scurry@1.11.1:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
picocolors@1.0.1:
resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
pirates@4.0.6:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
postcss-import@15.1.0:
resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
engines: {node: '>=14.0.0'}
peerDependencies:
postcss: ^8.0.0
postcss-js@4.0.1:
resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
engines: {node: ^12 || ^14 || >= 16}
peerDependencies:
postcss: ^8.4.21
postcss-load-config@4.0.2:
resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
engines: {node: '>= 14'}
peerDependencies:
postcss: '>=8.0.9'
ts-node: '>=9.0.0'
peerDependenciesMeta:
postcss:
optional: true
ts-node:
optional: true
postcss-nested@6.0.1:
resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.2.14
postcss-selector-parser@6.0.10:
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
engines: {node: '>=4'}
postcss-selector-parser@6.1.0:
resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==}
engines: {node: '>=4'}
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
postcss@8.4.38:
resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
engines: {node: ^10 || ^12 || >=14}
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
read-cache@1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
reusify@1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
shebang-regex@3.0.0:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
source-map-js@1.2.0:
resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
engines: {node: '>=0.10.0'}
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
string-width@5.1.2:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
strip-ansi@7.1.0:
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
engines: {node: '>=12'}
sucrase@3.35.0:
resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
tailwind-nord@1.3.0:
resolution: {integrity: sha512-F5tdTG3n9zzctAuRqjX2sdpmwSjbYC/HQdXSg/TQIxaynO1DNvnqBaE+IhmPbQIttMvvY54KiYMDXJqMdQLi1Q==}
tailwindcss@3.4.4:
resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==}
engines: {node: '>=14.0.0'}
hasBin: true
thenify-all@1.6.0:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
typescript@5.4.5:
resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
engines: {node: '>=14.17'}
hasBin: true
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
hasBin: true
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
wrap-ansi@8.1.0:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
yaml@2.4.5:
resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==}
engines: {node: '>= 14'}
hasBin: true
snapshots:
'@alloc/quick-lru@5.2.0': {}
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
string-width-cjs: string-width@4.2.3
strip-ansi: 7.1.0
strip-ansi-cjs: strip-ansi@6.0.1
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
'@jridgewell/gen-mapping@0.3.5':
dependencies:
'@jridgewell/set-array': 1.2.1
'@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/trace-mapping': 0.3.25
'@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/set-array@1.2.1': {}
'@jridgewell/sourcemap-codec@1.4.15': {}
'@jridgewell/trace-mapping@0.3.25':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.4.15
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
run-parallel: 1.2.0
'@nodelib/fs.stat@2.0.5': {}
'@nodelib/fs.walk@1.2.8':
dependencies:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.17.1
'@pkgjs/parseargs@0.11.0':
optional: true
'@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.4)':
dependencies:
tailwindcss: 3.4.4
'@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.4)':
dependencies:
tailwindcss: 3.4.4
'@tailwindcss/forms@0.5.7(tailwindcss@3.4.4)':
dependencies:
mini-svg-data-uri: 1.4.4
tailwindcss: 3.4.4
'@tailwindcss/typography@0.5.13(tailwindcss@3.4.4)':
dependencies:
lodash.castarray: 4.4.0
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10
tailwindcss: 3.4.4
ansi-regex@5.0.1: {}
ansi-regex@6.0.1: {}
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
ansi-styles@6.2.1: {}
any-promise@1.3.0: {}
anymatch@3.1.3:
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
arg@5.0.2: {}
balanced-match@1.0.2: {}
binary-extensions@2.3.0: {}
brace-expansion@2.0.1:
dependencies:
balanced-match: 1.0.2
braces@3.0.3:
dependencies:
fill-range: 7.1.1
camelcase-css@2.0.1: {}
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
braces: 3.0.3
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.3
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
color-name@1.1.4: {}
commander@4.1.1: {}
cross-spawn@7.0.3:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
cssesc@3.0.0: {}
didyoumean@1.2.2: {}
dlv@1.1.3: {}
eastasianwidth@0.2.0: {}
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
fast-glob@3.3.2:
dependencies:
'@nodelib/fs.stat': 2.0.5
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.7
fastq@1.17.1:
dependencies:
reusify: 1.0.4
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
foreground-child@3.2.1:
dependencies:
cross-spawn: 7.0.3
signal-exit: 4.1.0
fsevents@2.3.3:
optional: true
function-bind@1.1.2: {}
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
glob-parent@6.0.2:
dependencies:
is-glob: 4.0.3
glob@10.4.1:
dependencies:
foreground-child: 3.2.1
jackspeak: 3.4.0
minimatch: 9.0.4
minipass: 7.1.2
path-scurry: 1.11.1
hasown@2.0.2:
dependencies:
function-bind: 1.1.2
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.3.0
is-core-module@2.13.1:
dependencies:
hasown: 2.0.2
is-extglob@2.1.1: {}
is-fullwidth-code-point@3.0.0: {}
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
is-number@7.0.0: {}
isexe@2.0.0: {}
jackspeak@3.4.0:
dependencies:
'@isaacs/cliui': 8.0.2
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
jiti@1.21.6: {}
lilconfig@2.1.0: {}
lilconfig@3.1.2: {}
lines-and-columns@1.2.4: {}
lodash.castarray@4.4.0: {}
lodash.isplainobject@4.0.6: {}
lodash.merge@4.6.2: {}
lru-cache@10.2.2: {}
merge2@1.4.1: {}
micromatch@4.0.7:
dependencies:
braces: 3.0.3
picomatch: 2.3.1
mini-svg-data-uri@1.4.4: {}
minimatch@9.0.4:
dependencies:
brace-expansion: 2.0.1
minipass@7.1.2: {}
mz@2.7.0:
dependencies:
any-promise: 1.3.0
object-assign: 4.1.1
thenify-all: 1.6.0
nanoid@3.3.7: {}
normalize-path@3.0.0: {}
object-assign@4.1.1: {}
object-hash@3.0.0: {}
path-key@3.1.1: {}
path-parse@1.0.7: {}
path-scurry@1.11.1:
dependencies:
lru-cache: 10.2.2
minipass: 7.1.2
picocolors@1.0.1: {}
picomatch@2.3.1: {}
pify@2.3.0: {}
pirates@4.0.6: {}
postcss-import@15.1.0(postcss@8.4.38):
dependencies:
postcss: 8.4.38
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.8
postcss-js@4.0.1(postcss@8.4.38):
dependencies:
camelcase-css: 2.0.1
postcss: 8.4.38
postcss-load-config@4.0.2(postcss@8.4.38):
dependencies:
lilconfig: 3.1.2
yaml: 2.4.5
optionalDependencies:
postcss: 8.4.38
postcss-nested@6.0.1(postcss@8.4.38):
dependencies:
postcss: 8.4.38
postcss-selector-parser: 6.1.0
postcss-selector-parser@6.0.10:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss-selector-parser@6.1.0:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss-value-parser@4.2.0: {}
postcss@8.4.38:
dependencies:
nanoid: 3.3.7
picocolors: 1.0.1
source-map-js: 1.2.0
queue-microtask@1.2.3: {}
read-cache@1.0.0:
dependencies:
pify: 2.3.0
readdirp@3.6.0:
dependencies:
picomatch: 2.3.1
resolve@1.22.8:
dependencies:
is-core-module: 2.13.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
reusify@1.0.4: {}
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
shebang-regex@3.0.0: {}
signal-exit@4.1.0: {}
source-map-js@1.2.0: {}
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
string-width@5.1.2:
dependencies:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
strip-ansi: 7.1.0
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
strip-ansi@7.1.0:
dependencies:
ansi-regex: 6.0.1
sucrase@3.35.0:
dependencies:
'@jridgewell/gen-mapping': 0.3.5
commander: 4.1.1
glob: 10.4.1
lines-and-columns: 1.2.4
mz: 2.7.0
pirates: 4.0.6
ts-interface-checker: 0.1.13
supports-preserve-symlinks-flag@1.0.0: {}
tailwind-nord@1.3.0: {}
tailwindcss@3.4.4:
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
chokidar: 3.6.0
didyoumean: 1.2.2
dlv: 1.1.3
fast-glob: 3.3.2
glob-parent: 6.0.2
is-glob: 4.0.3
jiti: 1.21.6
lilconfig: 2.1.0
micromatch: 4.0.7
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.0.1
postcss: 8.4.38
postcss-import: 15.1.0(postcss@8.4.38)
postcss-js: 4.0.1(postcss@8.4.38)
postcss-load-config: 4.0.2(postcss@8.4.38)
postcss-nested: 6.0.1(postcss@8.4.38)
postcss-selector-parser: 6.1.0
resolve: 1.22.8
sucrase: 3.35.0
transitivePeerDependencies:
- ts-node
thenify-all@1.6.0:
dependencies:
thenify: 3.3.1
thenify@3.3.1:
dependencies:
any-promise: 1.3.0
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
ts-interface-checker@0.1.13: {}
typescript@5.4.5: {}
util-deprecate@1.0.2: {}
which@2.0.2:
dependencies:
isexe: 2.0.0
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi@8.1.0:
dependencies:
ansi-styles: 6.2.1
string-width: 5.1.2
strip-ansi: 7.1.0
yaml@2.4.5: {}

View file

@ -2,11 +2,11 @@ import type {Config} from 'tailwindcss'
export default {
content: [
'./src/NSeguin.Dev.Web/Components/Pages/**/*.{razor,cshtml}',
'./src/NSeguin.Dev.Web/Components/Layout/**/*.{razor,cshtml}',
'./src/NSeguin.Dev.Web/Components/Shared/**/*.{razor,cshtml}',
'./src/NSeguin.Dev.Web.Client/Pages/**/*.{razor,cshtml}',
'./src/NSeguin.Dev.Web.Client/Shared/**/*.{razor,cshtml}',
'./Components/Pages/**/*.{razor,cshtml}',
'./Components/Layout/**/*.{razor,cshtml}',
'./Components/Shared/**/*.{razor,cshtml}',
'../NSeguin.Dev.Web.Client/Pages/**/*.{razor,cshtml}',
'../NSeguin.Dev.Web.Client/Shared/**/*.{razor,cshtml}',
],
theme: {
colors: {
@ -145,7 +145,11 @@ export default {
}
},
plugins: [
require('tailwind-nord')
require('tailwind-nord'),
require('@tailwindcss/typography'),
require('@tailwindcss/forms'),
require('@tailwindcss/aspect-ratio'),
require('@tailwindcss/container-queries')
]
}
} satisfies Config

File diff suppressed because one or more lines are too long

View file

@ -1,9 +1,15 @@
var App = App || {};
const App = App || {};
App.setFocus = function (element) {
element.focus();
}
App.scrollIntoView = function (element, args) {
if (element === undefined) {
console.error('Element is undefined');
} else if (element === null) {
console.error('Element is null');
}
element.scrollIntoView(args);
}

View file

@ -0,0 +1,22 @@
MIT License
Copyright (c) 2023 Nicholas Seguin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,2 @@
[
]

Binary file not shown.

View file

@ -2,9 +2,8 @@
<PropertyGroup>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>preview</LangVersion>
<LangVersion>latest</LangVersion>
<Deterministic>true</Deterministic>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">