From 0de7835b5d931c0a3acb3ba6a73ac59bcaee5bb1 Mon Sep 17 00:00:00 2001 From: idittrich-valueon Date: Wed, 7 May 2025 11:59:22 +0200 Subject: [PATCH] added frontend code --- .github/workflows/main_poweron-nyla.yml | 15 +- frontend/.env | 8 + frontend/.gitignore | 24 + frontend/README.md | 54 + frontend/env.d.ts | 15 + frontend/eslint.config.js | 28 + frontend/index.html | 13 + frontend/package-lock.json | 3379 +++++++++++++++++ frontend/package.json | 41 + frontend/public/vite.svg | 1 + frontend/server.ts | 6 + frontend/src/App.tsx | 43 + frontend/src/api.ts | 126 + frontend/src/assets/Frame 43.png | Bin 0 -> 178836 bytes frontend/src/assets/LogoPowerOn.png | Bin 0 -> 1556 bytes frontend/src/assets/background.png | Bin 0 -> 1673 bytes frontend/src/assets/react.svg | 1 + frontend/src/auth/Hooks/auth-provider.tsx | 110 + frontend/src/auth/Hooks/delete-user.ts | 14 + frontend/src/auth/Hooks/get-all-users.ts | 42 + frontend/src/auth/Hooks/use-auth-token.ts | 39 + frontend/src/auth/Hooks/use-msal-login.ts | 30 + frontend/src/auth/Hooks/use-user-files.ts | 41 + frontend/src/auth/Hooks/use-user-info.ts | 33 + frontend/src/auth/Hooks/use-user-prompts.ts | 41 + frontend/src/auth/ProtectedRoute.tsx | 40 + frontend/src/auth/auth-config.ts | 45 + .../DashboardConfigAgents.module.css | 0 .../DashboardConfig/DashboardConfigAgents.tsx | 0 .../DashboardConfigDocument.module.css | 0 .../DashboardConfigDocument.tsx | 0 .../DashboardConfigSettings.module.css | 0 .../DashboardConfigSettings.tsx | 0 .../DashboardPrompt.module.css | 51 + .../DashboardPrompts/DashboardPrompt.tsx | 48 + .../DashboardPromptArea.module.css | 37 + .../DashboardPromptArea.tsx | 69 + .../DashboardPromptAreaChat.module.css | 29 + .../DashboardPromptAreaChat.tsx | 169 + .../DashboardPromptAreaMessage.module.css | 27 + .../DashboardPromptAreaMessage.tsx | 71 + .../DashboardPromptSet.module.css | 218 ++ .../DashboardPromptSet/DashboardPromptSet.tsx | 183 + .../DashboardPromptSet/FileItem.tsx | 34 + .../DashboardPromptSet/FileList.tsx | 64 + .../NewPromptButton.module.css | 144 + .../DashboardPromptSet/NewPromptButton.tsx | 109 + .../PromptItemDelete.module.css | 132 + .../DashboardPromptSet/PromptItemDelete.tsx | 74 + .../PromptItemShare.module.css | 169 + .../DashboardPromptSet/PromptItemShare.tsx | 112 + .../components/Dateien/DateienItem.module.css | 120 + .../src/components/Dateien/DateienItem.tsx | 76 + .../Mitglieder/MitgliederItem.module.css | 53 + .../components/Mitglieder/MitgliederItem.tsx | 38 + .../DeletePopUp.module.css | 92 + .../MitgliederItemDelete/DeletePopUp.tsx | 86 + .../MitgliederItemDelete.module.css | 33 + .../MitgliederItemDelete.tsx | 43 + .../MitgliederItemEdit/EditPopUp.module.css | 89 + .../MitgliederItemEdit/EditPopUp.tsx | 143 + .../MitgliederItemEdit.module.css | 12 + .../MitgliederItemEdit/MitgliederItemEdit.tsx | 42 + .../MitgliederItemEdit/update-user.ts | 20 + .../src/components/Sidebar/Sidebar.module.css | 42 + frontend/src/components/Sidebar/Sidebar.tsx | 83 + .../components/Sidebar/SidebarItem.module.css | 69 + .../src/components/Sidebar/SidebarItem.tsx | 56 + .../Sidebar/SidebarSubmenu.module.css | 58 + .../src/components/Sidebar/SidebarSubmenu.tsx | 100 + .../components/Sidebar/SidebarUser.module.css | 63 + .../src/components/Sidebar/SidebarUser.tsx | 51 + frontend/src/components/Sidebar/index.ts | 3 + .../src/components/Sidebar/sidebarData.tsx | 77 + frontend/src/hooks/use-file-operations.ts | 71 + frontend/src/main.tsx | 12 + .../pages/Home/Dashboard/Dashboard.module.css | 4 + .../src/pages/Home/Dashboard/Dashboard.tsx | 13 + .../src/pages/Home/Dateien/Dateien.module.css | 90 + frontend/src/pages/Home/Dateien/Dateien.tsx | 94 + .../DateienUpload.module.css | 101 + .../DateienHinzufügen/DateienUpload.tsx | 80 + frontend/src/pages/Home/Home.module.css | 36 + frontend/src/pages/Home/Home.tsx | 38 + .../Home/Mitglieder/Mitglieder.module.css | 85 + .../src/pages/Home/Mitglieder/Mitglieder.tsx | 39 + .../pages/Home/Organisation/Organisation.tsx | 16 + frontend/src/pages/Home/index.ts | 3 + frontend/src/pages/Login.module.css | 108 + frontend/src/pages/Login.tsx | 74 + .../pages/Register/RegisterOrganisation.tsx | 152 + .../src/pages/Register/RegisterPricing.tsx | 52 + .../src/pages/Register/RegisterSummary.tsx | 117 + frontend/src/vite-env.d.ts | 1 + frontend/tsconfig.app.json | 32 + frontend/tsconfig.json | 7 + frontend/tsconfig.node.json | 24 + frontend/vite.config.ts | 16 + public/index.html | 14 - requirements.txt | 1 - src/App.css | 17 - src/App.js | 17 - src/index.js | 10 - 103 files changed, 8638 insertions(+), 64 deletions(-) create mode 100644 frontend/.env create mode 100644 frontend/.gitignore create mode 100644 frontend/README.md create mode 100644 frontend/env.d.ts create mode 100644 frontend/eslint.config.js create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/vite.svg create mode 100644 frontend/server.ts create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/api.ts create mode 100644 frontend/src/assets/Frame 43.png create mode 100644 frontend/src/assets/LogoPowerOn.png create mode 100644 frontend/src/assets/background.png create mode 100644 frontend/src/assets/react.svg create mode 100644 frontend/src/auth/Hooks/auth-provider.tsx create mode 100644 frontend/src/auth/Hooks/delete-user.ts create mode 100644 frontend/src/auth/Hooks/get-all-users.ts create mode 100644 frontend/src/auth/Hooks/use-auth-token.ts create mode 100644 frontend/src/auth/Hooks/use-msal-login.ts create mode 100644 frontend/src/auth/Hooks/use-user-files.ts create mode 100644 frontend/src/auth/Hooks/use-user-info.ts create mode 100644 frontend/src/auth/Hooks/use-user-prompts.ts create mode 100644 frontend/src/auth/ProtectedRoute.tsx create mode 100644 frontend/src/auth/auth-config.ts create mode 100644 frontend/src/components/DashboardConfig/DashboardConfigAgents.module.css create mode 100644 frontend/src/components/DashboardConfig/DashboardConfigAgents.tsx create mode 100644 frontend/src/components/DashboardConfig/DashboardConfigDocument.module.css create mode 100644 frontend/src/components/DashboardConfig/DashboardConfigDocument.tsx create mode 100644 frontend/src/components/DashboardConfig/DashboardConfigSettings.module.css create mode 100644 frontend/src/components/DashboardConfig/DashboardConfigSettings.tsx create mode 100644 frontend/src/components/DashboardPrompts/DashboardPrompt.module.css create mode 100644 frontend/src/components/DashboardPrompts/DashboardPrompt.tsx create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptArea.module.css create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptArea.tsx create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaChat.module.css create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaChat.tsx create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaMessage.module.css create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaMessage.tsx create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptSet/DashboardPromptSet.module.css create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptSet/DashboardPromptSet.tsx create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptSet/FileItem.tsx create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptSet/FileList.tsx create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptSet/NewPromptButton.module.css create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptSet/NewPromptButton.tsx create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptSet/PromptItemDelete.module.css create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptSet/PromptItemDelete.tsx create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptSet/PromptItemShare.module.css create mode 100644 frontend/src/components/DashboardPrompts/DashboardPromptSet/PromptItemShare.tsx create mode 100644 frontend/src/components/Dateien/DateienItem.module.css create mode 100644 frontend/src/components/Dateien/DateienItem.tsx create mode 100644 frontend/src/components/Mitglieder/MitgliederItem.module.css create mode 100644 frontend/src/components/Mitglieder/MitgliederItem.tsx create mode 100644 frontend/src/components/Mitglieder/MitgliederItemDelete/DeletePopUp.module.css create mode 100644 frontend/src/components/Mitglieder/MitgliederItemDelete/DeletePopUp.tsx create mode 100644 frontend/src/components/Mitglieder/MitgliederItemDelete/MitgliederItemDelete.module.css create mode 100644 frontend/src/components/Mitglieder/MitgliederItemDelete/MitgliederItemDelete.tsx create mode 100644 frontend/src/components/Mitglieder/MitgliederItemEdit/EditPopUp.module.css create mode 100644 frontend/src/components/Mitglieder/MitgliederItemEdit/EditPopUp.tsx create mode 100644 frontend/src/components/Mitglieder/MitgliederItemEdit/MitgliederItemEdit.module.css create mode 100644 frontend/src/components/Mitglieder/MitgliederItemEdit/MitgliederItemEdit.tsx create mode 100644 frontend/src/components/Mitglieder/MitgliederItemEdit/update-user.ts create mode 100644 frontend/src/components/Sidebar/Sidebar.module.css create mode 100644 frontend/src/components/Sidebar/Sidebar.tsx create mode 100644 frontend/src/components/Sidebar/SidebarItem.module.css create mode 100644 frontend/src/components/Sidebar/SidebarItem.tsx create mode 100644 frontend/src/components/Sidebar/SidebarSubmenu.module.css create mode 100644 frontend/src/components/Sidebar/SidebarSubmenu.tsx create mode 100644 frontend/src/components/Sidebar/SidebarUser.module.css create mode 100644 frontend/src/components/Sidebar/SidebarUser.tsx create mode 100644 frontend/src/components/Sidebar/index.ts create mode 100644 frontend/src/components/Sidebar/sidebarData.tsx create mode 100644 frontend/src/hooks/use-file-operations.ts create mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/pages/Home/Dashboard/Dashboard.module.css create mode 100644 frontend/src/pages/Home/Dashboard/Dashboard.tsx create mode 100644 frontend/src/pages/Home/Dateien/Dateien.module.css create mode 100644 frontend/src/pages/Home/Dateien/Dateien.tsx create mode 100644 frontend/src/pages/Home/Dateien/DateienHinzufügen/DateienUpload.module.css create mode 100644 frontend/src/pages/Home/Dateien/DateienHinzufügen/DateienUpload.tsx create mode 100644 frontend/src/pages/Home/Home.module.css create mode 100644 frontend/src/pages/Home/Home.tsx create mode 100644 frontend/src/pages/Home/Mitglieder/Mitglieder.module.css create mode 100644 frontend/src/pages/Home/Mitglieder/Mitglieder.tsx create mode 100644 frontend/src/pages/Home/Organisation/Organisation.tsx create mode 100644 frontend/src/pages/Home/index.ts create mode 100644 frontend/src/pages/Login.module.css create mode 100644 frontend/src/pages/Login.tsx create mode 100644 frontend/src/pages/Register/RegisterOrganisation.tsx create mode 100644 frontend/src/pages/Register/RegisterPricing.tsx create mode 100644 frontend/src/pages/Register/RegisterSummary.tsx create mode 100644 frontend/src/vite-env.d.ts create mode 100644 frontend/tsconfig.app.json create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts delete mode 100644 public/index.html delete mode 100644 requirements.txt delete mode 100644 src/App.css delete mode 100644 src/App.js delete mode 100644 src/index.js diff --git a/.github/workflows/main_poweron-nyla.yml b/.github/workflows/main_poweron-nyla.yml index 24be77c..902acf6 100644 --- a/.github/workflows/main_poweron-nyla.yml +++ b/.github/workflows/main_poweron-nyla.yml @@ -20,14 +20,19 @@ jobs: node-version: '18' cache: 'npm' # Aktiviert Caching für schnellere Builds + - name: Install dependencies + working-directory: ./frontend + run: npm install + + - name: Build React app + working-directory: ./frontend + run: npm run build + - name: Prepare deployment package run: | - # Create deployment package with source files + # Create deployment package with build files mkdir deploy - cp -r src deploy/ - cp -r public deploy/ - cp package.json deploy/ - cp package-lock.json deploy/ + cp -r frontend/dist/* deploy/ cp staticwebapp.config.json deploy/ - name: 'Deploy to Azure Web App' diff --git a/frontend/.env b/frontend/.env new file mode 100644 index 0000000..4349988 --- /dev/null +++ b/frontend/.env @@ -0,0 +1,8 @@ +VITE_API_URL="http://127.0.0.1:8000" + +VITE_MICROSOFT_CLIENT_ID="24cd6c8a-b592-4905-a5ba-d5fa9f911154" +VITE_MICROSOFT_TENANT_ID="6a51aaeb-2467-4186-9504-2a05aedc591f" +VITE_ENTRA_CLIENT_SECRET="2iw8Q~jwqG1iacxHopBt5pstu6R45UC1gIQabcbD" +VITE_ENTRA_AUTHORITY="https://login.microsoftonline.com/6a51aaeb-2467-4186-9504-2a05aedc591f" +VITE_ENTRA_REDIRECT_PATH="/auth/callback/" +VITE_ENTRA_REDIRECT_URI="https://127.0.0.1:8000/auth/callback/" \ No newline at end of file diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/frontend/.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/README.md b/frontend/README.md new file mode 100644 index 0000000..40ede56 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,54 @@ +# 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/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## 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 tseslint.config({ + extends: [ + // 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, + ], + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +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 tseslint.config({ + plugins: { + // Add the react-x and react-dom plugins + 'react-x': reactX, + 'react-dom': reactDom, + }, + rules: { + // other rules... + // Enable its recommended typescript rules + ...reactX.configs['recommended-typescript'].rules, + ...reactDom.configs.recommended.rules, + }, +}) +``` diff --git a/frontend/env.d.ts b/frontend/env.d.ts new file mode 100644 index 0000000..633661e --- /dev/null +++ b/frontend/env.d.ts @@ -0,0 +1,15 @@ +/// + +interface ImportMetaEnv { + readonly VITE_API_URL: string + readonly VITE_MICROSOFT_CLIENT_ID: string + readonly VITE_MICROSOFT_TENANT_ID: string + readonly VITE_ENTRA_CLIENT_SECRET: string + readonly VITE_ENTRA_AUTHORITY: string + readonly VITE_ENTRA_REDIRECT_PATH: string + readonly VITE_ENTRA_REDIRECT_URI: string + } + +interface ImportMeta { + readonly env: ImportMetaEnv + } \ No newline at end of file diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100644 index 0000000..092408a --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,28 @@ +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' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..e4b78ea --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..4ef4250 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,3379 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@azure/msal-browser": "^4.8.0", + "@azure/msal-react": "^3.0.7", + "axios": "^1.8.3", + "dotenv": "^16.0.3", + "framer-motion": "^12.7.3", + "fs": "^0.0.1-security", + "js-cookie": "^3.0.5", + "jsonwebtoken": "^9.0.2", + "jwt-decode": "^4.0.0", + "motion": "^12.7.3", + "pg": "^8.8.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-dropzone": "^14.3.8", + "react-icons": "^5.5.0", + "react-router-dom": "^7.5.0" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.21.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "vite": "^6.2.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.8.0.tgz", + "integrity": "sha512-z7kJlMW3IAETyq82LDKJqr++IeOvU728q9lkuTFjEIPUWxnB1OlmuPCF32fYurxOnOnJeFEZxjbEzq8xyP0aag==", + "dependencies": { + "@azure/msal-common": "15.3.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.3.0.tgz", + "integrity": "sha512-lh+eZfibGwtQxFnx+mj6cYWn0pwA8tDnn8CBs9P21nC7Uw5YWRwfXaXdVQSMENZ5ojRqR+NzRaucEo4qUvs3pA==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-react": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@azure/msal-react/-/msal-react-3.0.7.tgz", + "integrity": "sha512-77S3eVslJMAXNiLmdrJkJ/gJupjeTdUQinYfc8EzgvLuU5QuLng7Lb5qgSz9DuZfYhC2rbOqvrz4x7o0YBXlBA==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@azure/msal-browser": "^4.8.0", + "react": "^16.8.0 || ^17 || ^18" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "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.26.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", + "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.26.10", + "@babel/types": "^7.26.10", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", + "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", + "dev": true, + "dependencies": { + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", + "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.26.10" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz", + "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", + "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", + "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", + "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", + "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", + "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", + "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", + "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", + "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", + "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", + "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", + "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", + "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", + "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", + "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", + "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", + "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", + "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", + "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", + "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", + "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", + "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", + "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", + "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", + "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", + "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", + "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "dev": true, + "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, + "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.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "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.2.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz", + "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "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.0", + "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, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", + "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.12.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, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.37.0.tgz", + "integrity": "sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.37.0.tgz", + "integrity": "sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.37.0.tgz", + "integrity": "sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz", + "integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.37.0.tgz", + "integrity": "sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.37.0.tgz", + "integrity": "sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.37.0.tgz", + "integrity": "sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.37.0.tgz", + "integrity": "sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.37.0.tgz", + "integrity": "sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.37.0.tgz", + "integrity": "sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.37.0.tgz", + "integrity": "sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.37.0.tgz", + "integrity": "sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.37.0.tgz", + "integrity": "sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.37.0.tgz", + "integrity": "sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.37.0.tgz", + "integrity": "sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.37.0.tgz", + "integrity": "sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.37.0.tgz", + "integrity": "sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.37.0.tgz", + "integrity": "sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.37.0.tgz", + "integrity": "sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.37.0.tgz", + "integrity": "sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "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, + "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.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "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, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, + "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 + }, + "node_modules/@types/react": { + "version": "19.0.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.12.tgz", + "integrity": "sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==", + "dev": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz", + "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==", + "dev": true, + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", + "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", + "dev": true, + "dependencies": { + "@babel/core": "^7.26.0", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "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, + "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, + "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, + "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 + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/attr-accept": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", + "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "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 + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "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" + } + ] + }, + "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, + "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/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, + "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 + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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 + }, + "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 + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "engines": { + "node": ">=18" + } + }, + "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, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "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 + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.123", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz", + "integrity": "sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==", + "dev": true + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", + "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.1", + "@esbuild/android-arm": "0.25.1", + "@esbuild/android-arm64": "0.25.1", + "@esbuild/android-x64": "0.25.1", + "@esbuild/darwin-arm64": "0.25.1", + "@esbuild/darwin-x64": "0.25.1", + "@esbuild/freebsd-arm64": "0.25.1", + "@esbuild/freebsd-x64": "0.25.1", + "@esbuild/linux-arm": "0.25.1", + "@esbuild/linux-arm64": "0.25.1", + "@esbuild/linux-ia32": "0.25.1", + "@esbuild/linux-loong64": "0.25.1", + "@esbuild/linux-mips64el": "0.25.1", + "@esbuild/linux-ppc64": "0.25.1", + "@esbuild/linux-riscv64": "0.25.1", + "@esbuild/linux-s390x": "0.25.1", + "@esbuild/linux-x64": "0.25.1", + "@esbuild/netbsd-arm64": "0.25.1", + "@esbuild/netbsd-x64": "0.25.1", + "@esbuild/openbsd-arm64": "0.25.1", + "@esbuild/openbsd-x64": "0.25.1", + "@esbuild/sunos-x64": "0.25.1", + "@esbuild/win32-arm64": "0.25.1", + "@esbuild/win32-ia32": "0.25.1", + "@esbuild/win32-x64": "0.25.1" + } + }, + "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, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", + "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.23.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "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.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.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": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "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.19", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz", + "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "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.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "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, + "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, + "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, + "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 + }, + "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 + }, + "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 + }, + "node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "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, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/file-selector": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", + "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">= 12" + } + }, + "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, + "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, + "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 + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/framer-motion": { + "version": "12.7.3", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.7.3.tgz", + "integrity": "sha512-dNT4l5gEnUo2ytXLUBUf6AI21dZ77TMclDKE3ElaIHZ8m90nJ/NCcExW51zdSIaS0RhAS5iXcF7bEIxZe8XG2g==", + "dependencies": { + "motion-dom": "^12.7.3", + "motion-utils": "^12.7.2", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "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, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "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, + "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, + "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, + "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, + "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 + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "engines": { + "node": ">=14" + } + }, + "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==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "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, + "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 + }, + "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 + }, + "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 + }, + "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, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "engines": { + "node": ">=18" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "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, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "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 + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "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==", + "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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/motion": { + "version": "12.7.3", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.7.3.tgz", + "integrity": "sha512-EGhzIg7vj+USH9SLNLjHRzglldWEletUZTEtBVKW7IJF+1Ig3RI5LnJmHQBNutuOIyeUbcF36MrNFT00etlc3g==", + "dependencies": { + "framer-motion": "^12.7.3", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/motion-dom": { + "version": "12.7.3", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.7.3.tgz", + "integrity": "sha512-IjMt1YJHrvyvruFvmpmd6bGXXGCvmygrnvSb3aZ8KhOzF4H3PulU+cMBzH+U8TBJHjC/mnmJFRIA1Cu4vBfcBA==", + "dependencies": { + "motion-utils": "^12.7.2" + } + }, + "node_modules/motion-utils": { + "version": "12.7.2", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.7.2.tgz", + "integrity": "sha512-XhZwqctxyJs89oX00zn3OGCuIIpVevbTa+u82usWBC6pSHUd2AoNWiYa7Du8tJxJy9TFbZ82pcn5t7NOm1PHAw==" + }, + "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==" + }, + "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" + } + ], + "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 + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "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==", + "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, + "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, + "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, + "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, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/pg": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.14.1.tgz", + "integrity": "sha512-0TdbqfjwIun9Fm/r89oB7RFQ0bLgduAhiIqIXOsyKoiC/L54DbuAAzIEN/9Op0f1Po9X7iCPXGoa/Ah+2aI8Xw==", + "dependencies": { + "pg-connection-string": "^2.7.0", + "pg-pool": "^3.8.0", + "pg-protocol": "^1.8.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.7.0.tgz", + "integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.8.0.tgz", + "integrity": "sha512-VBw3jiVm6ZOdLBTIcXLNdSotb6Iy3uOCwDGFAksZCXmi10nyRvnP2v3jl4d+IsLYRyXf6o9hIm/ZtUzlByNUdw==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.8.0.tgz", + "integrity": "sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "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 + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-dropzone": { + "version": "14.3.8", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.3.8.tgz", + "integrity": "sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==", + "dependencies": { + "attr-accept": "^2.2.4", + "file-selector": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" + } + }, + "node_modules/react-icons": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "peerDependencies": { + "react": "*" + } + }, + "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==" + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.5.2.tgz", + "integrity": "sha512-9Rw8r199klMnlGZ8VAsV/I8WrIF6IyJ90JQUdboupx1cdkgYqwnrYjH+I/nY/7cA1X5zia4mDJqH36npP7sxGQ==", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0", + "turbo-stream": "2.4.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.5.2.tgz", + "integrity": "sha512-yk1XW8Fj7gK7flpYBXF3yzd2NbX6P7Kxjvs2b5nu1M04rb5pg/Zc4fGdBNTeT4eDYL2bvzWNyKaIMJX/RKHTTg==", + "dependencies": { + "react-router": "7.5.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.37.0.tgz", + "integrity": "sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.37.0", + "@rollup/rollup-android-arm64": "4.37.0", + "@rollup/rollup-darwin-arm64": "4.37.0", + "@rollup/rollup-darwin-x64": "4.37.0", + "@rollup/rollup-freebsd-arm64": "4.37.0", + "@rollup/rollup-freebsd-x64": "4.37.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.37.0", + "@rollup/rollup-linux-arm-musleabihf": "4.37.0", + "@rollup/rollup-linux-arm64-gnu": "4.37.0", + "@rollup/rollup-linux-arm64-musl": "4.37.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.37.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.37.0", + "@rollup/rollup-linux-riscv64-gnu": "4.37.0", + "@rollup/rollup-linux-riscv64-musl": "4.37.0", + "@rollup/rollup-linux-s390x-gnu": "4.37.0", + "@rollup/rollup-linux-x64-gnu": "4.37.0", + "@rollup/rollup-linux-x64-musl": "4.37.0", + "@rollup/rollup-win32-arm64-msvc": "4.37.0", + "@rollup/rollup-win32-ia32-msvc": "4.37.0", + "@rollup/rollup-win32-x64-msvc": "4.37.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup/node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==" + }, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "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, + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "dev": true, + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "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==" + }, + "node_modules/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==" + }, + "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, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "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" + } + ], + "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, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.3.tgz", + "integrity": "sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==", + "dev": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "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, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..a8fd2b9 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,41 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite --port 5176", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@azure/msal-browser": "^4.8.0", + "@azure/msal-react": "^3.0.7", + "axios": "^1.8.3", + "dotenv": "^16.0.3", + "framer-motion": "^12.7.3", + "fs": "^0.0.1-security", + "js-cookie": "^3.0.5", + "jsonwebtoken": "^9.0.2", + "jwt-decode": "^4.0.0", + "motion": "^12.7.3", + "pg": "^8.8.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-dropzone": "^14.3.8", + "react-icons": "^5.5.0", + "react-router-dom": "^7.5.0" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.21.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "vite": "^6.2.0" + } +} diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/server.ts b/frontend/server.ts new file mode 100644 index 0000000..0c790d0 --- /dev/null +++ b/frontend/server.ts @@ -0,0 +1,6 @@ +import fs from 'fs'; + +export const httpsConfig: { key: Buffer; cert: Buffer } = { + key: fs.readFileSync("C:\\Users\\Ida Dittrich\\OneDrive - ValueOn AG\\Desktop\\Django_React\\backend\\private.key"), + cert: fs.readFileSync("C:\\Users\\Ida Dittrich\\OneDrive - ValueOn AG\\Desktop\\Django_React\\backend\\cert.pem"), +}; \ No newline at end of file diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 0000000..e8e244f --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,43 @@ +import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; +import { ProtectedRoute } from "./auth/ProtectedRoute"; +import Login from './pages/Login'; +import Home from './pages/Home'; +import Dashboard from './pages/Home/Dashboard/Dashboard'; +import { AuthProvider } from './auth/Hooks/auth-provider'; +import RegisterOrganisation from './pages/Register/RegisterOrganisation'; +import RegisterPricing from './pages/Register/RegisterPricing'; +import RegisterSummary from './pages/Register/RegisterSummary'; +import Mitglieder from './pages/Home/Mitglieder/Mitglieder'; +import Organisation from './pages/Home/Organisation/Organisation'; +import Dateien from './pages/Home/Dateien/Dateien'; + +function App() { + return ( + + + + {/* Public route */} + } /> + } /> + } /> + } /> + + {/* Protected routes */} + + + + }> + {/* Child route of Home - note the relative path */} + } /> + } /> + } /> + } /> + + + + + ); +} + +export default App; \ No newline at end of file diff --git a/frontend/src/api.ts b/frontend/src/api.ts new file mode 100644 index 0000000..3d596b8 --- /dev/null +++ b/frontend/src/api.ts @@ -0,0 +1,126 @@ +// api.ts +import axios from 'axios'; + +const API_URL = import.meta.env?.VITE_API_URL || 'http://127.0.0.1:8000'; + +const api = axios.create({ + baseURL: API_URL, + headers: { + 'Content-Type': 'application/json', + }, +}); + +export async function authorizedGet(endpoint: string, getToken: () => Promise) { + try { + const token = await getToken(); + // Ensure that token is not null or undefined + if (!token) { + throw new Error("No token found"); + } + + const response = await api.get(endpoint, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + return response; // Axios already wraps the response, no need to call .data here + } catch (err) { + console.error("API request failed:", err); + throw err; + } +} + +export async function authorizedDelete(endpoint: string, getToken: () => Promise) { + try { + const token = await getToken(); + // Ensure that token is not null or undefined + if (!token) { + throw new Error("No token found"); + } + + const response = await api.delete(endpoint, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + return response; // Axios already wraps the response, no need to call .data here + } catch (err) { + console.error("API request failed:", err); + throw err; + } +} + +export async function authorizedPut(endpoint: string, data: any, getToken: () => Promise) { + try { + const token = await getToken(); + // Ensure that token is not null or undefined + if (!token) { + throw new Error("No token found"); + } + + const response = await api.put(endpoint, data, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + return response; + } catch (err) { + console.error("API request failed:", err); + throw err; + } +} + +export async function authorizedPost(endpoint: string, getToken: () => Promise, data: any) { + try { + const token = await getToken(); + // Ensure that token is not null or undefined + if (!token) { + throw new Error("No token found"); + } + + const response = await api.post(endpoint, data, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + return response; + } catch (err) { + console.error("API request failed:", err); + throw err; + } +} + +export async function downloadFile(fileId: number, getToken: () => Promise) { + try { + const token = await getToken(); + if (!token) { + throw new Error("No token found"); + } + + const response = await api.get(`/api/user/files/${fileId}/download`, { + headers: { + Authorization: `Bearer ${token}`, + }, + responseType: 'blob', // Important for file downloads + }); + + // Create a blob URL and trigger download + const blob = new Blob([response.data]); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = response.headers['content-disposition']?.split('filename=')[1] || 'download'; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(a); + + return response; + } catch (err) { + console.error("File download failed:", err); + throw err; + } +} + +export default api; diff --git a/frontend/src/assets/Frame 43.png b/frontend/src/assets/Frame 43.png new file mode 100644 index 0000000000000000000000000000000000000000..309d1342c856685b95b9df17ea35e25077a1a3cd GIT binary patch literal 178836 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 k6#B3TC=C8eYZneF-fjPICtV$wdhWuJ^yg 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/LogoPowerOn.png b/frontend/src/assets/LogoPowerOn.png new file mode 100644 index 0000000000000000000000000000000000000000..b881f67722577eab8b693a91454edbadf06e7fb9 GIT binary patch literal 1556 zcmbu9`8yK~0LQl|p<-A%)Jx8_r&^C4uPbdf+fr&wW3+U+61iI2Xm1la5{3~&ucNk! z(Vlp{uD4?->2M@sqRgC@ z$Bi4-dX{K5xHj6C2|iH(fUe=M00H^@ZEGhm$^(x9RJ}5huYqPD`WPAjs7cpdILCm6ey{2+M=Z zPZTFhS!-bC0P$( zA|hV@M4y+4-6(-K7aKo$4eK?in8V0-t1~p0s{Wx5R%g&Ohgtan*-UGz(mSbVtao}8 ziE_5IK5b_e-mK<4!%db1NVZe*-oTR$)ZcQUIVlA?SV)hlzB@NlPd6;0_Jm1f8}Rmv z@~Cc9MHtG~L3MApRsG=hnCS{tTTjm=6iO@Om>bp4kBd2jMM57*XY#;v7EP7Sxjsi- zhv;*xMR&~SygS_^y5`uoruwJME|SNU588Mtt6C=n@(_uF0zN$Ji}f}N+HngEm(9;( z1$}@LKF`RnvD%hp%5~-b044Dze(q;j8~qijW6_ZJp6h$v|_BC8)EwP$rB~rMKOIE2yy8_`XJ60FMfKG9XK5i z%(30l6QvbC}kmfAdc2Q zI4GH_bED6F9_XDtAgByGa)cc7+rHD?RF4 zu2D2N9>M$g%lv`*J5P~*76u44T_l7n-GqM& z@)siqPQAl{%YNX$qbWR8GmFiS~T}(v*&3CgZUc4^QG-c>vl|LGR2_lSGR+O9b*q0 zHfb+!W=L`p+7;;{Auqe`mJAYJV&}J|Y$P3ONz|}T-wGymH4enbb~} zsgo3SR?t$o5|0CdqXV~64_^y;el_E5G1ZqP|UrC&f^4 zEOx4Prlju0rjM$vK`&*&`!clf^%p>lXucfFi1D>**~s<^VpV**w}j?;la2{5_iCkA zYwo(tR%&xZ^rSSKP#H{v!@MsyWQ|Fs9Gk-{uDDB=oD@TOoQ~X%VW$k{V{hV~8qZb# zLdrRPDW^6ed&P$GHEKzYsgyxlUpbHH0wxw|Ve>lrS0|c`&4=DZZnHQ^Hkn_j7Z25X zc~|dOVnqlg_|L?e8ew;U+pyAMdAK!r1Bn}|r+_6;{f6l)~;q9jY literal 0 HcmV?d00001 diff --git a/frontend/src/assets/background.png b/frontend/src/assets/background.png new file mode 100644 index 0000000000000000000000000000000000000000..d2521b984ea35c7ef352240519d1ed3e8ead57dc GIT binary patch literal 1673 zcmZ`(4OEg>7{-+@{5dXXspTwBnzK%VAu5HKKP4Dq)6$bO9oy72M-bk| zBr4|o%S^Cb`A4Ey(K(2gq-c(m88RfNM&$q4_kpvv)9yLC|pr^1$$q=1!+S=#q){Q?sfeWC=O<+VQ9X$%v-y-yf};6b#C06 z$vMHw3Y|U}CACa!|K9vdvZ*L0toEr{XGO19_boTUlgK&m(2L3v>J^e2o?Dy^tPtL{ zgO-JqK0obsJg>avkl3Mwy(v3aXa4^r2^1OpOeFyDF3 zkwY?ekA9F-4`ALc;t1RAQ{S}Y6kP?-nrPz^;H8L@ec#ztpKb&*ZW-7n3%wb-m;EsS z(kg+OB|cKopeHR-RXFX^U;CMk43oPA{_NqJlt^>tH^*I`xj}0-Gl+W9TB>oWEs=S( zzAKEf=VLS4(TlV(E3ul?)E0~Y3QR5Fi%VutuC6Db+)RQK0gTfd>*CRLdj0%x}au{*ZCzrmay_igyjXwaMBTjF`Oc~k< z3iu*#795KZ>$t;tV(uWaOE`%O_kL2W(E(O*KBp50IT95txHMnUjat#hhdBbjYFpWy z1A9vei`==_J8HRTQq!E4^#T00 zcM94A9SMEko}@_niai0+&-6d$YO4h{`TE{A&< z7Q=q;8qift5;O7%df~UO?mz%-wibcB)>Gu6bT=0_9|bQY&|A){-U2Qf<;^b!^%oLb zgH2_uDk#E9mi8}u<_iC@r`UlT=^{8>zT!yO6zMgRZ+ literal 0 HcmV?d00001 diff --git a/frontend/src/assets/react.svg b/frontend/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/frontend/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/auth/Hooks/auth-provider.tsx b/frontend/src/auth/Hooks/auth-provider.tsx new file mode 100644 index 0000000..0d078bc --- /dev/null +++ b/frontend/src/auth/Hooks/auth-provider.tsx @@ -0,0 +1,110 @@ +import { + AuthenticationResult, + EventType, + PublicClientApplication, + InteractionStatus + } from "@azure/msal-browser"; + import { msalConfig } from "../auth-config"; + import { MsalProvider } from "@azure/msal-react"; + import { ReactNode, useEffect, useState } from "react"; + + interface AuthProviderProps { + children: ReactNode; + } + + export const AuthProvider = ({ children }: AuthProviderProps) => { + const [msalInstance, setMsalInstance] = useState(null); + const [isInitialized, setIsInitialized] = useState(false); + const [loginAttempted, setLoginAttempted] = useState(false); + + useEffect(() => { + const msalApp = new PublicClientApplication(msalConfig); + + const initializeMsal = async () => { + try { + // Set event handlers first, so we catch all events + msalApp.addEventCallback((event) => { + if (event.eventType === EventType.LOGIN_SUCCESS) { + const payload = event?.payload as AuthenticationResult; + if (payload?.account) { + msalApp.setActiveAccount(payload.account); + console.log("Login successful"); + } + } else if (event.eventType === EventType.LOGIN_FAILURE) { + console.error("Login failed:", event.error); + } + }); + + // Initialize MSAL + await msalApp.initialize(); + msalApp.enableAccountStorageEvents(); + + // Handle any redirect response + const response = await msalApp.handleRedirectPromise(); + if (response) { + // If we have a response, we've completed a redirect flow + console.log("Redirect completed successfully"); + if (response.account) { + msalApp.setActiveAccount(response.account); + } + } + + // Check for accounts + const accounts = msalApp.getAllAccounts(); + if (accounts.length > 0) { + msalApp.setActiveAccount(accounts[0]); + } + + setMsalInstance(msalApp); + setIsInitialized(true); + } catch (err) { + console.error("MSAL initialization failed", err); + } + }; + + initializeMsal(); + }, []); + + // Separate login effect with protection against loops + useEffect(() => { + if (!isInitialized || !msalInstance || loginAttempted) return; + + const accounts = msalInstance.getAllAccounts(); + if (accounts.length === 0) { + // Set a flag to avoid repeated login attempts + setLoginAttempted(true); + + // Check local/session storage for redirect in progress + const inProgress = sessionStorage.getItem("msal.interaction.status"); + if (inProgress === "login" || inProgress === "handleRedirect") { + console.log("Login already in progress according to session storage"); + return; + } + + console.log("No accounts found, triggering login..."); + + // Use a small timeout to ensure everything is ready + const loginTimer = setTimeout(() => { + msalInstance.loginRedirect({ + scopes: ["openid", "profile", "email"] + }).catch(error => { + console.error("Login redirect failed:", error); + // Reset the flag if login fails + setLoginAttempted(false); + }); + }, 500); + + return () => clearTimeout(loginTimer); + } + }, [isInitialized, msalInstance, loginAttempted]); + + if (!isInitialized || !msalInstance) { + return
    Loading authentication...
    ; + } + + return {children}; + }; + + export function useAuthProvider() { + return { AuthProvider }; + } \ No newline at end of file diff --git a/frontend/src/auth/Hooks/delete-user.ts b/frontend/src/auth/Hooks/delete-user.ts new file mode 100644 index 0000000..7b5aa54 --- /dev/null +++ b/frontend/src/auth/Hooks/delete-user.ts @@ -0,0 +1,14 @@ +import { authorizedDelete } from "../../api"; + +async function deleteUser(userId: string, token: string): Promise { + try { + const response = await authorizedDelete(`/api/user/${userId}`, async () => token); + // You can add additional handling here if needed + console.log("User deleted successfully:", response.status); + } catch (error) { + console.error("Failed to delete user:", error); + throw error; + } +} + +export default deleteUser; diff --git a/frontend/src/auth/Hooks/get-all-users.ts b/frontend/src/auth/Hooks/get-all-users.ts new file mode 100644 index 0000000..cbb4d6d --- /dev/null +++ b/frontend/src/auth/Hooks/get-all-users.ts @@ -0,0 +1,42 @@ +import { useEffect, useState } from 'react'; +import { authorizedGet } from '../../api'; +import { useAuthToken } from '../../auth/Hooks/use-auth-token'; + +type User = { + id: string; + name: string; + azure_id: string; + created_at: string; + role: string; + email: string; + phone: string; + position: string; +}; + +export const useOrgUsers = () => { + const [users, setUsers] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + const { getToken } = useAuthToken(); + + const fetchUsers = async () => { + setLoading(true); + setError(null); + try { + const response = await authorizedGet("/api/organisation/users", getToken); + console.log(response) + setUsers(response.data) + } catch (err) { + setError("Failed to fetch users"); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + fetchUsers(); + }, []); + + return { users, loading, error, refetch: fetchUsers }; +}; diff --git a/frontend/src/auth/Hooks/use-auth-token.ts b/frontend/src/auth/Hooks/use-auth-token.ts new file mode 100644 index 0000000..ab031ca --- /dev/null +++ b/frontend/src/auth/Hooks/use-auth-token.ts @@ -0,0 +1,39 @@ +// src/hooks/useAuthToken.ts +import { useMsal } from "@azure/msal-react"; +import { useCallback } from "react"; +import { InteractionRequiredAuthError } from "@azure/msal-browser"; + +const tokenRequest = { + scopes: ["api://24cd6c8a-b592-4905-a5ba-d5fa9f911154/user_impersonation"], // Adjust scopes as needed +}; + +export function useAuthToken() { + const { instance, accounts } = useMsal(); + + const getToken = useCallback(async () => { + if (accounts.length === 0) throw new Error("No signed-in account found"); + + try { + const response = await instance.acquireTokenSilent({ + ...tokenRequest, + account: accounts[0], + }); + return response.accessToken; + } catch (err: any) { + if (err instanceof InteractionRequiredAuthError) { + console.warn("Silent token failed, redirecting for interactive login..."); + // Trigger full-page redirect to login + instance.acquireTokenRedirect({ + ...tokenRequest, + account: accounts[0], // you might omit this if it's undefined + }); + return ""; // won't reach this anyway + } + + console.error("Token acquisition failed unexpectedly:", err); + throw err; + } + }, [instance, accounts]); + + return { getToken }; +} diff --git a/frontend/src/auth/Hooks/use-msal-login.ts b/frontend/src/auth/Hooks/use-msal-login.ts new file mode 100644 index 0000000..cf52792 --- /dev/null +++ b/frontend/src/auth/Hooks/use-msal-login.ts @@ -0,0 +1,30 @@ +import { useMsal } from "@azure/msal-react"; +import { useState } from "react"; +import { loginRequest } from "../auth-config"; + +export const useMsalLogin = () => { + const { instance } = useMsal(); + const [isLoggingIn, setIsLoggingIn] = useState(false); + const [error, setError] = useState(null); + + const login = async () => { + setIsLoggingIn(true); + setError(null); + try { + console.log("Starting login process..."); + await instance.loginPopup(loginRequest); // or loginRedirect + console.log("Login successful"); + } catch (err: any) { + console.error("Login failed:", err); + setError(err?.message || "Login failed"); + } finally { + setIsLoggingIn(false); + } + }; + + return { + login, + isLoggingIn, + error, + }; +}; diff --git a/frontend/src/auth/Hooks/use-user-files.ts b/frontend/src/auth/Hooks/use-user-files.ts new file mode 100644 index 0000000..5fe77ab --- /dev/null +++ b/frontend/src/auth/Hooks/use-user-files.ts @@ -0,0 +1,41 @@ +import { useEffect, useState } from 'react'; +import { authorizedGet } from '../../api'; +import { useAuthToken } from './use-auth-token'; + +type File = { + id: number; + file_name: string; + action: string; + user_id: number; + prompt_id: number; + meta_data: Record | null; + created_at: string; +}; + +export const useUserFiles = () => { + const [files, setFiles] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + const { getToken } = useAuthToken(); + + const fetchFiles = async () => { + setLoading(true); + setError(null); + try { + const response = await authorizedGet("/api/user/files", getToken); + setFiles(response.data); + } catch (err) { + setError("Failed to fetch files"); + console.error("Error fetching files:", err); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + fetchFiles(); + }, []); + + return { files, loading, error, refetch: fetchFiles }; +}; \ No newline at end of file diff --git a/frontend/src/auth/Hooks/use-user-info.ts b/frontend/src/auth/Hooks/use-user-info.ts new file mode 100644 index 0000000..17f5187 --- /dev/null +++ b/frontend/src/auth/Hooks/use-user-info.ts @@ -0,0 +1,33 @@ +import { useMsal } from "@azure/msal-react"; + +interface UserInfo { + name?: string; + email?: string; + oid?: string; + tenantId?: string; + rawClaims?: Record; +} + +export const useUserInfo = (): UserInfo => { + const { instance } = useMsal(); + const account = instance.getActiveAccount(); + + if (!account) return {}; + + const idTokenClaims = account.idTokenClaims as { + name?: string; + preferred_username?: string; + email?: string; + oid?: string; + tid?: string; + [key: string]: any; + }; + + return { + name: idTokenClaims?.name, + email: idTokenClaims?.email || idTokenClaims?.preferred_username, + oid: idTokenClaims?.oid, + tenantId: idTokenClaims?.tid, + rawClaims: idTokenClaims, + }; +}; diff --git a/frontend/src/auth/Hooks/use-user-prompts.ts b/frontend/src/auth/Hooks/use-user-prompts.ts new file mode 100644 index 0000000..6aa76c4 --- /dev/null +++ b/frontend/src/auth/Hooks/use-user-prompts.ts @@ -0,0 +1,41 @@ +import { useEffect, useState } from 'react'; +import { authorizedGet } from '../../api'; +import { useAuthToken } from './use-auth-token'; + +type Prompt = { + id: string; + user_id: string; + prompt_title: string; + workflow_manager_plan: string; + result: string; + created_at: string; + user_prompt: string; +}; + +export const useUserPrompts = () => { + const [prompts, setPrompts] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + const { getToken } = useAuthToken(); + + const fetchPrompts = async () => { + setLoading(true); + setError(null); + try { + const response = await authorizedGet("/api/user/prompts", getToken); + setPrompts(response.data); + } catch (err) { + setError("Failed to fetch prompts"); + console.error("Error fetching prompts:", err); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + fetchPrompts(); + }, []); + + return { prompts, loading, error, refetch: fetchPrompts }; +}; \ No newline at end of file diff --git a/frontend/src/auth/ProtectedRoute.tsx b/frontend/src/auth/ProtectedRoute.tsx new file mode 100644 index 0000000..51923a8 --- /dev/null +++ b/frontend/src/auth/ProtectedRoute.tsx @@ -0,0 +1,40 @@ +import { useMsal } from "@azure/msal-react"; +import { Navigate, useLocation } from "react-router-dom"; +import { ReactNode, useEffect, useState } from "react"; + +interface ProtectedRouteProps { + children: ReactNode; + redirectPath?: string; +} + +export const ProtectedRoute = ({ + children, + redirectPath = "/login" +}: ProtectedRouteProps) => { + const { accounts } = useMsal(); + const location = useLocation(); + const [isChecking, setIsChecking] = useState(true); + + useEffect(() => { + // Give a small delay to ensure MSAL is fully initialized + const timer = setTimeout(() => { + setIsChecking(false); + }, 100); + + return () => clearTimeout(timer); + }, []); + + // If still checking, show loading + if (isChecking) { + return
    Checking authentication...
    ; + } + + // Check if user is authenticated + if (accounts.length === 0) { + console.log("No accounts found, redirecting to login"); + return ; + } + + console.log("User is authenticated, rendering protected content"); + return <>{children}; +}; \ No newline at end of file diff --git a/frontend/src/auth/auth-config.ts b/frontend/src/auth/auth-config.ts new file mode 100644 index 0000000..a06c7e8 --- /dev/null +++ b/frontend/src/auth/auth-config.ts @@ -0,0 +1,45 @@ +import { LogLevel } from '@azure/msal-browser'; + +export const msalConfig = { + auth: { + clientId: '24cd6c8a-b592-4905-a5ba-d5fa9f911154', + authority: 'https://login.microsoftonline.com/6a51aaeb-2467-4186-9504-2a05aedc591f/', + redirectUri: '/', + postLogoutRedirectUri: '/', + navigateToLoginRequestUrl: false, + }, + cache: { + cacheLocation: 'localStorage', + storeAuthStateInCookie: false, + }, + system: { + loggerOptions: { + loggerCallback: (level: any, message: any, containsPii: any) => { + if (containsPii) { + return; + } + switch (level) { + case LogLevel.Error: + console.error(message); + return; + case LogLevel.Info: + console.info(message); + return; + case LogLevel.Verbose: + console.debug(message); + return; + case LogLevel.Warning: + console.warn(message); + return; + default: + return; + } + }, + }, + }, +}; + + +export const loginRequest = { + scopes: ["openid", "profile", "email", "api://24cd6c8a-b592-4905-a5ba-d5fa9f911154/user_impersonation"], +}; \ No newline at end of file diff --git a/frontend/src/components/DashboardConfig/DashboardConfigAgents.module.css b/frontend/src/components/DashboardConfig/DashboardConfigAgents.module.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/components/DashboardConfig/DashboardConfigAgents.tsx b/frontend/src/components/DashboardConfig/DashboardConfigAgents.tsx new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/components/DashboardConfig/DashboardConfigDocument.module.css b/frontend/src/components/DashboardConfig/DashboardConfigDocument.module.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/components/DashboardConfig/DashboardConfigDocument.tsx b/frontend/src/components/DashboardConfig/DashboardConfigDocument.tsx new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/components/DashboardConfig/DashboardConfigSettings.module.css b/frontend/src/components/DashboardConfig/DashboardConfigSettings.module.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/components/DashboardConfig/DashboardConfigSettings.tsx b/frontend/src/components/DashboardConfig/DashboardConfigSettings.tsx new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/components/DashboardPrompts/DashboardPrompt.module.css b/frontend/src/components/DashboardPrompts/DashboardPrompt.module.css new file mode 100644 index 0000000..9734621 --- /dev/null +++ b/frontend/src/components/DashboardPrompts/DashboardPrompt.module.css @@ -0,0 +1,51 @@ +.dashboard_prompt { + display: flex; + padding: 20px; + flex-direction: column; + align-self: stretch; + border-radius: 30px; + border: 1px solid var(--f-1-f-1-f-1, #F1F1F1); + background: var(--Grayscale-True-White, #FFF); + position: relative; + box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10); + height: 100%; +} + +.prompt_button_div { + display: flex; + align-self: stretch; + gap: 30px; +} + +.prompt_button { + text-align: center; + font-size: 14px; + font-style: normal; + font-weight: 500; + line-height: normal; + border: none; + background: none; + outline: none; + color: var(--Grayscale-Black, #24262B); +} + +.prompt_button_inactive { + opacity: 50%; +} + +.horizontalLine { + width: 100%; + background-color: black; + height: 2px; + margin-top: 19px; +} + +.horizontalLineLight { + width: calc(100%); + background-color: #F1F1F1; + height: 2px; + margin-top: 39px; + margin-left: -20px; + position: absolute; +} + diff --git a/frontend/src/components/DashboardPrompts/DashboardPrompt.tsx b/frontend/src/components/DashboardPrompts/DashboardPrompt.tsx new file mode 100644 index 0000000..414131b --- /dev/null +++ b/frontend/src/components/DashboardPrompts/DashboardPrompt.tsx @@ -0,0 +1,48 @@ +import React, { useState, useEffect } from "react"; +import { useSearchParams } from "react-router-dom"; + +import DashboardPromptArea from './DashboardPromptArea/DashboardPromptArea'; +import DashboardPromptSet from './DashboardPromptSet/DashboardPromptSet'; + +import styles from './DashboardPrompt.module.css'; + +const DashboardPrompt: React.FC = () => { + const [activeTab, setActiveTab] = useState("Prompt Area"); + const [searchParams] = useSearchParams(); + + useEffect(() => { + // If there's an expandedPrompt parameter, switch to the Prompt Set tab + const expandedPrompt = searchParams.get('expandedPrompt'); + const promptId = searchParams.get('promptId'); + + if (expandedPrompt) { + setActiveTab("Prompt Set"); + } else if (promptId) { + setActiveTab("Prompt Area"); + } + }, [searchParams]); + + return ( +
    +
    + {["Prompt Area", "Prompt Set"].map((tab) => ( +
    + + {activeTab === tab &&
    } +
    + ))} +
    +
    +
    + {activeTab === "Prompt Area" ? : } +
    +
    + ) +} + +export default DashboardPrompt; \ No newline at end of file diff --git a/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptArea.module.css b/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptArea.module.css new file mode 100644 index 0000000..edd64e3 --- /dev/null +++ b/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptArea.module.css @@ -0,0 +1,37 @@ +.promptArea { + display: flex; + flex-direction: column; + height: 100%; + position: relative; +} + +.cancelContainer { + position: absolute; + top: 10px; + right: 10px; + z-index: 10; +} + +.cancelButton { + display: flex; + align-items: center; + gap: 4px; + padding: 8px 16px; + background: white; + border: 1px solid #ddd; + border-radius: 20px; + color: #666; + font-size: 14px; + cursor: pointer; + transition: all 0.2s; + font-family: Arial, Helvetica, sans-serif; +} + +.cancelButton:hover { + background-color: #f5f5f5; + border-color: #ccc; +} + +.cancelIcon { + font-size: 16px; +} \ No newline at end of file diff --git a/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptArea.tsx b/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptArea.tsx new file mode 100644 index 0000000..5e9f666 --- /dev/null +++ b/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptArea.tsx @@ -0,0 +1,69 @@ +import { useState, useRef } from "react"; +import { useSearchParams, useNavigate } from "react-router-dom"; +import DashboardPromptAreaMessage from './DashboardPromptAreaMessage'; +import DashboardPromptAreaChat from './DashboardPromptAreaChat'; +import { useAuthToken } from "../../../auth/Hooks/use-auth-token"; +import { authorizedGet } from "../../../api"; +import styles from './DashboardPromptArea.module.css'; +import { IoClose } from 'react-icons/io5'; + +function DashboardPromptArea() { + const [messages, setMessages] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const [searchParams] = useSearchParams(); + const navigate = useNavigate(); + const messagesEndRef = useRef(null); + const { getToken } = useAuthToken(); + + const handleCancel = () => { + navigate('/dashboard'); + }; + + const fetchMessages = async () => { + setLoading(true); + setError(null); + try { + const response = await authorizedGet("/api/messages/", getToken); + setMessages(response.data); + } catch (err) { + console.error("Error fetching messages:", err); + setError("Failed to fetch messages"); + } finally { + setLoading(false); + } + }; + + const addMessage = (newMessage: any) => { + setMessages((prevMessages) => [...prevMessages, newMessage]); + }; + + return ( +
    + {searchParams.get('promptId') && ( +
    + +
    + )} + + +
    +
    + ); +} + +export default DashboardPromptArea; diff --git a/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaChat.module.css b/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaChat.module.css new file mode 100644 index 0000000..02cf78f --- /dev/null +++ b/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaChat.module.css @@ -0,0 +1,29 @@ +.messages_container { + display: flex; + flex-direction: column; + align-items: flex-start; /* Align messages to the left */ + width: 100%; + padding: 10px; + width: calc(100% - 40px); + height: calc(100% - 100px); + overflow-y: auto; + margin-bottom: 12px; + } + + +.message_item { + margin-bottom: 10px; + } + +.message_content { + display: inline-block; /* Ensures the div is only as wide as the message content */ + background-color: var(--Grayscale-Light-Gray, #F9F9F9); /* Background color for the message */ + padding: 9px 14px; + border-radius: 10px; /* Optional: for rounded corners */ + color: #000; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: normal; + } \ No newline at end of file diff --git a/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaChat.tsx b/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaChat.tsx new file mode 100644 index 0000000..a368519 --- /dev/null +++ b/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaChat.tsx @@ -0,0 +1,169 @@ +import React, { useEffect, useState } from "react"; +import { useSearchParams } from "react-router-dom"; +import { useAuthToken } from "../../../auth/Hooks/use-auth-token"; +import styles from "./DashboardPromptAreaChat.module.css"; + +function DashboardPromptAreaChat({ messages: propMessages, loading: propLoading, error: propError }: any) { + const [messages, setMessages] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const [searchParams] = useSearchParams(); + const { getToken } = useAuthToken(); + + const promptId = searchParams.get('promptId'); + const promptText = searchParams.get('promptText'); + + useEffect(() => { + const fetchResponse = async () => { + if (promptId && promptText) { + setLoading(true); + setError(null); + + // Initialize with the user's prompt + setMessages([{ + id: promptId, + content: promptText, + created_at: new Date().toISOString(), + type: 'user' + }]); + + try { + const token = await getToken(); + if (!token) { + throw new Error('No authentication token available'); + } + + console.log('Making request with token:', token); + + const response = await fetch( + `http://localhost:8000/api/prompts/?promptText=${encodeURIComponent(promptText)}`, + { + method: 'GET', + headers: { + 'Authorization': `Bearer ${token}`, + 'Accept': 'text/event-stream', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive', + } + } + ); + + console.log('Response status:', response.status); + console.log('Response headers:', Object.fromEntries(response.headers.entries())); + + if (!response.ok) { + const errorText = await response.text(); + console.error('Error response:', errorText); + throw new Error(`HTTP error! status: ${response.status}, message: ${errorText}`); + } + + const reader = response.body?.getReader(); + if (!reader) { + throw new Error('No reader available'); + } + + let fullContent = ''; + let buffer = ''; + + while (true) { + const { done, value } = await reader.read(); + if (done) break; + + // Convert the Uint8Array to a string + const chunk = new TextDecoder().decode(value); + console.log('Received chunk:', chunk); + buffer += chunk; + + // Process complete SSE messages + const lines = buffer.split('\n\n'); + buffer = lines.pop() || ''; // Keep the last incomplete chunk in the buffer + + for (const line of lines) { + if (line.startsWith('data: ')) { + try { + const jsonStr = line.slice(6); // Remove 'data: ' prefix + console.log('Processing SSE data:', jsonStr); + const data = JSON.parse(jsonStr); + if (data.content) { + fullContent += data.content; + // Update the message with the accumulated content + setMessages(prevMessages => { + const lastMessage = prevMessages[prevMessages.length - 1]; + if (lastMessage && lastMessage.type === 'assistant') { + return [ + ...prevMessages.slice(0, -1), + { + ...lastMessage, + content: fullContent + } + ]; + } else { + return [ + ...prevMessages, + { + id: `${promptId}-response`, + content: fullContent, + created_at: new Date().toISOString(), + type: 'assistant' + } + ]; + } + }); + } + } catch (err) { + console.error('Error parsing SSE data:', err, 'Raw line:', line); + } + } + } + } + } catch (err) { + console.error('Error in fetchResponse:', err); + setError(err instanceof Error ? err.message : 'Failed to connect to server'); + } finally { + setLoading(false); + } + } else if (propMessages) { + // Use messages from props if no prompt is being processed + setMessages(propMessages); + setLoading(propLoading); + setError(propError); + } else { + setLoading(false); + } + }; + + fetchResponse(); + }, [promptId, promptText, propMessages, propLoading, propError]); + + return ( +
    + {loading ? ( +
    +

    Loading messages...

    +
    + ) : error ? ( +
    +

    Error: {error}

    +
    + ) : ( + <> + {messages && messages.length > 0 ? ( +
    + {messages.map((message: any) => ( +
    +
    + {message.content} +
    +
    + ))} +
    + ) : ( +

    No messages found.

    + )} + + )} +
    + ); +} + +export default DashboardPromptAreaChat; diff --git a/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaMessage.module.css b/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaMessage.module.css new file mode 100644 index 0000000..fd514b7 --- /dev/null +++ b/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaMessage.module.css @@ -0,0 +1,27 @@ +.messageField { + display: flex; + height: 70px; + width: 100%; + border-radius: 12px; + border: 1px solid var(--f-1-f-1-f-1, #F1F1F1); +} + +.inputField { + height: 70px; + padding: 15px 24px 0 15px; + width: calc(100% - 40px); + color: #000; + font-size: 12px; + font-style: normal; + font-weight: 400; + opacity: 0.4; + resize: none; + overflow: hidden; + font-family: Helvetica; + border: none; +} + +.inputButton { + height: 40px; + width: 40px; +} \ No newline at end of file diff --git a/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaMessage.tsx b/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaMessage.tsx new file mode 100644 index 0000000..3370121 --- /dev/null +++ b/frontend/src/components/DashboardPrompts/DashboardPromptArea/DashboardPromptAreaMessage.tsx @@ -0,0 +1,71 @@ +import React, { useState } from "react"; +import { useAuthToken } from "../../../auth/Hooks/use-auth-token"; +import api from "../../../api"; +import styles from "./DashboardPromptAreaMessage.module.css"; + +interface DashboardPromptAreaMessageProps { + addMessage: (newMessage: any) => void; +} + +function DashboardPromptAreaMessage({ addMessage }: DashboardPromptAreaMessageProps) { + const [message, setMessage] = useState(""); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(""); + + const { getToken } = useAuthToken(); + + const sendMessage = async () => { + if (!message.trim()) return; + + setLoading(true); + setError(""); + + try { + const token = await getToken(); + + const response = await api.post( + '/api/messages/create', + { content: message.trim() }, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + + addMessage(response.data); + setMessage(""); + } catch (error: unknown) { + console.error("Error sending message:", error); + if (error instanceof Error) { + setError(`Error: ${error.message}`); + } else { + setError("An unexpected error occurred"); + } + } finally { + setLoading(false); + } + }; + + return ( +
    +