From 8e78b8cb47fa9b66194c828b4df4d6f93d1bb5f4 Mon Sep 17 00:00:00 2001 From: DeOwl Date: Mon, 16 Mar 2026 22:05:19 +0300 Subject: [PATCH] Initial commit --- .gitignore | 24 + README.md | 43 + eslint.config.js | 23 + index.html | 14 + package-lock.json | 4356 +++++++++++++++++ package.json | 43 + public/Quicking.otf | Bin 0 -> 21984 bytes public/bitmap.png | Bin 0 -> 39212 bytes public/silent-check-sso.html | 8 + src/Api/ConvertBackendCalls.tsx | 46 + src/Api/Keycloak/Keycloak.tsx | 28 + src/App.css | 27 + src/App.tsx | 104 + .../CardWithButton/CardWithButton.css | 58 + .../CardWithButton/CardWithButton.tsx | 36 + src/Components/CodeTextArea/CodeTextArea.tsx | 85 + src/Components/CustomButton/CustomButton.css | 105 + src/Components/CustomButton/CustomButton.tsx | 62 + src/Components/Layout/Header/Header.css | 23 + src/Components/Layout/Header/Header.tsx | 33 + src/Components/Layout/Sidebar/Sidebar.css | 64 + src/Components/Layout/Sidebar/Sidebar.tsx | 165 + .../ListCard/ExperimentsListCard.css | 50 + .../ListCard/ExperimentsListCard.tsx | 120 + .../MoleculeViewer/MoleculeViewer.css | 22 + .../MoleculeViewer/MoleculeViewer.tsx | 269 + .../MoleculeViewer/MoleculeViewerMenu.tsx | 29 + .../PaginationContainer.css | 16 + .../PaginationContainer.tsx | 12 + src/Components/StripedBg/Background.css | 45 + src/Components/StripedBg/Background.tsx | 13 + src/GlobalVars.ts | 11 + src/Modals/NewExperiment/NewExperiment.css | 0 src/Modals/NewExperiment/NewExperiment.tsx | 116 + src/Modals/NewMolecule/NewMolecule.css | 3 + src/Modals/NewMolecule/NewMolecule.tsx | 243 + .../DocumentationPage/DocumentationPage.css | 26 + .../DocumentationPage/DocumentationPage.tsx | 103 + src/Pages/ExperimentsPage/ExperimentPage.css | 16 + src/Pages/ExperimentsPage/ExperimentPage.tsx | 108 + src/Pages/ExperimentsPage/ExperimentsPage.css | 14 + src/Pages/ExperimentsPage/ExperimentsPage.tsx | 67 + src/Pages/ExperimentsPage/MoleculePage.css | 65 + src/Pages/ExperimentsPage/MoleculePage.tsx | 113 + src/Pages/MainPage/MainPage.css | 41 + src/Pages/MainPage/MainPage.tsx | 63 + src/Pages/TeamsPage/TeamsPage.css | 4 + src/Pages/TeamsPage/TeamsPage.tsx | 22 + src/Pages/UserPage/UserPage.css | 12 + src/Pages/UserPage/UserPage.tsx | 166 + src/Routes/Breadcrumbs/Breadcrumbs.css | 10 + src/Routes/Breadcrumbs/Breadcrumbs.tsx | 104 + src/Routes/ErrorPage.tsx | 17 + src/Routes/RouterAuhGuard.tsx | 23 + src/Routes/Routes.tsx | 99 + src/Stores/AuthenticationStore.tsx | 19 + src/Stores/ExperimentStore.tsx | 138 + src/Stores/LayoutStore.tsx | 12 + src/Stores/MoleculeEditStore.tsx | 17 + src/Stores/PreferencesStore.tsx | 17 + .../ApiCalls/ConvertBackendCallsTypes.tsx | 7 + src/Types/Experiment/Experiment.tsx | 41 + .../Experiment/MoleculeEdit/MoleculeEdit.tsx | 5 + src/Types/User/User.tsx | 20 + src/index.css | 29 + src/main.tsx | 97 + src/vite-env.d.ts | 1 + tsconfig.app.json | 28 + tsconfig.json | 7 + tsconfig.node.json | 25 + vite.config.ts | 14 + 71 files changed, 7846 insertions(+) create mode 100755 .gitignore create mode 100755 README.md create mode 100755 eslint.config.js create mode 100755 index.html create mode 100755 package-lock.json create mode 100755 package.json create mode 100755 public/Quicking.otf create mode 100755 public/bitmap.png create mode 100644 public/silent-check-sso.html create mode 100755 src/Api/ConvertBackendCalls.tsx create mode 100644 src/Api/Keycloak/Keycloak.tsx create mode 100755 src/App.css create mode 100755 src/App.tsx create mode 100755 src/Components/CardWithButton/CardWithButton.css create mode 100755 src/Components/CardWithButton/CardWithButton.tsx create mode 100755 src/Components/CodeTextArea/CodeTextArea.tsx create mode 100644 src/Components/CustomButton/CustomButton.css create mode 100644 src/Components/CustomButton/CustomButton.tsx create mode 100755 src/Components/Layout/Header/Header.css create mode 100755 src/Components/Layout/Header/Header.tsx create mode 100755 src/Components/Layout/Sidebar/Sidebar.css create mode 100755 src/Components/Layout/Sidebar/Sidebar.tsx create mode 100644 src/Components/ListCard/ExperimentsListCard.css create mode 100644 src/Components/ListCard/ExperimentsListCard.tsx create mode 100755 src/Components/MoleculeViewer/MoleculeViewer.css create mode 100755 src/Components/MoleculeViewer/MoleculeViewer.tsx create mode 100755 src/Components/MoleculeViewer/MoleculeViewerMenu.tsx create mode 100644 src/Components/PaginationContainer/PaginationContainer.css create mode 100644 src/Components/PaginationContainer/PaginationContainer.tsx create mode 100755 src/Components/StripedBg/Background.css create mode 100755 src/Components/StripedBg/Background.tsx create mode 100755 src/GlobalVars.ts create mode 100755 src/Modals/NewExperiment/NewExperiment.css create mode 100755 src/Modals/NewExperiment/NewExperiment.tsx create mode 100755 src/Modals/NewMolecule/NewMolecule.css create mode 100755 src/Modals/NewMolecule/NewMolecule.tsx create mode 100755 src/Pages/DocumentationPage/DocumentationPage.css create mode 100755 src/Pages/DocumentationPage/DocumentationPage.tsx create mode 100644 src/Pages/ExperimentsPage/ExperimentPage.css create mode 100644 src/Pages/ExperimentsPage/ExperimentPage.tsx create mode 100644 src/Pages/ExperimentsPage/ExperimentsPage.css create mode 100644 src/Pages/ExperimentsPage/ExperimentsPage.tsx create mode 100755 src/Pages/ExperimentsPage/MoleculePage.css create mode 100755 src/Pages/ExperimentsPage/MoleculePage.tsx create mode 100755 src/Pages/MainPage/MainPage.css create mode 100755 src/Pages/MainPage/MainPage.tsx create mode 100644 src/Pages/TeamsPage/TeamsPage.css create mode 100644 src/Pages/TeamsPage/TeamsPage.tsx create mode 100644 src/Pages/UserPage/UserPage.css create mode 100644 src/Pages/UserPage/UserPage.tsx create mode 100755 src/Routes/Breadcrumbs/Breadcrumbs.css create mode 100755 src/Routes/Breadcrumbs/Breadcrumbs.tsx create mode 100755 src/Routes/ErrorPage.tsx create mode 100644 src/Routes/RouterAuhGuard.tsx create mode 100755 src/Routes/Routes.tsx create mode 100644 src/Stores/AuthenticationStore.tsx create mode 100644 src/Stores/ExperimentStore.tsx create mode 100755 src/Stores/LayoutStore.tsx create mode 100755 src/Stores/MoleculeEditStore.tsx create mode 100755 src/Stores/PreferencesStore.tsx create mode 100755 src/Types/ApiCalls/ConvertBackendCallsTypes.tsx create mode 100755 src/Types/Experiment/Experiment.tsx create mode 100755 src/Types/Experiment/MoleculeEdit/MoleculeEdit.tsx create mode 100644 src/Types/User/User.tsx create mode 100755 src/index.css create mode 100755 src/main.tsx create mode 100755 src/vite-env.d.ts create mode 100755 tsconfig.app.json create mode 100755 tsconfig.json create mode 100755 tsconfig.node.json create mode 100755 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..4108b33 --- /dev/null +++ b/.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/README.md b/README.md new file mode 100755 index 0000000..56f90e1 --- /dev/null +++ b/README.md @@ -0,0 +1,43 @@ +# Автоматизированная распределенная система расчета энергии основного состояния молекул с помощью квантовых алгоритмов + +Этот репозиторий содержит фронтенд-часть проекта для дипломной работы бакалавра. + +## Структура репозитория + +- `public/` — Публичные файлы (иконки, шрифты) +- `src/` + - `Components/` — Компоненты интерфейса + - `pages/` — Страницы приложения + - `Routes/` — Маршруты приложения + - `Stores/` — Логика для управления состоянием + - `Types/` — Определения типов для API + - `App.tsx` — Главный компонент приложения + - `GlobalVars.ts` — Глобальные переменные + - `main.tsx` — Точка входа в приложение +- `vite.config.ts` — Конфигурация для Vite +- `tsconfig.app.json` — Конфигурация TypeScript для приложения +- `tsconfig.json` — Основная конфигурация TypeScript +- `tsconfig.node.json` — Конфигурация TypeScript для Node.js (для Vite) +- `package.json` — Зависимости и скрипты проекта +- `package-lock.json` — Замороженные версии зависимостей +- `eslint.config.js` — Конфигурация для ESLint + +## Установка и запуск + +### Требования + +- Node.js >= v24.1.0 +- npm >= 11.6.2 + +### Установка зависимостей + +```bash +npm install +``` + +### Компилирование и запуск сервера + +```bash +npm run build +npm run preview +``` diff --git a/eslint.config.js b/eslint.config.js new file mode 100755 index 0000000..63d950b --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,23 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { globalIgnores } from 'eslint/config' + +export default tseslint.config([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs['recommended-latest'], + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/index.html b/index.html new file mode 100755 index 0000000..313de99 --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + + + + + QMolSim + + +
+ + + + diff --git a/package-lock.json b/package-lock.json new file mode 100755 index 0000000..8afc87b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4356 @@ +{ + "name": "vkrb_frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vkrb_frontend", + "version": "0.0.0", + "dependencies": { + "@mantine/core": "^8.3.0", + "@mantine/hooks": "^8.3.0", + "@mantine/notifications": "^8.3.1", + "@tabler/icons-react": "^3.34.1", + "axios": "^1.13.2", + "immer": "^11.1.4", + "keycloak-js": "^26.2.3", + "miew-react": "^0.11.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-helmet": "^6.1.0", + "react-resizable-panels": "^4.5.4", + "react-router": "^7.9.6", + "vite-tsconfig-paths": "^5.1.4", + "zustand": "^5.0.8" + }, + "devDependencies": { + "@eslint/js": "^9.33.0", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "@types/react-helmet": "^6.1.11", + "@vitejs/plugin-react": "^5.0.2", + "eslint": "^9.33.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.39.1", + "vite": "^7.1.2" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.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, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.27.16", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.16.tgz", + "integrity": "sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.1.6", + "@floating-ui/utils": "^0.2.10", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mantine/core": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-8.3.8.tgz", + "integrity": "sha512-UM3Za7Yl0FzbZ2zPgHwNyCpLgtSqkAi8ku13+gRS/6JB0FjwSkMwibERUqQIpwqAHdR5KNmIohjuqHu8guJowg==", + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.27.16", + "clsx": "^2.1.1", + "react-number-format": "^5.4.4", + "react-remove-scroll": "^2.7.1", + "react-textarea-autosize": "8.5.9", + "type-fest": "^4.41.0" + }, + "peerDependencies": { + "@mantine/hooks": "8.3.8", + "react": "^18.x || ^19.x", + "react-dom": "^18.x || ^19.x" + } + }, + "node_modules/@mantine/hooks": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-8.3.8.tgz", + "integrity": "sha512-2YCUk5IWz+Ebi7VpbdscUz1MwulyaVPKr236ugMfpK0PFwsun4aBaLCAc8UeMGP0LtoSkuFvnsCPR4U6rhNfeQ==", + "license": "MIT", + "peerDependencies": { + "react": "^18.x || ^19.x" + } + }, + "node_modules/@mantine/notifications": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-8.3.8.tgz", + "integrity": "sha512-AS3UGnHO8UGzLpxe4cUIVpwpCoGKplWhMGm6E2hJoHnO4Wg0h3HlsR7drFEnDOZhaOMyD6MD9tAeWZ2/7rnvrw==", + "license": "MIT", + "dependencies": { + "@mantine/store": "8.3.8", + "react-transition-group": "4.4.5" + }, + "peerDependencies": { + "@mantine/core": "8.3.8", + "@mantine/hooks": "8.3.8", + "react": "^18.x || ^19.x", + "react-dom": "^18.x || ^19.x" + } + }, + "node_modules/@mantine/store": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@mantine/store/-/store-8.3.8.tgz", + "integrity": "sha512-B6LEed839OR2t9pnC7Bl3zhMyYzUvJZ46YaOpH9zCqLiFX+u4FKC+UCNzqkz2a+I+olrNlONLnrCA0NDTCjz9A==", + "license": "MIT", + "peerDependencies": { + "react": "^18.x || ^19.x" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz", + "integrity": "sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tabler/icons": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.35.0.tgz", + "integrity": "sha512-yYXe+gJ56xlZFiXwV9zVoe3FWCGuZ/D7/G4ZIlDtGxSx5CGQK110wrnT29gUj52kEZoxqF7oURTk97GQxELOFQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@tabler/icons-react": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.35.0.tgz", + "integrity": "sha512-XG7t2DYf3DyHT5jxFNp5xyLVbL4hMJYJhiSdHADzAjLRYfL7AnjlRfiHDHeXxkb2N103rEIvTsBRazxXtAUz2g==", + "license": "MIT", + "dependencies": { + "@tabler/icons": "3.35.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + }, + "peerDependencies": { + "react": ">= 16" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.27", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz", + "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/react-helmet": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.11.tgz", + "integrity": "sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.47.0.tgz", + "integrity": "sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.47.0", + "@typescript-eslint/type-utils": "8.47.0", + "@typescript-eslint/utils": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.47.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.47.0.tgz", + "integrity": "sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.47.0.tgz", + "integrity": "sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.47.0", + "@typescript-eslint/types": "^8.47.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz", + "integrity": "sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.47.0.tgz", + "integrity": "sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.47.0.tgz", + "integrity": "sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0", + "@typescript-eslint/utils": "8.47.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz", + "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz", + "integrity": "sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.47.0", + "@typescript-eslint/tsconfig-utils": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.47.0.tgz", + "integrity": "sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz", + "integrity": "sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.47.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.1.tgz", + "integrity": "sha512-WQfkSw0QbQ5aJ2CHYw23ZGkqnRwqKHD/KYsMeTkZzPT4Jcf0DcBxBtwMJxnu6E7oxw5+JC6ZAiePgh28uJ1HBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.5", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.47", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "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, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.30", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.30.tgz", + "integrity": "sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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==", + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001756", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz", + "integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.259", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.259.tgz", + "integrity": "sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ==", + "dev": true, + "license": "ISC" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "devOptional": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "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, + "license": "MIT", + "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.24", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.24.tgz", + "integrity": "sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "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==", + "license": "MIT", + "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, + "license": "MIT", + "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==", + "license": "MIT", + "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-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "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, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "11.1.4", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.4.tgz", + "integrity": "sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keycloak-js": { + "version": "26.2.3", + "resolved": "https://registry.npmjs.org/keycloak-js/-/keycloak-js-26.2.3.tgz", + "integrity": "sha512-widjzw/9T6bHRgEp6H/Se3NCCarU7u5CwFKBcwtu7xfA1IfdZb+7Q7/KGusAnBo34Vtls8Oz9vzSqkQvQ7+b4Q==", + "license": "Apache-2.0", + "workspaces": [ + "test" + ] + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miew": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/miew/-/miew-0.11.1.tgz", + "integrity": "sha512-CIhZfI9eB0P/covNrst45Y8Xd+MUncyxjNLkZULr+dcyS1ALxjtb+W2icbZEHEsn7zZJJ4ybIMIwQGnzS25IbQ==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21", + "three": "0.153.0" + } + }, + "node_modules/miew-react": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/miew-react/-/miew-react-0.11.0.tgz", + "integrity": "sha512-IdJYzrbkpotS4Hx0JYg7KyOcpwyTdGRS1hnc504Y//Xvdl24Ft6uahuf9mbCEI2PNVPDARLc+hqzMTbpDWD88A==", + "license": "MIT", + "dependencies": { + "miew": "^0.11.0" + }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "license": "MIT" + }, + "node_modules/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-number-format": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.4.tgz", + "integrity": "sha512-wOmoNZoOpvMminhifQYiYSTCLUDOiUbBunrMrMjA+dV52sY+vck1S4UhR6PkgnoCquvvMSeJjErXZ4qSaWCliA==", + "license": "MIT", + "peerDependencies": { + "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-resizable-panels": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-4.5.4.tgz", + "integrity": "sha512-zK+Tz+73MBZKDtBUUcKjezaq+in8K10TJ8+slH/LNza5IL2CRFMKm0GbKyMPAGDPKY1x8G7sWx3Wu9inFRZGFA==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-router": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz", + "integrity": "sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-side-effect": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", + "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz", + "integrity": "sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "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, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tabbable": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.3.0.tgz", + "integrity": "sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==", + "license": "MIT" + }, + "node_modules/three": { + "version": "0.153.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.153.0.tgz", + "integrity": "sha512-OCP2/uQR6GcDpSLnJt/3a4mdS0kNWcbfUXIwLoEMgLzEUIVIYsSDwskpmOii/AkDM+BBwrl6+CKgrjX9+E2aWg==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.47.0.tgz", + "integrity": "sha512-Lwe8i2XQ3WoMjua/r1PHrCTpkubPYJCAfOurtn+mtTzqB6jNd+14n9UN1bJ4s3F49x9ixAm0FLflB/JzQ57M8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.47.0", + "@typescript-eslint/parser": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0", + "@typescript-eslint/utils": "8.47.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-composed-ref": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz", + "integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", + "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz", + "integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==", + "license": "MIT", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/vite": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz", + "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-tsconfig-paths": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz", + "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^3.0.3" + }, + "peerDependencies": { + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zustand": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.8.tgz", + "integrity": "sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100755 index 0000000..a71f788 --- /dev/null +++ b/package.json @@ -0,0 +1,43 @@ +{ + "name": "vkrb_frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@mantine/core": "^8.3.0", + "@mantine/hooks": "^8.3.0", + "@mantine/notifications": "^8.3.1", + "@tabler/icons-react": "^3.34.1", + "axios": "^1.13.2", + "immer": "^11.1.4", + "keycloak-js": "^26.2.3", + "miew-react": "^0.11.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-helmet": "^6.1.0", + "react-resizable-panels": "^4.5.4", + "react-router": "^7.9.6", + "vite-tsconfig-paths": "^5.1.4", + "zustand": "^5.0.8" + }, + "devDependencies": { + "@eslint/js": "^9.33.0", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "@types/react-helmet": "^6.1.11", + "@vitejs/plugin-react": "^5.0.2", + "eslint": "^9.33.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.39.1", + "vite": "^7.1.2" + } +} diff --git a/public/Quicking.otf b/public/Quicking.otf new file mode 100755 index 0000000000000000000000000000000000000000..4a69cdd636721f3b2469ba8e0715e85bbd37e34b GIT binary patch literal 21984 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 literal 0 HcmV?d00001 diff --git a/public/bitmap.png b/public/bitmap.png new file mode 100755 index 0000000000000000000000000000000000000000..7244884a83635dd8a7fb92979831bceb99b960d3 GIT binary patch literal 39212 zcmbqa^;aE1lYO|mySoGe!JUU|Ahi6K!G5Lf)sryVq934-wP&NtW`_4-Ey> zjCZh%;ckj?#H&??rT*GZ;lpwxt?by9eEu485X$|=AmK* z%JeFD36@aUh#_JaI>}Q^*oYF5MZx<2+KFjyfYyX9`T`Al>_}`Wgbv{6-+5#Ya1cW% z2R@5cDbr&!#A14dh!sdX{$F0r1-^UvEqn!p3daT#!OgV0X#h1sJ_KeEVOr|zk{2R_ zq(Jnr@hAb)oUp=>niFHW{aScr;q*w|pFxN~8*S#GAyoj**ojiUXC%JJQSi?{q2X5$ zy6_v!plt|CjLeS#_MjKI?yhuCDIex&LGT}JPtb1&UC8d$i6%IRcF=}@hNpME zZ4}-!^qU=s1A^!8qZ?U(1;p6V@1QQFjdLgm*1zx2>+l;4pnJxi^S|^3N}}PGv;o49 z!^b;62q9J=HYQgFI_beKp90`Orfyd%pFnozdlvlmYA@uJkPb+hc6X;8(`3I{K?@(R zt#i2K6VQ{VO3=Zka2M18az#Fe{!q>F8AL@stEF}JBwJb_v(KG3&Y()eJ(1)pBG+(w zA_XPW*+QQ~I?zi0m}GKQSvb4wfoiZXBsW?&1N)INLx5_Ar&4s~y44-RiVq0O26zT#s;3rFibF))I4nO|cP43j` zAvt<s<04A;1y%am#f=i#@Up7dL(Y#!dI}Qb=nD z(Z>C$ZAF<9M0R#G$FnbY>i|er`|G~qdBj+@s6z>kNK;FXVQ>)21=pF_>e?;*gO2M^ z7s7^(IaiTsE9D@tpb+5)WFXeqFXxKqF}-g|2^k#u1IL{68iqru5|*W_m^Cq#ZMa1H zdES`9&o(o`8>iP&lj5phVrUMvd_OPRf1Ig%YV@cG{YzH!I;6B|6;AB({n+Xpe~`t3 zJq?ckt8+aCB}q3Ns2Kb;DT4#u_enuaTk;&YN=>5!V%h%%TWInu+}5UY3{SkX6)C-- zzY{4xxHC!|jF&&+Z}XXMs^s1DhLJFAc-m$2WT^#tnadBvP@z}D`zUU}!gr+6^m<|R zSRA`ZY#V+6%gG`XMiCra7^pg3bYJSGn^0r@ys+5m36cK8ENX?6>Ycar{euOImeYPC zYC5rN_<j*rxa%+LR>6&Oo96ECn4pzukSav zLuh_k!%`lUe8}DR)$ne5)GJzH>h0SIPv(@vwghg1;OB)s4 ziW}v$jdvLTk$`_t$S_iYyX+1GIfn%Z7DX5iyeW*88oJoIyKO*(x}bnXyTYD9za?3p zE~YRjh=7!^z{wv<>ZczjK?4yC~*G1#+KA&O$q^>EL@&!s5_!rNNGPe3Y4p8`Nd3 zo!|WC84}i&%qKwDC<4>9m7QMBk|yJg5q>%Lg#1=_JBse}?0yg%_+^oAeZ_q#>QjfP zPFHB+=Udy%$G`5&C$7B8X#4)yDI4dt(-)k#t{_BNsY|M}d*L?Vd(5ypAxTn}3^|Op z{;rU73h6d%W3A#fpUIh*Mb~*7`o+d?Pk-f2LeQXy_!J${9Iw}M+Vx1d%_ja-MIyL6 zfBE^i9_2(QxO4UwYu7@;@B|TIL#G#>5?EW3Ope3N_O&pKTu8V2!M`Z>S+Bg84<|tDg+8RWig+El5pVqIQi5nV*!Ke2QE5@Vmm)<3nN;|eWhlTvLs z?MroVWC=nEdTB{joUFDmlR$?t3=9WwRuSv)dQ1%`I9@Ipn5w0(AJZ?AF&$+*ODMYn+Onu2Q37Y0cFUh$a(Hl25Mk@>^WT^YAXl14Ow=4*F zQ9EN&i|*`%RICGGqh5t+jm$mGSka`M8j6{R`BS}PSP*2%w|;P+g)m0|_j4R`)GCU- z!O9E4<}M*%xmdL(`fxVbhPmVWn80CET)Mv}oriNX2Sg=VorO5bQ||0{Ew;Tc`IYsg z4kh=IT3v2Zv>%OOaC*rGlBa)rhC<{UAu3e{7;oud{QC|)c$y;h!KYX%vREsj*@1Si_$ z$`z(%nmNc*uH!+-NFq5*m!2+7iIzX>auHmgE#gme7a@hETGvA9=c;5=~nN@WB(P}GBqi6{*o-A!vJTDYhQ3@&I1%@pQzvMiW##=Vd zWI-34)#}An`<{TI-L;3f2kLQ3nD8>ske6AGug?U@ZMSAqfY~`)s%t**_Xa{j*?!q4@O@BN7~ZN6(IV&+988N*>R29?k%P-n%$bcBL+7 zNXif{g$s}F<}rxEU$0IE3oAR|L_BepB3cyr-Dq2}gO!TVDC~J_zpu8gWu}nK(JaKy zS*sEX8cH|@;#-6!55-TkbPk$p@~f}na>yN9O0XI zr<_d^wR3t1xs0OB3R8ceU-9xGtKQ;IvKF&p+5uV4-SdhF5`sd;p@Q2wFv-3|cm5MLJEJNg#Nqz9M30@>3A9 zaG=nifjmU};Mjs9cjda0lIJU3 z8k)K-_pmbnh-vggL;Pf4gaM6-q4$Z3?TMv7x?xU~$1n4G-R%A(xs@m{8kr0Bt@DBl zbpE8e^A}|Cq|PHJXF)^V;nX7jE%rzlZ}M#@Bj?n$^b0}_kZe$L!7Bt9 z;Uyw~G;3)yIA}(7tF4ec^PC>+5vm^;Zj!Z zBw~Pz6})%Roe;;@U$#`j#6oa2iJjIb0~NdHs?=?m`sIa&X7C%d{t%n|VoS2uzjeg~73 zMO-!~2%;^OAfRJs?n}-bM>zP}k~(OLLN_tmr7z$DX=bTxSt{-4gQH2f|0o@G8$0rx81gsz!m+oqa?l<-+P)BddGRq(cG9Vb$=nU)0*Q8s_ zAVh7|1bHhO(@R2^B9we2bKC(j--@fmI#k`({*TJEs}W2VI<%w66!N#=N|=W7)j4f< z2R*iM&1%U+wCKQOuB&I_OlQ?!m1@+uG&hmWedQ7H4-62g7?egynL;LmWvg4y^yJ;; z2#r~A;8l3B1HKyq4)gDC_-q(*l&OCMCmDZ;a

1=IFDyQpID25h_dgV1SN`tL1V6 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 + + + + + diff --git a/src/Api/ConvertBackendCalls.tsx b/src/Api/ConvertBackendCalls.tsx new file mode 100755 index 0000000..da9185f --- /dev/null +++ b/src/Api/ConvertBackendCalls.tsx @@ -0,0 +1,46 @@ +import axios, { AxiosError } from "axios"; +import type { ConvertSchema } from "Types/ApiCalls/ConvertBackendCallsTypes"; + +const openbableBackendRoot = "http://localhost:1654"; + +export async function ConvertMoleculeToStandart( + data: ConvertSchema, +): Promise { + try { + const response = await axios.post(openbableBackendRoot + "/convert", { + text: data.inputText, + format: data.inputFormat, + convert_3d: data.make_3d, + add_hydrogen: data.add_h, + optimize_geometry: data.optimize, + }); + + // Response from the FastAPI JSONResponse + return response.data.molfile; + } catch (error) { + //Error handling + if (axios.isAxiosError(error)) { + // Do something with the axios error... + return error; + } else { + throw error; + } + } +} + +export async function GetInFormats(): Promise< + { [key: string]: string } | AxiosError +> { + try { + const response = await axios.get(openbableBackendRoot + "/informats"); + return response.data; + } catch (error) { + //Error handling + if (axios.isAxiosError(error)) { + // Do something with the axios error... + return error; + } else { + throw error; + } + } +} diff --git a/src/Api/Keycloak/Keycloak.tsx b/src/Api/Keycloak/Keycloak.tsx new file mode 100644 index 0000000..6e8eae9 --- /dev/null +++ b/src/Api/Keycloak/Keycloak.tsx @@ -0,0 +1,28 @@ +import axios from "axios"; +import { keycloakURI } from "GlobalVars"; +import Keycloak from "keycloak-js"; + +const keycloak = new Keycloak({ + url: keycloakURI, + realm: "dev-realm", + clientId: "react-frontend", +}); + +const api = axios.create({ + baseURL: `${keycloak.authServerUrl}/realms/${keycloak.realm}`, +}); + +export default keycloak; + +export async function getProfile(keycloak: Keycloak) { + return keycloak.loadUserProfile(); +} + +export const handleSubmit = async (profile) => { + try { + await api.put("/account", profile); + alert("Profile updated!"); + } catch (err) { + console.error(err); + } +}; diff --git a/src/App.css b/src/App.css new file mode 100755 index 0000000..926f47e --- /dev/null +++ b/src/App.css @@ -0,0 +1,27 @@ +.body { + height: 95%; + display: flex; + flex-direction: column; + position: relative; +} + +#App { + height: 100svh; +} + +.input { + flex: 0 1 autol; +} + +#Header { + box-shadow: rgba(99, 99, 99, 0.2) 0px 0px 5px 0px; +} + +#Navbar { + box-shadow: rgba(99, 99, 99, 0.2) 0px 0px 5px 0px; +} + +.invisible_link { + text-decoration: inherit; + color: inherit; +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100755 index 0000000..0b47732 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,104 @@ +import "./App.css"; + +import { AppShell, useMantineTheme } from "@mantine/core"; + +import Header from "Components/Layout/Header/Header"; +import "@mantine/notifications/styles.css"; +import "@mantine/core/styles.css"; +import { Notifications } from "@mantine/notifications"; +import { useLayoutStore } from "Stores/LayoutStore"; +import { + defaultAnimationDuration, + headerHeight, + sideMenuWidth, +} from "GlobalVars"; +import Sidebar from "Components/Layout/Sidebar/Sidebar"; +import { Outlet, useLocation } from "react-router"; +import { Helmet } from "react-helmet"; +import { useEffect } from "react"; +import { useMediaQuery } from "@mantine/hooks"; +import BreadCrumbs from "Routes/Breadcrumbs/Breadcrumbs"; +import keycloak, { getProfile } from "Api/Keycloak/Keycloak"; +import { AuthenticationStore } from "Stores/AuthenticationStore"; +import type { KeycloakProfile } from "keycloak-js"; +import { useNavigate } from "react-router"; + +function App() { + const { is_navbar_open, set_navbar_open } = useLayoutStore(); + const { set_token, set_profile } = AuthenticationStore(); + const navigate = useNavigate(); + + const theme = useMantineTheme(); + + const location = useLocation(); + const isMobile = useMediaQuery(`(max-width: ${theme.breakpoints.sm}`); + + useEffect(() => { + if (isMobile) + setTimeout(() => { + set_navbar_open(false); + }, 100); + }, [location]); + + useEffect(() => { + const refreshToken = () => { + keycloak + .updateToken(60) + .then((refreshed) => { + if (refreshed) { + set_token(keycloak.token); + } + }) + .catch(() => { + keycloak.logout(); + }); + }; + + setInterval(refreshToken, 30000); + }, []); + + return ( + <> + + QMolSim + + + + + + + +

+ + + + + + + + <> + + + + + + + ); +} + +export default App; diff --git a/src/Components/CardWithButton/CardWithButton.css b/src/Components/CardWithButton/CardWithButton.css new file mode 100755 index 0000000..3c05c69 --- /dev/null +++ b/src/Components/CardWithButton/CardWithButton.css @@ -0,0 +1,58 @@ +.tile { + --bgsize: 7px; + --bgoffset: 7px; + + width: 25vw; + min-width: 275px; + max-width: 300px; + + margin: 0px 10px; + padding: 20px 30px; + + border: 1px solid; + border-color: var(--mantine-color-contrast-filled); + border-radius: var(--paper-radius); + transform: translateY(0px); + overflow: visible; + + /*Move up on hover*/ + &:hover { + transform: scale(105%); + } + + /*Background 45 degree lines */ + &::before, + &::after { + border-radius: var(--paper-radius); + background-image: linear-gradient( + 45deg, + rgba(255, 255, 255, 0) 33.33%, + var(--mantine-color-contrast-filled) 33.33%, + var(--mantine-color-contrast-filled) 50%, + rgba(255, 255, 255, 0) 50%, + rgba(255, 255, 255, 0) 83.33%, + var(--mantine-color-contrast-filled) 83.33%, + var(--mantine-color-contrast-filled) 100% + ); + content: ""; + display: block; + position: absolute; + z-index: -2; + top: var(--bgoffset); + left: var(--bgoffset); + width: 100%; + height: 100%; + background-size: var(--bgsize) var(--bgsize); + } + &::before { + top: 0px; + left: 0px; + background: var(--mantine-color-body); + z-index: -1; + } +} + +/*make it so the button is on bottom of card*/ +.card_text { + flex-grow: 1; +} diff --git a/src/Components/CardWithButton/CardWithButton.tsx b/src/Components/CardWithButton/CardWithButton.tsx new file mode 100755 index 0000000..01652bc --- /dev/null +++ b/src/Components/CardWithButton/CardWithButton.tsx @@ -0,0 +1,36 @@ +import { Card, Text, Button, Title, Space } from "@mantine/core"; +import "./CardWithButton.css"; +import { Link } from "react-router"; +import CustomButton from "Components/CustomButton/CustomButton"; + +interface ButtonWithTextProps { + title: string; + text: string; + buttonText: string; + link: string; +} + +function ButtonWithText(props: ButtonWithTextProps) { + return ( + + + {props.title} + + + {props.text} + + + + + + + ); +} + +export default ButtonWithText; diff --git a/src/Components/CodeTextArea/CodeTextArea.tsx b/src/Components/CodeTextArea/CodeTextArea.tsx new file mode 100755 index 0000000..7688d2d --- /dev/null +++ b/src/Components/CodeTextArea/CodeTextArea.tsx @@ -0,0 +1,85 @@ +import { Textarea } from "@mantine/core"; +import { useEffect, useRef } from "react"; + +interface TextAreaProps { + text: string; + onTextChange: (text: string) => void; +} + +export function CodeTextArea(props: TextAreaProps) { + const inputRef = useRef(null); + const lineRef = useRef(null); + + //Synchronize scrolling between the + useEffect(() => { + const inputEl = document.querySelector(".MoleculeEditInput"); + const lineEl = document.querySelector(".MoleculeEditLineNumber"); + if (!inputEl || !lineEl) return; + + let isSyncing = false; // prevents circular scroll events + let activeEl = null; // element currently being scrolled + + const syncScroll = (source: Element, target: Element) => { + if (isSyncing) return; + isSyncing = true; + + requestAnimationFrame(() => { + target.scrollTop = source.scrollTop; + isSyncing = false; + }); + }; + + const onScroll = (e: Event) => { + activeEl = e.target; + if (activeEl === inputEl) { + syncScroll(inputEl, lineEl); + } else { + syncScroll(lineEl, inputEl); + } + }; + + inputEl.addEventListener("scroll", onScroll, { passive: true }); + lineEl.addEventListener("scroll", onScroll, { passive: true }); + + return () => { + inputEl.removeEventListener("scroll", onScroll); + lineEl.removeEventListener("scroll", onScroll); + }; + }, []); + + return ( + + ); +} diff --git a/src/Components/CustomButton/CustomButton.css b/src/Components/CustomButton/CustomButton.css new file mode 100644 index 0000000..ecb625a --- /dev/null +++ b/src/Components/CustomButton/CustomButton.css @@ -0,0 +1,105 @@ +.colored { + border: 2px solid transparent; + border-radius: 5px; + width: 100%; + display: flex; + padding-left: 5px; + padding-right: 5px; +} + +.colored:hover { + background-color: color; +} + +.textAlign-left { + text-align: left; + justify-content: left; +} + +.textAlign-right { + text-align: right; + justify-content: right; +} + +.textAlign-center { + text-align: center; + justify-content: center; + justify-items: center; + * { + align-content: center; + } +} + +/* Variants */ +.outline { + border-color: var(--color); + background: transparent; + color: var(--color); +} + +.outline:hover { + background: color-mix(in srgb, var(--hovercolor) 20%, transparent); +} + +/* ###################### */ + +.color { + background: var(--color); + color: var(--textcolor); +} + +.color:hover { + background-color: var(--hovercolor); +} + +.primary { + --color: var(--mantine-color-primary-filled); + --textcolor: var(--mantine-color-contrast-filled); + --hovercolor: var(--mantine-color-secondary-filled); +} + +.secondary { + --color: var(--mantine-color-secondary-filled); + --textcolor: var(--mantine-color-secondaryContrast-filled); + --hovercolor: var(--mantine-color-primary-filled); +} + +.contrast { + --color: var(--mantine-color-contrast-filled); + --textcolor: var(--mantine-color-primary-filled); + --hovercolor: var(--mantine-color-secondaryContrast-filled); +} + +.secondary-contrast { + --color: var(--mantine-color-secondaryContrast-filled); + --textcolor: var(--mantine-color-secondary-filled); + --hovercolor: var(--mantine-color-contrast-filled); +} + +.accent { + --color: var(--mantine-color-accent-filled); + --textcolor: white; + --hovercolor: var(--mantine-color-accent-filled-hover); +} + +.warning { + --color: var(--mantine-color-yellow-filled); + --textcolor: white; + --hovercolor: var(--mantine-color-yellow-filled-hover); +} + +.error { + --color: var(--mantine-color-red-filled); + --textcolor: white; + --hovercolor: var(--mantine-color-red-filled-hover); +} + +/* ###################### */ + +.subtle { + color: var(--color); +} + +.subtle:hover { + background-color: color-mix(in srgb, var(--color) 20%, transparent); +} diff --git a/src/Components/CustomButton/CustomButton.tsx b/src/Components/CustomButton/CustomButton.tsx new file mode 100644 index 0000000..4df1d38 --- /dev/null +++ b/src/Components/CustomButton/CustomButton.tsx @@ -0,0 +1,62 @@ +import { Space, Text, UnstyledButton, type MantineSize } from "@mantine/core"; +import type { ReactElement } from "react"; +import "./CustomButton.css"; + +interface CustomButtonProps { + text?: string; + icon?: ReactElement; + style?: "outline" | "color" | "subtle"; + color?: + | "primary" + | "secondary" + | "contrast" + | "secondary-cotrast" + | "accent" + | "warning" + | "error" + | string; + textAlign?: "left" | "center" | "right"; + textSize?: MantineSize; + onClick?: React.MouseEventHandler; + disabled?: boolean; +} + +function CustomButton({ + text, + icon, + style = "color", + color = "contrast", + textAlign = "center", + textSize = "md", + onClick = () => {}, + disabled = false, +}: CustomButtonProps) { + console.log(color); + return ( + + {icon} {icon && } + {text} + + ); +} + +export default CustomButton; diff --git a/src/Components/Layout/Header/Header.css b/src/Components/Layout/Header/Header.css new file mode 100755 index 0000000..d0fbf5a --- /dev/null +++ b/src/Components/Layout/Header/Header.css @@ -0,0 +1,23 @@ +.logo { + height: 80%; +} + +.headerLogo { + height: 100%; + display: flex; + flex-direction: row; + align-items: center; + gap: 10px; + font-family: "Quicking"; + letter-spacing: 1px; + cursor: pointer; +} + +.header { + height: 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 0px 5px; +} diff --git a/src/Components/Layout/Header/Header.tsx b/src/Components/Layout/Header/Header.tsx new file mode 100755 index 0000000..fb83d1a --- /dev/null +++ b/src/Components/Layout/Header/Header.tsx @@ -0,0 +1,33 @@ +import { Burger, Image, Text } from "@mantine/core"; +import "./Header.css"; +import { useLayoutStore } from "Stores/LayoutStore"; +import { Link } from "react-router"; +import { baseUrl } from "GlobalVars"; +import { routes } from "Routes/Routes"; + +function Header() { + const { is_navbar_open, set_navbar_open } = useLayoutStore(); + return ( +
+ + image + QMolSim + + { + set_navbar_open(!is_navbar_open); + }} + /> +
+ ); +} + +export default Header; diff --git a/src/Components/Layout/Sidebar/Sidebar.css b/src/Components/Layout/Sidebar/Sidebar.css new file mode 100755 index 0000000..2650da1 --- /dev/null +++ b/src/Components/Layout/Sidebar/Sidebar.css @@ -0,0 +1,64 @@ +.sidebar { + height: 100%; + margin-top: 10px; + margin-bottom: 25px; + margin-left: 10px; + margin-right: 10px; + justify-content: space-between; + display: flex; + flex-direction: column; +} + +.selected { + background-color: red; +} + +.sidebar_top { + gap: 5px; +} + +.sidebar_bottom { + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + width: 100%; +} + +.sidebar_bottom_top { + display: flex; + flex-direction: row; + align-items: center; + min-width: 0px; + margin-bottom: 10px; +} + +.sidebar_bottom_bottom { + display: flex; + flex-direction: row; + width: 100%; + justify-content: space-evenly; + min-width: 0px; + gap: 10px; +} + +.userInfo { + padding-left: 15px; + gap: 5px; + min-width: 0px; +} + +.sidebar_bottom_button { + padding-left: 10px; + padding-right: 10px; + padding-top: 3px; + padding-bottom: 3px; + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; +} + +.sidebar_bottom_button:hover { + background-color: var(--mantine-color-secondary-filled); +} diff --git a/src/Components/Layout/Sidebar/Sidebar.tsx b/src/Components/Layout/Sidebar/Sidebar.tsx new file mode 100755 index 0000000..ed82bd3 --- /dev/null +++ b/src/Components/Layout/Sidebar/Sidebar.tsx @@ -0,0 +1,165 @@ +import { + Avatar, + Button, + Divider, + Modal, + Stack, + Text, + Title, + UnstyledButton, + useMantineTheme, +} from "@mantine/core"; +import "./Sidebar.css"; +import { + IconDevicesPc, + IconFileDescription, + IconFlaskFilled, + IconLogout, + IconSettings2, + IconUsers, + type Icon, + type IconProps, +} from "@tabler/icons-react"; +import { Link, useLocation } from "react-router"; +import { useState, type ForwardRefExoticComponent } from "react"; +import { routes } from "Routes/Routes"; +import keycloak from "Api/Keycloak/Keycloak"; +import { AuthenticationStore } from "Stores/AuthenticationStore"; +import { baseUri, baseUrl } from "GlobalVars"; +import CustomButton from "Components/CustomButton/CustomButton"; + +interface SubtleLinkButtonProps { + link: string; + Icon: ForwardRefExoticComponent>; + text: string; + color: string; + selected?: boolean; +} + +function SubtleLinkButton(props: SubtleLinkButtonProps) { + return ( + + } + style="subtle" + color={props.selected ? props.color : "contrast"} + text={props.text} + textAlign="left" + /> + + ); +} + +function Sidebar() { + const { profile } = AuthenticationStore(); + const [open, set_open] = useState(false); + const theme = useMantineTheme(); + const location = useLocation(); // get current URL + + return ( +
+ set_open(false)} + title=Выйти? + centered + withCloseButton={false} + size="auto" + > +
+ keycloak.logout({ redirectUri: baseUri + baseUrl })} + textSize="lg" + color="contrast" + > + set_open(false)} + text="Отменить" + textSize="lg" + style="outline" + color="contrast" + > +
+
+ +
+ + + + +
+
+ {keycloak.authenticated && ( + <> +
+ + + {profile?.username} + + {profile?.email} + + +
+ +
+ + } + text="Настройки" + color="contrast" + textSize="lg" + /> + + } + text="Выйти" + textSize="lg" + color="contrast" + onClick={() => { + set_open(true); + }} + /> +
+ + )} + {!keycloak.authenticated && ( + keycloak.login()}> + Войти / Зарегестрироваться + + )} +
+
+ ); +} + +export default Sidebar; diff --git a/src/Components/ListCard/ExperimentsListCard.css b/src/Components/ListCard/ExperimentsListCard.css new file mode 100644 index 0000000..a6293aa --- /dev/null +++ b/src/Components/ListCard/ExperimentsListCard.css @@ -0,0 +1,50 @@ +.ExperimentsListCard { + height: 120px; + padding: 12px; +} + +.ExperimentSectionWithLine { + border-right: 1px solid var(--mantine-color-contrast-filled); + padding-right: 10px; +} + +.ExperimentPill { + background-color: var(--mantine-color-contrast-filled); + color: var(--mantine-color-primary-filled); +} + +.ExperimentPill2 { + border: 2px solid var(--mantine-color-accent-filled); + background-color: transparent; + color: var(--mantine-color-accent-filled); + * { + width: 100%; + text-align: center; + } +} + +.dateContainer { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: right; + gap: 5px; + .p { + text-wrap: nowrap; + } +} +.TopRightContainer { + justify-content: right; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + gap: 15px; + justify-items: center; +} + +.RightExperimentSection { + text-align: right; + padding-right: 10px; + display: flex; + flex-direction: column; +} diff --git a/src/Components/ListCard/ExperimentsListCard.tsx b/src/Components/ListCard/ExperimentsListCard.tsx new file mode 100644 index 0000000..dd90532 --- /dev/null +++ b/src/Components/ListCard/ExperimentsListCard.tsx @@ -0,0 +1,120 @@ +import { Card, Pill, SimpleGrid, Text, UnstyledButton } from "@mantine/core"; +import "./ExperimentsListCard.css"; +import { useNavigate } from "react-router"; +import type { Experiment, TaskData } from "Types/Experiment/Experiment"; +import { IconTrash } from "@tabler/icons-react"; +import type { MouseEvent } from "react"; +import { useExperimentStore } from "Stores/ExperimentStore"; + +function ExperimentsListCard(props: Experiment) { + const navigate = useNavigate(); + const { selectExperiment, removeExperiment, tasks, teams } = + useExperimentStore(); + + const team = teams.find((team) => { + return team.id == props.team_id; + }); + + const experiment_tasks = tasks.filter((a) => a.id in props.tasks_ids); + + const handleDelete = () => { + removeExperiment(props.id); + }; + + return ( + { + console.log(props.id); + selectExperiment(props.id); + navigate(props.id.toString()); + }} + > + +
+ + {props.name} + + + Team: {team ? team.name : "ERROR"} + + + + Статус: {props.experiment_status} + + +
+
+ + Задачи: + {experiment_tasks.map((task: TaskData) => { + return ( + + {task.name} + + ); + })} + {experiment_tasks.length == 0 ? ( + + Нет Задач + + ) : ( + <> + )} + +
+
+
+
+ {props.date_created.toLocaleDateString()} + {props.date_created.toLocaleTimeString()} +
+ { + e.stopPropagation(); + handleDelete(); + }} + style={{ cursor: "pointer" }} + > + + +
+
+ + {" "} + Тип эксперимента:{" "} + {props.experiment_type} + +
+ + #{props.id} + +
+
+
+ ); +} + +export default ExperimentsListCard; diff --git a/src/Components/MoleculeViewer/MoleculeViewer.css b/src/Components/MoleculeViewer/MoleculeViewer.css new file mode 100755 index 0000000..638a1a8 --- /dev/null +++ b/src/Components/MoleculeViewer/MoleculeViewer.css @@ -0,0 +1,22 @@ +.moleculeViewer { + height: 100%; + width: 100%; + min-width: 0; + box-sizing: border-box; + overflow: auto; + position: relative; + overscroll-behavior: contain; + touch-action: none; +} + +.atomEditor { + position: absolute; + border-radius: md; + right: 10px; + top: 10px; +} + +.atomEditor * { + width: 100%; + height: auto; +} diff --git a/src/Components/MoleculeViewer/MoleculeViewer.tsx b/src/Components/MoleculeViewer/MoleculeViewer.tsx new file mode 100755 index 0000000..2c06439 --- /dev/null +++ b/src/Components/MoleculeViewer/MoleculeViewer.tsx @@ -0,0 +1,269 @@ +import Viewer from "miew-react"; +import Miew from "miew"; +import { + Paper, + UnstyledButton, + useMantineColorScheme, + useMantineTheme, +} from "@mantine/core"; +import { useEffect, useMemo, useRef, useState } from "react"; +import "./MoleculeViewer.css"; +import { notifications } from "@mantine/notifications"; +import { + IconAlertHexagon, + IconArrowBarBoth, + IconRefresh, +} from "@tabler/icons-react"; +import MoleculeViewerMenu from "./MoleculeViewerMenu"; +import type { SelectedAtom } from "Types/Experiment/MoleculeEdit/MoleculeEdit"; + +const callbackOnResizeFinish = ( + dom_elem: HTMLElement, + beginning_callback: () => void, + end_callback: () => void, + delay = 100, // ms after resize "finishes" +) => { + let timeoutId: number | undefined; + + const resizeObserver = new ResizeObserver(() => { + beginning_callback(); + if (timeoutId) { + window.clearTimeout(timeoutId); + } + + timeoutId = window.setTimeout(() => { + end_callback(); + }, delay); + }); + + resizeObserver.observe(dom_elem); + + return () => resizeObserver.disconnect(); // cleanup helper +}; + +interface MoleculeViewerProps { + moleculeData: string; + selectedAtom: SelectedAtom | null; + setSelectedAtom: (selectedAtom: SelectedAtom | null) => void; +} + +function MoleculeViewer(props: MoleculeViewerProps) { + const theme = useMantineTheme(); + const { colorScheme } = useMantineColorScheme(); + // объект загруженного редактора молекул для редактирования + const [miew, setMiew] = useState(null); + const molViewerRef = useRef(null); + + const [isResizing, setIsResizing] = useState(false); + + const [viewingData, setViewingData] = useState(props.moleculeData); + + //при загрузке сохраняем объект miew + const onInitMiew = (miew: Miew) => { + setMiew(miew); + if (miew && viewingData) { + //прогружаем молекулу + miew + .load(viewingData, { + sourceType: "immediate", + fileType: "xyz", + }) + .then(() => { + if (props.selectedAtom) { + props.setSelectedAtom(null); + } + }) + .catch((error) => { + if (error.message == "Operation cancelled") { + return; + } + notifications.show({ + color: "orange", + radius: "md", + title: "Ошибка при отображении молекулы", + message: + "Проверте правильность написания кода молекулы, в нем содержатся ошибки", + icon: , + style: { paddingLeft: "5px" }, + }); + }); + } + miew.setOptions({ + settings: { + bg: { + color: theme.colors.secondaryDark[7], + }, + fogAlpha: 0.7, + axes: true, + }, + }); + }; + + //мемоизируем объект чтобы он не перегружаля при изменении [miew] состояния + const MemoViewer = useMemo( + () => , + [viewingData], + ); + + //Замена станартного обработчика нажатия на молекулы + useEffect(() => { + if (molViewerRef.current && miew) { + //INFO: при изменении размера окна обносить webgl + const cleanup = callbackOnResizeFinish( + molViewerRef.current, + handleResizeStart, + handleResizeEnd, + ); + //@ts-expect-error Miew class not implementing typescript correctly + miew.removeEventListener("newpick"); + //@ts-expect-error Miew class not implementing typescript correctly + miew.addEventListener("newpick", handleClick); + return () => { + cleanup(); + //@ts-expect-error Miew class not implementing typescript correctly + miew.removeEventListener("newpick"); + }; + } + }, [molViewerRef, miew]); + + //On selected Atom change, highlight it + useEffect(() => { + if (miew) { + if (!props.selectedAtom) { + //@ts-expect-error Miew class not implementing typescript correctly + miew.select(""); + return; + } + //@ts-expect-error Miew class not implementing typescript correctly + miew.select("serial " + props.selectedAtom.serial, false); + //спрятать информацию встроенную + //@ts-expect-error Miew class not implementing typescript correctly + miew._msgAtomInfo.style.opacity = 0.0; + //@ts-expect-error Miew class not implementing typescript correctly + miew._msgAtomInfo.style.height = "0px"; + //@ts-expect-error Miew class not implementing typescript correctly + miew._msgAtomInfo.style.overflow = "hidden"; + } + }, [props.selectedAtom, miew]); + + //при смене темы обновляем фон MoleculeViewer + useEffect(() => { + if (miew) { + miew.setOptions({ + settings: { + bg: { + color: theme.colors.secondaryDark[7], + }, + }, + }); + } + }, [colorScheme]); + + //при нажятии на атом выбираем его + const handleClick = (pick: { type: string; obj: { atom: SelectedAtom } }) => { + if (miew) { + if (pick.obj.atom) { + props.setSelectedAtom(pick.obj.atom); + } else { + props.setSelectedAtom(null); + } + } + }; + + const handleResizeStart = () => { + setIsResizing(true); + }; + + const handleResizeEnd = () => { + //@ts-expect-error Miew class not implementing typescript correctly + miew._onResize(); + //@ts-expect-error Miew class not implementing typescript correctly + miew._picker.handleResize(); + setTimeout(() => { + setIsResizing(false); + }, 50); + }; + + const handleMouseEnter = () => { + document.body.style.overflow = "hidden"; // disable page scroll + }; + + const handleMouseLeave = () => { + document.body.style.overflow = "auto"; // re-enable scroll + }; + + const refreshDisplay = () => { + if (props.moleculeData != viewingData) { + setViewingData(props.moleculeData); + } else { + if (miew) { + //@ts-expect-error Miew class not implementing typescript correctly + miew.resetView(); + } + } + }; + + return ( +
+
+ {MemoViewer} + {isResizing && viewingData && ( +
+
+ +
+
+ )} +
+ {props.selectedAtom && ( + + + + )} + +
+ + + +
+
+ ); +} + +export default MoleculeViewer; diff --git a/src/Components/MoleculeViewer/MoleculeViewerMenu.tsx b/src/Components/MoleculeViewer/MoleculeViewerMenu.tsx new file mode 100755 index 0000000..a493d47 --- /dev/null +++ b/src/Components/MoleculeViewer/MoleculeViewerMenu.tsx @@ -0,0 +1,29 @@ +import { Text, Divider } from "@mantine/core"; +import Miew from "miew"; +import "./MoleculeViewer.css"; +import type { SelectedAtom } from "Types/Experiment/MoleculeEdit/MoleculeEdit"; + +interface MoleculeViewerMenuProps { + selectedAtom: SelectedAtom; + miew: Miew | null; +} + +function MoleculeViewerMenu(props: MoleculeViewerMenuProps) { + return ( + <> +
+ <> + + Атом: {props.selectedAtom.name} ({props.selectedAtom.serial}) + + + Положение X: {props.selectedAtom.position.x} + Положение Y: {props.selectedAtom.position.y} + Положение Z: {props.selectedAtom.position.z} + +
+ + ); +} + +export default MoleculeViewerMenu; diff --git a/src/Components/PaginationContainer/PaginationContainer.css b/src/Components/PaginationContainer/PaginationContainer.css new file mode 100644 index 0000000..d2753e6 --- /dev/null +++ b/src/Components/PaginationContainer/PaginationContainer.css @@ -0,0 +1,16 @@ +.PaginationContainer { + width: 100%; + flex: 1; + position: relative; + display: flex; + flex-direction: column; + align-items: center; +} + +.PaginationContents { + flex-grow: 1; + width: 100%; + display: flex; + flex-direction: column; + gap: 10px; +} diff --git a/src/Components/PaginationContainer/PaginationContainer.tsx b/src/Components/PaginationContainer/PaginationContainer.tsx new file mode 100644 index 0000000..c1231bb --- /dev/null +++ b/src/Components/PaginationContainer/PaginationContainer.tsx @@ -0,0 +1,12 @@ +import { Pagination } from "@mantine/core"; +import "./PaginationContainer.css"; +import type { PropsWithChildren } from "react"; + +export function PaginationContainer(a: PropsWithChildren) { + return ( +
+
{a.children}
+ +
+ ); +} diff --git a/src/Components/StripedBg/Background.css b/src/Components/StripedBg/Background.css new file mode 100755 index 0000000..4cc0d69 --- /dev/null +++ b/src/Components/StripedBg/Background.css @@ -0,0 +1,45 @@ +.background-light { + width: 100%; + height: 100%; + overflow: hidden; + background: white + linear-gradient( + 135deg, + rgba(110, 156, 223, 0.125) 0%, + rgba(110, 156, 223, 0.125) 14.286%, + rgba(110, 156, 223, 0.25) 14.286%, + rgba(110, 156, 223, 0.25) 28.571%, + rgba(110, 156, 223, 0.375) 28.571%, + rgba(110, 156, 223, 0.375) 42.857%, + rgba(110, 156, 223, 0.5) 42.857%, + rgba(110, 156, 223, 0.5) 57.143%, + rgba(110, 156, 223, 0.725) 57.143%, + rgba(110, 156, 223, 0.725) 71.429%, + rgba(110, 156, 223, 0.85) 71.429%, + rgba(110, 156, 223, 0.85) 85.714%, + rgba(110, 156, 223, 1) 85.714% 100% + ); +} + +.background-dark { + width: 100%; + height: 100%; + overflow: hidden; + background: black + linear-gradient( + 135deg, + rgba(36, 54, 162, 0.353) 0%, + rgba(36, 54, 162, 0.353) 14.286%, + rgba(36, 54, 162, 0.5) 14.286%, + rgba(36, 54, 162, 0.5) 28.571%, + rgba(36, 54, 162, 0.612) 28.571%, + rgba(36, 54, 162, 0.612) 42.857%, + rgba(36, 54, 162, 0.707) 42.857%, + rgba(36, 54, 162, 0.707) 57.143%, + rgba(36, 54, 162, 0.851) 57.143%, + rgba(36, 54, 162, 0.851) 71.429%, + rgba(36, 54, 162, 0.921) 71.429%, + rgba(36, 54, 162, 0.921) 85.714%, + rgba(36, 54, 162, 1) 85.714% 100% + ); +} diff --git a/src/Components/StripedBg/Background.tsx b/src/Components/StripedBg/Background.tsx new file mode 100755 index 0000000..add7209 --- /dev/null +++ b/src/Components/StripedBg/Background.tsx @@ -0,0 +1,13 @@ +import { useMantineColorScheme } from "@mantine/core"; +import "./Background.css"; + +function Background() { + const { colorScheme } = useMantineColorScheme(); + return ( +
+ ); +} + +export default Background; diff --git a/src/GlobalVars.ts b/src/GlobalVars.ts new file mode 100755 index 0000000..e5a4244 --- /dev/null +++ b/src/GlobalVars.ts @@ -0,0 +1,11 @@ +export const baseUrl = "/quantum"; +export const baseDomain = "localhost"; +export const basePort = 8001; +export const keycloakURI = "http://auth.localhost"; +export const baseUri = `http://${baseDomain}:${basePort}`; +//AppShell vars +export const headerHeight = 50; +export const sideMenuWidth = 280; + +// Global Style vars +export const defaultAnimationDuration = 100; diff --git a/src/Modals/NewExperiment/NewExperiment.css b/src/Modals/NewExperiment/NewExperiment.css new file mode 100755 index 0000000..e69de29 diff --git a/src/Modals/NewExperiment/NewExperiment.tsx b/src/Modals/NewExperiment/NewExperiment.tsx new file mode 100755 index 0000000..f6e0013 --- /dev/null +++ b/src/Modals/NewExperiment/NewExperiment.tsx @@ -0,0 +1,116 @@ +import { + Button, + Center, + Modal, + Select, + Space, + Textarea, + TextInput, + Title, + UnstyledButton, +} from "@mantine/core"; +import { useEffect, useState, type ChangeEvent } from "react"; +import "./NewExperiment.css"; +import { useExperimentStore } from "Stores/ExperimentStore"; +import CustomButton from "Components/CustomButton/CustomButton"; + +interface NewExperimentModalProps { + isOpened: boolean; + setIsOpened: (opened: boolean) => void; +} + +export function NewExperimentModal(props: NewExperimentModalProps) { + const [name, setName] = useState(""); + const [description, setDescription] = useState(""); + const { addExperiment } = useExperimentStore(); + //reset on open dialog + useEffect(() => { + if (props.isOpened) { + setName(""); + setDescription(""); + } + }, [props.isOpened]); + + const handleClose = () => { + props.setIsOpened(false); + }; + + const handleCreateExperiment = () => { + //TODO: add logic for backend server + + addExperiment({ + id: 1, + name: name, + description: description, + team_id: 1, + tasks_ids: [], + date_created: new Date(), + experiment_status: "DRAFT", + experiment_type: "a", + }); + props.setIsOpened(false); + }; + + return ( + Новый эксперимент + centered + size="75%" + styles={{ + content: { paddingLeft: "10px" }, + title: { width: "100%" }, + }} + > + { + setName(event.currentTarget.value); + }} + > + + + +