From 1e64827f579120d6718f754276dcd808f09c811e Mon Sep 17 00:00:00 2001 From: zhh Date: Thu, 4 Jun 2026 16:26:23 +0900 Subject: [PATCH] Init Commit --- .gitignore | 24 + README.md | 16 + eslint.config.js | 24 + index.html | 20 + jsconfig.json | 9 + package-lock.json | 8109 ++++++++++++++++++++++++++ package.json | 36 + public/android-chrome-192x192.png | Bin 0 -> 5337 bytes public/android-chrome-512x512.png | Bin 0 -> 19549 bytes public/apple-touch-icon.png | Bin 0 -> 4839 bytes public/favicon-16x16.png | Bin 0 -> 449 bytes public/favicon-32x32.png | Bin 0 -> 798 bytes public/favicon.ico | Bin 0 -> 31212 bytes public/favicon.svg | 45 + public/icon-128.png | Bin 0 -> 3223 bytes public/icon-16.png | Bin 0 -> 449 bytes public/icon-180.png | Bin 0 -> 4839 bytes public/icon-192.png | Bin 0 -> 5337 bytes public/icon-256.png | Bin 0 -> 7223 bytes public/icon-32.png | Bin 0 -> 798 bytes public/icon-48.png | Bin 0 -> 1155 bytes public/icon-512.png | Bin 0 -> 19549 bytes public/icon-64.png | Bin 0 -> 1536 bytes public/icons.svg | 24 + public/site.webmanifest | 19 + src/AntdBootstrap.jsx | 112 + src/App.jsx | 26 + src/api.jsx | 75 + src/assets/hero.png | Bin 0 -> 13057 bytes src/assets/react.svg | 1 + src/assets/vite.svg | 1 + src/components/Composer.css | 43 + src/components/Composer.jsx | 86 + src/components/Cover.css | 24 + src/components/Cover.jsx | 20 + src/components/LongpressedButton.css | 16 + src/components/LongpressedButton.jsx | 73 + src/components/MessageCard.css | 62 + src/components/MessageCard.jsx | 65 + src/components/PrivateRoute.jsx | 11 + src/index.css | 45 + src/main.jsx | 20 + src/pages/Home.css | 57 + src/pages/Home.jsx | 301 + src/pages/RequireAuth.jsx | 82 + src/pages/login/Login.css | 10 + src/pages/login/Login.jsx | 47 + src/pages/option/Option.css | 45 + src/pages/option/Option.jsx | 29 + src/pages/test/Test.css | 0 src/pages/test/Test.html | 0 src/pages/test/Test.jsx | 51 + src/pages/threads/Threads.css | 35 + src/pages/threads/Threads.jsx | 62 + src/utils/audioDB.js | 116 + src/utils/auto_audio_player.js | 207 + src/utils/event_bus.jsx | 14 + src/utils/g_context.js | 7 + src/utils/http_cookie.jsx | 77 + src/utils/http_localjwt.jsx | 78 + src/utils/player.js | 55 + src/utils/recorder.jsx | 241 + src/utils/saving.jsx | 146 + vite.config.js | 52 + 64 files changed, 10718 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 jsconfig.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/android-chrome-192x192.png create mode 100644 public/android-chrome-512x512.png create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon-16x16.png create mode 100644 public/favicon-32x32.png create mode 100644 public/favicon.ico create mode 100644 public/favicon.svg create mode 100644 public/icon-128.png create mode 100644 public/icon-16.png create mode 100644 public/icon-180.png create mode 100644 public/icon-192.png create mode 100644 public/icon-256.png create mode 100644 public/icon-32.png create mode 100644 public/icon-48.png create mode 100644 public/icon-512.png create mode 100644 public/icon-64.png create mode 100644 public/icons.svg create mode 100644 public/site.webmanifest create mode 100644 src/AntdBootstrap.jsx create mode 100644 src/App.jsx create mode 100644 src/api.jsx create mode 100644 src/assets/hero.png create mode 100644 src/assets/react.svg create mode 100644 src/assets/vite.svg create mode 100644 src/components/Composer.css create mode 100644 src/components/Composer.jsx create mode 100644 src/components/Cover.css create mode 100644 src/components/Cover.jsx create mode 100644 src/components/LongpressedButton.css create mode 100644 src/components/LongpressedButton.jsx create mode 100644 src/components/MessageCard.css create mode 100644 src/components/MessageCard.jsx create mode 100644 src/components/PrivateRoute.jsx create mode 100644 src/index.css create mode 100644 src/main.jsx create mode 100644 src/pages/Home.css create mode 100644 src/pages/Home.jsx create mode 100644 src/pages/RequireAuth.jsx create mode 100644 src/pages/login/Login.css create mode 100644 src/pages/login/Login.jsx create mode 100644 src/pages/option/Option.css create mode 100644 src/pages/option/Option.jsx create mode 100644 src/pages/test/Test.css create mode 100644 src/pages/test/Test.html create mode 100644 src/pages/test/Test.jsx create mode 100644 src/pages/threads/Threads.css create mode 100644 src/pages/threads/Threads.jsx create mode 100644 src/utils/audioDB.js create mode 100644 src/utils/auto_audio_player.js create mode 100644 src/utils/event_bus.jsx create mode 100644 src/utils/g_context.js create mode 100644 src/utils/http_cookie.jsx create mode 100644 src/utils/http_localjwt.jsx create mode 100644 src/utils/player.js create mode 100644 src/utils/recorder.jsx create mode 100644 src/utils/saving.jsx create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /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 100644 index 0000000..a36934d --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project. diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..54e7a66 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,24 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{js,jsx}'], + extends: [ + js.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + globals: globals.browser, + parserOptions: { ecmaFeatures: { jsx: true } }, + }, + rules:{ + 'no-unused-vars': 'warn', + } + }, +]) diff --git a/index.html b/index.html new file mode 100644 index 0000000..7d60773 --- /dev/null +++ b/index.html @@ -0,0 +1,20 @@ + + + + + + + CHAT-JP + + + + + + + +
+ + + \ No newline at end of file diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..d250dff --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": [ "src/*" ] + }, + "jsx": "react" + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..cbbfc3c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8109 @@ +{ + "name": "jp_chat", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "jp_chat", + "version": "0.0.0", + "license": "ISC", + "dependencies": { + "@ant-design/icons": "^6.2.3", + "antd": "^6.4.3", + "axios": "^1.16.1", + "react": "^19.2.6", + "react-dom": "^19.2.6", + "react-router-dom": "^7.15.1" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.3.0", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.6.0", + "vite": "^8.0.12", + "vite-plugin-pwa": "^1.3.0" + } + }, + "node_modules/@ant-design/colors": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-8.0.1.tgz", + "integrity": "sha512-foPVl0+SWIslGUtD/xBr1p9U4AKzPhNYEseXYRRo5QSzGACYZrQbe11AYJbYfAWnWSpGBx6JjBmSeugUsD9vqQ==", + "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^3.0.0" + } + }, + "node_modules/@ant-design/cssinjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-2.1.2.tgz", + "integrity": "sha512-2Hy8BnCEH31xPeSLbhhB2ctCPXE2ZnASdi+KbSeS79BNbUhL9hAEe20SkUk+BR8aKTmqb6+FKFruk7w8z0VoRQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@emotion/hash": "^0.8.0", + "@emotion/unitless": "^0.7.5", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "stylis": "^4.3.4" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/cssinjs-utils": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs-utils/-/cssinjs-utils-2.1.2.tgz", + "integrity": "sha512-5fTHQ158jJJ5dC/ECeyIdZUzKxE/mpEMRZxthyG1sw/AKRHKgJBg00Yi6ACVXgycdje7KahRNvNET/uBccwCnA==", + "license": "MIT", + "dependencies": { + "@ant-design/cssinjs": "^2.1.2", + "@babel/runtime": "^7.23.2", + "@rc-component/util": "^1.4.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@ant-design/fast-color": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@ant-design/fast-color/-/fast-color-3.0.1.tgz", + "integrity": "sha512-esKJegpW4nckh0o6kV3Tkb7NPIZYbPnnFxmQDUmL08ukXZAvV85TZBr70eGuke/CIArLaP6aw8lt9KILjnWuOw==", + "license": "MIT", + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@ant-design/icons": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-6.2.3.tgz", + "integrity": "sha512-Pl3aoAtxQeKryYnt6VvDJtOxMOtA8wrRSACe/pTjOAIG3fdHrWm6Ivb4ku9tsFjYroSXBKirvuxG4QkwBXD9gg==", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^8.0.1", + "@ant-design/icons-svg": "^4.4.2", + "@rc-component/util": "^1.10.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", + "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==", + "license": "MIT" + }, + "node_modules/@ant-design/react-slick": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-2.0.0.tgz", + "integrity": "sha512-HMS9sRoEmZey8LsE/Yo6+klhlzU12PisjrVcydW3So7RdklyEd2qehyU6a7Yp+OYN72mgsYs3NFCyP2lCPFVqg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "clsx": "^2.1.1", + "json2mq": "^0.2.0", + "throttle-debounce": "^5.0.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@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.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@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-annotate-as-pure": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", + "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/traverse": "^7.29.7", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz", + "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.11" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", + "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", + "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz", + "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-wrap-function": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", + "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", + "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz", + "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz", + "integrity": "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz", + "integrity": "sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz", + "integrity": "sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz", + "integrity": "sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz", + "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz", + "integrity": "sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz", + "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz", + "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz", + "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz", + "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz", + "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz", + "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz", + "integrity": "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz", + "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz", + "integrity": "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz", + "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/template": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz", + "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz", + "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz", + "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz", + "integrity": "sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz", + "integrity": "sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz", + "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz", + "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz", + "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz", + "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz", + "integrity": "sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz", + "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz", + "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz", + "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz", + "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz", + "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz", + "integrity": "sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz", + "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz", + "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz", + "integrity": "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz", + "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz", + "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz", + "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz", + "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz", + "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz", + "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz", + "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz", + "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz", + "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz", + "integrity": "sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz", + "integrity": "sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz", + "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz", + "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.7.tgz", + "integrity": "sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz", + "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz", + "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz", + "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz", + "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz", + "integrity": "sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz", + "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz", + "integrity": "sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz", + "integrity": "sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7", + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.29.7", + "@babel/plugin-syntax-import-attributes": "^7.29.7", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.29.7", + "@babel/plugin-transform-async-generator-functions": "^7.29.7", + "@babel/plugin-transform-async-to-generator": "^7.29.7", + "@babel/plugin-transform-block-scoped-functions": "^7.29.7", + "@babel/plugin-transform-block-scoping": "^7.29.7", + "@babel/plugin-transform-class-properties": "^7.29.7", + "@babel/plugin-transform-class-static-block": "^7.29.7", + "@babel/plugin-transform-classes": "^7.29.7", + "@babel/plugin-transform-computed-properties": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-dotall-regex": "^7.29.7", + "@babel/plugin-transform-duplicate-keys": "^7.29.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-dynamic-import": "^7.29.7", + "@babel/plugin-transform-explicit-resource-management": "^7.29.7", + "@babel/plugin-transform-exponentiation-operator": "^7.29.7", + "@babel/plugin-transform-export-namespace-from": "^7.29.7", + "@babel/plugin-transform-for-of": "^7.29.7", + "@babel/plugin-transform-function-name": "^7.29.7", + "@babel/plugin-transform-json-strings": "^7.29.7", + "@babel/plugin-transform-literals": "^7.29.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.29.7", + "@babel/plugin-transform-member-expression-literals": "^7.29.7", + "@babel/plugin-transform-modules-amd": "^7.29.7", + "@babel/plugin-transform-modules-commonjs": "^7.29.7", + "@babel/plugin-transform-modules-systemjs": "^7.29.7", + "@babel/plugin-transform-modules-umd": "^7.29.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-new-target": "^7.29.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7", + "@babel/plugin-transform-numeric-separator": "^7.29.7", + "@babel/plugin-transform-object-rest-spread": "^7.29.7", + "@babel/plugin-transform-object-super": "^7.29.7", + "@babel/plugin-transform-optional-catch-binding": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/plugin-transform-private-methods": "^7.29.7", + "@babel/plugin-transform-private-property-in-object": "^7.29.7", + "@babel/plugin-transform-property-literals": "^7.29.7", + "@babel/plugin-transform-regenerator": "^7.29.7", + "@babel/plugin-transform-regexp-modifiers": "^7.29.7", + "@babel/plugin-transform-reserved-words": "^7.29.7", + "@babel/plugin-transform-shorthand-properties": "^7.29.7", + "@babel/plugin-transform-spread": "^7.29.7", + "@babel/plugin-transform-sticky-regex": "^7.29.7", + "@babel/plugin-transform-template-literals": "^7.29.7", + "@babel/plugin-transform-typeof-symbol": "^7.29.7", + "@babel/plugin-transform-unicode-escapes": "^7.29.7", + "@babel/plugin-transform-unicode-property-regex": "^7.29.7", + "@babel/plugin-transform-unicode-regex": "^7.29.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.29.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", + "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "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/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "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/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.130.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.130.0.tgz", + "integrity": "sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rc-component/async-validator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.1.0.tgz", + "integrity": "sha512-n4HcR5siNUXRX23nDizbZBQPO0ZM/5oTtmKZ6/eqL0L2bo747cklFdZGRN2f+c9qWGICwDzrhW0H7tE9PptdcA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.4" + }, + "engines": { + "node": ">=14.x" + } + }, + "node_modules/@rc-component/cascader": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@rc-component/cascader/-/cascader-1.15.0.tgz", + "integrity": "sha512-ZzpMtwFCRo3fbXHuDnncARJMZQjdqA2w7aDuPofNQt+aDx39st1hgfIpEwTBLhe2Hqsvs/zOr8RTtgxTkCPySw==", + "license": "MIT", + "dependencies": { + "@rc-component/select": "~1.6.0", + "@rc-component/tree": "~1.3.0", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/checkbox": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@rc-component/checkbox/-/checkbox-2.0.0.tgz", + "integrity": "sha512-3CXGPpAR9gsPKeO2N78HAPOzU30UdemD6HGJoWVJOpa6WleaGB5kzZj3v6bdTZab31YuWgY/RxV3VKPctn0DwQ==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/collapse": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/collapse/-/collapse-1.2.0.tgz", + "integrity": "sha512-ZRYSKSS39qsFx93p26bde7JUZJshsUBEQRlRXPuJYlAiNX0vyYlF5TsAm8JZN3LcF8XvKikdzPbgAtXSbkLUkw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/motion": "^1.1.4", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/color-picker": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-3.1.1.tgz", + "integrity": "sha512-OHaCHLHszCegdXmIq2ZRIZBN/EtpT6Wm8SG/gpzLATHbVKc/avvuKi+zlOuk05FTWvgaMmpxAko44uRJ3M+2pg==", + "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^3.0.1", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/context": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/context/-/context-2.0.1.tgz", + "integrity": "sha512-HyZbYm47s/YqtP6pKXNMjPEMaukyg7P0qVfgMLzr7YiFNMHbK2fKTAGzms9ykfGHSfyf75nBbgWw+hHkp+VImw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/dialog": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@rc-component/dialog/-/dialog-1.9.0.tgz", + "integrity": "sha512-zbAAogkg4kkKum79sLE6M+vq1jSAW25zdkafrahgcTP9t9S//SD634Znd1A4c8F2Gc12ZKnehGLsVaaOvZzD2A==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.3", + "@rc-component/portal": "^2.1.0", + "@rc-component/util": "^1.9.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/drawer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@rc-component/drawer/-/drawer-1.4.2.tgz", + "integrity": "sha512-1ib+fZEp6FBu+YvcIktm+nCQ+Q+qIpwpoaJH6opGr4ofh2QMq+qdr5DLC4oCf5qf3pcWX9lUWPYX652k4ini8Q==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/portal": "^2.1.3", + "@rc-component/util": "^1.9.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/dropdown": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rc-component/dropdown/-/dropdown-1.0.2.tgz", + "integrity": "sha512-6PY2ecUSYhDPhkNHHb4wfeAya04WhpmUSKzdR60G+kMNVUCX2vjT/AgTS0Lz0I/K6xrPMJ3enQbwVpeN3sHCgg==", + "license": "MIT", + "dependencies": { + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.11.0", + "react-dom": ">=16.11.0" + } + }, + "node_modules/@rc-component/form": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@rc-component/form/-/form-1.8.1.tgz", + "integrity": "sha512-8O7TB55Fi2mWIGvSnwZjk8jFqVNYyKDAswglwGShcbndxqzKz4cHwNtNaLjZlAeRge9wcB0LL8IWsC/Bl18raQ==", + "license": "MIT", + "dependencies": { + "@rc-component/async-validator": "^5.1.0", + "@rc-component/util": "^1.6.2", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/image": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@rc-component/image/-/image-1.9.0.tgz", + "integrity": "sha512-khF7w7xkBH5B1bsBcI1FSUZdkyd1aqpl2eYyILCqCzzQH3XdfehGUaZTnptyaJJfs09/R5hv9jXWyazOMFIClQ==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.0.0", + "@rc-component/portal": "^2.1.2", + "@rc-component/util": "^1.10.1", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/input": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@rc-component/input/-/input-1.3.1.tgz", + "integrity": "sha512-iFvTUT9W+JC/MSin2aGAk8NqsVlTzcExNC9DZariON1IWirju9NoNeEk47an4Q8iHazkoVI/y1LnDi88+CPcig==", + "license": "MIT", + "dependencies": { + "@rc-component/resize-observer": "^1.1.1", + "@rc-component/util": "^1.11.1", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@rc-component/input-number": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@rc-component/input-number/-/input-number-1.6.2.tgz", + "integrity": "sha512-Gjcq7meZlCOiWN1t1xCC+7/s85humHVokTBI7PJgTfoyw5OWF74y3e6P8PHX104g9+b54jsodFIzyaj6p8LI9w==", + "license": "MIT", + "dependencies": { + "@rc-component/mini-decimal": "^1.0.1", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mentions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@rc-component/mentions/-/mentions-1.9.0.tgz", + "integrity": "sha512-WUwfFKDSOF5S9UPsNsXcLYtzjTxBGsftTXWRbZuxX6BYrsySISTnujfJNgaaQ6qVzaCDJ35QUkZKvsYxip1C5g==", + "license": "MIT", + "dependencies": { + "@rc-component/input": "~1.3.0", + "@rc-component/menu": "~1.3.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/menu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@rc-component/menu/-/menu-1.3.0.tgz", + "integrity": "sha512-u3NfiwpiEgT177qa5Yxm5QsI8i/93EBGpWj8HYZQDnh2pCZ2xtQCe/+w3pSR2NlwKOZDTCKzEhEyD09mGphssA==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/overflow": "^1.0.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mini-decimal": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rc-component/mini-decimal/-/mini-decimal-1.1.3.tgz", + "integrity": "sha512-bk/FJ09fLf+NLODMAFll6CfYrHPBioTedhW6lxDBuuWucJEqFUd4l/D/5JgIi3dina6sYahB8iuPAZTNz2pMxw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0" + }, + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@rc-component/motion": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@rc-component/motion/-/motion-1.3.2.tgz", + "integrity": "sha512-itfd+GztzJYAb04Z4RkEub1TbJAfZc2Iuy8p44U44xD1F5+fNYFKI3897ijlbIyfvXkTmMm+KGcjkQQGMHywEQ==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mutate-observer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/mutate-observer/-/mutate-observer-2.0.1.tgz", + "integrity": "sha512-AyarjoLU5YlxuValRi+w8JRH2Z84TBbFO2RoGWz9d8bSu0FqT8DtugH3xC3BV7mUwlmROFauyWuXFuq4IFbH+w==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/notification": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@rc-component/notification/-/notification-2.0.7.tgz", + "integrity": "sha512-nqZzpf6BPdaj+3ILx7si79LLmqPKyUmQoXa+/9gg0SkH0v1DbD66oJgRMSBEVnd/zUT3D4gwxWIHUKebYf2ZXQ==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/util": "^1.11.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/overflow": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/overflow/-/overflow-1.0.1.tgz", + "integrity": "sha512-syfmgAABaHCnCDzPwHZ/2tuvIcpOO3jefYZMmfkN+pmo8HKTzsfhS57vxo4ksPdN0By+uWVJhJWNFozNBxi2eA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@rc-component/resize-observer": "^1.0.1", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/pagination": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/pagination/-/pagination-1.2.0.tgz", + "integrity": "sha512-YcpUFE8dMLfSo6OARJlK6DbHHvrxz7pMGPGmC/caZSJJz6HRKHC1RPP001PRHCvG9Z/veD039uOQmazVuLJzlw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/picker": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rc-component/picker/-/picker-1.10.0.tgz", + "integrity": "sha512-vVOXP2RVWozwpERGUFAehVH1Jz6o/uRrAb9qSZm1LC+iJs8rvEwFo1bzz2jlOYV+uWwu0dIuG86tnDui14Ea0w==", + "license": "MIT", + "dependencies": { + "@rc-component/overflow": "^1.0.0", + "@rc-component/resize-observer": "^1.0.0", + "@rc-component/trigger": "^3.6.15", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=12.x" + }, + "peerDependencies": { + "date-fns": ">= 2.x", + "dayjs": ">= 1.x", + "luxon": ">= 3.x", + "moment": ">= 2.x", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + }, + "peerDependenciesMeta": { + "date-fns": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + } + } + }, + "node_modules/@rc-component/portal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-2.2.0.tgz", + "integrity": "sha512-oc6FlA+uXCMiwArHsJyHcIkX4q6uKyndrPol2eWX8YPkAnztHOPsFIRtmWG4BMlGE5h7YIRE3NiaJ5VS8Lb1QQ==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=12.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/progress": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rc-component/progress/-/progress-1.0.2.tgz", + "integrity": "sha512-WZUnH9eGxH1+xodZKqdrHke59uyGZSWgj5HBM5Kwk5BrTMuAORO7VJ2IP5Qbm9aH3n9x3IcesqHHR0NWPBC7fQ==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/qrcode": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@rc-component/qrcode/-/qrcode-1.1.1.tgz", + "integrity": "sha512-LfLGNymzKdUPjXUbRP+xOhIWY4jQ+YMj5MmWAcgcAq1Ij8XP7tRmAXqyuv96XvLUBE/5cA8hLFl9eO1JQMujrA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/rate": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/rate/-/rate-1.0.1.tgz", + "integrity": "sha512-bkXxeBqDpl5IOC7yL7GcSYjQx9G8H+6kLYQnNZWeBYq2OYIv1MONd6mqKTjnnJYpV0cQIU2z3atdW0j1kttpTw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/resize-observer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/resize-observer/-/resize-observer-1.1.2.tgz", + "integrity": "sha512-t/Bb0W8uvL4PYKAB3YcChC+DlHh0Wt5kM7q/J+0qpVEUMLe7Hk5zuvc9km0hMnTFPSx5Z7Wu/fzCLN6erVLE8Q==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/segmented": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@rc-component/segmented/-/segmented-1.3.0.tgz", + "integrity": "sha512-5J/bJ01mbDnoA6P/FW8SxUvKn+OgUSTZJPzCNnTBntG50tzoP7DydGhqxp7ggZXZls7me3mc2EQDXakU3iTVFg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@rc-component/motion": "^1.1.4", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@rc-component/select": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/@rc-component/select/-/select-1.6.15.tgz", + "integrity": "sha512-SyVCWnqxCQZZcQvQJ/CxSjx2bGma6ds/HtnpkIfZVnt6RoEgbqUmHgD6vrzNarNXwbLXerwVzWwq8F3d1sst7g==", + "license": "MIT", + "dependencies": { + "@rc-component/overflow": "^1.0.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.3.0", + "@rc-component/virtual-list": "^1.0.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@rc-component/slider": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/slider/-/slider-1.0.1.tgz", + "integrity": "sha512-uDhEPU1z3WDfCJhaL9jfd2ha/Eqpdfxsn0Zb0Xcq1NGQAman0TWaR37OWp2vVXEOdV2y0njSILTMpTfPV1454g==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/steps": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@rc-component/steps/-/steps-1.2.2.tgz", + "integrity": "sha512-/yVIZ00gDYYPHSY0JP+M+s3ZvuXLu2f9rEjQqiUDs7EcYsUYrpJ/1bLj9aI9R7MBR3fu/NGh6RM9u2qGfqp+Nw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/switch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rc-component/switch/-/switch-1.0.3.tgz", + "integrity": "sha512-Jgi+EbOBquje/XNdofr7xbJQZPYJP+BlPfR0h+WN4zFkdtB2EWqEfvkXJWeipflwjWip0/17rNbxEAqs8hVHfw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/table": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@rc-component/table/-/table-1.10.0.tgz", + "integrity": "sha512-SjtpcCf+rL7dDc62GKT3rXTdERjVuJvRiqjpU7g0Jc/ewCifXynHc7Nm3Em1XsD+WhGrgQtxNDScI/0+Lpfr0w==", + "license": "MIT", + "dependencies": { + "@rc-component/context": "^2.0.1", + "@rc-component/resize-observer": "^1.0.0", + "@rc-component/util": "^1.1.0", + "@rc-component/virtual-list": "^1.0.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/tabs": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@rc-component/tabs/-/tabs-1.9.0.tgz", + "integrity": "sha512-tn1slmbbaTyt8mgwyWJcT8jo/qNiYUs6u1H7OgGQt9faYO06BJIkU5cTmMqORzIrNmSEeeUY6pD5i+JlqSHYhg==", + "license": "MIT", + "dependencies": { + "@rc-component/dropdown": "~1.0.0", + "@rc-component/menu": "~1.3.0", + "@rc-component/motion": "^1.1.3", + "@rc-component/resize-observer": "^1.0.0", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/tooltip": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@rc-component/tooltip/-/tooltip-1.4.0.tgz", + "integrity": "sha512-8Rx5DCctIlLI4raR0I0xHjVTf1aF48+gKCNeAAo5bmF5VoR5YED+A/XEqzXv9KKqrJDRcd3Wndpxh2hyzrTtSg==", + "license": "MIT", + "dependencies": { + "@rc-component/trigger": "^3.7.1", + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/tour": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-2.4.0.tgz", + "integrity": "sha512-aui4r4TqmTzwaBgcQxHYep8kM8PTjZFufjokObpy35KfFeZ0k9ArquWFZqegQlH24P14t+F0qO0mGTgzlav1yg==", + "license": "MIT", + "dependencies": { + "@rc-component/portal": "^2.2.0", + "@rc-component/trigger": "^3.0.0", + "@rc-component/util": "^1.7.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/tree": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@rc-component/tree/-/tree-1.3.2.tgz", + "integrity": "sha512-bJFj46wEkpBPnWyTm18XmgAgNQ/4YvprxMOPPY2a6rmhGJYxLuNKEFiL5Qej4Qctu9wHJm8WW+v2SYskafE0kA==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.0.0", + "@rc-component/util": "^1.11.1", + "@rc-component/virtual-list": "^1.2.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=10.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@rc-component/tree-select": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@rc-component/tree-select/-/tree-select-1.9.0.tgz", + "integrity": "sha512-GXcFe15a+trUl1/J3OHWQhsVWFpwFpGFK2cqYWZ1sK22Zs3KZTvMwDpzr75PIo1s6QVioVxpE/pRwRopkeDQ6w==", + "license": "MIT", + "dependencies": { + "@rc-component/select": "~1.6.0", + "@rc-component/tree": "~1.3.0", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@rc-component/trigger": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-3.9.0.tgz", + "integrity": "sha512-X8btpwfrT27AgrZVOz4swclhEHTZcqaHeQMXXBgveagOiakTa36uObXbdwerXffgV8G9dH1fAAE0DHtVQs8EHg==", + "license": "MIT", + "dependencies": { + "@rc-component/motion": "^1.1.4", + "@rc-component/portal": "^2.2.0", + "@rc-component/resize-observer": "^1.1.1", + "@rc-component/util": "^1.2.1", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/upload": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/upload/-/upload-1.1.0.tgz", + "integrity": "sha512-LIBV90mAnUE6VK5N4QvForoxZc4XqEYZimcp7fk+lkE4XwHHyJWxpIXQQwMU8hJM+YwBbsoZkGksL1sISWHQxw==", + "license": "MIT", + "dependencies": { + "@rc-component/util": "^1.3.0", + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/util": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@rc-component/util/-/util-1.11.1.tgz", + "integrity": "sha512-awVlI3ub2vqfqkYxOBc/uQ0efm3jw0wcrhtO/YWLyZfxiKXczKwNbVuhlnyxytDt7H9pbbVQiqr+O6MLATtRYg==", + "license": "MIT", + "dependencies": { + "is-mobile": "^5.0.0", + "react-is": "^18.2.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rc-component/virtual-list": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/virtual-list/-/virtual-list-1.2.0.tgz", + "integrity": "sha512-iavRm1Jo4GDbASQwdGa7jFyk93RvSOo9xHyBT4QL1pgFJj/Fdf1G+3RErH7/7BmAMvx2AkF62mjGYxDbXsK9TQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.0", + "@rc-component/resize-observer": "^1.0.1", + "@rc-component/util": "^1.4.0", + "clsx": "^2.1.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.1.tgz", + "integrity": "sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.1.tgz", + "integrity": "sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.1.tgz", + "integrity": "sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.1.tgz", + "integrity": "sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.1.tgz", + "integrity": "sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.1.tgz", + "integrity": "sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.1.tgz", + "integrity": "sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.1.tgz", + "integrity": "sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.1.tgz", + "integrity": "sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.1.tgz", + "integrity": "sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.1.tgz", + "integrity": "sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.1.tgz", + "integrity": "sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.1.tgz", + "integrity": "sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.1.tgz", + "integrity": "sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.1.tgz", + "integrity": "sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-babel": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.1.0.tgz", + "integrity": "sha512-dFZNuFD2YRcoomP4oYf+DvQNSUA9ih+A3vUqopQx5EdtPGo3WBnQcI/S8pwpz91UsGfL0HsMSOlaMld8HrbubA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.3.tgz", + "integrity": "sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-1.0.0.tgz", + "integrity": "sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "serialize-javascript": "^7.0.3", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.61.0.tgz", + "integrity": "sha512-dnxczajOqt0gesZlN5pGQ1s1imQVrsmCw5G2Ci4oM+0WvNz3pyRnlWrT7McoZIb8VlFwCawdmbWRmxRn7HI+VQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.61.0.tgz", + "integrity": "sha512-Bp3JpGP00Vu3f238ivRrjf7z3xSzVPXqCmaJYA9t2c+c8vKYvOzmXF7LkkeUalTEGd6cZcSWe+PFIP3Vy48fRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.61.0.tgz", + "integrity": "sha512-zaYIpr670mUmmZ1tVzUFplbQbG7h3Gugx3L5FoqhsC2m/YnLlR1a7zVLmXNPy+iY1tFPEbNG+HHBXZGyId0G5w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.61.0.tgz", + "integrity": "sha512-+P49fvkv2dSoeevUW+lgZ/I2JHSsJCK1Lyjj7Cu6E4UHG4tS9XIefzIjo5qhgELjAclnen1rLzK2PMKJdo+Dyg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.61.0.tgz", + "integrity": "sha512-l3FAAOyKJXH2ea6KNFN+MMgC/rnE94YGLXs2ehYqDcCoHt1DpvgWX75BhUJxN38XojP7Ul+4H8PRn7EdyqSDrw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.61.0.tgz", + "integrity": "sha512-VokPN3TSctKj65cyCNPaUh4vMFA8awxOot/0sp+4J7ZlNRKQEhXhawqPwajoi8H5ZFt61i0ugZJuTKXBjGJ17Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.61.0.tgz", + "integrity": "sha512-DxH0P3wxm+Yzs/p3zrk9dw1rURu8p0Nv5+MRK/L7OtnLNg5rLZraSBFZ8iUXOd9f2BlhJyEpIZUH/emjq4UJ4g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.61.0.tgz", + "integrity": "sha512-T6ZvMNe84kAz6TBWHC7hGAoEtzP1LWYw/AqayGWEF6uISt3Abk/st06LqRD9THd7Xz3NxzurUpzAuEAUbZf+nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.61.0.tgz", + "integrity": "sha512-q/4hzvQkDs8b4jIBab1pnLiiM0ayTZsN2amBFPDzuyZxjEd4wDwx0UJFYM3cOZzSf5Kw8fnWSprJzIBMkcR44Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.61.0.tgz", + "integrity": "sha512-vvYWX3akdEAY6km+9wAqFDnk6pQsbJKVnj7xawcvs/+fdlYBGp+U+Qq/lLfpIxYIZvZLHMAKD9HLdacSx/r3dw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.61.0.tgz", + "integrity": "sha512-DePa5cqOxDP/Zp0VOXpeWaGew5iIv5DXp9NYbzkX5PFQyWVX9184WCTh3hvr/7lhXo8ZVlbFLkz8+o/q1dU6gA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.61.0.tgz", + "integrity": "sha512-LV8aWMB8UChglMCEzs7RkN0GsH29RJaLLqwm9fCIjlqwxQTiWAqNcc7wjBkH31hV0PU/yVxGYvrYsgfea2qw6g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.61.0.tgz", + "integrity": "sha512-QoNSnwQtaeNu5grdBbsL0tt1uyl5EnS8DA8Mr3nluMXbhdQNyhN+G4tBax7VCdxLKj8YJ0/4OO9Ho84jMnJtKA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.61.0.tgz", + "integrity": "sha512-/zZp5MKapIIApE8trN8qLGNSiRN9TUoaUZ1cmVu4XnVdd5LQLOXTtyi+vtfUbNnT3iyjzpPqYeKXmvJ+gJGYWw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.61.0.tgz", + "integrity": "sha512-RbrzcD3aJ1k3UbtMRRBNwojdVVyXjuVAFTfn/xPa6EEl6GE9Sm/akPgFTb9aAC9pMKGJ6CtWxaGrqWcabH+ySg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.61.0.tgz", + "integrity": "sha512-ZF+onDsBso8PJf1XaG9lB+O9RnBpKGnY6OrzC4CSHrtC1jb6jWLTKK4bRqdoCXHd22gyr2hiYmEAm8Wns/BOCw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.61.0.tgz", + "integrity": "sha512-Atk0aSIk5Zx2Wuh9dgRQgLP0Koc8hOeYpbWryMXyk8G8/HmPkwPPkMqIIDhrXHHYqfUzSJA/I7IWSBv8xSmRBA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.0.tgz", + "integrity": "sha512-0uMOcf3eZ5K+K4cYHkdxShFMPlPXCOdfDFEFn9dNYAEEd2cVvmOfH7zFgRVoDgmtQ1m9k5q7qfrHzyMAubKYUA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.61.0.tgz", + "integrity": "sha512-mvFtE4A/t/7hRJ7X8Ozmu8FsIkAUat2nzl12pgU337BRmq87AQUJztwHz2Zv5/tjo9/C95E66CK03SI/ToEDJw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.61.0.tgz", + "integrity": "sha512-z9b9+aTxvt8n2rNltMPvyaUfB8NJ+CVyOrGK/MdIKHx7B+lXmZpm/XbRsU7Rpf3fRqJ2uS6mBJiJveCtq8LHDg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.61.0.tgz", + "integrity": "sha512-jXaXFqKMehsOc+g8R6oo33RRC6w07G9jDBxAE5eAKX7mOcCbZloYIPNhfG9Wl+P9O9IWHFO4OJgPi1Ml2qkt7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.61.0.tgz", + "integrity": "sha512-OXNWVFocS2IA4+QplhTZZ2a+8hPZR7T8KuozsNmJKK8y7cp83StHvGksfHzPG3wczWTczyWHVQuqeiTUbjiyBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.61.0.tgz", + "integrity": "sha512-AlAbNtBO637LxSldqV43z0FfXoGfl2TW1DgAg/bs7aQswFbDewz2SJm3BUhiGfbOVtW571xbc9p+REdxhyN/Eg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.61.0.tgz", + "integrity": "sha512-QRSrQXyJ1M4tjNXdR0/G/IgV6lzfQQJYBjlWIEYkY2Xs86DRl/iEpQ4blMDjJxSl7n19eDKKXMg0AmuBVYy8pQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.61.0.tgz", + "integrity": "sha512-tkuFxhvKO/HlGd0VsINF6vHSYH8AF8W0TcNxKDK6JZmrehngFj78pToc8iemtnvwilDjs2G/qSzYFhe9U8q+fw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@trickfilm400/rollup-plugin-off-main-thread": { + "version": "3.0.0-pre1", + "resolved": "https://registry.npmjs.org/@trickfilm400/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-3.0.0-pre1.tgz", + "integrity": "sha512-/67zpWDBLV+oYAEL682s1ktXL0HgqX76f6gaVGkGnVZlBbm1zd0v4Bz8MFF2GGhoX9rvfq3KSQHubFHwa6w6/Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "ejs": "^3.1.10", + "json5": "^2.2.3", + "magic-string": "^0.30.21", + "string.prototype.matchall": "^4.0.12" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.15.tgz", + "integrity": "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.2.tgz", + "integrity": "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "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/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/antd": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/antd/-/antd-6.4.3.tgz", + "integrity": "sha512-6H2avkxCGfxcF67r3J2mwm9Ck50el1pks/73vfM1wDsPL/tPtj5vHuauMgJFnrqmq7CH3g8aoZ0VBQbt+jpAsw==", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^8.0.1", + "@ant-design/cssinjs": "^2.1.2", + "@ant-design/cssinjs-utils": "^2.1.2", + "@ant-design/fast-color": "^3.0.1", + "@ant-design/icons": "^6.2.3", + "@ant-design/react-slick": "~2.0.0", + "@babel/runtime": "^7.29.2", + "@rc-component/cascader": "~1.15.0", + "@rc-component/checkbox": "~2.0.0", + "@rc-component/collapse": "~1.2.0", + "@rc-component/color-picker": "~3.1.1", + "@rc-component/dialog": "~1.9.0", + "@rc-component/drawer": "~1.4.2", + "@rc-component/dropdown": "~1.0.2", + "@rc-component/form": "~1.8.1", + "@rc-component/image": "~1.9.0", + "@rc-component/input": "~1.3.0", + "@rc-component/input-number": "~1.6.2", + "@rc-component/mentions": "~1.9.0", + "@rc-component/menu": "~1.3.0", + "@rc-component/motion": "^1.3.2", + "@rc-component/mutate-observer": "^2.0.1", + "@rc-component/notification": "~2.0.7", + "@rc-component/pagination": "~1.2.0", + "@rc-component/picker": "~1.10.0", + "@rc-component/progress": "~1.0.2", + "@rc-component/qrcode": "~1.1.1", + "@rc-component/rate": "~1.0.1", + "@rc-component/resize-observer": "^1.1.2", + "@rc-component/segmented": "~1.3.0", + "@rc-component/select": "~1.6.15", + "@rc-component/slider": "~1.0.1", + "@rc-component/steps": "~1.2.2", + "@rc-component/switch": "~1.0.3", + "@rc-component/table": "~1.10.0", + "@rc-component/tabs": "~1.9.0", + "@rc-component/tooltip": "~1.4.0", + "@rc-component/tour": "~2.4.0", + "@rc-component/tree": "~1.3.1", + "@rc-component/tree-select": "~1.9.0", + "@rc-component/trigger": "^3.9.0", + "@rc-component/upload": "~1.1.0", + "@rc-component/util": "^1.11.0", + "clsx": "^2.1.1", + "dayjs": "^1.11.11", + "scroll-into-view-if-needed": "^3.1.0", + "throttle-debounce": "^5.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "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/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.1.tgz", + "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.31", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.31.tgz", + "integrity": "sha512-MujYO3eP72uvmSE0i4wltsodRfIpZATP3jvzRNRGGxgzId7aVocVJJV3nf01qnzzKFGxQVC9bpWxl5cjxTr/7Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "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.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001793", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", + "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", + "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/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/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/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", + "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==", + "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.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/core-js-compat": { + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "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/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "license": "MIT", + "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/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dayjs": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", + "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/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/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/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.360", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.360.tgz", + "integrity": "sha512-GkcBt6YYAw9SxFWn+xVar4cLVGlXVuswwtRLBozi2zp0GjXs4ZnOrqV4zbXzg35n7w81hCkyJNYicgXlVHAmBA==", + "dev": true, + "license": "ISC" + }, + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": "10.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.0.tgz", + "integrity": "sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.6.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.2.tgz", + "integrity": "sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^9 || ^10" + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/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/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "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/eta": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-4.6.0.tgz", + "integrity": "sha512-lW6is4T1NFOYnmqGZIfvixqj7A7sSvScF+DN8EK6K58xI5MZ5UvYe0GjopxOXQtZvUn4eDdVuZ8XSoYWTMEKwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/bgub/eta?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/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/filelist/node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/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/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "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-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true, + "license": "ISC" + }, + "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/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-mobile": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-5.0.0.tgz", + "integrity": "sha512-Tz/yndySvLAEXh+Uk8liFCxOwVH6YutuR74utvOcu7I9Di+DwM0mtdPVZNaVvvBUM2OXxne/NhOs1zAO7riusQ==", + "license": "MIT" + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "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/jackspeak": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^9.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "license": "MIT", + "dependencies": { + "string-convert": "^0.2.0" + } + }, + "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/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/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.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true, + "license": "MIT" + }, + "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/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/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/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": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "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.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.44", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.44.tgz", + "integrity": "sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "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/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "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/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz", + "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz", + "integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.6" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-router": { + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.15.1.tgz", + "integrity": "sha512-R8rl9HhgikFYoPJymnUtPXWbnDb3oget6lQnfIoupbt61aT9aOhRkDsY2XRhZRyX1Z/8a5sL74fXmFNm3NRK5A==", + "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-router-dom": { + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.15.1.tgz", + "integrity": "sha512-AzF62gjY6U9rkMq4RfP/r2EVtQ7DMfNMjyOp/flLTCrtRylLiK4wT4pSq6O8rOXZ2eXdZYJPEYe+ifomiv+Igg==", + "license": "MIT", + "dependencies": { + "react-router": "7.15.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", + "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rolldown": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.1.tgz", + "integrity": "sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.130.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.1", + "@rolldown/binding-darwin-arm64": "1.0.1", + "@rolldown/binding-darwin-x64": "1.0.1", + "@rolldown/binding-freebsd-x64": "1.0.1", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.1", + "@rolldown/binding-linux-arm64-gnu": "1.0.1", + "@rolldown/binding-linux-arm64-musl": "1.0.1", + "@rolldown/binding-linux-ppc64-gnu": "1.0.1", + "@rolldown/binding-linux-s390x-gnu": "1.0.1", + "@rolldown/binding-linux-x64-gnu": "1.0.1", + "@rolldown/binding-linux-x64-musl": "1.0.1", + "@rolldown/binding-openharmony-arm64": "1.0.1", + "@rolldown/binding-wasm32-wasi": "1.0.1", + "@rolldown/binding-win32-arm64-msvc": "1.0.1", + "@rolldown/binding-win32-x64-msvc": "1.0.1" + } + }, + "node_modules/rollup": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.0.tgz", + "integrity": "sha512-T9mWdbWfQtp0B5lv/HX+wrhYsmXRlcWnXXmJbXqKJhlRaoS6KMhq0gpyzW4UJfclcxrEdLnTgjT2NjruLONu0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.61.0", + "@rollup/rollup-android-arm64": "4.61.0", + "@rollup/rollup-darwin-arm64": "4.61.0", + "@rollup/rollup-darwin-x64": "4.61.0", + "@rollup/rollup-freebsd-arm64": "4.61.0", + "@rollup/rollup-freebsd-x64": "4.61.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.61.0", + "@rollup/rollup-linux-arm-musleabihf": "4.61.0", + "@rollup/rollup-linux-arm64-gnu": "4.61.0", + "@rollup/rollup-linux-arm64-musl": "4.61.0", + "@rollup/rollup-linux-loong64-gnu": "4.61.0", + "@rollup/rollup-linux-loong64-musl": "4.61.0", + "@rollup/rollup-linux-ppc64-gnu": "4.61.0", + "@rollup/rollup-linux-ppc64-musl": "4.61.0", + "@rollup/rollup-linux-riscv64-gnu": "4.61.0", + "@rollup/rollup-linux-riscv64-musl": "4.61.0", + "@rollup/rollup-linux-s390x-gnu": "4.61.0", + "@rollup/rollup-linux-x64-gnu": "4.61.0", + "@rollup/rollup-linux-x64-musl": "4.61.0", + "@rollup/rollup-openbsd-x64": "4.61.0", + "@rollup/rollup-openharmony-arm64": "4.61.0", + "@rollup/rollup-win32-arm64-msvc": "4.61.0", + "@rollup/rollup-win32-ia32-msvc": "4.61.0", + "@rollup/rollup-win32-x64-gnu": "4.61.0", + "@rollup/rollup-win32-x64-msvc": "4.61.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/scroll-into-view-if-needed": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz", + "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^3.0.2" + } + }, + "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/serialize-javascript": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz", + "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=20.0.0" + } + }, + "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/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smob": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.2.tgz", + "integrity": "sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "deprecated": "The work that was done in this beta branch won't be included in future versions", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==", + "license": "MIT" + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/stylis": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.4.0.tgz", + "integrity": "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==", + "license": "MIT" + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.48.0.tgz", + "integrity": "sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "license": "MIT", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.13.tgz", + "integrity": "sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.14", + "rolldown": "1.0.1", + "tinyglobby": "^0.2.16" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-pwa": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-1.3.0.tgz", + "integrity": "sha512-c5kMgN+ITrOtHXp8PAtk2uOIEea6XjP/unCGxOWWBzQ6qa65qj/awHg0wf+QF9E/2u9vh86LqxPwzEPNbM2r5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.6", + "pretty-bytes": "^6.1.1", + "tinyglobby": "^0.2.10", + "workbox-build": "^7.4.1", + "workbox-window": "^7.4.1" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vite-pwa/assets-generator": "^1.0.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "workbox-build": "^7.4.1", + "workbox-window": "^7.4.1" + }, + "peerDependenciesMeta": { + "@vite-pwa/assets-generator": { + "optional": true + } + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "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/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.21.tgz", + "integrity": "sha512-zbRA8cVm6io/d5W8uIe2hblzN76/Wm3v/yiythQvr+dpBWeqhPSWIDNj4zOyHi4zKbMK6DN34Xsr9jPHJERAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/workbox-background-sync": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.4.1.tgz", + "integrity": "sha512-HhT7KE8tOWDm02wRNshXUnUPofMlhenF2DBdUnDPOubhizzPeItkYTmAB6td1Z2cjYPa98vzEiPLEuzn5hN66g==", + "dev": true, + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.4.1.tgz", + "integrity": "sha512-uAlgslKLvbQY+suirIdnBCSYrcgBhjp81Nj4l1lj/Jmj0MJO2CJERnCJjT0GFVwmReV0N+zs78K6gqd5gr9/+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-build": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.4.1.tgz", + "integrity": "sha512-SDhxIvEAde9Gy/5w4Yo1Jh/M49Z0qE3q0oteyE8zGq0DScxFqVBcCtIXFuLtmtxRQZCMbf0prco4VyEu3KBQuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.24.4", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-replace": "^6.0.3", + "@rollup/plugin-terser": "^1.0.0", + "@trickfilm400/rollup-plugin-off-main-thread": "^3.0.0-pre1", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "eta": "^4.5.1", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^11.0.1", + "pretty-bytes": "^5.3.0", + "rollup": "^4.53.3", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.4.1", + "workbox-broadcast-update": "7.4.1", + "workbox-cacheable-response": "7.4.1", + "workbox-core": "7.4.1", + "workbox-expiration": "7.4.1", + "workbox-google-analytics": "7.4.1", + "workbox-navigation-preload": "7.4.1", + "workbox-precaching": "7.4.1", + "workbox-range-requests": "7.4.1", + "workbox-recipes": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1", + "workbox-streams": "7.4.1", + "workbox-sw": "7.4.1", + "workbox-window": "7.4.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.7.tgz", + "integrity": "sha512-TajUJwGWbDwkCx/CZi7tRE8PVB7simCvKJfHUsSdvps+aTM/PDPP4gkLmKnc+x3CE//y9i/nj74GqdL/hwk7Iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonpointer": "^5.0.1", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-build/node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.4.1.tgz", + "integrity": "sha512-8xaFoJdDc2OjrlbbL3gEeBO1WKcMwRqwLRupgqahYXu75yXajPLuwrbXMrIGZuWYXrQwk0xDjOxZ/ujCy/oJYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-core": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.4.1.tgz", + "integrity": "sha512-DT+vu46eh/2vRsSHTY4Xmc32Z1rr9PRlQUXr1Dx30ZuXRWwOsvZgGgcwxcasubQLQmbTNYZjv44LkBAQ4tT5tQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.4.1.tgz", + "integrity": "sha512-lRKUF7b+OGbeXkQk1s6MHXOa3d7Xxf7Of31W6c6hCfipfIyrtdWZ89stq21AHZMaoG7VNFoHply4Ox+rU31TWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-google-analytics": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.4.1.tgz", + "integrity": "sha512-Mks1JwLEt++ZAkF6sS1OpSh9RtAMIsiDgRpK+codiHGIPXeaUOgi4cPc3GFadUl8V5QPeypEk8Oxgl3HlwVzHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-background-sync": "7.4.1", + "workbox-core": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.4.1.tgz", + "integrity": "sha512-C4KVsjPcYKJOhr631AxR9XoG2rLF3QiTk5aMv36MXOjtWvm8axwNFAtKUPGsWUwLXXAMgYM1En7fsvndaXeXRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-precaching": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.4.1.tgz", + "integrity": "sha512-cdr/9qByww7yzEp7zg/qI4ukUrrNjQLgN+ONQRpjy/VqGQXwkgHwr00KksGJK8v0VifwDXBb8a4cWNZH71jn3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1" + } + }, + "node_modules/workbox-range-requests": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.4.1.tgz", + "integrity": "sha512-7i2oxAUE82gHdAJBCAQ04JzNOdRPqzuOzGfoUyJpFSmeqBNYGPrAH8GPoPjUQTfp+NycwrD2H68VtuF8qxv0vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-recipes": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.4.1.tgz", + "integrity": "sha512-gnbVfmV4/TtmQaM4x9AtuXhcdstJsep3XMVeztOrQVPT+R6+6DeBjGTCQ7fFCXm+4GEHUA5VEBTyi5+4gWGeog==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-cacheable-response": "7.4.1", + "workbox-core": "7.4.1", + "workbox-expiration": "7.4.1", + "workbox-precaching": "7.4.1", + "workbox-routing": "7.4.1", + "workbox-strategies": "7.4.1" + } + }, + "node_modules/workbox-routing": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.4.1.tgz", + "integrity": "sha512-yubJGErZOusuidAenaL5ypfhQOa7urxP/f8E0ws7FPb4039RiWXUWBAyUkmUoOL/BcQGen3h0J8872d51IYxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-strategies": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.4.1.tgz", + "integrity": "sha512-GZxpaw9NbmOelj7667uZ2kpk5BFpOGbO4X0qjwh5ls8XQ8C+Lha5LQchTiUzsTFSS+NlUpftYAyOVXvQUrcqOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1" + } + }, + "node_modules/workbox-streams": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.4.1.tgz", + "integrity": "sha512-HWWtraKUbJknd9kgqGcpQ3G114HOPYvqs8HaJMDs2ebLNAimDkVDaWfAXE6Ybl+m8U6KsCE6pWyLYuigWmnAXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.1", + "workbox-routing": "7.4.1" + } + }, + "node_modules/workbox-sw": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.4.1.tgz", + "integrity": "sha512-fez5f2DUlDJWTFYkCWQpY10N8gtztd849NswCbVFk0QlcSM4HT5A8x4g4ii650yem4I8tHY0R7JZahwp3ltIPw==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-window": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.4.1.tgz", + "integrity": "sha512-notZDH2u8VXaqyuD7xaqIfEFi6SRM4SUSd7ewe9PDsVqADuepxX2ZMY3uvuZGxzY5ZOsGC/vD3A/3smFtJt4/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.4.1" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f5445c7 --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "jp_chat", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@ant-design/icons": "^6.2.3", + "antd": "^6.4.3", + "axios": "^1.16.1", + "react": "^19.2.6", + "react-dom": "^19.2.6", + "react-router-dom": "^7.15.1" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.3.0", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.6.0", + "vite": "^8.0.12", + "vite-plugin-pwa": "^1.3.0" + }, + "description": "This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.", + "main": "eslint.config.js", + "author": "", + "license": "ISC" +} diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..9cee6eabfe7232f37ce73ef04afc4580717229b2 GIT binary patch literal 5337 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 NWWQ@Wcbj+8e*i3bik|=g literal 0 HcmV?d00001 diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..5393087e2b5e60602fbb42c0e66e6fa9f88e8543 GIT binary patch literal 19549 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 J_zW)U{{X&sQQ!ao literal 0 HcmV?d00001 diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..12234b68c64947b4002f344a2a5c4b819730dd59 GIT binary patch literal 449 zcmV;y0Y3hTP)H6vn^H{XvJK*h3VDA{B1vP@&?WLnm<%5xNKk2M57UF5;w9p_7Y4(anlD>MV%h zpo4?M4Mh%75e2pX5IP)O+ZTs6*LrQG^n;K`UVh1!mqgl~E5czMjtuU|fWv@_3^=0I zbImd4=A?=Yus&f_Wbm3wPz0R5_J;u=zEm`OfKgKkq!Cv{Qpk~k(+fX3X=bB!20BJl7xWDk5G7LVNQiUnXk1_DSWCmRIszzyM%Z5gES9{sDg$ zLT)^j{BU8?2-0FK&s(qR=A_+vH<(o3QbY#apXr8Og*B+a2qtotce3cecLIh#{bG?u zjUqPS(0aiFfM6nLJs*x5uLonse=w;W(rmn51J4U{q4(5;;W^0w01RcGOwtI_^jdv^ rPH-hgP00000NkvXXu0mjf?9{?Q literal 0 HcmV?d00001 diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ffd48b6714a5056939ba568b2835a45d88d754 GIT binary patch literal 798 zcmV+(1L6FMP)hFtJD>Ha2Nvv{1othzN=(hJXe%phyZy5x<&P zTG*>i`iNX%G0I88kuPr(ge%hI_E}8kZff%6&fxOCn`MFp9ACws2@xWX}%w^ScftU|YH5ODk0WJKAC>>haRcV?{sQ6Q~rTusjbF({h{pr-!$&y@Pn~{k1p%oOrYv_rqak zL0FNgCE2+|IpF*r08|!)!OL47HDXjlf9|*tyFEs`D5XaC`n~(n(I` zr6+*3$!5r=$rdPGIS) zl`UulUMtUSZr5<#3j&`@t%8#v#t#q<&*%m00N@Ojb_@_F)@nEjLd<75(_bw6wdWoO cG@JzR51yQSVTxS*#Q*>R07*qoM6N<$f`?~rLjV8( literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d64c39cec1019438438e6aa2ec2ca0278a9c32b8 GIT binary patch literal 31212 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 RH7-Jm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icon-128.png b/public/icon-128.png new file mode 100644 index 0000000000000000000000000000000000000000..a33734f206e6d61b992e0942a50dfd852a801176 GIT binary patch literal 3223 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 rPH-hgP00000NkvXXu0mjf?9{?Q literal 0 HcmV?d00001 diff --git a/public/icon-180.png b/public/icon-180.png new file mode 100644 index 0000000000000000000000000000000000000000..5e9ee4ab626565045b5cff95478d0db5a601299d GIT binary patch literal 4839 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 J_zW)U{{X&sQQ!ao literal 0 HcmV?d00001 diff --git a/public/icon-192.png b/public/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..9cee6eabfe7232f37ce73ef04afc4580717229b2 GIT binary patch literal 5337 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 NWWQ@Wcbj+8e*i3bik|=g literal 0 HcmV?d00001 diff --git a/public/icon-256.png b/public/icon-256.png new file mode 100644 index 0000000000000000000000000000000000000000..50863a3ee66e563a736ebe28fbd780da2eb2ec5f GIT binary patch literal 7223 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 literal 0 HcmV?d00001 diff --git a/public/icon-32.png b/public/icon-32.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ffd48b6714a5056939ba568b2835a45d88d754 GIT binary patch literal 798 zcmV+(1L6FMP)hFtJD>Ha2Nvv{1othzN=(hJXe%phyZy5x<&P zTG*>i`iNX%G0I88kuPr(ge%hI_E}8kZff%6&fxOCn`MFp9ACws2@xWX}%w^ScftU|YH5ODk0WJKAC>>haRcV?{sQ6Q~rTusjbF({h{pr-!$&y@Pn~{k1p%oOrYv_rqak zL0FNgCE2+|IpF*r08|!)!OL47HDXjlf9|*tyFEs`D5XaC`n~(n(I` zr6+*3$!5r=$rdPGIS) zl`UulUMtUSZr5<#3j&`@t%8#v#t#q<&*%m00N@Ojb_@_F)@nEjLd<75(_bw6wdWoO cG@JzR51yQSVTxS*#Q*>R07*qoM6N<$f`?~rLjV8( literal 0 HcmV?d00001 diff --git a/public/icon-48.png b/public/icon-48.png new file mode 100644 index 0000000000000000000000000000000000000000..c3db7ac3454707ad82c549cacb710fc4a1633d93 GIT binary patch literal 1155 zcmV-}1bq96P)XThAY!GHg2cMbr?4m~V(7(7@28Jp#$M8|IY(v4QizK;TDco2h*zZI|v-lSNo z;ic^PIB#CpUDz(fUnj<4)APIAa^W4?pP4p z7qxuU3rviet9|7p@VaW$x=FQLX0G;?0pOo6`^z?Xj#Q(GcGx&6UdsYNXmR;1`=zx{ z-`W`dM{TdmpsYTxbY-AC`}siG1P_8HjmE&Q)dMQ56m`B{iGrH?;sQ1b zUwtc)0RHA=_RjD~khi5#71-nnoe~Y=0AG!Pgv%x_jjsRgkEV9kEPePrP z>Xw86068hD{Zxm6fDwLie5=>{MakE}qrML$hkyCQz^@Q+`+7ANrXP<_GBHX&_jmxX z{lt>*QqRW)tPQ^Efdue(Z)80HknnOp*flzh%!Zv{0qi)w zvccy*sDrBtNO<)aI8<2lXTIw50ASn61>Y6^|B0<003?BjV9=W*nlx&GX96BC|A|cZ z&e$_->B@jNI5F?L!1rD*`KEwv@{|DRjZytRu$I?->azLw(k2f8UOfAs-)eX!2EG1X zM1dBppEb@wM~*`qs}YR3=gWk7fLIE?w1o&ZAy VQVO94f-(RA002ovPDHLkV1f*DB@_Sv literal 0 HcmV?d00001 diff --git a/public/icon-512.png b/public/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..5393087e2b5e60602fbb42c0e66e6fa9f88e8543 GIT binary patch literal 19549 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 t?NNt1LQ6`uEUMcH% zU2GIp6vzK(vXc1FSjx~ADy=OKOAB#BieIRJ8XiPnj28Ow!h zKN7HFLaH%@2lYuG)DY^ECY7vFk`Zi+Kxx@2sp$iWF?)QNx%0I%vom}5quo6(d-u-F zz2`UQoO{pQJ40{mTtpTOCLjxd39fRM0Jh7_p8BkLzHd3;xVsk>DmMI9HiJ?>>ythvdf`{P&zVJD&zDnUmKWvuC32%8omBYJkgcBYL z+#yiq@WS#e;F$m=uOih24<|gVLC|QV8V01G~Q{>pW6a3O1L8i_RZ4FChdKc0dUf8g zyeVzNb9GTHZ?6YH?vXaC2n#!7-OnpV&ozX)zIR$=V%+u0^}0gfp#TZl=lNob6V7=f zg6b_up-&8WCV+aL)VWajEP!vnj5Y=U@Ez&BV}cjfD_-x|GIBlgfakj^EW46Z3JD4U z-+BpnI}|g3l`9Vr;Gy||1UwVl+v8C! z4@4UT>%ad40I;-otE+Bl?^et5e&@s$8F;uuAiw3$o>8X&VDhv&_0wr}Dkua5n6n)8 z>n+C?3HY4%1Hvr7=YZb5t5@$9{qF47yH~(+h!niB9)Rcro&Xl`K_1|AX;BXP^_F9c z1UxGM?RzT2GMg5+{<(l(zTQU z@S?otjxKC}rhGS{Sn$@Wa547k*3@^ol-#y|(wbfwhB6S!z@a2;C1EaY+sZp2$c8Hx zypab;!2dd-CIR5?gSzHjA55(6GH(D&D=9nGg{}(A!UMo>r_|){r|kbjFAVS3K2wu_ zo>Y_NhF=(NOU7xJ9_`7n4E(l(x+YwGYTSP2XJTCZbiH-n=0i8Ma=?rJ)*qYEqO?nU zdNQ$Ij|qa$!q}_p>YYSlZKq4gOUE0N0MIeCpp^oC{&gEX4m^|JAQ%8Y^|=i$V&0oZ z8?oP+qvYnp3!1rfodkgPm*=%oz&E}>8@pY4_&_G_8zNEQnSg(nF5tF?&d`{j`JmZl zt+wGgty1u;0QAs-Oz0aTQQ_l`_OtJ8u-a`Mne$h^#PA@19_+PK;h=f`{Dhh;CcIGQ z@;e({-f-uUYg#_|`H@!FH8Su_40@n1lm8774{$Nyol0IAYq6kO-n<$xTe#sH-<{Q* z?PgwTPXWNXkEhdd!inzhGd-X}@S^_e(H56wHy*vBiR-VAdaND*FQno4U+KuJ!uR%P za(0Hw4ewO)+FP4kumI5f_GK+!yZTT^DlR;TLH7&YOH!eqmQ`BG617XldVmc~wFb`$yqlvn z0q?rryEByYUENAhvdHa{^ZJ}GM=kfL0eC2$FGn4gC$llG5_k$~SMh;&Hb&J94-#*Q mg~vQO8sk+0Pf^;10{jmblA^PAuqTuN0000 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..ccfeb37 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "AI Language Chat", + "short_name": "AI Lang", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#2563EB", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/src/AntdBootstrap.jsx b/src/AntdBootstrap.jsx new file mode 100644 index 0000000..105cf48 --- /dev/null +++ b/src/AntdBootstrap.jsx @@ -0,0 +1,112 @@ +import {useEffect, useMemo, useState} from 'react' +import {GContext} from '@/utils/g_context.js' +import {App as AntdApp, ConfigProvider, theme} from 'antd'; +import zhCN from 'antd/locale/zh_CN' + +const THEME_STORAGE_KEY = 'antd_theme_mode' + +function getInitialThemeMode() { + if (typeof window !== 'undefined') + return 'dark' + const savedTheme = localStorage.getItem(THEME_STORAGE_KEY) + if (savedTheme === 'light' || savedTheme === 'dark') + return savedTheme + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' +} + +function createAntdThemeConfig(themeMode) { + const isDark = themeMode === 'dark' + return { + // 配置要点:algorithm 决定整套 Design Token 的生成算法。 + // defaultAlgorithm 是亮色主题,darkAlgorithm 是暗色主题;切换这里即可全局换肤。 + algorithm: isDark ? theme.darkAlgorithm : theme.defaultAlgorithm, + + // 配置要点:token 是全局设计变量,适合放品牌色、圆角、字体、基础间距等。 + // 组件会消费这些变量,因此不要在业务组件里到处写零散颜色。 + token: { + colorPrimary: '#1677ff', + colorSuccess: '#2fb344', + colorWarning: '#faad14', + colorError: '#ff4d4f', + borderRadius: 8, + fontFamily: `-apple-system, BlinkMacSystemFont,Noto Sans SC,Noto Sans JP,\ + "Segoe UI", Roboto, "Microsoft YaHei", sans-serif`, + colorBgLayout: isDark ? '#101418' : '#f5f7fb', + }, + // 配置要点:components 用于覆盖单个组件的默认 Token。 + // 当某类组件需要统一风格时,优先在这里集中配置,而不是给每个组件写 className。 + components: { + Button: { + borderRadius: 8, + controlHeight: 36, + }, + Card: { + borderRadiusLG: 8, + headerBg: isDark ? '#151a20' : '#ffffff', + }, + Layout: { + bodyBg: isDark ? '#101418' : '#f5f7fb', + headerBg: isDark ? '#151a20' : '#ffffff', + siderBg: isDark ? '#151a20' : '#ffffff', + }, + Menu: { + itemBorderRadius: 8, + }, + }, + // 配置要点:开启 CSS 变量后,可以在自定义 CSS 中使用 Antd Token。 + // key 跟随主题变化,避免亮暗主题切换时复用旧变量。 + cssVar: { + prefix: 'antd-app', + key: themeMode, + }, + hashed: true + } +} + +export default function AntdBootstrap({children}) { + const [themeMode, setThemeMode] = useState(getInitialThemeMode()) + const antdTheme = useMemo(() => createAntdThemeConfig(themeMode), [themeMode]) + const isDark = themeMode === 'dark' + const ctxValue = useMemo(() => ({ + isDark, + themeMode, + setThemeMode + }), [isDark, themeMode]) + useEffect(() => { + document.documentElement.dataset.theme = themeMode + document.documentElement.style.colorScheme = themeMode + window.localStorage.setItem(THEME_STORAGE_KEY, themeMode) + }, [themeMode]) + + return ( + + triggerNode?.parentElement ?? document.body} + > {/* end of ConfigProvider */} + + {children} + + + + ) +} + + + diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..a955d63 --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,26 @@ +import {BrowserRouter as Router, Routes, Route, Navigate} from 'react-router-dom' + +import Home from './pages/Home.jsx'; +import Test from './pages/test/Test.jsx'; +import Login from '@/pages/login/Login.jsx' +import {RequireAuth} from '@/pages/RequireAuth.jsx' + +function App() { + return ( + }/> + + {/*以下是被保护的路由*/} + }> + }/> + }/> + + {/*以上是被保护的路由*/} + + {/* 兜底:未匹配到且已登录,则 404;未登录,则跳 login */} + 404 Not Found)}/> + ) +} + +export default App; + + diff --git a/src/api.jsx b/src/api.jsx new file mode 100644 index 0000000..d14dce6 --- /dev/null +++ b/src/api.jsx @@ -0,0 +1,75 @@ +const BASE_URL = 'https://api.rop.cc/jpchat' +const URL_GETURL = 'https://api.rop.cc/jpchat/geturl' + +/** + * 失败返回 JSON + * { + * ok:false, + * threadid?: + * usertext?: + * message: + * } + * 成功返回 multipart/form-data + * Content-Type: multipart/form-data; boundary=----WEBKIT_FORM_BOUNDARY7MA4YWxkTrZu0gW + * body: + * --boundary + * Content-Disposition: form-data; name="meta" + * Content-Type: application/json; charset=utf-8 + * Content-Disposition: form-data; name="audio" + * Content-Type: audio/wav + * + */ + + +export async function request(audioFile, threadid = null) { + if (!audioFile) return; + console.warn("api::request,threadid=",threadid) + const formData = new FormData(); + formData.append('model', 'gpt-5.5') + formData.append('modelReasoningEffort', 'medium') + formData.append('audio', audioFile) + if (threadid) formData.append('threadid', threadid) + const res = await fetch(URL_GETURL, { + method: 'POST', + body: formData, + withCredentials: true, + credentials: 'include' + // 不要手动设置 Content-Type + }); + const contentType = res.headers.get('content-type'); + + if(res.status === 401) { + console.log("认证失败 res =", res) + return {ok:false,message:'auth failed'} + } + + if (contentType.includes('application/json')) { + let data = await res.json(); + console.log("返回json,失败了 message =", data.message) + return data; + } + + if (contentType.includes('multipart/form-data') && res.ok) { + let formdata = await res.formData(); + const dataText = formdata.get('meta'); + const audiofile = formdata.get('audio'); + + const data = JSON.parse(dataText); + + // console.log('data =', data); + // console.log('audiofile =', audiofile); + + return { + ok: data.ok, + url: data.url, + threadid:data.threadid, + usertext: data.usertext, + replytext: data.replytext, + blob: audiofile + }; + } + + + return {ok: false, message: '未知错误'} + +} \ No newline at end of file diff --git a/src/assets/hero.png b/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..02251f4b956c55af2d76fd0788124d7eee2b45eb GIT binary patch literal 13057 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 P00000NkvXXu0mjft=yBf literal 0 HcmV?d00001 diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/vite.svg b/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/src/components/Composer.css b/src/components/Composer.css new file mode 100644 index 0000000..6f0461f --- /dev/null +++ b/src/components/Composer.css @@ -0,0 +1,43 @@ +.composer { + height: 200px; + background-color: #333; + width: 95%; + margin-bottom: 2%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + + border-radius: 10px; + flex-shrink: 0; +} + + +.composer-button { + user-select: none; + -webkit-user-select: none; + + /* iOS Safari 长按菜单 */ + -webkit-touch-callout: none; + + /* 减少移动端浏览器默认手势干扰 */ + touch-action: none; + + cursor: pointer; + + height: 70px; + width: 47.15%; + + /* 避免 iOS 点按高亮 */ + -webkit-tap-highlight-color: transparent; +} + +.composer-button * { + user-select: none; + -webkit-user-select: none; + -webkit-touch-callout: none; +} + +.pad-bottom { + height: 20px; +} \ No newline at end of file diff --git a/src/components/Composer.jsx b/src/components/Composer.jsx new file mode 100644 index 0000000..4fc55d7 --- /dev/null +++ b/src/components/Composer.jsx @@ -0,0 +1,86 @@ +import {useRef, forwardRef, useImperativeHandle, useState, useCallback} from 'react' +import {Button, App} from 'antd' + +import './Composer.css' + +export default forwardRef(function Composer(props, ref) { + const ref_StateLabel = useRef(null) + const [btnTxt, setBtnTxt] = useState('SPEAK'); + const [debug, setDebug] = useState('debug') + const [stateTxt, setStateTxt] = useState('state') + + + + + + function hOnRcStateChanged(state) { + // ref_StateLabel.current.textContent = state + setStateTxt(state) + } + + useImperativeHandle(ref, () => ({ + hOnRcStateChanged, + })) + + async function hPointerDown(e) { + // setDebug('pointerDown') + // 只处理鼠标左键 / 触摸 / 笔 + if (e.pointerType === 'mouse' && e.button !== 0) return; + e.preventDefault() + e.currentTarget.setPointerCapture?.(e.pointerId) + + // 捕获指针,避免手指移出按钮后收不到 pointerup + setBtnTxt("RELEASE TO STOP") + + const _ = props.callbacks.onPress() + } + + const hPointerCancel = (e) => { + + setDebug('pointer cancelled!') + + e.preventDefault(); + }; + + async function hPointerUp(e) { + // setDebug('pointer up!') + e.preventDefault(); + e.currentTarget.releasePointerCapture?.(e.pointerId); + await props.callbacks.unlockAudio() + + setBtnTxt("SPEAK") + + + const _ = props.callbacks.onUnPress() + } + + function hContextMenu(e) { + e.preventDefault(); + } + + const hLostPointerCapture = useCallback((e) => { + setDebug('pointer Lost Capture!') + + e.preventDefault(); + // stopPress(e); + }, []); +// }, [stopPress]); + + return (
+ ===composer=== + {/*
{debug}
*/} +
{stateTxt}
+
+ +
+
+
) +}) diff --git a/src/components/Cover.css b/src/components/Cover.css new file mode 100644 index 0000000..25a18a9 --- /dev/null +++ b/src/components/Cover.css @@ -0,0 +1,24 @@ +.cover{ + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.66); + z-index: 1000; + + display: flex; + align-items: center; + justify-content: center; + + width: 100%; + height: 100%; +} + +/*.threads-content{*/ +/* display: flex;*/ +/* width: 80%;*/ +/* max-width: 500px;*/ +/* height: 100%;*/ +/* justify-content: center;*/ +/* align-items: center;*/ +/* flex-direction: column;*/ +/* gap: 30px;*/ +/*}*/ diff --git a/src/components/Cover.jsx b/src/components/Cover.jsx new file mode 100644 index 0000000..3221f29 --- /dev/null +++ b/src/components/Cover.jsx @@ -0,0 +1,20 @@ +import React from 'react' +import {Alert, Flex, Spin} from 'antd' +import './Cover.css' + +const contentStyle = { + padding: 50, + background: 'rgba(0, 0, 0, 0.55)', + borderRadius: 4, +}; + +const content =
; + +export function Cover() { + + return (
+ + {content} + +
) +} \ No newline at end of file diff --git a/src/components/LongpressedButton.css b/src/components/LongpressedButton.css new file mode 100644 index 0000000..113fa1d --- /dev/null +++ b/src/components/LongpressedButton.css @@ -0,0 +1,16 @@ +.long-press-btn { + user-select: none; + -webkit-user-select: none; + + /* iOS Safari 长按菜单 */ + -webkit-touch-callout: none; + + /* 减少移动端浏览器默认手势干扰 */ + touch-action: none; +} + +.long-press-btn * { + user-select: none; + -webkit-user-select: none; + -webkit-touch-callout: none; +} \ No newline at end of file diff --git a/src/components/LongpressedButton.jsx b/src/components/LongpressedButton.jsx new file mode 100644 index 0000000..1d492c1 --- /dev/null +++ b/src/components/LongpressedButton.jsx @@ -0,0 +1,73 @@ +import {useRef} from 'react'; +import {Button} from 'antd'; +import './LongpressedButton.css' + +export function LongpressedButton(props) { + const timerRef = useRef(null); + const pressingRef = useRef(false); + const longPressedRef = useRef(false); + + function handlePointerDown(e) { + // 只处理左键 / 手指 / 触控笔 + if (e.pointerType === 'mouse' && e.button !== 0) return; + + // 防止手机长按时选中文本、弹出系统菜单 + e.preventDefault(); + + pressingRef.current = true; + longPressedRef.current = false; + + // 捕获指针,避免手指移出按钮后收不到 pointerup + e.currentTarget.setPointerCapture?.(e.pointerId); + + timerRef.current = setTimeout(() => { + if (!pressingRef.current) return; + + longPressedRef.current = true; + + console.log('长按触发'); + // 在这里写长按逻辑 + }, 600); + } + + function handlePointerUp(e) { + clearTimeout(timerRef.current); + + if (!pressingRef.current) return; + + pressingRef.current = false; + + e.currentTarget.releasePointerCapture?.(e.pointerId); + + console.log('抬起触发'); + + if (longPressedRef.current) { + console.log('长按后的抬起'); + // 长按完成后松手 + } else { + console.log('普通点击式抬起'); + // 没达到长按时间就松手 + } + } + + function handlePointerCancel() { + clearTimeout(timerRef.current); + pressingRef.current = false; + longPressedRef.current = false; + } + + return ( + + ); +} diff --git a/src/components/MessageCard.css b/src/components/MessageCard.css new file mode 100644 index 0000000..4e33fc7 --- /dev/null +++ b/src/components/MessageCard.css @@ -0,0 +1,62 @@ +.msgcard { + display: flex; + width: 97%; + height: auto; + background: #455; + margin-bottom: 8px; + border-radius: 16px; + flex-shrink: 0; + position: relative; + +} + +.msgcard-wrap-assistant{ + width: 100%; + display: flex; + min-height: 75px; + flex-direction: row; + + padding: 8px 10px 10px 10px; /* 底部 10px */ + gap: 16px; +} + +.msgcard-wrap-user{ + width: 100%; + display: flex; + min-height: 75px; + flex-direction: row-reverse; + + padding: 8px 10px 10px 10px; /* 底部 10px */ + gap: 16px; +} + +.msg-avatar { + width: 50px; + height: 50px; + border-radius: 12px; + background-color: #122; + flex-shrink: 0; + +} + + +.msg-avatar-btn { + width: 100%; + height: 100%; +} + + + +.msg-text { + width: calc((100% - 80px) * 0.95); + left: 80px; + top: 8px; + + text-align: left; + white-space: pre-wrap; + overflow-wrap: break-word; + word-break: break-word; + + +} + diff --git a/src/components/MessageCard.jsx b/src/components/MessageCard.jsx new file mode 100644 index 0000000..ea5467d --- /dev/null +++ b/src/components/MessageCard.jsx @@ -0,0 +1,65 @@ +import {Button} from 'antd' +import {PlayCircleOutlined} from '@ant-design/icons' +import './MessageCard.css' +import * as player from '@/utils/player.js' +import React from "react"; + + + + + + + + + +export default function MessageCard({message}) { + if (!message) { + return
Loading...
+ } + let bAssistant = false; + let cn_wrap = 'msgcard-wrap-user' + if (message.role && message.role === 'assistant') { + bAssistant = true; + cn_wrap = 'msgcard-wrap-assistant' + } + + async function playAudio() { + await player.play(message.messageid) + } + + const reply = React.useMemo(() => { + try { + return JSON.parse(message.content) + } catch (e) { + return {text: "invalid text"} + } + }, []) + const guide = React.useMemo(() => { + if (reply.guide != null) { + return (<>
----------
Gramma Guide: {reply.guide}) + } else { + return null; + } + }, []) + return (
+
+
+ {bAssistant ? +
+
+ {reply.text ? reply.text : 'no text'}
+ {guide && guide} + +
+
+
) +} \ No newline at end of file diff --git a/src/components/PrivateRoute.jsx b/src/components/PrivateRoute.jsx new file mode 100644 index 0000000..3a8466f --- /dev/null +++ b/src/components/PrivateRoute.jsx @@ -0,0 +1,11 @@ +import { Navigate, Outlet } from 'react-router-dom'; + +export default function PrivateRoute() { + // const token = localStorage.getItem('jwt'); + ////// 如果没有 token,则跳转到 /login + // if (!token) { + // return ; + // } + // 已登录:渲染后续子路由 + return ; +} diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..7812e71 --- /dev/null +++ b/src/index.css @@ -0,0 +1,45 @@ +:root { + +} + +html, body, #root { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Noto Sans SC','Noto Sans JP', + 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', + 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background-color: #232323; + color: aliceblue; + text-align: center; + flex-shrink: 0; + + width: 100%; + min-height: 100%; + /*touch-action: manipulation;*/ + -webkit-text-size-adjust: 100%; + + overscroll-behavior: none; + touch-action: none; +} + +button, +a, +[role="button"] { + touch-action: manipulation; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} + +/* 当用户没有开启“减少动态效果”偏好时,里面的样式才生效*/ +/* no-preference : 不介意动画(有动画) */ +/* reduce : 减少动画 */ +@media (prefers-reduced-motion: no-preference) { + .logo { + animation: spin 20s linear infinite; + } +} \ No newline at end of file diff --git a/src/main.jsx b/src/main.jsx new file mode 100644 index 0000000..1ab56ad --- /dev/null +++ b/src/main.jsx @@ -0,0 +1,20 @@ +import {StrictMode} from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; +import AntdBootstrap from './AntdBootstrap.jsx' +import '@/index.css'; + +const root = ReactDOM.createRoot(document.getElementById('root')); + +root.render( + + + + + +); + + + + + diff --git a/src/pages/Home.css b/src/pages/Home.css new file mode 100644 index 0000000..6fc7361 --- /dev/null +++ b/src/pages/Home.css @@ -0,0 +1,57 @@ + +.home { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.home-header{ + display: grid; + grid-template-columns:1fr auto 1fr; + height: 50px; + background: #202020; + width: 100%; +} + +.home-title{ + align-self: center; + white-space: nowrap; /* 不换行 */ + overflow: hidden; /* 超出隐藏 */ +} + +.btn-frame { + justify-self: end; + align-self: center; + margin-right: 10px; + gap: 5px; +} + +.home-content { + height: calc(100vh - 60px); + display: flex; + flex-direction: column; + justify-content: end; + align-items: center; + width: 650px; + background-color: #444444; + overflow-y: auto; + min-width: 320px; +} + +.arr-container{ + display: flex; + flex-direction: column; + align-items: center; + + width: 100%; + overflow-y: auto; + padding-top:10px; + +} + +@media (max-width: 650px) { + .home-content { + width: 100vw; + } +} \ No newline at end of file diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx new file mode 100644 index 0000000..ebf9c94 --- /dev/null +++ b/src/pages/Home.jsx @@ -0,0 +1,301 @@ +import React, {useState} from 'react' +import {useNavigate, useLocation} from 'react-router-dom' +import {Button, Flex} from 'antd' +import './Home.css' +import Composer from '@/components/Composer.jsx' +import MessageCard from '@/components/MessageCard.jsx' +import {Recorder} from '@/utils/recorder' +import * as apis from '@/api.jsx' +import * as saving from '@/utils/saving.jsx' +import {Option} from '@/pages/option/Option.jsx' +import {Threads} from '@/pages/threads/Threads.jsx' +import {CommentOutlined, SettingOutlined} from "@ant-design/icons"; +import {Cover} from "@/components/Cover.jsx"; +import {AutoAudioPlayer} from '@/utils/auto_audio_player.js' + +let recorder +let cur_thread = null + +async function saveMessage(threadid, role, content, audioblob = null) { + const message = { + messageid: crypto.randomUUID(), + role: role, + content: content, + hasaudio: !!audioblob + } + await saving.addMessage(threadid, message, audioblob) +} + +function saveBlobToLocal(blob) { + const url = URL.createObjectURL(blob) + const a = document.createElement('a') + a.href = url + a.download = 'test_audio.webm' + document.body.appendChild(a) + a.click() + document.body.removeChild(a) + URL.revokeObjectURL(url) +} + +export default function Home() { + const [debug, setDebug] = useState('debug'); + const navigate = useNavigate(); + const location = useLocation(); + + const [showCover, setShowCover] = React.useState(false); + + //#region ---- 对话内容区 ---- + /** thread + * thrdeadid: xxxxx, + * messages: [{ + * messageid: + * role: + * content: + * hasaudio: + * }, ... + * ] + */ + + let selected_thread_name = saving.getSelectedThread(); + if (saving.checkThreadid(selected_thread_name)) { + cur_thread = saving.getThread(selected_thread_name) + } else { + selected_thread_name = 'New Thread' + cur_thread = {threadid: "New Thread", messages: []} + } + + const [tid, setTid] = React.useState(selected_thread_name) + + const [refresh, setRefresh] = React.useState(0) + const bottomRef = React.useRef(null) + React.useEffect(() => { + bottomRef.current && + bottomRef.current.scrollIntoView({behavior: 'smooth', block: 'end'}) + }, [cur_thread.messages.length]) + + // console.log("[[cur_thread]]\n", cur_thread) + + //#endregion + + + //#region ---- composer ---- + const ref_composer = React.useRef(null) + + const autoAudioRef = React.useRef(null); + + if (!autoAudioRef.current) { + autoAudioRef.current = new AutoAudioPlayer(); + } + + + function hRecorderStateChange(nxtState) { + ref_composer.current?.hOnRcStateChanged(nxtState) + } + + React.useMemo(() => { + recorder = new Recorder({ + autoPlay: true, + onStateChange: hRecorderStateChange, + }) + return () => { recorder.close() } + }, []) + + + + async function onPress() { + try { + // 开始录音 + await recorder.startRecorder() + } catch (e) { + setDebug(e.message) + } + } + + async function onUnPress() { + try { + setShowCover(true) + const blob = await recorder.stopRecording() + if (!blob) return + + // saveBlobToLocal(blob) + const _tid = tid === 'New Thread' ? null : tid + const result = await apis.request(blob, _tid) + + console.log('[[HOME::result]]\n', result) + if (!result.ok && result.message && result.message === 'auth failed') { + navigate('/login', { + replace: true, + state: { + from: location.pathname, + }, + }); + return; + } + + /** result : JSON + * ok: true|false, + * url: xxxxxxx, + * threadid: xxxxxxx, + * usertext: xxxxxx, + * replytext: xxxxxx, + * blob: audioFile, + * message?: failure message + */ + if (result.ok) { + const usertxt = JSON.stringify({text: result.usertext}) + await saveMessage(result.threadid, 'user', usertxt) + await saveMessage(result.threadid, 'assistant', result.replytext, result.blob) + if (cur_thread.threadid === 'New Thread') { + saving.setSelectedThread(result.threadid) + setTid(result.threadid) + } + setShowCover(false) + + try { + autoAudioRef.current.setVolume(1.5); + await autoAudioRef.current.playBlob(result.blob); + } catch (e) { + setDebug(`${e.name}: ${e.message}`); + } + + } else { + console.warn("[[failed]]\n", result.message) + setShowCover(false) + } + } catch (err) { + console.error(err) + } finally { + setShowCover(false) + } + + } + + async function unlockAudio() { + // await audioPlayerRef.current.unlock(); + try { + await autoAudioRef.current.unlockAndKeepAlive(); + } catch (err) { + console.error('unlock audio failed:', err); + } + } + + + const cb_compposer = { + onPress: onPress, + onUnPress: onUnPress, + unlockAudio: unlockAudio + } + //#endregion + + //#region ---- 设置 ---- + const [showOption, setShowOptions] = React.useState(false) + + async function onOptionClicked() { + setShowOptions(!showOption) + } + + async function closeOptionPanel() { + setShowOptions(false) + } + + const cb_option = { + closeOptionPanel: closeOptionPanel + } + //#endregion + + + + + //#region ---- 选择对话面板 ---- + + const [showThreads, setShowThreads] = React.useState(false) + + async function onThreadsClicked() { + setShowThreads(!showThreads) + } + + async function closeThreadsPanel() { + setShowThreads(false) + } + + async function hSelectThread(selectedid) { + console.log("HOME::SELECT_THREAD", selectedid) + saving.setSelectedThread(selectedid) + setTid(selectedid) + await closeThreadsPanel() + } + + async function hNewThread() { + saving.setSelectedThread("New Thread") + setTid("New Thread") + await closeThreadsPanel() + } + + async function hDeleteThread(key) { + saving.deleteThread(key) + if (cur_thread.threadid === key) { + await hSelectThread("New Thread") + } + setShowThreads(false) + } + + const cb_threads = { + closeThreadsPanel: closeThreadsPanel, + hSelectThread: hSelectThread, + hNewThread: hNewThread, + hDeleteThread: hDeleteThread, + } + + //#endregion + + + + return ( // -------- // +
+
+
+
+
{tid}
+ +
+ {/*{debug}*/} +
+
+ {cur_thread.messages.map((item, idx) => ())} +
+
+ +
+
+ {showOption &&
+ ) +} + + + + + + + + + + +// \ No newline at end of file diff --git a/src/pages/RequireAuth.jsx b/src/pages/RequireAuth.jsx new file mode 100644 index 0000000..19f0621 --- /dev/null +++ b/src/pages/RequireAuth.jsx @@ -0,0 +1,82 @@ +import React from 'react'; +import { + BrowserRouter as Router, + Routes, + Route, + Navigate, + Outlet, + useLocation, +} from 'react-router-dom'; + + +export function RequireAuth() { + const [status, setStatus] = React.useState('checking'); + const location = useLocation(); + + React.useEffect(() => { + let cancelled = false; + + async function checkAuth() { + try { + const res = await fetch('https://api.rop.cc/auth/check', { + method: 'GET', + credentials: 'include', + }); + + if (cancelled) return; + + if (res.ok) { + console.log("[[RequireAuth]] Cookie有效") + setStatus('authed'); + } else { + console.log("[[RequireAuth]] Cookie无效") + setStatus('guest'); + } + } catch (e) { + if (!cancelled) { + setStatus('guest'); + } + } + } + + const _ = checkAuth(); + + return () => { + cancelled = true; + }; + }, []); + + if (status === 'checking') { + return
Loading...
; + } + + if (status === 'guest') { + return (); + } + + return ; +} + +// function App() { +// return ( +// +// +// {/* 公共路由 */} +// } /> +// +// {/* 以下是被保护的路由 */} +// }> +// } /> +// } /> +// +// {/* 已登录但路由不存在,才显示 404 */} +// 404 Not Found
} /> +// +// +// +// ); +// } diff --git a/src/pages/login/Login.css b/src/pages/login/Login.css new file mode 100644 index 0000000..9579374 --- /dev/null +++ b/src/pages/login/Login.css @@ -0,0 +1,10 @@ + + +.login { + justify-self: center; + display: flex; + flex-direction: column; + max-width: 300px; + margin: 100px; + gap: 20px; +} \ No newline at end of file diff --git a/src/pages/login/Login.jsx b/src/pages/login/Login.jsx new file mode 100644 index 0000000..1688f41 --- /dev/null +++ b/src/pages/login/Login.jsx @@ -0,0 +1,47 @@ +import {useState} from 'react'; +import {useNavigate} from 'react-router-dom'; + +import './Login.css'; + +import axios from 'axios'; + + +export default function Login() { + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + const navigate = useNavigate(); + const handleSubmit = async e => { + e.preventDefault(); + try { + const resp = await axios.post( + 'https://api.rop.cc/auth', + {username, password}, + {withCredentials: true} + ); + console.log('接收到resp:', resp); + // 假设后端返回 { token: 'xxxx' } 保留本地token + // localStorage.setItem('jwt', resp.data.token); + // localStorage.setItem('_uname', resp.data.username); + // 跳转到首页或登录前尝试访问的页面 + navigate('/', {replace: true}); + } catch (err) { + console.log(err) + alert(`[[Login failed]] error = ${err}`); + } + }; + return (
+

