From 7b66396050d71a58926d9554c37bcb3857a99e32 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 17 Jan 2026 01:48:34 +0500 Subject: [PATCH] react frontend --- frontend-react/.gitignore | 24 + frontend-react/README.md | 73 + frontend-react/components.json | 22 + frontend-react/eslint.config.js | 23 + frontend-react/index.html | 19 + frontend-react/package-lock.json | 4724 +++++++++++++++++ frontend-react/package.json | 49 + frontend-react/public/fonts/A_Waheed.otf | Bin 0 -> 65380 bytes frontend-react/public/fonts/Faruma.ttf | Bin 0 -> 49504 bytes frontend-react/public/fonts/MVWaheed.otf | Bin 0 -> 21576 bytes frontend-react/public/fonts/utheem.ttf | Bin 0 -> 70292 bytes frontend-react/public/vite.svg | 1 + frontend-react/src/App.tsx | 105 + frontend-react/src/assets/react.svg | 1 + frontend-react/src/components/TweetModal.tsx | 91 + .../src/components/layout/ErrorState.tsx | 15 + .../components/layout/LanguageSwitcher.tsx | 43 + .../src/components/layout/LoadingState.tsx | 17 + .../src/components/petition/AuthorCard.tsx | 30 + .../src/components/petition/PetitionBody.tsx | 44 + .../components/petition/PetitionHeader.tsx | 44 + .../components/signature/SignatureForm.tsx | 286 + .../src/components/signature/SignaturePad.tsx | 74 + frontend-react/src/components/ui/alert.tsx | 66 + frontend-react/src/components/ui/badge.tsx | 46 + frontend-react/src/components/ui/button.tsx | 62 + frontend-react/src/components/ui/card.tsx | 92 + frontend-react/src/components/ui/checkbox.tsx | 32 + frontend-react/src/components/ui/dialog.tsx | 141 + frontend-react/src/components/ui/input.tsx | 21 + frontend-react/src/components/ui/label.tsx | 22 + frontend-react/src/hooks/useLanguage.ts | 60 + frontend-react/src/hooks/usePetition.ts | 55 + frontend-react/src/index.css | 199 + frontend-react/src/lib/api.ts | 56 + frontend-react/src/lib/utils.ts | 6 + frontend-react/src/main.tsx | 10 + frontend-react/src/types/petition.ts | 24 + frontend-react/tsconfig.app.json | 34 + frontend-react/tsconfig.json | 13 + frontend-react/tsconfig.node.json | 26 + frontend-react/vite.config.ts | 22 + sample.Petition.md | 71 +- 43 files changed, 6708 insertions(+), 35 deletions(-) create mode 100644 frontend-react/.gitignore create mode 100644 frontend-react/README.md create mode 100644 frontend-react/components.json create mode 100644 frontend-react/eslint.config.js create mode 100644 frontend-react/index.html create mode 100644 frontend-react/package-lock.json create mode 100644 frontend-react/package.json create mode 100644 frontend-react/public/fonts/A_Waheed.otf create mode 100644 frontend-react/public/fonts/Faruma.ttf create mode 100644 frontend-react/public/fonts/MVWaheed.otf create mode 100644 frontend-react/public/fonts/utheem.ttf create mode 100644 frontend-react/public/vite.svg create mode 100644 frontend-react/src/App.tsx create mode 100644 frontend-react/src/assets/react.svg create mode 100644 frontend-react/src/components/TweetModal.tsx create mode 100644 frontend-react/src/components/layout/ErrorState.tsx create mode 100644 frontend-react/src/components/layout/LanguageSwitcher.tsx create mode 100644 frontend-react/src/components/layout/LoadingState.tsx create mode 100644 frontend-react/src/components/petition/AuthorCard.tsx create mode 100644 frontend-react/src/components/petition/PetitionBody.tsx create mode 100644 frontend-react/src/components/petition/PetitionHeader.tsx create mode 100644 frontend-react/src/components/signature/SignatureForm.tsx create mode 100644 frontend-react/src/components/signature/SignaturePad.tsx create mode 100644 frontend-react/src/components/ui/alert.tsx create mode 100644 frontend-react/src/components/ui/badge.tsx create mode 100644 frontend-react/src/components/ui/button.tsx create mode 100644 frontend-react/src/components/ui/card.tsx create mode 100644 frontend-react/src/components/ui/checkbox.tsx create mode 100644 frontend-react/src/components/ui/dialog.tsx create mode 100644 frontend-react/src/components/ui/input.tsx create mode 100644 frontend-react/src/components/ui/label.tsx create mode 100644 frontend-react/src/hooks/useLanguage.ts create mode 100644 frontend-react/src/hooks/usePetition.ts create mode 100644 frontend-react/src/index.css create mode 100644 frontend-react/src/lib/api.ts create mode 100644 frontend-react/src/lib/utils.ts create mode 100644 frontend-react/src/main.tsx create mode 100644 frontend-react/src/types/petition.ts create mode 100644 frontend-react/tsconfig.app.json create mode 100644 frontend-react/tsconfig.json create mode 100644 frontend-react/tsconfig.node.json create mode 100644 frontend-react/vite.config.ts diff --git a/frontend-react/.gitignore b/frontend-react/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/frontend-react/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/frontend-react/README.md b/frontend-react/README.md new file mode 100644 index 0000000..8c2d760 --- /dev/null +++ b/frontend-react/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(["dist"]), + { + files: ["**/*.{ts,tsx}"], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ["./tsconfig.node.json", "./tsconfig.app.json"], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]); +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from "eslint-plugin-react-x"; +import reactDom from "eslint-plugin-react-dom"; + +export default defineConfig([ + globalIgnores(["dist"]), + { + files: ["**/*.{ts,tsx}"], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs["recommended-typescript"], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ["./tsconfig.node.json", "./tsconfig.app.json"], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]); +``` diff --git a/frontend-react/components.json b/frontend-react/components.json new file mode 100644 index 0000000..2b0833f --- /dev/null +++ b/frontend-react/components.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/index.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "registries": {} +} diff --git a/frontend-react/eslint.config.js b/frontend-react/eslint.config.js new file mode 100644 index 0000000..75d3c46 --- /dev/null +++ b/frontend-react/eslint.config.js @@ -0,0 +1,23 @@ +import js from "@eslint/js"; +import globals from "globals"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import tseslint from "typescript-eslint"; +import { defineConfig, globalIgnores } from "eslint/config"; + +export default defineConfig([ + globalIgnores(["dist"]), + { + files: ["**/*.{ts,tsx}"], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]); diff --git a/frontend-react/index.html b/frontend-react/index.html new file mode 100644 index 0000000..d58c843 --- /dev/null +++ b/frontend-react/index.html @@ -0,0 +1,19 @@ + + + + + + + + + + frontend-react + + +
+ + + diff --git a/frontend-react/package-lock.json b/frontend-react/package-lock.json new file mode 100644 index 0000000..2ead694 --- /dev/null +++ b/frontend-react/package-lock.json @@ -0,0 +1,4724 @@ +{ + "name": "frontend-react", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend-react", + "version": "0.0.0", + "dependencies": { + "@marsidev/react-turnstile": "^1.4.1", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-slot": "^1.2.4", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "dompurify": "^3.3.1", + "lucide-react": "^0.562.0", + "marked": "^17.0.1", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-signature-canvas": "^1.1.0-alpha.2", + "tailwind-merge": "^3.4.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@tailwindcss/vite": "^4.1.18", + "@types/dompurify": "^3.0.5", + "@types/node": "^24.10.9", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@types/react-signature-canvas": "^1.0.7", + "@vitejs/plugin-react": "^5.1.1", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "prettier": "^3.8.0", + "tailwindcss": "^4.1.18", + "tw-animate-css": "^1.4.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", + "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", + "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", + "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", + "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "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.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.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/@marsidev/react-turnstile": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@marsidev/react-turnstile/-/react-turnstile-1.4.1.tgz", + "integrity": "sha512-1jE0IjvB8z+q1NFRs3149gXzXwIzXQWqQjn9fmAr13BiE3RYLWck5Me6flHYE90shW5L12Jkm6R1peS1OnA9oQ==", + "license": "MIT", + "peerDependencies": { + "react": "^17.0.2 || ^18.0.0 || ^19.0", + "react-dom": "^17.0.2 || ^18.0.0 || ^19.0" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", + "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", + "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", + "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", + "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", + "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", + "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", + "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", + "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", + "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", + "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", + "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", + "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", + "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", + "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", + "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", + "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", + "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", + "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", + "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", + "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", + "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", + "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", + "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", + "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", + "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", + "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", + "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", + "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-x64": "4.1.18", + "@tailwindcss/oxide-freebsd-x64": "4.1.18", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-x64-musl": "4.1.18", + "@tailwindcss/oxide-wasm32-wasi": "4.1.18", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", + "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", + "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", + "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", + "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", + "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", + "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", + "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", + "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", + "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", + "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", + "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.7.1", + "@emnapi/runtime": "^1.7.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.0", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", + "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", + "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.18.tgz", + "integrity": "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.18", + "@tailwindcss/oxide": "4.1.18", + "tailwindcss": "4.1.18" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/trusted-types": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "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.10.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz", + "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", + "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/react-signature-canvas": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/react-signature-canvas/-/react-signature-canvas-1.0.7.tgz", + "integrity": "sha512-0ulzaUvcIQ0HdNB5fHj+KE7ztWhlhYRsi65TdPIRj/t+FD5Rr8NJKBv4/xLViz7HsUh/tgqsoyKeARrm9+gPIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*", + "@types/signature_pad": "<3" + } + }, + "node_modules/@types/signature_pad": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@types/signature_pad/-/signature_pad-2.3.6.tgz", + "integrity": "sha512-v3j92gCQJoxomHhd+yaG4Vsf8tRS/XbzWKqDv85UsqjMGy4zhokuwKe4b6vhbgncKkh+thF+gpz6+fypTtnFqQ==", + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.0.tgz", + "integrity": "sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/type-utils": "8.53.0", + "@typescript-eslint/utils": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.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.53.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.0.tgz", + "integrity": "sha512-npiaib8XzbjtzS2N4HlqPvlpxpmZ14FjSJrteZpPxGUaYPlvhzlzUZ4mZyABo0EFrOWnvyd0Xxroq//hKhtAWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.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", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.0.tgz", + "integrity": "sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.53.0", + "@typescript-eslint/types": "^8.53.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.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.0.tgz", + "integrity": "sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.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.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.0.tgz", + "integrity": "sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==", + "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.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.0.tgz", + "integrity": "sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/utils": "8.53.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.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", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.0.tgz", + "integrity": "sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ==", + "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.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.0.tgz", + "integrity": "sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.53.0", + "@typescript-eslint/tsconfig-utils": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.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.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.0.tgz", + "integrity": "sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.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", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.0.tgz", + "integrity": "sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", + "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.5", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.53", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "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.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.15", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.15.tgz", + "integrity": "sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001764", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz", + "integrity": "sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "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/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "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/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/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/dompurify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", + "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.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", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "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/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/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/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/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.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "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/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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": "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/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/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "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/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/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.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "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/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "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/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/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "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.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "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-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "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-x64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "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-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "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-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "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/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/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.562.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz", + "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "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/marked": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/marked/-/marked-17.0.1.tgz", + "integrity": "sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "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/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "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.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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.8.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.0.tgz", + "integrity": "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "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/react": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.3" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT", + "peer": true + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-signature-canvas": { + "version": "1.1.0-alpha.2", + "resolved": "https://registry.npmjs.org/react-signature-canvas/-/react-signature-canvas-1.1.0-alpha.2.tgz", + "integrity": "sha512-tKUNk3Gmh04Ug4K8p5g8Is08BFUKvbXxi0PyetQ/f8OgCBzcx4vqNf9+OArY/TdNdfHtswXQNRwZD6tyELjkjQ==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.17.9", + "@types/signature_pad": "^2.3.0", + "signature_pad": "^2.3.2", + "trim-canvas": "^0.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/agilgur5" + }, + "peerDependencies": { + "@types/prop-types": "^15.7.3", + "@types/react": "0.14 - 19", + "prop-types": "^15.5.8", + "react": "0.14 - 19", + "react-dom": "0.14 - 19" + }, + "peerDependenciesMeta": { + "@types/prop-types": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", + "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.55.1", + "@rollup/rollup-android-arm64": "4.55.1", + "@rollup/rollup-darwin-arm64": "4.55.1", + "@rollup/rollup-darwin-x64": "4.55.1", + "@rollup/rollup-freebsd-arm64": "4.55.1", + "@rollup/rollup-freebsd-x64": "4.55.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", + "@rollup/rollup-linux-arm-musleabihf": "4.55.1", + "@rollup/rollup-linux-arm64-gnu": "4.55.1", + "@rollup/rollup-linux-arm64-musl": "4.55.1", + "@rollup/rollup-linux-loong64-gnu": "4.55.1", + "@rollup/rollup-linux-loong64-musl": "4.55.1", + "@rollup/rollup-linux-ppc64-gnu": "4.55.1", + "@rollup/rollup-linux-ppc64-musl": "4.55.1", + "@rollup/rollup-linux-riscv64-gnu": "4.55.1", + "@rollup/rollup-linux-riscv64-musl": "4.55.1", + "@rollup/rollup-linux-s390x-gnu": "4.55.1", + "@rollup/rollup-linux-x64-gnu": "4.55.1", + "@rollup/rollup-linux-x64-musl": "4.55.1", + "@rollup/rollup-openbsd-x64": "4.55.1", + "@rollup/rollup-openharmony-arm64": "4.55.1", + "@rollup/rollup-win32-arm64-msvc": "4.55.1", + "@rollup/rollup-win32-ia32-msvc": "4.55.1", + "@rollup/rollup-win32-x64-gnu": "4.55.1", + "@rollup/rollup-win32-x64-msvc": "4.55.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "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/signature_pad": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/signature_pad/-/signature_pad-2.3.2.tgz", + "integrity": "sha512-peYXLxOsIY6MES2TrRLDiNg2T++8gGbpP2yaC+6Ohtxr+a2dzoaqWosWDY9sWqTAAk6E/TyQO+LJw9zQwyu5kA==", + "license": "MIT" + }, + "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/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-canvas": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/trim-canvas/-/trim-canvas-0.1.2.tgz", + "integrity": "sha512-nd4Ga3iLFV94mdhW9JFMLpQbHUyCQuhFOD71PEAt1NjtMD5wbZctzhX8c3agHNybMR5zXD1XTGoIEWk995E6pQ==", + "license": "Apache-2.0" + }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "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==", + "license": "0BSD" + }, + "node_modules/tw-animate-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", + "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, + "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": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.0.tgz", + "integrity": "sha512-xHURCQNxZ1dsWn0sdOaOfCSQG0HKeqSj9OexIxrz6ypU6wHYOdX2I3D2b8s8wFSsSOYJb+6q283cLiLlkEsBYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.53.0", + "@typescript-eslint/parser": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/utils": "8.53.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", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "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/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "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", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.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 + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "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/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/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "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/zod": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/frontend-react/package.json b/frontend-react/package.json new file mode 100644 index 0000000..2b8b4bf --- /dev/null +++ b/frontend-react/package.json @@ -0,0 +1,49 @@ +{ + "name": "frontend-react", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "format": "prettier --write .", + "preview": "vite preview" + }, + "dependencies": { + "@marsidev/react-turnstile": "^1.4.1", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-slot": "^1.2.4", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "dompurify": "^3.3.1", + "lucide-react": "^0.562.0", + "marked": "^17.0.1", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-signature-canvas": "^1.1.0-alpha.2", + "tailwind-merge": "^3.4.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@tailwindcss/vite": "^4.1.18", + "@types/dompurify": "^3.0.5", + "@types/node": "^24.10.9", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@types/react-signature-canvas": "^1.0.7", + "@vitejs/plugin-react": "^5.1.1", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "prettier": "^3.8.0", + "tailwindcss": "^4.1.18", + "tw-animate-css": "^1.4.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + } +} diff --git a/frontend-react/public/fonts/A_Waheed.otf b/frontend-react/public/fonts/A_Waheed.otf new file mode 100644 index 0000000000000000000000000000000000000000..00e735c8f74ca253d971e40b4a6d4dc212e6dceb GIT binary patch literal 65380 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

(+|XD$%6Rst*+0S$f1S0m+8mxXND0lI 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 z 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 literal 0 HcmV?d00001 diff --git a/frontend-react/public/fonts/MVWaheed.otf b/frontend-react/public/fonts/MVWaheed.otf new file mode 100644 index 0000000000000000000000000000000000000000..406d36485c8e1db20ddbcb828bb7c5d03332d44e GIT binary patch literal 21576 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 MI%%4qK*G@0AHSb+9{>OV literal 0 HcmV?d00001 diff --git a/frontend-react/public/fonts/utheem.ttf b/frontend-react/public/fonts/utheem.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2f244dcb5448440c6ad0e56d39125074b14fd285 GIT binary patch literal 70292 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 z zlzC?b>~foiKQq0u&jXju>&+QQ{bSn)eToagS-wf&0`yT?OR1sJLv-p*EV@9{;zed@ z;ey~sL?Kq7Oj6dG35B_SV0vm#|8A)6&c!X3&K}Qq>*@nfaxDx3|02>VbO}Kd|t@^6?2w z;7H72O5dd`F)1oS@TH<4T-@E?W{~Jv(4-$YWl3IO``7m)Ke~45zn#a&;fGfg0NSEdna;tN)gNBBbw~f`I6Yvl z7veM^6>AXIg^60WVySy+8%?cVh!a)LW^%AFTT4>zRf!M_m6vzEJ6ghwn4fkpuazi2 z2pZN9(W=WIu9M&x?*hOtz;M}=KrvW6%`C0?fs6c(lSW82q4u47CU;EYW2<>uF!C(k zT1{yBD)WW6qN!aY^)5(}g}m5nOklhRS`EE@Po&u7q;(`U;s-I}oQv-X;IJnJdZZ>! z_8Rx(=T1s8i@T0a)t@=+XM%)R09_+CrBSxlM`xZrHvgFy=AKu?uTu6C4!n_13^`=1M^L(2=gd*M)DuoXPjs$Cf z-1pJ%OUtn7JVWBQ*r{BP0yjT1jV;ZKp_LodAWCWw74O&YeMT)8tF$vu6UgfB-j@<4 z!iaHP+kwSz8%w-FBOD%Q4M~GdZjHmsa$&T+(+elD&6%k=OS4czG6o{DQ2=^=#-nDE zB0cEDt@VfRgGQ*>_()Myu9BvWk}^L^H75Tz{T_XH-o+WLq1q*uYT4q_eMv@=E5G3(GIYOjSaQlHE>DvrvOa=EI3yTFWVqEjlbH2a!O zl`ICWK(kEYt9J!v8e$akr?$KecbwBK+yOP$j~#scFcMC{2l&e5EUE@?E!2aAvIjr+ ziBrd)n>%vwF#0mJd#`)bEk1r`CFu;F33uo#2|uhkg7E|FybUwrkgj9vzrSqf?S*eW zYQE&yMtA6Np-fcOoC#E8SvYxnJ;$9CrN)T}4x*w&(B?W57~DCA-o;qb-Z&f8;rZ9wmAQ3Gvoea+ zswsG%ATBDGXeHLY)Y@~CQBg&KPWkjwQ<#yNS>HBJmL?*;z|qp#$d~d`BHU8beES{d z;(eeq@{Li3K6){>*NPC5+KHbO&iov5B!+lCeSQmSk*bDTXFRTtLuH{3OSG zRZBsab{coBZmB7&0UCKWwZF1CncXM@JKBWo+C3#rt%)rpf4j8CH?%lA&$l?u$K;I; ztR!29Y64yCim$1U9YSSnla`X!PY&mQm1T*6CCf5{ekH@Q(7*Vf7q+Nw*Txl+IN7vs z3&!BvtgbO2zm*93p|LF^^+&e!56N*v*xTfK30|ETX(gO}j6IA-V)DjGx5H%t@7MW_w+^rrjP z-o2IvPyuewBDAdK0)v4U5MRpgDb9HQOhMdM|H1=&p@@rh`)O3jpB9Rn7po{?3{BOr z6&@VLX=+H_8BC^fZm!~6iSO9|KSbdv$aFotacoV0rf@x;&z7T~<(*{8%ob}QgatH5 zQ4DTs`6R?Sx~=MfbFi3{xsm{Ax)AS~1E&t0I^^e>gDEl}vYa7kRbzkaU-E?$xG9Gj zLf*_uyiYL&?8fOHnPCz!aj&cVebpl3prxjkmS9ct`FI_ECDfkr#jRN>L;^ zOIOnOYaG+n7AyH`6Vbu-^a?_}(a~ikLoiU5GZ1UkhvyhNzj!%FYB4L%Wy966e)0f; zPsxRXmXLP?`hgEEzI)-n3>JVCtt?hjM1qj;TxpR3(JVD==IG+SC4 zPY7`~AeXUJNJY4W?TbsfWS%YVG`Jb1HQLTym&sXbWJMgWpP3_wxPjjBj?&|ZmhY0_ zrjXGfSj|bV#zUQk0%pt|R8(hEa`bZOQQ%Vo0;R2l1_8VgUTRo;&ZM*skfV&g=B^Zh z#pnecA#Z2;POng6nH4-G`WhT36A@<5Dx+X$h>CQP;6buT_MEX(i~-{d4lE^uX8gt5 zb8V+Mi4c)c4|BXsi7Xvr&tQ$&u|IO6m`l-e4{0#*Aw z8>gB$j$`%7Phwu|RVi|9pKGJdQkIfiJg+IoK+}TA_2fxDTNGuCsSQoc`I20@3JpIx z7K=7spJbJ~R;U9Skn$qQLkyW%1a2i z_wA}r(MD#4f^tGt&hRt~ddFI;Ql^g#nLd*Ct_S|X;!S7%@gTWJmX_^LR_w+*R%CfC z((yGqT-MNi!y2=eYrEZ-W>4}q=bt3J`YMT{yUyM0B)6%a5WegvM)c(D3a*q{9WcHZB+Xw_v&W=LXG z7obrz52KEN#%GqASA!II1_mx2Z%zjZbMwOtnmMD+I^~uQu(@>P%C13p69&HGS|+c{ zD|>I@^7=C?KJMZ<*obVdR8^%e^iVi4XWMsgccwVz(Dv&MJGb%CBvBQ|Q6WC2SnqoD z)WVM;3`F*1C@@(zg+t$4BB-9Whu;-AkaFJ=KAcVHP5!@Z{@>`^dwo4tQKz)EnZ9S zR3=}ojs-@S>w$B(EWGc`gM%X{QDwd(khX`epFS&$SZ=5Bo7 zXnl0#Q|tOa8F6?fX5neh-I!M1GEXaPTl>@#PhtDqoP<3sU<+>s$sEYMXW-oPUs!y2 z@cjFXaD59=u*@Dq|{-bApmIMKFezzVbSJ^&& zYCZqQXPxSNoQJ$Q8y?&^J9pgSTSn+sX4d8!l>fk3-gr^Yldy=w;8AWR0X3wThBnFv zX)eC>Qp%W?SdDc&8_!|crh$As<(m#Zmg<`}nwm;l&X%adUos`XDc zdPA;23Rx6Zt}QiNB5!@Vvsw)UcX{WkwYJF#FIJyY!`0f1DTz)!aDLmsFAV(p)r;E( z|IXsrxhod8uDJ2i>e}6x|Fxr+UwT7z{hO-3zN%F{v;0i4m{ zA`W`MyICnOzKOtfcyuhx>sFuArQ#f$rh4l&q8^F+u$5)?sdJ8(s>gw=QM^A>VrOl_8XDG=S)xFufRCv5Im*+xs+2u1f7>|pH30TFxqzNUN6Dc57$x0>OD5erFo(AYG#<#H%_!~PvSO0{sHE{7bPe~FbpfG?uKk?x1vfMkGZHHtN zn!IDz4)i)0o5$lv$ycXz1zOdf9i_{(92U+&WE}r^O)tVhXlsrAyZoJ!v6LAE$H&1P z?g8NrlMnB?2Zs;PL6l4qg!4TQZ47TutL1G-dX9TRQO)Kdq&1R=%y~pnIpTb>1gT{{ zwA-GWMyRo3lwM^x3bf!+rBuwhEpallM!Vpre^eR{^MpgZd~@iFPd$6=*<-)*1YQAu z*uM{RsoIv?f0{#WH-SM&(j=G<8G`7^S`rTB zH_nb{WB2NDUcO3X$L;Xr)p?$dOCH>1TXG@Cdio+x8wk;0KNAF@x2MOxKrT z{iQ4SG&#x-yFRgBt@fo})9!W6GX|=w`E_geH&XsCWnXnu^*7VLZB$?Q{l9g{zd!Z2mw9*oE<0NN z{niWo_)hiC*6r1g_WgX-&%Yb{I@MqA`^oAp)vr`P-gxZ<{X}b|x~lIzw0V|$ zKEOy`ss2&l)z!7FKduH^@2q~h?~T<;>R0z&R=v6JXR0>!HphO5zc=vj7Owxht(Db3 zqm3Wu-xd73tomN{Bg=lMdUNaZ-R~@Wjp5CApKg7p`rYas)qC>$H@n~K`;qFM{JyX6 zmhQp6pRES^F6(}!^>X#bzIOrA-cjAz`f7L2vM*OZ)%VlgV|~|jH}qZ3sQ+H|hSq=U zKA-cibbqaNzWKMY8f?u}t6RIP>-*kZUDx_<_ltdRukLAmsgfwSaQ)f7pX_$3ceJi( zeX+Zz^_8mC`d+n+;~(z3p}MB^2i4_$H__J1)ylrL-N!k8sPD?|nbt3Nf2Z$l-BZiH z#u#4e{uamQTff)+RsKHjIQl-&{dns)s=n3})h(@`tL|%UtS)8zZ*P4U+W&U-_UgC0 MU*@kIuH?u61fWggQ~&?~ literal 0 HcmV?d00001 diff --git a/frontend-react/public/vite.svg b/frontend-react/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/frontend-react/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend-react/src/App.tsx b/frontend-react/src/App.tsx new file mode 100644 index 0000000..2747ce2 --- /dev/null +++ b/frontend-react/src/App.tsx @@ -0,0 +1,105 @@ +import { useState } from "react"; +import { usePetition } from "@/hooks/usePetition"; +import { useLanguage } from "@/hooks/useLanguage"; +import { submitSignature } from "@/lib/api"; +import { LanguageSwitcher } from "@/components/layout/LanguageSwitcher"; +import { LoadingState } from "@/components/layout/LoadingState"; +import { ErrorState } from "@/components/layout/ErrorState"; +import { PetitionHeader } from "@/components/petition/PetitionHeader"; +import { AuthorCard } from "@/components/petition/AuthorCard"; +import { PetitionBody } from "@/components/petition/PetitionBody"; +import { SignatureForm } from "@/components/signature/SignatureForm"; +import { TweetModal } from "@/components/TweetModal"; + +function getPetitionIdFromUrl(): string | null { + const urlParams = new URLSearchParams(window.location.search); + const id = urlParams.get("id"); + + return id; +} + +function App() { + const petitionId = getPetitionIdFromUrl(); + const { petition, loading, error, refetch } = usePetition(petitionId); + const { language, setLanguage } = useLanguage(); + const [showTweetModal, setShowTweetModal] = useState(false); + + const handleSubmit = async (data: { + name: string; + idCard: string; + signature: string; + turnstileToken: string; + }) => { + if (!petitionId) throw new Error("No petition ID"); + + await submitSignature(petitionId, data); + + // Show tweet modal after successful submission + setShowTweetModal(true); + + // Refresh petition data to update signature count + setTimeout(() => { + refetch(); + }, 1000); + }; + + // No petition ID in URL + if (!petitionId) { + return ( +

+
+ +
+
+ ); + } + + return ( +
+
+ {loading ? ( +
+ +
+ ) : ( + <> + {error && } + + {petition && ( +
+ + + + + + + + + + + setShowTweetModal(false)} + petition={petition} + language={language} + /> +
+ )} + + )} +
+
+ ); +} + +export default App; diff --git a/frontend-react/src/assets/react.svg b/frontend-react/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/frontend-react/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend-react/src/components/TweetModal.tsx b/frontend-react/src/components/TweetModal.tsx new file mode 100644 index 0000000..8832ca1 --- /dev/null +++ b/frontend-react/src/components/TweetModal.tsx @@ -0,0 +1,91 @@ +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { Button } from "@/components/ui/button"; +import { X } from "lucide-react"; +import type { PetitionDetails, Language } from "@/types/petition"; + +// X/Twitter icon from Simple Icons +function XIcon({ className }: { className?: string }) { + return ( + + + + ); +} + +interface TweetModalProps { + open: boolean; + onClose: () => void; + petition: PetitionDetails; + language: Language; +} + +export function TweetModal({ + open, + onClose, + petition, + language, +}: TweetModalProps) { + const generateTweetText = () => { + const petitionName = + language === "dv" ? petition.nameDhiv : petition.nameEng; + const petitionUrl = `${window.location.origin}${window.location.pathname}?id=${petition.id}`; + + return `I just signed "${petitionName}"! \n\nAdd your signature: ${petitionUrl}`; + }; + + const openTwitterIntent = () => { + const tweetText = generateTweetText(); + const twitterUrl = `https://twitter.com/intent/tweet?text=${encodeURIComponent(tweetText)}`; + window.open(twitterUrl, "_blank"); + onClose(); + }; + + return ( + + + + + {language === "en" + ? "Share this petition!" + : "މި ޕެޓިޝަން ހިއްސާކުރައްވާ!"} + + + {language === "en" + ? "Help spread the word by posting about this petition." + : "މި ޕެޓިޝަންގައި ވީހާވެސް ގިނަ ބަޔަކު ބައިވެރިކުރުމަށްޓަކައި އެކްސްގައި ޕޯސްޓް ކޮށްދެއްވާ."} + + + +
+ + + +
+
+
+ ); +} diff --git a/frontend-react/src/components/layout/ErrorState.tsx b/frontend-react/src/components/layout/ErrorState.tsx new file mode 100644 index 0000000..224c4e9 --- /dev/null +++ b/frontend-react/src/components/layout/ErrorState.tsx @@ -0,0 +1,15 @@ +import { Alert, AlertDescription } from "@/components/ui/alert"; +import { AlertCircle } from "lucide-react"; + +interface ErrorStateProps { + message: string; +} + +export function ErrorState({ message }: ErrorStateProps) { + return ( + + + {message} + + ); +} diff --git a/frontend-react/src/components/layout/LanguageSwitcher.tsx b/frontend-react/src/components/layout/LanguageSwitcher.tsx new file mode 100644 index 0000000..4c24beb --- /dev/null +++ b/frontend-react/src/components/layout/LanguageSwitcher.tsx @@ -0,0 +1,43 @@ +import { Button } from "@/components/ui/button"; +import type { Language } from "@/types/petition"; + +interface LanguageSwitcherProps { + language: Language; + onLanguageChange: (lang: Language) => void; +} + +export function LanguageSwitcher({ + language, + onLanguageChange, +}: LanguageSwitcherProps) { + return ( +
+
+ + +
+
+ ); +} diff --git a/frontend-react/src/components/layout/LoadingState.tsx b/frontend-react/src/components/layout/LoadingState.tsx new file mode 100644 index 0000000..0fc0c78 --- /dev/null +++ b/frontend-react/src/components/layout/LoadingState.tsx @@ -0,0 +1,17 @@ +import { Loader2 } from "lucide-react"; +import type { Language } from "@/types/petition"; + +interface LoadingStateProps { + language?: Language; +} + +export function LoadingState({ language = "en" }: LoadingStateProps) { + return ( +
+ + + {language === "en" ? "Loading petition..." : "ޕެޓިޝަން ލޯޑުވަނީ..."} + +
+ ); +} diff --git a/frontend-react/src/components/petition/AuthorCard.tsx b/frontend-react/src/components/petition/AuthorCard.tsx new file mode 100644 index 0000000..9320b32 --- /dev/null +++ b/frontend-react/src/components/petition/AuthorCard.tsx @@ -0,0 +1,30 @@ +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import type { Author, Language } from "@/types/petition"; + +interface AuthorCardProps { + author: Author; + language: Language; +} + +export function AuthorCard({ author, language }: AuthorCardProps) { + const isRtl = language === "dv"; + + return ( + + + + {language === "en" ? "Author Details" : "ލިޔުންތެރިގެ މައުލޫމާތު"} + + + +

+ {author.name} +

+
+
+ ); +} diff --git a/frontend-react/src/components/petition/PetitionBody.tsx b/frontend-react/src/components/petition/PetitionBody.tsx new file mode 100644 index 0000000..0de1a44 --- /dev/null +++ b/frontend-react/src/components/petition/PetitionBody.tsx @@ -0,0 +1,44 @@ +import { useMemo } from "react"; +import { marked } from "marked"; +import DOMPurify from "dompurify"; +import type { Language } from "@/types/petition"; + +interface PetitionBodyProps { + bodyEng: string; + bodyDhiv: string; + language: Language; +} + +export function PetitionBody({ + bodyEng, + bodyDhiv, + language, +}: PetitionBodyProps) { + const content = language === "dv" ? bodyDhiv : bodyEng; + const isRtl = language === "dv"; + + const htmlContent = useMemo(() => { + const raw = marked.parse(content) as string; + return DOMPurify.sanitize(raw); + }, [content]); + + return ( +
+
+
+ ); +} diff --git a/frontend-react/src/components/petition/PetitionHeader.tsx b/frontend-react/src/components/petition/PetitionHeader.tsx new file mode 100644 index 0000000..079c9a6 --- /dev/null +++ b/frontend-react/src/components/petition/PetitionHeader.tsx @@ -0,0 +1,44 @@ +import { Badge } from "@/components/ui/badge"; +import type { PetitionDetails, Language } from "@/types/petition"; + +interface PetitionHeaderProps { + petition: PetitionDetails; + language: Language; +} + +export function PetitionHeader({ petition, language }: PetitionHeaderProps) { + const isRtl = language === "dv"; + + return ( +
+ {language === "en" ? ( +

+ {petition.nameEng} +

+ ) : ( +

+ {petition.nameDhiv} +

+ )} + +
+ + {language === "en" ? "Start Date:" : "ފެށި ތާރީހު:"}{" "} + {petition.startDate} + + + {language === "en" ? "Signatures:" : "ސޮއި:"}{" "} + {petition.signatureCount} + +
+
+ ); +} diff --git a/frontend-react/src/components/signature/SignatureForm.tsx b/frontend-react/src/components/signature/SignatureForm.tsx new file mode 100644 index 0000000..620642a --- /dev/null +++ b/frontend-react/src/components/signature/SignatureForm.tsx @@ -0,0 +1,286 @@ +import { useState, useRef, type FormEvent } from "react"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Checkbox } from "@/components/ui/checkbox"; +import { Alert, AlertDescription } from "@/components/ui/alert"; +import { SignaturePad, type SignaturePadRef } from "./SignaturePad"; +import { Turnstile } from "@marsidev/react-turnstile"; +import { Eraser, Send, CheckCircle, AlertCircle } from "lucide-react"; +import type { Language } from "@/types/petition"; + +interface SignatureFormProps { + language: Language; + onSubmit: (data: { + name: string; + idCard: string; + signature: string; + turnstileToken: string; + }) => Promise; +} + +export function SignatureForm({ language, onSubmit }: SignatureFormProps) { + const [name, setName] = useState(""); + const [idCardDigits, setIdCardDigits] = useState(""); + const [consent, setConsent] = useState(false); + const [turnstileToken, setTurnstileToken] = useState(null); + const [message, setMessage] = useState<{ + text: string; + type: "success" | "error"; + } | null>(null); + const [isSubmitting, setIsSubmitting] = useState(false); + + const signaturePadRef = useRef(null); + const isRtl = language === "dv"; + + const handleClear = () => { + signaturePadRef.current?.clear(); + }; + + const showMessage = (text: string, type: "success" | "error") => { + setMessage({ text, type }); + setTimeout(() => setMessage(null), 5000); + }; + + const handleSubmit = async (e: FormEvent) => { + e.preventDefault(); + + // Validate signature + if (signaturePadRef.current?.isEmpty()) { + showMessage( + language === "en" ? "Please provide your signature." : "ސޮއި ލިޔުއްވާ.", + "error", + ); + return; + } + + // Validate consent + if (!consent) { + showMessage( + language === "en" + ? "Please confirm that your submission will be sent to the Parliament Petition Committee and that your information is true." + : "މައުލޫމާތު ކަށަވަރުކޮށް، ޕެޓިޝަން ކޮމިޓީއަށް ފޮނުވުމަށް އެއްބަސްވެލައްވާ.", + "error", + ); + return; + } + + // Validate ID card (6 digits) + const idCardPattern = /^\d{6}$/; + if (!idCardPattern.test(idCardDigits)) { + showMessage( + language === "en" + ? "Please enter your ID number as 6 digits (numbers only)." + : "ކާޑު ނަންބަރު 6 އަކުރު ޖައްސަވާ.", + "error", + ); + return; + } + + // Validate turnstile + if (!turnstileToken && !import.meta.env.DEV) { + showMessage( + language === "en" + ? "Please complete the captcha challenge." + : "ކެޕްޗާ ފުރިހަމަ ކުރައްވާ.", + "error", + ); + return; + } + + const signature = signaturePadRef.current?.toSVG(); + if (!signature) { + showMessage( + language === "en" ? "Please provide your signature." : "ސޮއި ލިޔުއްވާ.", + "error", + ); + return; + } + + setIsSubmitting(true); + + try { + await onSubmit({ + name, + idCard: "A" + idCardDigits, + signature, + turnstileToken: turnstileToken || "DEV_BYPASS_TOKEN", + }); + + showMessage( + language === "en" + ? "Signature submitted successfully!" + : "ސޮއި ކޯމިއުކުރެވިއްޖެ!", + "success", + ); + + // Reset form + setName(""); + setIdCardDigits(""); + setConsent(false); + signaturePadRef.current?.clear(); + } catch (error) { + showMessage( + language === "en" + ? `Failed to submit signature: ${error instanceof Error ? error.message : "Unknown error"}` + : "ސޮއި ހުށަހެޅުމުން ކުށެއް ދިމާވެއްޖެ.", + "error", + ); + } finally { + setIsSubmitting(false); + } + }; + + return ( +
+

+ {language === "en" + ? "Sign this Petition" + : "މި މައްސަލައިގައި ސޮއި ކުރައްވާ"} +

+ +
+ {/* Name Field */} +
+ + setName(e.target.value)} + minLength={3} + maxLength={30} + required + className={isRtl ? "text-right" : ""} + placeholder={language === "en" ? "Enter your full name" : ""} + /> +
+ + {/* ID Card Field */} +
+ +
+ + A + + + setIdCardDigits(e.target.value.replace(/\D/g, "").slice(0, 6)) + } + maxLength={6} + required + placeholder="XXXXXX" + className="border-0 focus-visible:ring-0 text-left shadow-none" + dir="ltr" + /> +
+
+ + {/* Signature Pad */} +
+ +
+ +
+

