From 0010c92103288193e980c6060f3153aa6dea4ef0 Mon Sep 17 00:00:00 2001 From: Fabien Masson Date: Sat, 8 Aug 2026 23:26:14 +0200 Subject: [PATCH] Convert backend/web from submodule to regular directory --- backend/web | 1 - backend/web/.gitignore | 28 + backend/web/.npmrc | 1 + backend/web/.prettierignore | 9 + backend/web/.vscode/extensions.json | 8 + backend/web/.vscode/settings.json | 14 + backend/web/Makefile | 30 + backend/web/README.md | 42 + backend/web/audit.json | 382 ++ backend/web/eslint.config.js | 50 + backend/web/package-lock.json | 3980 +++++++++++++++++ backend/web/package.json | 53 + backend/web/prettier.config.js | 12 + backend/web/src/app.d.ts | 16 + backend/web/src/app.html | 12 + backend/web/src/lib/api/client.ts | 62 + backend/web/src/lib/api/endpoints/auth.ts | 33 + backend/web/src/lib/api/endpoints/user.ts | 7 + .../src/lib/assets/android-chrome-192x192.png | Bin 0 -> 8191 bytes .../src/lib/assets/android-chrome-512x512.png | Bin 0 -> 29585 bytes .../web/src/lib/assets/apple-touch-icon.png | Bin 0 -> 7354 bytes backend/web/src/lib/assets/favicon-16x16.png | Bin 0 -> 533 bytes backend/web/src/lib/assets/favicon-32x32.png | Bin 0 -> 1043 bytes backend/web/src/lib/assets/favicon.ico | Bin 0 -> 15406 bytes backend/web/src/lib/assets/favicon.svg | 56 + backend/web/src/lib/assets/logo-txt.png | Bin 0 -> 2767 bytes .../web/src/lib/components/FormError.svelte | 13 + backend/web/src/lib/components/Menu.svelte | 13 + backend/web/src/lib/components/Sidebar.svelte | 55 + backend/web/src/lib/index.ts | 1 + backend/web/src/lib/state/auth.svelte.ts | 26 + backend/web/src/lib/state/toaster.svelte.ts | 20 + backend/web/src/lib/state/ui.svelte.ts | 5 + backend/web/src/lib/types/api.ts | 10 + backend/web/src/lib/ui/themeswitcher.ts | 17 + backend/web/src/lib/utilities/validators.ts | 5 + .../(authenticated)/(chat)/+page.svelte | 7 + .../routes/(authenticated)/(chat)/+page.ts | 3 + .../src/routes/(authenticated)/+layout.svelte | 80 + .../web/src/routes/(authenticated)/+layout.ts | 8 + .../(authenticated)/history/+page.svelte | 6 + .../routes/(authenticated)/history/+page.ts | 3 + .../routes/(authenticated)/kb/+page.svelte | 0 .../src/routes/(authenticated)/kb/+page.ts | 3 + .../(authenticated)/profile/+page.svelte | 109 + .../routes/(authenticated)/profile/+page.ts | 9 + .../(authenticated)/settings/+page.svelte | 58 + .../routes/(authenticated)/settings/+page.ts | 3 + .../settings/agents/+page.svelte | 1 + .../(authenticated)/settings/agents/+page.ts | 7 + .../settings/channels/+page.svelte | 1 + .../settings/channels/+page.ts | 7 + .../(authenticated)/settings/kb/+page.svelte | 1 + .../(authenticated)/settings/kb/+page.ts | 7 + .../settings/memory/+page.svelte | 1 + .../(authenticated)/settings/memory/+page.ts | 7 + .../settings/models/+page.svelte | 1 + .../(authenticated)/settings/models/+page.ts | 7 + .../settings/skills/+page.svelte | 1 + .../(authenticated)/settings/skills/+page.ts | 7 + .../settings/tools/+page.svelte | 1 + .../(authenticated)/settings/tools/+page.ts | 7 + .../settings/users/+page.svelte | 1 + .../(authenticated)/settings/users/+page.ts | 7 + .../routes/(authenticated)/tasks/+page.svelte | 3 + .../src/routes/(authenticated)/tasks/+page.ts | 3 + .../src/routes/(public)/login/+page.svelte | 105 + .../src/routes/(public)/register/+page.svelte | 120 + backend/web/src/routes/+layout.js | 2 + backend/web/src/routes/+layout.svelte | 18 + backend/web/src/routes/layout.css | 107 + .../web/static/assets/fontello/LICENSE.txt | 12 + backend/web/static/assets/fontello/README.txt | 75 + .../web/static/assets/fontello/config.json | 118 + .../static/assets/fontello/css/animation.css | 85 + .../assets/fontello/css/fontello-codes.css | 19 + .../assets/fontello/css/fontello-embedded.css | 77 + .../fontello/css/fontello-ie7-codes.css | 19 + .../assets/fontello/css/fontello-ie7.css | 30 + .../static/assets/fontello/css/fontello.css | 74 + backend/web/static/assets/fontello/demo.html | 280 ++ .../static/assets/fontello/font/fontello.eot | Bin 0 -> 10680 bytes .../static/assets/fontello/font/fontello.svg | 46 + .../static/assets/fontello/font/fontello.ttf | Bin 0 -> 10512 bytes .../static/assets/fontello/font/fontello.woff | Bin 0 -> 6568 bytes .../assets/fontello/font/fontello.woff2 | Bin 0 -> 5580 bytes backend/web/static/robots.txt | 3 + backend/web/tsconfig.json | 20 + backend/web/vite.config.ts | 30 + 89 files changed, 6559 insertions(+), 1 deletion(-) delete mode 160000 backend/web create mode 100644 backend/web/.gitignore create mode 100644 backend/web/.npmrc create mode 100644 backend/web/.prettierignore create mode 100644 backend/web/.vscode/extensions.json create mode 100644 backend/web/.vscode/settings.json create mode 100644 backend/web/Makefile create mode 100644 backend/web/README.md create mode 100644 backend/web/audit.json create mode 100644 backend/web/eslint.config.js create mode 100644 backend/web/package-lock.json create mode 100644 backend/web/package.json create mode 100644 backend/web/prettier.config.js create mode 100644 backend/web/src/app.d.ts create mode 100644 backend/web/src/app.html create mode 100644 backend/web/src/lib/api/client.ts create mode 100644 backend/web/src/lib/api/endpoints/auth.ts create mode 100644 backend/web/src/lib/api/endpoints/user.ts create mode 100644 backend/web/src/lib/assets/android-chrome-192x192.png create mode 100644 backend/web/src/lib/assets/android-chrome-512x512.png create mode 100644 backend/web/src/lib/assets/apple-touch-icon.png create mode 100644 backend/web/src/lib/assets/favicon-16x16.png create mode 100644 backend/web/src/lib/assets/favicon-32x32.png create mode 100644 backend/web/src/lib/assets/favicon.ico create mode 100644 backend/web/src/lib/assets/favicon.svg create mode 100644 backend/web/src/lib/assets/logo-txt.png create mode 100644 backend/web/src/lib/components/FormError.svelte create mode 100644 backend/web/src/lib/components/Menu.svelte create mode 100644 backend/web/src/lib/components/Sidebar.svelte create mode 100644 backend/web/src/lib/index.ts create mode 100644 backend/web/src/lib/state/auth.svelte.ts create mode 100644 backend/web/src/lib/state/toaster.svelte.ts create mode 100644 backend/web/src/lib/state/ui.svelte.ts create mode 100644 backend/web/src/lib/types/api.ts create mode 100644 backend/web/src/lib/ui/themeswitcher.ts create mode 100644 backend/web/src/lib/utilities/validators.ts create mode 100644 backend/web/src/routes/(authenticated)/(chat)/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/(chat)/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/+layout.svelte create mode 100644 backend/web/src/routes/(authenticated)/+layout.ts create mode 100644 backend/web/src/routes/(authenticated)/history/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/history/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/kb/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/kb/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/profile/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/profile/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/settings/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/settings/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/settings/agents/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/settings/agents/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/settings/channels/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/settings/channels/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/settings/kb/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/settings/kb/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/settings/memory/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/settings/memory/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/settings/models/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/settings/models/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/settings/skills/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/settings/skills/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/settings/tools/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/settings/tools/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/settings/users/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/settings/users/+page.ts create mode 100644 backend/web/src/routes/(authenticated)/tasks/+page.svelte create mode 100644 backend/web/src/routes/(authenticated)/tasks/+page.ts create mode 100644 backend/web/src/routes/(public)/login/+page.svelte create mode 100644 backend/web/src/routes/(public)/register/+page.svelte create mode 100644 backend/web/src/routes/+layout.js create mode 100644 backend/web/src/routes/+layout.svelte create mode 100644 backend/web/src/routes/layout.css create mode 100644 backend/web/static/assets/fontello/LICENSE.txt create mode 100644 backend/web/static/assets/fontello/README.txt create mode 100644 backend/web/static/assets/fontello/config.json create mode 100644 backend/web/static/assets/fontello/css/animation.css create mode 100644 backend/web/static/assets/fontello/css/fontello-codes.css create mode 100644 backend/web/static/assets/fontello/css/fontello-embedded.css create mode 100644 backend/web/static/assets/fontello/css/fontello-ie7-codes.css create mode 100644 backend/web/static/assets/fontello/css/fontello-ie7.css create mode 100644 backend/web/static/assets/fontello/css/fontello.css create mode 100644 backend/web/static/assets/fontello/demo.html create mode 100644 backend/web/static/assets/fontello/font/fontello.eot create mode 100644 backend/web/static/assets/fontello/font/fontello.svg create mode 100644 backend/web/static/assets/fontello/font/fontello.ttf create mode 100644 backend/web/static/assets/fontello/font/fontello.woff create mode 100644 backend/web/static/assets/fontello/font/fontello.woff2 create mode 100644 backend/web/static/robots.txt create mode 100644 backend/web/tsconfig.json create mode 100644 backend/web/vite.config.ts diff --git a/backend/web b/backend/web deleted file mode 160000 index fd6aeab..0000000 --- a/backend/web +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fd6aeabbd58a20faf8376241bf72cd0f6947fb98 diff --git a/backend/web/.gitignore b/backend/web/.gitignore new file mode 100644 index 0000000..b470a5c --- /dev/null +++ b/backend/web/.gitignore @@ -0,0 +1,28 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* +# SQLite +*.db +*.db.wal + +.fontello diff --git a/backend/web/.npmrc b/backend/web/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/backend/web/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/backend/web/.prettierignore b/backend/web/.prettierignore new file mode 100644 index 0000000..7d74fe2 --- /dev/null +++ b/backend/web/.prettierignore @@ -0,0 +1,9 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock +bun.lock +bun.lockb + +# Miscellaneous +/static/ diff --git a/backend/web/.vscode/extensions.json b/backend/web/.vscode/extensions.json new file mode 100644 index 0000000..175f389 --- /dev/null +++ b/backend/web/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "svelte.svelte-vscode", + "esbenp.prettier-vscode", + "dbaeumer.vscode-eslint", + "bradlc.vscode-tailwindcss" + ] +} diff --git a/backend/web/.vscode/settings.json b/backend/web/.vscode/settings.json new file mode 100644 index 0000000..9b1e8c5 --- /dev/null +++ b/backend/web/.vscode/settings.json @@ -0,0 +1,14 @@ +{ + "files.associations": { + "*.css": "tailwindcss" + }, + "svelte/no-navigation-without-resolve": [ + "error", + { + "ignoreGoto": false, + "ignoreLinks": false, + "ignorePushState": false, + "ignoreReplaceState": false + } + ] +} diff --git a/backend/web/Makefile b/backend/web/Makefile new file mode 100644 index 0000000..058befe --- /dev/null +++ b/backend/web/Makefile @@ -0,0 +1,30 @@ +FONT_DIR ?= ./static/assets/fontello +FONTELLO_HOST ?= https://fontello.com + + +fontopen: + @if test ! `which curl` ; then \ + echo 'Install curl first.' >&2 ; \ + exit 128 ; \ + fi + curl --silent --show-error --fail --output .fontello \ + --form "config=@${FONT_DIR}/config.json" \ + ${FONTELLO_HOST} + xdg-open ${FONTELLO_HOST}/`cat .fontello` + +fontsave: + @if test ! `which unzip` ; then \ + echo 'Install unzip first.' >&2 ; \ + exit 128 ; \ + fi + @if test ! -e .fontello ; then \ + echo 'Run `make fontopen` first.' >&2 ; \ + exit 128 ; \ + fi + rm -rf .fontello.src .fontello.zip + curl --silent --show-error --fail --output .fontello.zip \ + ${FONTELLO_HOST}/`cat .fontello`/get + unzip .fontello.zip -d .fontello.src + rm -rf ${FONT_DIR} + mv `find ./.fontello.src -maxdepth 1 -name 'fontello-*'` ${FONT_DIR} + rm -rf .fontello.src .fontello.zip diff --git a/backend/web/README.md b/backend/web/README.md new file mode 100644 index 0000000..5537467 --- /dev/null +++ b/backend/web/README.md @@ -0,0 +1,42 @@ +# sv + +Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```sh +# create a new project +npx sv create my-app +``` + +To recreate this project with the same configuration: + +```sh +# recreate this project +npx sv@0.17.0 create --template minimal --types ts --add prettier eslint tailwindcss="plugins:typography,forms" better-auth="demo:password,github" drizzle="database:sqlite+sqlite:turso" --no-install ./ +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```sh +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```sh +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. diff --git a/backend/web/audit.json b/backend/web/audit.json new file mode 100644 index 0000000..0dd8f3b --- /dev/null +++ b/backend/web/audit.json @@ -0,0 +1,382 @@ +{ + "auditReportVersion": 2, + "vulnerabilities": { + "@chevrotain/cst-dts-gen": { + "name": "@chevrotain/cst-dts-gen", + "severity": "moderate", + "isDirect": false, + "via": [ + "@chevrotain/gast", + "lodash" + ], + "effects": [ + "chevrotain" + ], + "range": "10.0.0 - 10.5.0", + "nodes": [ + "node_modules/@chevrotain/cst-dts-gen" + ], + "fixAvailable": { + "name": "auth", + "version": "1.2.3", + "isSemVerMajor": true + } + }, + "@chevrotain/gast": { + "name": "@chevrotain/gast", + "severity": "moderate", + "isDirect": false, + "via": [ + "lodash" + ], + "effects": [ + "@chevrotain/cst-dts-gen", + "chevrotain" + ], + "range": "<=10.5.0", + "nodes": [ + "node_modules/@chevrotain/gast" + ], + "fixAvailable": { + "name": "auth", + "version": "1.2.3", + "isSemVerMajor": true + } + }, + "@esbuild-kit/core-utils": { + "name": "@esbuild-kit/core-utils", + "severity": "moderate", + "isDirect": false, + "via": [ + "esbuild" + ], + "effects": [ + "@esbuild-kit/esm-loader" + ], + "range": "*", + "nodes": [ + "node_modules/@esbuild-kit/core-utils" + ], + "fixAvailable": { + "name": "drizzle-kit", + "version": "0.18.1", + "isSemVerMajor": true + } + }, + "@esbuild-kit/esm-loader": { + "name": "@esbuild-kit/esm-loader", + "severity": "moderate", + "isDirect": false, + "via": [ + "@esbuild-kit/core-utils" + ], + "effects": [ + "drizzle-kit" + ], + "range": "*", + "nodes": [ + "node_modules/@esbuild-kit/esm-loader" + ], + "fixAvailable": { + "name": "drizzle-kit", + "version": "0.18.1", + "isSemVerMajor": true + } + }, + "@mrleebo/prisma-ast": { + "name": "@mrleebo/prisma-ast", + "severity": "moderate", + "isDirect": false, + "via": [ + "chevrotain" + ], + "effects": [ + "auth" + ], + "range": "0.4.2 - 0.13.1", + "nodes": [ + "node_modules/@mrleebo/prisma-ast" + ], + "fixAvailable": { + "name": "auth", + "version": "1.2.3", + "isSemVerMajor": true + } + }, + "@sveltejs/adapter-auto": { + "name": "@sveltejs/adapter-auto", + "severity": "low", + "isDirect": true, + "via": [ + "@sveltejs/kit" + ], + "effects": [], + "range": "1.0.0-next.0 - 8.0.0-next.0", + "nodes": [ + "node_modules/@sveltejs/adapter-auto" + ], + "fixAvailable": { + "name": "@sveltejs/adapter-auto", + "version": "0.0.1", + "isSemVerMajor": true + } + }, + "@sveltejs/kit": { + "name": "@sveltejs/kit", + "severity": "low", + "isDirect": true, + "via": [ + "cookie" + ], + "effects": [ + "@sveltejs/adapter-auto", + "better-auth" + ], + "range": "1.0.0-next.0 - 2.70.2", + "nodes": [ + "node_modules/@sveltejs/kit" + ], + "fixAvailable": { + "name": "@sveltejs/kit", + "version": "0.0.30", + "isSemVerMajor": true + } + }, + "auth": { + "name": "auth", + "severity": "moderate", + "isDirect": true, + "via": [ + "@mrleebo/prisma-ast", + "better-auth" + ], + "effects": [], + "range": ">=1.5.0-beta.15", + "nodes": [ + "node_modules/auth" + ], + "fixAvailable": { + "name": "auth", + "version": "1.2.3", + "isSemVerMajor": true + } + }, + "better-auth": { + "name": "better-auth", + "severity": "low", + "isDirect": true, + "via": [ + "@sveltejs/kit" + ], + "effects": [ + "auth" + ], + "range": "1.3.10-beta.1 - 1.3.21 || 1.4.0-beta.1 - 1.4.0-beta.28 || >=1.4.4-beta.1", + "nodes": [ + "node_modules/better-auth" + ], + "fixAvailable": { + "name": "better-auth", + "version": "1.4.3", + "isSemVerMajor": true + } + }, + "chevrotain": { + "name": "chevrotain", + "severity": "moderate", + "isDirect": false, + "via": [ + "@chevrotain/cst-dts-gen", + "@chevrotain/gast", + "lodash" + ], + "effects": [ + "@mrleebo/prisma-ast" + ], + "range": "10.0.0 - 10.5.0", + "nodes": [ + "node_modules/chevrotain" + ], + "fixAvailable": { + "name": "auth", + "version": "1.2.3", + "isSemVerMajor": true + } + }, + "cookie": { + "name": "cookie", + "severity": "low", + "isDirect": false, + "via": [ + { + "source": 1103907, + "name": "cookie", + "dependency": "cookie", + "title": "cookie accepts cookie name, path, and domain with out of bounds characters", + "url": "https://github.com/advisories/GHSA-pxg6-pf52-xh8x", + "severity": "low", + "cwe": [ + "CWE-74" + ], + "cvss": { + "score": 0, + "vectorString": null + }, + "range": "<0.7.0" + } + ], + "effects": [ + "@sveltejs/kit" + ], + "range": "<0.7.0", + "nodes": [ + "node_modules/cookie" + ], + "fixAvailable": { + "name": "@sveltejs/kit", + "version": "0.0.30", + "isSemVerMajor": true + } + }, + "drizzle-kit": { + "name": "drizzle-kit", + "severity": "moderate", + "isDirect": true, + "via": [ + "@esbuild-kit/esm-loader" + ], + "effects": [], + "range": "0.19.0 - 1.0.0-beta.1-fd8bfcc", + "nodes": [ + "node_modules/drizzle-kit" + ], + "fixAvailable": { + "name": "drizzle-kit", + "version": "0.18.1", + "isSemVerMajor": true + } + }, + "esbuild": { + "name": "esbuild", + "severity": "moderate", + "isDirect": false, + "via": [ + { + "source": 1102341, + "name": "esbuild", + "dependency": "esbuild", + "title": "esbuild enables any website to send any requests to the development server and read the response", + "url": "https://github.com/advisories/GHSA-67mh-4wv8-2f99", + "severity": "moderate", + "cwe": [ + "CWE-346" + ], + "cvss": { + "score": 5.3, + "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N" + }, + "range": "<=0.24.2" + } + ], + "effects": [ + "@esbuild-kit/core-utils" + ], + "range": "<=0.24.2", + "nodes": [ + "node_modules/@esbuild-kit/core-utils/node_modules/esbuild" + ], + "fixAvailable": { + "name": "drizzle-kit", + "version": "0.18.1", + "isSemVerMajor": true + } + }, + "lodash": { + "name": "lodash", + "severity": "high", + "isDirect": false, + "via": [ + { + "source": 1115806, + "name": "lodash", + "dependency": "lodash", + "title": "lodash vulnerable to Code Injection via `_.template` imports key names", + "url": "https://github.com/advisories/GHSA-r5fr-rjxr-66jc", + "severity": "high", + "cwe": [ + "CWE-94" + ], + "cvss": { + "score": 8.1, + "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H" + }, + "range": ">=4.0.0 <=4.17.23" + }, + { + "source": 1115810, + "name": "lodash", + "dependency": "lodash", + "title": "lodash vulnerable to Prototype Pollution via array path bypass in `_.unset` and `_.omit`", + "url": "https://github.com/advisories/GHSA-f23m-r3pf-42rh", + "severity": "moderate", + "cwe": [ + "CWE-1321" + ], + "cvss": { + "score": 6.5, + "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L" + }, + "range": "<=4.17.23" + }, + { + "source": 1120370, + "name": "lodash", + "dependency": "lodash", + "title": "Lodash has Prototype Pollution Vulnerability in `_.unset` and `_.omit` functions", + "url": "https://github.com/advisories/GHSA-xxjr-mmjv-4gpg", + "severity": "moderate", + "cwe": [ + "CWE-1321" + ], + "cvss": { + "score": 6.5, + "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L" + }, + "range": ">=4.0.0 <=4.17.22" + } + ], + "effects": [ + "@chevrotain/cst-dts-gen", + "@chevrotain/gast", + "chevrotain" + ], + "range": "<=4.17.23", + "nodes": [ + "node_modules/lodash" + ], + "fixAvailable": { + "name": "auth", + "version": "1.2.3", + "isSemVerMajor": true + } + } + }, + "metadata": { + "vulnerabilities": { + "info": 0, + "low": 4, + "moderate": 9, + "high": 1, + "critical": 0, + "total": 14 + }, + "dependencies": { + "prod": 2, + "dev": 451, + "optional": 139, + "peer": 0, + "peerOptional": 0, + "total": 452 + } + } +} diff --git a/backend/web/eslint.config.js b/backend/web/eslint.config.js new file mode 100644 index 0000000..e50cf46 --- /dev/null +++ b/backend/web/eslint.config.js @@ -0,0 +1,50 @@ +import prettier from 'eslint-config-prettier'; +import path from 'node:path'; +import js from '@eslint/js'; +import svelte from 'eslint-plugin-svelte'; +import { defineConfig, includeIgnoreFile } from 'eslint/config'; +import globals from 'globals'; +import ts from 'typescript-eslint'; + +const gitignorePath = path.resolve(import.meta.dirname, '.gitignore'); + +export default defineConfig( + includeIgnoreFile(gitignorePath), + js.configs.recommended, + ts.configs.recommended, + svelte.configs.recommended, + prettier, + svelte.configs.prettier, + { + languageOptions: { globals: { ...globals.browser, ...globals.node } }, + rules: { + "svelte/no-navigation-without-resolve": [ + "error", + { + "ignoreGoto": true, + "ignoreLinks": true, + "ignorePushState": true, + "ignoreReplaceState": true + } + ], + // typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects. + // see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors + "no-undef": 'off' + } + }, + { + files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], + languageOptions: { + parserOptions: { + projectService: true, + extraFileExtensions: ['.svelte'], + parser: ts.parser + } + } + }, + { + // Override or add rule settings here, such as: + // 'svelte/button-has-type': 'error' + rules: {} + } +); diff --git a/backend/web/package-lock.json b/backend/web/package-lock.json new file mode 100644 index 0000000..4b74380 --- /dev/null +++ b/backend/web/package-lock.json @@ -0,0 +1,3980 @@ +{ + "name": "web", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "web", + "version": "0.0.1", + "dependencies": { + "oidc-client-ts": "^3.5.0" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@libsql/client": "^0.17.3", + "@sveltejs/adapter-auto": "^7.0.1", + "@sveltejs/adapter-static": "^3.0.10", + "@sveltejs/kit": "^2.70.2", + "@sveltejs/vite-plugin-svelte": "^7.1.2", + "@tailwindcss/forms": "^0.5.11", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.3.0", + "@types/node": "^24", + "eslint": "^10.4.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-svelte": "^3.19.0", + "globals": "^17.6.0", + "prettier": "^3.8.3", + "prettier-plugin-svelte": "^4.1.0", + "prettier-plugin-tailwindcss": "^0.8.0", + "svelte": "^5.56.1", + "svelte-check": "^4.6.0", + "tailwindcss": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.60.1", + "vite": "^8.2.0" + } + }, + "node_modules/@emnapi/core": { + "version": "2.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-2.0.0-alpha.3.tgz", + "integrity": "sha512-AZypUeJ/yByuxyS7BlSNRDOMLMlROYtjYdIAuBmJssVz1UJDSeYxLrdizhXCFYhedC5bqd/ASy8EuNXbVVXp9g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "2.0.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "2.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-2.0.0-alpha.3.tgz", + "integrity": "sha512-hFPAhMUjJD9BSyCANEISPOogeXC9Zo9ZQl7L6vKnaVsMkCtzznaW/naYypeyl0Gv5rYfWYsZbpixTMpjDJzQeA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-2.0.1.tgz", + "integrity": "sha512-9DsSk+o5NBX0CCJT8s0EROGSGxjR/tKu6aBTaVyq+SjAEQH4XcdcRxPBRzsBLizTTJ49MJjF+jgu3qnO9GLQcQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.7.0.tgz", + "integrity": "sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@libsql/client": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@libsql/client/-/client-0.17.4.tgz", + "integrity": "sha512-lYayFWasDV78A+TjlEhr6ubb3odBV6OHjb+wdp8VQcyWWAEIjuwbCHaraEUS4m4yWoo0BvZo96It4VdzZRmRWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@libsql/core": "^0.17.4", + "@libsql/hrana-client": "^0.10.0", + "js-base64": "^3.7.5", + "libsql": "^0.5.28", + "promise-limit": "^2.7.0" + } + }, + "node_modules/@libsql/core": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@libsql/core/-/core-0.17.4.tgz", + "integrity": "sha512-LqF9gIvnJ38nmAH1y/ChizHqDO/MO1wLgA96XrraulEEbqXxLjleSH92YWTolbuJKgPUmGu4aJk9W3UnAcxLOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-base64": "^3.7.5" + } + }, + "node_modules/@libsql/darwin-arm64": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/darwin-arm64/-/darwin-arm64-0.5.29.tgz", + "integrity": "sha512-K+2RIB1OGFPYQbfay48GakLhqf3ArcbHqPFu7EZiaUcRgFcdw8RoltsMyvbj5ix2fY0HV3Q3Ioa/ByvQdaSM0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@libsql/darwin-x64": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/darwin-x64/-/darwin-x64-0.5.29.tgz", + "integrity": "sha512-OtT+KFHsKFy1R5FVadr8FJ2Bb1mghtXTyJkxv0trocq7NuHntSki1eUbxpO5ezJesDvBlqFjnWaYYY516QNLhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@libsql/hrana-client": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@libsql/hrana-client/-/hrana-client-0.10.0.tgz", + "integrity": "sha512-OoA4EMqRAC7kn7V2P6EQqRcpZf2W+AjsNIyCizBg339Tq/aMC7sRnzs3SklderhmQWAqEzvv8A2vhxVmWpkVvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@libsql/isomorphic-ws": "^0.1.5", + "js-base64": "^3.7.5" + } + }, + "node_modules/@libsql/isomorphic-ws": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@libsql/isomorphic-ws/-/isomorphic-ws-0.1.5.tgz", + "integrity": "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ws": "^8.5.4", + "ws": "^8.13.0" + } + }, + "node_modules/@libsql/linux-arm-gnueabihf": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm-gnueabihf/-/linux-arm-gnueabihf-0.5.29.tgz", + "integrity": "sha512-CD4n4zj7SJTHso4nf5cuMoWoMSS7asn5hHygsDuhRl8jjjCTT3yE+xdUvI4J7zsyb53VO5ISh4cwwOtf6k2UhQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-arm-musleabihf": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm-musleabihf/-/linux-arm-musleabihf-0.5.29.tgz", + "integrity": "sha512-2Z9qBVpEJV7OeflzIR3+l5yAd4uTOLxklScYTwpZnkm2vDSGlC1PRlueLaufc4EFITkLKXK2MWBpexuNJfMVcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-arm64-gnu": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-gnu/-/linux-arm64-gnu-0.5.29.tgz", + "integrity": "sha512-gURBqaiXIGGwFNEaUj8Ldk7Hps4STtG+31aEidCk5evMMdtsdfL3HPCpvys+ZF/tkOs2MWlRWoSq7SOuCE9k3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-arm64-musl": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-musl/-/linux-arm64-musl-0.5.29.tgz", + "integrity": "sha512-fwgYZ0H8mUkyVqXZHF3mT/92iIh1N94Owi/f66cPVNsk9BdGKq5gVpoKO+7UxaNzuEH1roJp2QEwsCZMvBLpqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-x64-gnu": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/linux-x64-gnu/-/linux-x64-gnu-0.5.29.tgz", + "integrity": "sha512-y14V0vY0nmMC6G0pHeJcEarcnGU2H6cm21ZceRkacWHvQAEhAG0latQkCtoS2njFOXiYIg+JYPfAoWKbi82rkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-x64-musl": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/linux-x64-musl/-/linux-x64-musl-0.5.29.tgz", + "integrity": "sha512-gquqwA/39tH4pFl+J9n3SOMSymjX+6kZ3kWgY3b94nXFTwac9bnFNMffIomgvlFaC4ArVqMnOZD3nuJ3H3VO1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/win32-x64-msvc": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/win32-x64-msvc/-/win32-x64-msvc-0.5.29.tgz", + "integrity": "sha512-4/0CvEdhi6+KjMxMaVbFM2n2Z44escBRoEYpR+gZg64DdetzGnYm8mcNLcoySaDJZNaBd6wz5DNdgRmcI4hXcg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.2.tgz", + "integrity": "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" + } + }, + "node_modules/@neon-rs/load": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@neon-rs/load/-/load-0.0.4.tgz", + "integrity": "sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@oxc-project/types": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.142.0.tgz", + "integrity": "sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.1.tgz", + "integrity": "sha512-02hOeOSryYxVrOIphmLAsqnCJWxwlzFk+pEt/N/i6OgT3lShHO7xGCU5cpgchRDHboAEbSjzgGh+O/u1GswQmA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.1.tgz", + "integrity": "sha512-fMsTOnN0OjFm3CyppWPitKnc8UlliVARUULW6cfU6AIqjdtgmSFWSk9vecHzZduv/yMWIHDlRhM1e8Iff9uAfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.1.tgz", + "integrity": "sha512-1wjKdz/XLGKHaTNHjQveQ/B23TKx4ItAqm1JbyVuvNPc4Ze0Fb48s49TAd/2zcplPl8okE/UbTgmlVfwT7eFeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.1.tgz", + "integrity": "sha512-Fa0jHR07E7YBN4vOEsbVf2briYNsuOowfLJaXULZM0ldMlaCaj2LJgLMbMe4iacRyZmvR8efFhgR9wKuGclQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.1.tgz", + "integrity": "sha512-pzkgu1SSHGgRRyRZ4fbmSgmajbVt+epaLP99NDjFft69v/ypfTi6swBMiVdh2EkQ0OSnHE1lZDM7DRGkyAzUpA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.1.tgz", + "integrity": "sha512-QI5SEDY8cbiYWHx0VO4vIc3UlS6a32vXHjU8Qy/17adEmZIPuByJg13UEvo9c/UCiUkdcVWY83C+b+JrwnNyUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.1.tgz", + "integrity": "sha512-Sm41FyCeXqmYcERoYOCbGIL5hNfd8w9LQ7Y61Bev48HkcjaJqV/iiVOaiDxjVTRMS+QKrZmD8cfPt4uMVnvM+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.1.tgz", + "integrity": "sha512-2x+WhXTGl9yJYPbltW/BSEPTVz9OIWQyER4N+gJEDWkkn904eRcBzELqh/Hf7K0w/ubGbKNMv0ZC+94QK/IFEg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.1.tgz", + "integrity": "sha512-eEjmQpuRQayHPWWnywaWHkFT3ToPbP3RYy42VVd/B9aBGDA+Ol25EIWHxKQST3IiWJjikCWUF7KtbfqwZrzVwQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.1.tgz", + "integrity": "sha512-/Orga1fZYkLc/56jBICcHrKchl8Z2UKdDSr3LG9ToWO1lQ6a4Livk9Xz+9WN91zsz5QR3XQz2NNoSDEvP6qadw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.1.tgz", + "integrity": "sha512-xxBJRL+0q0Kce7orznGWLuylHDY65vuARXZRpX+hPdv+DqK2c3NlCsVA98tlWzWNEE7yPqA/1NQ5nnCrj49Y5A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.1.tgz", + "integrity": "sha512-M6AdXIXw3s+/8XpKMzdGDEXGS1S7kwUsy+rcTIUIOx5Ge4nXKCtAFHFV9YKkXvGcC5WMoTjAteLzlsQROVI0Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.2.1.tgz", + "integrity": "sha512-/TX0SoRGojHzSAHpfVBbavRVSazg5U3h3Y3VXfcc0cdugq6kxdqw8LPGFiPr+/7gE/60zRcsOY2Vi9b9eT0jww==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "2.0.0-alpha.3", + "@emnapi/runtime": "2.0.0-alpha.3", + "@napi-rs/wasm-runtime": "^1.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.1.tgz", + "integrity": "sha512-EvRrivJieyHG+AO9lleZWgq+g0+S7oV2C51yuqlcyU/R9net+sI4Pj0F+lUoP2bEr6TWX3SqFaaS0SzfLxSzkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.1.tgz", + "integrity": "sha512-Z4eCmn5QJ/5+azF9knpLWKfVd9aidn0mAe9TpJgvBLId9Ax3t0+JVxBmT25Bv7NBbVW1TZyKjQjQReouMeH5UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sveltejs/acorn-typescript": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.11.tgz", + "integrity": "sha512-LFuZUkjJ9iF7JZye/aG5XM0SFcQ5VyL0oVX4WJ9dc0Va3R3s0OauX1BESVCb+YN/ol8TAfqGDDAQsTG627Y5kw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8.9.0" + } + }, + "node_modules/@sveltejs/adapter-auto": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-7.0.1.tgz", + "integrity": "sha512-dvuPm1E7M9NI/+canIQ6KKQDU2AkEefEZ2Dp7cY6uKoPq9Z/PhOXABe526UdW2mN986gjVkuSLkOYIBnS/M2LQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/adapter-static": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz", + "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/kit": { + "version": "2.70.2", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.70.2.tgz", + "integrity": "sha512-RzRoRpuR2KXqc5yMO0akQHDZeT4AslOlznGITURsqHaVbtyYP4Wn3eE3gxj9JcDyNYO0crkxhdwFHc+2vkVm6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@sveltejs/acorn-typescript": "^1.0.9", + "@types/cookie": "^0.6.0", + "acorn": "^8.16.0", + "cookie": "^0.6.0", + "devalue": "^5.8.1", + "esm-env": "^1.2.2", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "mrmime": "^2.0.0", + "set-cookie-parser": "^3.0.0", + "sirv": "^3.0.0" + }, + "bin": { + "svelte-kit": "svelte-kit.js" + }, + "engines": { + "node": ">=18.13" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": "^5.3.3 || ^6.0.0", + "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@sveltejs/load-config": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sveltejs/load-config/-/load-config-0.2.1.tgz", + "integrity": "sha512-5m3B2cbqQ4TbwW6Xkh66Ntw6dD7gNc77cCxABTTesWcq9jxIzMgTk97pZx5vEtvQx8iokgi7GIphqZe+PGwcZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-7.2.0.tgz", + "integrity": "sha512-1SpkuMSRLfugrVX+IrKfE1RUegzo8AQzKQ6qQPfVzbcWi5IhuTPaKb5ZrLpucleFznkc4/RTeSPoRnGWFxX+EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "deepmerge": "^4.3.1", + "magic-string": "^0.30.21", + "obug": "^2.1.0", + "vitefu": "^1.1.2" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24" + }, + "peerDependencies": { + "svelte": "^5.46.4", + "vite": "^8.0.0-beta.7 || ^8.0.0" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.11.tgz", + "integrity": "sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.20.tgz", + "integrity": "sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >=4.0.0 || insiders" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.3.tgz", + "integrity": "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "tailwindcss": "4.3.3" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz", + "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/type-utils": "8.65.0", + "@typescript-eslint/utils": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.65.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz", + "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz", + "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.65.0", + "@typescript-eslint/types": "^8.65.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz", + "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz", + "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz", + "integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/utils": "8.65.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz", + "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz", + "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.65.0", + "@typescript-eslint/tsconfig-utils": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz", + "integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz", + "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.65.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/aria-query": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", + "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.0.tgz", + "integrity": "sha512-RWrqdArjvPbsATEhOPUo6Wndc/iWnkWKlhIrdlF3zMMYo/c3CVtoaVAyLtWxz5h8nSlkHzxnzV2uLydPXmtF+A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.24.5", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", + "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.8.0.tgz", + "integrity": "sha512-nuKKvN+oIBO0koN7Tm7dlkmnkc21mtt0QJLwAKzjLq14y6lRTdVG36MZHJ8eQHwdJMwZbQNMlPOYedMq/oVJvQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "packages/*" + ], + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.7.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.2", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-svelte": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.22.0.tgz", + "integrity": "sha512-O3qn0NePTWta+1o25dIThqeEP/hEQ3VxDK2LVO8SQ5wG9umLMvulK+m1yQ4JGOb2Pkl8IB0G1lpRV/HXDXSLTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.6.1", + "@jridgewell/sourcemap-codec": "^1.5.0", + "esutils": "^2.0.3", + "globals": "^16.0.0", + "known-css-properties": "^0.37.0", + "postcss": "^8.4.49", + "postcss-load-config": "^3.1.4", + "postcss-safe-parser": "^7.0.0", + "semver": "^7.6.3", + "svelte-eslint-parser": "^1.7.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": "^8.57.1 || ^9.0.0 || ^10.0.0", + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-svelte/node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esm-env": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrap": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.3.0.tgz", + "integrity": "sha512-GQ/7RN8uOtEfNpzZzBMTzW9JBcX42oaSVtPzdF+6cEL8pqIL094iUpr9jzYGn4O4P/1S60dJ6izyT8F4LYARng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "peerDependencies": { + "@typescript-eslint/types": "^8.2.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/types": { + "optional": true + } + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.8.0.tgz", + "integrity": "sha512-Zz/LMDZScFmkakeL2cTHzf+PbWKdpU3uclqkZT7TjDG58j5WPt0PpA+n9uPI24fZtlw07q0OtEi84K+umsRzqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-base64": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.9.2.tgz", + "integrity": "sha512-6zayE8QlUdiweYI6cETD/XBSqFcoCUlufn/29PJR99r82x1yDnIprRca0YvAYpAW+ez0GuQkVBC6xG5QkD7OjA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/known-css-properties": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", + "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libsql": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/libsql/-/libsql-0.5.29.tgz", + "integrity": "sha512-8lMP8iMgiBzzoNbAPQ59qdVcj6UaE/Vnm+fiwX4doX4Narook0a4GPKWBEv+CR8a1OwbfkgL18uBfBjWdF0Fzg==", + "cpu": [ + "x64", + "arm64", + "wasm32", + "arm" + ], + "dev": true, + "license": "MIT", + "os": [ + "darwin", + "linux", + "win32" + ], + "dependencies": { + "@neon-rs/load": "^0.0.4", + "detect-libc": "2.0.2" + }, + "optionalDependencies": { + "@libsql/darwin-arm64": "0.5.29", + "@libsql/darwin-x64": "0.5.29", + "@libsql/linux-arm-gnueabihf": "0.5.29", + "@libsql/linux-arm-musleabihf": "0.5.29", + "@libsql/linux-arm64-gnu": "0.5.29", + "@libsql/linux-arm64-musl": "0.5.29", + "@libsql/linux-x64-gnu": "0.5.29", + "@libsql/linux-x64-musl": "0.5.29", + "@libsql/win32-x64-msvc": "0.5.29" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss/node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/oidc-client-ts": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/oidc-client-ts/-/oidc-client-ts-3.5.0.tgz", + "integrity": "sha512-l2q8l9CTCTOlbX+AnK4p3M+4CEpKpyQhle6blQkdFhm0IsBqsxm15bYaSa11G7pWdsYr6epdsRZxJpCyCRbT8A==", + "license": "Apache-2.0", + "dependencies": { + "jwt-decode": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", + "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.29" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", + "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-svelte": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-4.1.1.tgz", + "integrity": "sha512-wXvbXMjSvb4C9ENWTHXyd+ihakKCsJ6rJhLP6/8HFNj4GkZr48jqL9PoKsl2sk7SyCZRTnJ7O2TTowUpOxP/KA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "prettier": "^3.0.0", + "svelte": "^5.0.0" + } + }, + "node_modules/prettier-plugin-tailwindcss": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.8.1.tgz", + "integrity": "sha512-iaFMYqDsE4ffdDkn5qup0j5f2aCEBFZrdrZnvu9QKTlWx/iGPeQ4HHu7b7fCPMxeo9nwQBiOAh2nSypdFYWJkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.19" + }, + "peerDependencies": { + "@ianvs/prettier-plugin-sort-imports": "*", + "@prettier/plugin-hermes": "*", + "@prettier/plugin-oxc": "*", + "@prettier/plugin-pug": "*", + "@shopify/prettier-plugin-liquid": "*", + "@trivago/prettier-plugin-sort-imports": "*", + "@zackad/prettier-plugin-twig": "*", + "prettier": "^3.0", + "prettier-plugin-astro": "*", + "prettier-plugin-css-order": "*", + "prettier-plugin-jsdoc": "*", + "prettier-plugin-marko": "*", + "prettier-plugin-multiline-arrays": "*", + "prettier-plugin-organize-attributes": "*", + "prettier-plugin-organize-imports": "*", + "prettier-plugin-sort-imports": "*", + "prettier-plugin-svelte": "*" + }, + "peerDependenciesMeta": { + "@ianvs/prettier-plugin-sort-imports": { + "optional": true + }, + "@prettier/plugin-hermes": { + "optional": true + }, + "@prettier/plugin-oxc": { + "optional": true + }, + "@prettier/plugin-pug": { + "optional": true + }, + "@shopify/prettier-plugin-liquid": { + "optional": true + }, + "@trivago/prettier-plugin-sort-imports": { + "optional": true + }, + "@zackad/prettier-plugin-twig": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-css-order": { + "optional": true + }, + "prettier-plugin-jsdoc": { + "optional": true + }, + "prettier-plugin-marko": { + "optional": true + }, + "prettier-plugin-multiline-arrays": { + "optional": true + }, + "prettier-plugin-organize-attributes": { + "optional": true + }, + "prettier-plugin-organize-imports": { + "optional": true + }, + "prettier-plugin-sort-imports": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + } + } + }, + "node_modules/promise-limit": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz", + "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==", + "dev": true, + "license": "ISC" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/rolldown": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.1.tgz", + "integrity": "sha512-4FKJhg8d3OiyQOA6Q1Q0hoFFpW9/OoX+VsHzpECsdsIZoOArrAK90gl59YK/Z+gnDel45bgJZK03ozH/9bCqEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.142.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.2.1", + "@rolldown/binding-darwin-arm64": "1.2.1", + "@rolldown/binding-darwin-x64": "1.2.1", + "@rolldown/binding-freebsd-x64": "1.2.1", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.1", + "@rolldown/binding-linux-arm64-gnu": "1.2.1", + "@rolldown/binding-linux-arm64-musl": "1.2.1", + "@rolldown/binding-linux-ppc64-gnu": "1.2.1", + "@rolldown/binding-linux-s390x-gnu": "1.2.1", + "@rolldown/binding-linux-x64-gnu": "1.2.1", + "@rolldown/binding-linux-x64-musl": "1.2.1", + "@rolldown/binding-openharmony-arm64": "1.2.1", + "@rolldown/binding-wasm32-wasi": "1.2.1", + "@rolldown/binding-win32-arm64-msvc": "1.2.1", + "@rolldown/binding-win32-x64-msvc": "1.2.1" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-cookie-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.2.tgz", + "integrity": "sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw==", + "dev": true, + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svelte": { + "version": "5.56.8", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.56.8.tgz", + "integrity": "sha512-PY8LOw7xP6c8IOiVqdo0sbbZVYhXRSfklOQLAUyGBKqjTX0wx/z4l/9J+PmBpmlLnxzEb1NqltxQ5/wZme/Cmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@sveltejs/acorn-typescript": "^1.0.10", + "@types/estree": "^1.0.5", + "@types/trusted-types": "^2.0.7", + "acorn": "^8.12.1", + "aria-query": "5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "devalue": "^5.8.1", + "esm-env": "^1.2.1", + "esrap": "^2.2.12", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte-check": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.7.4.tgz", + "integrity": "sha512-IW9ot9YqAoyv8FvyN+eb4ZTe8zgcKZrJLNYU6dzSKkGwEBsSPc4K7lmQ8bKn8W2YMXM6WDfZSSVOaGtekyUfOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "@sveltejs/load-config": "^0.2.1", + "chokidar": "^4.0.1", + "fdir": "^6.2.0", + "picocolors": "^1.0.0", + "sade": "^1.7.4" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": "^5.0.0 || ^6.0.0" + } + }, + "node_modules/svelte-check/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/svelte-check/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/svelte-eslint-parser": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.8.0.tgz", + "integrity": "sha512-mikR1qwIVy3t5WthUoAXkMwxkXvabZP9FJgdx35Ei7EbGWmctva1Pih16Koeor/bdNNq8NXHlwKGS6NkYTawLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.0.0", + "postcss": "^8.4.49", + "postcss-scss": "^4.0.9", + "postcss-selector-parser": "^7.0.0", + "semver": "^7.7.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0", + "pnpm": "10.34.1" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, + "node_modules/svelte-eslint-parser/node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/svelte-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/svelte-eslint-parser/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/svelte-eslint-parser/node_modules/postcss-selector-parser": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.65.0.tgz", + "integrity": "sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.65.0", + "@typescript-eslint/parser": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/utils": "8.65.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.0.tgz", + "integrity": "sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.23", + "rolldown": "~1.2.0", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.4.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/vite/node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/vite/node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vitefu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ws": { + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/backend/web/package.json b/backend/web/package.json new file mode 100644 index 0000000..e29a433 --- /dev/null +++ b/backend/web/package.json @@ -0,0 +1,53 @@ +{ + "name": "web", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --check . && eslint .", + "format": "prettier --write .", + "db:push": "drizzle-kit push", + "db:generate": "drizzle-kit generate", + "db:migrate": "drizzle-kit migrate", + "db:studio": "drizzle-kit studio", + "auth:schema": "auth generate --config src/lib/server/auth.ts --output src/lib/server/db/auth.schema.ts --yes" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@libsql/client": "^0.17.3", + "@sveltejs/adapter-auto": "^7.0.1", + "@sveltejs/adapter-static": "^3.0.10", + "@sveltejs/kit": "^2.70.2", + "@sveltejs/vite-plugin-svelte": "^7.1.2", + "@tailwindcss/forms": "^0.5.11", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.3.0", + "@types/node": "^24", + "eslint": "^10.4.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-svelte": "^3.19.0", + "globals": "^17.6.0", + "prettier": "^3.8.3", + "prettier-plugin-svelte": "^4.1.0", + "prettier-plugin-tailwindcss": "^0.8.0", + "svelte": "^5.56.1", + "svelte-check": "^4.6.0", + "tailwindcss": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.60.1", + "vite": "^8.2.0" + }, + "overrides": { + "cookie": "^0.7.0", + "esbuild": "^0.25.0" + }, + "dependencies": { + "oidc-client-ts": "^3.5.0" + } +} diff --git a/backend/web/prettier.config.js b/backend/web/prettier.config.js new file mode 100644 index 0000000..009f5ce --- /dev/null +++ b/backend/web/prettier.config.js @@ -0,0 +1,12 @@ +/** @type {import("prettier").Config} */ +const config = { + useTabs: true, + singleQuote: true, + trailingComma: 'none', + printWidth: 100, + plugins: ['prettier-plugin-svelte', 'prettier-plugin-tailwindcss'], + overrides: [{ files: '*.svelte', options: { parser: 'svelte' } }], + tailwindStylesheet: './src/routes/layout.css' +}; + +export default config; diff --git a/backend/web/src/app.d.ts b/backend/web/src/app.d.ts new file mode 100644 index 0000000..7a2a5d2 --- /dev/null +++ b/backend/web/src/app.d.ts @@ -0,0 +1,16 @@ +import type { User, Session } from 'better-auth'; + +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + interface Locals { user?: User; session?: Session } + + // interface Error {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/backend/web/src/app.html b/backend/web/src/app.html new file mode 100644 index 0000000..6a2bb58 --- /dev/null +++ b/backend/web/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/backend/web/src/lib/api/client.ts b/backend/web/src/lib/api/client.ts new file mode 100644 index 0000000..9cb9f36 --- /dev/null +++ b/backend/web/src/lib/api/client.ts @@ -0,0 +1,62 @@ +import { goto } from "$app/navigation"; +import { getToken, logout } from "$lib/state/auth.svelte" + +const BASE_URL = import.meta.env.VITE_API_URL; + +interface RequestOptions extends RequestInit { + auth?: boolean; // true par défaut +} + +class ApiError extends Error { + constructor(public status: number, public body: string) { + super(`API Error ${status}`); + } +} + +async function request(path: string, options: RequestOptions = {}): Promise { + const { auth = true, headers, ...rest } = options; + + const requestHeaders: HeadersInit = { + 'Content-Type': 'application/json', + ...headers, + }; + const fetchHeaders = new Headers(requestHeaders) + + if (auth) { + const token = getToken() + if (token) { + fetchHeaders.append('Authorization', `Bearer ${token}`) + } + } + + const res = await fetch(`${BASE_URL}${path}`, { + ...rest, + headers: fetchHeaders, + }); + + if (res.status === 401 ) { + logout() + goto("/login") + //throw new ApiError(401, await safeJson(res)); + } + + if (!res.ok) { + throw new ApiError(res.status, await safeJson(res)); + } + + if (res.status === 204) return undefined as T; + return res.json(); +} + +async function safeJson(res: Response) { + try { return await res.json(); } catch { return null; } +} + +export const api = { + get: (path: string, opts?: RequestOptions) => request(path, { ...opts, method: 'GET' }), + post: (path: string, body?: unknown, opts?: RequestOptions) => + request(path, { ...opts, method: 'POST', body: JSON.stringify(body) }), + put: (path: string, body?: unknown, opts?: RequestOptions) => + request(path, { ...opts, method: 'PUT', body: JSON.stringify(body) }), + delete: (path: string, opts?: RequestOptions) => request(path, { ...opts, method: 'DELETE' }), +}; diff --git a/backend/web/src/lib/api/endpoints/auth.ts b/backend/web/src/lib/api/endpoints/auth.ts new file mode 100644 index 0000000..198b306 --- /dev/null +++ b/backend/web/src/lib/api/endpoints/auth.ts @@ -0,0 +1,33 @@ +import { api } from '../client'; +import { type User } from "$lib/types/api" + +export interface Credentials { + email: string + password: string +} + +export interface UserReponse { + user : User + accessToken: string + refreshToken: string + expiresAt: Date +} + +export interface RegistrationData { + method: string // "password" + email: string + firstname: string + lastname: string + password: string +} + +export const authApi = { + register: (data: RegistrationData) => api.post('/auth/register', data), + status: () => api.get('/auth/status'), + login: (data: Credentials) => api.post('/auth/login', data), + // getAll: () => api.get('/users'), + // getById: (id: string) => api.get(`/users/${id}`), + // create: (data: Partial) => api.post('/users', data), + // update: (id: string, data: Partial) => api.put(`/users/${id}`, data), + // remove: (id: string) => api.delete(`/users/${id}`), +}; diff --git a/backend/web/src/lib/api/endpoints/user.ts b/backend/web/src/lib/api/endpoints/user.ts new file mode 100644 index 0000000..1152593 --- /dev/null +++ b/backend/web/src/lib/api/endpoints/user.ts @@ -0,0 +1,7 @@ +import { api } from '../client'; +import { type User } from "$lib/types/api" + +export const userApi = { + me: () => api.get('/user/me'), + update: (id: string, data: Partial) => api.put(`/user/${id}`, data), +}; diff --git a/backend/web/src/lib/assets/android-chrome-192x192.png b/backend/web/src/lib/assets/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..2211416b5505fce743ad6acb36843f20a63bf6be GIT binary patch literal 8191 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ⅆ?d;&8{5?y;`w+V-7?79_Zce))DSfqKr< z8eSi{$%Svvzj=ktQ2|bL8w{}59ngf1Ek$=|01h~eGN{{*P+=5?X+r6u6)uXOY2q01 zJ50W}bCbS-Z*TH;5AfZ8;9?OjtMae;(QgaC`fjQ+!ePF9*_>X4U(I0aLs90wunyhJ znkDw><4gZJ!Zn3t!(Us2F?ZQ zR5Vvo-$m|3EXNcB3?5I5VePzSaekTd2x_{m4UrM0KsLXY6+-N6k_PiLnm)p0B8eX!%J9`L`X1WY&GfU-y4IjpCf80Gbzm%VX}bRQ>O0$PUyM z?bMeb%5PQ`0+Jui96yAGiA~Ta_dZF%W5Ke{Km}lFJMkBtG}7Lfs=w~Ods)V*nt*du z?T-aviy?7O4=jIhP3^b}!E_S&8nZhee&@33RLUL8G33*7N(ikrHDrZd&{kG?HdG%T z=eoKS_gKK?-t~{F=5dfEbyu$t6T`Qa5|#4kxexr|3Qe`#@r*iVIpf3rL}^Vo6yp{q z%T@3HaGPU&nPqa@{(dBQzR&043*-MSTpg}v82L28e7fT^4K{%iOEhdxJ!>#b;Z62m zipV|qXWaFjR2KBC_9bBX(gj{DeBJEQI}C3m7uHg-3m+dc_K})@7i23lpZ*tI@wgdA zAJ6rNkERcbDnEM@a6?5u&4;m`KMe_GR!;)=_ z)gU8bd z*E8c8tvM^MaDEE4m=+)_L|2*EVB^d5a56-<(jDJ z(Iq@G5FJvgfSsDgElV5j=I$T%;ll$7F>J1w+uG_U*PZPsl0pB8*kK{x%xL{a zduEaP8r~}OWHEHaN_9E&>D7&022S2gV3riE)pPw&E^qMOeS9)`>xxGIn-iN1%(_>|R4?R^ z+4%+VWlsUEz?>jyN3voJBI}3ZQUn!A4bqO=B{uL5EIG;RygtS6C27e(OKff~Qh*@4 z6Ejzzh!46#h-IX%aEKPxTg%M%SBBMFU?Q&I`3hfbG1>5T-CFdu*g<+5U^t4M=E z7E-|{AQy|?O#1ZlY1&`bu~sph?IflY9DTF&#|BpHxMNQ*1Z@`b$ncqorxvG^-{G2fCZ(HJ+JXZ5L0gznxoi&sQ)a2oA!aAA~9@((I@}Y~Lmf}KAvC_3k zwwF*TZGm%HE-PUhNE7G<7rZ%G(s6j)+3|2oB_mMyXIJckVo9 zj-MN0XqB^ugQz+^Fi3k;fP8n>_M5^pD%B71T!;^9I!eN7bbm-azo|gajS9Ga zTAR4o+2p(wr4g%NA!EP}O{h+lU@uEF;KUAR5RE>ieOp=%86g($NovPDT``^%iCsJn z?Os9*Cg?gLtGh|x{_^@wL*H?AMUe%$9p2QS^c2~R*{Bvwya{Y6Um@hCapbGqP!+=N zDh>sU^=;7t^gbk>QOnuXfp;Knqv}>jwDhOSm>Y1{t78pc{Ih55g@w4(y-(CoO|BC_ z!qdpMqPqzmBlhhH5U1TObmBo&aho5Z>+awn3QdQI0keOD0-d}}QNQgJ6bJ zqw>G|o{PVDN({cS88#r2zZx^qA}z8ZyC94Cb~+6syeEx5>8o?MuMmTvm_gd%z2SFk zzq^*b@J*8A12Du&nT%Su%ZlS`9QS!|Q2<$ohVC>nqnlO(djFl26j;~YSXgohL7;Th zP~4fvcbo{3>zP&7H*63nZhkRycy3+s;La#JHi!%_vI<=U4Q>LqQeu3~y_>g@i&CFy?&@C|` zaGQ+neOz%pt@y({+kQ=I1OOU;ET~ZWE+5rtO7Ya|gaKhDvs|42VSmRn{sEW@F(kh6 ztHd^beReRu_AN{0fFNdV{bKc_YDwAPzzMDt4Ru>aJ5u$ zSV3bSIGErG%2`SDZWzO|5gtUHkz>>uULQuwpPRM(`Y};DkO4ArN}X0{ zkyLF}WZr9_HGs1LnsT#GtX}!~zFtk_L?;4I4alpWJSYCB_b0Ck_|w~Bq z+t^c?GRDh8fa%lF9F#6q{p!Y?)m(+lw{*=8H4xJZn8Cg zH;UNNv16ht_0S}m13FlxHPW|9rNziJ(7A@+-9|e%Qjcvq}XZO z5P02dRxVl?qbQ4(eMDgT%9$%_#%QdRd!HAthd+O-gvSr|L%W=az66;y2T`b>ggSAeXS{kKm7use2fIvQoqL{=UqGLWtV zh}BeNXs0qwn>Mg3oUpcFx z)=3&e7!#D`?r@+%ru+iS_O7jEz&#!ba9tLDylR)R`slZFTSx5knEXl(uQ zh!(7fUl7-@A7&+`2pUE9=Xe;goGL( zna>W#Mnn96BT0Y9==R)Y^f-%+{O@^>X<;cL%Oxqr$IZtrA zwS7&GR*!ZzNARa3kZYmt+D#{+@kVmsl<$V2$xI$% zN>^0<$Z|fmm>FX)Y^>Uf*=MU z5sRd>(Jeqi6L=+~rGbr8z;ec?uTJ+(2lv;nV2N9al}m2#aiO*Ol;7u-QfB9}=BHP< zyV*u&cb5Bhub+!go@@(zYfbSc+mxHk@!gCR{fjekO6a9ko=XQgHU6m@bkkQ*NR{MJ zTRnuq;0|Gae~f z3t9cs0d?kk&_!sJ_`wD(fy|m&nl>%_u`n-ROHeFK%;8udA}XqNcDsNIGS{}O=;CR@ zczu{ZO@qEJcxv6DwSqApDI%H62z5U7`RkuoB5@;q){dS{GPsp^ko@wZJl4ACZtmE45I2j;_j{+LaX9*3X((r=FWryN$!Kc>nz1rbL_ zwSFpfS~ypK%OBD6OZr`5&mZGAvf2biZ=Bq3lbZW(3yj+!99< zhKeG0UZW3JbKb}v_^M8oOH-$=%QwlJBQxnrxf;e>Q!QE`F}2Kq3|}#|kj{T(kc32& z&29Hn_a?zW)~u;Wa8{Ic=>p%zgMHEMixArZ zd#xJjBTcn@F3+p&eucC5+t=y-$RhatGaY0oPjx&nH)+GDF@o!~Ut7*l7vRXT58(Z} zXYkfctp-q%wFBDZ9;mfnlB`!c_??V+6gE7%2>QT0)jHN0{|hQl92W7S$=*8ruQ7_w zeayl7d@oQaKQRawe0hU0E7)(SV^YD8pGSdVwBHSth{eJ*dK?)ZtFOxpeHBF=wh8=r zq;pB=?xO3yRLvugNn8SJD>{3nqBY zE3^3qtH3&wUaO&!J^lZXL;Nq)oVK>3{7#+kvuikt<3x$?Pz6Q9m{vBEOSY7P>Ssx|ZgN;>nq~@|;(4jAMke*s{JB#`KPXa%r33-%eGt}Er z#f{a;7e3WbLO0%Y$=2!h6l{{GI1%dhLD=8>e3Mo%m7q3t>gO zS!{pq<;)DLuE(S2)BR{IuL`{?=#oN{*+N~Ja$m%UwcZYvB^>L8|E9+@;nG_zRGrf9 z=i|MOJL3psB$_*W`C)Kg7mQ3!lf))oz@WvhrPbi;e=zA;>2#MaU}Uk|a=W{;Dt3rE&i(KCLP#SSVIXWh3i75+zR zmFQu`?vgU+iNX#W%g$qdAI}jveTHQ0`Qn5ps_j6K zu62h@uu%48Mb)M$X6;zUyC|+D4O{hRQQmLkO$M`AT_F;!Uh4zgD z4N#lgY5ljy>_Kc>o@}eHRJlPEy#$*|M~V%6m=_LJFH z=Vptcqjkwk1&8s-&)8JKi z>I;E48Vdi;==Zgw@ImYvkG3zZyMML4D<~CAsi}HD+k7;;Yg#iq4uUaF{_cP2%RyI! ztdBogV~gHi*($$C?id}Ex~JE0860roGaC+Ff{!TUVP45fbka}o$SYoqcKObwt8oUl zDtpdkWJE1mYp#?qHnE=PuE3bjXZ(}2q5fuh?q-ZC6|+HHbW|ksblvU*Cb$g`KKtnP z%Rj3w25a9LId1t&gorWJj$meAn|ceU*qMAb(PXFj{D^*_d9<{?*+&L*?{?LUnmO~) zUV&@MsH%H%f4##c$s@p-M{kG#@TISUeebD?t^+m+yB;Gv#v8ipInJ^qWx!TX$vK>( zqj-4K-_wPqwZx{zdS+CueO~n;0@fOYpj+G-(~s8@dQEU*wZU2W(7?-OcRi+L3vc#7F|s* z&a6s>9a?Ng`#Z~`>P&rVS_{6)?R;EGVfTvO%4;q@WL;T^TPA|DM?1p?=r42B;Lci2 zeG;V0$L)dQF;nOW%cTtGN{NAIyj5?{{_QDhU6P8DALQhx&?tUud}(LTVS9T*X=%f(aTi(CacJ$R-dXe zS~l{B2<86tPg5C`UYT6oeiFrgYX#~?)FK~jD&5Z$*hg`;ijZFV zjf7YPmj53~I1ABzB<|^I;BEn|-TRIpS9Yx+>cYWt(_=EXVSGSM?Q~x{3~pF6o5OH? z>otd;Lex%%%FWcOxE)g}PIP{QlUgi)l!+Tu^XKNX&sf<&W|Uh0K&k4klx>?$TiJBp z>s^x~)NeNj`2GExxpHCB?!s>`_v8^N%@fwpC)+KNbpbi%J9m|V28%94u)Qpf(3CcT1+uxX9rDK)dt#XO+@YGcwO@I;Ry`QQkWVw zpNs#Z>#^BZoclvNu#Ao>{)|(?^s~BB;FDOGjNgt~4ZDay2(v|nQ=yW(f03*My>7WX zOC3gXflcbGLnU2r4B~7l%l;*KN*C0sc2vrua3C8Y|N7=nqY*XgqSkZdJt;UHY1H#g zewrGXdLlTqw8}TDNEIvV^1mkb%RX!&@FMps9m zzgx2cZ7+VwBh2AW+^(*6=ERl05H1~Q8hjE##R>K8$F&>D39dB5yWi^P8`Dr3Z;}Pq z*XvXuX@cr4EtHyAx@n^OFgKMTz6S|PHr=xH_&@aKEnU@~V2adl;RXkD^eE%lXB2&~ z7X=@e^U0Cn!qYO256%w$T)EC%QPTEtOG=kZtSRCJWtgd`LXev^>vId#q~ zGsj?;#%gHwK7@7t1@n;M{E@6yBbfyT8p&^kYt{~x*&mYp7m%wS^8^Z_Q#4-sfkgdUKz&P$|R(rqZ$^K z(t16e4Ck09YxYnm{S?Ka6U7A=yPBpo%}X&C#KcCFY7)JL2QcU4`b5!Oig7ZS5my9V z^|iUc&#mhoty%Z`GN>lsEcnB$ZCc+7d>b1+$6fc00>3n!MQSxfEjz+oBMXYc2?y~| zzFi5}Ak^q@iRkO!Z#G`!DZD7>NI6i=0}0w0!Db7q1T@zY`mnPql5t9NL#pG>CT z*}*S+TAslhe#XfF98SZAveT+Y2M$Z7N}gW{T1E(7P7VzbPK3pvy19%;Dze>6=EFG!X6v|Jj7`Kgfumu)8P5G$Gq5_=VP}XkUcBj={OU${HxR2^`*%8c&~(|n?!rN`&E14`22@onyKNuXxg_74kSe@!2zFCm?`Ii*cILB zK|ci}Jd3jQTo?X+%NcI8C(eoe{riOTcI1pb-J>k)(oxJUvnK~_?*nwc$`P2q2|n%Y zs_3Q@Js)s$r{{!M>f|;~5hqu!>EXV4+zW3ib$5o`PyFdLbVh4h>nyPM?R7d2~n zieM6_;&3cm3p6l2{pgb0qN4o*TF2#j=#*9`FNF==4B06E4SscXwdrbyVC<*p?GIyy ztn|MO4#r7w736`yhBz7n3$;1}(EvXI@s|m+=)*xUcSum>o7b%FISPxcp;)5q1bT$5 zHdURRU-F_zWCA5;NM(36a2w8R3UdtVsEoX39{S26V0JtQveJy7!&!quc-tQ$F#c(; zWWpTk)@I;To&Q8_H6uTuzn8WV=Dv{}hACf%W%hb! z_sAmCfPFagO!DtSdaHe^n=psg+7Den~@jy_bj8{R8Pn7Y&aH1uK>Ti;L z$^`oqta7qo{XWBAmh(TmB&{W;|Ft{PqLAX&tt7b9eMUv47sSXnD(c11oBRZ&hW469 zEm6r%itBOqrm)NEapy2;Sma}N@r;6(JL+GKB6jxhyYu_1zRg2?8s^fNm( zxHpaex2#8e{-P&?mw*?2jrWfWv#Du_uo7j0w^YV@;EIHYeQ%#k%c{M0@{6X~qW#6z zG%ups4V(8e@-t(@6;zo&m?RWYQH_@S#ZjWAGPX>m(~UVLNV3oBxNfY15Z1kKIWhG2 zyo+!NOBiDgEA_u)Yb_lq3cL~)oMY9k;+bu!j2u}ot!P;fXI-@wS*l*4X?(hDqTr+s z`ufQE`sjWoK>?~n#54U=cT^RCxlEJi-=?r}DPZdVu*CsWioZrv&64~*Fpz&bU==hr zenpPG6RhH>qcc~Ph+}KCT}xJaQ^Q?wQ1ZECk4+nGUHwnvk)CE)7TRW@yPWcG%n=HShU?;Or0kiYY3<-aD3Ba(3RzJtCL{| zyH~!-usbEh#&9NQa)Rxy8_tKi_6AE$p6XY-QT{_rTWmjKiu$L^MC0nsggUa>$zYmLSA+A? zLb%jTnb@_!xTmzGk?QDasLamCMr_OLVi8`o^+?mm6reM1En&rz9Lny!Vf#4 zy^J3Zw&B^B^HZIFzzaT|_rf=?Ybx-^#ynzeFdQ>_d&nAFj=%FpE^KFYs5wpY;KXlR zo(ov4CwNeBvF4tFY2g78ad(~QsxB^ns2@hgjlJL@DgHJ%fN*-L(|l(~f!2v{&REtF zX;H6LK2|*b?!&~tZQ&PydC+Pa0V9a}c>b=5@Jsl| zLOY{H?r4RZ?X|gt!O*_urg!jN((*$y5{qUEk3}B=3aP73(Jsa`+QMfB(VeoC zu7%+0nRTDJ+e*I(M>Ti)#4>%9qkk@s->j!kRigUJBp`5xHUjy(B7X5{~OSi&o}`1TmX3B12OWO>T!2 z4PbGR1ML|itCDM66F#Mu96zi~lKHZ}%FbVj!IY%Ru z$wh8UGao+*V14RsaqzVsf+QwS+zlWB2L|IJ>yZR4=gDcA*Loc1>@R@&rDs*T?ef=5 z<+@tftsRG3>&#*AzCYWnr;M~%ml+nDRt2kCdT87euwjSW?d9G8yX^+xkI zrw6W&wKX&hRHu$91iDxYJ77Fz%N2NxI|&&?1W}aD$NVMj$3882#37^=KKm@O7plsO z$+a)lKNr_}3s$Uahx|n-Rid_P98<$ZM=a{cpHdY~L9PTLbu!?k*~Yph0ziK$*pPq- zUY?&7SM4l*zspn?^u{S|FkZ%zBa&XTC5jMUTlLvtZDSaHbNw+ z9d4m?Xn^x;e(_1O_fM^@{Hs4VxlyVyDal~DuZ_|FQgK)dHpTUPA>%k7X{^6onb=i0 z`W|N8WjohvEN~};giUeW8n(_>qd{`ts*N`^)Jeq0>;BGk{RBPMB83HY2sdQoVukFTig@4*BLS;2odT&gN$!s{b1XBvzJeCf`PgR&8NwF?fdE8 zo#to&*IWO|nHedwkH*MwnEDD@zaK+!X@pa7+liRRac}DJQ@S%kV(9roC2z$+!E~D^Nz-e-TRW}~sv>4@ z*33pM4zGs>5A23zU*S8()cp{y?3O(fl+SJ4yESDQf7)DIzQ8wG{MH|AeZxdfxj3KR zmg-bB=PbKFRV-4?|#9|aktDCsK$}2 zYWAjS&wg2AiuKD#$GucSj?`iI$vZCKL^$#i{`xzg(FC>fQ~aOjkbPOx-z7{^sip9c zuZLlW2-0Cf?)@@x#R{2Y!$Cw-mquSB?0_%iNJo0>8dVqQ5WfWj#KhR#iU+nb{BopIHD;{;;fjqkoVFf^aLKQ|qG@UiZ7uJs*C#43{iwdCK2t zO`tU^c`Hi>L$IiEIr#o>OX9<=KPks?0P&B;rf2LU)^bP1F;Y9(L9g7VJ?5M@Yx!rc zj`dToft-jVEP)M0u@SbWH=3m2G5i+38;O`lcO7fVg^JS3UbHFXWvDgpeJ)YNtV1%4 zKdmWDBwl?~mahA7?0f#euOp_XJ+8Bk0+f-%b$PHV46w0x>%CFBgW**?RQrx7i*+Q zPIiH<+~%w**l-wM;Q_AU2Xert(erk((d-GQHZX6M#nPgHHFl>8xV{tPMmuBf-En`l z6=9p)&>4HPAjAZLXBP+Iyst_UBzf`r->9j^eY0;zAqWBMYTq2yI&KDV0Mqe48P6Wi zw*-w(RQvb9Z=ExK3DpRP@$AcSZ0xky?_7>`xtzIev>p64gpDbj`nBRWv%{(Jf8HW8 z#F(76U02tP$N>F&Gv@dn7hq>t93;Mz+jJv8DF$hD9?A7?_wO7r&BzS8uhPC5JW7q= zXK6pU&zsMaV8&O2u`oRu!2A&sd&fC*V@|QNe;%3+Q*dyl!=_-SY0a+%dg4=h9ytb< z5D_4WN`qJHc69!Z#+=JuTOwnk^YLZBfOU*n<6u9t?btGs8s!i1;>I~U>`onpCtk(cU4a?XG*lpelm-|B24D1p zFvN>Wn|{t*=z%@pAJ7-wQ7M4-By-E2iZzjd%-=4_u7g#e#=8-W+W6p>FDW)DwYBA? zg+dclwGrURl&5fd@YQ!GfguM3Hlx)>Q0i^}n*L@^15nw=eTDKvG!YpI;S;(yE2Hf5 zOzB=dE}b9TbBp}JJPkT^%O`VwpY^$SizwX5;pVJKrps6~`_Ju7le5#vSYsH!Kk{=| z#9guEbAfPQIYJgg<_)9Wm87YxRg1u>_{wwko$&hlvhqDa5Oy3@@SxVl>el-r;L;*p<%n z>pP;q&U(n&jVYjNNAwZ08VHyR0q>FiWPO4@Whn%5EdQYqa2AOa0=SsUs-C)sHdmH5 zt~GT!FuMH#-L@1C`WGX=A8z=@t2~6GorjzvWvGb)lCtnK=R1z$!uf~r&evaKePSFv z99&^Z)&W`DKyiSNEF8$o^b2M5#;c1c!$VeWTIY>?8E?% zI?HyDKF> z&7mF?cp?Bb+E?iS)Q_Kpmp2dhZv}De{lf7eR*zI&oTgx4UG(rSW2Apgkldv&JXa_8 z-x?ZxV$-qMIy#1>2CXZcf=zTuq*(g0}pdpqYDWHYnveq9;;|1&nTqd=K9m4!nfhtvE#w~QHXZB&%BJ$-?2ZCRppWe0SJM(q; za&)<6=$vbf(?H)xmYy-i5E0hMI!q{XI7N^mi9hJfB!w|_1?l#bac~sfbk;1M@~-=G2z4B1B;|Dp>TF;Z%-g zx;(2g3EF#uDJH7dHY&;XA-KSS8p9Q<0l~zQfSvGXBwzZE7XhXR0&2(bp8EvCZ8#iLec#(az2=wG`W2KzZWfIfk_2uLi*<0mRZaoKR)=GEH!j%}BfH#IGIgxFYy zmGWy=$u38wu2u27Ndf`8jlGBWSWYhYGe_2qzNE2H?EH|d-70y;5p$jhG=6Gx4^OAv zf@%jG?thb0WedO$%_DUc1{~64(+;7jGKD>)r~$&E)3ti%5pr_zNi?w+fK&Q6wxbn2 z+S~3OQwv4N>;_L4dVH>39Jauk^&rulrFalcc)3X}uF|mK{NKO&0sEYQe(y1Y(Je^_ zNgJC`E(XUK{vu5(cROPtw^38WQAup*Yd?nIuo zq1in$2KSDrIyx+xtkA~(KBB3Mg3?%ez zxKy1)sF~I7EFA|fbdUgHnq4#Kly>wp*z|WcVH@IN*OUn{T)IQu=DL?=Z0E}lYzDi+ zhff2IUGl&D)%17!?oEo-#U!h21-2dNe;+8(Z=+oO#r)6hF*+lQ|ox-!smYS zqq_R@=m>jUGdsVwZ}4w76Kg~k#O*$4M+dy~8)U&RD937N{kBY6ZMO=ZX~!Dmgg8EHPONt4{WDtw&y1xlV}qd2+Loaat?VUjk53ss>=p5>TzwQVbG}6fo>9wH+uE^*mrn@q_8cfE)9U-*t8BtF_0=uBCyxeeQu1SCx>oRAawhBZ%@( zO?mK>KvWygf-|$0Jl20YFWElxm$sn9uQk!p;!R!dFG8>|%AleH-k2_Apak#0ncWfc64tkMCg}@*%0**uZzLVriiJ@XoND7K#dDEEGfmP3NPuf&5THsl=~O>cl&Us%p!Sp$&S* zO|m-Ude=+2g5=#l#HuU$!jE_xb!cw!ZPhA{T7o^LE^@Gq5aAmdCwbJL%1IiMR6s|x z=D?Zo(N8DIZiQEvAcecXvpM^A|C`3)YXo+kLFiR;6pQv2^p93bL1__a1Ci9qoz7-f$~^39(L z#CzYr?E1Aj4F{>{EOE02I{ymqwgokOft9T%C{?xX)9*MsTKH z*Cdz(HtrzRn>2NlNe!)i_jMy)=f3WKls)67x_7+&)@as&XRY>>Yh}V5u$Y%mp2W6W zWz&)X>V9JmRD1Rh=2Ex4ChulPF1DMm&LOA1N@e(q*h8n{S#>*UxlZx*T4}IXRc+<- z0qg2Q&cu+O#G%Qg6b8}Qb0tUn;1^>NGu0-?HABK|c;WrvEBLPJu!hyM-Bfh-&nQ+q zQhT@(9g-o^s@t@vA3Zkh;7<`FV=G;nRpn(!&<$l)H0871fOEal18@N$@_|0~S4p{(U(|;dt_N7CRZ_~ay5qIJp)^x?d#Ex*CR%#q5Ey+p?XfF~ z?O+S-il1KbHXnyq9nS}E{88#it@HysFTB;550ZlUmbBqZy1kgr$@j}X^FhfSTl`n? z43~N=_y&4DvevGAouMzT?Nbu=rw7;;CD;#<%|SqpJ$WxXfQDrNs7IU3lm4jWXYD3d zhxN`MrU{VTh`wuaHnJ)-)tGC~;BS8n8kpJIroO)OA`EJCV7uS?H7}ZYW^I!-+j9eM zgVPWPY&JnlU-K?f|ENEECH!o&TTVjR#=U3Vd1XHD5_~b!YsAp5cClt;tn88C7PtFcaA!U| z8*70R>L%0A2xYEufNn@7;bK_IO3V?>fXVyqG}E4{S3W`F3$~D(>2Oof|{#kN5Dew}q z54{lZD>e^qW%^_$B5-%{Oy?X9*K-*6w*iUQZ#HzhL~p&L+VJvD(auuCt1`*v^JvH5 zyCXAu-wd{BMO170`2J~eB4Y!aOwZ*?@BBM=;to+5#a}_zayAjoa9R9qBkKQW*;wA1DpR@L9}|9Ql+ylynK!v zYHq}6=Zj0O@6$#|o1=E&^5)pVNpvN65gs!H1QWFwm?<;1wUkwdwV0sp(wPN&8`C-F z5jj+B-IOHt7v_l3oQL?EJc-Utx+XkbG`RO!C~kuy;o2)Rch*iH>ob}zUTyBN&i+_L z8bKy{zx$}kYvK3BI!%OSuo=$BoYY7REJiB}J7%MTyICXdT#cDQeQ)D_)f8phQyHVH z3ZXB|D286Z2$IOxbvhDoJY7x<-^0U$@_1l%@-r&F)hco?zP8N-EI;rIygS@jV~ zB%FhU;2NKyRGWZwBa=_1`XQ zUmg4Eo?qaR-fSf}jf^Z{l00bwLVap*CMzAJ!@QLJT;rGPto zO55Boa$6B+w)C{QZN2LR8$T=t)~7kDI8_IvXCD3>xk|ca6=ws`@MC!fqG5znneej0 z!o91({3h)MJDR+2`ClYm9gESFqYlS+WP5uH$z3X#I31uQwj*P&Xk`?CVVyg=YkE1{K3Sg&)8dx;q@hA<_KLZMyg171m1M1 zZTPY=ndm2ghZh;fXK3o}%!S`wS*8uEL%SBO7yty9&!UJs{m=T}2 z@Q>}^tEzgx-(1@eW(V|r7QA--&-Em(kxK=AHp&Y0YJalN-j5s37#iu!YV%|e0Q3A_ zUQyWE*kOq?H>(Y+q@tDvWT_bQwDP&4)f5Ic-91Ic9e9#8S~4z|3=kUTa8~jAu_^DS zTV?(4@&09>O&&sy86Gm!g~II+RlP!e8}&%geYtZH%j|RNUX#9uJo74_3e$ zcWWqpa)utU8GIWh3`r*lTO@tqU;VN}!LVl3J2O2WA0sRPtXTE_$9<^Kf_f2E->;i>ULm{c`oy%bnt4dDcW8? zP4K90Y8JvMeQ{8Kuk4xk?2sZsUmFi00WMMvN`oK@ieXBmH<305^P|h5fYDP0d$$sb z!HWsY&@6RW&8J6K%9$?Rto^m?$uiZ$!OsXrgMC1PKOR!7AA8fO(hp0O8rSJoLhSMB zI~sCm)#)~j$<18sLkynxAl?-Uk{HoPm6+DUZR0GrG!Va(gr=bXmlYWLhvuuSsp;lu z>;d%tRm485mVx(uu>y$ZDPdSgVhS$6!ji}LNX5T#x}qMaucKx&j+nE<)SkT?_=!0G z?0;{7v@Qjxb8sc{)Vrdwh=ct6hqddsyP980i&X8>|0xNN+$D1s(KSqE$6*bU;QOlo z(ZV6?^+29FPBgT!Ck>!|PQTXiRS04*#PBKLJ0DzV)z+9Z(8g27!o3u)8UcxY-V4N+-3FL2)E)ir zJxY*N^zOh^8#@8tLo$0w344mK*36;aG7_=OrYI$mtE_oGC2~G;?&pz;Yn{6y?%m^> z<@0Up+s`1(QNzmW;2hoby3}?BOpCk<{Af;FR_MCQ#}8vI{2JVSud+KLD2HfqeU~cEC1qbJaaF6;v&eBr@My%4dBkC$$1x$=m;P;A@Da09q&!SUMR`SZbaJFmaL6SR*w(1B2? z-@wdp4v(F=py={FZ-53le(Y`}sFST&LpIlw#a$8~s^yOC(!3TTunSm1eJ)iKQi3^g zpUT@^69h$pW><#;+KZY1K`H0m>60evqZBTLo?`&;+W&fHCP{5}))79Zb8WUL=EK|> z?_w3(#SAw<`mw@U!Y7DZ4J&7rz-WCa%^eP39LavDc-u{eP|Ac+3M~;1vSavv!#z*` zWR6er-;`S3o{{~aUS22M4(z^h9^il1fbNVqi8uB;j?iE6Qqu_&PqN|S5VF8Cm{Dn3d2hKMfeX?4!uYD#gz1gg5m;slN0>oI98@DiW=qY z?GK;mJJ(;2k67WGV;$~ZYbT5O*CI{MbwF-W11zBJCg!m5P8*DIo+j;Xp=P#XLy}Zj zj{GA_<@TEAxtj2_jpa(OKv9AAvE#%zl*Zde8dt@y)qP&!`V8jZ*!PSFv8&Cy<5B(v zpnLknORybgL<}k;`C*l+0dRM(6Z-3hoIb60YJr;vv3On{Rylvrvz#j>&fr_|`e4dWtCCFrqh=w?S?1qY#*`xI5dNg9`;Y374$2@6E8{ zI}H8k@U1wl`J_9KAJRgx#bd`Y(Y%Y~H-Wntvn8304fRikEMQwu7U^I;)(!GS zxxXko1NbwsXxIzU>u3)C)8qc6&iu*7)5!>ImfidsanjE|^073bVQBLw7!cond;T$RRFPnSkdt5$*+>||chR>(6Lhb`Y_)l@z zZ2N~ipyJ3WteJyatJxQ_**B(Ue~aDJZFhezoAZ)_eeG`|Ai;Lgm;@zg` zpQlPL?{TtrOV5p>3XPM}#%;%eRAXqhrA7c_0aCPEM)C?FYSVe|t^N`-J%InYj*|*@P~LcJf}1?_hw=H3M)|TZ=*u zP*7qrJLKB1H)zjCR4yWs7+H4r-_4)SlOY5tLaJri?!`JykkwmUSG zQvxGI5(ACb5s4Ts@>KO5aai4Kw-Df<47qVUAjL)1)ZuNH$5J7^Q$F23KL?X z8+|P(IV z5V({C)*+MxM_Ru;pn>i5L!+8Gej7$hJeeQhKb73^RKnk4-s`yj6cDKPUrk%PDg%_Pl4hI*3Pr zTmNqE!=w|(G|`k4(EV;Q6f?)P3MQ*S;X@UxOZu+igS!_cE*}0Lm#p_2B@EzbOBP&5r2$ zC028+C}DO0d4lyAjlbWEVhxJ;N%gHUn7Xb(vwV)eeLE}P2m3o?0<)$ckNJ80nSX%M z*RR4MS!AQxp)qB;(nPj}P15$5#_ah7L_EsJcdYvgJ;Ytq-b_|PFW!fa=4wO9W!z|G z#0$p|TViv@XV!RCy|oU?&-L#wzA-BUt@fVCkNN7es;Ru^{Pgs)PaAfg;IFP_ro!T_ zrPLTgf;K)CPdH*&eXk&y{mFa5M(29844I8yE;=*QOjKJ5Sh*Lu^d>aS#5{VbJ01FGjsrj{K0&L+TUt6= znV+DQV<;8Pc4Mc*zPwrMb3^vt_q<{z9+1#A^FHoEd+LG?8%hXSU9(w(pgRDQfse3* zP}?kj&MFdgA}A4iEC#DEq)=%va-$qdUCkeIgODjtL-=G}<`|O>_&9e!4v)5(+8((g zbhl-BD%FqxoVR!*-GzKfvw-V>1lUJ#m+Q;c4h=s`-p3SNpMD%vJFMpg^u6}^GN`YJBq~Yw8pG8llEObgv3sH4 z?xt0}kGDcLCQ|wT6cxo24kIU9D&XL3WiZ|h?K#8*WUiMH4RP()i~FADyMj?{pPJr3 ze^$+i_!*hT6E)o_=<4Y|YX)TgZ+VHx=<$j^RE3v#juyN-;Pi&m8Vcw=^xh6o3ff?1 zaCLM{UMylK+R4Dk8ClJyORj#kL9X+jdojvflYeu*JcH9)Z;W7#4hXrn5b`>OjQ6b2 zH&h_L_ru~aJCBnFrqO87Oe1`$UZIhgARZa*%lw_W@>iP$+gtS~42>)N&GY*JmQ`=N z+rW*Lib7EL{LWmbmNvq!ID6m)Fz`FuiIaGRbR-uiW|8%)iQF43U>wOZcEZB4p5cbzSa!D|EL|F1_(eO@uaoY}@S z*TeqX`a&`!^+p@vMVS| z6o%t5_%FMtAh>{BcHzBsb2LePW6JF6s6p8BW>$7UE5QG-m|@#G{`!# z>NVJxGy@Q9evZJ}3D}?Cxe%%t1zij+Ohn!%D%&Z2`y$4Z7Z$@<_#V8anc{*&>x9Wa-ODhjR}G%;C1Su?c*r zc{g>|5=II=P&!>?&rVxYsLq5;V*nYE{fp*`A3{+_?h_)~S5xlaMTx+kXDuRN(QK){ z3sCW>Avy5=Kh<3944dHpwD*>OQGMV0@R=F98|k5>LqJ5Sp`}B*Rk|A_XF#P?N>Vzc zyL%9jl9FzuyF2fBf4TL9r5XU|PpuI@b=R$03Qy`S49U-(oMcsauJ%O2hv961)q=#0<*+qZ9#zo5_oX~Ga&8_Q{tS^l^-2G^kYQ&7|EE$V5!-0H)u{gr7bBf$s5 zK*rH>PzMCuO5?KhrNy72d)9r|epvNzx=q~Vs<`HzAt~U{Dq+yIQhh-D6kAvnb0`t}_eBTHJbC(85P)>T zN+;=U1^ahKqJCS?%|qiWqj6%CY!wwUc`r)cp1wcBGWQAqzr7<>*hDsAxwJq{MC6c? z-P43mlYdeNN7A@6>rx2@aFdqsE6m{?^OY&2qYRJ(r-J6j^nT{8&N92ljz*MQVb6WX zvxCKh4XCxA^sg||8E=j??rS^-@dNr2bzAxrzOUb{4BB;nY{S!y>9__=cv!FuhvCv3 z%49Y0Auq`E=35SGqGZiwP2?kc@GZUn4J7jfVm^`X>?j$Cf?Q}R*eU`Qu6Htdg)8G2 z`RCZ@R}c(ffX!(GB_HUT%n=nAwuRsF0l6E**j*u$h}!v6#usDXhupXdN**^D(zq;k!B`Yp_$WM(bnWQ zK4i_eHKSJ#`W=s%`pq`JJzj6Uf+%ebfauAUIP@E-!{cT=AVEFJ+q6)~FV&rWM9E!| zxJ+C6ofNF{4_mjXc{9k%-lL9-=!GcEa66L@-{K|srPxVfdK|#(Y?leO&i{ixttjOSX-#sr$#vu&BQH9u);K6tW?nLE`qdxu z0SE4}&R@X{)>1x`h7I4*vHsa0O?{M|3ir*`4-%#~<({MGK4prMIm6spmzdaMxLrL{ zpfqz|TvWtX4J^Q{SzEAE0Gxh$D9O+;oMpFn0_IfVA5Z%%CiJ)Ddz#h>%$G<9pnR8> z*MI}Tcyr1QQ8Hp4ZY7~_-OFvOQIZG~#6sR}y~Ta95rwrU^7hj=T(Tpu5L(ikUT#@y zxo5Z?HAN~j74*a(l)CSynQtnK2gUDBM$!YKOg-bj9_G=%nj2Bx+&V9@75| zFdF{s{U(wB`#J0Br&KFeZ~EqIg?I;JcWtY6d#68qd!am6Z@rPeav%K>d(3kjVbH$^ znc`yW!=Nhl%w}>QY6A7}seIZsTd7rp@K}gv`IxI#Qp$;dNjc?D27em`NL<|f!Qop} z0^jaF5Ryrn{jgL;j7mNL(4F$nBtl%67BZPbM`Kn3!t6E`k#z{$ndizFlqBe#3a8VV zAHGDR6Ab1AcY0&)F%ngxH#O_$P;WP5nQ~~`|b>S zy0ClitJZUd5r+;!4!;X?=g0ld4C!YOHucw89!9imgpIQ4_602(QLzi|wfC4xY=F*)L1JUW#R+JDFs^x%hWerI*+>lDfp>FTDE&5!N(yQI^Y;Ak@|&B4;5WgfI|+hB zByr0bsnuq0jis{H_VH?@B}s-xyd=iQb2~xqMT`o-+|`>F?}%j#wwGy2w?MmT+tmvC zJ1zcg$AT<4uINTGbxJ`#(ygZb2&tX+ur%If#RhEc+g&C#1Dbb1!T}u;|$z3xAErFszk-)!d^=7q*N}{6UL3KuA>QZuG(=P0nHAPeRMt zH*@-&t(I6D- zK{0LV{)95{{`J0Twl}{K2p(g(d-%X2`yh>w)8MDE`#gjFl!{=So()Yahxql=FPp;C zO0bc?0t3!3l}JHq*cPD?5@N5if~JBzjgoKgJS42nZ9MvJ{Dg~_hjsF3M*Q~)QixqK zDr?aX^oh#RG*-i_TOIR$*MUof_z&oN{DCI+gtHd}%jB2=Pe=m2dx9R$aBKa-hek^< z0Oc3+&5A_#;YG$cnK@pVgI^kC*~8QyW`=m5f`yAj%yOR7KOs|(tIi#q3D_OIv$TC= zMR@MVv31D>Jxit&uQ)u-u4b7t#Naz(Hw`S&)atd9sQ8GFU1lkoiwA$2X!A*Z-~%cF8L4qEnGC%(?wQ`r zN5wIf_BCZU-|9l(%EAs!2LB}UIj0PQGXE#)w;)fcs~*hyt98L!1Gp7AsLru-w8P^d z_uc)S+z~(1wF2coR6QDkG~iQk{Ox^%DADML|8$zU@slh#%D^~!3mg_NNC|Q(V*Fuh zwsFgH~2FrNHmPrpRI@b4BEo^{(f`^V@1wyH6R zC&j+ncYM2XebMYo>JnOaDQ80#YSP6vqpOKK=y2lzxD;%)3JS$qg(92Km7)tVK(eTc zzgu;VBk}k>v*y=k^VjRQms1CFfSF?E(9f%=D2-o*C; z<~i=XR1C)Z6k8{yiVQy4w!*mzuGAy>az{SsH%WRy{=_UY1Cs zx1%lVWlifhhgg|9N@qUD*a=HaF05oF{U^{jlIddw^JIl1U`^d@fjYZ~e4OQeqoHzZ zRCLZC9QEG1b1bM64CWf(0|^cd#XXk6&)MJOYD=1;WXbsp*xJfjjlOGe@Tz-k@feLQ zrM@-l<_Vdj=*pO3XFqosZf81L`q4sd2lC(w+bV zTw0r!+uT)gVH1fx_|_EMB>`#FX0fD1zk^W8?`Tgv3pE&ZSZ{6-y=!m}$bSm+!CJF)Mi6R`OmKl0t*VyW3;~xE7t_P2b)Ct z@ALU_DL<>=rPe!?n+LRh7t4&~It zp^#_^6VmPvrN?hcsvNgO`(fS6F_xZ%oEn0sSVYF$|EC-ss#*(oBh;f&-;2 zBMGrH7C#jYEJJm$wB5m}sw8VlNPib4MoE%U1tX*Nf0;re$M;M33mgg8n&K0zz*gh_ zqM0_IJ@eNRvS>ljPDetF<4vk3ro&-a^U$;6mY1x3h(01lE@Bm3w5kanL{rNrTPs<( zO2k$qkpt%ZX;^le$%``o+QaR9@yoly#T~b^hP9jweQdJwOU-%0<=?)Kv9?xp8{Apk zHCzf_m=1Oc^R|ru#Yi_fSgMz0cw>3>CeZvz@O!3{TG)A?;#aSVQog~wCNv=O#bP@& zq_0@>IH-iv9<;s|_bR*@vSAo)FrMs@yn5n#T2!{99|hQ7SxBK;7qK8rOcwh+-j;kn z{0K`=Kn5suwd-=PjIibnC^RgoyBA6*e66+bJh&+HRvdlA)^w|{Ow zh@kLbvT;;Zqrd~F{6Gh}n!<2{9q8W~L3E#+r!lO0dju>_o{fb=gR`+>NQ-9qf){o| z4w>4Qw+YO|PVe~~HrUNl+|OTWy`JJ}6_?Vu7SNWoGYJN{7^S3tf}CIO#fiBfbGgT$Ww5p*Sr*2YnZ zdXiwQ9LumA{NZ9i_&X`nU&8KF)1xXhrxzN5ZxrU#_kJDV4BQrIPVfN81fJyd_niY= z-CG1ck7fWj1ev2HK7;)Wy_Z}6W5s($BD8s&q$qAhetMkvGyIBD5H8LN6j_JYaPMBp z-Qi5alngr5b&>u$sw5wAW61%O&%6&BAg%bRF;CI(WREPGYbcY8| zYOwbaR#-^+k?aJ%wh`;YHtXg!Ao4!0rf5r;zlH1-^1fa!2pSug(Y;+q8*{Q2s(72EZWJ<}p}k{U(LUnyMh&jGCAwuLLjkMxSp51KG} zP--0^;v2h5zd?Io2V?nx`4fwaTP+W}&BQ|nwM$&YUvpkCeEMWgI6#}cb#ZqP(9QeT z=VYNv@?@G5RveG9L4B=|*Q68+$%k}{s6)$GdKr7I;wHe#Ob%-kpzy@2eA!XL_uO8TPa5MY z!c=7?2#+W#`DuPe;c5m#>0ka(%mqvofsLLQl;Wst5~O;H_OXVwkDhs_V&ll6jS|D; zp(4yk_O3L|Lj`n!qF~~J)X!Ip#4oaA7(l^qu|pVn-iheZ(=C`@@ytE4DWy>byhx8y zo^sqNLUXDudhFc!2qSo&VbA0miu9>6mRP#d^Afr&T3}t}B>5pu+-xw&6V@)#DsV)4$+lE-^Rlr;edzJxCGVg*=cx{tMw*+{ModNNxn|$`H_YB| zuo{*ji7HmgtG_kz_bP!*w5Dx>l2ECtaUgdZpLVyp?Kh3lu}adH!cH`G(eB03V9G|iWjbNeX21+)%ZzWm^)r;$WS`EYXKI4syRw+M&9x2)X1A}kF6Ps>gW;#P zG-2^>2BP}AWH!~1l2=e{F!jp1%xPl$t-+5)X0;=}og*H}n5DVLiC{-`qER`!Fy^a> z#YGA;PM$)Qe&?`6NsWSYvl}zz4Fk_`Zuz9N z53OTci#I#@z4C1*(@88WV-jmAHq-6sYx~V?9MZH^& z!nZ2*LHME+j1~W+T=QSdRWhbv>+WnmMVn?0Za+^x+J=~Ps2yCA4z_&80eqcWZw1Kf ze=FQDkT>AN@e7;_GM=3mg(FDVFzUJ-Lsq{bCb{5SE8iKD$ht{!F27SgI%xCKi`~5- zoVAdcye1v2`24ET@O|d-gD$LoHkU&!z)h=NU>Jm+XIhmc&PAk-#7XnM41S+{I|Sj}p9zC5Bi^Wo|46XRRk z!b*K2qK}H<<~_j{Dh@W0!m^urSP07t$qk(cXR@u`Uh*hf(}s%PyrArvF%%#kF5SW7 z=d^jQVUoWSgpVxR(FL9}?UI^9K9-1${KncunT^m5^pTep7LqipbA%nIJENgc-=f&! zFSLP29euMoVK%x#rT}2B>g;^GEjW5^S&lv(4bAkt!TgEAN}`9UUkx=PjvnEB86NmE z7Iq<(%O`!*eu6uDxqn^F_jU4sHQQh!8icH!a_Xbqr8Xw-2*RP?C9_)qCEG17m#D)W zpF^z~u327IFq&Bk^$>u3RF~5|OoNtL>Wd)*3U!iaMh=I{+HClKHfX>@X$ z$r~78>4S(AxFfcOyP_$~$S;Rp1nc0RZ~ZXW@a5J zxBO!n1>dMI3+Cs3n7ktMl74!Kek2DdgFMEM8?$i9E^)AA8dUxY^-7rEgQs8e4~oe~ z!dspO_n@7GygttpPGp!qmuwdxz*2vZ^_*+~!CG95qm?K38)ifwceCAcq=VXqh6zpB zjj$`Iz;)y!?@l3Z#}{x`EVt)S&)*t&k%!Yncu3E6}9oNHWieKD@~kMIrOT(IiKX|AarpvsZRS z**HD-2P)QNygffsP3194;PwXKm~@oFpT6NC|Dp$SyWUaYrGH8`Op^IQUI$7}PD|YD zq|>rY-1-FO{Y`yql(cx3?ZXLMil3_cnMvD2`mOf-LeYa2c?rCVGjpb^5oAzIVk7sT zE&cPAGSc+3>Zw+4Mk$&(Ni?IY&od%1UCrwUgyoE$2D>)f9kC{}O-jze`tG5hclR|7 zr)dyPuzi-zKZBe;Z8jXk;LLMuEbbRbB@DrrPPl(anMBy%`Q4x7My;)XId#@%qMLsl z$w>d#mr+nDqzah3gCqX+Hn%Lh!xyt7G9XAN!NFcI2+Me}4jdZ@;*C?B#hT*;6{Dww z#~;Q6RDg?0>e9BXDVE7bas(RY<^8&zeDXi_@uZZeKt=IAdHuOpLQa1uqi;T^1Sqrg zS%&T_HVUi;C~AKDg7^0&%g8dVG|5D-x#|j6jCjW>h5iQci1WlX!*MQe!m0HH(E%AOrQ*8%t)`#v|9k-A=Xt|p>i!Okyj`j*pn&Flq=lMl0 z0<4@0j7<>a00P%LVyZKyv(kpiz38#ntdckA&k>s)lPany&3~8OMHMao19rhfQBhf8 z9gfq`Qs`m=I#`#Hf8hnv4SfZPq{i;<3%+w7W@=8U?-0u;f8rLr3g7e0mc;Qt`g^jn zqu10k*Wa?kW@kF+i$+d{Q+0+Zx`f-Udh~$UnKpNNGR)=`9HorO+IAE51AF}h%g`{6 z7F0}~X^oDJcaJSTl#Z-o!M!*$v+Kz45+w)80n3`Ce<3P4*K6IEF}KwgpP{-!;5v;XXGE9+qzNiVUEICnNC`E;?` zrJ}HyOQxV`7&!lec#u*xsAkV}Ztg&!+X%Q$l6G)2r))+W3UW<{>k#N)n-58xC{7^H z>VSI8MTDK_@S=XwYE3TQGnc$w5`p%seh$}YLy7W(Yx_86lw)>_K{9J2G{w- zR1$wV0BkHQ`Dm<7dP!9Av4e#TIz$+zKr}arG~j}8Gy99;Z1Iz^p>658-pZZfYto*N zye~SiplC!)g?i(^-_^CcART-&$N*^b7}RfbZl2KtyC8ooYCUw9I1yGmp3kLU_{-=k zU`StVw7wC>Ir@S+CbfwjxaE;dKaq;mGmOg776F1SVgQrTX9ComQ)uJOA?miVB}1s1 zyT&T>-S-sryOaVox9eqVFN#;DKqeU7!Q+pg#&VlD`2&7YTEB!$xJl3PR-}TA7+omH z{`^RM7|ty+)y4$TlEl!h%-fSRh#!gk3$W$?zSs3#mXr>1eQaVs-5ABLx-qO-q2V%J z%Vq4<(!CgWJ0UW(yf>+p?2rh zQF;eaGHcOj9cq*x%ftHv`x-(|xarAyPQv)IK;>%!O9F|H)vOwW7L-=byUSjQx3ko3Cfkq~q7UXOa)pY!Fz2Si2z;MUk1H$=GFO*DKA=c=g{xBrO{8Rmg zM0bw32NJ&L^_;ze=hOCb)@(t+joDMal3CFm<3&SjlaG4NcKh=F7eNEq5^atQ@e~PQ^8x%11$DIP63u$;>1#OJlH4{)55At3(6U!a67B7*0Z%t{KP@4?$4%M5ZJhv7YKfo?ZyOxe|ga{%(ckVrAtx*rom z>FLp>)Ui9KKIm)E;fMR?H+17_Hy4e*E0VYN)|kMU6wLpZS{rS~V)5fQ^|j-#JK>L| zY!~j&FnXVbi4~5p^;_N#ZMPAof^a6cLc_L}k`LLWI%aD-BIbkRHOX3*A_H~FX^QSa z8@GpQp4M!SxK|mIL#LabzaAAaY3Ff=(1RAJE$a81kNcmI`JAw2XBk~k@PVeWliM->pR1e#YjBh);F$lfj?i0z8 zs)KG!v0jP1fTw)tq11+oa7UQ9+z=*zno%Htu+|;2X1m7}0h#UrhrddSjejl%JPDfw z-Dtube9bldeRj^&OWit?`MmnCC;h(N$rkf@%?)dEZ5Mh5AbwKdSE|_GD88*jK z$%r4QQ3;`3JOL{7lPKW$3KrRc&dHt~8`IF6e7HH&H#0NK;|QW*N+IPC`$vvSD9s7H ziJu%`rfijrI8vlx#Vf!kTu}m^hlmq2sUq454eyi{PCxvZ?coYydd0_q2apJh^;+gP zWhHxRw3{+c;d*>}>KO9ownamRCU`jvP`ArfR|pFfnVxV<^?Q)@VAKlA-ZfbAd&zPG z%e|q&@z;tWtry3)s zOI*{Vft}Vtf{MBhx?1aS8z+36qwI)V-WG|n#v^3m`MMrkYKnoa&0aV_bk^?J8lS*uB0lrL@SND>dCVE|*powK!4 z>OCiN0y+l7wjTANi_9ZjWLqT?p9|9W)+8B&oqggDEq)y}YSsC8EXOF6fZ<_V+0Oux zx!Kx(wRC!xQ52YEr^FJu!8CvgWNRI8tL-5kq!&F_m#Q3o*|MgSfw!EVn9$#m6D9FV z(~pdJRPG&c5)hEF>w#f>iz*0 z7g$W$RKI}beQaMp!G-*La>lb(oJYn_{zN0Y6Tax|x9B5ZiVK#LAYKvuZ!~5OvQLJ% z<$G>!Z+_ZEF)^hu;sJ{tdAq`%*CS@7(fFq8UOwCq4_8lRWD_Qd310IKLx?$1L?Vle z`sVX1J&szs-NRc>^*dQ1dsK^;IQx1F-uAWEx7uXJ7@m64u54t&8ojfa_2cvk9uF%j zL5LQt4tJ~tQZ+Zx;D0B5o%N+0ZmE34gHJJlO&d99XJuD^f5z-RKAB_X?2|}f(Qy?$ zvp*hq#V|Q-O%nVb+`=2d@atb_y#K>GBIrKFC~jz$FmPUNX*zX;shSSN}fe z^s=}^k$JCq#87f(E)p9dMkoDfDwrqU^YrPr%<^F{_95CGAa3yQKxW82EX`h^SA7;bL z4>UYMIWpXhXFl{fTT(=21YNO^^AMcYwiIaZ@vlO*H%z|9jFLETww7g2pQ%I9g}yiT zlPdh9QDGZ65IB{lOXOr*4K$X~+k5{Q+|m6!|HwBbddMPlhbCyo?suYI zGPE3~n_Q90?@DJX*m<2YZ0c(7ZoTZ!2V^CgQryKj25WqbGGi0_Ms?Jb^*S3bJ62om z1kuTqp|pZx>IUMESZJ7;O_IlwPo%l?w5qaS)lxzynN3Wd$Zv{gMk-F#wng)stHQ5nkU@EOG z4&oV}BEHB@!nxp;#en_&)&I`X>+mpYY6#r7$xHcX^Lvp{-5Ptc^N*Sys$!NJUHzDT zsDofLN@i2JA54cprF<7QGKY&+R4K3Hwvb(;{%v8UMm!zEx|m`AlhT;Ux$xsfy`}se z&Y@?#bUAo@1E&Pd1s!h5S@ls6VQ^Hv$`ta)e6 zuaqvC^3vN&Z8M2VGU@9m{3U?K$_B6=Vm$fnX5B#tXq~M8fem z3bUIJl@FkpTXc|a;TEgLb^!)h*csXbU(TM^@h67kuTX{b78KBR7P}zx6#IRu^I%9-s2E|+DVd@M|(oC6%7ty62XXPCK4~m z#>`Q=FfS{0zuL+nR2_e?XUhH%0fMvVE#ZuVsV-2omG(rIh6PdHUl>Ks`}=@^H-k4MP^P9Qr-!o9Zd_AkgNeVs<-vSD zpm#K*lh1KB7$&25F-!gG zZ!yc;6yOaG-piQxMIy9Ps0LP2axR&rrSnU*9@|%52?xZ)6Z}AuGwL%|=9=A{T%Srx z7&v(*zl)5_l@sbM?)~-pJ{CE%10-}8gH4-sR&;`SZBms-V(_@^*vW~%@1bR|95lYs zpd;D>;BjDal--wfDUwF~#Wpu?QRkyi(qJQY zn4OTi>x3XXJ4=rs*msfMF_wC-WeU@)Wr0|z@3D{ZXg z=>qQRn^tLVfux%Cn>8IaOCP0B01Rq&x0A>pK3xoN8E8#l}|p z+a@ft{pCVhB3X(#sWw@51HQW=27II@yV?B6eO!wcU*e*rrk#?;L_y#YXs*H%UB#5I zyG6}(qhiN0$-)yL3<=qp#{IAP^T^ZAvee|SZQP)V)r_Kf+lLCWvXoK(;||36A9tYA z|8WO${2zDVr~eV8*r`ai=5#;@f@$ZR2 uj{%BKlgPqST0vS^NM1xYfTEn5Y?-uq@c#$z{~aFy literal 0 HcmV?d00001 diff --git a/backend/web/src/lib/assets/apple-touch-icon.png b/backend/web/src/lib/assets/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bb819eabad993f01383d16e971e17061cebe7695 GIT binary patch literal 7354 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 XF*qEV*2;iQT z#>@{P1Ic5LO>3I|DFG#4U<`Jp7Ah_^r#c1VHx8H2_QdTWLzRe$=-vjOdbI7-Zu>}GI{83QpFO|4LH@?LRX3tP;+hQj43TZ2y|BFW?q)h z{to}`;jM#6-5O?Ee*1?pvPI}I{~m_0t5e}mC36{};Fz#A=6@a`a0P@{SL)M?AQCdi zH;|oeJwY7r_V@X4Ckm@rQE`Bt$iPTtR2;w~QJA@M=pF=UM9?^W?P`@rKAbOYs)fKn zrqOzd0i8gUFx&CRY8Yl%u*#F83&j#J(mBvj+Xcjh?$-9nZ=QVkHzoGzb)eB)Bv3mL zeHe#RJ20}496>GWs(27N5j+|LGfbh`k+;E(^Ixq!@CiEPsiXmV2I?nH6S1X03@{57 zXpyLj6^y|uRKYD68FG2ke+Qm$QgYB>cs)fFkw|{BfB7{M31MS zxk)gsH}A4AAifuZb=KNXz2DEgDZ$Bt literal 0 HcmV?d00001 diff --git a/backend/web/src/lib/assets/favicon.ico b/backend/web/src/lib/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ba5c43e0a4f93d36f6da67554f82dfeb64e5f6c3 GIT binary patch literal 15406 zcmeHNX;f547JeFMlF7IM-G~c|iVV91(xAqOcEgBaX%Nwf(1-)LLfEZ=U3I^E zUoE%py&TtzdxaY~kOS(%&FjN)fgH!VxR~1RHXK&~@BI9p{_e(cSL7V$4*!8J(8Kf| z$jk8b4p-U^jT*=GdtR_=l{{UolKmJRVo#vn9;K33#RS_9>&iH4rCk>G!!q^H_9S)s zP_ih=i7ZZb`YtoYB^Ac#B{oi2plyHP_cQj53AHDSXFHMXxx8$-b~pE}+~-GX%L7SWMG&d22)f sd>`BRH7r1NgtkF;H%begAq7WB(&ty~&j_ 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 + + + + + + + l + + diff --git a/backend/web/src/lib/assets/logo-txt.png b/backend/web/src/lib/assets/logo-txt.png new file mode 100644 index 0000000000000000000000000000000000000000..c92d90df2eac76f1f30b7df961cf6b87e37d2e03 GIT binary patch literal 2767 zcmZXWc{J2*8^?cA_BC5k7}c~`%2s19lqDo%lq}f>*+!;$rUs2P%E*$$j4+ZEV+@tX zJd-WSzGllXD6%#rjKSdboaa67d*1i?Z|89Tt@BrJK@tA9(B2Vn0F6d# z-3SXt`g(`MwGa^jS@Xt<03hOSV|mW`b~c+8n&=MOFZgR4IiJJ!`G9==f%U=d+U}gw^>q4|#G=zvM%yMZ67(Efic4EJQ_{P@i?T_KrF8BdK=Ernp_vyu2r5Kc<% zPv;MUsyL|^?|(wKuR`=94yMf#i*(XR$NV;~hisPN0^4|@z5%aKtUvME@4B9}2-`%^ zZdjYQ89?!#>MQ$V<}-_n75Ll-nIPeA$i<~3yW7W{oB9WU;U1E-u=Z+GZ<3Vx;q1d0 z5Y8H6vurMu8V*G+TXGF_CodhmZ@53oE%L#UYao;Cn#`*?N*d6#qP#^^CjO5k8=-Ct z6o1#JmL72SvZnM*ac&r?1ln#bcP8wT%)YePb_ z(90{f@b_CyOcL78$GKH(Bi9?8zesNGWfsaYW~>@Apm8+{8i#%v^sQX=Eg4Vpl-m!5 zRR_M!x#=JH^ALqQPiH&S*H13Os!BVYAJP`)tqB+`{0o*vEaZ6^4{cA;**c!yAm85# zU~T=|#m%~)UB}o-Tm6UqSzE+~tgGxT(A5m(4g|<0ucV~pY1L$HOI#d%6D^+NQB17a zn_#o=*}my$J#tA}>-N5v9gmb`YCFtnt5k?MbK_LT3`Ppu^!$hM(qno;tx5_@qP$fP ze2)rn{qMiJGfsS|#b?!64yE_#UC1eH73-8KSS#pg8fi@rlRCeO{Z2}#E^Rr{|L}(_ z?Q7@+vp-+|?p_b|&`i%phIU@!R^ZcHMLjP5iXLyY8)godPMNEOUJ|DW$lr*(9v_2>4|4n~G0(kts0dDys? zTFFa(8?@c6+1}e(UViuCBDVWFzO1JTxim z(LZ`*Xv?+G%vl*2e>TIcPi_8z@Ose|rF&nQ-xb{H9=^{c|1v6}AiosVJ}0tLT3#K8 zuW*KKnx?IIIb&r^#v_3guS?Z?H$4j<1hraw)y9 z+kIS48R}L32i$w6_=Q3dV-vhj z&nK5lEUdnqOe*S@RD<%rV}eQR>{QBhWK{QQ^sSoRr$P!`-4F%ewcG z@SkRYdoOwGkt>>C;HFg>B{*~2s&Ogz^mJGNXznhA>;#&V_@ZhqdH#z6*CKgpO3Wu& z_U-(j0Q(vhGPd2sr<8y%%F~KpLhBfp8Gy-*@m2ods|HGBPQWz+5kM9Q1ADULUR&n%-U3 z>w!s^(+E zj%br1jze@VZ+gO*Me)$@+#UL`&tp&t<6v(1{%qRdoiF%}(-HhQgRPUFxcl|A9Xx9nCWRC$hcX;E4Vhj5Wo?Uh-us1Xx9 z&e2yA;h*0G=Fi-iyS)|P&*^*p95jdy1W{t;`RZwlJKbP4B2`p)FN5tV~wG_Y%w zX=6H2E=J0;luB5GZ$%x8dcI#<&eya!+zv3x>Ry%YS81R4eKGdDOz{Q@AC#dyQek}q zb*HBxZ+efv1_Wh|vk=$!9Vr(67F^E^n=oZhJD%jKM+PK9eNfJMWNe*V((-kMyvPn} zrW)_avXLXi4?_~uZyx)FdRNG~xEoiaJI?NTIMxs$rr8avQP|aSF8qG^j9X3HSeJ$4 z+naDO!Au9L4xXK25~BgF>xX(L9SIm6Ro@2&`+<^Z^-BTdg&7B@;|Qr{F4QHNxd+{)!^ zS?%#QxG2zE2VI@DzY#F2e;=H#*ksw?XLq~Ob-eIvIk&52By~rUswMS!4vw8Qg1Dx> z&VupEUD8;{C2GGoR^ovb;=8~)w&J)LJr6C`siNo>qHeOpY3}iwwEs*|$}AJ*pJ$9| zi<=h^*3t#kcvK==bR}1rQ)8DHneWTFTf}HvjLH?hY_po~(_i(1%nAZ5y0uvd7y)jK zRgm$iu`N?RF}J}NLY$w{K^^*!K>w}r?vy=Hk?euzxfl9;yIPY_O+&Tuo2O{Xu^4KH zHA$a2TOx6Oc+A$C$rnDMAGDi4&VL!HXu|g^t9`ne?3LmY*m7rAZKX|cgP`{tDUzU7 z3Y$)Auwx7`erKrll_Lj=T0S~{v$k=NAfGgTX0z`fOc>atIQu5UE1i#v~s+MVp{Emm2UKDDXYaO(Af z2=8ZGUK?RS1XQ1WdBIzQFE_V|Az2=5hm5mh3GFb?=7qxl8Iu3;G=E#Ce*=aMi!~SO xwk5ZvAY0baWo>m6lu9y!nwI|NFOqHxrXF=__mezVzhg!LoAVBqRCBM`e*qD5Vfg?6 literal 0 HcmV?d00001 diff --git a/backend/web/src/lib/components/FormError.svelte b/backend/web/src/lib/components/FormError.svelte new file mode 100644 index 0000000..8d7eccd --- /dev/null +++ b/backend/web/src/lib/components/FormError.svelte @@ -0,0 +1,13 @@ + + +{#if errors.has(key)} +{errors.get(key)} +{:else} +  +{/if} diff --git a/backend/web/src/lib/components/Menu.svelte b/backend/web/src/lib/components/Menu.svelte new file mode 100644 index 0000000..80e208b --- /dev/null +++ b/backend/web/src/lib/components/Menu.svelte @@ -0,0 +1,13 @@ + + + diff --git a/backend/web/src/lib/components/Sidebar.svelte b/backend/web/src/lib/components/Sidebar.svelte new file mode 100644 index 0000000..6bf50af --- /dev/null +++ b/backend/web/src/lib/components/Sidebar.svelte @@ -0,0 +1,55 @@ + + +
+ {#if uiState.menuContentVisible} +
+ logo +
+ {/if} + + +
+ + +
+ {#if uiState.menuContentVisible} +
+
Fabien Masson
+
+ Modifier +
+
+
+ +
+ {:else} + + {/if} +
diff --git a/backend/web/src/lib/index.ts b/backend/web/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/backend/web/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/backend/web/src/lib/state/auth.svelte.ts b/backend/web/src/lib/state/auth.svelte.ts new file mode 100644 index 0000000..4f086fd --- /dev/null +++ b/backend/web/src/lib/state/auth.svelte.ts @@ -0,0 +1,26 @@ +import { type User } from "$lib/types/api" + +type AuthState = { + user: User | null; + status: 'loading' | 'authenticated' | 'unauthenticated'; + //accessToken: string | null +} + +export const auth: AuthState = $state({ + user: null, + status: 'loading', + //accessToken: null +}) + +export const logout = () => { + localStorage.removeItem("accessToken") + auth.status = 'unauthenticated' +} + +export const getToken = (): string | null => { + return localStorage.getItem("accessToken") +} + +export const setToken = (token : string) => { + localStorage.setItem("accessToken", token) +} diff --git a/backend/web/src/lib/state/toaster.svelte.ts b/backend/web/src/lib/state/toaster.svelte.ts new file mode 100644 index 0000000..1b6c80a --- /dev/null +++ b/backend/web/src/lib/state/toaster.svelte.ts @@ -0,0 +1,20 @@ +let messageIndex = 0 + +interface Message { + id : number + type: 'success' | 'failure' + text: string, + status: 'appearing' | 'visible' | 'disappearing' +} + +export const messages: Array = $state([]) + +export const putMessage = (type: 'success' | 'failure', text: string)=> { + messages.push({ + id: messageIndex++, + type: type, + text: text, + status: 'appearing' + }) + +} diff --git a/backend/web/src/lib/state/ui.svelte.ts b/backend/web/src/lib/state/ui.svelte.ts new file mode 100644 index 0000000..e5a1ff9 --- /dev/null +++ b/backend/web/src/lib/state/ui.svelte.ts @@ -0,0 +1,5 @@ +export const uiState = $state({ + sidebarDesktopOpen: true, + sidebarMobileOpen: false, + menuContentVisible: true +}); diff --git a/backend/web/src/lib/types/api.ts b/backend/web/src/lib/types/api.ts new file mode 100644 index 0000000..2e37d7f --- /dev/null +++ b/backend/web/src/lib/types/api.ts @@ -0,0 +1,10 @@ +export interface User { + id: string + firstname: string + lastname: string + email: string + administrator: boolean + theme: string + lang: string + _version: string +} diff --git a/backend/web/src/lib/ui/themeswitcher.ts b/backend/web/src/lib/ui/themeswitcher.ts new file mode 100644 index 0000000..6f68974 --- /dev/null +++ b/backend/web/src/lib/ui/themeswitcher.ts @@ -0,0 +1,17 @@ +export const applyTheme = () => { + document.documentElement.classList.toggle( + "dark", + localStorage.theme === "dark" || + (!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches), + ); +} + +export const themeToLocalStorage = (theme: string) => { + if (theme=='light') { + localStorage.setItem('theme','light') + } else if (theme=='dark') { + localStorage.setItem('theme','dark') + } else { + localStorage.removeItem('theme') + } +} diff --git a/backend/web/src/lib/utilities/validators.ts b/backend/web/src/lib/utilities/validators.ts new file mode 100644 index 0000000..ee66096 --- /dev/null +++ b/backend/web/src/lib/utilities/validators.ts @@ -0,0 +1,5 @@ +const emailRegex: RegExp = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; + +export function validateEmail(input: string): boolean { + return emailRegex.test(input); +} diff --git a/backend/web/src/routes/(authenticated)/(chat)/+page.svelte b/backend/web/src/routes/(authenticated)/(chat)/+page.svelte new file mode 100644 index 0000000..b872b49 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/(chat)/+page.svelte @@ -0,0 +1,7 @@ + + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur? + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur? + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur? + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur? + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur? + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur? diff --git a/backend/web/src/routes/(authenticated)/(chat)/+page.ts b/backend/web/src/routes/(authenticated)/(chat)/+page.ts new file mode 100644 index 0000000..ef26b91 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/(chat)/+page.ts @@ -0,0 +1,3 @@ +export function load() { + return { title: 'Conversation' }; +} diff --git a/backend/web/src/routes/(authenticated)/+layout.svelte b/backend/web/src/routes/(authenticated)/+layout.svelte new file mode 100644 index 0000000..a4444c7 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/+layout.svelte @@ -0,0 +1,80 @@ + + + + +
+ +
+
+
+

+ {page.data.title} + {#if page.data.back} + + {/if} +

+
+
+ {@render children()} +
+
+
+
diff --git a/backend/web/src/routes/(authenticated)/+layout.ts b/backend/web/src/routes/(authenticated)/+layout.ts new file mode 100644 index 0000000..fba6264 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/+layout.ts @@ -0,0 +1,8 @@ +import { userApi } from "$lib/api/endpoints/user" +import type { LayoutLoad } from './$types'; + +export const load: LayoutLoad = async () => { + return { + me: await userApi.me() + } +} diff --git a/backend/web/src/routes/(authenticated)/history/+page.svelte b/backend/web/src/routes/(authenticated)/history/+page.svelte new file mode 100644 index 0000000..ddb27ba --- /dev/null +++ b/backend/web/src/routes/(authenticated)/history/+page.svelte @@ -0,0 +1,6 @@ + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur? + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur? + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur? + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur? + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur? + Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur? diff --git a/backend/web/src/routes/(authenticated)/history/+page.ts b/backend/web/src/routes/(authenticated)/history/+page.ts new file mode 100644 index 0000000..aa94f4d --- /dev/null +++ b/backend/web/src/routes/(authenticated)/history/+page.ts @@ -0,0 +1,3 @@ +export function load() { + return { title: 'Historique' }; +} diff --git a/backend/web/src/routes/(authenticated)/kb/+page.svelte b/backend/web/src/routes/(authenticated)/kb/+page.svelte new file mode 100644 index 0000000..e69de29 diff --git a/backend/web/src/routes/(authenticated)/kb/+page.ts b/backend/web/src/routes/(authenticated)/kb/+page.ts new file mode 100644 index 0000000..d7eb824 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/kb/+page.ts @@ -0,0 +1,3 @@ +export function load() { + return { title: 'Base de connaissance' }; +} diff --git a/backend/web/src/routes/(authenticated)/profile/+page.svelte b/backend/web/src/routes/(authenticated)/profile/+page.svelte new file mode 100644 index 0000000..1b416e4 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/profile/+page.svelte @@ -0,0 +1,109 @@ + + +
+

Mon compte

+ +
{errors.clear()}}> + + + + + +
+
+ + + +
+ +
+ + + +
+
+ +
+
+ + + +
+ +
+ + + +
+
+ + + + + +
+ +
+

Canaux de communication

+
diff --git a/backend/web/src/routes/(authenticated)/profile/+page.ts b/backend/web/src/routes/(authenticated)/profile/+page.ts new file mode 100644 index 0000000..e60d439 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/profile/+page.ts @@ -0,0 +1,9 @@ +import { userApi } from "$lib/api/endpoints/user" +import type { PageLoad } from './$types'; + +export const load: PageLoad = async () => { + return { + title: 'Profil', + me: await userApi.me() + } +} diff --git a/backend/web/src/routes/(authenticated)/settings/+page.svelte b/backend/web/src/routes/(authenticated)/settings/+page.svelte new file mode 100644 index 0000000..019ad26 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/+page.svelte @@ -0,0 +1,58 @@ + diff --git a/backend/web/src/routes/(authenticated)/settings/+page.ts b/backend/web/src/routes/(authenticated)/settings/+page.ts new file mode 100644 index 0000000..d52f5be --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/+page.ts @@ -0,0 +1,3 @@ +export function load() { + return { title: 'Paramétrage', theme: "settings" }; +} diff --git a/backend/web/src/routes/(authenticated)/settings/agents/+page.svelte b/backend/web/src/routes/(authenticated)/settings/agents/+page.svelte new file mode 100644 index 0000000..b746249 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/agents/+page.svelte @@ -0,0 +1 @@ +
Modèles
diff --git a/backend/web/src/routes/(authenticated)/settings/agents/+page.ts b/backend/web/src/routes/(authenticated)/settings/agents/+page.ts new file mode 100644 index 0000000..5536862 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/agents/+page.ts @@ -0,0 +1,7 @@ +export function load() { + return { + title: 'Paramétrage : Agents', + back: "/settings", + theme: "settings" + }; +} diff --git a/backend/web/src/routes/(authenticated)/settings/channels/+page.svelte b/backend/web/src/routes/(authenticated)/settings/channels/+page.svelte new file mode 100644 index 0000000..b746249 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/channels/+page.svelte @@ -0,0 +1 @@ +
Modèles
diff --git a/backend/web/src/routes/(authenticated)/settings/channels/+page.ts b/backend/web/src/routes/(authenticated)/settings/channels/+page.ts new file mode 100644 index 0000000..8ebbac3 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/channels/+page.ts @@ -0,0 +1,7 @@ +export function load() { + return { + title: 'Paramétrage : Canaux de communication', + back: "/settings", + theme: "settings" + }; +} diff --git a/backend/web/src/routes/(authenticated)/settings/kb/+page.svelte b/backend/web/src/routes/(authenticated)/settings/kb/+page.svelte new file mode 100644 index 0000000..b746249 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/kb/+page.svelte @@ -0,0 +1 @@ +
Modèles
diff --git a/backend/web/src/routes/(authenticated)/settings/kb/+page.ts b/backend/web/src/routes/(authenticated)/settings/kb/+page.ts new file mode 100644 index 0000000..48d5c8e --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/kb/+page.ts @@ -0,0 +1,7 @@ +export function load() { + return { + title: 'Paramétrage : Base de connaissance', + back: "/settings", + theme: "settings" + }; +} diff --git a/backend/web/src/routes/(authenticated)/settings/memory/+page.svelte b/backend/web/src/routes/(authenticated)/settings/memory/+page.svelte new file mode 100644 index 0000000..b746249 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/memory/+page.svelte @@ -0,0 +1 @@ +
Modèles
diff --git a/backend/web/src/routes/(authenticated)/settings/memory/+page.ts b/backend/web/src/routes/(authenticated)/settings/memory/+page.ts new file mode 100644 index 0000000..008433c --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/memory/+page.ts @@ -0,0 +1,7 @@ +export function load() { + return { + title: 'Paramétrage : Mémoire', + back: "/settings", + theme: "settings" + }; +} diff --git a/backend/web/src/routes/(authenticated)/settings/models/+page.svelte b/backend/web/src/routes/(authenticated)/settings/models/+page.svelte new file mode 100644 index 0000000..b746249 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/models/+page.svelte @@ -0,0 +1 @@ +
Modèles
diff --git a/backend/web/src/routes/(authenticated)/settings/models/+page.ts b/backend/web/src/routes/(authenticated)/settings/models/+page.ts new file mode 100644 index 0000000..f52d97d --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/models/+page.ts @@ -0,0 +1,7 @@ +export function load() { + return { + title: 'Paramétrage : Modèles', + back: "/settings", + theme: "settings" + }; +} diff --git a/backend/web/src/routes/(authenticated)/settings/skills/+page.svelte b/backend/web/src/routes/(authenticated)/settings/skills/+page.svelte new file mode 100644 index 0000000..b746249 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/skills/+page.svelte @@ -0,0 +1 @@ +
Modèles
diff --git a/backend/web/src/routes/(authenticated)/settings/skills/+page.ts b/backend/web/src/routes/(authenticated)/settings/skills/+page.ts new file mode 100644 index 0000000..88e3e3b --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/skills/+page.ts @@ -0,0 +1,7 @@ +export function load() { + return { + title: 'Paramétrage : Skills', + back: "/settings", + theme: "settings" + }; +} diff --git a/backend/web/src/routes/(authenticated)/settings/tools/+page.svelte b/backend/web/src/routes/(authenticated)/settings/tools/+page.svelte new file mode 100644 index 0000000..b746249 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/tools/+page.svelte @@ -0,0 +1 @@ +
Modèles
diff --git a/backend/web/src/routes/(authenticated)/settings/tools/+page.ts b/backend/web/src/routes/(authenticated)/settings/tools/+page.ts new file mode 100644 index 0000000..43d1ab8 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/tools/+page.ts @@ -0,0 +1,7 @@ +export function load() { + return { + title: 'Paramétrage : Outils', + back: "/settings", + theme: "settings" + }; +} diff --git a/backend/web/src/routes/(authenticated)/settings/users/+page.svelte b/backend/web/src/routes/(authenticated)/settings/users/+page.svelte new file mode 100644 index 0000000..b746249 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/users/+page.svelte @@ -0,0 +1 @@ +
Modèles
diff --git a/backend/web/src/routes/(authenticated)/settings/users/+page.ts b/backend/web/src/routes/(authenticated)/settings/users/+page.ts new file mode 100644 index 0000000..adc67ed --- /dev/null +++ b/backend/web/src/routes/(authenticated)/settings/users/+page.ts @@ -0,0 +1,7 @@ +export function load() { + return { + title: 'Paramétrage : Utilisateurs', + back: "/settings", + theme: "settings" + }; +} diff --git a/backend/web/src/routes/(authenticated)/tasks/+page.svelte b/backend/web/src/routes/(authenticated)/tasks/+page.svelte new file mode 100644 index 0000000..a2c8953 --- /dev/null +++ b/backend/web/src/routes/(authenticated)/tasks/+page.svelte @@ -0,0 +1,3 @@ +
+ Tâches +
diff --git a/backend/web/src/routes/(authenticated)/tasks/+page.ts b/backend/web/src/routes/(authenticated)/tasks/+page.ts new file mode 100644 index 0000000..e06c36e --- /dev/null +++ b/backend/web/src/routes/(authenticated)/tasks/+page.ts @@ -0,0 +1,3 @@ +export function load() { + return { title: 'Tâches' }; +} diff --git a/backend/web/src/routes/(public)/login/+page.svelte b/backend/web/src/routes/(public)/login/+page.svelte new file mode 100644 index 0000000..ddca439 --- /dev/null +++ b/backend/web/src/routes/(public)/login/+page.svelte @@ -0,0 +1,105 @@ + + +
+
+ logo +

Identifiez-vous ...

+ {#if !credentials.validemail} +
+ +
+ + +
+
+ + + + + {:else} +
+
+ +
+
+ + +
+ {credentials.validemail=false}}>← Retour +
+ {/if} + + +
+ +
+ + + + +
+ +
+
diff --git a/backend/web/src/routes/(public)/register/+page.svelte b/backend/web/src/routes/(public)/register/+page.svelte new file mode 100644 index 0000000..8867e36 --- /dev/null +++ b/backend/web/src/routes/(public)/register/+page.svelte @@ -0,0 +1,120 @@ + + +
+
+ logo +

Inscription

+ +
{errors.clear()}}> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
diff --git a/backend/web/src/routes/+layout.js b/backend/web/src/routes/+layout.js new file mode 100644 index 0000000..83addb7 --- /dev/null +++ b/backend/web/src/routes/+layout.js @@ -0,0 +1,2 @@ +export const ssr = false; +export const prerender = false; diff --git a/backend/web/src/routes/+layout.svelte b/backend/web/src/routes/+layout.svelte new file mode 100644 index 0000000..003e38e --- /dev/null +++ b/backend/web/src/routes/+layout.svelte @@ -0,0 +1,18 @@ + + + + Lasssistanoque + + + + +{@render children()} diff --git a/backend/web/src/routes/layout.css b/backend/web/src/routes/layout.css new file mode 100644 index 0000000..73d2e33 --- /dev/null +++ b/backend/web/src/routes/layout.css @@ -0,0 +1,107 @@ +@import 'tailwindcss'; +@plugin '@tailwindcss/forms'; +@plugin '@tailwindcss/typography'; + +@custom-variant dark (&:where(.dark, .dark *)); + +html { + @apply h-full; +} +body { + @apply h-full bg-stone-100 text-stone-900 dark:bg-stone-900 dark:text-stone-200; +} + +label { + @apply text-xs text-stone-600 uppercase dark:text-stone-400; +} +hr { + @apply border-stone-200 dark:border-stone-800; +} +h2 { + @apply mb-4 font-bold; +} + +.textinput { + @apply w-full rounded bg-white p-1 text-stone-900 dark:bg-stone-700 dark:text-stone-100; +} +.pointer { + @apply cursor-pointer; +} +.bt { + @apply cursor-pointer rounded bg-stone-200 px-4 py-2 hover:bg-stone-300 dark:bg-stone-800 dark:hover:bg-stone-700; +} +.menuitem { + @apply text-stone-800 text-stone-950 dark:text-stone-300 hover:dark:text-stone-50; +} + +.header { + @apply p-2 text-lg; + + h1 { + @apply rounded bg-stone-200 px-2 font-bold text-sky-600 dark:bg-stone-800 dark:text-sky-200; + } + + &.settings { + h1 { + @apply rounded border-none bg-sky-200 px-2 text-sky-700 dark:bg-sky-950 dark:text-sky-300; + } + } +} + +.public h1 { + @apply mb-4 text-3xl font-bold; +} +.profile a, +.public a { + @apply text-sky-500; +} + +.formgroup { + @apply rounded border border-stone-300 bg-stone-100 p-2 dark:border-stone-700 dark:bg-stone-900; +} + +#outer { + @apply flex h-full flex-row; +} +#main { + @apply flex w-full flex-col; +} +#sidebar { + @apply min-w-64 border-r border-r-stone-200 transition-all duration-300 dark:border-stone-800; +} + +#content { + @apply p-2; +} +#hamburgerDesktop, +#hamburgerMobile { + @apply hidden; +} + +@media (width >= 640px) { + #hamburgerDesktop { + @apply inline; + } + .desktopMenuClosed { + #sidebar { + @apply w-10 min-w-10; + } + } +} + +@media (width < 640px) { + #hamburgerMobile { + @apply inline; + } + #main { + @apply ml-10; + } + #sidebar { + @apply fixed left-0 h-full w-full bg-stone-100 dark:bg-stone-900; + } + .mobileMenuClosed { + #sidebar { + @apply fixed w-10 min-w-10; + } + } +} diff --git a/backend/web/static/assets/fontello/LICENSE.txt b/backend/web/static/assets/fontello/LICENSE.txt new file mode 100644 index 0000000..8fa3da3 --- /dev/null +++ b/backend/web/static/assets/fontello/LICENSE.txt @@ -0,0 +1,12 @@ +Font license info + + +## Font Awesome + + Copyright (C) 2016 by Dave Gandy + + Author: Dave Gandy + License: SIL () + Homepage: http://fortawesome.github.com/Font-Awesome/ + + diff --git a/backend/web/static/assets/fontello/README.txt b/backend/web/static/assets/fontello/README.txt new file mode 100644 index 0000000..d870892 --- /dev/null +++ b/backend/web/static/assets/fontello/README.txt @@ -0,0 +1,75 @@ +This webfont is generated by https://fontello.com open source project. + + +================================================================================ +Please, note, that you should obey original font licenses, used to make this +webfont pack. Details available in LICENSE.txt file. + +- Usually, it's enough to publish content of LICENSE.txt file somewhere on your + site in "About" section. + +- If your project is open-source, usually, it will be ok to make LICENSE.txt + file publicly available in your repository. + +- Fonts, used in Fontello, don't require a clickable link on your site. + But any kind of additional authors crediting is welcome. +================================================================================ + + +Comments on archive content +--------------------------- + +- /font/* - fonts in different formats + +- /css/* - different kinds of css, for all situations. Should be ok with + twitter bootstrap. Also, you can skip style and assign icon classes + directly to text elements, if you don't mind about IE7. + +- demo.html - demo file, to show your webfont content + +- LICENSE.txt - license info about source fonts, used to build your one. + +- config.json - keeps your settings. You can import it back into fontello + anytime, to continue your work + + +Why so many CSS files ? +----------------------- + +Because we like to fit all your needs :) + +- basic file, .css - is usually enough, it contains @font-face + and character code definitions + +- *-ie7.css - if you need IE7 support, but still don't wish to put char codes + directly into html + +- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face + rules, but still wish to benefit from css generation. That can be very + convenient for automated asset build systems. When you need to update font - + no need to manually edit files, just override old version with archive + content. See fontello source code for examples. + +- *-embedded.css - basic css file, but with embedded WOFF font, to avoid + CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain. + We strongly recommend to resolve this issue by `Access-Control-Allow-Origin` + server headers. But if you ok with dirty hack - this file is for you. Note, + that data url moved to separate @font-face to avoid problems with + + + + + + + + + +
+

fontello font demo

+ +
+
+
+
+ icon-chat0xe800 +
+
+ icon-users0xe801 +
+
+ icon-wrench0xe802 +
+
+ icon-cog0xe803 +
+
+
+
+ icon-user0xe804 +
+
+ icon-edit0xe805 +
+
+ icon-right-big0xe806 +
+
+ icon-logout0xe807 +
+
+
+
+ icon-left-big0xe808 +
+
+ icon-facebook0xf09a +
+
+ icon-tasks0xf0ae +
+
+ icon-menu0xf0c9 +
+
+
+
+ icon-github0xf113 +
+
+ icon-apple0xf179 +
+
+ icon-graduation-cap0xf19d +
+
+ icon-google0xf1a0 +
+
+
+
+ icon-paper-plane0xf1d8 +
+
+ icon-history0xf1da +
+
+
+ + + diff --git a/backend/web/static/assets/fontello/font/fontello.eot b/backend/web/static/assets/fontello/font/fontello.eot new file mode 100644 index 0000000000000000000000000000000000000000..57c964fbd3f8cf5349e55cc0efa2323a3cba5bef GIT binary patch literal 10680 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 literal 0 HcmV?d00001 diff --git a/backend/web/static/assets/fontello/font/fontello.svg b/backend/web/static/assets/fontello/font/fontello.svg new file mode 100644 index 0000000..848442b --- /dev/null +++ b/backend/web/static/assets/fontello/font/fontello.svg @@ -0,0 +1,46 @@ + + + +Copyright (C) 2026 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/web/static/assets/fontello/font/fontello.ttf b/backend/web/static/assets/fontello/font/fontello.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9a3ab49349f7d35b05bf436149c87d954e4f942e GIT binary patch literal 10512 zcmd^Edu&_Rc|Yge7fDeRC6br2DAAX?A|;Ct$<)h{WSJ)QvL)NHEZd}$%B1zQEnA92 zySA6QUK6K@n`z+G6)vsNG1p&U{CSME^M!MBfAy7yAjSsx`>U1Zwc_oTFJipy z8s^_yS)E(C`i;JCU}+KK-zHpk2Wck*gbfalPZ8Hrp?IFu5fOO)@cFGUT{^u`Ahz-h z#T=idz)&J@(hI*zKTjl_e}#P;xaX{%{u9|r8L&hWfc=J7t=;faTON^bQj*lIJj1VF7{2>$VTR^ug;NeDAjB z_T}4Oxqb8Y4{rbc-MfUWlaI$^<%18!UXhRdaUK~?5W$&D6llYa^DBsxR1z0_%T20D z4T!jg{=Yv?QvvH`H9#vIG>5R+pmmBm?*2|51 z>Uz1sCa|;BxOaT;y47GO^1=7428)r~9;?B2!NyNv#iL9-WchMbar>`Vckm40P9K6=FS0{3{t;WR)Tap zRksUX#YLMV_>-|n?MQa_41lURNQIg+Z=P*W4j=UenCzsCih@AvC6`MaI!MpF`Tm<{ z-k%thoVI{nlth6thf?o7Hk@q#%@wWs#LMZSaauV#MPE7a)VO`8UlJV(6-6q@*d!>` z*0@`WnS)P_k3aPfnTyRX)e))?B-ufk%|S)Uztg^7NVau8y+7L8e2K_+@7_Hlwh5Ea zT$1#WL2`_oB+IF#LoUcp$E&Hm!hW4p*eb5Osg2pLS3zy;xL>> z_;;0v;!`eYmk2p@0x48d==AXPCr;#!O-)XW?cX<&N$(lxePo-@yRAp}gxodq_9!*= z+0)qp{q-b!WS^IMWj)jwflehL*#Jz|-IEN8eoQn%?@1Lvf(|fM^2*J6q`AARldE`u z`jgG~NXAa|j>S`SNNi1qB4L3&Ihon09h{(|)2&5%LvmAMbYghh4!5mwS44BW=$${G zx;TY@^x3P%HTJ}tS7>G+G4{xbxDXD923y3Tk@EbsFc^#dnOa9HeeQ!BkERbEOb2(R zcXdY8+WI=Cy6YTFjdbox*RvP;_=Zy(KgwNYSH5vce(G@;l z7loTb1){}E5~L&59)VZ1G}j1BBos;bv5mBLpky;!fuYilGq5bf!V zxLA;OhpF7yMkAd)G)Tjy4|0w5Bvrrat)f1EH*}d)-}eT+thTO}&Tl;F>s9-FKKg_@ zMSrU@@R>u4FTS{_4R5pCzrMs;$3j((2A9fev>LJQzc!xqdUt#KRQg2E)IX}>v1$6^ zd!J`sw_Kx4f2yBti+d5)R@{|@6Q(?8$WSUhmmA-Ui>eR)LONRlZn!l>l0@mcOo87N zM?eq?401Ad@v%pb9Nsq?ZEe&%HHustrJa#R7gdwpVV_s7g3oY)c!)t-9+GmDA}A4V zirmPXA6(w7Xqslg~*r-EVw7L9Yi`I6aw$5%7 zs-IAtw5r~JNUBmsy`pHhh#hp=@{CJ--W~J>lCn$oO;D-7(l%c2b|?#WXTKz;f|5&i zCadZLRn)1NwA<>mxZ+g26I)0t`XniX3}TYjxhc=^JolB@yMmMWNRWh6jR;ujx{T;}%u3vojs6=a}axWNB^Iw-YsD{lx*UbFuEvvRpyN+o14v%7z1Vn-wxP(9Fu z?6u=Y3HLNBz78Laz@JsPs0Xgi6JJ*~A~uxt2Pr0+BS6VYwO93rlHI#$CkR!+PxUUU zG{bk{!e078>S(Hq`t0_1>@{dj)0vI-%=C1IzNZK6f)cPfDxDkc;ZEA!MBfW{N=>%f zo|iVBeTgl1ywu^2xsSU4Wbe_v+q>zDn_Fyr=Zv*MdYZaKk6dpPh0bt!k6{Hn*ysy4 zH=eyo6P+)0R#hE!$B>iA-DiX@_V4hxrc}s^WniBsj8b+SVNFjGTzH4naKtOhb+}TM za=O|>Avc8U_JHj|w&f@NGCMl9m?eXGZI!d}tcwO_|Az$rT%aT~V+8)TOGfpQ`m0w5=k+ zY9yCkq%h?(nQ4cu!Y)@L*K|fUE@7d_Y&7Po*m%$3t$Imyy}FCkgmfj|l<+am{i zG?@0_mp72~X@28u6*J;jQR2WJrURNc1+u7li&zd;MMFtd$Tc-=eDY>S zumtq|GJUq8iB7`;FT()Q@&rBW^X*W3)t6f~c_}eJY7H;H-@t|pYarV{%}Ym=5epI& z!su~yl${iz9Ck>r#^VWb^-~|T+(0`Ny&8XAT&o>P=0D!v__F%^A3Xnju`nr&{aQ=Q znO8Ql^!Hx5vbak4#>hSE$UOpT(h3qFQB*l6Q;)@{RMANtVm%e?UYsqCV^$I?qy@Kt$)HdR&ieBv+4EH>k*Mnh7rLq!IEuP4P&r2B)`wnBuy>G=x05!~lj>|i zb!daIl;K`RR7fIX0bwg3CJ@&2I4?sG6ODv|QFz<^k(s5~oEz)sm`FK-0bDZgr;1IvPIv(ex8gB?puY}zB-BunESqCDd2nCfJ|*^#^ULtE@=Gd6NOHVQm84r@WxEAVR7uew+Q?=2GQC|n5= z(rFl%2TE4IYL=>dcy{gX;e~1#mz|^vKXkDCtKWS!&m1)63_96j<((IpENpzCHYn9tZM9bv5lEu}fU2X1pp?@+qt$@X|Bd_PtyE0rJn zCVXo{y;7}=iFYI(GZgQAC1Diu>7+Z=QG+P=;3Wg0&%dEC;WTI@d`dw!gz1u@~G-XJw&L8pI6zo5*2`*QYoifJ~y^0i~Xd+Ea9 z{OFZY{A-`=Y;jBfLBAYsy!@S|!PT3u-&`Ghd?mC0%5PlRUmxj?`8IhxBm5hDv7X;u zKCj0i5>^9En`~}*1q%99LEaXnsv?-)(?(4n;)TDRHYaEgiV5Kd9`Sjh%I1)jJD+t_ zD^i7%(tp15+CO>)k8soO6~-(5AO5b}E(wdTR5G!~`KRpQoev+i#T~3xD#t|*`r1i` z$%)kQRw_sh)F!0DOtkfNFj>J3VuR<~#A`%E`KnySmBuRy6dFXZNl>W*r%_~np%8{p zW87mHIgGd09bJCi-(=^n!d@3c-C$KfD(XM3%>+Z5DSHjSN4C=e;De062=SL5US;%A zOz@IK$U&jU@~`)c(zskL?zougU7ToT34FMmZ8=cw@&6QgHC8>^|E0;}u+7GAJ8Y;$ z9JWt6lqS?9(?AYR?vq{O0aV&uy@~NN#WUlHmhb_095qR;r)Kn#fx+VM?EfiWq}v>S zhMorjZ+~;((+el7`u~$u3G3X1|N7(F4O3A?O*WcI;bj)8iWtbt3uyM_dk0Cx{k zjezRBNm(#Cm<6T9`x?23(~`gzv5IrKYI3C^5#7(P27U0kGuUSa)Cp57MPPeT;zBFL`;Nw9tE+GFSB~XRhsGT}!1$EL&ybo1TH?5{M)Pr(NoLMXsr3-7Y zw*1M}x$`rN!p!o5$Pwb)?CGN2^sD%((+l#_^1||kqHSqzzR1V6`NGWHspaLfQn9dh zc1=7tcm9IBaJsm7;gnQZSy`HMEvy!1FBFRKqWDZ5SpYX!(4) z#JrhwDJ*0RmYKSw8BQHQrZ8)W6PIo=#;}bMnyU|S>@Am%rt39;dis`!dN8LOWFkA4 zyQNZ288^h3Aw&&dCd1cVbjyF0G8zAhHR=En$TuT%Bi%*C%L!*i+%oUko?e$ zA+?4unbB@&H*i*|T?#`(hqL*KKw&bM)pMboW~7c}F&E%^DYFtcl$c@9L~kJ!Os(56 z)YCfLMNbzDc52?BGhoC}TH}U2rg3gv5KAPdKmvYK`5Y(751QOMVz=xrk{L?3hVD5| zMeKe@a$394C|Jlq^t?87LoaZnn#v{tZV*EYfXPiRVOqT~XdO}ckmW`bR$=iy(Y7vf zasSuTZ&W&oFa#3?^iZx9PFxi$F*an(76#*nI|dOn&8W)k=aK<{g$y?zO=9FW?NyD9 z+@?}A=wJqn8`YV-b|bGD)lgg9sELhDWlQ4hV6MrioYODG4Nq+BaCYp7g$#s%_n3HZ ztVC)uN3*4xnv6jUX`?#ILk_N$E>-a#H+~GN!WKe!B3t5d2z8}zz`{7z-5S!dY!ik* z@Oi!jk<4dvkYoh>j{tkWu^wW=5+NQPN`^xX+`_jA(;s{>QX*_G`G!Tl;> zxqMp7|1rMg<3CV5B%Mxk4R|p}3ni~DYJ4slXoP#KkkJ>78~#{{^1c@O=KZ! zg%Nn{#|ETc*roHt{&Okdj&UQoY2uPg9^xKn>})Mb)HjqxQsh?b*rJ|?(R9YNE|c>v z>}KsV^wBhd?DMhQay(JrG;giJ0ex4gllr)<-OvXF_}Ddh1WRF8+~|oV{QYrb*DoT4 zW6yy65txXmVJ)GJ@RR`6?z?egL?1y4%HrZf*2Rsqi{kqgG~A2ar5b*aiAbkmldR+< zX`><&ox731%W3}&?AdoenU=8jGh{uzNv#=qo>NkXvu}u+qy^p(BT`*1%`>e7NgL;b z1ARDe$guYP;flzjQR`L`Gx=HFkZ`FY*@>A#0B}Bs{P5tK0$4--*M|$c0y<6@hMefk zQ?TF190EpoN|upCUO_F?K??P3}6qn?-7 z%hp2Xj~jb7PcyY&Hdme(I1h@vY2p;}M}li{*zjkv69L?*T7NE4YNuYr?cV!lCj%4r z&8F|0-CVnMzXw-jVn%OtE5YWX%>xHxMql&>+>iU%4Mh6Gc!NO`Mmty>GDYTY9I-TC zK!KLFMCb0TBhnIxJWHVASjmCAhI_y1`TskY9{D&2`@eWG*Ei2&{ravzXp6sua%Db8 zkbrxmn_3ygs4p7gHsg9JOLI>J`=A1!751o35aFJL(TynI{}B8bwxeE;(F2l!jRR2gq1Y`#h5<|fpd2_HyG2dRBmfh0gwu>*YKqfv;3%iz zz%fq4f#b0^kPS0{vVd^61IoqTpcd`~APe^>r=xuKF-~VfpWt*RG|lNu=p;XL2xNJF zCI<@qOb(plXL4YM(~JU`q;v}p3hq0=T`96Dq2#i6q%UmRL8 z`Qp$ylP?aPH~HewGIZR3&wwlD$Vg%0aSPlFaFr{alNo7@)^OJXk7RU*1SRg0( zTAqQ@WOc=sT6YjEHI%?SF454Y_(&mL8CwKw;%Sn`z^m*KM)+^sii7085 zf2~&UxUc^v{IJ5rSkO1|&4dh=n&>l!QT{)Z<>T4GQVSoyWg`}X4CVr*W{&!n?HWGe iq@J0XGAS{^pAvDkzD4g|H^g7Tbv*cnG%J(A!T$k-T6p^a literal 0 HcmV?d00001 diff --git a/backend/web/static/assets/fontello/font/fontello.woff b/backend/web/static/assets/fontello/font/fontello.woff new file mode 100644 index 0000000000000000000000000000000000000000..ca82c1c609d55ab2e1e20acbd466c6376fdec5f0 GIT binary patch literal 6568 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 TY`&2K(J3eZ=`^n~0D%7kW>riz literal 0 HcmV?d00001 diff --git a/backend/web/static/assets/fontello/font/fontello.woff2 b/backend/web/static/assets/fontello/font/fontello.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..33f1671b3f8beab2025a385c838640964db106af GIT binary patch literal 5580 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 literal 0 HcmV?d00001 diff --git a/backend/web/static/robots.txt b/backend/web/static/robots.txt new file mode 100644 index 0000000..b6dd667 --- /dev/null +++ b/backend/web/static/robots.txt @@ -0,0 +1,3 @@ +# allow crawling everything by default +User-agent: * +Disallow: diff --git a/backend/web/tsconfig.json b/backend/web/tsconfig.json new file mode 100644 index 0000000..2c2ed3c --- /dev/null +++ b/backend/web/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "rewriteRelativeImportExtensions": true, + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "moduleResolution": "bundler" + } + // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias + // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files + // + // To make changes to top-level options such as include and exclude, we recommend extending + // the generated config; see https://svelte.dev/docs/kit/configuration#typescript +} diff --git a/backend/web/vite.config.ts b/backend/web/vite.config.ts new file mode 100644 index 0000000..e27e4fa --- /dev/null +++ b/backend/web/vite.config.ts @@ -0,0 +1,30 @@ +import tailwindcss from '@tailwindcss/vite'; +import adapter from '@sveltejs/adapter-static'; +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + server: { + host: "0.0.0.0" + }, + plugins: [ + tailwindcss(), + sveltekit({ + compilerOptions: { + // Force runes mode for the project, except for libraries. Can be removed in svelte 6. + runes: ({ filename }) => filename.split(/[/\\]/).includes('node_modules') ? undefined : true + }, + + // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. + // If your environment is not supported, or you settled on a specific environment, switch out the adapter. + // See https://svelte.dev/docs/kit/adapters for more information about adapters. + adapter: adapter({ + pages: '../internal/http/web', + assets: '../internal/http/web', + fallback: 'index.html', // <-- vérifie que c'est bien là et pas oublié/mal placé + precompress: false, + strict: true + }), + }) + ] +});