From bb8f6c7af006b9cf189adf0ea9b298fd9ce57fc0 Mon Sep 17 00:00:00 2001 From: "Timur Kh." Date: Sun, 14 Sep 2025 10:58:33 +0300 Subject: [PATCH] 1 --- .github/workflows/frontend.yml | 30 + frontend/.env.example | 3 + frontend/.gitignore | 25 + frontend/.vscode/extensions.json | 3 + frontend/README.md | 9 + frontend/index.html | 14 + frontend/package-lock.json | 3393 +++++++++++++++++ frontend/package.json | 27 + frontend/public/flash.svg | 3 + frontend/public/logo.png | Bin 0 -> 10598 bytes frontend/public/logo.svg | 10 + frontend/public/refresh.svg | 6 + frontend/public/scan_example.png | Bin 0 -> 101746 bytes frontend/public/stol.svg | 16 + frontend/public/vite.svg | 1 + frontend/src/App.vue | 160 + frontend/src/api/models.ts | 96 + frontend/src/api/request.ts | 381 ++ frontend/src/assets/vue.svg | 1 + frontend/src/components/PlayerCard.vue | 90 + frontend/src/main.ts | 11 + frontend/src/screens/CameraScreen.vue | 507 +++ frontend/src/screens/LandingScreen.vue | 32 + frontend/src/screens/QuizScreen.vue | 195 + frontend/src/screens/ResultScreen.vue | 303 ++ .../src/screens/game/GameSettingsScreen.vue | 201 + .../src/screens/game/GameWelcomeScreen.vue | 54 + frontend/src/screens/game/Room.vue | 131 + frontend/src/store/core.ts | 80 + frontend/src/style.css | 511 +++ frontend/src/utils/debug.ts | 61 + frontend/src/vite-env.d.ts | 10 + frontend/tsconfig.app.json | 15 + frontend/tsconfig.json | 7 + frontend/tsconfig.node.json | 25 + frontend/vite.config.ts | 26 + 36 files changed, 6437 insertions(+) create mode 100644 .github/workflows/frontend.yml create mode 100644 frontend/.env.example create mode 100644 frontend/.gitignore create mode 100644 frontend/.vscode/extensions.json create mode 100644 frontend/README.md create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/flash.svg create mode 100644 frontend/public/logo.png create mode 100644 frontend/public/logo.svg create mode 100644 frontend/public/refresh.svg create mode 100644 frontend/public/scan_example.png create mode 100644 frontend/public/stol.svg create mode 100644 frontend/public/vite.svg create mode 100644 frontend/src/App.vue create mode 100644 frontend/src/api/models.ts create mode 100644 frontend/src/api/request.ts create mode 100644 frontend/src/assets/vue.svg create mode 100644 frontend/src/components/PlayerCard.vue create mode 100644 frontend/src/main.ts create mode 100644 frontend/src/screens/CameraScreen.vue create mode 100644 frontend/src/screens/LandingScreen.vue create mode 100644 frontend/src/screens/QuizScreen.vue create mode 100644 frontend/src/screens/ResultScreen.vue create mode 100644 frontend/src/screens/game/GameSettingsScreen.vue create mode 100644 frontend/src/screens/game/GameWelcomeScreen.vue create mode 100644 frontend/src/screens/game/Room.vue create mode 100644 frontend/src/store/core.ts create mode 100644 frontend/src/style.css create mode 100644 frontend/src/utils/debug.ts create mode 100644 frontend/src/vite-env.d.ts create mode 100644 frontend/tsconfig.app.json create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml new file mode 100644 index 0000000..afd9d25 --- /dev/null +++ b/.github/workflows/frontend.yml @@ -0,0 +1,30 @@ +name: Deploy frontend +on: + push: + branches: + - master + + +jobs: + goida: + runs-on: ubuntu-latest + name: Build and deploy + steps: + - name: Checkout code + uses: actions/checkout@v3 + - name: Deploy site + uses: appleboy/ssh-action@v1.2.1 + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USER }} + password: ${{ secrets.SSH_PASSWORD }} + key: ${{ secrets.SSH_KEY }} + port: 22 + script: | + cd what_is_bot + git pull origin master + cd frontend + npm i + npm run build + chown -R :www-data dist + diff --git a/frontend/.env.example b/frontend/.env.example new file mode 100644 index 0000000..863cf9c --- /dev/null +++ b/frontend/.env.example @@ -0,0 +1,3 @@ +DEBUG=true +VITE_API_BASE_URL=https://whatisbot-api.ruka.me/api/v1 + diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..9343beb --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.env diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/frontend/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..ab15455 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,9 @@ +# Vue 3 + TypeScript + Vite + +This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` + Vite + Vue + TS + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..d5a3ae4 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,3393 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "axios": "^1.12.1", + "pinia": "^3.0.3", + "vue": "^3.5.18", + "vue-tg": "^0.9.0" + }, + "devDependencies": { + "@types/node": "^24.3.1", + "@vitejs/plugin-vue": "^6.0.1", + "@vue/tsconfig": "^0.7.0", + "typescript": "~5.8.3", + "vite": "^7.1.2", + "vite-plugin-vue-devtools": "^8.0.2", + "vue-tsc": "^3.0.5" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", + "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@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.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", + "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", + "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "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/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "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/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.29", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz", + "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.1.tgz", + "integrity": "sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.1.tgz", + "integrity": "sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.1.tgz", + "integrity": "sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.1.tgz", + "integrity": "sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.1.tgz", + "integrity": "sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.1.tgz", + "integrity": "sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.1.tgz", + "integrity": "sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.1.tgz", + "integrity": "sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.1.tgz", + "integrity": "sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.1.tgz", + "integrity": "sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.1.tgz", + "integrity": "sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.1.tgz", + "integrity": "sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.1.tgz", + "integrity": "sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.1.tgz", + "integrity": "sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.1.tgz", + "integrity": "sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.1.tgz", + "integrity": "sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.1.tgz", + "integrity": "sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.1.tgz", + "integrity": "sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.1.tgz", + "integrity": "sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.1.tgz", + "integrity": "sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.1.tgz", + "integrity": "sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.1.tgz", + "integrity": "sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz", + "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.29" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.23", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.23.tgz", + "integrity": "sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.23" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.23", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.23.tgz", + "integrity": "sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.23", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.23.tgz", + "integrity": "sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.23", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz", + "integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz", + "integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.2", + "@vue/babel-helper-vue-transform-on": "1.5.0", + "@vue/babel-plugin-resolve-type": "1.5.0", + "@vue/shared": "^3.5.18" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz", + "integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/parser": "^7.28.0", + "@vue/compiler-sfc": "^3.5.18" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.21.tgz", + "integrity": "sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/shared": "3.5.21", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.21.tgz", + "integrity": "sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.21", + "@vue/shared": "3.5.21" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.21.tgz", + "integrity": "sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/compiler-core": "3.5.21", + "@vue/compiler-dom": "3.5.21", + "@vue/compiler-ssr": "3.5.21", + "@vue/shared": "3.5.21", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.18", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.21.tgz", + "integrity": "sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.21", + "@vue/shared": "3.5.21" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/@vue/devtools-core": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-8.0.2.tgz", + "integrity": "sha512-V7eKTTHoS6KfK8PSGMLZMhGv/9yNDrmv6Qc3r71QILulnzPnqK2frsTyx3e2MrhdUZnENPEm6hcb4z0GZOqNhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^8.0.2", + "@vue/devtools-shared": "^8.0.2", + "mitt": "^3.0.1", + "nanoid": "^5.1.5", + "pathe": "^2.0.3", + "vite-hot-client": "^2.1.0" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-core/node_modules/@vue/devtools-kit": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.0.2.tgz", + "integrity": "sha512-yjZKdEmhJzQqbOh4KFBfTOQjDPMrjjBNCnHBvnTGJX+YLAqoUtY2J+cg7BE+EA8KUv8LprECq04ts75wCoIGWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^8.0.2", + "birpc": "^2.5.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^2.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-core/node_modules/@vue/devtools-shared": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.0.2.tgz", + "integrity": "sha512-mLU0QVdy5Lp40PMGSixDw/Kbd6v5dkQXltd2r+mdVQV7iUog2NlZuLxFZApFZ/mObUBDhoCpf0T3zF2FWWdeHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/devtools-core/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@vue/devtools-core/node_modules/perfect-debounce": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz", + "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/language-core": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.0.6.tgz", + "integrity": "sha512-e2RRzYWm+qGm8apUHW1wA5RQxzNhkqbbKdbKhiDUcmMrNAZGyM8aTiL3UrTqkaFI5s7wJRGGrp4u3jgusuBp2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.23", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^2.0.5", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.2" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.21.tgz", + "integrity": "sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.21" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.21.tgz", + "integrity": "sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.21", + "@vue/shared": "3.5.21" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.21.tgz", + "integrity": "sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.21", + "@vue/runtime-core": "3.5.21", + "@vue/shared": "3.5.21", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.21.tgz", + "integrity": "sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.21", + "@vue/shared": "3.5.21" + }, + "peerDependencies": { + "vue": "3.5.21" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.21.tgz", + "integrity": "sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.7.0.tgz", + "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": "5.x", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/alien-signals": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-2.0.7.tgz", + "integrity": "sha512-wE7y3jmYeb0+h6mr5BOovuqhFv22O/MV9j5p0ndJsa7z1zJNPGQ4ph5pQk/kTTCWRC3xsA4SmtwmkzQO+7NCNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansis": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.1.0.tgz", + "integrity": "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.1.tgz", + "integrity": "sha512-Kn4kbSXpkFHCGE6rBFNwIv0GQs4AvDT80jlveJDKFxjbTYMUeB4QtsdPCv6H8Cm19Je7IU6VFtRl2zWZI0rudQ==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.2.tgz", + "integrity": "sha512-NvcIedLxrs9llVpX7wI+Jz4Hn9vJQkCPKrTaHIE0sW/Rj1iq6Fzby4NbyTZjQJNoypBXNaG7tEHkTgONZpwgxQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/birpc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.5.0.tgz", + "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/browserslist": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.0.tgz", + "integrity": "sha512-P9go2WrP9FiPwLv3zqRD/Uoxo0RSHjzFCiQz7d4vbmwNqQFo9T9WCeP/Qn5EbcKQY6DBbkxEXNcpJOmncNrb7A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.2", + "caniuse-lite": "^1.0.30001741", + "electron-to-chromium": "^1.5.218", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/caniuse-lite": { + "version": "1.0.30001741", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz", + "integrity": "sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==", + "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/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/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/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.218", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.218.tgz", + "integrity": "sha512-uwwdN0TUHs8u6iRgN8vKeWZMRll4gBkz+QMqdS7DDe49uiK68/UX92lFb61oiFPrpYZNeZIqa4bA7O6Aiasnzg==", + "dev": true, + "license": "ISC" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" + } + }, + "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/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==", + "license": "MIT" + }, + "node_modules/execa": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", + "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "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/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "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/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-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-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "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.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "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/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/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "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.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "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/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "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/node-releases": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", + "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "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/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", + "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz", + "integrity": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.50.1", + "@rollup/rollup-android-arm64": "4.50.1", + "@rollup/rollup-darwin-arm64": "4.50.1", + "@rollup/rollup-darwin-x64": "4.50.1", + "@rollup/rollup-freebsd-arm64": "4.50.1", + "@rollup/rollup-freebsd-x64": "4.50.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.50.1", + "@rollup/rollup-linux-arm-musleabihf": "4.50.1", + "@rollup/rollup-linux-arm64-gnu": "4.50.1", + "@rollup/rollup-linux-arm64-musl": "4.50.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.50.1", + "@rollup/rollup-linux-ppc64-gnu": "4.50.1", + "@rollup/rollup-linux-riscv64-gnu": "4.50.1", + "@rollup/rollup-linux-riscv64-musl": "4.50.1", + "@rollup/rollup-linux-s390x-gnu": "4.50.1", + "@rollup/rollup-linux-x64-gnu": "4.50.1", + "@rollup/rollup-linux-x64-musl": "4.50.1", + "@rollup/rollup-openharmony-arm64": "4.50.1", + "@rollup/rollup-win32-arm64-msvc": "4.50.1", + "@rollup/rollup-win32-ia32-msvc": "4.50.1", + "@rollup/rollup-win32-x64-msvc": "4.50.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unplugin-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.0.tgz", + "integrity": "sha512-JLoggz+PvLVMJo+jZt97hdIIIZ2yTzGgft9e9q8iMrC4ewufl62ekeW7mixBghonn2gVb/ICjyvlmOCUBnJLQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.5.tgz", + "integrity": "sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-dev-rpc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vite-dev-rpc/-/vite-dev-rpc-1.1.0.tgz", + "integrity": "sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==", + "dev": true, + "license": "MIT", + "dependencies": { + "birpc": "^2.4.0", + "vite-hot-client": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0" + } + }, + "node_modules/vite-hot-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.1.0.tgz", + "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-plugin-inspect": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-11.3.3.tgz", + "integrity": "sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansis": "^4.1.0", + "debug": "^4.4.1", + "error-stack-parser-es": "^1.0.5", + "ohash": "^2.0.11", + "open": "^10.2.0", + "perfect-debounce": "^2.0.0", + "sirv": "^3.0.1", + "unplugin-utils": "^0.3.0", + "vite-dev-rpc": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-inspect/node_modules/perfect-debounce": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz", + "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite-plugin-vue-devtools": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-8.0.2.tgz", + "integrity": "sha512-1069qvMBcyAu3yXQlvYrkwoyLOk0lSSR/gTKy/vy+Det7TXnouGei6ZcKwr5TIe938v/14oLlp0ow6FSJkkORA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-core": "^8.0.2", + "@vue/devtools-kit": "^8.0.2", + "@vue/devtools-shared": "^8.0.2", + "execa": "^9.6.0", + "sirv": "^3.0.2", + "vite-plugin-inspect": "^11.3.3", + "vite-plugin-vue-inspector": "^5.3.2" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0-0" + } + }, + "node_modules/vite-plugin-vue-devtools/node_modules/@vue/devtools-kit": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.0.2.tgz", + "integrity": "sha512-yjZKdEmhJzQqbOh4KFBfTOQjDPMrjjBNCnHBvnTGJX+YLAqoUtY2J+cg7BE+EA8KUv8LprECq04ts75wCoIGWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^8.0.2", + "birpc": "^2.5.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^2.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/vite-plugin-vue-devtools/node_modules/@vue/devtools-shared": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.0.2.tgz", + "integrity": "sha512-mLU0QVdy5Lp40PMGSixDw/Kbd6v5dkQXltd2r+mdVQV7iUog2NlZuLxFZApFZ/mObUBDhoCpf0T3zF2FWWdeHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/vite-plugin-vue-devtools/node_modules/perfect-debounce": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz", + "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.2.tgz", + "integrity": "sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.21.tgz", + "integrity": "sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.21", + "@vue/compiler-sfc": "3.5.21", + "@vue/runtime-dom": "3.5.21", + "@vue/server-renderer": "3.5.21", + "@vue/shared": "3.5.21" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-tg": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/vue-tg/-/vue-tg-0.9.0.tgz", + "integrity": "sha512-CqIpKFj8/KPBSecsdyuaLm3pA09YCpjHhe/rM7tDEAa8dpLYo1zTULDMczlh2JgVcX06xzJEbSe/OAcoW1Tl7Q==", + "license": "MIT", + "peerDependencies": { + "vue": "^3" + } + }, + "node_modules/vue-tsc": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.0.6.tgz", + "integrity": "sha512-Tbs8Whd43R2e2nxez4WXPvvdjGbW24rOSgRhLOHXzWiT4pcP4G7KeWh0YCn18rF4bVwv7tggLLZ6MJnO6jXPBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.23", + "@vue/language-core": "3.0.6" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "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/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..c1a8016 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,27 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev-host": "vite --host", + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "axios": "^1.12.1", + "pinia": "^3.0.3", + "vue": "^3.5.18", + "vue-tg": "^0.9.0" + }, + "devDependencies": { + "@types/node": "^24.3.1", + "@vitejs/plugin-vue": "^6.0.1", + "@vue/tsconfig": "^0.7.0", + "typescript": "~5.8.3", + "vite": "^7.1.2", + "vite-plugin-vue-devtools": "^8.0.2", + "vue-tsc": "^3.0.5" + } +} diff --git a/frontend/public/flash.svg b/frontend/public/flash.svg new file mode 100644 index 0000000..0204ba4 --- /dev/null +++ b/frontend/public/flash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/frontend/public/logo.png b/frontend/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ee271e1ef01b8df4f5838f8734c5a0d528c88fc9 GIT binary patch literal 10598 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 + + + + + + + + + diff --git a/frontend/public/refresh.svg b/frontend/public/refresh.svg new file mode 100644 index 0000000..1349ef2 --- /dev/null +++ b/frontend/public/refresh.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/frontend/public/scan_example.png b/frontend/public/scan_example.png new file mode 100644 index 0000000000000000000000000000000000000000..953da91264a466d3527695aa231342c8363ac633 GIT binary patch literal 101746 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