+ {language === "en" + ? "Sign in the box above" + : "މަތީގައިވާ ގޮޅީގައި ސޮއި ކުރައްވާ"} +

+
+ + {/* Consent Checkbox */} +
+ setConsent(checked === true)} + className="mt-1" + /> + +
+ + {/* Message Display */} + {message && ( + + {message.type === "error" ? ( + + ) : ( + + )} + {message.text} + + )} + + {/* Turnstile */} +
+ setTurnstileToken(null)} + onExpire={() => setTurnstileToken(null)} + /> +
+ + {/* Form Buttons */} +
+ + +
+
+
+ ); +} diff --git a/frontend-react/src/components/signature/SignaturePad.tsx b/frontend-react/src/components/signature/SignaturePad.tsx new file mode 100644 index 0000000..70dfef6 --- /dev/null +++ b/frontend-react/src/components/signature/SignaturePad.tsx @@ -0,0 +1,74 @@ +import { useRef, useImperativeHandle, forwardRef } from "react"; +import SignatureCanvas from "react-signature-canvas"; + +export interface SignaturePadRef { + clear: () => void; + isEmpty: () => boolean; + toSVG: () => string | null; +} + +interface SignaturePadProps { + onBegin?: () => void; + onEnd?: () => void; +} + +export const SignaturePad = forwardRef( + ({ onBegin, onEnd }, ref) => { + const sigCanvasRef = useRef(null); + + useImperativeHandle(ref, () => ({ + clear: () => { + sigCanvasRef.current?.clear(); + }, + isEmpty: () => { + return sigCanvasRef.current?.isEmpty() ?? true; + }, + toSVG: () => { + if (!sigCanvasRef.current || sigCanvasRef.current.isEmpty()) { + return null; + } + + // Get the raw data points from signature canvas + const data = sigCanvasRef.current.toData(); + if (!data || data.length === 0) { + return null; + } + + // Convert to SVG path + let pathData = ""; + for (const stroke of data) { + const points = stroke as unknown as { x: number; y: number }[]; + if (points && points.length > 0) { + pathData += `M ${points[0].x} ${points[0].y} `; + for (let i = 1; i < points.length; i++) { + pathData += `L ${points[i].x} ${points[i].y} `; + } + } + } + + const canvas = sigCanvasRef.current.getCanvas(); + const width = canvas.width; + const height = canvas.height; + + return ``; + }, + })); + + return ( +
+ +
+ ); + }, +); + +SignaturePad.displayName = "SignaturePad"; diff --git a/frontend-react/src/components/ui/alert.tsx b/frontend-react/src/components/ui/alert.tsx new file mode 100644 index 0000000..aa7de24 --- /dev/null +++ b/frontend-react/src/components/ui/alert.tsx @@ -0,0 +1,66 @@ +import * as React from "react"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const alertVariants = cva( + "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", + { + variants: { + variant: { + default: "bg-card text-card-foreground", + destructive: + "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +function Alert({ + className, + variant, + ...props +}: React.ComponentProps<"div"> & VariantProps) { + return ( +
+ ); +} + +function AlertTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function AlertDescription({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ); +} + +export { Alert, AlertTitle, AlertDescription }; diff --git a/frontend-react/src/components/ui/badge.tsx b/frontend-react/src/components/ui/badge.tsx new file mode 100644 index 0000000..55f8352 --- /dev/null +++ b/frontend-react/src/components/ui/badge.tsx @@ -0,0 +1,46 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const badgeVariants = cva( + "inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90", + secondary: + "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", + destructive: + "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +function Badge({ + className, + variant, + asChild = false, + ...props +}: React.ComponentProps<"span"> & + VariantProps & { asChild?: boolean }) { + const Comp = asChild ? Slot : "span"; + + return ( + + ); +} + +export { Badge, badgeVariants }; diff --git a/frontend-react/src/components/ui/button.tsx b/frontend-react/src/components/ui/button.tsx new file mode 100644 index 0000000..46b3a48 --- /dev/null +++ b/frontend-react/src/components/ui/button.tsx @@ -0,0 +1,62 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: + "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2 has-[>svg]:px-3", + sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", + lg: "h-10 rounded-md px-6 has-[>svg]:px-4", + icon: "size-9", + "icon-sm": "size-8", + "icon-lg": "size-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +); + +function Button({ + className, + variant = "default", + size = "default", + asChild = false, + ...props +}: React.ComponentProps<"button"> & + VariantProps & { + asChild?: boolean; + }) { + const Comp = asChild ? Slot : "button"; + + return ( + + ); +} + +export { Button, buttonVariants }; diff --git a/frontend-react/src/components/ui/card.tsx b/frontend-react/src/components/ui/card.tsx new file mode 100644 index 0000000..4f88024 --- /dev/null +++ b/frontend-react/src/components/ui/card.tsx @@ -0,0 +1,92 @@ +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +function Card({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function CardHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function CardTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function CardDescription({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function CardAction({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function CardContent({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function CardFooter({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +export { + Card, + CardHeader, + CardFooter, + CardTitle, + CardAction, + CardDescription, + CardContent, +}; diff --git a/frontend-react/src/components/ui/checkbox.tsx b/frontend-react/src/components/ui/checkbox.tsx new file mode 100644 index 0000000..2b4d53b --- /dev/null +++ b/frontend-react/src/components/ui/checkbox.tsx @@ -0,0 +1,32 @@ +"use client"; + +import * as React from "react"; +import * as CheckboxPrimitive from "@radix-ui/react-checkbox"; +import { CheckIcon } from "lucide-react"; + +import { cn } from "@/lib/utils"; + +function Checkbox({ + className, + ...props +}: React.ComponentProps) { + return ( + + + + + + ); +} + +export { Checkbox }; diff --git a/frontend-react/src/components/ui/dialog.tsx b/frontend-react/src/components/ui/dialog.tsx new file mode 100644 index 0000000..a701d5b --- /dev/null +++ b/frontend-react/src/components/ui/dialog.tsx @@ -0,0 +1,141 @@ +import * as React from "react"; +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { XIcon } from "lucide-react"; + +import { cn } from "@/lib/utils"; + +function Dialog({ + ...props +}: React.ComponentProps) { + return ; +} + +function DialogTrigger({ + ...props +}: React.ComponentProps) { + return ; +} + +function DialogPortal({ + ...props +}: React.ComponentProps) { + return ; +} + +function DialogClose({ + ...props +}: React.ComponentProps) { + return ; +} + +function DialogOverlay({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DialogContent({ + className, + children, + showCloseButton = true, + ...props +}: React.ComponentProps & { + showCloseButton?: boolean; +}) { + return ( + + + + {children} + {showCloseButton && ( + + + Close + + )} + + + ); +} + +function DialogHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function DialogFooter({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function DialogTitle({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DialogDescription({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogOverlay, + DialogPortal, + DialogTitle, + DialogTrigger, +}; diff --git a/frontend-react/src/components/ui/input.tsx b/frontend-react/src/components/ui/input.tsx new file mode 100644 index 0000000..f16c2c0 --- /dev/null +++ b/frontend-react/src/components/ui/input.tsx @@ -0,0 +1,21 @@ +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +function Input({ className, type, ...props }: React.ComponentProps<"input">) { + return ( + + ); +} + +export { Input }; diff --git a/frontend-react/src/components/ui/label.tsx b/frontend-react/src/components/ui/label.tsx new file mode 100644 index 0000000..4ef28a9 --- /dev/null +++ b/frontend-react/src/components/ui/label.tsx @@ -0,0 +1,22 @@ +import * as React from "react"; +import * as LabelPrimitive from "@radix-ui/react-label"; + +import { cn } from "@/lib/utils"; + +function Label({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { Label }; diff --git a/frontend-react/src/hooks/useLanguage.ts b/frontend-react/src/hooks/useLanguage.ts new file mode 100644 index 0000000..ed68250 --- /dev/null +++ b/frontend-react/src/hooks/useLanguage.ts @@ -0,0 +1,60 @@ +import { useState, useEffect, useCallback } from "react"; +import type { Language } from "@/types/petition"; + +function getLangFromUrl(): Language { + const urlParams = new URLSearchParams(window.location.search); + const lang = urlParams.get("lang"); + return lang === "dv" ? "dv" : "en"; +} + +function updateUrlWithLang(lang: Language): void { + const urlParams = new URLSearchParams(window.location.search); + if (lang === "en") { + urlParams.delete("lang"); + } else { + urlParams.set("lang", lang); + } + const newUrl = + window.location.pathname + + (urlParams.toString() ? "?" + urlParams.toString() : ""); + window.history.pushState({}, "", newUrl); +} + +interface UseLanguageResult { + language: Language; + setLanguage: (lang: Language) => void; + t: (en: T, dv: T) => T; +} + +export function useLanguage(): UseLanguageResult { + const [language, setLanguageState] = useState(() => + getLangFromUrl(), + ); + + const setLanguage = useCallback((lang: Language) => { + setLanguageState(lang); + updateUrlWithLang(lang); + + // Set document direction for RTL languages (Dhivehi uses RTL script) + document.documentElement.dir = lang === "dv" ? "rtl" : "ltr"; + }, []); + + // Set initial direction on mount + useEffect(() => { + document.documentElement.dir = language === "dv" ? "rtl" : "ltr"; + }, [language]); + + // Helper function to get text based on current language + const t = useCallback( + (en: T, dv: T): T => { + return language === "dv" ? dv : en; + }, + [language], + ); + + return { + language, + setLanguage, + t, + }; +} diff --git a/frontend-react/src/hooks/usePetition.ts b/frontend-react/src/hooks/usePetition.ts new file mode 100644 index 0000000..842eb3a --- /dev/null +++ b/frontend-react/src/hooks/usePetition.ts @@ -0,0 +1,55 @@ +import { useState, useEffect, useCallback } from "react"; +import type { PetitionDetails } from "@/types/petition"; +import { fetchPetition, getDummyPetition } from "@/lib/api"; + +interface UsePetitionResult { + petition: PetitionDetails | null; + loading: boolean; + error: string | null; + refetch: () => void; +} + +export function usePetition(petitionId: string | null): UsePetitionResult { + const [petition, setPetition] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + const loadPetition = useCallback(async () => { + if (!petitionId) { + setLoading(false); + setError("No petition ID provided"); + return; + } + + setLoading(true); + setError(null); + + try { + const data = await fetchPetition(petitionId); + setPetition(data); + } catch (err) { + console.warn( + "Failed to fetch petition, falling back to dummy data.", + err, + ); + // Use dummy data for development + setError( + "Failed to load petition from server — showing dummy data for development.", + ); + setPetition(getDummyPetition(petitionId)); + } finally { + setLoading(false); + } + }, [petitionId]); + + useEffect(() => { + loadPetition(); + }, [loadPetition]); + + return { + petition, + loading, + error, + refetch: loadPetition, + }; +} diff --git a/frontend-react/src/index.css b/frontend-react/src/index.css new file mode 100644 index 0000000..299e38f --- /dev/null +++ b/frontend-react/src/index.css @@ -0,0 +1,199 @@ +@import "tailwindcss"; +@import "tw-animate-css"; + +@theme { + --font-sans: + "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + "Helvetica Neue", Arial, sans-serif; +} + +@custom-variant dark (&:is(.dark *)); + +/* Custom Dhivehi Fonts */ +@font-face { + font-family: "Utheem"; + src: url("/fonts/utheem.ttf") format("truetype"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "Faruma"; + src: url("/fonts/Faruma.ttf") format("truetype"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "Waheed"; + src: url("/fonts/MVWaheed.otf") format("opentype"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "A_Waheed"; + src: url("/fonts/A_Waheed.otf") format("opentype"); + font-weight: normal; + font-style: normal; +} + +/* Theme variables for shadcn */ +:root { + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --destructive-foreground: 210 40% 98%; + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --radius: 0.625rem; + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.205 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.205 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.922 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --destructive-foreground: 210 40% 98%; + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.556 0 0); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.556 0 0); +} + +/* Base styles */ +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + font-feature-settings: + "rlig" 1, + "calt" 1; + } +} + +/* Dhivehi text styles - using Faruma as primary font */ +.dhivehi { + font-family: "Faruma", "Waheed", sans-serif; + direction: rtl; + text-align: right; +} + +/* RTL document support */ +html[dir="rtl"] { + direction: rtl; +} + +/* Signature pad styling */ +.signature-pad-container { + @apply border-2 border-border rounded-lg bg-white cursor-crosshair; + touch-action: none; +} + +.signature-pad-container canvas { + display: block; + width: 100%; + height: auto; + aspect-ratio: 3; +} + +@theme inline { + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --radius-2xl: calc(var(--radius) + 8px); + --radius-3xl: calc(var(--radius) + 12px); + --radius-4xl: calc(var(--radius) + 16px); + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/frontend-react/src/lib/api.ts b/frontend-react/src/lib/api.ts new file mode 100644 index 0000000..ec6e2d5 --- /dev/null +++ b/frontend-react/src/lib/api.ts @@ -0,0 +1,56 @@ +import type { PetitionDetails, SignatureSubmission } from "@/types/petition"; + +// API base URL - empty for same-origin requests through Vite proxy +const API_BASE_URL = ""; + +export async function fetchPetition( + petitionId: string, +): Promise { + const response = await fetch( + `${API_BASE_URL}/api/Sign/petition/${petitionId}`, + ); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + return response.json(); +} + +export async function submitSignature( + petitionId: string, + submission: SignatureSubmission, +): Promise { + const response = await fetch( + `${API_BASE_URL}/api/Sign/petition/${petitionId}`, + { + method: "POST", + headers: { + accept: "*/*", + "Content-Type": "application/json", + }, + body: JSON.stringify(submission), + }, + ); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } +} + +// Dummy petition for development when API is not available +export function getDummyPetition(petitionId: string): PetitionDetails { + return { + id: petitionId || "dev-petition", + nameEng: "Demo Petition: Improve Local Services", + nameDhiv: "Demo Petition", + startDate: new Date().toLocaleDateString(), + signatureCount: 42, + authorDetails: { + name: "Demo Author", + }, + petitionBodyEng: + "This is dummy petition content to enable local development. Replace with real data when the API is available.", + petitionBodyDhiv: "Demo petition content (Dhivehi)", + }; +} diff --git a/frontend-react/src/lib/utils.ts b/frontend-react/src/lib/utils.ts new file mode 100644 index 0000000..a5ef193 --- /dev/null +++ b/frontend-react/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/frontend-react/src/main.tsx b/frontend-react/src/main.tsx new file mode 100644 index 0000000..eff7ccc --- /dev/null +++ b/frontend-react/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import "./index.css"; +import App from "./App.tsx"; + +createRoot(document.getElementById("root")!).render( + + + , +); diff --git a/frontend-react/src/types/petition.ts b/frontend-react/src/types/petition.ts new file mode 100644 index 0000000..effa5fd --- /dev/null +++ b/frontend-react/src/types/petition.ts @@ -0,0 +1,24 @@ +export interface Author { + name: string; + nid?: string; +} + +export interface PetitionDetails { + id: string; + startDate: string; + nameDhiv: string; + nameEng: string; + authorDetails: Author; + petitionBodyDhiv: string; + petitionBodyEng: string; + signatureCount: number; +} + +export interface SignatureSubmission { + name: string; + idCard: string; + signature: string; // SVG string + turnstileToken: string; +} + +export type Language = "en" | "dv"; diff --git a/frontend-react/tsconfig.app.json b/frontend-react/tsconfig.app.json new file mode 100644 index 0000000..04d588e --- /dev/null +++ b/frontend-react/tsconfig.app.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true, + + /* Path alias for shadcn */ + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src"] +} diff --git a/frontend-react/tsconfig.json b/frontend-react/tsconfig.json new file mode 100644 index 0000000..fec8c8e --- /dev/null +++ b/frontend-react/tsconfig.json @@ -0,0 +1,13 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/frontend-react/tsconfig.node.json b/frontend-react/tsconfig.node.json new file mode 100644 index 0000000..8a67f62 --- /dev/null +++ b/frontend-react/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/frontend-react/vite.config.ts b/frontend-react/vite.config.ts new file mode 100644 index 0000000..f6c38e8 --- /dev/null +++ b/frontend-react/vite.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import tailwindcss from "@tailwindcss/vite"; +import path from "path"; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react(), tailwindcss()], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, + server: { + proxy: { + "/api": { + target: "http://localhost:9755", + changeOrigin: true, + }, + }, + }, +}); diff --git a/sample.Petition.md b/sample.Petition.md index c03720c..bdebd7d 100644 --- a/sample.Petition.md +++ b/sample.Petition.md @@ -7,7 +7,6 @@ author: nid: "AAAAA12345" --- -## Petition Body (Dhivehi) ## Petition Body (Dhivehi) ދިވެހިރާއްޖޭގެ ރައްޔިތުން ކަމުގައިވާ އަޅުގަނޑުމެން، ދިވެހި ރައްޔިތުންގެ އަސާސީ ޙައްޤުތަކާއި، ޕްރައިވެސީއާއި، ޑިޖިޓަލް ސެކިއުރިޓީ ރައްކާތެރިކުރުމަށް ޒަމާނީ، ފުރިހަމަ ޤާނޫނީ އޮނިގަނޑެއް ނެތުމުގެ މައްސަލައަށް ޙައްލެއް ހޯދުމަށް މި ޕެޓިޝަން އިޙްތިރާމާއެކު ހުށަހަޅަމެވެ. @@ -18,35 +17,32 @@ author: --- -ހ. ފުރިހަމަ ޑޭޓާ ޕްރޮޓެކްޝަން ޤާނޫނެއް ފާސްކުރުން (ބައިނަލްއަޤްވާމީ މިންގަނޑުތަކާ އެއްގޮތަށް) +**ހ. ފުރިހަމަ ޑޭޓާ ޕްރޮޓެކްޝަން ޤާނޫނެއް ފާސްކުރުން (ބައިނަލްއަޤްވާމީ މިންގަނޑުތަކާ އެއްގޮތަށް)** ޒާތީ ޑޭޓާ ޤާނޫނީ ގޮތުން ޕްރޮސެސްކުރުމަށް މަތީ މިންގަނޑުތައް ކަނޑައަޅާ ޚާއްޞަ ޑޭޓާ ޕްރޮޓެކްޝަން ޤާނޫނެއް އެކުލަވާލައި، މަޝްވަރާކޮށް، ފާސްކުރުމަށް ރައްޔިތުންގެ މަޖިލީހަށް އިޙްތިރާމާއެކު އެދެމެވެ. ދިވެހިރާއްޖޭގެ އޮނިގަނޑު ހަރުދަނާ އަދި މުސްތަޤްބަލަށް ތައްޔާރުވެފައިވާ އެއްޗެއްކަން ކަށަވަރުކުރުމަށް ޔޫރަޕިއަން ޔޫނިއަންގެ ޖެނެރަލް ޑޭޓާ ޕްރޮޓެކްޝަން ރެގިއުލޭޝަން (ޖީޑީޕީއާރް) ފަދަ ބައިނަލްއަޤްވާމީ ގޮތުން ޤަބޫލުކުރެވޭ ރަނގަޅު އުސޫލުތަކުގެ މައްޗަށް ބިނާކުރަންވާނެއެވެ. -1. މި ޤާނޫނުގައި އަންނަނިވި އަސާސީ އުސޫލުތައް ހިމެނެންވާނެއެވެ. އެހެންނަމަވެސް މިއަށް ލިމިޓެއް ނުވެއެވެ: +1. **މި ޤާނޫނުގައި އަންނަނިވި އަސާސީ އުސޫލުތައް ހިމެނެންވާނެއެވެ. އެހެންނަމަވެސް މިއަށް ލިމިޓެއް ނުވެއެވެ:** + - **ޑޭޓާ ސަބްޖެކްޓްގެ އަސާސީ ޙައްޤުތައް:** އަންނަނިވި ޙައްޤުތައް ފަރުދުންނަށް ކަށަވަރުކޮށްދިނުން: + - އެމީހުންގެ ޒާތީ ޑޭޓާއަށް އެކްސެސްވުން + - ނުބައި ޑޭޓާ ރަނގަޅުކުރުން + - އެމީހުންގެ ޑޭޓާ ފޮހެލުން (ހަނދާން ނައްތާލެވުމުގެ ޙައްޤު) + - އެމީހުންގެ ޑޭޓާ ޕޯޓެބިލިޓީ -- ޑޭޓާ ސަބްޖެކްޓްގެ އަސާސީ ޙައްޤުތައް: އަންނަނިވި ޙައްޤުތައް ފަރުދުންނަށް ކަށަވަރުކޮށްދިނުން: - - އެމީހުންގެ ޒާތީ ޑޭޓާއަށް އެކްސެސްވުން - - ނުބައި ޑޭޓާ ރަނގަޅުކުރުން - - އެމީހުންގެ ޑޭޓާ ފޮހެލުން (ހަނދާން ނައްތާލެވުމުގެ ޙައްޤު) - - އެމީހުންގެ ޑޭޓާ ޕޯޓެބިލިޓީ +2. **ޕްރޮސެސިންގެ ޤާނޫނީ ބިންގާ:** ޒާތީ ޑޭޓާ ޕްރޮސެސްކުރުން ސާފު، ސީދާ، އަދި މަޢުލޫމާތު ލިބިގެން ދެވޭ ރުހުމެއް ނުވަތަ އެހެނިހެން ކަނޑައެޅިފައިވާ ޤާނޫނީ ބިންގަލެއްގެ މައްޗަށް ބިނާވާން ލާޒިމުކުރުން. ކުރިން ޓިކް ޖެހިފައިވާ ބޮކްސްތައް ނުވަތަ ރުހުން ލިބިއްޖެކަމަށް ބެލުން މަނާކުރަންވާނެއެވެ. -2. ޕްރޮސެސިންގެ ޤާނޫނީ ބިންގާ: ޒާތީ ޑޭޓާ ޕްރޮސެސްކުރުން ސާފު، ސީދާ، އަދި މަޢުލޫމާތު ލިބިގެން ދެވޭ ރުހުމެއް ނުވަތަ އެހެނިހެން ކަނޑައެޅިފައިވާ ޤާނޫނީ ބިންގަލެއްގެ މައްޗަށް ބިނާވާން ލާޒިމުކުރުން. ކުރިން ޓިކް ޖެހިފައިވާ ބޮކްސްތައް ނުވަތަ ރުހުން ލިބިއްޖެކަމަށް ބެލުން މަނާކުރަންވާނެއެވެ. +3. **އިލެކްޓްރޯނިކް މާކެޓިންގ ރުހުމާ ބެހޭ ޚާއްޞަ އެންގުން (އެދިގެން ނުވާ އެސްއެމްއެސް):** + - ޕްރޮމޯޝަނަލް އެސްއެމްއެސް ނުވަތަ އިލެކްޓްރޯނިކް މެސެޖިންގަށް ޒާތީ ޑޭޓާ (ފޯނު ނަންބަރު ފަދަ) ބޭނުންކުރުން މާކެޓިންގެ ބާވަތެއްގެ ގޮތުގައި މި ޤާނޫނުން ސީދާ ބަޔާންކޮށް، ސަބްސްކްރައިބަރުގެ ކުރީން ލިބޭ، ޚާއްޞަ، އަދި މަޢުލޫމާތު ލިބިގެން ދެވޭ އޮޕްޓް-އިން ރުހުން ބޭނުންވާކަން ކަނޑައަޅަންވާނެއެވެ. -3. އިލެކްޓްރޯނިކް މާކެޓިންގ ރުހުމާ ބެހޭ ޚާއްޞަ އެންގުން (އެދިގެން ނުވާ އެސްއެމްއެސް): + - މި ރުހުން ޢާންމު ޝަރުތުތަކާއި ކޮންޑިޝަންސްއާ ވަކިން ހޯދަންވާނެއެވެ. ހުރިހާ ޕްރޮމޯޝަނަލް މުވާސަލާތަކަށް ޑީފޯލްޓް ޕޮޒިޝަނަކީ އޮޕްޓް-އިން ކަމުގައި ކަށަވަރުކުރަންވާނެއެވެ (ފޮނުވާ ފަރާތުން ސީދާ ރުހުން ހޯދަންޖެހޭ). އޮޕްޓް-އައުޓް އެއް ނޫނެވެ. -- ޕްރޮމޯޝަނަލް އެސްއެމްއެސް ނުވަތަ އިލެކްޓްރޯނިކް މެސެޖިންގަށް ޒާތީ ޑޭޓާ (ފޯނު ނަންބަރު ފަދަ) ބޭނުންކުރުން މާކެޓިންގެ ބާވަތެއްގެ ގޮތުގައި މި ޤާނޫނުން ސީދާ ބަޔާންކޮށް، ސަބްސްކްރައިބަރުގެ ކުރީން ލިބޭ، ޚާއްޞަ، އަދި މަޢުލޫމާތު ލިބިގެން ދެވޭ އޮޕްޓް-އިން ރުހުން ބޭނުންވާކަން ކަނޑައަޅަންވާނެއެވެ. + - މި ޚާއްޞަ ރުހުމާ ނުލައި އެއްވެސް ސަބްސްކްރައިބަރަކަށް ވިޔަފާރި، މާކެޓިންގ، ނުވަތަ ޕްރޮމޯޝަނަލް އެސްއެމްއެސް އާއި މެސެޖު ފޮނުވުން މި ޤާނޫނުން މަނާކުރަންވާނެއެވެ. -- މި ރުހުން ޢާންމު ޝަރުތުތަކާއި ކޮންޑިޝަންސްއާ ވަކިން ހޯދަންވާނެއެވެ. ހުރިހާ ޕްރޮމޯޝަނަލް މުވާސަލާތަކަށް ޑީފޯލްޓް ޕޮޒިޝަނަކީ އޮޕްޓް-އިން ކަމުގައި ކަށަވަރުކުރަންވާނެއެވެ (ފޮނުވާ ފަރާތުން ސީދާ ރުހުން ހޯދަންޖެހޭ). އޮޕްޓް-އައުޓް އެއް ނޫނެވެ. +4. **މިނިވަން އޮތޯރިޓީއެއް އުފެއްދުން:** އެކަށީގެންވާ ވަސީލަތްތައް ލިބިފައިވާ މިނިވަން ޑޭޓާ ޕްރޮޓެކްޝަން އޮތޯރިޓީ (ޑީޕީއޭ) އެއް އުފެއްދުން. މި އޮތޯރިޓީއަށް އަންނަނިވި ބާރުތައް ދިނުން: + - ޤާނޫނު ތަންފީޒުކުރުން + - ޝަކުވާތައް ތަޙުޤީޤުކުރުން + - ޤާނޫނާ ޚިލާފުވާ ފަރާތްތަކަށް ބޮޑެތި އަދި ހަރުދަނާ އަދަބު ދިނުން -- މި ޚާއްޞަ ރުހުމާ ނުލައި އެއްވެސް ސަބްސްކްރައިބަރަކަށް ވިޔަފާރި، މާކެޓިންގ، ނުވަތަ ޕްރޮމޯޝަނަލް އެސްއެމްއެސް އާއި މެސެޖު ފޮނުވުން މި ޤާނޫނުން މަނާކުރަންވާނެއެވެ. - -4. މިނިވަން އޮތޯރިޓީއެއް އުފެއްދުން: އެކަށީގެންވާ ވަސީލަތްތައް ލިބިފައިވާ މިނިވަން ޑޭޓާ ޕްރޮޓެކްޝަން އޮތޯރިޓީ (ޑީޕީއޭ) އެއް އުފެއްދުން. މި އޮތޯރިޓީއަށް އަންނަނިވި ބާރުތައް ދިނުން: - -- ޤާނޫނު ތަންފީޒުކުރުން -- ޝަކުވާތައް ތަޙުޤީޤުކުރުން -- ޤާނޫނާ ޚިލާފުވާ ފަރާތްތަކަށް ބޮޑެތި އަދި ހަރުދަނާ އަދަބު ދިނުން - -5. ޑޭޓާ ބްރީޗް އެންގުމުގެ އިލްތިޒާމު: ބޮޑު ޑޭޓާ ބްރީޗެއް ހިނގައިފިނަމަ ޑީޕީއޭއަށާއި އަސަރުކުރި ފަރާތްތަކަށް އަވަހަށް އެންގުން ޑޭޓާ ކޮންޓްރޯލަރުންނަށް ލާޒިމުކުރުން. +5. **ޑޭޓާ ބްރީޗް އެންގުމުގެ އިލްތިޒާމު:** ބޮޑު ޑޭޓާ ބްރީޗެއް ހިނގައިފިނަމަ ޑީޕީއޭއަށާއި އަސަރުކުރި ފަރާތްތަކަށް އަވަހަށް އެންގުން ޑޭޓާ ކޮންޓްރޯލަރުންނަށް ލާޒިމުކުރުން. --- @@ -58,7 +54,6 @@ author: ޤައުމީ މުހިންމުކަމެއް ކަމުގައިވާ މި މައްސަލައަށް މަޖިލީހުން އެދެވޭ ގޮތެއްގައި ބައްލަވާނެ ކަމަށް އުންމީދުކުރަމެވެ. - ## Petition Body (English) We, the citizens of the Republic of Maldives, respectfully submit this petition to address the critical lack of a modern, comprehensive framework to protect the fundamental rights, privacy, and digital security of the Maldivian people. @@ -67,23 +62,25 @@ In the rapidly evolving digital age, personal data including names, contact deta The widespread practice of sending unsolicited promotional SMS and messages is a clear example of this data processing abuse, constituting a daily intrusion into the personal lives and privacy of citizens, leading to significant disruption and eroding the quality of mobile communication. - --- +--- -A. Enactment of a Comprehensive Data Protection Act (Inspired by Global Standards) +**A. Enactment of a Comprehensive Data Protection Act (Inspired by Global Standards)** We respectfully request the People's Majlis to initiate, deliberate upon, and enact a dedicated Data Protection Act that establishes high standards for the lawful processing of personal data, drawing upon globally recognized best practices, such as the European Union’s General Data Protection Regulation (GDPR), to ensure the Maldives’ framework is robust and future-proof. -1 . The Act must include, but not be limited to, the following core principles: +**1. The Act must include, but not be limited to, the following core principles:** -- Fundamental Rights of the Data Subject: Guaranteeing the rights of individuals to: -- Access their personal data. -- Rectify inaccurate data. -- Erase their data (Right to be Forgotten). -- Portability of their data. +- **Fundamental Rights of the Data Subject:** Guaranteeing the rights of individuals to: + - Access their personal data. + - Rectify inaccurate data. + - Erase their data (Right to be Forgotten). + - Portability of their data. -2 . Lawful Basis for Processing: Mandating that all processing of personal data must be based on a clear, explicit, and informed consent or other defined legal grounds. The use of pre-checked boxes or presumed consent must be prohibited. +**2. Lawful Basis for Processing:** -3 . Specific Mandate on Electronic Marketing Consent (Unsolicited SMS): +Mandating that all processing of personal data must be based on a clear, explicit, and informed consent or other defined legal grounds. The use of pre-checked boxes or presumed consent must be prohibited. + +**3. Specific Mandate on Electronic Marketing Consent (Unsolicited SMS):** - The Act must specifically define the use of personal data (such as a phone number) for promotional SMS or electronic messaging as a form of marketing that requires prior, specific, and informed Opt-In consent from the subscriber. @@ -91,15 +88,19 @@ We respectfully request the People's Majlis to initiate, deliberate upon, and en - The Act must prohibit the sending of commercial, marketing, or promotional SMS and messages to any subscriber without this specific consent. -4 . Establishment of an Independent Authority: Creating a well-resourced and independent Data Protection Authority (DPA) with the power to: +**4. Establishment of an Independent Authority:** + +Creating a well-resourced and independent Data Protection Authority (DPA) with the power to: - Enforce the Act. - Investigate complaints. - Impose significant and effective penalties for non-compliance. -4 . Data Breach Obligations: Making it mandatory for data controllers to promptly notify the DPA and affected individuals of any significant data breach. +**5. Data Breach Obligations:** ---- +Making it mandatory for data controllers to promptly notify the DPA and affected individuals of any significant data breach. + +--- We affirm that this petition is in full compliance with the Rules of Procedure of the People's Majlis (Article 257) and does not contain any of the prohibited content, including, but not limited to: anything contrary to the Constitution or laws of the Republic of Maldives; confidential business or financial information; any request to grant or strip honors, or give or dismiss employment; or anything that endangers national security.