Login

+ setUsername(e.target.value)} + placeholder="username" + /> + setPassword(e.target.value)} + placeholder="password" + /> + +
); +} diff --git a/src/pages/option/Option.css b/src/pages/option/Option.css new file mode 100644 index 0000000..6c0886b --- /dev/null +++ b/src/pages/option/Option.css @@ -0,0 +1,45 @@ +.option{ + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.66); + z-index: 1000; + + display: flex; + align-items: center; + justify-content: center; + + width: 100%; + height: 100%; +} + +.option-content{ + display: flex; + width: 80%; + max-width: 500px; + height: 100%; + justify-content: center; + align-items: center; + flex-direction: column; + gap: 30px; +} + + +.overlay { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.35); + z-index: 1000; + + display: flex; + justify-content: center; + align-items: center; +} + +.floating-panel { + width: 420px; + max-width: calc(100vw - 32px); + background: white; + border-radius: 12px; + padding: 24px; + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.25); +} \ No newline at end of file diff --git a/src/pages/option/Option.jsx b/src/pages/option/Option.jsx new file mode 100644 index 0000000..f6d055e --- /dev/null +++ b/src/pages/option/Option.jsx @@ -0,0 +1,29 @@ +import React from 'react' +import {Button} from 'antd' +import './Option.css' + +export function Option(props) { + + + + return (
+
+ + +
+
) +} \ No newline at end of file diff --git a/src/pages/test/Test.css b/src/pages/test/Test.css new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/test/Test.html b/src/pages/test/Test.html new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/test/Test.jsx b/src/pages/test/Test.jsx new file mode 100644 index 0000000..23f2376 --- /dev/null +++ b/src/pages/test/Test.jsx @@ -0,0 +1,51 @@ + +import { useEffect, useState } from "react"; +import './Test.css' + + +export default function Test(){ + const [hash, setHash] = useState(() => window.location.hash); + + useEffect(() => { + const handleHashChange = () => { + setHash(window.location.hash); + }; + + window.addEventListener("hashchange", handleHashChange); + + return () => { + window.removeEventListener("hashchange", handleHashChange); + }; + }, []); + + const showOptionPanel = hash === "#option"; + + function openOptionPanel() { + window.location.hash = "option"; + } + + function closeOptionPanel() { + // 去掉 #option,但不刷新页面 + window.history.pushState( + "", + document.title, + window.location.pathname + window.location.search + ); + + // pushState 不会自动触发 hashchange,所以这里手动同步状态 + setHash(""); + } + + return ( +
+ + + {showOptionPanel && ( +
+

设置面板

+ +
+ )} +
+ ); +} \ No newline at end of file diff --git a/src/pages/threads/Threads.css b/src/pages/threads/Threads.css new file mode 100644 index 0000000..59d240b --- /dev/null +++ b/src/pages/threads/Threads.css @@ -0,0 +1,35 @@ +.threads { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.66); + z-index: 1000; + + display: flex; + align-items: center; + justify-content: center; + + width: 100%; + height: 100%; +} + +.threads-content { + display: flex; + width: 80%; + max-width: 500px; + height: 100%; + justify-content: center; + align-items: center; + flex-direction: column; + gap: 30px; +} + +.theads-row { + display: flex; + flex-direction: row; + width: 100%; + /*background-color: red;*/ + margin: 0; + padding: 0; + gap: 10px; +} + diff --git a/src/pages/threads/Threads.jsx b/src/pages/threads/Threads.jsx new file mode 100644 index 0000000..37b7912 --- /dev/null +++ b/src/pages/threads/Threads.jsx @@ -0,0 +1,62 @@ +import React from 'react' +import {Button} from 'antd' +import {DeleteOutlined} from '@ant-design/icons' +import './Threads.css' + + + +export function Threads(props) { + + const ids = props.threads.map((item) => {return item.threadid}) + + async function hClicked(key) { + await props.callbacks.hSelectThread(key) + } + + async function hClickDelete(key) { + await props.callbacks.hDeleteThread(key) + } + + async function hNewThread() { + await props.callbacks.hNewThread() + } + + return (
+
+ + + {ids.map(id => ( +
+ +
+ ))} + +
+
) +} \ No newline at end of file diff --git a/src/utils/audioDB.js b/src/utils/audioDB.js new file mode 100644 index 0000000..b305cb1 --- /dev/null +++ b/src/utils/audioDB.js @@ -0,0 +1,116 @@ +const DB_NAME = 'audio-db'; +const DB_VERSION = 1; +const STORE_NAME = 'audios'; + +// 打开数据库 +export function openAudioDB() { + return new Promise((resolve, reject) => { + const request = indexedDB.open(DB_NAME, DB_VERSION); + + // 第一次创建数据库,或者版本升级时执行 + request.onupgradeneeded = () => { + const db = request.result; + + if (!db.objectStoreNames.contains(STORE_NAME)) { + db.createObjectStore(STORE_NAME, { + keyPath: 'id', + autoIncrement: true + }); + } + }; + + request.onsuccess = () => { + resolve(request.result); + }; + + request.onerror = () => { + reject(request.error); + }; + }); +} + +export async function saveAudio(id,blob, extra = {}) { + const db = await openAudioDB(); + + return new Promise((resolve, reject) => { + const tx = db.transaction(STORE_NAME, 'readwrite'); + const store = tx.objectStore(STORE_NAME); + + store.put({ + id, + blob, + type: blob.type, + savedAt: Date.now(), + ...extra + }); + + tx.oncomplete = () => { + resolve(true); + }; + + tx.onerror = () => { + reject(tx.error); + }; + }); +} + + +export async function getAudio(id) { + const db = await openAudioDB(); + + return new Promise((resolve, reject) => { + const tx = db.transaction(STORE_NAME, 'readonly'); + const store = tx.objectStore(STORE_NAME); + + const request = store.get(id); + + request.onsuccess = () => { + resolve(request.result || null); + }; + + request.onerror = () => { + reject(request.error); + }; + }); +} + + +export async function deleteAudio(id) { + const db = await openAudioDB(); + + return new Promise((resolve, reject) => { + const tx = db.transaction(STORE_NAME, 'readwrite'); + const store = tx.objectStore(STORE_NAME); + + store.delete(id); + + tx.oncomplete = () => { + resolve(true); + }; + + tx.onerror = () => { + reject(tx.error); + }; + }); +} + + + +export async function getAllAudios() { + const db = await openAudioDB(); + + return new Promise((resolve, reject) => { + const tx = db.transaction(STORE_NAME, 'readonly'); + const store = tx.objectStore(STORE_NAME); + + const request = store.getAll(); + + request.onsuccess = () => { + resolve(request.result); + }; + + request.onerror = () => { + reject(request.error); + }; + }); +} \ No newline at end of file diff --git a/src/utils/auto_audio_player.js b/src/utils/auto_audio_player.js new file mode 100644 index 0000000..e356932 --- /dev/null +++ b/src/utils/auto_audio_player.js @@ -0,0 +1,207 @@ +export class AutoAudioPlayer { + constructor() { + this.ctx = null; + + this.keepAliveSource = null; + this.keepAliveGain = null; + + this.playGain = null; + this.currentSource = null; + + this.volume = 1.0; + } + + getContext() { + if (!this.ctx) { + const AudioContext = window.AudioContext || window.webkitAudioContext; + this.ctx = new AudioContext(); + } + + if (!this.playGain) { + this.playGain = this.ctx.createGain(); + this.playGain.gain.value = this.volume; + this.playGain.connect(this.ctx.destination); + } + + return this.ctx; + } + + setVolume(volume) { + this.volume = volume; + + if (this.playGain && this.ctx) { + this.playGain.gain.setValueAtTime(volume, this.ctx.currentTime); + } + } + + async unlockAndKeepAlive() { + const ctx = this.getContext(); + if (ctx.state === 'suspended') { + await ctx.resume(); + } + if (this.keepAliveSource) return; + + const osc = ctx.createOscillator(); + const gain = ctx.createGain(); + + osc.frequency.value = 20; + + // 只给保活用,不能拿来播放真实音频 + gain.gain.value = 0.00001; + + osc.connect(gain); + gain.connect(ctx.destination); + + osc.start(); + + this.keepAliveSource = osc; + this.keepAliveGain = gain; + } + + async playBlob(blob) { + const ctx = this.getContext(); + + if (ctx.state === 'suspended') { + await ctx.resume(); + } + + const arrayBuffer = await blob.arrayBuffer(); + const audioBuffer = await ctx.decodeAudioData(arrayBuffer.slice(0)); + + if (this.currentSource) { + try { + this.currentSource.stop(); + } catch (_) {} + this.currentSource = null; + } + + const source = ctx.createBufferSource(); + source.buffer = audioBuffer; + + // 真实音频接到 playGain,不要接 keepAliveGain + source.connect(this.playGain); + + this.currentSource = source; + + source.start(0); + + return new Promise((resolve) => { + source.onended = () => { + if (this.currentSource === source) { + this.currentSource = null; + } + resolve(); + }; + }); + } + + stopKeepAlive() { + if (this.keepAliveSource) { + try { + this.keepAliveSource.stop(); + } catch (_) {} + + this.keepAliveSource = null; + this.keepAliveGain = null; + } + } +} + +// export class AutoAudioPlayer { +// constructor() { +// this.ctx = null; +// this.keepAliveSource = null; +// this.keepAliveGain = null; +// this.currentSource = null; +// this.unlocked = false; +// } +// +// getContext() { +// if (!this.ctx) { +// const AudioContext = window.AudioContext || window.webkitAudioContext; +// this.ctx = new AudioContext(); +// } +// return this.ctx; +// } +// +// async unlockAndKeepAlive() { +// const ctx = this.getContext(); +// +// if (ctx.state === 'suspended') { +// await ctx.resume(); +// } +// +// if (this.keepAliveSource) { +// this.unlocked = true; +// return; +// } +// +// // 不能用完全一次性静音 buffer。 +// // 用 oscillator 持续占住音频输出链路。 +// const osc = ctx.createOscillator(); +// const gain = ctx.createGain(); +// +// osc.frequency.value = 20; +// +// // 不建议设成 0;有些浏览器会优化掉静音链路。 +// // 0.00001 基本听不到,但可以让 graph 持续处于活动状态。 +// gain.gain.value = 0.00001; +// +// osc.connect(gain); +// gain.connect(ctx.destination); +// +// osc.start(); +// +// this.keepAliveSource = osc; +// this.keepAliveGain = gain; +// this.unlocked = true; +// } +// +// async playBlob(blob) { +// const ctx = this.getContext(); +// +// if (ctx.state === 'suspended') { +// await ctx.resume(); +// } +// +// const arrayBuffer = await blob.arrayBuffer(); +// +// // Safari 对同一个 ArrayBuffer decode 后可能会 detach,保险起见 slice 一份 +// const audioBuffer = await ctx.decodeAudioData(arrayBuffer.slice(0)); +// +// if (this.currentSource) { +// try { +// this.currentSource.stop(); +// } catch (_) {} +// this.currentSource = null; +// } +// +// const source = ctx.createBufferSource(); +// source.buffer = audioBuffer; +// source.connect(ctx.destination); +// +// this.currentSource = source; +// +// source.start(0); +// +// return new Promise((resolve) => { +// source.onended = () => { +// if (this.currentSource === source) { +// this.currentSource = null; +// } +// resolve(); +// }; +// }); +// } +// +// stopKeepAlive() { +// if (this.keepAliveSource) { +// try { +// this.keepAliveSource.stop(); +// } catch (_) {} +// +// this.keepAliveSource = null; +// this.keepAliveGain = null; +// } +// } +// } \ No newline at end of file diff --git a/src/utils/event_bus.jsx b/src/utils/event_bus.jsx new file mode 100644 index 0000000..2aa1945 --- /dev/null +++ b/src/utils/event_bus.jsx @@ -0,0 +1,14 @@ +export const eventBus = new EventTarget() + +const FilterSelectedEvent = 'FilterSelected' + +const CallLoadingEvent = 'CallLoading' + +export function RegistLoading(func) { + eventBus.addEventListener(CallLoadingEvent, (event) => { + func(event.detail) + }) +} +export function triggerCallLoading(bLoading) { + eventBus.dispatchEvent(new CustomEvent(CallLoadingEvent, { detail: bLoading })) +} \ No newline at end of file diff --git a/src/utils/g_context.js b/src/utils/g_context.js new file mode 100644 index 0000000..d7bc5a9 --- /dev/null +++ b/src/utils/g_context.js @@ -0,0 +1,7 @@ +import {createContext,useContext} from 'react'; + +export const GContext = createContext(null); + +export function useGContext() { + return useContext(GContext); +} \ No newline at end of file diff --git a/src/utils/http_cookie.jsx b/src/utils/http_cookie.jsx new file mode 100644 index 0000000..c48a487 --- /dev/null +++ b/src/utils/http_cookie.jsx @@ -0,0 +1,77 @@ +/** + * 使用方法: + * - 导入该http组件 + * import http from '@/utils/http'; + * - 发 GET 自动带cookie + * const { data } = await http.get('/userinfo'); + * - 发 POST,也会自动带 cookie + * await http.post('/posts', { title: 'hello' }); + */ + +import axios from 'axios'; + +const http = axios.create({ + baseURL: 'https://rop.cc/apitest/cookie', + timeout: 5000, + withCredentials: true //提示浏览器,带上cookie +}); + +// 请求拦截器:自动附加 token +// http.interceptors.request.use(cfg => { +// cfg.headers['Authorization'] = `Bearer ${token}`; +// return cfg; +// }, err => Promise.reject(err)); + +// 响应拦截器:统一处理 401(未授权) +http.interceptors.response.use(res => res, err => { + // 检查错误类型是否为 AxiosError,并且是否为超时错误 + if (err.code === 'ECONNABORTED' && err.message.includes('timeout')) { + // 超时错误的处理 + console.error('请求超时:', err.message); + alert('请求超时,请稍后再试'); + return Promise.resolve(); // 返回一个 resolved promise,防止继续传播 + } + if (err.response) { + const status = err.response.status; + + switch (status) { + case 401: + // 重定向到登录页 + window.location.href = '/apitest/login'; + break; + case 403: + alert('权限不足,请联系管理员'); + break; + case 404: + console.warn('请求的资源未找到'); + break; + case 500: + alert('服务器出错,请稍后再试'); + break; + case 502: + alert('网关错误,请稍后再试'); + break; + case 503: + alert('服务不可用,请稍后再试'); + break; + case 504: + alert('网关超时,请稍后再试'); + break; + default: + console.error('请求失败:', err); + + } + return Promise.resolve(); + + } else { + // 非响应错误 + console.error('非响应错误:', err); + // 处理非响应错误 + if (err instanceof Error) { + alert('请求失败,请检查网络连接'); + } + } + return Promise.reject(err); +}); +export default http; + diff --git a/src/utils/http_localjwt.jsx b/src/utils/http_localjwt.jsx new file mode 100644 index 0000000..904bf83 --- /dev/null +++ b/src/utils/http_localjwt.jsx @@ -0,0 +1,78 @@ +/** + * 使用方法: + * - 导入该http组件 + * import http from '@/utils/http'; + * - 发 GET 自动带Authorization 头 + * const { data } = await http.get('/userinfo'); + * - 发 POST,也会自动带 Authorization 头 + * await http.post('/posts', { title: 'hello' }); + */ + +import axios from 'axios'; +const http = axios.create({ + baseURL: 'https://voc.rop.cc/api', + timeout: 5000 +}); +// 请求拦截器:自动附加 token +http.interceptors.request.use(cfg => { + const token = localStorage.getItem('jwt'); + if (token) { + cfg.headers['Authorization'] = `Bearer ${token}`; + } + return cfg; +}, err => Promise.reject(err)); +// 响应拦截器:统一处理 401(未授权) +http.interceptors.response.use(res => res, err => { + // 检查错误类型是否为 AxiosError,并且是否为超时错误 + if (err.code === 'ECONNABORTED' && err.message.includes('timeout')) { + // 超时错误的处理 + console.error('请求超时:', err.message); + alert('请求超时,请稍后再试'); + return Promise.resolve(); // 返回一个 resolved promise,防止继续传播 + } + if (err.response) { + const status = err.response.status; + + switch (status) { + case 401: + // 清除可能已失效的 token + localStorage.removeItem('jwt'); + // 重定向到登录页 + window.location.href = '/login'; + break; + case 403: + alert('权限不足,请联系管理员'); + break; + case 404: + console.warn('请求的资源未找到'); + break; + case 500: + alert('服务器出错,请稍后再试'); + break; + case 502: + alert('网关错误,请稍后再试'); + break; + case 503: + alert('服务不可用,请稍后再试'); + break; + case 504: + alert('网关超时,请稍后再试'); + break; + default: + console.error('请求失败:', err); + + } + return Promise.resolve(); + + } else { + // 非响应错误 + console.error('非响应错误:', err); + // 处理非响应错误 + if (err instanceof Error) { + alert('请求失败,请检查网络连接'); + } + } + return Promise.reject(err); +}); +export default http; + diff --git a/src/utils/player.js b/src/utils/player.js new file mode 100644 index 0000000..747e73c --- /dev/null +++ b/src/utils/player.js @@ -0,0 +1,55 @@ +import * as saving from '@/utils/saving.jsx' + +let currentAudio = null +let currentUrl = null +let playing = false + +function stopCurrentPlay() { + if (currentAudio) { + currentAudio.pause() + currentAudio.currentTime = 0 + + currentAudio.onended = null + currentAudio.onerror = null + } + + if (currentUrl) { + URL.revokeObjectURL(currentUrl) + } + + currentAudio = null + currentUrl = null + playing = false +} + +export async function play(msgid) { + if (playing) { + stopCurrentPlay() + } + + const blob = await saving.getAudioBlob(msgid) + if (!blob) return + + const url = URL.createObjectURL(blob.blob) + const audio = new Audio(url) + + currentAudio = audio + currentUrl = url + playing = true + + audio.onended = () => { + stopCurrentPlay() + } + + audio.onerror = () => { + console.error("音频播放失败") + stopCurrentPlay() + } + + try { + await audio.play() + } catch (err) { + console.error("音频播放失败", err) + stopCurrentPlay() + } +} \ No newline at end of file diff --git a/src/utils/recorder.jsx b/src/utils/recorder.jsx new file mode 100644 index 0000000..ce32613 --- /dev/null +++ b/src/utils/recorder.jsx @@ -0,0 +1,241 @@ +export class Recorder { + + constructor(options = {}) { + this.autoPlay = options.autoPlay ?? true; + this.onStateChange = options.onStateChange || (() => { }); + this.startPromise = null; + this.recordStartTime = 0; + this.mediaStream = null; + this.mediaRecorder = null; + this.recordedChunks = []; + /** this.state: + * - invalid + * - idle + * - starting + * - recording + */ + + if (!navigator.mediaDevices?.getUserMedia) { + console.error('当前环境不支持录音,请使用 HTTPS 或 localhost 访问'); + this.setState('invalid') + return; + } + const p = navigator.mediaDevices.getUserMedia({audio: true}); + p.then((stream) => { + // 只是申请权限,不是真的开始录音,所以立刻关闭麦克风 + stream.getTracks().forEach(track => track.stop()); + this.setState('idle') + console.log('麦克风权限已允许'); + }).catch((err) => { + this.setState('invalid') + console.error('麦克风权限被拒绝或申请失败:', err); + }) + + } + + setState(nextState) { + this.state = nextState; + this.onStateChange(nextState); + } + + /** 停止麦克风轨道,避免浏览器一直显示录音占用。 */ + stopTracks() { + this.mediaStream?.getTracks().forEach((track) => track.stop()); + this.mediaStream = null; + } + + /** 页面卸载或组件销毁时调用。 */ + close() { + if (this.mediaRecorder?.state === 'recording') this.mediaRecorder.stop(); + this.stopTracks(); + } + + async startRecorder() { + if (this.state === 'recording' || this.state === 'starting') { + return this.startPromise; + } + + if (this.state !== 'idle') { + throw new Error('当前无法使用录音'); + } + + this.setState('starting'); + + this.startPromise = this._doStartRecorder(); + + try { + await this.startPromise; + } finally { + this.startPromise = null; + } + } + + async getMicStream() { + const devices = await navigator.mediaDevices.enumerateDevices(); + + const audioInputs = devices.filter(device => device.kind === 'audioinput'); + + const hasDefaultDevice = audioInputs.some(device => device.deviceId === 'default'); + + // Chrome 桌面端通常会有 deviceId === 'default' 的虚拟默认设备 + if (hasDefaultDevice) { + try { + return await navigator.mediaDevices.getUserMedia({ + audio: { + deviceId: {exact: 'default'}, + echoCancellation: true, + noiseSuppression: true, + autoGainControl: true + } + }); + } catch (err) { + console.warn('使用 default 麦克风失败,回退到普通 audio:true', { + name: err.name, + message: err.message, + constraint: err.constraint + }); + } + } + + // 手机端或不支持 default 设备的浏览器走这里 + return await navigator.mediaDevices.getUserMedia({ + audio: { + echoCancellation: true, + noiseSuppression: true, + autoGainControl: true + } + }); + } + + async _doStartRecorder() { + try { + this.mediaStream = await this.getMicStream() + + this.recordedChunks = []; + + const candidates = [ + 'audio/webm;codecs=opus', + 'audio/webm', + 'audio/mp4' + ]; + + const mimeType = + candidates.find(type => MediaRecorder.isTypeSupported(type)) || ''; + + this.mediaRecorder = new MediaRecorder( + this.mediaStream, + mimeType ? {mimeType} : undefined + ); + + console.log('MIME type =', this.mediaRecorder.mimeType || mimeType); + + this.mediaRecorder.addEventListener('dataavailable', event => { + if (event.data && event.data.size > 0) { + this.recordedChunks.push(event.data); + } + }); + + this.mediaRecorder.start(); + this.recordStartTime = performance.now(); + + this.setState('recording'); + } catch (err) { + this.stopTracks(); + this.mediaRecorder = null; + this.recordedChunks = []; + this.setState('idle'); + throw err; + } + + + + } + + async stopRecording() { + // 如果还在启动中,先等启动完成 + if (this.state === 'starting' && this.startPromise) { + await this.startPromise; + } + + if (!this.mediaRecorder || this.mediaRecorder.state === 'inactive') { + throw new Error('当前没有正在进行的录音'); + } + + if (this.state !== 'recording') { + throw new Error('当前没有正在进行的录音'); + } + + this.setState('stopping'); + + const recorder = this.mediaRecorder; + + const stopped = new Promise((resolve, reject) => { + recorder.addEventListener('stop', resolve, {once: true}); + recorder.addEventListener('error', reject, {once: true}); + }); + + recorder.stop(); + + await stopped; + + this.stopTracks(); + + const type = recorder.mimeType || 'audio/webm'; + const blob = new Blob(this.recordedChunks, {type}); + + this.mediaRecorder = null; + this.recordedChunks = []; + this.setState('idle'); + + return blob; + } + + + + // + // async startRecorder() { + // if (this.state !== 'idle') { + // throw new Error('当前无法使用录音') + // } + // if (this.mediaRecorder?.state === 'recording') return; + // + // this.mediaStream = await navigator.mediaDevices.getUserMedia({ + // audio: {deviceId: {exact: 'default'}} + // }); + // this.recordedChunks = []; + // + // const candidates = ['audio/webm;codecs=opus', 'audio/webm', 'audio/mp4']; + // const mimeType = candidates.find((type) => MediaRecorder.isTypeSupported(type)) || ''; + // this.mediaRecorder = new MediaRecorder(this.mediaStream, mimeType ? {mimeType} : undefined); + // + // console.log("MIME type =", mimeType) + // + // this.mediaRecorder.addEventListener('dataavailable', (event) => { + // if (event.data?.size > 0) this.recordedChunks.push(event.data); + // }); + // + // this.mediaRecorder.start(); + // this.setState('recording'); + // } + // + // /** 只停止录音并返回音频 Blob;适合需要先预览再发送的界面。 */ + // async stopRecording() { + // if (!this.mediaRecorder || this.mediaRecorder.state === 'inactive') { + // throw new Error('当前没有正在进行的录音'); + // } + // + // const stopped = new Promise((resolve) => { + // this.mediaRecorder.addEventListener('stop', resolve, {once: true}); + // }); + // + // this.mediaRecorder.stop(); + // await stopped; + // this.stopTracks(); + // + // const type = this.mediaRecorder.mimeType || 'audio/webm'; + // const blob = new Blob(this.recordedChunks, {type}); + // this.setState('idle'); + // return blob; + // } + +} \ No newline at end of file diff --git a/src/utils/saving.jsx b/src/utils/saving.jsx new file mode 100644 index 0000000..9cd9caa --- /dev/null +++ b/src/utils/saving.jsx @@ -0,0 +1,146 @@ +// +import * as audiodb from '@/utils/audioDB.js' + + +/** + * localStorage.threads
[] + * section 对象定义: + * { + * threadid : string, + * messages : [ + * {messageid:"xxxx",role:"user"|"assistant",content:"xxxx",hasaudio:true|false}, + * {messageid:"xxxx",role:"user"|"assistant",content:"xxxx",hasaudio:true|false} + * ] + * } + */ + + +function loadThreads() { + let threads = localStorage.getItem('threads') + if (!threads) { + threads = JSON.stringify([]) + localStorage.setItem('threads', threads) + } + return JSON.parse(threads) +} + +export function listupthreads() { + + const threads = localStorage.getItem("threads") + if (!threads) { + localStorage.setItem("threads", JSON.stringify([])); + return [] + } + + return JSON.parse(threads); +} + +/** message + * - messageid + * - role + * - content + * - hasaudio : true|false + */ +export async function addMessage(threadid, message, audio) { + if (!message || !threadid) return false; + + // console.log("[[saving.addMessage]] threadid =", threadid) + let threads = loadThreads() + + + let _section = threads.find(item => item.threadid === threadid) + if (!_section) { + console.log("未找到threadid,添加新thread") + _section = { + threadid: threadid, + messages: [] + } + threads.push(_section) + } + const exist_msg = _section.messages.filter(item => item.messageid === message.messageid) + if (exist_msg.length > 0) { + console.log("existing message id") + return false + } + _section.messages.push(message) + if (audio && message.hasaudio) { + await audiodb.saveAudio(message.messageid, audio) + } + localStorage.setItem("threads", JSON.stringify(threads)) +} + +export function getSelectedThread() { + let _lvar = localStorage.getItem('selected_threadid') + if (!_lvar) { + _lvar = '' + localStorage.setItem('selected_threadid', 'New Thread') + } + return _lvar +} + +export function deleteThread(threadid) { + let threads = loadThreads() + let thr = threads.find(item => (item.threadid === threadid)) + if(!thr){ + return false + }else{ + let newThreads = threads.filter(item=> item.threadid!== threadid) + if (newThreads.length === 0) { + newThreads = [] + } + localStorage.setItem('threads', JSON.stringify(newThreads)) + } +} + +export function setSelectedThread(threadid) { + localStorage.setItem('selected_threadid', threadid) +} + +export function getThread(threadid) { + let _threads = localStorage.getItem('threads') + if (!_threads) { + _threads = '[]' + localStorage.setItem('threads', _threads) + } + let threads = JSON.parse(_threads) + const thread = threads.find(item => item.threadid === threadid) + + if (thread) { + return thread + } else { + console.warn("[[saving.getThread]] 没找到要找到Thread:", threadid) + return null + } +} + +export function checkThreadid(threadid) { + let _threads = localStorage.getItem('threads') + if (!_threads) { + _threads = '[]' + localStorage.setItem('threads', _threads) + } + let threads = JSON.parse(_threads) + const thread = threads.find(item => item.threadid === threadid) + return !!thread; +} + +export async function getAudioBlob(msgid) { + try { + return await audiodb.getAudio(msgid) + } catch (error) { + console.error("getAudioBlob error:", error) + return null + } + +} + + + + + + + + + + + diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..f90f943 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,52 @@ +import {defineConfig} from 'vite' +import react from '@vitejs/plugin-react' +import {fileURLToPath, URL} from 'node:url'; +import {VitePWA} from 'vite-plugin-pwa' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + react(), + VitePWA({ + registerType: 'autoUpdate', + manifest: { + name: 'AI Language Chat', + short_name: 'AI Lang', + description: 'Chat with AI to learn foreign languages', + start_url: '/', + scope: '/', + display: 'standalone', + background_color: '#ffffff', + theme_color: '#2563EB', + icons: [ + { + src: '/android-chrome-192x192.png', + sizes: '192x192', + type: 'image/png' + }, + { + src: '/android-chrome-512x512.png', + sizes: '512x512', + type: 'image/png' + }, + { + src: '/android-chrome-512x512.png', + sizes: '512x512', + type: 'image/png', + purpose: 'any maskable' + } + ] + } + }) + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + } + }, + server: { + host: '0.0.0.0', + port: 5223, + strictPort: true //如果端口被占直接报错,不自动换 + } +})