lfknfeZ#B4nf0l~Xt6+?sf|=8i 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 literal 0 HcmV?d00001 diff --git a/frontend/public/stol.svg b/frontend/public/stol.svg new file mode 100644 index 0000000..2b99a38 --- /dev/null +++ b/frontend/public/stol.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..75e82fa --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,160 @@ + + + \ No newline at end of file diff --git a/frontend/src/api/models.ts b/frontend/src/api/models.ts new file mode 100644 index 0000000..308468e --- /dev/null +++ b/frontend/src/api/models.ts @@ -0,0 +1,96 @@ +export type ApiError = { + error: string +}; + +export interface ImageDetectionResponse { + example_russian: string; + example_tatar: string; + object_russian: string; + object_tatar: string; + pronunciation: string; + transcription_ipa: string; + description_russian: string; + description_tatar: string; +} + +export interface ImageDetectionRequest { + file: File; +} + + +export interface TextToSpeechRequest { + speaker: string; + text: string +} + +export interface TextToSpeechResponse { + audio_base64: string +} + + +export interface AuthRequest { + first_name: string, + last_name: string, + photo_url: string, + tg_id: number, + username: string +} + +export interface AuthResponse { + first_name: string, + last_name: string, + photo_url: string, + tg_id: number, + username: string + token: string +} + + +export interface Room { + created_at: string; + created_by: string; + id: string; + name: string; + updated_at: string; + error?: string | null +} + +export interface RoomMember { + first_name: string; + id: string; + joined_at: string; + photo_url: string; + room_id: string; + user_id: string; +} + +export interface RoomMembersResponse { + members: RoomMember[]; + error?: string | null; +} + +export interface UserRoomsRespomse { + rooms: Room[]; + error?: string | null; +} + +export interface JoinRoomResponse { + message: string; + success: boolean; +} + +export interface CreateRoomRequest { + rounds_count: number; + word_category: string; +} + +export interface StartGameRequest { + room_id: string; +} + +export interface StartGameResponse { + success: boolean; + message?: string; + game_id?: string; + error?: string; +} diff --git a/frontend/src/api/request.ts b/frontend/src/api/request.ts new file mode 100644 index 0000000..1a56c3e --- /dev/null +++ b/frontend/src/api/request.ts @@ -0,0 +1,381 @@ +import axios, { type AxiosResponse } from 'axios'; +import { type ImageDetectionResponse, type ImageDetectionRequest, type TextToSpeechResponse, type AuthRequest, type AuthResponse, type Room, type JoinRoomResponse, type RoomMember, type RoomMembersResponse, type UserRoomsRespomse, type CreateRoomRequest, type StartGameResponse } from './models'; + +// Configure base URL - adjust this to match your backend URL +const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8000'; + + +export async function authenticateUser(authData: AuthRequest): Promise { + try { + const response = await fetch(`${API_BASE_URL}/auth`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(authData), + }); + + if (!response.ok) { + throw new Error(`Authentication failed: ${response.status} ${response.statusText}`); + } + + const data: AuthResponse = await response.json(); + + if (data.token) { + localStorage.setItem('authToken', data.token); + } + + return data; + } catch (error) { + console.error('Auth request failed:', error); + throw error; + } +} + +export function getAuthToken(): string | null { + return localStorage.getItem('authToken'); +} + +export function clearAuthToken(): void { + localStorage.removeItem('authToken'); +} + +export function isAuthenticated(): boolean { + return !!getAuthToken(); +} + +const apiClient = axios.create({ + baseURL: API_BASE_URL, + timeout: 30000, +}); + +/** + * Send image file to the image detection endpoint + * @param file - The image file to be analyzed + * @returns Promise with the detection results + */ +export const detectImageObjects = async(file: File) => { + try { + // Create FormData to send the file + const formData = new FormData(); + formData.append('file', file); + + const response: AxiosResponse = await apiClient.post( + '/image-detection', + formData, + { + headers: { + 'Content-Type': 'multipart/form-data', + }, + } + ); + + return response.data; + } catch (error) { + if (axios.isAxiosError(error)) { + // Handle API errors + if (error.response?.data) { + throw new Error(error.response.data.error || 'Image detection failed'); + } + throw new Error(error.message || 'Network error occurred'); + } + throw error; + } +}; + +export const textToSpeech = async(text: string): Promise => { + try { + const data = {speaker: "almaz", text: text} + + const response: AxiosResponse = await apiClient.post( + "/text-to-speech", JSON.stringify(data), {headers: {'Content-Type': 'application/json'}} + ); + + return response.data + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response?.data) { + throw new Error(error.response.data.error || 'Text-to-speech failed'); + } + throw new Error(error.message || 'Network error occurred'); + } + throw error; + } +} + +/** + * Alternative function that accepts ImageDetectionRequest object + * @param request - Object containing the file to be analyzed + * @returns Promise with the detection results + */ +export const detectImage = async (request: ImageDetectionRequest): Promise => { + return detectImageObjects(request.file); +}; + +/** + * Upload image file with progress tracking + * @param file - The image file to be analyzed + * @param onProgress - Optional callback to track upload progress + * @returns Promise with the detection results + */ +export const detectImageWithProgress = async ( + file: File, + onProgress?: (progress: number) => void +): Promise => { + try { + const formData = new FormData(); + formData.append('file', file); + + const response: AxiosResponse = await apiClient.post( + '/image-detection', + formData, + { + headers: { + 'Content-Type': 'multipart/form-data', + }, + onUploadProgress: (progressEvent) => { + if (onProgress && progressEvent.total) { + const progress = Math.round((progressEvent.loaded * 100) / progressEvent.total); + onProgress(progress); + } + }, + } + ); + + return response.data; + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response?.data) { + throw new Error(error.response.data.error || 'Image detection failed'); + } + throw new Error(error.message || 'Network error occurred'); + } + throw error; + } +}; + +/** + * Validate file before sending to API + * @param file - The file to validate + * @returns true if valid, throws error if invalid + */ +export const validateImageFile = (file: File): boolean => { + // Check file type + const allowedTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/webp']; + if (!allowedTypes.includes(file.type)) { + throw new Error('Invalid file type. Please upload a JPEG, PNG, GIF, or WebP image.'); + } + + // Check file size (10MB limit) + const maxSize = 10 * 1024 * 1024; // 10MB in bytes + if (file.size > maxSize) { + throw new Error('File size too large. Please upload an image smaller than 10MB.'); + } + + return true; +}; + +/** + * Authenticate user with the backend + * @param authData - User authentication data from Telegram + * @returns Promise with authentication response including token + */ +export const auth = async (authData: AuthRequest): Promise => { + try { + const response: AxiosResponse = await apiClient.post( + '/auth', + authData, + { + headers: { + 'Content-Type': 'application/json', + }, + } + ); + + if (response.data.token) { + localStorage.setItem('auth_token', response.data.token); + + apiClient.defaults.headers.common['Authorization'] = `Bearer ${response.data.token}`; + } + + return response.data; + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response?.data) { + throw new Error(error.response.data.error || 'Authentication failed'); + } + throw new Error(error.message || 'Network error occurred during authentication'); + } + throw error; + } +}; + +export const createRoom = async (roomParams: CreateRoomRequest): Promise => { + try { + const response: AxiosResponse = await apiClient.post("/rooms", roomParams, { + headers: { + 'Content-Type': 'application/json' + } + }) + + if (response.data.id) { + return response.data + } else { + throw new Error(response.data.error ? response.data.error : "Unknown error while creating room") + } + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response?.data) { + throw new Error(error.response.data.error || 'Unknown error while creating room'); + } + throw new Error(error.message || 'Network error occurred during creating room'); + } + throw error; + } +} + +export const joinRoom = async (room_id: string): Promise => { + try { + const response: AxiosResponse = await apiClient.post("/rooms/join", {room_id: room_id}, { + headers: { + 'Content-Type': 'application/json' + } + }) + + if (response.data.success) { + return response.data + } else { + throw new Error(response.data.message ? response.data.message : "Unknown error while joining room") + } + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response?.data) { + throw new Error(error.response.data.error || 'Unknown error while joining room'); + } + throw new Error(error.message || 'Network error occurred during joining room'); + } + throw error; + } +} + +export const getRoom = async (room_id: string): Promise => { + try { + const response: AxiosResponse = await apiClient.get(`/rooms/${room_id}`, { + headers: { + 'Content-Type': 'application/json' + } + }) + + if (response.data.id) { + return response.data + } else { + throw new Error(response.data.error ? response.data.error : "Unknown error while fetching room information") + } + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response?.data) { + throw new Error(error.response.data.error || 'Unknown error while fetching room information'); + } + throw new Error(error.message || 'Network error occurred during joining room'); + } + throw error; + } +} + +export const getRoomMembers = async (room_id: string): Promise => { + try { + const response: AxiosResponse = await apiClient.get(`/rooms/${room_id}/members`, { + headers: { + 'Content-Type': 'application/json' + } + }) + + if (response.data.members) { + return response.data.members + } else { + throw new Error(response.data.error ? response.data.error : "Unknown error while fetching room members") + } + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response?.data) { + throw new Error(error.response.data.error || 'Unknown error while fetching room members'); + } + throw new Error(error.message || 'Network error occurred during fethcing room members'); + } + throw error; + } +} + +export const getUserRooms = async (room_id: string): Promise => { + try { + const response: AxiosResponse = await apiClient.get(`/users/${room_id}/rooms`, { + headers: { + 'Content-Type': 'application/json' + } + }) + + if (response.data.rooms) { + return response.data.rooms + } else { + throw new Error(response.data.error ? response.data.error : "Unknown error while fetching user rooms") + } + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response?.data) { + throw new Error(error.response.data.error || 'Unknown error while fetching user rooms'); + } + throw new Error(error.message || 'Network error occurred during fethcing user rooms'); + } + throw error; + } +} + +export const startGame = async (roomId: string): Promise => { + try { + const token = getAuthToken(); + + const response: AxiosResponse = await apiClient.post('/games/start', + { room_id: roomId }, + { + headers: { + 'Content-Type': 'application/json', + ...(token && { 'Authorization': `Bearer ${token}` }) + } + } + ); + + if (response.data.success) { + return response.data; + } else { + throw new Error(response.data.message || response.data.error || "Unknown error while starting game"); + } + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response?.data) { + throw new Error(error.response.data.error || error.response.data.message || 'Unknown error while starting game'); + } + throw new Error(error.message || 'Network error occurred during starting game'); + } + throw error; + } +} + + +export const initializeAuth = (): string | null => { + const token = localStorage.getItem('authToken'); + if (token) { + apiClient.defaults.headers.common['Authorization'] = `Bearer ${token}`; + } + return token; +}; + +export default { + detectImageObjects, + detectImage, + detectImageWithProgress, + validateImageFile, + textToSpeech, + auth, + initializeAuth, + startGame, +}; diff --git a/frontend/src/assets/vue.svg b/frontend/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/frontend/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/components/PlayerCard.vue b/frontend/src/components/PlayerCard.vue new file mode 100644 index 0000000..ea813e1 --- /dev/null +++ b/frontend/src/components/PlayerCard.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..69bed16 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,11 @@ +import { createApp } from 'vue' +import './style.css' +import App from './App.vue' +import { createPinia } from 'pinia' +import './utils/debug' // Initialize debug mode + +const pinia = createPinia() +const app = createApp(App) + +app.use(pinia) +app.mount('#app') \ No newline at end of file diff --git a/frontend/src/screens/CameraScreen.vue b/frontend/src/screens/CameraScreen.vue new file mode 100644 index 0000000..3107b14 --- /dev/null +++ b/frontend/src/screens/CameraScreen.vue @@ -0,0 +1,507 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/screens/LandingScreen.vue b/frontend/src/screens/LandingScreen.vue new file mode 100644 index 0000000..3fb1cc6 --- /dev/null +++ b/frontend/src/screens/LandingScreen.vue @@ -0,0 +1,32 @@ + + + diff --git a/frontend/src/screens/QuizScreen.vue b/frontend/src/screens/QuizScreen.vue new file mode 100644 index 0000000..2c2ad53 --- /dev/null +++ b/frontend/src/screens/QuizScreen.vue @@ -0,0 +1,195 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/screens/ResultScreen.vue b/frontend/src/screens/ResultScreen.vue new file mode 100644 index 0000000..4c3a558 --- /dev/null +++ b/frontend/src/screens/ResultScreen.vue @@ -0,0 +1,303 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/screens/game/GameSettingsScreen.vue b/frontend/src/screens/game/GameSettingsScreen.vue new file mode 100644 index 0000000..e9ad9de --- /dev/null +++ b/frontend/src/screens/game/GameSettingsScreen.vue @@ -0,0 +1,201 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/screens/game/GameWelcomeScreen.vue b/frontend/src/screens/game/GameWelcomeScreen.vue new file mode 100644 index 0000000..2424ef4 --- /dev/null +++ b/frontend/src/screens/game/GameWelcomeScreen.vue @@ -0,0 +1,54 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/screens/game/Room.vue b/frontend/src/screens/game/Room.vue new file mode 100644 index 0000000..2bea552 --- /dev/null +++ b/frontend/src/screens/game/Room.vue @@ -0,0 +1,131 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/store/core.ts b/frontend/src/store/core.ts new file mode 100644 index 0000000..84b9a80 --- /dev/null +++ b/frontend/src/store/core.ts @@ -0,0 +1,80 @@ +import { ref, watch } from 'vue' +import { defineStore } from 'pinia' +import { Debug } from '../utils/debug' + +export const useAppStateStore = defineStore('appStates', () => { + const appState = ref("auth") // Start with auth state instead of landing + const title = ref("") + const transcription = ref("") + const description = ref("") + + // Authentication state + const isAuthenticated = ref(false) + const currentUser = ref<{ + id: string + username: string + email: string + } | null>(null) + + // Additional fields from API response + const exampleRussian = ref("") + const exampleTatar = ref("") + const objectRussian = ref("") + const objectTatar = ref("") + const pronunciation = ref("") + const transcriptionIPA = ref("") + const descriptionTatar = ref("") + const tts_audio = ref("") + + // game + const room_id = ref("") + const game_id = ref("") + + // UI state + const selectedDescriptionLanguage = ref<'ru' | 'tat'>('ru') + + // Photo data + const capturedImage = ref(null) + + if (Debug.enabled) { + watch(appState, (newState, oldState) => { + Debug.log('App state changed:', { from: oldState, to: newState }) + }) + } + + const setAppState = (state: string) => { + Debug.log('Setting app state to:', state) + appState.value = state + } + + const setAuthenticationStatus = (authenticated: boolean, user?: { id: string, username: string, email: string }) => { + isAuthenticated.value = authenticated + currentUser.value = user || null + Debug.log('Authentication status changed:', { authenticated, user }) + } + + Debug.log('AppState store initialized with state:', appState.value) + + return { + appState, + setAppState, + isAuthenticated, + currentUser, + setAuthenticationStatus, + title, + transcription, + description, + exampleRussian, + exampleTatar, + objectRussian, + objectTatar, + pronunciation, + transcriptionIPA, + capturedImage, + descriptionTatar, + selectedDescriptionLanguage, + tts_audio, + room_id, + game_id + } +}) diff --git a/frontend/src/style.css b/frontend/src/style.css new file mode 100644 index 0000000..4fca877 --- /dev/null +++ b/frontend/src/style.css @@ -0,0 +1,511 @@ +@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Old+Standard+TT:ital,wght@0,400;0,700;1,400&display=swap'); + +body { + background: #303030; + margin: 0; +} + +.landing { + padding-top: 60px; + padding-left: 12px; + padding-right: 12px; + display: flex; + flex-direction: column; + align-items: center; + gap: 60px; + position: relative; + + .user-menu-container { + position: absolute; + top: 20px; + right: 20px; + z-index: 100; + } + + .landing-title { + font-weight: 600; + font-size: 88px; + color: #90EE90; + font-family: 'OpenSans', sans-serif; + } + + .user-menu-button { + width: 40px; + height: 40px; + border-radius: 50%; + background: rgba(255, 255, 255, 0.1); + border: 2px solid rgba(255, 255, 255, 0.3); + color: rgba(254, 254, 254, 1); + font-family: OpenSans, sans-serif; + font-size: 16px; + font-weight: 600; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s ease; + } + + .user-menu-button:hover { + background: rgba(255, 255, 255, 0.2); + border-color: rgba(255, 255, 255, 0.5); + } + + .user-menu-dropdown { + position: absolute; + top: 50px; + right: 0; + background: rgba(20, 30, 40, 0.95); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 12px; + min-width: 200px; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); + overflow: hidden; + } + + .user-info { + padding: 16px; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + } + + .username { + font-family: OpenSans, sans-serif; + font-size: 16px; + font-weight: 600; + color: rgba(254, 254, 254, 1); + margin-bottom: 4px; + } + + .email { + font-family: OpenSans, sans-serif; + font-size: 14px; + color: rgba(254, 254, 254, 0.7); + } + + .menu-item { + width: 100%; + padding: 12px 16px; + background: none; + border: none; + text-align: left; + font-family: OpenSans, sans-serif; + font-size: 14px; + color: rgba(254, 254, 254, 0.9); + cursor: pointer; + transition: background-color 0.2s ease; + } + + .menu-item:hover { + background: rgba(255, 255, 255, 0.1); + } + + .logout-item { + color: #ff6b6b; + } + + .bubbles { + display: flex; + flex-direction: column; + width: 100%; + max-width: 600px; + gap: 4px; + } + + .bubble { + border: 2px solid rgba(255, 255, 255, 1); + border-radius: 100px; + padding: 3px 33px 3px 33px; + + font-weight: 400; + font-family: OpenSans, sans-serif; + font-size: 24px; + color: rgba(254, 254, 254, 1); + white-space: nowrap; + width: fit-content; + } + + .bubble:first-child { + align-self: flex-start; + } + + .bubble:last-child { + align-self: flex-end; + } + + .game-title { + font-weight: 600; + font-size: 48px; + color: #90EE90; + font-family: 'OpenSans', sans-serif; + text-align: center; + margin: 0; + } + + .description-section { + max-width: 600px; + text-align: center; + + p { + font-family: 'OpenSans', sans-serif; + font-size: 18px; + font-weight: 400; + color: rgba(254, 254, 254, 0.9); + line-height: 1.6; + margin: 0; + } + } +} + +/* Адаптивные стили для изображений на лендинге */ +.landing-logo { + width: min(300px, 80vw); + height: auto; + max-width: 100%; + object-fit: contain; +} + +.landing-image { + width: min(400px, 90vw); + height: auto; + max-width: 100%; + object-fit: contain; +} + +/* Дополнительная адаптивность для изображений */ +@media screen and (max-width: 480px) { + .landing-logo { + width: min(200px, 70vw); + } + + .landing-image { + width: min(300px, 85vw); + } +} + +@media screen and (max-width: 320px) { + .landing-logo { + width: min(150px, 60vw); + } + + .landing-image { + width: min(250px, 80vw); + } +} + +.error { + height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 40px 20px; + text-align: center; + gap: 24px; + + .error-icon { + font-size: 64px; + color: #ff6b6b; + } + + .error-title { + font-family: OpenSans, sans-serif; + font-size: 28px; + font-weight: 600; + color: rgba(254, 254, 254, 1); + margin-bottom: 16px; + } + + .error-message { + font-family: OpenSans, sans-serif; + font-size: 18px; + font-weight: 400; + color: rgba(254, 254, 254, 0.8); + line-height: 1.5; + max-width: 400px; + } +} + +.results-screen { + height: 100vh; + display: flex; + flex-direction: column; + padding-left: 20px; + padding-right: 20px; + padding-top: 60px; + color: rgba(254, 254, 254, 1); + font-family: OpenSans, sans-serif; + gap: 8px; + + .title-section { + display: flex; + flex-direction: row; + } + + h1 { + font-size: 48px; + } + + p { + font-size: 24px; + } + + .transcription { + font-size: 18px; + } +} + +.bottom-app-button { + position: fixed; + left: 20px; + right: 20px; + bottom: 20px; + display: flex; + gap: 12px; + pointer-events: none; + z-index: 1000; +} +.start-btn { + pointer-events: auto; + background: #FEFEFE; + color: black; + border: none; + padding: 14px 36px; + font-size: 14px; + cursor: pointer; + border-radius: 8px; + flex: 2; + font-family: 'OpenSans', sans-serif; + font-weight: 500; +} +.start-btn:active { transform: translateY(1px); } + +.game-btn { + pointer-events: auto; + background: transparent; + color: #FEFEFE; + border: 2px solid #FEFEFE; + padding: 14px 36px; + border-radius: 28px; + font-size: 14px; + cursor: pointer; + flex: 1; + font-family: 'OpenSans', sans-serif; + font-weight: 500; + border-radius: 8px; +} +.game-btn:active { transform: translateY(1px); } + +/* Authentication Styles */ +.auth-screen { + height: 100vh; + display: flex; + align-items: center; + justify-content: center; + padding: 40px 20px; +} + +.auth-container { + display: flex; + flex-direction: column; + align-items: center; + gap: 40px; + max-width: 400px; + width: 100%; +} + +.auth-logo { + width: 120px; + height: auto; +} + +.auth-content { + display: flex; + flex-direction: column; + align-items: center; + gap: 24px; + width: 100%; +} + +.auth-loading { + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; +} + +.spinner { + width: 40px; + height: 40px; + border: 3px solid rgba(255, 255, 255, 0.3); + border-top: 3px solid rgba(255, 255, 255, 1); + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.auth-title { + font-family: OpenSans, sans-serif; + font-size: 24px; + font-weight: 600; + color: rgba(254, 254, 254, 1); + text-align: center; +} + +.auth-message { + font-family: OpenSans, sans-serif; + font-size: 16px; + font-weight: 400; + color: rgba(254, 254, 254, 0.8); + text-align: center; + line-height: 1.5; +} + +.auth-error { + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + text-align: center; +} + +.retry-button { + background: linear-gradient(90deg, #6a11cb 0%, #2575fc 100%); + color: white; + border: none; + padding: 12px 24px; + border-radius: 24px; + font-family: OpenSans, sans-serif; + font-size: 16px; + font-weight: 500; + cursor: pointer; + box-shadow: 0 6px 16px rgba(37, 117, 252, 0.25); + transition: transform 0.2s ease; +} + +.retry-button:active { + transform: translateY(1px); +} + +.retry-button:hover { + box-shadow: 0 8px 20px rgba(37, 117, 252, 0.35); +} + +/* Room Screen Styles */ +.room-screen { + height: 100vh; + display: flex; + flex-direction: column; + padding: 20px; + padding-bottom: 100px; + gap: 24px; + color: rgba(254, 254, 254, 1); + font-family: 'OpenSans', sans-serif; + overflow-y: auto; +} + +.room-title { + font-size: 32px; + font-weight: 600; + color: #90EE90; + margin: 0 0 12px 0; + text-align: center; +} + +.room-description { + font-size: 16px; + font-weight: 400; + color: #fff; + line-height: 1.5; + margin: 0; +} + +.invite-section { + display: flex; + flex-direction: column; + gap: 12px; +} + +.invite-label { + font-size: 16px; + font-weight: 600; + color: rgba(254, 254, 254, 1); +} + +.invite-link { + display: flex; + align-items: center; + gap: 12px; + padding: 12px 16px; + background: rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 12px; + backdrop-filter: blur(10px); +} + +.link-text { + flex: 1; + font-size: 14px; + font-family: 'Courier New', monospace; + color: rgba(254, 254, 254, 0.9); + word-break: break-all; +} + +.copy-btn { + background: rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.3); + border-radius: 8px; + padding: 8px; + color: rgba(254, 254, 254, 0.8); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s ease; +} + +.copy-btn:hover { + background: rgba(255, 255, 255, 0.2); + border-color: rgba(255, 255, 255, 0.5); +} + +.players-section { + display: flex; + flex-direction: column; + gap: 16px; + flex: 1; +} + +.players-header { + display: flex; + align-items: center; + justify-content: space-between; +} + +.players-title { + font-size: 20px; + font-weight: 600; + color: rgba(254, 254, 254, 1); + margin: 0; +} + +.players-list { + display: flex; + flex-direction: column; + gap: 12px; +} + +.start-btn:disabled { + background: rgba(254, 254, 254, 0.3); + color: rgba(0, 0, 0, 0.5); + cursor: not-allowed; +} + +.room-screen { + padding-top: 60px; +} diff --git a/frontend/src/utils/debug.ts b/frontend/src/utils/debug.ts new file mode 100644 index 0000000..914862c --- /dev/null +++ b/frontend/src/utils/debug.ts @@ -0,0 +1,61 @@ +/** + * Debug utility for development mode + */ +export class Debug { + private static isEnabled = import.meta.env.DEBUG === 'true' + + static get enabled(): boolean { + return this.isEnabled + } + + static log(message: any, ...args: any[]): void { + if (this.isEnabled) { + console.log(`[DEBUG]`, message, ...args) + } + } + + static warn(message: any, ...args: any[]): void { + if (this.isEnabled) { + console.warn(`[DEBUG WARN]`, message, ...args) + } + } + + static error(message: any, ...args: any[]): void { + if (this.isEnabled) { + console.error(`[DEBUG ERROR]`, message, ...args) + } + } + + static info(label: string, data: any): void { + if (this.isEnabled) { + console.group(`[DEBUG INFO] ${label}`) + console.log(data) + console.groupEnd() + } + } + + static time(label: string, fn: () => T): T { + if (this.isEnabled) { + console.time(`[DEBUG TIME] ${label}`) + const result = fn() + console.timeEnd(`[DEBUG TIME] ${label}`) + return result + } + return fn() + } + + static async timeAsync(label: string, fn: () => Promise): Promise { + if (this.isEnabled) { + console.time(`[DEBUG TIME] ${label}`) + const result = await fn() + console.timeEnd(`[DEBUG TIME] ${label}`) + return result + } + return fn() + } +} + +if (Debug.enabled) { + (window as any).debug = Debug + Debug.log('Debug mode enabled. Access debug utilities via window.debug') +} diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts new file mode 100644 index 0000000..044c551 --- /dev/null +++ b/frontend/src/vite-env.d.ts @@ -0,0 +1,10 @@ +/// + +interface ImportMetaEnv { + readonly DEBUG: string + // Add other env variables here as needed +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..3dbbc45 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,15 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..f85a399 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..cebeef7 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,26 @@ +import { defineConfig, loadEnv } from 'vite' +import vue from '@vitejs/plugin-vue' +// import vueDevTools from 'vite-plugin-vue-devtools' + + +// https://vite.dev/config/ +export default defineConfig(({ mode }) => { + const env = loadEnv(mode, process.cwd(), '') + + return { + plugins: [vue()], + /* говно вью тулс, я вырубил, можешь врубить если надо + plugins: [vue(), vueDevTools()], */ + define: { + 'import.meta.env.DEBUG': JSON.stringify(env.DEBUG || 'false'), + }, + // можно убрать, эт я для удобства врубил + server: { + host: true, + open: false + }, + build: { + sourcemap: env.DEBUG === 'true' + } + } +})