From e4c9a838fec4fe1c83ffe29656bcd00e8da3dfd8 Mon Sep 17 00:00:00 2001 From: Tim Bradgate Date: Sat, 30 Aug 2025 15:15:37 +0100 Subject: [PATCH 1/8] Add Vue 3 migration Phase 1 foundation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create client-vue3/ directory with Vue 3.4+ foundation - Set up Vite 5.4+ build system with TypeScript 5.4+ - Configure Vue Router 4.3+ with /v3/ base path - Add Pinia 2.1+ state management setup - Implement ESLint config with Airbnb + Vue 3 + TypeScript - Add server integration for dual Vue 2/Vue 3 serving - Include production build assets in server/static-vue3/ Side-by-side migration strategy: Vue 2 at /, Vue 3 at /v3/ Foundation ready for Phase 2: State Management and WebSocket integration 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- CLAUDE.md | 242 + client-vue3/.eslintrc.cjs | 43 + client-vue3/.gitignore | 41 + client-vue3/env.d.ts | 17 + client-vue3/index.html | 13 + client-vue3/package-lock.json | 5222 +++++++++++++++++ client-vue3/package.json | 41 + client-vue3/src/App.vue | 89 + client-vue3/src/assets/styles/main.css | 94 + client-vue3/src/main.ts | 15 + client-vue3/src/router/index.ts | 21 + client-vue3/src/stores/index.ts | 19 + client-vue3/src/types/global.ts | 48 + client-vue3/src/views/AboutView.vue | 195 + client-vue3/src/views/HomeView.vue | 139 + client-vue3/tsconfig.json | 40 + client-vue3/vite.config.ts | 61 + server/controllers/vue3_controllers.py | 94 + server/digi_server/app_server.py | 12 + server/static-vue3/.vite/manifest.json | 34 + .../static-vue3/assets/AboutView-20v3qqqG.css | 1 + .../static-vue3/assets/AboutView-DJD43Vlx.js | 1 + server/static-vue3/assets/index-C5VGZqFi.css | 1 + server/static-vue3/assets/index-r9_pACYz.js | 2 + server/static-vue3/assets/vendor-f6MMzXtq.js | 25 + server/static-vue3/index.html | 15 + 26 files changed, 6525 insertions(+) create mode 100644 CLAUDE.md create mode 100644 client-vue3/.eslintrc.cjs create mode 100644 client-vue3/.gitignore create mode 100644 client-vue3/env.d.ts create mode 100644 client-vue3/index.html create mode 100644 client-vue3/package-lock.json create mode 100644 client-vue3/package.json create mode 100644 client-vue3/src/App.vue create mode 100644 client-vue3/src/assets/styles/main.css create mode 100644 client-vue3/src/main.ts create mode 100644 client-vue3/src/router/index.ts create mode 100644 client-vue3/src/stores/index.ts create mode 100644 client-vue3/src/types/global.ts create mode 100644 client-vue3/src/views/AboutView.vue create mode 100644 client-vue3/src/views/HomeView.vue create mode 100644 client-vue3/tsconfig.json create mode 100644 client-vue3/vite.config.ts create mode 100644 server/controllers/vue3_controllers.py create mode 100644 server/static-vue3/.vite/manifest.json create mode 100644 server/static-vue3/assets/AboutView-20v3qqqG.css create mode 100644 server/static-vue3/assets/AboutView-DJD43Vlx.js create mode 100644 server/static-vue3/assets/index-C5VGZqFi.css create mode 100644 server/static-vue3/assets/index-r9_pACYz.js create mode 100644 server/static-vue3/assets/vendor-f6MMzXtq.js create mode 100644 server/static-vue3/index.html diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..0a9da246 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,242 @@ +# DigiScript - Claude Code Context + +## Project Overview + +DigiScript is a digital script management system for cueing theatrical shows. It provides a web-based platform for managing scripts, cues, cast, characters, and live show execution with real-time websocket communication between clients and server. + +**Branching Strategy**: Feature branch → dev → main + +**Development Branch**: `dev` + +**Main Branch**: `main` + +## Architecture + +### Client (Frontend) +- **Technology**: Vue.js 2.7.14 with Vue Router 3.6.5 and Vuex 3.6.2 +- **UI Framework**: Bootstrap 4.6.2 + BootstrapVue 2.23.1 +- **Build Tool**: Vite 4.5.5 +- **Location**: `/client/` +- **Port**: Served through server at port 8080 + +### Server (Backend) +- **Technology**: Python 3.13.x with Tornado web framework 6.5.2 +- **Database**: SQLite with SQLAlchemy ORM and Alembic migrations +- **Authentication**: JWT with bcrypt password hashing +- **Real-time**: WebSocket communication +- **Location**: `/server/` +- **Port**: 8080 + +### Infrastructure +- **Containerization**: Docker with docker-compose +- **Monitoring**: Prometheus + Grafana + cAdvisor + Node Exporter +- **Monitoring Ports**: Grafana (3000), Prometheus (9090), cAdvisor (8090), Node Exporter (9100) + +## Key Technologies & Frameworks + +### Frontend Dependencies +- **Core**: Vue.js, Vue Router, Vuex, Bootstrap Vue +- **Forms**: Vuelidate (validation), Vue Multiselect +- **WebSocket**: vue-native-websocket +- **UI**: vue-toast-notification, contrast-color +- **State**: vuex-persistedstate +- **Utils**: lodash, deep-object-diff, loglevel + +### Backend Dependencies +- **Web**: tornado, tornado-sqlalchemy +- **Database**: alembic (migrations), marshmallow-sqlalchemy (serialization) +- **Auth**: bcrypt, pyjwt[crypto] +- **Utils**: anytree, python-dateutil +- **Monitoring**: tornado-prometheus + +## Project Structure + +### Client Structure (`/client/`) +``` +src/ +├── App.vue # Root component +├── main.js # App entry point with WebSocket setup +├── router/ # Vue Router configuration +├── store/ # Vuex store modules +│ ├── modules/ # Feature-specific store modules +│ │ ├── script.js # Script management +│ │ ├── show.js # Show management +│ │ ├── user/ # User management +│ │ └── websocket.js # WebSocket state +├── views/ # Page-level Vue components +│ ├── show/ # Show management pages +│ ├── config/ # Configuration pages +│ └── user/ # User management pages +└── vue_components/ # Reusable Vue components + ├── show/ # Show-related components + ├── config/ # Configuration components + └── user/ # User-related components +``` + +### Server Structure (`/server/`) +``` +├── main.py # Application entry point +├── digi_server/ # Core server application +├── controllers/ # HTTP/WebSocket request handlers +│ ├── api/ # REST API controllers +│ │ ├── show/ # Show management endpoints +│ │ └── user/ # User management endpoints +├── models/ # SQLAlchemy database models +├── schemas/ # Marshmallow serialization schemas +├── rbac/ # Role-based access control +├── utils/ # Utility modules +├── registry/ # Application registries and locks +├── alembic_config/ # Database migration configuration +└── test/ # Test files +``` + +## Git Workflow + +### Branching Strategy +- **Feature development**: Create feature branches from `dev` branch +- **Integration**: Feature branches merge into `dev` branch +- **Release**: `dev` branch merges into `main` branch for releases + +### Merge Strategy +- **Feature → dev**: Squash merging is acceptable to keep dev history clean +- **dev → main**: Use merge commits to preserve history and maintain traceability +- **History preservation**: History between `dev` and `main` should be resolvable at all times + +### Commit Guidelines +- **Commit size**: Prefer smaller, focused commits rather than single large commits +- **Purpose**: Makes reviewing change history easier and enables better debugging +- **Message format**: Follow conventional commit format where applicable + +## Development Workflow + +### Commands +**Client:** +- `npm ci` - Install dependencies +- `npm run build` - Build for production +- `npm run lint` - ESLint with auto-fix +- `npm run ci-lint` - ESLint check only + +**Server:** +- `pip install -r requirements.txt` - Install dependencies +- `pip install -r test_requirements.txt` - Install test dependencies +- `pytest` - Run tests +- `black .` - Format code +- `isort . --profile=black` - Sort imports +- `pylint ` - Lint code + +**Development Setup:** +- `./hooks/setup-hooks.sh` - Setup git hooks for pre-commit linting +- `./scripts/start-compose.sh` - Start full Docker environment +- `./scripts/stop-compose.sh` - Stop Docker environment + +### Testing +- **Python**: pytest with pytest-asyncio for async tests +- **JavaScript**: ESLint for code quality (no unit test framework detected) + +## Key Features + +### Show Management +- **Acts & Scenes**: Hierarchical show structure +- **Cast & Characters**: Actor assignments and character management +- **Scripts**: Line-by-line script editing with revisions +- **Cues**: Technical cue management tied to script lines +- **Microphones**: Mic allocation and management + +### Live Show Execution +- **Sessions**: Live show session management +- **Real-time Updates**: WebSocket communication for script following across multiple connected clients +- **Script Following**: Real-time script following during performances + +### User Management +- **Authentication**: JWT-based login system +- **RBAC**: Role-based access control for different permission levels +- **User Settings**: Personalized user preferences and overrides + +## WebSocket Communication + +### Message Format (Server → Client) +```json +{ + "OP": "OPERATION_CODE", + "DATA": {}, + "ACTION": "VUEX_ACTION_NAME" +} +``` + +### Message Handling +- All messages trigger Vuex mutation `SOCKET_ONMESSAGE` +- Messages with `ACTION` also trigger corresponding Vuex action +- WebSocket reconnection is automatic + +## Database + +### Technology +- **Database**: SQLite with SQLAlchemy ORM +- **Migrations**: Alembic for schema versioning +- **Location**: `/server/conf/digiscript.sqlite` (dev), Docker volume (prod) + +## Deployment + +### Docker Production +- Uses multi-stage Docker build +- Includes full monitoring stack (Prometheus, Grafana, cAdvisor, Node Exporter) +- SQLite database persisted in Docker volume +- Application accessible on port 8080 + +### Configuration +- Server settings in `/server/conf/digiscript.json` +- Docker environment variables for deployment settings +- Grafana provisioned dashboards and datasources + +## Documentation + +### User Documentation +- `/docs/` - GitHub Pages documentation +- Comprehensive guides for show setup, script configuration, cue management +- Getting started guide with screenshots + +### Developer Documentation +- `/documentation/development.md` - Development setup and WebSocket messaging +- `/documentation/deployment.md` - Deployment instructions +- Inline code documentation (minimal, following project conventions) + +## Development Standards + +### Code Style +- **Python**: Black formatting, isort imports, pylint compliance +- **JavaScript**: ESLint with Airbnb config, Vue.js best practices +- **Git**: Conventional commits + +### Requirements +- **Node**: v22.x (npm 10.x) +- **Python**: 3.13.x +- **Development**: pyenv + nvm recommended for version management + +## Claude Development Guidelines + +### Workflow Principles +**Reflective Planning**: After receiving tool results, carefully reflect on their quality and determine optimal next steps before proceeding. Use thinking to plan and iterate based on new information. + +**Parallel Operations**: For maximum efficiency, invoke all relevant tools simultaneously rather than sequentially when performing multiple independent operations. + +**Agent Utilization**: Use custom agents whenever possible when breaking down work into tasks. Consider whether a single feature can be delivered by multiple agents best suited for particular areas of the codebase. + +**Cleanup**: If you create any temporary files, scripts, or helper files for iteration, clean up by removing them at the end of the task. + +### Solution Quality +**General Purpose Solutions**: Write high-quality, general-purpose solutions that work correctly for all valid inputs, not just test cases. Do not hard-code values or create solutions that only work for specific scenarios. + +**Principled Implementation**: Focus on understanding problem requirements and implementing correct algorithms. Tests verify correctness but don't define the solution. Provide robust, maintainable, and extendable implementations following best practices. + +**Problem Assessment**: If a task is unreasonable, infeasible, or if tests are incorrect, communicate this clearly. + +### Planning & Documentation +**Plan First**: Always make a plan for approaching problems before writing code. Use GitHub issues as a workspace for documenting plans before execution. If no relevant issue exists, create one and use it as the planning workspace. + +### Technical Guidelines +- Always run appropriate linting commands after making changes +- Use existing patterns and conventions found in the codebase +- WebSocket message handling follows specific patterns - refer to `main.js` +- Database changes require Alembic migrations +- No unit test framework for frontend - focus on ESLint for quality +- Follow the existing Vue.js 2.x patterns (not Vue 3) \ No newline at end of file diff --git a/client-vue3/.eslintrc.cjs b/client-vue3/.eslintrc.cjs new file mode 100644 index 00000000..fd360529 --- /dev/null +++ b/client-vue3/.eslintrc.cjs @@ -0,0 +1,43 @@ +module.exports = { + root: true, + env: { + node: true, + browser: true, + }, + extends: [ + 'eslint:recommended', + '@vue/eslint-config-typescript/recommended', + 'plugin:vue/vue3-essential', + 'airbnb-base', + ], + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module', + }, + plugins: [ + 'vue', + ], + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'vue/multi-word-component-names': 'off', + 'import/extensions': [ + 'error', + 'ignorePackages', + { + js: 'never', + jsx: 'never', + ts: 'never', + tsx: 'never', + vue: 'always', + }, + ], + }, + settings: { + 'import/resolver': { + node: { + extensions: ['.js', '.jsx', '.ts', '.tsx', '.vue'], + }, + }, + }, +}; \ No newline at end of file diff --git a/client-vue3/.gitignore b/client-vue3/.gitignore new file mode 100644 index 00000000..91819135 --- /dev/null +++ b/client-vue3/.gitignore @@ -0,0 +1,41 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +# Dependencies +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Environment variables +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Testing +coverage + +# Build outputs +*.tsbuildinfo + +# OS generated files +Thumbs.db \ No newline at end of file diff --git a/client-vue3/env.d.ts b/client-vue3/env.d.ts new file mode 100644 index 00000000..80a7467e --- /dev/null +++ b/client-vue3/env.d.ts @@ -0,0 +1,17 @@ +/// + +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} + +// Environment variables type definitions +interface ImportMetaEnv { + readonly VITE_APP_TITLE: string + // Add more env variables here as needed +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} \ No newline at end of file diff --git a/client-vue3/index.html b/client-vue3/index.html new file mode 100644 index 00000000..f92749dd --- /dev/null +++ b/client-vue3/index.html @@ -0,0 +1,13 @@ + + + + + + + DigiScript Vue 3 + + +
+ + + \ No newline at end of file diff --git a/client-vue3/package-lock.json b/client-vue3/package-lock.json new file mode 100644 index 00000000..d745cb5b --- /dev/null +++ b/client-vue3/package-lock.json @@ -0,0 +1,5222 @@ +{ + "name": "client-vue3", + "version": "0.17.10", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "client-vue3", + "version": "0.17.10", + "dependencies": { + "pinia": "^2.1.0", + "vue": "^3.4.0", + "vue-router": "^4.3.0" + }, + "devDependencies": { + "@types/node": "^20.14.0", + "@vitejs/plugin-vue": "^5.0.0", + "@vue/eslint-config-typescript": "^13.0.0", + "@vue/tsconfig": "^0.5.0", + "eslint": "^8.57.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-vue": "^9.27.0", + "typescript": "^5.4.0", + "vite": "^5.4.0", + "vue-tsc": "^2.0.0" + }, + "engines": { + "node": ">=22.0.0 <23", + "npm": ">=10.0.0 <11" + } + }, + "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/parser": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "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.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "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/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.49.0.tgz", + "integrity": "sha512-rlKIeL854Ed0e09QGYFlmDNbka6I3EQFw7iZuugQjMb11KMpJCLPFL4ZPbMfaEhLADEL1yx0oujGkBQ7+qW3eA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.49.0.tgz", + "integrity": "sha512-cqPpZdKUSQYRtLLr6R4X3sD4jCBO1zUmeo3qrWBCqYIeH8Q3KRL4F3V7XJ2Rm8/RJOQBZuqzQGWPjjvFUcYa/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.49.0.tgz", + "integrity": "sha512-99kMMSMQT7got6iYX3yyIiJfFndpojBmkHfTc1rIje8VbjhmqBXE+nb7ZZP3A5skLyujvT0eIUCUsxAe6NjWbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.49.0.tgz", + "integrity": "sha512-y8cXoD3wdWUDpjOLMKLx6l+NFz3NlkWKcBCBfttUn+VGSfgsQ5o/yDUGtzE9HvsodkP0+16N0P4Ty1VuhtRUGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.49.0.tgz", + "integrity": "sha512-3mY5Pr7qv4GS4ZvWoSP8zha8YoiqrU+e0ViPvB549jvliBbdNLrg2ywPGkgLC3cmvN8ya3za+Q2xVyT6z+vZqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.49.0.tgz", + "integrity": "sha512-C9KzzOAQU5gU4kG8DTk+tjdKjpWhVWd5uVkinCwwFub2m7cDYLOdtXoMrExfeBmeRy9kBQMkiyJ+HULyF1yj9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.49.0.tgz", + "integrity": "sha512-OVSQgEZDVLnTbMq5NBs6xkmz3AADByCWI4RdKSFNlDsYXdFtlxS59J+w+LippJe8KcmeSSM3ba+GlsM9+WwC1w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.49.0.tgz", + "integrity": "sha512-ZnfSFA7fDUHNa4P3VwAcfaBLakCbYaxCk0jUnS3dTou9P95kwoOLAMlT3WmEJDBCSrOEFFV0Y1HXiwfLYJuLlA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.49.0.tgz", + "integrity": "sha512-Z81u+gfrobVK2iV7GqZCBfEB1y6+I61AH466lNK+xy1jfqFLiQ9Qv716WUM5fxFrYxwC7ziVdZRU9qvGHkYIJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.49.0.tgz", + "integrity": "sha512-zoAwS0KCXSnTp9NH/h9aamBAIve0DXeYpll85shf9NJ0URjSTzzS+Z9evmolN+ICfD3v8skKUPyk2PO0uGdFqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.49.0.tgz", + "integrity": "sha512-2QyUyQQ1ZtwZGiq0nvODL+vLJBtciItC3/5cYN8ncDQcv5avrt2MbKt1XU/vFAJlLta5KujqyHdYtdag4YEjYQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.49.0.tgz", + "integrity": "sha512-k9aEmOWt+mrMuD3skjVJSSxHckJp+SiFzFG+v8JLXbc/xi9hv2icSkR3U7uQzqy+/QbbYY7iNB9eDTwrELo14g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.49.0.tgz", + "integrity": "sha512-rDKRFFIWJ/zJn6uk2IdYLc09Z7zkE5IFIOWqpuU0o6ZpHcdniAyWkwSUWE/Z25N/wNDmFHHMzin84qW7Wzkjsw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.49.0.tgz", + "integrity": "sha512-FkkhIY/hYFVnOzz1WeV3S9Bd1h0hda/gRqvZCMpHWDHdiIHn6pqsY3b5eSbvGccWHMQ1uUzgZTKS4oGpykf8Tw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.49.0.tgz", + "integrity": "sha512-gRf5c+A7QiOG3UwLyOOtyJMD31JJhMjBvpfhAitPAoqZFcOeK3Kc1Veg1z/trmt+2P6F/biT02fU19GGTS529A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.49.0.tgz", + "integrity": "sha512-BR7+blScdLW1h/2hB/2oXM+dhTmpW3rQt1DeSiCP9mc2NMMkqVgjIN3DDsNpKmezffGC9R8XKVOLmBkRUcK/sA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.49.0.tgz", + "integrity": "sha512-hDMOAe+6nX3V5ei1I7Au3wcr9h3ktKzDvF2ne5ovX8RZiAHEtX1A5SNNk4zt1Qt77CmnbqT+upb/umzoPMWiPg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.49.0.tgz", + "integrity": "sha512-wkNRzfiIGaElC9kXUT+HLx17z7D0jl+9tGYRKwd8r7cUqTL7GYAvgUY++U2hK6Ar7z5Z6IRRoWC8kQxpmM7TDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.49.0.tgz", + "integrity": "sha512-gq5aW/SyNpjp71AAzroH37DtINDcX1Qw2iv9Chyz49ZgdOP3NV8QCyKZUrGsYX9Yyggj5soFiRCgsL3HwD8TdA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.49.0.tgz", + "integrity": "sha512-gEtqFbzmZLFk2xKh7g0Rlo8xzho8KrEFEkzvHbfUGkrgXOpZ4XagQ6n+wIZFNh1nTb8UD16J4nFSFKXYgnbdBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "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/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.11.tgz", + "integrity": "sha512-uug3FEEGv0r+jrecvUUpbY8lLisvIjg6AAic6a2bSP5OEOLeJsDSnvhCDov7ipFFMXS3orMpzlmi0ZcuGkBbow==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", + "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.15" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", + "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", + "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.20.tgz", + "integrity": "sha512-8TWXUyiqFd3GmP4JTX9hbiTFRwYHgVL/vr3cqhr4YQ258+9FADwvj7golk2sWNGHR67QgmCZ8gz80nQcMokhwg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/shared": "3.5.20", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.20.tgz", + "integrity": "sha512-whB44M59XKjqUEYOMPYU0ijUV0G+4fdrHVKDe32abNdX/kJe1NUEMqsi4cwzXa9kyM9w5S8WqFsrfo1ogtBZGQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.20", + "@vue/shared": "3.5.20" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.20.tgz", + "integrity": "sha512-SFcxapQc0/feWiSBfkGsa1v4DOrnMAQSYuvDMpEaxbpH5dKbnEM5KobSNSgU+1MbHCl+9ftm7oQWxvwDB6iBfw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/compiler-core": "3.5.20", + "@vue/compiler-dom": "3.5.20", + "@vue/compiler-ssr": "3.5.20", + "@vue/shared": "3.5.20", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.20.tgz", + "integrity": "sha512-RSl5XAMc5YFUXpDQi+UQDdVjH9FnEpLDHIALg5J0ITHxkEzJ8uQLlo7CIbjPYqmZtt6w0TsIPbo1izYXwDG7JA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.20", + "@vue/shared": "3.5.20" + } + }, + "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": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz", + "integrity": "sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.1.1", + "vue-eslint-parser": "^9.3.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "peerDependencies": { + "eslint": "^8.56.0", + "eslint-plugin-vue": "^9.0.0", + "typescript": ">=4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", + "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.20.tgz", + "integrity": "sha512-hS8l8x4cl1fmZpSQX/NXlqWKARqEsNmfkwOIYqtR2F616NGfsLUm0G6FQBK6uDKUCVyi1YOL8Xmt/RkZcd/jYQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.20" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.20.tgz", + "integrity": "sha512-vyQRiH5uSZlOa+4I/t4Qw/SsD/gbth0SW2J7oMeVlMFMAmsG1rwDD6ok0VMmjXY3eI0iHNSSOBilEDW98PLRKw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.20", + "@vue/shared": "3.5.20" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.20.tgz", + "integrity": "sha512-KBHzPld/Djw3im0CQ7tGCpgRedryIn4CcAl047EhFTCCPT2xFf4e8j6WeKLgEEoqPSl9TYqShc3Q6tpWpz/Xgw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.20", + "@vue/runtime-core": "3.5.20", + "@vue/shared": "3.5.20", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.20.tgz", + "integrity": "sha512-HthAS0lZJDH21HFJBVNTtx+ULcIbJQRpjSVomVjfyPkFSpCwvsPTA+jIzOaUm3Hrqx36ozBHePztQFg6pj5aKg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.20", + "@vue/shared": "3.5.20" + }, + "peerDependencies": { + "vue": "3.5.20" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.20.tgz", + "integrity": "sha512-SoRGP596KU/ig6TfgkCMbXkr4YJ91n/QSdMuqeP5r3hVIYA3CPHUBCc7Skak0EAKV+5lL4KyIh61VA/pK1CIAA==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.5.1.tgz", + "integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "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/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.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==", + "dev": true, + "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/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/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-airbnb-base/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/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/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/eslint-plugin-vue": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz", + "integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "vue-eslint-parser": "^9.4.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/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/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.18", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.18.tgz", + "integrity": "sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-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-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", + "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "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/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.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/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.49.0.tgz", + "integrity": "sha512-3IVq0cGJ6H7fKXXEdVt+RcYvRCt8beYY9K1760wGQwSAHZcS9eot1zDG5axUbcp/kWRi5zKIIDX8MoKv/TzvZA==", + "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.49.0", + "@rollup/rollup-android-arm64": "4.49.0", + "@rollup/rollup-darwin-arm64": "4.49.0", + "@rollup/rollup-darwin-x64": "4.49.0", + "@rollup/rollup-freebsd-arm64": "4.49.0", + "@rollup/rollup-freebsd-x64": "4.49.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.49.0", + "@rollup/rollup-linux-arm-musleabihf": "4.49.0", + "@rollup/rollup-linux-arm64-gnu": "4.49.0", + "@rollup/rollup-linux-arm64-musl": "4.49.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.49.0", + "@rollup/rollup-linux-ppc64-gnu": "4.49.0", + "@rollup/rollup-linux-riscv64-gnu": "4.49.0", + "@rollup/rollup-linux-riscv64-musl": "4.49.0", + "@rollup/rollup-linux-s390x-gnu": "4.49.0", + "@rollup/rollup-linux-x64-gnu": "4.49.0", + "@rollup/rollup-linux-x64-musl": "4.49.0", + "@rollup/rollup-win32-arm64-msvc": "4.49.0", + "@rollup/rollup-win32-ia32-msvc": "4.49.0", + "@rollup/rollup-win32-x64-msvc": "4.49.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.4.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "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.20", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.20.tgz", + "integrity": "sha512-2sBz0x/wis5TkF1XZ2vH25zWq3G1bFEPOfkBcx2ikowmphoQsPH6X0V3mmPCXA2K1N/XGTnifVyDQP4GfDDeQw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.20", + "@vue/compiler-sfc": "3.5.20", + "@vue/runtime-dom": "3.5.20", + "@vue/server-renderer": "3.5.20", + "@vue/shared": "3.5.20" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.1.tgz", + "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz", + "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.15", + "@vue/language-core": "2.2.12" + }, + "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/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/client-vue3/package.json b/client-vue3/package.json new file mode 100644 index 00000000..d28c6c4e --- /dev/null +++ b/client-vue3/package.json @@ -0,0 +1,41 @@ +{ + "name": "client-vue3", + "version": "0.17.10", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc && vite build", + "preview": "vite preview", + "type-check": "vue-tsc --noEmit", + "lint": "eslint 'src/**/*.{js,ts,vue}' --fix", + "ci-lint": "eslint 'src/**/*.{js,ts,vue}'" + }, + "engines": { + "npm": ">=10.0.0 <11", + "node": ">=22.0.0 <23" + }, + "dependencies": { + "vue": "^3.4.0", + "vue-router": "^4.3.0", + "pinia": "^2.1.0" + }, + "devDependencies": { + "@types/node": "^20.14.0", + "@vitejs/plugin-vue": "^5.0.0", + "@vue/eslint-config-typescript": "^13.0.0", + "@vue/tsconfig": "^0.5.0", + "eslint": "^8.57.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-vue": "^9.27.0", + "typescript": "^5.4.0", + "vite": "^5.4.0", + "vue-tsc": "^2.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ] +} \ No newline at end of file diff --git a/client-vue3/src/App.vue b/client-vue3/src/App.vue new file mode 100644 index 00000000..22c24b54 --- /dev/null +++ b/client-vue3/src/App.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/client-vue3/src/assets/styles/main.css b/client-vue3/src/assets/styles/main.css new file mode 100644 index 00000000..27a97a9d --- /dev/null +++ b/client-vue3/src/assets/styles/main.css @@ -0,0 +1,94 @@ +/* DigiScript Vue 3 - Global Styles */ + +/* Reset and base styles */ +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; + line-height: 1.6; + color: #2d3748; + background-color: #f7fafc; +} + +/* Typography */ +h1, h2, h3, h4, h5, h6 { + margin-bottom: 0.5rem; + font-weight: 600; + line-height: 1.25; +} + +p { + margin-bottom: 1rem; +} + +/* Links */ +a { + color: #007bff; + text-decoration: none; + transition: color 0.15s ease-in-out; +} + +a:hover { + color: #0056b3; + text-decoration: underline; +} + +/* Common utilities */ +.container { + max-width: 1200px; + margin: 0 auto; + padding: 0 1rem; +} + +.text-center { + text-align: center; +} + +.mb-1 { margin-bottom: 0.25rem; } +.mb-2 { margin-bottom: 0.5rem; } +.mb-3 { margin-bottom: 1rem; } +.mb-4 { margin-bottom: 1.5rem; } +.mb-5 { margin-bottom: 3rem; } + +.mt-1 { margin-top: 0.25rem; } +.mt-2 { margin-top: 0.5rem; } +.mt-3 { margin-top: 1rem; } +.mt-4 { margin-top: 1.5rem; } +.mt-5 { margin-top: 3rem; } + +/* Vue transition styles (for future use) */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.5s ease; +} + +.fade-enter-from, +.fade-leave-to { + opacity: 0; +} + +.slide-enter-active, +.slide-leave-active { + transition: all 0.3s ease; +} + +.slide-enter-from { + transform: translateX(10px); + opacity: 0; +} + +.slide-leave-to { + transform: translateX(-10px); + opacity: 0; +} + +/* App layout */ +#app { + min-height: 100vh; + display: flex; + flex-direction: column; +} \ No newline at end of file diff --git a/client-vue3/src/main.ts b/client-vue3/src/main.ts new file mode 100644 index 00000000..9f167694 --- /dev/null +++ b/client-vue3/src/main.ts @@ -0,0 +1,15 @@ +import { createApp } from 'vue'; +import { createPinia } from 'pinia'; +import App from './App.vue'; +import router from './router'; +import './assets/styles/main.css'; + +const app = createApp(App); + +// State management +app.use(createPinia()); + +// Router +app.use(router); + +app.mount('#app'); diff --git a/client-vue3/src/router/index.ts b/client-vue3/src/router/index.ts new file mode 100644 index 00000000..2cac29e5 --- /dev/null +++ b/client-vue3/src/router/index.ts @@ -0,0 +1,21 @@ +import { createRouter, createWebHistory } from 'vue-router'; +import HomeView from '../views/HomeView.vue'; + +const router = createRouter({ + history: createWebHistory('/v3/'), + routes: [ + { + path: '/', + name: 'home', + component: HomeView, + }, + { + path: '/about', + name: 'about', + // Lazy-loaded route + component: () => import('../views/AboutView.vue'), + }, + ], +}); + +export default router; diff --git a/client-vue3/src/stores/index.ts b/client-vue3/src/stores/index.ts new file mode 100644 index 00000000..49c32626 --- /dev/null +++ b/client-vue3/src/stores/index.ts @@ -0,0 +1,19 @@ +import { createPinia } from 'pinia'; + +// Create and export the Pinia store instance +const pinia = createPinia(); + +// Export store types for future use +export type RootState = { + // Future store state types will be added here during Phase 2 + // This will include user state, websocket state, show state, etc. +} + +// Future stores will be imported and exported here in Phase 2: +// export { useUserStore } from './user' +// export { useWebSocketStore } from './websocket' +// export { useShowStore } from './show' +// export { useScriptStore } from './script' + +export { pinia }; +export default pinia; diff --git a/client-vue3/src/types/global.ts b/client-vue3/src/types/global.ts new file mode 100644 index 00000000..2ac32120 --- /dev/null +++ b/client-vue3/src/types/global.ts @@ -0,0 +1,48 @@ +// Global type definitions for DigiScript Vue 3 + +// Future API response types will be defined here during Phase 2 +// These will match the existing API structures from the Vue 2 app + +// Basic API response structure +export interface ApiResponse { + data?: T + error?: string + success: boolean +} + +// Future user types (Phase 2) +// export interface User { +// id: number +// username: string +// email: string +// is_admin: boolean +// permissions: number +// created_at: string +// updated_at: string +// } + +// Future show types (Phase 2) +// export interface Show { +// id: number +// name: string +// description: string +// created_at: string +// updated_at: string +// } + +// Future WebSocket message types (Phase 2) +// export interface WebSocketMessage { +// OP: string +// DATA: any +// ACTION?: string +// namespace?: string +// } + +// Vue Router meta type extensions +declare module 'vue-router' { + interface RouteMeta { + requiresAuth?: boolean + title?: string + permissions?: number[] + } +} diff --git a/client-vue3/src/views/AboutView.vue b/client-vue3/src/views/AboutView.vue new file mode 100644 index 00000000..e33ea919 --- /dev/null +++ b/client-vue3/src/views/AboutView.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/client-vue3/src/views/HomeView.vue b/client-vue3/src/views/HomeView.vue new file mode 100644 index 00000000..f3d22ab5 --- /dev/null +++ b/client-vue3/src/views/HomeView.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/client-vue3/tsconfig.json b/client-vue3/tsconfig.json new file mode 100644 index 00000000..4fee7983 --- /dev/null +++ b/client-vue3/tsconfig.json @@ -0,0 +1,40 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + + /* Path mapping */ + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + + /* Additional */ + "types": ["node", "vite/client"] + }, + "include": [ + "env.d.ts", + "src/**/*", + "src/**/*.vue" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/client-vue3/vite.config.ts b/client-vue3/vite.config.ts new file mode 100644 index 00000000..eb366489 --- /dev/null +++ b/client-vue3/vite.config.ts @@ -0,0 +1,61 @@ +import path from 'path'; +import { defineConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; + +export default defineConfig({ + plugins: [vue()], + + // Base URL for production - Vue 3 will be served at /v3/ + base: '/v3/', + + // Build configuration + build: { + outDir: '../server/static-vue3/', + assetsDir: 'assets', + emptyOutDir: true, + // Generate manifest for easier integration + manifest: true, + rollupOptions: { + // Ensure clean build output + output: { + manualChunks: { + vendor: ['vue', 'vue-router', 'pinia'], + }, + }, + }, + }, + + // Development server configuration + server: { + port: 3000, + host: true, // Listen on all addresses + cors: true, + proxy: { + // Proxy API calls to the main server during development + '/api': { + target: 'http://localhost:8080', + changeOrigin: true, + secure: false, + }, + // Proxy WebSocket connections + '/ws': { + target: 'ws://localhost:8080', + ws: true, + changeOrigin: true, + }, + }, + }, + + // Path resolution + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, + + // Define global constants for development + define: { + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + }, +}); \ No newline at end of file diff --git a/server/controllers/vue3_controllers.py b/server/controllers/vue3_controllers.py new file mode 100644 index 00000000..03c965e1 --- /dev/null +++ b/server/controllers/vue3_controllers.py @@ -0,0 +1,94 @@ +import os +from tornado.escape import url_unescape +from tornado.web import HTTPError + +from digi_server.logger import get_logger +from utils.module_discovery import get_resource_path, is_frozen +from utils.web.base_controller import BaseController +from utils.web.route import Route + + +@Route("/v3") +@Route("/v3/(.*)") +class Vue3RootController(BaseController): + """Controller to serve the Vue 3 application at /v3/ routes.""" + + def get(self, _path=""): + if is_frozen(): + # In PyInstaller mode, use resource path + full_path = get_resource_path(os.path.join("static-vue3", "index.html")) + else: + # In source mode, use relative path + file_path = os.path.join( + os.path.abspath(os.path.dirname(__file__)), "..", "static-vue3" + ) + full_path = os.path.join(file_path, "index.html") + + if not os.path.isfile(full_path): + get_logger().error(f"Vue 3 index file not found: {full_path}") + raise HTTPError(404, "Vue 3 application not built. Run 'npm run build' in client-vue3/") + + try: + with open(full_path, "r", encoding="utf-8") as file: + self.write(file.read()) + except Exception as e: + get_logger().error(f"Error serving Vue 3 index.html: {str(e)}") + raise HTTPError(500) from e + + +class Vue3StaticController(BaseController): + """Controller to serve Vue 3 static assets.""" + + def get(self): + self.set_header("Content-Type", "") + + uri = url_unescape(self.request.uri).strip(os.path.sep) + # Remove /v3/ prefix from the URI for file lookup + uri_parts = uri.split("/") + if len(uri_parts) >= 3 and uri_parts[1] == "v3": + # Reconstruct path without /v3/ prefix + uri = "/".join(uri_parts[2:]) + + if is_frozen(): + # In PyInstaller mode, use resource path + full_path = get_resource_path(os.path.join("static-vue3", uri)) + else: + # In source mode, use relative path + full_path = os.path.join( + os.path.abspath(os.path.dirname(__file__)), + "..", + "static-vue3", + uri, + ) + + if not os.path.isfile(full_path): + get_logger().warning(f"Vue 3 static file not found: {full_path}") + raise HTTPError(404) + + try: + # Determine content type based on file extension + if full_path.endswith('.js'): + self.set_header("Content-Type", "application/javascript") + elif full_path.endswith('.css'): + self.set_header("Content-Type", "text/css") + elif full_path.endswith('.json'): + self.set_header("Content-Type", "application/json") + elif full_path.endswith(('.png', '.jpg', '.jpeg', '.gif', '.ico')): + # Handle binary files + with open(full_path, "rb") as file: + self.write(file.read()) + return + + # Handle text files + with open(full_path, "r", encoding="utf-8") as file: + self.write(file.read()) + except UnicodeDecodeError: + try: + with open(full_path, "rb") as file: + self.write(file.read()) + except Exception as exc: + get_logger().error(f"Error reading Vue 3 binary file {full_path}: {str(exc)}") + raise HTTPError(500) from exc + except Exception as exc: + get_logger().error(f"Error reading Vue 3 file {full_path}: {str(exc)}") + raise HTTPError(500) from exc \ No newline at end of file diff --git a/server/digi_server/app_server.py b/server/digi_server/app_server.py index e740454b..a889226c 100644 --- a/server/digi_server/app_server.py +++ b/server/digi_server/app_server.py @@ -156,19 +156,31 @@ class AlembicVersion(self._db.Model): # Get static files path - adjust for PyInstaller if needed if is_frozen(): static_files_path = get_resource_path(os.path.join("static", "assets")) + vue3_static_files_path = get_resource_path(os.path.join("static-vue3", "assets")) get_logger().info(f"Using packaged static files path: {static_files_path}") + get_logger().info(f"Using packaged Vue 3 static files path: {vue3_static_files_path}") else: static_files_path = os.path.join( os.path.abspath(os.path.dirname(__file__)), "..", "static", "assets" ) + vue3_static_files_path = os.path.join( + os.path.abspath(os.path.dirname(__file__)), "..", "static-vue3", "assets" + ) get_logger().info(f"Using relative static files path: {static_files_path}") + get_logger().info(f"Using relative Vue 3 static files path: {vue3_static_files_path}") handlers = Route.routes() handlers.append(("/favicon.ico", controllers.StaticController)) + # Vue 3 static assets (must come before Vue 2 assets for proper routing) + handlers.append( + (r"/v3/assets/(.*)", StaticFileHandler, {"path": vue3_static_files_path}) + ) + # Vue 2 static assets handlers.append( (r"/assets/(.*)", StaticFileHandler, {"path": static_files_path}) ) handlers.append((r"/api/.*", controllers.ApiFallback)) + # Vue 2 app (catch-all, must be last) handlers.append((r"/(.*)", controllers.RootController)) super().__init__( handlers=handlers, diff --git a/server/static-vue3/.vite/manifest.json b/server/static-vue3/.vite/manifest.json new file mode 100644 index 00000000..ba2ab0cf --- /dev/null +++ b/server/static-vue3/.vite/manifest.json @@ -0,0 +1,34 @@ +{ + "_vendor-f6MMzXtq.js": { + "file": "assets/vendor-f6MMzXtq.js", + "name": "vendor" + }, + "index.html": { + "file": "assets/index-r9_pACYz.js", + "name": "index", + "src": "index.html", + "isEntry": true, + "imports": [ + "_vendor-f6MMzXtq.js" + ], + "dynamicImports": [ + "src/views/AboutView.vue" + ], + "css": [ + "assets/index-C5VGZqFi.css" + ] + }, + "src/views/AboutView.vue": { + "file": "assets/AboutView-DJD43Vlx.js", + "name": "AboutView", + "src": "src/views/AboutView.vue", + "isDynamicEntry": true, + "imports": [ + "_vendor-f6MMzXtq.js", + "index.html" + ], + "css": [ + "assets/AboutView-20v3qqqG.css" + ] + } +} \ No newline at end of file diff --git a/server/static-vue3/assets/AboutView-20v3qqqG.css b/server/static-vue3/assets/AboutView-20v3qqqG.css new file mode 100644 index 00000000..905e8e02 --- /dev/null +++ b/server/static-vue3/assets/AboutView-20v3qqqG.css @@ -0,0 +1 @@ +.about[data-v-6bfe7fd9]{max-width:800px;margin:0 auto}.about-header[data-v-6bfe7fd9]{text-align:center;margin-bottom:3rem}.about-header h1[data-v-6bfe7fd9]{font-size:2.5rem;color:#1a202c;margin-bottom:.5rem}.subtitle[data-v-6bfe7fd9]{font-size:1.125rem;color:#718096}.content-sections[data-v-6bfe7fd9]{display:flex;flex-direction:column;gap:3rem}.section[data-v-6bfe7fd9]{background:#fff;border-radius:8px;padding:2rem;box-shadow:0 1px 3px #0000001a}.section h2[data-v-6bfe7fd9]{color:#2d3748;margin-bottom:1rem;font-size:1.5rem}.section h4[data-v-6bfe7fd9]{color:#4a5568;margin-bottom:.5rem}.section p[data-v-6bfe7fd9]{color:#718096;line-height:1.6;margin-bottom:1rem}.section ul[data-v-6bfe7fd9]{color:#718096;line-height:1.6}.section ul li[data-v-6bfe7fd9]{margin-bottom:.5rem}.tech-grid[data-v-6bfe7fd9]{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1.5rem;margin-top:1rem}.tech-item[data-v-6bfe7fd9]{padding:1rem;background:#f8f9fa;border-radius:6px;border-left:4px solid #007bff}.tech-item h4[data-v-6bfe7fd9]{color:#007bff;margin-bottom:.5rem}.tech-item p[data-v-6bfe7fd9]{margin-bottom:0;font-size:.9rem}.status-list[data-v-6bfe7fd9]{display:flex;flex-direction:column;gap:.75rem;margin-top:1rem}.status-item[data-v-6bfe7fd9]{display:flex;align-items:center;gap:.75rem;padding:.75rem;background:#f8f9fa;border-radius:6px}.status-item.completed[data-v-6bfe7fd9]{background:#d4edda}.status-icon[data-v-6bfe7fd9]{font-size:1.125rem} diff --git a/server/static-vue3/assets/AboutView-DJD43Vlx.js b/server/static-vue3/assets/AboutView-DJD43Vlx.js new file mode 100644 index 00000000..9749058b --- /dev/null +++ b/server/static-vue3/assets/AboutView-DJD43Vlx.js @@ -0,0 +1 @@ +import{d as t,c as e,f as d,o as s}from"./vendor-f6MMzXtq.js";import{_ as i}from"./index-r9_pACYz.js";const f={class:"about"},n=t({__name:"AboutView",setup(o){return(v,a)=>(s(),e("div",f,[...a[0]||(a[0]=[d('

About DigiScript Vue 3 Migration

Technical Implementation Details

Migration Strategy

We're implementing a side-by-side migration approach that allows both Vue 2 and Vue 3 applications to coexist during the transition period. This ensures zero downtime and allows for gradual feature migration.

  • Phase 1: Foundation & Infrastructure (Current)
  • Phase 2: Core Components Migration
  • Phase 3: Feature-by-Feature Migration
  • Phase 4: Final Cutover & Cleanup

Technical Architecture

Vue 3.4+

Composition API, improved TypeScript support, better performance

Vite 5+

Fast build tool with HMR, ESM-based development

Pinia

Modern state management, replacing Vuex

Vue Router 4

Updated routing with composition API support

TypeScript

Full TypeScript integration for better DX

ESLint

Code quality with Vue 3 + TypeScript rules

Current Status

Project structure and build system
TypeScript configuration
Vue Router 4 setup
Pinia state management
Development server with API proxy
',2)])]))}}),r=i(n,[["__scopeId","data-v-6bfe7fd9"]]);export{r as default}; diff --git a/server/static-vue3/assets/index-C5VGZqFi.css b/server/static-vue3/assets/index-C5VGZqFi.css new file mode 100644 index 00000000..107632aa --- /dev/null +++ b/server/static-vue3/assets/index-C5VGZqFi.css @@ -0,0 +1 @@ +.app-header[data-v-ef669f24]{background:#1a202c;color:#fff;padding:1rem 0}.navbar[data-v-ef669f24]{display:flex;justify-content:space-between;align-items:center;max-width:1200px;margin:0 auto;padding:0 2rem}.navbar-brand h1[data-v-ef669f24]{margin:0;font-size:1.5rem}.navbar-nav[data-v-ef669f24]{display:flex;gap:2rem}.nav-link[data-v-ef669f24]{color:#fff;text-decoration:none;padding:.5rem 1rem;border-radius:4px;transition:background-color .2s}.nav-link[data-v-ef669f24]:hover,.nav-link.router-link-active[data-v-ef669f24]{background-color:#2d3748;color:#fff;text-decoration:none}.main-content[data-v-ef669f24]{min-height:calc(100vh - 140px);max-width:1200px;margin:0 auto;padding:2rem}.app-footer[data-v-ef669f24]{background:#f8f9fa;text-align:center;padding:1rem;margin-top:2rem}.app-footer p[data-v-ef669f24]{margin:0;color:#6c757d}.home[data-v-0c8ca505]{padding:2rem 0}.welcome-section[data-v-0c8ca505]{text-align:center;margin-bottom:3rem}.welcome-section h1[data-v-0c8ca505]{font-size:3rem;color:#1a202c;margin-bottom:.5rem}.lead[data-v-0c8ca505]{font-size:1.25rem;color:#718096;margin-bottom:0}.status-grid[data-v-0c8ca505]{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:2rem;margin-bottom:3rem}.status-card[data-v-0c8ca505]{background:#fff;border:1px solid #e2e8f0;border-radius:8px;padding:1.5rem;box-shadow:0 1px 3px #0000001a}.status-card h3[data-v-0c8ca505]{color:#2d3748;margin-bottom:1rem;font-size:1.25rem}.status-card ul[data-v-0c8ca505]{list-style:none;padding:0;margin:0}.status-card li[data-v-0c8ca505]{padding:.5rem 0;border-bottom:1px solid #f7fafc}.status-card li[data-v-0c8ca505]:last-child{border-bottom:none}.info-section[data-v-0c8ca505]{background:#f8f9fa;border-radius:8px;padding:2rem;text-align:center}.info-section h2[data-v-0c8ca505]{color:#28a745;margin-bottom:1rem}.info-section code[data-v-0c8ca505]{background:#e9ecef;padding:.2rem .4rem;border-radius:4px;font-family:Courier New,monospace}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;line-height:1.6;color:#2d3748;background-color:#f7fafc}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:600;line-height:1.25}p{margin-bottom:1rem}a{color:#007bff;text-decoration:none;transition:color .15s ease-in-out}a:hover{color:#0056b3;text-decoration:underline}.container{max-width:1200px;margin:0 auto;padding:0 1rem}.text-center{text-align:center}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:1rem}.mb-4{margin-bottom:1.5rem}.mb-5{margin-bottom:3rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:1rem}.mt-4{margin-top:1.5rem}.mt-5{margin-top:3rem}.fade-enter-active,.fade-leave-active{transition:opacity .5s ease}.fade-enter-from,.fade-leave-to{opacity:0}.slide-enter-active,.slide-leave-active{transition:all .3s ease}.slide-enter-from{transform:translate(10px);opacity:0}.slide-leave-to{transform:translate(-10px);opacity:0}#app{min-height:100vh;display:flex;flex-direction:column} diff --git a/server/static-vue3/assets/index-r9_pACYz.js b/server/static-vue3/assets/index-r9_pACYz.js new file mode 100644 index 00000000..90615c2b --- /dev/null +++ b/server/static-vue3/assets/index-r9_pACYz.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AboutView-DJD43Vlx.js","assets/vendor-f6MMzXtq.js","assets/AboutView-20v3qqqG.css"])))=>i.map(i=>d[i]); +import{d as g,c as y,a as d,b as p,w as m,r as f,o as S,e as h,f as E,g as C,h as k,i as A,j as L}from"./vendor-f6MMzXtq.js";(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))n(e);new MutationObserver(e=>{for(const o of e)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function t(e){const o={};return e.integrity&&(o.integrity=e.integrity),e.referrerPolicy&&(o.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?o.credentials="include":e.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(e){if(e.ep)return;e.ep=!0;const o=t(e);fetch(e.href,o)}})();const x={id:"app"},O={class:"app-header"},T={class:"navbar"},B={class:"navbar-nav"},I={class:"main-content"},N=g({__name:"App",setup(r){return(i,t)=>{const n=f("router-link"),e=f("router-view");return S(),y("div",x,[d("header",O,[d("nav",T,[t[2]||(t[2]=d("div",{class:"navbar-brand"},[d("h1",null,"DigiScript v3")],-1)),d("div",B,[p(n,{to:"/",class:"nav-link"},{default:m(()=>[...t[0]||(t[0]=[h("Home",-1)])]),_:1}),p(n,{to:"/about",class:"nav-link"},{default:m(()=>[...t[1]||(t[1]=[h("About",-1)])]),_:1})])])]),d("main",I,[p(e)]),t[3]||(t[3]=d("footer",{class:"app-footer"},[d("p",null,"© 2024 DigiScript - Vue 3 Migration (Phase 1)")],-1))])}}}),P=(r,i)=>{const t=r.__vccOpts||r;for(const[n,e]of i)t[n]=e;return t},D=P(N,[["__scopeId","data-v-ef669f24"]]),R="modulepreload",H=function(r){return"/v3/"+r},_={},$=function(i,t,n){let e=Promise.resolve();if(t&&t.length>0){document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),c=(a==null?void 0:a.nonce)||(a==null?void 0:a.getAttribute("nonce"));e=Promise.allSettled(t.map(s=>{if(s=H(s),s in _)return;_[s]=!0;const u=s.endsWith(".css"),b=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${b}`))return;const l=document.createElement("link");if(l.rel=u?"stylesheet":R,u||(l.as="script"),l.crossOrigin="",l.href=s,c&&l.setAttribute("nonce",c),document.head.appendChild(l),u)return new Promise((w,V)=>{l.addEventListener("load",w),l.addEventListener("error",()=>V(new Error(`Unable to preload CSS for ${s}`)))})}))}function o(a){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=a,window.dispatchEvent(c),!c.defaultPrevented)throw a}return e.then(a=>{for(const c of a||[])c.status==="rejected"&&o(c.reason);return i().catch(o)})},F={class:"home"},M=g({__name:"HomeView",setup(r){return(i,t)=>(S(),y("div",F,[...t[0]||(t[0]=[E('

Welcome to DigiScript Vue 3

Phase 1 Migration Foundation

Framework Status

  • ✅ Vue 3.4+ - Composition API
  • ✅ TypeScript Support
  • ✅ Vite 5+ Build System
  • ✅ Vue Router 4
  • ✅ Pinia State Management

Development Environment

  • ✅ Hot Module Replacement
  • ✅ Development Server (Port 3000)
  • ✅ API Proxy to Backend
  • ✅ TypeScript Type Checking
  • ✅ ESLint Configuration

Next Phases

  • ⏳ Bootstrap Vue 3 Integration
  • ⏳ WebSocket Communication
  • ⏳ Authentication System
  • ⏳ Component Migration
  • ⏳ Store Migration

Phase 1 Complete

This Vue 3 application runs alongside the existing Vue 2 application without interference. The Vue 2 app continues to serve at / while this Vue 3 app serves at /v3/.

Future phases will gradually migrate functionality from Vue 2 to Vue 3, maintaining full backward compatibility until the migration is complete.

',3)])]))}}),W=P(M,[["__scopeId","data-v-0c8ca505"]]),q=C({history:k("/v3/"),routes:[{path:"/",name:"home",component:W},{path:"/about",name:"about",component:()=>$(()=>import("./AboutView-DJD43Vlx.js"),__vite__mapDeps([0,1,2]))}]}),v=A(D);v.use(L());v.use(q);v.mount("#app");export{P as _}; diff --git a/server/static-vue3/assets/vendor-f6MMzXtq.js b/server/static-vue3/assets/vendor-f6MMzXtq.js new file mode 100644 index 00000000..a507e596 --- /dev/null +++ b/server/static-vue3/assets/vendor-f6MMzXtq.js @@ -0,0 +1,25 @@ +/** +* @vue/shared v3.5.20 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Yn(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const X={},mt=[],$e=()=>{},dr=()=>!1,dn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Jn=e=>e.startsWith("onUpdate:"),le=Object.assign,Xn=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Mi=Object.prototype.hasOwnProperty,k=(e,t)=>Mi.call(e,t),D=Array.isArray,Mt=e=>pn(e)==="[object Map]",Ii=e=>pn(e)==="[object Set]",L=e=>typeof e=="function",ne=e=>typeof e=="string",wt=e=>typeof e=="symbol",ee=e=>e!==null&&typeof e=="object",pr=e=>(ee(e)||L(e))&&L(e.then)&&L(e.catch),Fi=Object.prototype.toString,pn=e=>Fi.call(e),Ni=e=>pn(e).slice(8,-1),Hi=e=>pn(e)==="[object Object]",Zn=e=>ne(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,It=Yn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),gn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},$i=/-(\w)/g,ye=gn(e=>e.replace($i,(t,n)=>n?n.toUpperCase():"")),ji=/\B([A-Z])/g,ft=gn(e=>e.replace(ji,"-$1").toLowerCase()),mn=gn(e=>e.charAt(0).toUpperCase()+e.slice(1)),wn=gn(e=>e?`on${mn(e)}`:""),nt=(e,t)=>!Object.is(e,t),Rn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Li=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let xs;const _n=()=>xs||(xs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function es(e){if(D(e)){const t={};for(let n=0;n{if(n){const s=n.split(Bi);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ts(e){let t="";if(ne(e))t=e;else if(D(e))for(let n=0;n0&&--this._on===0&&(pe=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Nt){let t=Nt;for(Nt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Ft;){let t=Ft;for(Ft=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function xr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Er(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),rs(s),Gi(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function $n(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Sr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Sr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Vt)||(e.globalVersion=Vt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!$n(e))))return;e.flags|=2;const t=e.dep,n=J,s=Se;J=e,Se=!0;try{xr(e);const r=e.fn(e._value);(t.version===0||nt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{J=n,Se=s,Er(e),e.flags&=-3}}function rs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)rs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Gi(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Se=!0;const wr=[];function ke(){wr.push(Se),Se=!1}function qe(){const e=wr.pop();Se=e===void 0?!0:e}function Es(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=J;J=void 0;try{t()}finally{J=n}}}let Vt=0;class zi{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class is{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!J||!Se||J===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==J)n=this.activeLink=new zi(J,this),J.deps?(n.prevDep=J.depsTail,J.depsTail.nextDep=n,J.depsTail=n):J.deps=J.depsTail=n,Rr(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=J.depsTail,n.nextDep=void 0,J.depsTail.nextDep=n,J.depsTail=n,J.deps===n&&(J.deps=s)}return n}trigger(t){this.version++,Vt++,this.notify(t)}notify(t){ns();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{ss()}}}function Rr(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Rr(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const jn=new WeakMap,lt=Symbol(""),Ln=Symbol(""),Kt=Symbol("");function re(e,t,n){if(Se&&J){let s=jn.get(e);s||jn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new is),r.map=s,r.key=n),r.track()}}function Ke(e,t,n,s,r,i){const o=jn.get(e);if(!o){Vt++;return}const l=c=>{c&&c.trigger()};if(ns(),t==="clear")o.forEach(l);else{const c=D(e),d=c&&Zn(n);if(c&&n==="length"){const a=Number(s);o.forEach((h,g)=>{(g==="length"||g===Kt||!wt(g)&&g>=a)&&l(h)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),d&&l(o.get(Kt)),t){case"add":c?d&&l(o.get("length")):(l(o.get(lt)),Mt(e)&&l(o.get(Ln)));break;case"delete":c||(l(o.get(lt)),Mt(e)&&l(o.get(Ln)));break;case"set":Mt(e)&&l(o.get(lt));break}}ss()}function dt(e){const t=W(e);return t===e?t:(re(t,"iterate",Kt),we(e)?t:t.map(fe))}function os(e){return re(e=W(e),"iterate",Kt),e}const Qi={__proto__:null,[Symbol.iterator](){return Pn(this,Symbol.iterator,fe)},concat(...e){return dt(this).concat(...e.map(t=>D(t)?dt(t):t))},entries(){return Pn(this,"entries",e=>(e[1]=fe(e[1]),e))},every(e,t){return De(this,"every",e,t,void 0,arguments)},filter(e,t){return De(this,"filter",e,t,n=>n.map(fe),arguments)},find(e,t){return De(this,"find",e,t,fe,arguments)},findIndex(e,t){return De(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return De(this,"findLast",e,t,fe,arguments)},findLastIndex(e,t){return De(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return De(this,"forEach",e,t,void 0,arguments)},includes(...e){return An(this,"includes",e)},indexOf(...e){return An(this,"indexOf",e)},join(e){return dt(this).join(e)},lastIndexOf(...e){return An(this,"lastIndexOf",e)},map(e,t){return De(this,"map",e,t,void 0,arguments)},pop(){return Pt(this,"pop")},push(...e){return Pt(this,"push",e)},reduce(e,...t){return Ss(this,"reduce",e,t)},reduceRight(e,...t){return Ss(this,"reduceRight",e,t)},shift(){return Pt(this,"shift")},some(e,t){return De(this,"some",e,t,void 0,arguments)},splice(...e){return Pt(this,"splice",e)},toReversed(){return dt(this).toReversed()},toSorted(e){return dt(this).toSorted(e)},toSpliced(...e){return dt(this).toSpliced(...e)},unshift(...e){return Pt(this,"unshift",e)},values(){return Pn(this,"values",fe)}};function Pn(e,t,n){const s=os(e),r=s[t]();return s!==e&&!we(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const Yi=Array.prototype;function De(e,t,n,s,r,i){const o=os(e),l=o!==e&&!we(e),c=o[t];if(c!==Yi[t]){const h=c.apply(e,i);return l?fe(h):h}let d=n;o!==e&&(l?d=function(h,g){return n.call(this,fe(h),g,e)}:n.length>2&&(d=function(h,g){return n.call(this,h,g,e)}));const a=c.call(o,d,s);return l&&r?r(a):a}function Ss(e,t,n,s){const r=os(e);let i=n;return r!==e&&(we(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,fe(l),c,e)}),r[t](i,...s)}function An(e,t,n){const s=W(e);re(s,"iterate",Kt);const r=s[t](...n);return(r===-1||r===!1)&&fs(n[0])?(n[0]=W(n[0]),s[t](...n)):r}function Pt(e,t,n=[]){ke(),ns();const s=W(e)[t].apply(e,n);return ss(),qe(),s}const Ji=Yn("__proto__,__v_isRef,__isVue"),Cr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(wt));function Xi(e){wt(e)||(e=String(e));const t=W(this);return re(t,"has",e),t.hasOwnProperty(e)}class Pr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?co:Mr:i?Tr:Or).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=D(t);if(!r){let c;if(o&&(c=Qi[n]))return c;if(n==="hasOwnProperty")return Xi}const l=Reflect.get(t,n,oe(t)?t:s);return(wt(n)?Cr.has(n):Ji(n))||(r||re(t,"get",n),i)?l:oe(l)?o&&Zn(n)?l:l.value:ee(l)?r?Fr(l):vn(l):l}}class Ar extends Pr{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=ct(i);if(!we(s)&&!ct(s)&&(i=W(i),s=W(s)),!D(t)&&oe(i)&&!oe(s))return c||(i.value=s),!0}const o=D(t)&&Zn(n)?Number(n)e,Xt=e=>Reflect.getPrototypeOf(e);function so(e,t,n){return function(...s){const r=this.__v_raw,i=W(r),o=Mt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,d=r[e](...s),a=n?Dn:t?Bn:fe;return!t&&re(i,"iterate",c?Ln:lt),{next(){const{value:h,done:g}=d.next();return g?{value:h,done:g}:{value:l?[a(h[0]),a(h[1])]:a(h),done:g}},[Symbol.iterator](){return this}}}}function Zt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ro(e,t){const n={get(r){const i=this.__v_raw,o=W(i),l=W(r);e||(nt(r,l)&&re(o,"get",r),re(o,"get",l));const{has:c}=Xt(o),d=t?Dn:e?Bn:fe;if(c.call(o,r))return d(i.get(r));if(c.call(o,l))return d(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&re(W(r),"iterate",lt),r.size},has(r){const i=this.__v_raw,o=W(i),l=W(r);return e||(nt(r,l)&&re(o,"has",r),re(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=W(l),d=t?Dn:e?Bn:fe;return!e&&re(c,"iterate",lt),l.forEach((a,h)=>r.call(i,d(a),d(h),o))}};return le(n,e?{add:Zt("add"),set:Zt("set"),delete:Zt("delete"),clear:Zt("clear")}:{add(r){!t&&!we(r)&&!ct(r)&&(r=W(r));const i=W(this);return Xt(i).has.call(i,r)||(i.add(r),Ke(i,"add",r,r)),this},set(r,i){!t&&!we(i)&&!ct(i)&&(i=W(i));const o=W(this),{has:l,get:c}=Xt(o);let d=l.call(o,r);d||(r=W(r),d=l.call(o,r));const a=c.call(o,r);return o.set(r,i),d?nt(i,a)&&Ke(o,"set",r,i):Ke(o,"add",r,i),this},delete(r){const i=W(this),{has:o,get:l}=Xt(i);let c=o.call(i,r);c||(r=W(r),c=o.call(i,r)),l&&l.call(i,r);const d=i.delete(r);return c&&Ke(i,"delete",r,void 0),d},clear(){const r=W(this),i=r.size!==0,o=r.clear();return i&&Ke(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=so(r,e,t)}),n}function ls(e,t){const n=ro(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(k(n,r)&&r in s?n:s,r,i)}const io={get:ls(!1,!1)},oo={get:ls(!1,!0)},lo={get:ls(!0,!1)};const Or=new WeakMap,Tr=new WeakMap,Mr=new WeakMap,co=new WeakMap;function fo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function uo(e){return e.__v_skip||!Object.isExtensible(e)?0:fo(Ni(e))}function vn(e){return ct(e)?e:cs(e,!1,eo,io,Or)}function Ir(e){return cs(e,!1,no,oo,Tr)}function Fr(e){return cs(e,!0,to,lo,Mr)}function cs(e,t,n,s,r){if(!ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=uo(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function Ht(e){return ct(e)?Ht(e.__v_raw):!!(e&&e.__v_isReactive)}function ct(e){return!!(e&&e.__v_isReadonly)}function we(e){return!!(e&&e.__v_isShallow)}function fs(e){return e?!!e.__v_raw:!1}function W(e){const t=e&&e.__v_raw;return t?W(t):e}function Nr(e){return!k(e,"__v_skip")&&Object.isExtensible(e)&&gr(e,"__v_skip",!0),e}const fe=e=>ee(e)?vn(e):e,Bn=e=>ee(e)?Fr(e):e;function oe(e){return e?e.__v_isRef===!0:!1}function Hr(e){return $r(e,!1)}function ao(e){return $r(e,!0)}function $r(e,t){return oe(e)?e:new ho(e,t)}class ho{constructor(t,n){this.dep=new is,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:W(t),this._value=n?t:fe(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||we(t)||ct(t);t=s?t:W(t),nt(t,n)&&(this._rawValue=t,this._value=s?t:fe(t),this.dep.trigger())}}function _t(e){return oe(e)?e.value:e}const po={get:(e,t,n)=>t==="__v_raw"?e:_t(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return oe(r)&&!oe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function jr(e){return Ht(e)?e:new Proxy(e,po)}class go{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new is(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Vt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&J!==this)return yr(this,!0),!0}get value(){const t=this.dep.track();return Sr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function mo(e,t,n=!1){let s,r;return L(e)?s=e:(s=e.get,r=e.set),new go(s,r,n)}const en={},ln=new WeakMap;let ot;function _o(e,t=!1,n=ot){if(n){let s=ln.get(n);s||ln.set(n,s=[]),s.push(e)}}function vo(e,t,n=X){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,d=M=>r?M:we(M)||r===!1||r===0?tt(M,1):tt(M);let a,h,g,m,P=!1,O=!1;if(oe(e)?(h=()=>e.value,P=we(e)):Ht(e)?(h=()=>d(e),P=!0):D(e)?(O=!0,P=e.some(M=>Ht(M)||we(M)),h=()=>e.map(M=>{if(oe(M))return M.value;if(Ht(M))return d(M);if(L(M))return c?c(M,2):M()})):L(e)?t?h=c?()=>c(e,2):e:h=()=>{if(g){ke();try{g()}finally{qe()}}const M=ot;ot=a;try{return c?c(e,3,[m]):e(m)}finally{ot=M}}:h=$e,t&&r){const M=h,z=r===!0?1/0:r;h=()=>tt(M(),z)}const B=qi(),N=()=>{a.stop(),B&&B.active&&Xn(B.effects,a)};if(i&&t){const M=t;t=(...z)=>{M(...z),N()}}let T=O?new Array(e.length).fill(en):en;const H=M=>{if(!(!(a.flags&1)||!a.dirty&&!M))if(t){const z=a.run();if(r||P||(O?z.some((se,Z)=>nt(se,T[Z])):nt(z,T))){g&&g();const se=ot;ot=a;try{const Z=[z,T===en?void 0:O&&T[0]===en?[]:T,m];T=z,c?c(t,3,Z):t(...Z)}finally{ot=se}}}else a.run()};return l&&l(H),a=new vr(h),a.scheduler=o?()=>o(H,!1):H,m=M=>_o(M,!1,a),g=a.onStop=()=>{const M=ln.get(a);if(M){if(c)c(M,4);else for(const z of M)z();ln.delete(a)}},t?s?H(!0):T=a.run():o?o(H.bind(null,!0),!0):a.run(),N.pause=a.pause.bind(a),N.resume=a.resume.bind(a),N.stop=N,N}function tt(e,t=1/0,n){if(t<=0||!ee(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,oe(e))tt(e.value,t,n);else if(D(e))for(let s=0;s{tt(s,t,n)});else if(Hi(e)){for(const s in e)tt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&tt(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.20 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Qt(e,t,n,s){try{return s?e(...s):e()}catch(r){bn(r,t,n)}}function je(e,t,n,s){if(L(e)){const r=Qt(e,t,n,s);return r&&pr(r)&&r.catch(i=>{bn(i,t,n)}),r}if(D(e)){const r=[];for(let i=0;i>>1,r=ue[s],i=Wt(r);i=Wt(n)?ue.push(e):ue.splice(yo(t),0,e),e.flags|=1,Br()}}function Br(){cn||(cn=Lr.then(Vr))}function xo(e){D(e)?vt.push(...e):Xe&&e.id===-1?Xe.splice(pt+1,0,e):e.flags&1||(vt.push(e),e.flags|=1),Br()}function ws(e,t,n=Ne+1){for(;nWt(n)-Wt(s));if(vt.length=0,Xe){Xe.push(...t);return}for(Xe=t,pt=0;pte.id==null?e.flags&2?-1:1/0:e.id;function Vr(e){try{for(Ne=0;Ne{s._d&&Ns(-1);const i=fn(t);let o;try{o=e(...r)}finally{fn(i),s._d&&Ns(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function rt(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;oe.__isTeleport,Ro=Symbol("_leaveCb");function as(e,t){e.shapeFlag&6&&e.component?(e.transition=t,as(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}/*! #__NO_SIDE_EFFECTS__ */function Wr(e,t){return L(e)?le({name:e.name},t,{setup:e}):e}function kr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function $t(e,t,n,s,r=!1){if(D(e)){e.forEach((P,O)=>$t(P,t&&(D(t)?t[O]:t),n,s,r));return}if(jt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&$t(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?gs(s.component):s.el,o=r?null:i,{i:l,r:c}=e,d=t&&t.r,a=l.refs===X?l.refs={}:l.refs,h=l.setupState,g=W(h),m=h===X?dr:P=>k(g,P);if(d!=null&&d!==c){if(ne(d))a[d]=null,m(d)&&(h[d]=null);else if(oe(d)){d.value=null;const P=t;P.k&&(a[P.k]=null)}}if(L(c))Qt(c,l,12,[o,a]);else{const P=ne(c),O=oe(c);if(P||O){const B=()=>{if(e.f){const N=P?m(c)?h[c]:a[c]:c.value;if(r)D(N)&&Xn(N,i);else if(D(N))N.includes(i)||N.push(i);else if(P)a[c]=[i],m(c)&&(h[c]=a[c]);else{const T=[i];c.value=T,e.k&&(a[e.k]=T)}}else P?(a[c]=o,m(c)&&(h[c]=o)):O&&(c.value=o,e.k&&(a[e.k]=o))};o?(B.id=-1,me(B,n)):B()}}}_n().requestIdleCallback;_n().cancelIdleCallback;const jt=e=>!!e.type.__asyncLoader,qr=e=>e.type.__isKeepAlive;function Co(e,t){Gr(e,"a",t)}function Po(e,t){Gr(e,"da",t)}function Gr(e,t,n=ie){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(yn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)qr(r.parent.vnode)&&Ao(s,t,n,r),r=r.parent}}function Ao(e,t,n,s){const r=yn(t,e,s,!0);zr(()=>{Xn(s[t],r)},n)}function yn(e,t,n=ie,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{ke();const l=Yt(n),c=je(t,n,e,o);return l(),qe(),c});return s?r.unshift(i):r.push(i),i}}const Ge=e=>(t,n=ie)=>{(!qt||e==="sp")&&yn(e,(...s)=>t(...s),n)},Oo=Ge("bm"),To=Ge("m"),Mo=Ge("bu"),Io=Ge("u"),Fo=Ge("bum"),zr=Ge("um"),No=Ge("sp"),Ho=Ge("rtg"),$o=Ge("rtc");function jo(e,t=ie){yn("ec",e,t)}const Lo="components";function rf(e,t){return Bo(Lo,e,!0,t)||e}const Do=Symbol.for("v-ndc");function Bo(e,t,n=!0,s=!1){const r=Ee||ie;if(r){const i=r.type;{const l=Ol(i,!1);if(l&&(l===t||l===ye(t)||l===mn(ye(t))))return i}const o=Rs(r[e]||i[e],t)||Rs(r.appContext[e],t);return!o&&s?i:o}}function Rs(e,t){return e&&(e[t]||e[ye(t)]||e[mn(ye(t))])}const Un=e=>e?pi(e)?gs(e):Un(e.parent):null,Lt=le(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Un(e.parent),$root:e=>Un(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Yr(e),$forceUpdate:e=>e.f||(e.f=()=>{us(e.update)}),$nextTick:e=>e.n||(e.n=Dr.bind(e.proxy)),$watch:e=>ll.bind(e)}),On=(e,t)=>e!==X&&!e.__isScriptSetup&&k(e,t),Uo={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let d;if(t[0]!=="$"){const m=o[t];if(m!==void 0)switch(m){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(On(s,t))return o[t]=1,s[t];if(r!==X&&k(r,t))return o[t]=2,r[t];if((d=e.propsOptions[0])&&k(d,t))return o[t]=3,i[t];if(n!==X&&k(n,t))return o[t]=4,n[t];Vn&&(o[t]=0)}}const a=Lt[t];let h,g;if(a)return t==="$attrs"&&re(e.attrs,"get",""),a(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==X&&k(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,k(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return On(r,t)?(r[t]=n,!0):s!==X&&k(s,t)?(s[t]=n,!0):k(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i,type:o}},l){let c,d;return!!(n[l]||e!==X&&l[0]!=="$"&&k(e,l)||On(t,l)||(c=i[0])&&k(c,l)||k(s,l)||k(Lt,l)||k(r.config.globalProperties,l)||(d=o.__cssModules)&&d[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:k(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Cs(e){return D(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Vn=!0;function Vo(e){const t=Yr(e),n=e.proxy,s=e.ctx;Vn=!1,t.beforeCreate&&Ps(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:d,created:a,beforeMount:h,mounted:g,beforeUpdate:m,updated:P,activated:O,deactivated:B,beforeDestroy:N,beforeUnmount:T,destroyed:H,unmounted:M,render:z,renderTracked:se,renderTriggered:Z,errorCaptured:Ce,serverPrefetch:ze,expose:Pe,inheritAttrs:Qe,components:st,directives:Ae,filters:Rt}=t;if(d&&Ko(d,s,null),o)for(const G in o){const V=o[G];L(V)&&(s[G]=V.bind(n))}if(r){const G=r.call(n,n);ee(G)&&(e.data=vn(G))}if(Vn=!0,i)for(const G in i){const V=i[G],Le=L(V)?V.bind(n,n):L(V.get)?V.get.bind(n,n):$e,Ye=!L(V)&&L(V.set)?V.set.bind(n):$e,Oe=xe({get:Le,set:Ye});Object.defineProperty(s,G,{enumerable:!0,configurable:!0,get:()=>Oe.value,set:ae=>Oe.value=ae})}if(l)for(const G in l)Qr(l[G],s,n,G);if(c){const G=L(c)?c.call(n):c;Reflect.ownKeys(G).forEach(V=>{tn(V,G[V])})}a&&Ps(a,e,"c");function te(G,V){D(V)?V.forEach(Le=>G(Le.bind(n))):V&&G(V.bind(n))}if(te(Oo,h),te(To,g),te(Mo,m),te(Io,P),te(Co,O),te(Po,B),te(jo,Ce),te($o,se),te(Ho,Z),te(Fo,T),te(zr,M),te(No,ze),D(Pe))if(Pe.length){const G=e.exposed||(e.exposed={});Pe.forEach(V=>{Object.defineProperty(G,V,{get:()=>n[V],set:Le=>n[V]=Le,enumerable:!0})})}else e.exposed||(e.exposed={});z&&e.render===$e&&(e.render=z),Qe!=null&&(e.inheritAttrs=Qe),st&&(e.components=st),Ae&&(e.directives=Ae),ze&&kr(e)}function Ko(e,t,n=$e){D(e)&&(e=Kn(e));for(const s in e){const r=e[s];let i;ee(r)?"default"in r?i=We(r.from||s,r.default,!0):i=We(r.from||s):i=We(r),oe(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Ps(e,t,n){je(D(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Qr(e,t,n,s){let r=s.includes(".")?fi(n,s):()=>n[s];if(ne(e)){const i=t[e];L(i)&&nn(r,i)}else if(L(e))nn(r,e.bind(n));else if(ee(e))if(D(e))e.forEach(i=>Qr(i,t,n,s));else{const i=L(e.handler)?e.handler.bind(n):t[e.handler];L(i)&&nn(r,i,e)}}function Yr(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(d=>un(c,d,o,!0)),un(c,t,o)),ee(t)&&i.set(t,c),c}function un(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&un(e,i,n,!0),r&&r.forEach(o=>un(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Wo[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Wo={data:As,props:Os,emits:Os,methods:Tt,computed:Tt,beforeCreate:ce,created:ce,beforeMount:ce,mounted:ce,beforeUpdate:ce,updated:ce,beforeDestroy:ce,beforeUnmount:ce,destroyed:ce,unmounted:ce,activated:ce,deactivated:ce,errorCaptured:ce,serverPrefetch:ce,components:Tt,directives:Tt,watch:qo,provide:As,inject:ko};function As(e,t){return t?e?function(){return le(L(e)?e.call(this,this):e,L(t)?t.call(this,this):t)}:t:e}function ko(e,t){return Tt(Kn(e),Kn(t))}function Kn(e){if(D(e)){const t={};for(let n=0;n1)return n&&L(t)?t.call(s&&s.proxy):t}}const Xr={},Zr=()=>Object.create(Xr),ei=e=>Object.getPrototypeOf(e)===Xr;function Qo(e,t,n,s=!1){const r={},i=Zr();e.propsDefaults=Object.create(null),ti(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Ir(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Yo(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=W(r),[c]=e.propsOptions;let d=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,m]=ni(h,t,!0);le(o,g),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ee(e)&&s.set(e,mt),mt;if(D(i))for(let a=0;ae==="_"||e==="_ctx"||e==="$stable",ds=e=>D(e)?e.map(He):[He(e)],Xo=(e,t,n)=>{if(t._n)return t;const s=Eo((...r)=>ds(t(...r)),n);return s._c=!1,s},si=(e,t,n)=>{const s=e._ctx;for(const r in e){if(hs(r))continue;const i=e[r];if(L(i))t[r]=Xo(r,i,s);else if(i!=null){const o=ds(i);t[r]=()=>o}}},ri=(e,t)=>{const n=ds(t);e.slots.default=()=>n},ii=(e,t,n)=>{for(const s in t)(n||!hs(s))&&(e[s]=t[s])},Zo=(e,t,n)=>{const s=e.slots=Zr();if(e.vnode.shapeFlag&32){const r=t._;r?(ii(s,t,n),n&&gr(s,"_",r,!0)):si(t,s)}else t&&ri(e,t)},el=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=X;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:ii(r,t,n):(i=!t.$stable,si(t,r)),o=t}else t&&(ri(e,t),o={default:1});if(i)for(const l in r)!hs(l)&&o[l]==null&&delete r[l]},me=pl;function tl(e){return nl(e)}function nl(e,t){const n=_n();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:d,setElementText:a,parentNode:h,nextSibling:g,setScopeId:m=$e,insertStaticContent:P}=e,O=(f,u,p,v=null,y=null,_=null,w=void 0,S=null,E=!!u.dynamicChildren)=>{if(f===u)return;f&&!At(f,u)&&(v=b(f),ae(f,y,_,!0),f=null),u.patchFlag===-2&&(E=!1,u.dynamicChildren=null);const{type:x,ref:$,shapeFlag:C}=u;switch(x){case En:B(f,u,p,v);break;case yt:N(f,u,p,v);break;case sn:f==null&&T(u,p,v,w);break;case Ve:st(f,u,p,v,y,_,w,S,E);break;default:C&1?z(f,u,p,v,y,_,w,S,E):C&6?Ae(f,u,p,v,y,_,w,S,E):(C&64||C&128)&&x.process(f,u,p,v,y,_,w,S,E,I)}$!=null&&y?$t($,f&&f.ref,_,u||f,!u):$==null&&f&&f.ref!=null&&$t(f.ref,null,_,f,!0)},B=(f,u,p,v)=>{if(f==null)s(u.el=l(u.children),p,v);else{const y=u.el=f.el;u.children!==f.children&&d(y,u.children)}},N=(f,u,p,v)=>{f==null?s(u.el=c(u.children||""),p,v):u.el=f.el},T=(f,u,p,v)=>{[f.el,f.anchor]=P(f.children,u,p,v,f.el,f.anchor)},H=({el:f,anchor:u},p,v)=>{let y;for(;f&&f!==u;)y=g(f),s(f,p,v),f=y;s(u,p,v)},M=({el:f,anchor:u})=>{let p;for(;f&&f!==u;)p=g(f),r(f),f=p;r(u)},z=(f,u,p,v,y,_,w,S,E)=>{u.type==="svg"?w="svg":u.type==="math"&&(w="mathml"),f==null?se(u,p,v,y,_,w,S,E):ze(f,u,y,_,w,S,E)},se=(f,u,p,v,y,_,w,S)=>{let E,x;const{props:$,shapeFlag:C,transition:F,dirs:j}=f;if(E=f.el=o(f.type,_,$&&$.is,$),C&8?a(E,f.children):C&16&&Ce(f.children,E,null,v,y,Tn(f,_),w,S),j&&rt(f,null,v,"created"),Z(E,f,f.scopeId,w,v),$){for(const Y in $)Y!=="value"&&!It(Y)&&i(E,Y,null,$[Y],_,v);"value"in $&&i(E,"value",null,$.value,_),(x=$.onVnodeBeforeMount)&&Fe(x,v,f)}j&&rt(f,null,v,"beforeMount");const U=sl(y,F);U&&F.beforeEnter(E),s(E,u,p),((x=$&&$.onVnodeMounted)||U||j)&&me(()=>{x&&Fe(x,v,f),U&&F.enter(E),j&&rt(f,null,v,"mounted")},y)},Z=(f,u,p,v,y)=>{if(p&&m(f,p),v)for(let _=0;_{for(let x=E;x{const S=u.el=f.el;let{patchFlag:E,dynamicChildren:x,dirs:$}=u;E|=f.patchFlag&16;const C=f.props||X,F=u.props||X;let j;if(p&&it(p,!1),(j=F.onVnodeBeforeUpdate)&&Fe(j,p,u,f),$&&rt(u,f,p,"beforeUpdate"),p&&it(p,!0),(C.innerHTML&&F.innerHTML==null||C.textContent&&F.textContent==null)&&a(S,""),x?Pe(f.dynamicChildren,x,S,p,v,Tn(u,y),_):w||V(f,u,S,null,p,v,Tn(u,y),_,!1),E>0){if(E&16)Qe(S,C,F,p,y);else if(E&2&&C.class!==F.class&&i(S,"class",null,F.class,y),E&4&&i(S,"style",C.style,F.style,y),E&8){const U=u.dynamicProps;for(let Y=0;Y{j&&Fe(j,p,u,f),$&&rt(u,f,p,"updated")},v)},Pe=(f,u,p,v,y,_,w)=>{for(let S=0;S{if(u!==p){if(u!==X)for(const _ in u)!It(_)&&!(_ in p)&&i(f,_,u[_],null,y,v);for(const _ in p){if(It(_))continue;const w=p[_],S=u[_];w!==S&&_!=="value"&&i(f,_,S,w,y,v)}"value"in p&&i(f,"value",u.value,p.value,y)}},st=(f,u,p,v,y,_,w,S,E)=>{const x=u.el=f?f.el:l(""),$=u.anchor=f?f.anchor:l("");let{patchFlag:C,dynamicChildren:F,slotScopeIds:j}=u;j&&(S=S?S.concat(j):j),f==null?(s(x,p,v),s($,p,v),Ce(u.children||[],p,$,y,_,w,S,E)):C>0&&C&64&&F&&f.dynamicChildren?(Pe(f.dynamicChildren,F,p,y,_,w,S),(u.key!=null||y&&u===y.subTree)&&oi(f,u,!0)):V(f,u,p,$,y,_,w,S,E)},Ae=(f,u,p,v,y,_,w,S,E)=>{u.slotScopeIds=S,f==null?u.shapeFlag&512?y.ctx.activate(u,p,v,w,E):Rt(u,p,v,y,_,w,E):ut(f,u,E)},Rt=(f,u,p,v,y,_,w)=>{const S=f.component=Sl(f,v,y);if(qr(f)&&(S.ctx.renderer=I),Rl(S,!1,w),S.asyncDep){if(y&&y.registerDep(S,te,w),!f.el){const E=S.subTree=be(yt);N(null,E,u,p),f.placeholder=E.el}}else te(S,f,u,p,y,_,w)},ut=(f,u,p)=>{const v=u.component=f.component;if(hl(f,u,p))if(v.asyncDep&&!v.asyncResolved){G(v,u,p);return}else v.next=u,v.update();else u.el=f.el,v.vnode=u},te=(f,u,p,v,y,_,w)=>{const S=()=>{if(f.isMounted){let{next:C,bu:F,u:j,parent:U,vnode:Y}=f;{const Me=li(f);if(Me){C&&(C.el=Y.el,G(f,C,w)),Me.asyncDep.then(()=>{f.isUnmounted||S()});return}}let q=C,he;it(f,!1),C?(C.el=Y.el,G(f,C,w)):C=Y,F&&Rn(F),(he=C.props&&C.props.onVnodeBeforeUpdate)&&Fe(he,U,C,Y),it(f,!0);const de=Is(f),Te=f.subTree;f.subTree=de,O(Te,de,h(Te.el),b(Te),f,y,_),C.el=de.el,q===null&&dl(f,de.el),j&&me(j,y),(he=C.props&&C.props.onVnodeUpdated)&&me(()=>Fe(he,U,C,Y),y)}else{let C;const{el:F,props:j}=u,{bm:U,m:Y,parent:q,root:he,type:de}=f,Te=jt(u);it(f,!1),U&&Rn(U),!Te&&(C=j&&j.onVnodeBeforeMount)&&Fe(C,q,u),it(f,!0);{he.ce&&he.ce._def.shadowRoot!==!1&&he.ce._injectChildStyle(de);const Me=f.subTree=Is(f);O(null,Me,p,v,f,y,_),u.el=Me.el}if(Y&&me(Y,y),!Te&&(C=j&&j.onVnodeMounted)){const Me=u;me(()=>Fe(C,q,Me),y)}(u.shapeFlag&256||q&&jt(q.vnode)&&q.vnode.shapeFlag&256)&&f.a&&me(f.a,y),f.isMounted=!0,u=p=v=null}};f.scope.on();const E=f.effect=new vr(S);f.scope.off();const x=f.update=E.run.bind(E),$=f.job=E.runIfDirty.bind(E);$.i=f,$.id=f.uid,E.scheduler=()=>us($),it(f,!0),x()},G=(f,u,p)=>{u.component=f;const v=f.vnode.props;f.vnode=u,f.next=null,Yo(f,u.props,v,p),el(f,u.children,p),ke(),ws(f),qe()},V=(f,u,p,v,y,_,w,S,E=!1)=>{const x=f&&f.children,$=f?f.shapeFlag:0,C=u.children,{patchFlag:F,shapeFlag:j}=u;if(F>0){if(F&128){Ye(x,C,p,v,y,_,w,S,E);return}else if(F&256){Le(x,C,p,v,y,_,w,S,E);return}}j&8?($&16&&ve(x,y,_),C!==x&&a(p,C)):$&16?j&16?Ye(x,C,p,v,y,_,w,S,E):ve(x,y,_,!0):($&8&&a(p,""),j&16&&Ce(C,p,v,y,_,w,S,E))},Le=(f,u,p,v,y,_,w,S,E)=>{f=f||mt,u=u||mt;const x=f.length,$=u.length,C=Math.min(x,$);let F;for(F=0;F$?ve(f,y,_,!0,!1,C):Ce(u,p,v,y,_,w,S,E,C)},Ye=(f,u,p,v,y,_,w,S,E)=>{let x=0;const $=u.length;let C=f.length-1,F=$-1;for(;x<=C&&x<=F;){const j=f[x],U=u[x]=E?Ze(u[x]):He(u[x]);if(At(j,U))O(j,U,p,null,y,_,w,S,E);else break;x++}for(;x<=C&&x<=F;){const j=f[C],U=u[F]=E?Ze(u[F]):He(u[F]);if(At(j,U))O(j,U,p,null,y,_,w,S,E);else break;C--,F--}if(x>C){if(x<=F){const j=F+1,U=j<$?u[j].el:v;for(;x<=F;)O(null,u[x]=E?Ze(u[x]):He(u[x]),p,U,y,_,w,S,E),x++}}else if(x>F)for(;x<=C;)ae(f[x],y,_,!0),x++;else{const j=x,U=x,Y=new Map;for(x=U;x<=F;x++){const ge=u[x]=E?Ze(u[x]):He(u[x]);ge.key!=null&&Y.set(ge.key,x)}let q,he=0;const de=F-U+1;let Te=!1,Me=0;const Ct=new Array(de);for(x=0;x=de){ae(ge,y,_,!0);continue}let Ie;if(ge.key!=null)Ie=Y.get(ge.key);else for(q=U;q<=F;q++)if(Ct[q-U]===0&&At(ge,u[q])){Ie=q;break}Ie===void 0?ae(ge,y,_,!0):(Ct[Ie-U]=x+1,Ie>=Me?Me=Ie:Te=!0,O(ge,u[Ie],p,null,y,_,w,S,E),he++)}const vs=Te?rl(Ct):mt;for(q=vs.length-1,x=de-1;x>=0;x--){const ge=U+x,Ie=u[ge],bs=u[ge+1],ys=ge+1<$?bs.el||bs.placeholder:v;Ct[x]===0?O(null,Ie,p,ys,y,_,w,S,E):Te&&(q<0||x!==vs[q]?Oe(Ie,p,ys,2):q--)}}},Oe=(f,u,p,v,y=null)=>{const{el:_,type:w,transition:S,children:E,shapeFlag:x}=f;if(x&6){Oe(f.component.subTree,u,p,v);return}if(x&128){f.suspense.move(u,p,v);return}if(x&64){w.move(f,u,p,I);return}if(w===Ve){s(_,u,p);for(let C=0;CS.enter(_),y);else{const{leave:C,delayLeave:F,afterLeave:j}=S,U=()=>{f.ctx.isUnmounted?r(_):s(_,u,p)},Y=()=>{_._isLeaving&&_[Ro](!0),C(_,()=>{U(),j&&j()})};F?F(_,U,Y):Y()}else s(_,u,p)},ae=(f,u,p,v=!1,y=!1)=>{const{type:_,props:w,ref:S,children:E,dynamicChildren:x,shapeFlag:$,patchFlag:C,dirs:F,cacheIndex:j}=f;if(C===-2&&(y=!1),S!=null&&(ke(),$t(S,null,p,f,!0),qe()),j!=null&&(u.renderCache[j]=void 0),$&256){u.ctx.deactivate(f);return}const U=$&1&&F,Y=!jt(f);let q;if(Y&&(q=w&&w.onVnodeBeforeUnmount)&&Fe(q,u,f),$&6)Jt(f.component,p,v);else{if($&128){f.suspense.unmount(p,v);return}U&&rt(f,null,u,"beforeUnmount"),$&64?f.type.remove(f,u,p,I,v):x&&!x.hasOnce&&(_!==Ve||C>0&&C&64)?ve(x,u,p,!1,!0):(_===Ve&&C&384||!y&&$&16)&&ve(E,u,p),v&&at(f)}(Y&&(q=w&&w.onVnodeUnmounted)||U)&&me(()=>{q&&Fe(q,u,f),U&&rt(f,null,u,"unmounted")},p)},at=f=>{const{type:u,el:p,anchor:v,transition:y}=f;if(u===Ve){ht(p,v);return}if(u===sn){M(f);return}const _=()=>{r(p),y&&!y.persisted&&y.afterLeave&&y.afterLeave()};if(f.shapeFlag&1&&y&&!y.persisted){const{leave:w,delayLeave:S}=y,E=()=>w(p,_);S?S(f.el,_,E):E()}else _()},ht=(f,u)=>{let p;for(;f!==u;)p=g(f),r(f),f=p;r(u)},Jt=(f,u,p)=>{const{bum:v,scope:y,job:_,subTree:w,um:S,m:E,a:x}=f;Ms(E),Ms(x),v&&Rn(v),y.stop(),_&&(_.flags|=8,ae(w,f,u,p)),S&&me(S,u),me(()=>{f.isUnmounted=!0},u)},ve=(f,u,p,v=!1,y=!1,_=0)=>{for(let w=_;w{if(f.shapeFlag&6)return b(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const u=g(f.anchor||f.el),p=u&&u[So];return p?g(p):u};let A=!1;const R=(f,u,p)=>{f==null?u._vnode&&ae(u._vnode,null,null,!0):O(u._vnode||null,f,u,null,null,null,p),u._vnode=f,A||(A=!0,ws(),Ur(),A=!1)},I={p:O,um:ae,m:Oe,r:at,mt:Rt,mc:Ce,pc:V,pbc:Pe,n:b,o:e};return{render:R,hydrate:void 0,createApp:zo(R)}}function Tn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function it({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function sl(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function oi(e,t,n=!1){const s=e.children,r=t.children;if(D(s)&&D(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function li(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:li(t)}function Ms(e){if(e)for(let t=0;tWe(il);function nn(e,t,n){return ci(e,t,n)}function ci(e,t,n=X){const{immediate:s,deep:r,flush:i,once:o}=n,l=le({},n),c=t&&s||!t&&i!=="post";let d;if(qt){if(i==="sync"){const m=ol();d=m.__watcherHandles||(m.__watcherHandles=[])}else if(!c){const m=()=>{};return m.stop=$e,m.resume=$e,m.pause=$e,m}}const a=ie;l.call=(m,P,O)=>je(m,a,P,O);let h=!1;i==="post"?l.scheduler=m=>{me(m,a&&a.suspense)}:i!=="sync"&&(h=!0,l.scheduler=(m,P)=>{P?m():us(m)}),l.augmentJob=m=>{t&&(m.flags|=4),h&&(m.flags|=2,a&&(m.id=a.uid,m.i=a))};const g=vo(e,t,l);return qt&&(d?d.push(g):c&&g()),g}function ll(e,t,n){const s=this.proxy,r=ne(e)?e.includes(".")?fi(s,e):()=>s[e]:e.bind(s,s);let i;L(t)?i=t:(i=t.handler,n=t);const o=Yt(this),l=ci(r,i.bind(s),n);return o(),l}function fi(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ye(t)}Modifiers`]||e[`${ft(t)}Modifiers`];function fl(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||X;let r=n;const i=t.startsWith("update:"),o=i&&cl(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>ne(a)?a.trim():a)),o.number&&(r=n.map(Li)));let l,c=s[l=wn(t)]||s[l=wn(ye(t))];!c&&i&&(c=s[l=wn(ft(t))]),c&&je(c,e,6,r);const d=s[l+"Once"];if(d){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,je(d,e,6,r)}}function ui(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!L(e)){const c=d=>{const a=ui(d,t,!0);a&&(l=!0,le(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ee(e)&&s.set(e,null),null):(D(i)?i.forEach(c=>o[c]=null):le(o,i),ee(e)&&s.set(e,o),o)}function xn(e,t){return!e||!dn(t)?!1:(t=t.slice(2).replace(/Once$/,""),k(e,t[0].toLowerCase()+t.slice(1))||k(e,ft(t))||k(e,t))}function Is(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:d,renderCache:a,props:h,data:g,setupState:m,ctx:P,inheritAttrs:O}=e,B=fn(e);let N,T;try{if(n.shapeFlag&4){const M=r||s,z=M;N=He(d.call(z,M,a,h,m,g,P)),T=l}else{const M=t;N=He(M.length>1?M(h,{attrs:l,slots:o,emit:c}):M(h,null)),T=t.props?l:ul(l)}}catch(M){Dt.length=0,bn(M,e,1),N=be(yt)}let H=N;if(T&&O!==!1){const M=Object.keys(T),{shapeFlag:z}=H;M.length&&z&7&&(i&&M.some(Jn)&&(T=al(T,i)),H=xt(H,T,!1,!0))}return n.dirs&&(H=xt(H,null,!1,!0),H.dirs=H.dirs?H.dirs.concat(n.dirs):n.dirs),n.transition&&as(H,n.transition),N=H,fn(B),N}const ul=e=>{let t;for(const n in e)(n==="class"||n==="style"||dn(n))&&((t||(t={}))[n]=e[n]);return t},al=(e,t)=>{const n={};for(const s in e)(!Jn(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function hl(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,d=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Fs(s,o,d):!!o;if(c&8){const a=t.dynamicProps;for(let h=0;he.__isSuspense;function pl(e,t){t&&t.pendingBranch?D(e)?t.effects.push(...e):t.effects.push(e):xo(e)}const Ve=Symbol.for("v-fgt"),En=Symbol.for("v-txt"),yt=Symbol.for("v-cmt"),sn=Symbol.for("v-stc"),Dt=[];let _e=null;function of(e=!1){Dt.push(_e=e?null:[])}function gl(){Dt.pop(),_e=Dt[Dt.length-1]||null}let kt=1;function Ns(e,t=!1){kt+=e,e<0&&_e&&t&&(_e.hasOnce=!0)}function ml(e){return e.dynamicChildren=kt>0?_e||mt:null,gl(),kt>0&&_e&&_e.push(e),e}function lf(e,t,n,s,r,i){return ml(di(e,t,n,s,r,i,!0))}function an(e){return e?e.__v_isVNode===!0:!1}function At(e,t){return e.type===t.type&&e.key===t.key}const hi=({key:e})=>e??null,rn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ne(e)||oe(e)||L(e)?{i:Ee,r:e,k:t,f:!!n}:e:null);function di(e,t=null,n=null,s=0,r=null,i=e===Ve?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&hi(t),ref:t&&rn(t),scopeId:Kr,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Ee};return l?(ps(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ne(n)?8:16),kt>0&&!o&&_e&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&_e.push(c),c}const be=_l;function _l(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Do)&&(e=yt),an(e)){const l=xt(e,t,!0);return n&&ps(l,n),kt>0&&!i&&_e&&(l.shapeFlag&6?_e[_e.indexOf(e)]=l:_e.push(l)),l.patchFlag=-2,l}if(Tl(e)&&(e=e.__vccOpts),t){t=vl(t);let{class:l,style:c}=t;l&&!ne(l)&&(t.class=ts(l)),ee(c)&&(fs(c)&&!D(c)&&(c=le({},c)),t.style=es(c))}const o=ne(e)?1:ai(e)?128:wo(e)?64:ee(e)?4:L(e)?2:0;return di(e,t,n,s,r,o,i,!0)}function vl(e){return e?fs(e)||ei(e)?le({},e):e:null}function xt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,d=t?yl(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:d,key:d&&hi(d),ref:t&&t.ref?n&&i?D(i)?i.concat(rn(t)):[i,rn(t)]:rn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ve?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&xt(e.ssContent),ssFallback:e.ssFallback&&xt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&as(a,c.clone(a)),a}function bl(e=" ",t=0){return be(En,null,e,t)}function cf(e,t){const n=be(sn,null,e);return n.staticCount=t,n}function He(e){return e==null||typeof e=="boolean"?be(yt):D(e)?be(Ve,null,e.slice()):an(e)?Ze(e):be(En,null,String(e))}function Ze(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:xt(e)}function ps(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(D(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),ps(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!ei(t)?t._ctx=Ee:r===3&&Ee&&(Ee.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else L(t)?(t={default:t,_ctx:Ee},n=32):(t=String(t),s&64?(n=16,t=[bl(t)]):n=8);e.children=t,e.shapeFlag|=n}function yl(...e){const t={};for(let n=0;nie||Ee;let hn,kn;{const e=_n(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};hn=t("__VUE_INSTANCE_SETTERS__",n=>ie=n),kn=t("__VUE_SSR_SETTERS__",n=>qt=n)}const Yt=e=>{const t=ie;return hn(e),e.scope.on(),()=>{e.scope.off(),hn(t)}},Hs=()=>{ie&&ie.scope.off(),hn(null)};function pi(e){return e.vnode.shapeFlag&4}let qt=!1;function Rl(e,t=!1,n=!1){t&&kn(t);const{props:s,children:r}=e.vnode,i=pi(e);Qo(e,s,i,t),Zo(e,r,n||t);const o=i?Cl(e,t):void 0;return t&&kn(!1),o}function Cl(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Uo);const{setup:s}=n;if(s){ke();const r=e.setupContext=s.length>1?Al(e):null,i=Yt(e),o=Qt(s,e,0,[e.props,r]),l=pr(o);if(qe(),i(),(l||e.sp)&&!jt(e)&&kr(e),l){if(o.then(Hs,Hs),t)return o.then(c=>{$s(e,c)}).catch(c=>{bn(c,e,0)});e.asyncDep=o}else $s(e,o)}else gi(e)}function $s(e,t,n){L(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=jr(t)),gi(e)}function gi(e,t,n){const s=e.type;e.render||(e.render=s.render||$e);{const r=Yt(e);ke();try{Vo(e)}finally{qe(),r()}}}const Pl={get(e,t){return re(e,"get",""),e[t]}};function Al(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Pl),slots:e.slots,emit:e.emit,expose:t}}function gs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(jr(Nr(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Lt)return Lt[n](e)},has(t,n){return n in t||n in Lt}})):e.proxy}function Ol(e,t=!0){return L(e)?e.displayName||e.name:e.name||t&&e.__name}function Tl(e){return L(e)&&"__vccOpts"in e}const xe=(e,t)=>mo(e,t,qt);function mi(e,t,n){const s=arguments.length;return s===2?ee(t)&&!D(t)?an(t)?be(e,null,[t]):be(e,t):be(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&an(n)&&(n=[n]),be(e,t,n))}const Ml="3.5.20";/** +* @vue/runtime-dom v3.5.20 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let qn;const js=typeof window<"u"&&window.trustedTypes;if(js)try{qn=js.createPolicy("vue",{createHTML:e=>e})}catch{}const _i=qn?e=>qn.createHTML(e):e=>e,Il="http://www.w3.org/2000/svg",Fl="http://www.w3.org/1998/Math/MathML",Ue=typeof document<"u"?document:null,Ls=Ue&&Ue.createElement("template"),Nl={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ue.createElementNS(Il,e):t==="mathml"?Ue.createElementNS(Fl,e):n?Ue.createElement(e,{is:n}):Ue.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ue.createTextNode(e),createComment:e=>Ue.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ue.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Ls.innerHTML=_i(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Ls.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Hl=Symbol("_vtc");function $l(e,t,n){const s=e[Hl];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ds=Symbol("_vod"),jl=Symbol("_vsh"),Ll=Symbol(""),Dl=/(^|;)\s*display\s*:/;function Bl(e,t,n){const s=e.style,r=ne(n);let i=!1;if(n&&!r){if(t)if(ne(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&on(s,l,"")}else for(const o in t)n[o]==null&&on(s,o,"");for(const o in n)o==="display"&&(i=!0),on(s,o,n[o])}else if(r){if(t!==n){const o=s[Ll];o&&(n+=";"+o),s.cssText=n,i=Dl.test(n)}}else t&&e.removeAttribute("style");Ds in e&&(e[Ds]=i?s.display:"",e[jl]&&(s.display="none"))}const Bs=/\s*!important$/;function on(e,t,n){if(D(n))n.forEach(s=>on(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Ul(e,t);Bs.test(n)?e.setProperty(ft(s),n.replace(Bs,""),"important"):e[s]=n}}const Us=["Webkit","Moz","ms"],Mn={};function Ul(e,t){const n=Mn[t];if(n)return n;let s=ye(t);if(s!=="filter"&&s in e)return Mn[t]=s;s=mn(s);for(let r=0;rIn||(ql.then(()=>In=0),In=Date.now());function zl(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;je(Ql(s,n.value),t,5,[s])};return n.value=e,n.attached=Gl(),n}function Ql(e,t){if(D(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Gs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Yl=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?$l(e,s,o):t==="style"?Bl(e,n,s):dn(t)?Jn(t)||Wl(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Jl(e,t,s,o))?(Ws(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Ks(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ne(s))?Ws(e,ye(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Ks(e,t,s,o))};function Jl(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Gs(t)&&L(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Gs(t)&&ne(n)?!1:t in e}const Xl=le({patchProp:Yl},Nl);let zs;function Zl(){return zs||(zs=tl(Xl))}const ff=(...e)=>{const t=Zl().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=tc(s);if(!r)return;const i=t._component;!L(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,ec(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function ec(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function tc(e){return ne(e)?document.querySelector(e):e}/*! + * pinia v2.3.1 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */const nc=Symbol();var Qs;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Qs||(Qs={}));function uf(){const e=ki(!0),t=e.run(()=>Hr({}));let n=[],s=[];const r=Nr({install(i){r._a=i,i.provide(nc,r),i.config.globalProperties.$pinia=r,s.forEach(o=>n.push(o)),s=[]},use(i){return this._a?n.push(i):s.push(i),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return r}/*! + * vue-router v4.5.1 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */const gt=typeof document<"u";function vi(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function sc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&vi(e.default)}const K=Object.assign;function Fn(e,t){const n={};for(const s in t){const r=t[s];n[s]=Re(r)?r.map(e):e(r)}return n}const Bt=()=>{},Re=Array.isArray,bi=/#/g,rc=/&/g,ic=/\//g,oc=/=/g,lc=/\?/g,yi=/\+/g,cc=/%5B/g,fc=/%5D/g,xi=/%5E/g,uc=/%60/g,Ei=/%7B/g,ac=/%7C/g,Si=/%7D/g,hc=/%20/g;function ms(e){return encodeURI(""+e).replace(ac,"|").replace(cc,"[").replace(fc,"]")}function dc(e){return ms(e).replace(Ei,"{").replace(Si,"}").replace(xi,"^")}function Gn(e){return ms(e).replace(yi,"%2B").replace(hc,"+").replace(bi,"%23").replace(rc,"%26").replace(uc,"`").replace(Ei,"{").replace(Si,"}").replace(xi,"^")}function pc(e){return Gn(e).replace(oc,"%3D")}function gc(e){return ms(e).replace(bi,"%23").replace(lc,"%3F")}function mc(e){return e==null?"":gc(e).replace(ic,"%2F")}function Gt(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const _c=/\/$/,vc=e=>e.replace(_c,"");function Nn(e,t,n="/"){let s,r={},i="",o="";const l=t.indexOf("#");let c=t.indexOf("?");return l=0&&(c=-1),c>-1&&(s=t.slice(0,c),i=t.slice(c+1,l>-1?l:t.length),r=e(i)),l>-1&&(s=s||t.slice(0,l),o=t.slice(l,t.length)),s=Ec(s??t,n),{fullPath:s+(i&&"?")+i+o,path:s,query:r,hash:Gt(o)}}function bc(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Ys(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function yc(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&Et(t.matched[s],n.matched[r])&&wi(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Et(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function wi(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!xc(e[n],t[n]))return!1;return!0}function xc(e,t){return Re(e)?Js(e,t):Re(t)?Js(t,e):e===t}function Js(e,t){return Re(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Ec(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let i=n.length-1,o,l;for(o=0;o1&&i--;else break;return n.slice(0,i).join("/")+"/"+s.slice(o).join("/")}const Je={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var zt;(function(e){e.pop="pop",e.push="push"})(zt||(zt={}));var Ut;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Ut||(Ut={}));function Sc(e){if(!e)if(gt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),vc(e)}const wc=/^[^#]+#/;function Rc(e,t){return e.replace(wc,"#")+t}function Cc(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const Sn=()=>({left:window.scrollX,top:window.scrollY});function Pc(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Cc(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Xs(e,t){return(history.state?history.state.position-t:-1)+e}const zn=new Map;function Ac(e,t){zn.set(e,t)}function Oc(e){const t=zn.get(e);return zn.delete(e),t}let Tc=()=>location.protocol+"//"+location.host;function Ri(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let l=r.includes(e.slice(i))?e.slice(i).length:1,c=r.slice(l);return c[0]!=="/"&&(c="/"+c),Ys(c,"")}return Ys(n,e)+s+r}function Mc(e,t,n,s){let r=[],i=[],o=null;const l=({state:g})=>{const m=Ri(e,location),P=n.value,O=t.value;let B=0;if(g){if(n.value=m,t.value=g,o&&o===P){o=null;return}B=O?g.position-O.position:0}else s(m);r.forEach(N=>{N(n.value,P,{delta:B,type:zt.pop,direction:B?B>0?Ut.forward:Ut.back:Ut.unknown})})};function c(){o=n.value}function d(g){r.push(g);const m=()=>{const P=r.indexOf(g);P>-1&&r.splice(P,1)};return i.push(m),m}function a(){const{history:g}=window;g.state&&g.replaceState(K({},g.state,{scroll:Sn()}),"")}function h(){for(const g of i)g();i=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",a)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",a,{passive:!0}),{pauseListeners:c,listen:d,destroy:h}}function Zs(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?Sn():null}}function Ic(e){const{history:t,location:n}=window,s={value:Ri(e,n)},r={value:t.state};r.value||i(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(c,d,a){const h=e.indexOf("#"),g=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+c:Tc()+e+c;try{t[a?"replaceState":"pushState"](d,"",g),r.value=d}catch(m){console.error(m),n[a?"replace":"assign"](g)}}function o(c,d){const a=K({},t.state,Zs(r.value.back,c,r.value.forward,!0),d,{position:r.value.position});i(c,a,!0),s.value=c}function l(c,d){const a=K({},r.value,t.state,{forward:c,scroll:Sn()});i(a.current,a,!0);const h=K({},Zs(s.value,c,null),{position:a.position+1},d);i(c,h,!1),s.value=c}return{location:s,state:r,push:l,replace:o}}function af(e){e=Sc(e);const t=Ic(e),n=Mc(e,t.state,t.location,t.replace);function s(i,o=!0){o||n.pauseListeners(),history.go(i)}const r=K({location:"",base:e,go:s,createHref:Rc.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Fc(e){return typeof e=="string"||e&&typeof e=="object"}function Ci(e){return typeof e=="string"||typeof e=="symbol"}const Pi=Symbol("");var er;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(er||(er={}));function St(e,t){return K(new Error,{type:e,[Pi]:!0},t)}function Be(e,t){return e instanceof Error&&Pi in e&&(t==null||!!(e.type&t))}const tr="[^/]+?",Nc={sensitive:!1,strict:!1,start:!0,end:!0},Hc=/[.+*?^${}()[\]/\\]/g;function $c(e,t){const n=K({},Nc,t),s=[];let r=n.start?"^":"";const i=[];for(const d of e){const a=d.length?[]:[90];n.strict&&!d.length&&(r+="/");for(let h=0;ht.length?t.length===1&&t[0]===80?1:-1:0}function Ai(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Lc={type:0,value:""},Dc=/[a-zA-Z0-9_]/;function Bc(e){if(!e)return[[]];if(e==="/")return[[Lc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${d}": ${m}`)}let n=0,s=n;const r=[];let i;function o(){i&&r.push(i),i=[]}let l=0,c,d="",a="";function h(){d&&(n===0?i.push({type:0,value:d}):n===1||n===2||n===3?(i.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${d}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:d,regexp:a,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),d="")}function g(){d+=c}for(;l{o(H)}:Bt}function o(h){if(Ci(h)){const g=s.get(h);g&&(s.delete(h),n.splice(n.indexOf(g),1),g.children.forEach(o),g.alias.forEach(o))}else{const g=n.indexOf(h);g>-1&&(n.splice(g,1),h.record.name&&s.delete(h.record.name),h.children.forEach(o),h.alias.forEach(o))}}function l(){return n}function c(h){const g=kc(h,n);n.splice(g,0,h),h.record.name&&!ir(h)&&s.set(h.record.name,h)}function d(h,g){let m,P={},O,B;if("name"in h&&h.name){if(m=s.get(h.name),!m)throw St(1,{location:h});B=m.record.name,P=K(sr(g.params,m.keys.filter(H=>!H.optional).concat(m.parent?m.parent.keys.filter(H=>H.optional):[]).map(H=>H.name)),h.params&&sr(h.params,m.keys.map(H=>H.name))),O=m.stringify(P)}else if(h.path!=null)O=h.path,m=n.find(H=>H.re.test(O)),m&&(P=m.parse(O),B=m.record.name);else{if(m=g.name?s.get(g.name):n.find(H=>H.re.test(g.path)),!m)throw St(1,{location:h,currentLocation:g});B=m.record.name,P=K({},g.params,h.params),O=m.stringify(P)}const N=[];let T=m;for(;T;)N.unshift(T.record),T=T.parent;return{name:B,path:O,params:P,matched:N,meta:Wc(N)}}e.forEach(h=>i(h));function a(){n.length=0,s.clear()}return{addRoute:i,resolve:d,removeRoute:o,clearRoutes:a,getRoutes:l,getRecordMatcher:r}}function sr(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function rr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Kc(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Kc(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function ir(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Wc(e){return e.reduce((t,n)=>K(t,n.meta),{})}function or(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function kc(e,t){let n=0,s=t.length;for(;n!==s;){const i=n+s>>1;Ai(e,t[i])<0?s=i:n=i+1}const r=qc(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function qc(e){let t=e;for(;t=t.parent;)if(Oi(t)&&Ai(e,t)===0)return t}function Oi({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Gc(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ri&&Gn(i)):[s&&Gn(s)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+n,i!=null&&(t+="="+i))})}return t}function zc(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=Re(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Qc=Symbol(""),cr=Symbol(""),_s=Symbol(""),Ti=Symbol(""),Qn=Symbol("");function Ot(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function et(e,t,n,s,r,i=o=>o()){const o=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,c)=>{const d=g=>{g===!1?c(St(4,{from:n,to:t})):g instanceof Error?c(g):Fc(g)?c(St(2,{from:t,to:g})):(o&&s.enterCallbacks[r]===o&&typeof g=="function"&&o.push(g),l())},a=i(()=>e.call(s&&s.instances[r],t,n,d));let h=Promise.resolve(a);e.length<3&&(h=h.then(d)),h.catch(g=>c(g))})}function Hn(e,t,n,s,r=i=>i()){const i=[];for(const o of e)for(const l in o.components){let c=o.components[l];if(!(t!=="beforeRouteEnter"&&!o.instances[l]))if(vi(c)){const a=(c.__vccOpts||c)[t];a&&i.push(et(a,n,s,o,l,r))}else{let d=c();i.push(()=>d.then(a=>{if(!a)throw new Error(`Couldn't resolve component "${l}" at "${o.path}"`);const h=sc(a)?a.default:a;o.mods[l]=a,o.components[l]=h;const m=(h.__vccOpts||h)[t];return m&&et(m,n,s,o,l,r)()}))}}return i}function fr(e){const t=We(_s),n=We(Ti),s=xe(()=>{const c=_t(e.to);return t.resolve(c)}),r=xe(()=>{const{matched:c}=s.value,{length:d}=c,a=c[d-1],h=n.matched;if(!a||!h.length)return-1;const g=h.findIndex(Et.bind(null,a));if(g>-1)return g;const m=ur(c[d-2]);return d>1&&ur(a)===m&&h[h.length-1].path!==m?h.findIndex(Et.bind(null,c[d-2])):g}),i=xe(()=>r.value>-1&&ef(n.params,s.value.params)),o=xe(()=>r.value>-1&&r.value===n.matched.length-1&&wi(n.params,s.value.params));function l(c={}){if(Zc(c)){const d=t[_t(e.replace)?"replace":"push"](_t(e.to)).catch(Bt);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>d),d}return Promise.resolve()}return{route:s,href:xe(()=>s.value.href),isActive:i,isExactActive:o,navigate:l}}function Yc(e){return e.length===1?e[0]:e}const Jc=Wr({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:fr,setup(e,{slots:t}){const n=vn(fr(e)),{options:s}=We(_s),r=xe(()=>({[ar(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[ar(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&Yc(t.default(n));return e.custom?i:mi("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),Xc=Jc;function Zc(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ef(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!Re(r)||r.length!==s.length||s.some((i,o)=>i!==r[o]))return!1}return!0}function ur(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const ar=(e,t,n)=>e??t??n,tf=Wr({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=We(Qn),r=xe(()=>e.route||s.value),i=We(cr,0),o=xe(()=>{let d=_t(i);const{matched:a}=r.value;let h;for(;(h=a[d])&&!h.components;)d++;return d}),l=xe(()=>r.value.matched[o.value]);tn(cr,xe(()=>o.value+1)),tn(Qc,l),tn(Qn,r);const c=Hr();return nn(()=>[c.value,l.value,e.name],([d,a,h],[g,m,P])=>{a&&(a.instances[h]=d,m&&m!==a&&d&&d===g&&(a.leaveGuards.size||(a.leaveGuards=m.leaveGuards),a.updateGuards.size||(a.updateGuards=m.updateGuards))),d&&a&&(!m||!Et(a,m)||!g)&&(a.enterCallbacks[h]||[]).forEach(O=>O(d))},{flush:"post"}),()=>{const d=r.value,a=e.name,h=l.value,g=h&&h.components[a];if(!g)return hr(n.default,{Component:g,route:d});const m=h.props[a],P=m?m===!0?d.params:typeof m=="function"?m(d):m:null,B=mi(g,K({},P,t,{onVnodeUnmounted:N=>{N.component.isUnmounted&&(h.instances[a]=null)},ref:c}));return hr(n.default,{Component:B,route:d})||B}}});function hr(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const nf=tf;function hf(e){const t=Vc(e.routes,e),n=e.parseQuery||Gc,s=e.stringifyQuery||lr,r=e.history,i=Ot(),o=Ot(),l=Ot(),c=ao(Je);let d=Je;gt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const a=Fn.bind(null,b=>""+b),h=Fn.bind(null,mc),g=Fn.bind(null,Gt);function m(b,A){let R,I;return Ci(b)?(R=t.getRecordMatcher(b),I=A):I=b,t.addRoute(I,R)}function P(b){const A=t.getRecordMatcher(b);A&&t.removeRoute(A)}function O(){return t.getRoutes().map(b=>b.record)}function B(b){return!!t.getRecordMatcher(b)}function N(b,A){if(A=K({},A||c.value),typeof b=="string"){const p=Nn(n,b,A.path),v=t.resolve({path:p.path},A),y=r.createHref(p.fullPath);return K(p,v,{params:g(v.params),hash:Gt(p.hash),redirectedFrom:void 0,href:y})}let R;if(b.path!=null)R=K({},b,{path:Nn(n,b.path,A.path).path});else{const p=K({},b.params);for(const v in p)p[v]==null&&delete p[v];R=K({},b,{params:h(p)}),A.params=h(A.params)}const I=t.resolve(R,A),Q=b.hash||"";I.params=a(g(I.params));const f=bc(s,K({},b,{hash:dc(Q),path:I.path})),u=r.createHref(f);return K({fullPath:f,hash:Q,query:s===lr?zc(b.query):b.query||{}},I,{redirectedFrom:void 0,href:u})}function T(b){return typeof b=="string"?Nn(n,b,c.value.path):K({},b)}function H(b,A){if(d!==b)return St(8,{from:A,to:b})}function M(b){return Z(b)}function z(b){return M(K(T(b),{replace:!0}))}function se(b){const A=b.matched[b.matched.length-1];if(A&&A.redirect){const{redirect:R}=A;let I=typeof R=="function"?R(b):R;return typeof I=="string"&&(I=I.includes("?")||I.includes("#")?I=T(I):{path:I},I.params={}),K({query:b.query,hash:b.hash,params:I.path!=null?{}:b.params},I)}}function Z(b,A){const R=d=N(b),I=c.value,Q=b.state,f=b.force,u=b.replace===!0,p=se(R);if(p)return Z(K(T(p),{state:typeof p=="object"?K({},Q,p.state):Q,force:f,replace:u}),A||R);const v=R;v.redirectedFrom=A;let y;return!f&&yc(s,I,R)&&(y=St(16,{to:v,from:I}),Oe(I,I,!0,!1)),(y?Promise.resolve(y):Pe(v,I)).catch(_=>Be(_)?Be(_,2)?_:Ye(_):V(_,v,I)).then(_=>{if(_){if(Be(_,2))return Z(K({replace:u},T(_.to),{state:typeof _.to=="object"?K({},Q,_.to.state):Q,force:f}),A||v)}else _=st(v,I,!0,u,Q);return Qe(v,I,_),_})}function Ce(b,A){const R=H(b,A);return R?Promise.reject(R):Promise.resolve()}function ze(b){const A=ht.values().next().value;return A&&typeof A.runWithContext=="function"?A.runWithContext(b):b()}function Pe(b,A){let R;const[I,Q,f]=sf(b,A);R=Hn(I.reverse(),"beforeRouteLeave",b,A);for(const p of I)p.leaveGuards.forEach(v=>{R.push(et(v,b,A))});const u=Ce.bind(null,b,A);return R.push(u),ve(R).then(()=>{R=[];for(const p of i.list())R.push(et(p,b,A));return R.push(u),ve(R)}).then(()=>{R=Hn(Q,"beforeRouteUpdate",b,A);for(const p of Q)p.updateGuards.forEach(v=>{R.push(et(v,b,A))});return R.push(u),ve(R)}).then(()=>{R=[];for(const p of f)if(p.beforeEnter)if(Re(p.beforeEnter))for(const v of p.beforeEnter)R.push(et(v,b,A));else R.push(et(p.beforeEnter,b,A));return R.push(u),ve(R)}).then(()=>(b.matched.forEach(p=>p.enterCallbacks={}),R=Hn(f,"beforeRouteEnter",b,A,ze),R.push(u),ve(R))).then(()=>{R=[];for(const p of o.list())R.push(et(p,b,A));return R.push(u),ve(R)}).catch(p=>Be(p,8)?p:Promise.reject(p))}function Qe(b,A,R){l.list().forEach(I=>ze(()=>I(b,A,R)))}function st(b,A,R,I,Q){const f=H(b,A);if(f)return f;const u=A===Je,p=gt?history.state:{};R&&(I||u?r.replace(b.fullPath,K({scroll:u&&p&&p.scroll},Q)):r.push(b.fullPath,Q)),c.value=b,Oe(b,A,R,u),Ye()}let Ae;function Rt(){Ae||(Ae=r.listen((b,A,R)=>{if(!Jt.listening)return;const I=N(b),Q=se(I);if(Q){Z(K(Q,{replace:!0,force:!0}),I).catch(Bt);return}d=I;const f=c.value;gt&&Ac(Xs(f.fullPath,R.delta),Sn()),Pe(I,f).catch(u=>Be(u,12)?u:Be(u,2)?(Z(K(T(u.to),{force:!0}),I).then(p=>{Be(p,20)&&!R.delta&&R.type===zt.pop&&r.go(-1,!1)}).catch(Bt),Promise.reject()):(R.delta&&r.go(-R.delta,!1),V(u,I,f))).then(u=>{u=u||st(I,f,!1),u&&(R.delta&&!Be(u,8)?r.go(-R.delta,!1):R.type===zt.pop&&Be(u,20)&&r.go(-1,!1)),Qe(I,f,u)}).catch(Bt)}))}let ut=Ot(),te=Ot(),G;function V(b,A,R){Ye(b);const I=te.list();return I.length?I.forEach(Q=>Q(b,A,R)):console.error(b),Promise.reject(b)}function Le(){return G&&c.value!==Je?Promise.resolve():new Promise((b,A)=>{ut.add([b,A])})}function Ye(b){return G||(G=!b,Rt(),ut.list().forEach(([A,R])=>b?R(b):A()),ut.reset()),b}function Oe(b,A,R,I){const{scrollBehavior:Q}=e;if(!gt||!Q)return Promise.resolve();const f=!R&&Oc(Xs(b.fullPath,0))||(I||!R)&&history.state&&history.state.scroll||null;return Dr().then(()=>Q(b,A,f)).then(u=>u&&Pc(u)).catch(u=>V(u,b,A))}const ae=b=>r.go(b);let at;const ht=new Set,Jt={currentRoute:c,listening:!0,addRoute:m,removeRoute:P,clearRoutes:t.clearRoutes,hasRoute:B,getRoutes:O,resolve:N,options:e,push:M,replace:z,go:ae,back:()=>ae(-1),forward:()=>ae(1),beforeEach:i.add,beforeResolve:o.add,afterEach:l.add,onError:te.add,isReady:Le,install(b){const A=this;b.component("RouterLink",Xc),b.component("RouterView",nf),b.config.globalProperties.$router=A,Object.defineProperty(b.config.globalProperties,"$route",{enumerable:!0,get:()=>_t(c)}),gt&&!at&&c.value===Je&&(at=!0,M(r.location).catch(Q=>{}));const R={};for(const Q in Je)Object.defineProperty(R,Q,{get:()=>c.value[Q],enumerable:!0});b.provide(_s,A),b.provide(Ti,Ir(R)),b.provide(Qn,c);const I=b.unmount;ht.add(b),b.unmount=function(){ht.delete(b),ht.size<1&&(d=Je,Ae&&Ae(),Ae=null,c.value=Je,at=!1,G=!1),I()}}};function ve(b){return b.reduce((A,R)=>A.then(()=>ze(R)),Promise.resolve())}return Jt}function sf(e,t){const n=[],s=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let o=0;oEt(d,l))?s.push(l):n.push(l));const c=e.matched[o];c&&(t.matched.find(d=>Et(d,c))||r.push(c))}return[n,s,r]}export{di as a,be as b,lf as c,Wr as d,bl as e,cf as f,hf as g,af as h,ff as i,uf as j,of as o,rf as r,Eo as w}; diff --git a/server/static-vue3/index.html b/server/static-vue3/index.html new file mode 100644 index 00000000..d3300d04 --- /dev/null +++ b/server/static-vue3/index.html @@ -0,0 +1,15 @@ + + + + + + + DigiScript Vue 3 + + + + + +
+ + \ No newline at end of file From 373176662b3f7c6050524cafc903c1ed3d58d71f Mon Sep 17 00:00:00 2001 From: Tim Bradgate Date: Sat, 30 Aug 2025 17:45:18 +0100 Subject: [PATCH 2/8] Remove build artifacts from git and update server gitignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove server/static-vue3/ build artifacts from git tracking - Add static-vue3/ to server/.gitignore for runtime build outputs - Build artifacts should be generated at runtime, not committed 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- server/.gitignore | 1 + server/static-vue3/.vite/manifest.json | 34 ------------------- .../static-vue3/assets/AboutView-20v3qqqG.css | 1 - .../static-vue3/assets/AboutView-DJD43Vlx.js | 1 - server/static-vue3/assets/index-C5VGZqFi.css | 1 - server/static-vue3/assets/index-r9_pACYz.js | 2 -- server/static-vue3/assets/vendor-f6MMzXtq.js | 25 -------------- server/static-vue3/index.html | 15 -------- 8 files changed, 1 insertion(+), 79 deletions(-) delete mode 100644 server/static-vue3/.vite/manifest.json delete mode 100644 server/static-vue3/assets/AboutView-20v3qqqG.css delete mode 100644 server/static-vue3/assets/AboutView-DJD43Vlx.js delete mode 100644 server/static-vue3/assets/index-C5VGZqFi.css delete mode 100644 server/static-vue3/assets/index-r9_pACYz.js delete mode 100644 server/static-vue3/assets/vendor-f6MMzXtq.js delete mode 100644 server/static-vue3/index.html diff --git a/server/.gitignore b/server/.gitignore index aab79938..714145a4 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -1,5 +1,6 @@ public/ static/ +static-vue3/ conf/ digiscript.sqlite digiscript.json diff --git a/server/static-vue3/.vite/manifest.json b/server/static-vue3/.vite/manifest.json deleted file mode 100644 index ba2ab0cf..00000000 --- a/server/static-vue3/.vite/manifest.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "_vendor-f6MMzXtq.js": { - "file": "assets/vendor-f6MMzXtq.js", - "name": "vendor" - }, - "index.html": { - "file": "assets/index-r9_pACYz.js", - "name": "index", - "src": "index.html", - "isEntry": true, - "imports": [ - "_vendor-f6MMzXtq.js" - ], - "dynamicImports": [ - "src/views/AboutView.vue" - ], - "css": [ - "assets/index-C5VGZqFi.css" - ] - }, - "src/views/AboutView.vue": { - "file": "assets/AboutView-DJD43Vlx.js", - "name": "AboutView", - "src": "src/views/AboutView.vue", - "isDynamicEntry": true, - "imports": [ - "_vendor-f6MMzXtq.js", - "index.html" - ], - "css": [ - "assets/AboutView-20v3qqqG.css" - ] - } -} \ No newline at end of file diff --git a/server/static-vue3/assets/AboutView-20v3qqqG.css b/server/static-vue3/assets/AboutView-20v3qqqG.css deleted file mode 100644 index 905e8e02..00000000 --- a/server/static-vue3/assets/AboutView-20v3qqqG.css +++ /dev/null @@ -1 +0,0 @@ -.about[data-v-6bfe7fd9]{max-width:800px;margin:0 auto}.about-header[data-v-6bfe7fd9]{text-align:center;margin-bottom:3rem}.about-header h1[data-v-6bfe7fd9]{font-size:2.5rem;color:#1a202c;margin-bottom:.5rem}.subtitle[data-v-6bfe7fd9]{font-size:1.125rem;color:#718096}.content-sections[data-v-6bfe7fd9]{display:flex;flex-direction:column;gap:3rem}.section[data-v-6bfe7fd9]{background:#fff;border-radius:8px;padding:2rem;box-shadow:0 1px 3px #0000001a}.section h2[data-v-6bfe7fd9]{color:#2d3748;margin-bottom:1rem;font-size:1.5rem}.section h4[data-v-6bfe7fd9]{color:#4a5568;margin-bottom:.5rem}.section p[data-v-6bfe7fd9]{color:#718096;line-height:1.6;margin-bottom:1rem}.section ul[data-v-6bfe7fd9]{color:#718096;line-height:1.6}.section ul li[data-v-6bfe7fd9]{margin-bottom:.5rem}.tech-grid[data-v-6bfe7fd9]{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1.5rem;margin-top:1rem}.tech-item[data-v-6bfe7fd9]{padding:1rem;background:#f8f9fa;border-radius:6px;border-left:4px solid #007bff}.tech-item h4[data-v-6bfe7fd9]{color:#007bff;margin-bottom:.5rem}.tech-item p[data-v-6bfe7fd9]{margin-bottom:0;font-size:.9rem}.status-list[data-v-6bfe7fd9]{display:flex;flex-direction:column;gap:.75rem;margin-top:1rem}.status-item[data-v-6bfe7fd9]{display:flex;align-items:center;gap:.75rem;padding:.75rem;background:#f8f9fa;border-radius:6px}.status-item.completed[data-v-6bfe7fd9]{background:#d4edda}.status-icon[data-v-6bfe7fd9]{font-size:1.125rem} diff --git a/server/static-vue3/assets/AboutView-DJD43Vlx.js b/server/static-vue3/assets/AboutView-DJD43Vlx.js deleted file mode 100644 index 9749058b..00000000 --- a/server/static-vue3/assets/AboutView-DJD43Vlx.js +++ /dev/null @@ -1 +0,0 @@ -import{d as t,c as e,f as d,o as s}from"./vendor-f6MMzXtq.js";import{_ as i}from"./index-r9_pACYz.js";const f={class:"about"},n=t({__name:"AboutView",setup(o){return(v,a)=>(s(),e("div",f,[...a[0]||(a[0]=[d('

About DigiScript Vue 3 Migration

Technical Implementation Details

Migration Strategy

We're implementing a side-by-side migration approach that allows both Vue 2 and Vue 3 applications to coexist during the transition period. This ensures zero downtime and allows for gradual feature migration.

  • Phase 1: Foundation & Infrastructure (Current)
  • Phase 2: Core Components Migration
  • Phase 3: Feature-by-Feature Migration
  • Phase 4: Final Cutover & Cleanup

Technical Architecture

Vue 3.4+

Composition API, improved TypeScript support, better performance

Vite 5+

Fast build tool with HMR, ESM-based development

Pinia

Modern state management, replacing Vuex

Vue Router 4

Updated routing with composition API support

TypeScript

Full TypeScript integration for better DX

ESLint

Code quality with Vue 3 + TypeScript rules

Current Status

Project structure and build system
TypeScript configuration
Vue Router 4 setup
Pinia state management
Development server with API proxy
',2)])]))}}),r=i(n,[["__scopeId","data-v-6bfe7fd9"]]);export{r as default}; diff --git a/server/static-vue3/assets/index-C5VGZqFi.css b/server/static-vue3/assets/index-C5VGZqFi.css deleted file mode 100644 index 107632aa..00000000 --- a/server/static-vue3/assets/index-C5VGZqFi.css +++ /dev/null @@ -1 +0,0 @@ -.app-header[data-v-ef669f24]{background:#1a202c;color:#fff;padding:1rem 0}.navbar[data-v-ef669f24]{display:flex;justify-content:space-between;align-items:center;max-width:1200px;margin:0 auto;padding:0 2rem}.navbar-brand h1[data-v-ef669f24]{margin:0;font-size:1.5rem}.navbar-nav[data-v-ef669f24]{display:flex;gap:2rem}.nav-link[data-v-ef669f24]{color:#fff;text-decoration:none;padding:.5rem 1rem;border-radius:4px;transition:background-color .2s}.nav-link[data-v-ef669f24]:hover,.nav-link.router-link-active[data-v-ef669f24]{background-color:#2d3748;color:#fff;text-decoration:none}.main-content[data-v-ef669f24]{min-height:calc(100vh - 140px);max-width:1200px;margin:0 auto;padding:2rem}.app-footer[data-v-ef669f24]{background:#f8f9fa;text-align:center;padding:1rem;margin-top:2rem}.app-footer p[data-v-ef669f24]{margin:0;color:#6c757d}.home[data-v-0c8ca505]{padding:2rem 0}.welcome-section[data-v-0c8ca505]{text-align:center;margin-bottom:3rem}.welcome-section h1[data-v-0c8ca505]{font-size:3rem;color:#1a202c;margin-bottom:.5rem}.lead[data-v-0c8ca505]{font-size:1.25rem;color:#718096;margin-bottom:0}.status-grid[data-v-0c8ca505]{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:2rem;margin-bottom:3rem}.status-card[data-v-0c8ca505]{background:#fff;border:1px solid #e2e8f0;border-radius:8px;padding:1.5rem;box-shadow:0 1px 3px #0000001a}.status-card h3[data-v-0c8ca505]{color:#2d3748;margin-bottom:1rem;font-size:1.25rem}.status-card ul[data-v-0c8ca505]{list-style:none;padding:0;margin:0}.status-card li[data-v-0c8ca505]{padding:.5rem 0;border-bottom:1px solid #f7fafc}.status-card li[data-v-0c8ca505]:last-child{border-bottom:none}.info-section[data-v-0c8ca505]{background:#f8f9fa;border-radius:8px;padding:2rem;text-align:center}.info-section h2[data-v-0c8ca505]{color:#28a745;margin-bottom:1rem}.info-section code[data-v-0c8ca505]{background:#e9ecef;padding:.2rem .4rem;border-radius:4px;font-family:Courier New,monospace}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;line-height:1.6;color:#2d3748;background-color:#f7fafc}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:600;line-height:1.25}p{margin-bottom:1rem}a{color:#007bff;text-decoration:none;transition:color .15s ease-in-out}a:hover{color:#0056b3;text-decoration:underline}.container{max-width:1200px;margin:0 auto;padding:0 1rem}.text-center{text-align:center}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:1rem}.mb-4{margin-bottom:1.5rem}.mb-5{margin-bottom:3rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:1rem}.mt-4{margin-top:1.5rem}.mt-5{margin-top:3rem}.fade-enter-active,.fade-leave-active{transition:opacity .5s ease}.fade-enter-from,.fade-leave-to{opacity:0}.slide-enter-active,.slide-leave-active{transition:all .3s ease}.slide-enter-from{transform:translate(10px);opacity:0}.slide-leave-to{transform:translate(-10px);opacity:0}#app{min-height:100vh;display:flex;flex-direction:column} diff --git a/server/static-vue3/assets/index-r9_pACYz.js b/server/static-vue3/assets/index-r9_pACYz.js deleted file mode 100644 index 90615c2b..00000000 --- a/server/static-vue3/assets/index-r9_pACYz.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AboutView-DJD43Vlx.js","assets/vendor-f6MMzXtq.js","assets/AboutView-20v3qqqG.css"])))=>i.map(i=>d[i]); -import{d as g,c as y,a as d,b as p,w as m,r as f,o as S,e as h,f as E,g as C,h as k,i as A,j as L}from"./vendor-f6MMzXtq.js";(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))n(e);new MutationObserver(e=>{for(const o of e)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function t(e){const o={};return e.integrity&&(o.integrity=e.integrity),e.referrerPolicy&&(o.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?o.credentials="include":e.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(e){if(e.ep)return;e.ep=!0;const o=t(e);fetch(e.href,o)}})();const x={id:"app"},O={class:"app-header"},T={class:"navbar"},B={class:"navbar-nav"},I={class:"main-content"},N=g({__name:"App",setup(r){return(i,t)=>{const n=f("router-link"),e=f("router-view");return S(),y("div",x,[d("header",O,[d("nav",T,[t[2]||(t[2]=d("div",{class:"navbar-brand"},[d("h1",null,"DigiScript v3")],-1)),d("div",B,[p(n,{to:"/",class:"nav-link"},{default:m(()=>[...t[0]||(t[0]=[h("Home",-1)])]),_:1}),p(n,{to:"/about",class:"nav-link"},{default:m(()=>[...t[1]||(t[1]=[h("About",-1)])]),_:1})])])]),d("main",I,[p(e)]),t[3]||(t[3]=d("footer",{class:"app-footer"},[d("p",null,"© 2024 DigiScript - Vue 3 Migration (Phase 1)")],-1))])}}}),P=(r,i)=>{const t=r.__vccOpts||r;for(const[n,e]of i)t[n]=e;return t},D=P(N,[["__scopeId","data-v-ef669f24"]]),R="modulepreload",H=function(r){return"/v3/"+r},_={},$=function(i,t,n){let e=Promise.resolve();if(t&&t.length>0){document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),c=(a==null?void 0:a.nonce)||(a==null?void 0:a.getAttribute("nonce"));e=Promise.allSettled(t.map(s=>{if(s=H(s),s in _)return;_[s]=!0;const u=s.endsWith(".css"),b=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${b}`))return;const l=document.createElement("link");if(l.rel=u?"stylesheet":R,u||(l.as="script"),l.crossOrigin="",l.href=s,c&&l.setAttribute("nonce",c),document.head.appendChild(l),u)return new Promise((w,V)=>{l.addEventListener("load",w),l.addEventListener("error",()=>V(new Error(`Unable to preload CSS for ${s}`)))})}))}function o(a){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=a,window.dispatchEvent(c),!c.defaultPrevented)throw a}return e.then(a=>{for(const c of a||[])c.status==="rejected"&&o(c.reason);return i().catch(o)})},F={class:"home"},M=g({__name:"HomeView",setup(r){return(i,t)=>(S(),y("div",F,[...t[0]||(t[0]=[E('

Welcome to DigiScript Vue 3

Phase 1 Migration Foundation

Framework Status

  • ✅ Vue 3.4+ - Composition API
  • ✅ TypeScript Support
  • ✅ Vite 5+ Build System
  • ✅ Vue Router 4
  • ✅ Pinia State Management

Development Environment

  • ✅ Hot Module Replacement
  • ✅ Development Server (Port 3000)
  • ✅ API Proxy to Backend
  • ✅ TypeScript Type Checking
  • ✅ ESLint Configuration

Next Phases

  • ⏳ Bootstrap Vue 3 Integration
  • ⏳ WebSocket Communication
  • ⏳ Authentication System
  • ⏳ Component Migration
  • ⏳ Store Migration

Phase 1 Complete

This Vue 3 application runs alongside the existing Vue 2 application without interference. The Vue 2 app continues to serve at / while this Vue 3 app serves at /v3/.

Future phases will gradually migrate functionality from Vue 2 to Vue 3, maintaining full backward compatibility until the migration is complete.

',3)])]))}}),W=P(M,[["__scopeId","data-v-0c8ca505"]]),q=C({history:k("/v3/"),routes:[{path:"/",name:"home",component:W},{path:"/about",name:"about",component:()=>$(()=>import("./AboutView-DJD43Vlx.js"),__vite__mapDeps([0,1,2]))}]}),v=A(D);v.use(L());v.use(q);v.mount("#app");export{P as _}; diff --git a/server/static-vue3/assets/vendor-f6MMzXtq.js b/server/static-vue3/assets/vendor-f6MMzXtq.js deleted file mode 100644 index a507e596..00000000 --- a/server/static-vue3/assets/vendor-f6MMzXtq.js +++ /dev/null @@ -1,25 +0,0 @@ -/** -* @vue/shared v3.5.20 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function Yn(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const X={},mt=[],$e=()=>{},dr=()=>!1,dn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Jn=e=>e.startsWith("onUpdate:"),le=Object.assign,Xn=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Mi=Object.prototype.hasOwnProperty,k=(e,t)=>Mi.call(e,t),D=Array.isArray,Mt=e=>pn(e)==="[object Map]",Ii=e=>pn(e)==="[object Set]",L=e=>typeof e=="function",ne=e=>typeof e=="string",wt=e=>typeof e=="symbol",ee=e=>e!==null&&typeof e=="object",pr=e=>(ee(e)||L(e))&&L(e.then)&&L(e.catch),Fi=Object.prototype.toString,pn=e=>Fi.call(e),Ni=e=>pn(e).slice(8,-1),Hi=e=>pn(e)==="[object Object]",Zn=e=>ne(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,It=Yn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),gn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},$i=/-(\w)/g,ye=gn(e=>e.replace($i,(t,n)=>n?n.toUpperCase():"")),ji=/\B([A-Z])/g,ft=gn(e=>e.replace(ji,"-$1").toLowerCase()),mn=gn(e=>e.charAt(0).toUpperCase()+e.slice(1)),wn=gn(e=>e?`on${mn(e)}`:""),nt=(e,t)=>!Object.is(e,t),Rn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Li=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let xs;const _n=()=>xs||(xs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function es(e){if(D(e)){const t={};for(let n=0;n{if(n){const s=n.split(Bi);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ts(e){let t="";if(ne(e))t=e;else if(D(e))for(let n=0;n0&&--this._on===0&&(pe=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Nt){let t=Nt;for(Nt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Ft;){let t=Ft;for(Ft=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function xr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Er(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),rs(s),Gi(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function $n(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Sr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Sr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Vt)||(e.globalVersion=Vt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!$n(e))))return;e.flags|=2;const t=e.dep,n=J,s=Se;J=e,Se=!0;try{xr(e);const r=e.fn(e._value);(t.version===0||nt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{J=n,Se=s,Er(e),e.flags&=-3}}function rs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)rs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Gi(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Se=!0;const wr=[];function ke(){wr.push(Se),Se=!1}function qe(){const e=wr.pop();Se=e===void 0?!0:e}function Es(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=J;J=void 0;try{t()}finally{J=n}}}let Vt=0;class zi{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class is{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!J||!Se||J===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==J)n=this.activeLink=new zi(J,this),J.deps?(n.prevDep=J.depsTail,J.depsTail.nextDep=n,J.depsTail=n):J.deps=J.depsTail=n,Rr(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=J.depsTail,n.nextDep=void 0,J.depsTail.nextDep=n,J.depsTail=n,J.deps===n&&(J.deps=s)}return n}trigger(t){this.version++,Vt++,this.notify(t)}notify(t){ns();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{ss()}}}function Rr(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Rr(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const jn=new WeakMap,lt=Symbol(""),Ln=Symbol(""),Kt=Symbol("");function re(e,t,n){if(Se&&J){let s=jn.get(e);s||jn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new is),r.map=s,r.key=n),r.track()}}function Ke(e,t,n,s,r,i){const o=jn.get(e);if(!o){Vt++;return}const l=c=>{c&&c.trigger()};if(ns(),t==="clear")o.forEach(l);else{const c=D(e),d=c&&Zn(n);if(c&&n==="length"){const a=Number(s);o.forEach((h,g)=>{(g==="length"||g===Kt||!wt(g)&&g>=a)&&l(h)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),d&&l(o.get(Kt)),t){case"add":c?d&&l(o.get("length")):(l(o.get(lt)),Mt(e)&&l(o.get(Ln)));break;case"delete":c||(l(o.get(lt)),Mt(e)&&l(o.get(Ln)));break;case"set":Mt(e)&&l(o.get(lt));break}}ss()}function dt(e){const t=W(e);return t===e?t:(re(t,"iterate",Kt),we(e)?t:t.map(fe))}function os(e){return re(e=W(e),"iterate",Kt),e}const Qi={__proto__:null,[Symbol.iterator](){return Pn(this,Symbol.iterator,fe)},concat(...e){return dt(this).concat(...e.map(t=>D(t)?dt(t):t))},entries(){return Pn(this,"entries",e=>(e[1]=fe(e[1]),e))},every(e,t){return De(this,"every",e,t,void 0,arguments)},filter(e,t){return De(this,"filter",e,t,n=>n.map(fe),arguments)},find(e,t){return De(this,"find",e,t,fe,arguments)},findIndex(e,t){return De(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return De(this,"findLast",e,t,fe,arguments)},findLastIndex(e,t){return De(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return De(this,"forEach",e,t,void 0,arguments)},includes(...e){return An(this,"includes",e)},indexOf(...e){return An(this,"indexOf",e)},join(e){return dt(this).join(e)},lastIndexOf(...e){return An(this,"lastIndexOf",e)},map(e,t){return De(this,"map",e,t,void 0,arguments)},pop(){return Pt(this,"pop")},push(...e){return Pt(this,"push",e)},reduce(e,...t){return Ss(this,"reduce",e,t)},reduceRight(e,...t){return Ss(this,"reduceRight",e,t)},shift(){return Pt(this,"shift")},some(e,t){return De(this,"some",e,t,void 0,arguments)},splice(...e){return Pt(this,"splice",e)},toReversed(){return dt(this).toReversed()},toSorted(e){return dt(this).toSorted(e)},toSpliced(...e){return dt(this).toSpliced(...e)},unshift(...e){return Pt(this,"unshift",e)},values(){return Pn(this,"values",fe)}};function Pn(e,t,n){const s=os(e),r=s[t]();return s!==e&&!we(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const Yi=Array.prototype;function De(e,t,n,s,r,i){const o=os(e),l=o!==e&&!we(e),c=o[t];if(c!==Yi[t]){const h=c.apply(e,i);return l?fe(h):h}let d=n;o!==e&&(l?d=function(h,g){return n.call(this,fe(h),g,e)}:n.length>2&&(d=function(h,g){return n.call(this,h,g,e)}));const a=c.call(o,d,s);return l&&r?r(a):a}function Ss(e,t,n,s){const r=os(e);let i=n;return r!==e&&(we(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,fe(l),c,e)}),r[t](i,...s)}function An(e,t,n){const s=W(e);re(s,"iterate",Kt);const r=s[t](...n);return(r===-1||r===!1)&&fs(n[0])?(n[0]=W(n[0]),s[t](...n)):r}function Pt(e,t,n=[]){ke(),ns();const s=W(e)[t].apply(e,n);return ss(),qe(),s}const Ji=Yn("__proto__,__v_isRef,__isVue"),Cr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(wt));function Xi(e){wt(e)||(e=String(e));const t=W(this);return re(t,"has",e),t.hasOwnProperty(e)}class Pr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?co:Mr:i?Tr:Or).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=D(t);if(!r){let c;if(o&&(c=Qi[n]))return c;if(n==="hasOwnProperty")return Xi}const l=Reflect.get(t,n,oe(t)?t:s);return(wt(n)?Cr.has(n):Ji(n))||(r||re(t,"get",n),i)?l:oe(l)?o&&Zn(n)?l:l.value:ee(l)?r?Fr(l):vn(l):l}}class Ar extends Pr{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=ct(i);if(!we(s)&&!ct(s)&&(i=W(i),s=W(s)),!D(t)&&oe(i)&&!oe(s))return c||(i.value=s),!0}const o=D(t)&&Zn(n)?Number(n)e,Xt=e=>Reflect.getPrototypeOf(e);function so(e,t,n){return function(...s){const r=this.__v_raw,i=W(r),o=Mt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,d=r[e](...s),a=n?Dn:t?Bn:fe;return!t&&re(i,"iterate",c?Ln:lt),{next(){const{value:h,done:g}=d.next();return g?{value:h,done:g}:{value:l?[a(h[0]),a(h[1])]:a(h),done:g}},[Symbol.iterator](){return this}}}}function Zt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ro(e,t){const n={get(r){const i=this.__v_raw,o=W(i),l=W(r);e||(nt(r,l)&&re(o,"get",r),re(o,"get",l));const{has:c}=Xt(o),d=t?Dn:e?Bn:fe;if(c.call(o,r))return d(i.get(r));if(c.call(o,l))return d(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&re(W(r),"iterate",lt),r.size},has(r){const i=this.__v_raw,o=W(i),l=W(r);return e||(nt(r,l)&&re(o,"has",r),re(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=W(l),d=t?Dn:e?Bn:fe;return!e&&re(c,"iterate",lt),l.forEach((a,h)=>r.call(i,d(a),d(h),o))}};return le(n,e?{add:Zt("add"),set:Zt("set"),delete:Zt("delete"),clear:Zt("clear")}:{add(r){!t&&!we(r)&&!ct(r)&&(r=W(r));const i=W(this);return Xt(i).has.call(i,r)||(i.add(r),Ke(i,"add",r,r)),this},set(r,i){!t&&!we(i)&&!ct(i)&&(i=W(i));const o=W(this),{has:l,get:c}=Xt(o);let d=l.call(o,r);d||(r=W(r),d=l.call(o,r));const a=c.call(o,r);return o.set(r,i),d?nt(i,a)&&Ke(o,"set",r,i):Ke(o,"add",r,i),this},delete(r){const i=W(this),{has:o,get:l}=Xt(i);let c=o.call(i,r);c||(r=W(r),c=o.call(i,r)),l&&l.call(i,r);const d=i.delete(r);return c&&Ke(i,"delete",r,void 0),d},clear(){const r=W(this),i=r.size!==0,o=r.clear();return i&&Ke(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=so(r,e,t)}),n}function ls(e,t){const n=ro(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(k(n,r)&&r in s?n:s,r,i)}const io={get:ls(!1,!1)},oo={get:ls(!1,!0)},lo={get:ls(!0,!1)};const Or=new WeakMap,Tr=new WeakMap,Mr=new WeakMap,co=new WeakMap;function fo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function uo(e){return e.__v_skip||!Object.isExtensible(e)?0:fo(Ni(e))}function vn(e){return ct(e)?e:cs(e,!1,eo,io,Or)}function Ir(e){return cs(e,!1,no,oo,Tr)}function Fr(e){return cs(e,!0,to,lo,Mr)}function cs(e,t,n,s,r){if(!ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=uo(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function Ht(e){return ct(e)?Ht(e.__v_raw):!!(e&&e.__v_isReactive)}function ct(e){return!!(e&&e.__v_isReadonly)}function we(e){return!!(e&&e.__v_isShallow)}function fs(e){return e?!!e.__v_raw:!1}function W(e){const t=e&&e.__v_raw;return t?W(t):e}function Nr(e){return!k(e,"__v_skip")&&Object.isExtensible(e)&&gr(e,"__v_skip",!0),e}const fe=e=>ee(e)?vn(e):e,Bn=e=>ee(e)?Fr(e):e;function oe(e){return e?e.__v_isRef===!0:!1}function Hr(e){return $r(e,!1)}function ao(e){return $r(e,!0)}function $r(e,t){return oe(e)?e:new ho(e,t)}class ho{constructor(t,n){this.dep=new is,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:W(t),this._value=n?t:fe(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||we(t)||ct(t);t=s?t:W(t),nt(t,n)&&(this._rawValue=t,this._value=s?t:fe(t),this.dep.trigger())}}function _t(e){return oe(e)?e.value:e}const po={get:(e,t,n)=>t==="__v_raw"?e:_t(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return oe(r)&&!oe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function jr(e){return Ht(e)?e:new Proxy(e,po)}class go{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new is(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Vt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&J!==this)return yr(this,!0),!0}get value(){const t=this.dep.track();return Sr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function mo(e,t,n=!1){let s,r;return L(e)?s=e:(s=e.get,r=e.set),new go(s,r,n)}const en={},ln=new WeakMap;let ot;function _o(e,t=!1,n=ot){if(n){let s=ln.get(n);s||ln.set(n,s=[]),s.push(e)}}function vo(e,t,n=X){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,d=M=>r?M:we(M)||r===!1||r===0?tt(M,1):tt(M);let a,h,g,m,P=!1,O=!1;if(oe(e)?(h=()=>e.value,P=we(e)):Ht(e)?(h=()=>d(e),P=!0):D(e)?(O=!0,P=e.some(M=>Ht(M)||we(M)),h=()=>e.map(M=>{if(oe(M))return M.value;if(Ht(M))return d(M);if(L(M))return c?c(M,2):M()})):L(e)?t?h=c?()=>c(e,2):e:h=()=>{if(g){ke();try{g()}finally{qe()}}const M=ot;ot=a;try{return c?c(e,3,[m]):e(m)}finally{ot=M}}:h=$e,t&&r){const M=h,z=r===!0?1/0:r;h=()=>tt(M(),z)}const B=qi(),N=()=>{a.stop(),B&&B.active&&Xn(B.effects,a)};if(i&&t){const M=t;t=(...z)=>{M(...z),N()}}let T=O?new Array(e.length).fill(en):en;const H=M=>{if(!(!(a.flags&1)||!a.dirty&&!M))if(t){const z=a.run();if(r||P||(O?z.some((se,Z)=>nt(se,T[Z])):nt(z,T))){g&&g();const se=ot;ot=a;try{const Z=[z,T===en?void 0:O&&T[0]===en?[]:T,m];T=z,c?c(t,3,Z):t(...Z)}finally{ot=se}}}else a.run()};return l&&l(H),a=new vr(h),a.scheduler=o?()=>o(H,!1):H,m=M=>_o(M,!1,a),g=a.onStop=()=>{const M=ln.get(a);if(M){if(c)c(M,4);else for(const z of M)z();ln.delete(a)}},t?s?H(!0):T=a.run():o?o(H.bind(null,!0),!0):a.run(),N.pause=a.pause.bind(a),N.resume=a.resume.bind(a),N.stop=N,N}function tt(e,t=1/0,n){if(t<=0||!ee(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,oe(e))tt(e.value,t,n);else if(D(e))for(let s=0;s{tt(s,t,n)});else if(Hi(e)){for(const s in e)tt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&tt(e[s],t,n)}return e}/** -* @vue/runtime-core v3.5.20 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Qt(e,t,n,s){try{return s?e(...s):e()}catch(r){bn(r,t,n)}}function je(e,t,n,s){if(L(e)){const r=Qt(e,t,n,s);return r&&pr(r)&&r.catch(i=>{bn(i,t,n)}),r}if(D(e)){const r=[];for(let i=0;i>>1,r=ue[s],i=Wt(r);i=Wt(n)?ue.push(e):ue.splice(yo(t),0,e),e.flags|=1,Br()}}function Br(){cn||(cn=Lr.then(Vr))}function xo(e){D(e)?vt.push(...e):Xe&&e.id===-1?Xe.splice(pt+1,0,e):e.flags&1||(vt.push(e),e.flags|=1),Br()}function ws(e,t,n=Ne+1){for(;nWt(n)-Wt(s));if(vt.length=0,Xe){Xe.push(...t);return}for(Xe=t,pt=0;pte.id==null?e.flags&2?-1:1/0:e.id;function Vr(e){try{for(Ne=0;Ne{s._d&&Ns(-1);const i=fn(t);let o;try{o=e(...r)}finally{fn(i),s._d&&Ns(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function rt(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;oe.__isTeleport,Ro=Symbol("_leaveCb");function as(e,t){e.shapeFlag&6&&e.component?(e.transition=t,as(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}/*! #__NO_SIDE_EFFECTS__ */function Wr(e,t){return L(e)?le({name:e.name},t,{setup:e}):e}function kr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function $t(e,t,n,s,r=!1){if(D(e)){e.forEach((P,O)=>$t(P,t&&(D(t)?t[O]:t),n,s,r));return}if(jt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&$t(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?gs(s.component):s.el,o=r?null:i,{i:l,r:c}=e,d=t&&t.r,a=l.refs===X?l.refs={}:l.refs,h=l.setupState,g=W(h),m=h===X?dr:P=>k(g,P);if(d!=null&&d!==c){if(ne(d))a[d]=null,m(d)&&(h[d]=null);else if(oe(d)){d.value=null;const P=t;P.k&&(a[P.k]=null)}}if(L(c))Qt(c,l,12,[o,a]);else{const P=ne(c),O=oe(c);if(P||O){const B=()=>{if(e.f){const N=P?m(c)?h[c]:a[c]:c.value;if(r)D(N)&&Xn(N,i);else if(D(N))N.includes(i)||N.push(i);else if(P)a[c]=[i],m(c)&&(h[c]=a[c]);else{const T=[i];c.value=T,e.k&&(a[e.k]=T)}}else P?(a[c]=o,m(c)&&(h[c]=o)):O&&(c.value=o,e.k&&(a[e.k]=o))};o?(B.id=-1,me(B,n)):B()}}}_n().requestIdleCallback;_n().cancelIdleCallback;const jt=e=>!!e.type.__asyncLoader,qr=e=>e.type.__isKeepAlive;function Co(e,t){Gr(e,"a",t)}function Po(e,t){Gr(e,"da",t)}function Gr(e,t,n=ie){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(yn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)qr(r.parent.vnode)&&Ao(s,t,n,r),r=r.parent}}function Ao(e,t,n,s){const r=yn(t,e,s,!0);zr(()=>{Xn(s[t],r)},n)}function yn(e,t,n=ie,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{ke();const l=Yt(n),c=je(t,n,e,o);return l(),qe(),c});return s?r.unshift(i):r.push(i),i}}const Ge=e=>(t,n=ie)=>{(!qt||e==="sp")&&yn(e,(...s)=>t(...s),n)},Oo=Ge("bm"),To=Ge("m"),Mo=Ge("bu"),Io=Ge("u"),Fo=Ge("bum"),zr=Ge("um"),No=Ge("sp"),Ho=Ge("rtg"),$o=Ge("rtc");function jo(e,t=ie){yn("ec",e,t)}const Lo="components";function rf(e,t){return Bo(Lo,e,!0,t)||e}const Do=Symbol.for("v-ndc");function Bo(e,t,n=!0,s=!1){const r=Ee||ie;if(r){const i=r.type;{const l=Ol(i,!1);if(l&&(l===t||l===ye(t)||l===mn(ye(t))))return i}const o=Rs(r[e]||i[e],t)||Rs(r.appContext[e],t);return!o&&s?i:o}}function Rs(e,t){return e&&(e[t]||e[ye(t)]||e[mn(ye(t))])}const Un=e=>e?pi(e)?gs(e):Un(e.parent):null,Lt=le(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Un(e.parent),$root:e=>Un(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Yr(e),$forceUpdate:e=>e.f||(e.f=()=>{us(e.update)}),$nextTick:e=>e.n||(e.n=Dr.bind(e.proxy)),$watch:e=>ll.bind(e)}),On=(e,t)=>e!==X&&!e.__isScriptSetup&&k(e,t),Uo={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let d;if(t[0]!=="$"){const m=o[t];if(m!==void 0)switch(m){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(On(s,t))return o[t]=1,s[t];if(r!==X&&k(r,t))return o[t]=2,r[t];if((d=e.propsOptions[0])&&k(d,t))return o[t]=3,i[t];if(n!==X&&k(n,t))return o[t]=4,n[t];Vn&&(o[t]=0)}}const a=Lt[t];let h,g;if(a)return t==="$attrs"&&re(e.attrs,"get",""),a(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==X&&k(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,k(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return On(r,t)?(r[t]=n,!0):s!==X&&k(s,t)?(s[t]=n,!0):k(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i,type:o}},l){let c,d;return!!(n[l]||e!==X&&l[0]!=="$"&&k(e,l)||On(t,l)||(c=i[0])&&k(c,l)||k(s,l)||k(Lt,l)||k(r.config.globalProperties,l)||(d=o.__cssModules)&&d[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:k(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Cs(e){return D(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Vn=!0;function Vo(e){const t=Yr(e),n=e.proxy,s=e.ctx;Vn=!1,t.beforeCreate&&Ps(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:d,created:a,beforeMount:h,mounted:g,beforeUpdate:m,updated:P,activated:O,deactivated:B,beforeDestroy:N,beforeUnmount:T,destroyed:H,unmounted:M,render:z,renderTracked:se,renderTriggered:Z,errorCaptured:Ce,serverPrefetch:ze,expose:Pe,inheritAttrs:Qe,components:st,directives:Ae,filters:Rt}=t;if(d&&Ko(d,s,null),o)for(const G in o){const V=o[G];L(V)&&(s[G]=V.bind(n))}if(r){const G=r.call(n,n);ee(G)&&(e.data=vn(G))}if(Vn=!0,i)for(const G in i){const V=i[G],Le=L(V)?V.bind(n,n):L(V.get)?V.get.bind(n,n):$e,Ye=!L(V)&&L(V.set)?V.set.bind(n):$e,Oe=xe({get:Le,set:Ye});Object.defineProperty(s,G,{enumerable:!0,configurable:!0,get:()=>Oe.value,set:ae=>Oe.value=ae})}if(l)for(const G in l)Qr(l[G],s,n,G);if(c){const G=L(c)?c.call(n):c;Reflect.ownKeys(G).forEach(V=>{tn(V,G[V])})}a&&Ps(a,e,"c");function te(G,V){D(V)?V.forEach(Le=>G(Le.bind(n))):V&&G(V.bind(n))}if(te(Oo,h),te(To,g),te(Mo,m),te(Io,P),te(Co,O),te(Po,B),te(jo,Ce),te($o,se),te(Ho,Z),te(Fo,T),te(zr,M),te(No,ze),D(Pe))if(Pe.length){const G=e.exposed||(e.exposed={});Pe.forEach(V=>{Object.defineProperty(G,V,{get:()=>n[V],set:Le=>n[V]=Le,enumerable:!0})})}else e.exposed||(e.exposed={});z&&e.render===$e&&(e.render=z),Qe!=null&&(e.inheritAttrs=Qe),st&&(e.components=st),Ae&&(e.directives=Ae),ze&&kr(e)}function Ko(e,t,n=$e){D(e)&&(e=Kn(e));for(const s in e){const r=e[s];let i;ee(r)?"default"in r?i=We(r.from||s,r.default,!0):i=We(r.from||s):i=We(r),oe(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Ps(e,t,n){je(D(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Qr(e,t,n,s){let r=s.includes(".")?fi(n,s):()=>n[s];if(ne(e)){const i=t[e];L(i)&&nn(r,i)}else if(L(e))nn(r,e.bind(n));else if(ee(e))if(D(e))e.forEach(i=>Qr(i,t,n,s));else{const i=L(e.handler)?e.handler.bind(n):t[e.handler];L(i)&&nn(r,i,e)}}function Yr(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(d=>un(c,d,o,!0)),un(c,t,o)),ee(t)&&i.set(t,c),c}function un(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&un(e,i,n,!0),r&&r.forEach(o=>un(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Wo[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Wo={data:As,props:Os,emits:Os,methods:Tt,computed:Tt,beforeCreate:ce,created:ce,beforeMount:ce,mounted:ce,beforeUpdate:ce,updated:ce,beforeDestroy:ce,beforeUnmount:ce,destroyed:ce,unmounted:ce,activated:ce,deactivated:ce,errorCaptured:ce,serverPrefetch:ce,components:Tt,directives:Tt,watch:qo,provide:As,inject:ko};function As(e,t){return t?e?function(){return le(L(e)?e.call(this,this):e,L(t)?t.call(this,this):t)}:t:e}function ko(e,t){return Tt(Kn(e),Kn(t))}function Kn(e){if(D(e)){const t={};for(let n=0;n1)return n&&L(t)?t.call(s&&s.proxy):t}}const Xr={},Zr=()=>Object.create(Xr),ei=e=>Object.getPrototypeOf(e)===Xr;function Qo(e,t,n,s=!1){const r={},i=Zr();e.propsDefaults=Object.create(null),ti(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Ir(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Yo(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=W(r),[c]=e.propsOptions;let d=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,m]=ni(h,t,!0);le(o,g),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ee(e)&&s.set(e,mt),mt;if(D(i))for(let a=0;ae==="_"||e==="_ctx"||e==="$stable",ds=e=>D(e)?e.map(He):[He(e)],Xo=(e,t,n)=>{if(t._n)return t;const s=Eo((...r)=>ds(t(...r)),n);return s._c=!1,s},si=(e,t,n)=>{const s=e._ctx;for(const r in e){if(hs(r))continue;const i=e[r];if(L(i))t[r]=Xo(r,i,s);else if(i!=null){const o=ds(i);t[r]=()=>o}}},ri=(e,t)=>{const n=ds(t);e.slots.default=()=>n},ii=(e,t,n)=>{for(const s in t)(n||!hs(s))&&(e[s]=t[s])},Zo=(e,t,n)=>{const s=e.slots=Zr();if(e.vnode.shapeFlag&32){const r=t._;r?(ii(s,t,n),n&&gr(s,"_",r,!0)):si(t,s)}else t&&ri(e,t)},el=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=X;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:ii(r,t,n):(i=!t.$stable,si(t,r)),o=t}else t&&(ri(e,t),o={default:1});if(i)for(const l in r)!hs(l)&&o[l]==null&&delete r[l]},me=pl;function tl(e){return nl(e)}function nl(e,t){const n=_n();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:d,setElementText:a,parentNode:h,nextSibling:g,setScopeId:m=$e,insertStaticContent:P}=e,O=(f,u,p,v=null,y=null,_=null,w=void 0,S=null,E=!!u.dynamicChildren)=>{if(f===u)return;f&&!At(f,u)&&(v=b(f),ae(f,y,_,!0),f=null),u.patchFlag===-2&&(E=!1,u.dynamicChildren=null);const{type:x,ref:$,shapeFlag:C}=u;switch(x){case En:B(f,u,p,v);break;case yt:N(f,u,p,v);break;case sn:f==null&&T(u,p,v,w);break;case Ve:st(f,u,p,v,y,_,w,S,E);break;default:C&1?z(f,u,p,v,y,_,w,S,E):C&6?Ae(f,u,p,v,y,_,w,S,E):(C&64||C&128)&&x.process(f,u,p,v,y,_,w,S,E,I)}$!=null&&y?$t($,f&&f.ref,_,u||f,!u):$==null&&f&&f.ref!=null&&$t(f.ref,null,_,f,!0)},B=(f,u,p,v)=>{if(f==null)s(u.el=l(u.children),p,v);else{const y=u.el=f.el;u.children!==f.children&&d(y,u.children)}},N=(f,u,p,v)=>{f==null?s(u.el=c(u.children||""),p,v):u.el=f.el},T=(f,u,p,v)=>{[f.el,f.anchor]=P(f.children,u,p,v,f.el,f.anchor)},H=({el:f,anchor:u},p,v)=>{let y;for(;f&&f!==u;)y=g(f),s(f,p,v),f=y;s(u,p,v)},M=({el:f,anchor:u})=>{let p;for(;f&&f!==u;)p=g(f),r(f),f=p;r(u)},z=(f,u,p,v,y,_,w,S,E)=>{u.type==="svg"?w="svg":u.type==="math"&&(w="mathml"),f==null?se(u,p,v,y,_,w,S,E):ze(f,u,y,_,w,S,E)},se=(f,u,p,v,y,_,w,S)=>{let E,x;const{props:$,shapeFlag:C,transition:F,dirs:j}=f;if(E=f.el=o(f.type,_,$&&$.is,$),C&8?a(E,f.children):C&16&&Ce(f.children,E,null,v,y,Tn(f,_),w,S),j&&rt(f,null,v,"created"),Z(E,f,f.scopeId,w,v),$){for(const Y in $)Y!=="value"&&!It(Y)&&i(E,Y,null,$[Y],_,v);"value"in $&&i(E,"value",null,$.value,_),(x=$.onVnodeBeforeMount)&&Fe(x,v,f)}j&&rt(f,null,v,"beforeMount");const U=sl(y,F);U&&F.beforeEnter(E),s(E,u,p),((x=$&&$.onVnodeMounted)||U||j)&&me(()=>{x&&Fe(x,v,f),U&&F.enter(E),j&&rt(f,null,v,"mounted")},y)},Z=(f,u,p,v,y)=>{if(p&&m(f,p),v)for(let _=0;_{for(let x=E;x{const S=u.el=f.el;let{patchFlag:E,dynamicChildren:x,dirs:$}=u;E|=f.patchFlag&16;const C=f.props||X,F=u.props||X;let j;if(p&&it(p,!1),(j=F.onVnodeBeforeUpdate)&&Fe(j,p,u,f),$&&rt(u,f,p,"beforeUpdate"),p&&it(p,!0),(C.innerHTML&&F.innerHTML==null||C.textContent&&F.textContent==null)&&a(S,""),x?Pe(f.dynamicChildren,x,S,p,v,Tn(u,y),_):w||V(f,u,S,null,p,v,Tn(u,y),_,!1),E>0){if(E&16)Qe(S,C,F,p,y);else if(E&2&&C.class!==F.class&&i(S,"class",null,F.class,y),E&4&&i(S,"style",C.style,F.style,y),E&8){const U=u.dynamicProps;for(let Y=0;Y{j&&Fe(j,p,u,f),$&&rt(u,f,p,"updated")},v)},Pe=(f,u,p,v,y,_,w)=>{for(let S=0;S{if(u!==p){if(u!==X)for(const _ in u)!It(_)&&!(_ in p)&&i(f,_,u[_],null,y,v);for(const _ in p){if(It(_))continue;const w=p[_],S=u[_];w!==S&&_!=="value"&&i(f,_,S,w,y,v)}"value"in p&&i(f,"value",u.value,p.value,y)}},st=(f,u,p,v,y,_,w,S,E)=>{const x=u.el=f?f.el:l(""),$=u.anchor=f?f.anchor:l("");let{patchFlag:C,dynamicChildren:F,slotScopeIds:j}=u;j&&(S=S?S.concat(j):j),f==null?(s(x,p,v),s($,p,v),Ce(u.children||[],p,$,y,_,w,S,E)):C>0&&C&64&&F&&f.dynamicChildren?(Pe(f.dynamicChildren,F,p,y,_,w,S),(u.key!=null||y&&u===y.subTree)&&oi(f,u,!0)):V(f,u,p,$,y,_,w,S,E)},Ae=(f,u,p,v,y,_,w,S,E)=>{u.slotScopeIds=S,f==null?u.shapeFlag&512?y.ctx.activate(u,p,v,w,E):Rt(u,p,v,y,_,w,E):ut(f,u,E)},Rt=(f,u,p,v,y,_,w)=>{const S=f.component=Sl(f,v,y);if(qr(f)&&(S.ctx.renderer=I),Rl(S,!1,w),S.asyncDep){if(y&&y.registerDep(S,te,w),!f.el){const E=S.subTree=be(yt);N(null,E,u,p),f.placeholder=E.el}}else te(S,f,u,p,y,_,w)},ut=(f,u,p)=>{const v=u.component=f.component;if(hl(f,u,p))if(v.asyncDep&&!v.asyncResolved){G(v,u,p);return}else v.next=u,v.update();else u.el=f.el,v.vnode=u},te=(f,u,p,v,y,_,w)=>{const S=()=>{if(f.isMounted){let{next:C,bu:F,u:j,parent:U,vnode:Y}=f;{const Me=li(f);if(Me){C&&(C.el=Y.el,G(f,C,w)),Me.asyncDep.then(()=>{f.isUnmounted||S()});return}}let q=C,he;it(f,!1),C?(C.el=Y.el,G(f,C,w)):C=Y,F&&Rn(F),(he=C.props&&C.props.onVnodeBeforeUpdate)&&Fe(he,U,C,Y),it(f,!0);const de=Is(f),Te=f.subTree;f.subTree=de,O(Te,de,h(Te.el),b(Te),f,y,_),C.el=de.el,q===null&&dl(f,de.el),j&&me(j,y),(he=C.props&&C.props.onVnodeUpdated)&&me(()=>Fe(he,U,C,Y),y)}else{let C;const{el:F,props:j}=u,{bm:U,m:Y,parent:q,root:he,type:de}=f,Te=jt(u);it(f,!1),U&&Rn(U),!Te&&(C=j&&j.onVnodeBeforeMount)&&Fe(C,q,u),it(f,!0);{he.ce&&he.ce._def.shadowRoot!==!1&&he.ce._injectChildStyle(de);const Me=f.subTree=Is(f);O(null,Me,p,v,f,y,_),u.el=Me.el}if(Y&&me(Y,y),!Te&&(C=j&&j.onVnodeMounted)){const Me=u;me(()=>Fe(C,q,Me),y)}(u.shapeFlag&256||q&&jt(q.vnode)&&q.vnode.shapeFlag&256)&&f.a&&me(f.a,y),f.isMounted=!0,u=p=v=null}};f.scope.on();const E=f.effect=new vr(S);f.scope.off();const x=f.update=E.run.bind(E),$=f.job=E.runIfDirty.bind(E);$.i=f,$.id=f.uid,E.scheduler=()=>us($),it(f,!0),x()},G=(f,u,p)=>{u.component=f;const v=f.vnode.props;f.vnode=u,f.next=null,Yo(f,u.props,v,p),el(f,u.children,p),ke(),ws(f),qe()},V=(f,u,p,v,y,_,w,S,E=!1)=>{const x=f&&f.children,$=f?f.shapeFlag:0,C=u.children,{patchFlag:F,shapeFlag:j}=u;if(F>0){if(F&128){Ye(x,C,p,v,y,_,w,S,E);return}else if(F&256){Le(x,C,p,v,y,_,w,S,E);return}}j&8?($&16&&ve(x,y,_),C!==x&&a(p,C)):$&16?j&16?Ye(x,C,p,v,y,_,w,S,E):ve(x,y,_,!0):($&8&&a(p,""),j&16&&Ce(C,p,v,y,_,w,S,E))},Le=(f,u,p,v,y,_,w,S,E)=>{f=f||mt,u=u||mt;const x=f.length,$=u.length,C=Math.min(x,$);let F;for(F=0;F$?ve(f,y,_,!0,!1,C):Ce(u,p,v,y,_,w,S,E,C)},Ye=(f,u,p,v,y,_,w,S,E)=>{let x=0;const $=u.length;let C=f.length-1,F=$-1;for(;x<=C&&x<=F;){const j=f[x],U=u[x]=E?Ze(u[x]):He(u[x]);if(At(j,U))O(j,U,p,null,y,_,w,S,E);else break;x++}for(;x<=C&&x<=F;){const j=f[C],U=u[F]=E?Ze(u[F]):He(u[F]);if(At(j,U))O(j,U,p,null,y,_,w,S,E);else break;C--,F--}if(x>C){if(x<=F){const j=F+1,U=j<$?u[j].el:v;for(;x<=F;)O(null,u[x]=E?Ze(u[x]):He(u[x]),p,U,y,_,w,S,E),x++}}else if(x>F)for(;x<=C;)ae(f[x],y,_,!0),x++;else{const j=x,U=x,Y=new Map;for(x=U;x<=F;x++){const ge=u[x]=E?Ze(u[x]):He(u[x]);ge.key!=null&&Y.set(ge.key,x)}let q,he=0;const de=F-U+1;let Te=!1,Me=0;const Ct=new Array(de);for(x=0;x=de){ae(ge,y,_,!0);continue}let Ie;if(ge.key!=null)Ie=Y.get(ge.key);else for(q=U;q<=F;q++)if(Ct[q-U]===0&&At(ge,u[q])){Ie=q;break}Ie===void 0?ae(ge,y,_,!0):(Ct[Ie-U]=x+1,Ie>=Me?Me=Ie:Te=!0,O(ge,u[Ie],p,null,y,_,w,S,E),he++)}const vs=Te?rl(Ct):mt;for(q=vs.length-1,x=de-1;x>=0;x--){const ge=U+x,Ie=u[ge],bs=u[ge+1],ys=ge+1<$?bs.el||bs.placeholder:v;Ct[x]===0?O(null,Ie,p,ys,y,_,w,S,E):Te&&(q<0||x!==vs[q]?Oe(Ie,p,ys,2):q--)}}},Oe=(f,u,p,v,y=null)=>{const{el:_,type:w,transition:S,children:E,shapeFlag:x}=f;if(x&6){Oe(f.component.subTree,u,p,v);return}if(x&128){f.suspense.move(u,p,v);return}if(x&64){w.move(f,u,p,I);return}if(w===Ve){s(_,u,p);for(let C=0;CS.enter(_),y);else{const{leave:C,delayLeave:F,afterLeave:j}=S,U=()=>{f.ctx.isUnmounted?r(_):s(_,u,p)},Y=()=>{_._isLeaving&&_[Ro](!0),C(_,()=>{U(),j&&j()})};F?F(_,U,Y):Y()}else s(_,u,p)},ae=(f,u,p,v=!1,y=!1)=>{const{type:_,props:w,ref:S,children:E,dynamicChildren:x,shapeFlag:$,patchFlag:C,dirs:F,cacheIndex:j}=f;if(C===-2&&(y=!1),S!=null&&(ke(),$t(S,null,p,f,!0),qe()),j!=null&&(u.renderCache[j]=void 0),$&256){u.ctx.deactivate(f);return}const U=$&1&&F,Y=!jt(f);let q;if(Y&&(q=w&&w.onVnodeBeforeUnmount)&&Fe(q,u,f),$&6)Jt(f.component,p,v);else{if($&128){f.suspense.unmount(p,v);return}U&&rt(f,null,u,"beforeUnmount"),$&64?f.type.remove(f,u,p,I,v):x&&!x.hasOnce&&(_!==Ve||C>0&&C&64)?ve(x,u,p,!1,!0):(_===Ve&&C&384||!y&&$&16)&&ve(E,u,p),v&&at(f)}(Y&&(q=w&&w.onVnodeUnmounted)||U)&&me(()=>{q&&Fe(q,u,f),U&&rt(f,null,u,"unmounted")},p)},at=f=>{const{type:u,el:p,anchor:v,transition:y}=f;if(u===Ve){ht(p,v);return}if(u===sn){M(f);return}const _=()=>{r(p),y&&!y.persisted&&y.afterLeave&&y.afterLeave()};if(f.shapeFlag&1&&y&&!y.persisted){const{leave:w,delayLeave:S}=y,E=()=>w(p,_);S?S(f.el,_,E):E()}else _()},ht=(f,u)=>{let p;for(;f!==u;)p=g(f),r(f),f=p;r(u)},Jt=(f,u,p)=>{const{bum:v,scope:y,job:_,subTree:w,um:S,m:E,a:x}=f;Ms(E),Ms(x),v&&Rn(v),y.stop(),_&&(_.flags|=8,ae(w,f,u,p)),S&&me(S,u),me(()=>{f.isUnmounted=!0},u)},ve=(f,u,p,v=!1,y=!1,_=0)=>{for(let w=_;w{if(f.shapeFlag&6)return b(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const u=g(f.anchor||f.el),p=u&&u[So];return p?g(p):u};let A=!1;const R=(f,u,p)=>{f==null?u._vnode&&ae(u._vnode,null,null,!0):O(u._vnode||null,f,u,null,null,null,p),u._vnode=f,A||(A=!0,ws(),Ur(),A=!1)},I={p:O,um:ae,m:Oe,r:at,mt:Rt,mc:Ce,pc:V,pbc:Pe,n:b,o:e};return{render:R,hydrate:void 0,createApp:zo(R)}}function Tn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function it({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function sl(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function oi(e,t,n=!1){const s=e.children,r=t.children;if(D(s)&&D(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function li(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:li(t)}function Ms(e){if(e)for(let t=0;tWe(il);function nn(e,t,n){return ci(e,t,n)}function ci(e,t,n=X){const{immediate:s,deep:r,flush:i,once:o}=n,l=le({},n),c=t&&s||!t&&i!=="post";let d;if(qt){if(i==="sync"){const m=ol();d=m.__watcherHandles||(m.__watcherHandles=[])}else if(!c){const m=()=>{};return m.stop=$e,m.resume=$e,m.pause=$e,m}}const a=ie;l.call=(m,P,O)=>je(m,a,P,O);let h=!1;i==="post"?l.scheduler=m=>{me(m,a&&a.suspense)}:i!=="sync"&&(h=!0,l.scheduler=(m,P)=>{P?m():us(m)}),l.augmentJob=m=>{t&&(m.flags|=4),h&&(m.flags|=2,a&&(m.id=a.uid,m.i=a))};const g=vo(e,t,l);return qt&&(d?d.push(g):c&&g()),g}function ll(e,t,n){const s=this.proxy,r=ne(e)?e.includes(".")?fi(s,e):()=>s[e]:e.bind(s,s);let i;L(t)?i=t:(i=t.handler,n=t);const o=Yt(this),l=ci(r,i.bind(s),n);return o(),l}function fi(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ye(t)}Modifiers`]||e[`${ft(t)}Modifiers`];function fl(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||X;let r=n;const i=t.startsWith("update:"),o=i&&cl(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>ne(a)?a.trim():a)),o.number&&(r=n.map(Li)));let l,c=s[l=wn(t)]||s[l=wn(ye(t))];!c&&i&&(c=s[l=wn(ft(t))]),c&&je(c,e,6,r);const d=s[l+"Once"];if(d){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,je(d,e,6,r)}}function ui(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!L(e)){const c=d=>{const a=ui(d,t,!0);a&&(l=!0,le(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ee(e)&&s.set(e,null),null):(D(i)?i.forEach(c=>o[c]=null):le(o,i),ee(e)&&s.set(e,o),o)}function xn(e,t){return!e||!dn(t)?!1:(t=t.slice(2).replace(/Once$/,""),k(e,t[0].toLowerCase()+t.slice(1))||k(e,ft(t))||k(e,t))}function Is(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:d,renderCache:a,props:h,data:g,setupState:m,ctx:P,inheritAttrs:O}=e,B=fn(e);let N,T;try{if(n.shapeFlag&4){const M=r||s,z=M;N=He(d.call(z,M,a,h,m,g,P)),T=l}else{const M=t;N=He(M.length>1?M(h,{attrs:l,slots:o,emit:c}):M(h,null)),T=t.props?l:ul(l)}}catch(M){Dt.length=0,bn(M,e,1),N=be(yt)}let H=N;if(T&&O!==!1){const M=Object.keys(T),{shapeFlag:z}=H;M.length&&z&7&&(i&&M.some(Jn)&&(T=al(T,i)),H=xt(H,T,!1,!0))}return n.dirs&&(H=xt(H,null,!1,!0),H.dirs=H.dirs?H.dirs.concat(n.dirs):n.dirs),n.transition&&as(H,n.transition),N=H,fn(B),N}const ul=e=>{let t;for(const n in e)(n==="class"||n==="style"||dn(n))&&((t||(t={}))[n]=e[n]);return t},al=(e,t)=>{const n={};for(const s in e)(!Jn(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function hl(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,d=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Fs(s,o,d):!!o;if(c&8){const a=t.dynamicProps;for(let h=0;he.__isSuspense;function pl(e,t){t&&t.pendingBranch?D(e)?t.effects.push(...e):t.effects.push(e):xo(e)}const Ve=Symbol.for("v-fgt"),En=Symbol.for("v-txt"),yt=Symbol.for("v-cmt"),sn=Symbol.for("v-stc"),Dt=[];let _e=null;function of(e=!1){Dt.push(_e=e?null:[])}function gl(){Dt.pop(),_e=Dt[Dt.length-1]||null}let kt=1;function Ns(e,t=!1){kt+=e,e<0&&_e&&t&&(_e.hasOnce=!0)}function ml(e){return e.dynamicChildren=kt>0?_e||mt:null,gl(),kt>0&&_e&&_e.push(e),e}function lf(e,t,n,s,r,i){return ml(di(e,t,n,s,r,i,!0))}function an(e){return e?e.__v_isVNode===!0:!1}function At(e,t){return e.type===t.type&&e.key===t.key}const hi=({key:e})=>e??null,rn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ne(e)||oe(e)||L(e)?{i:Ee,r:e,k:t,f:!!n}:e:null);function di(e,t=null,n=null,s=0,r=null,i=e===Ve?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&hi(t),ref:t&&rn(t),scopeId:Kr,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Ee};return l?(ps(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ne(n)?8:16),kt>0&&!o&&_e&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&_e.push(c),c}const be=_l;function _l(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Do)&&(e=yt),an(e)){const l=xt(e,t,!0);return n&&ps(l,n),kt>0&&!i&&_e&&(l.shapeFlag&6?_e[_e.indexOf(e)]=l:_e.push(l)),l.patchFlag=-2,l}if(Tl(e)&&(e=e.__vccOpts),t){t=vl(t);let{class:l,style:c}=t;l&&!ne(l)&&(t.class=ts(l)),ee(c)&&(fs(c)&&!D(c)&&(c=le({},c)),t.style=es(c))}const o=ne(e)?1:ai(e)?128:wo(e)?64:ee(e)?4:L(e)?2:0;return di(e,t,n,s,r,o,i,!0)}function vl(e){return e?fs(e)||ei(e)?le({},e):e:null}function xt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,d=t?yl(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:d,key:d&&hi(d),ref:t&&t.ref?n&&i?D(i)?i.concat(rn(t)):[i,rn(t)]:rn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ve?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&xt(e.ssContent),ssFallback:e.ssFallback&&xt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&as(a,c.clone(a)),a}function bl(e=" ",t=0){return be(En,null,e,t)}function cf(e,t){const n=be(sn,null,e);return n.staticCount=t,n}function He(e){return e==null||typeof e=="boolean"?be(yt):D(e)?be(Ve,null,e.slice()):an(e)?Ze(e):be(En,null,String(e))}function Ze(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:xt(e)}function ps(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(D(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),ps(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!ei(t)?t._ctx=Ee:r===3&&Ee&&(Ee.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else L(t)?(t={default:t,_ctx:Ee},n=32):(t=String(t),s&64?(n=16,t=[bl(t)]):n=8);e.children=t,e.shapeFlag|=n}function yl(...e){const t={};for(let n=0;nie||Ee;let hn,kn;{const e=_n(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};hn=t("__VUE_INSTANCE_SETTERS__",n=>ie=n),kn=t("__VUE_SSR_SETTERS__",n=>qt=n)}const Yt=e=>{const t=ie;return hn(e),e.scope.on(),()=>{e.scope.off(),hn(t)}},Hs=()=>{ie&&ie.scope.off(),hn(null)};function pi(e){return e.vnode.shapeFlag&4}let qt=!1;function Rl(e,t=!1,n=!1){t&&kn(t);const{props:s,children:r}=e.vnode,i=pi(e);Qo(e,s,i,t),Zo(e,r,n||t);const o=i?Cl(e,t):void 0;return t&&kn(!1),o}function Cl(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Uo);const{setup:s}=n;if(s){ke();const r=e.setupContext=s.length>1?Al(e):null,i=Yt(e),o=Qt(s,e,0,[e.props,r]),l=pr(o);if(qe(),i(),(l||e.sp)&&!jt(e)&&kr(e),l){if(o.then(Hs,Hs),t)return o.then(c=>{$s(e,c)}).catch(c=>{bn(c,e,0)});e.asyncDep=o}else $s(e,o)}else gi(e)}function $s(e,t,n){L(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=jr(t)),gi(e)}function gi(e,t,n){const s=e.type;e.render||(e.render=s.render||$e);{const r=Yt(e);ke();try{Vo(e)}finally{qe(),r()}}}const Pl={get(e,t){return re(e,"get",""),e[t]}};function Al(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Pl),slots:e.slots,emit:e.emit,expose:t}}function gs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(jr(Nr(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Lt)return Lt[n](e)},has(t,n){return n in t||n in Lt}})):e.proxy}function Ol(e,t=!0){return L(e)?e.displayName||e.name:e.name||t&&e.__name}function Tl(e){return L(e)&&"__vccOpts"in e}const xe=(e,t)=>mo(e,t,qt);function mi(e,t,n){const s=arguments.length;return s===2?ee(t)&&!D(t)?an(t)?be(e,null,[t]):be(e,t):be(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&an(n)&&(n=[n]),be(e,t,n))}const Ml="3.5.20";/** -* @vue/runtime-dom v3.5.20 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let qn;const js=typeof window<"u"&&window.trustedTypes;if(js)try{qn=js.createPolicy("vue",{createHTML:e=>e})}catch{}const _i=qn?e=>qn.createHTML(e):e=>e,Il="http://www.w3.org/2000/svg",Fl="http://www.w3.org/1998/Math/MathML",Ue=typeof document<"u"?document:null,Ls=Ue&&Ue.createElement("template"),Nl={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ue.createElementNS(Il,e):t==="mathml"?Ue.createElementNS(Fl,e):n?Ue.createElement(e,{is:n}):Ue.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ue.createTextNode(e),createComment:e=>Ue.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ue.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Ls.innerHTML=_i(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Ls.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Hl=Symbol("_vtc");function $l(e,t,n){const s=e[Hl];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ds=Symbol("_vod"),jl=Symbol("_vsh"),Ll=Symbol(""),Dl=/(^|;)\s*display\s*:/;function Bl(e,t,n){const s=e.style,r=ne(n);let i=!1;if(n&&!r){if(t)if(ne(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&on(s,l,"")}else for(const o in t)n[o]==null&&on(s,o,"");for(const o in n)o==="display"&&(i=!0),on(s,o,n[o])}else if(r){if(t!==n){const o=s[Ll];o&&(n+=";"+o),s.cssText=n,i=Dl.test(n)}}else t&&e.removeAttribute("style");Ds in e&&(e[Ds]=i?s.display:"",e[jl]&&(s.display="none"))}const Bs=/\s*!important$/;function on(e,t,n){if(D(n))n.forEach(s=>on(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Ul(e,t);Bs.test(n)?e.setProperty(ft(s),n.replace(Bs,""),"important"):e[s]=n}}const Us=["Webkit","Moz","ms"],Mn={};function Ul(e,t){const n=Mn[t];if(n)return n;let s=ye(t);if(s!=="filter"&&s in e)return Mn[t]=s;s=mn(s);for(let r=0;rIn||(ql.then(()=>In=0),In=Date.now());function zl(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;je(Ql(s,n.value),t,5,[s])};return n.value=e,n.attached=Gl(),n}function Ql(e,t){if(D(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Gs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Yl=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?$l(e,s,o):t==="style"?Bl(e,n,s):dn(t)?Jn(t)||Wl(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Jl(e,t,s,o))?(Ws(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Ks(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ne(s))?Ws(e,ye(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Ks(e,t,s,o))};function Jl(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Gs(t)&&L(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Gs(t)&&ne(n)?!1:t in e}const Xl=le({patchProp:Yl},Nl);let zs;function Zl(){return zs||(zs=tl(Xl))}const ff=(...e)=>{const t=Zl().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=tc(s);if(!r)return;const i=t._component;!L(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,ec(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function ec(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function tc(e){return ne(e)?document.querySelector(e):e}/*! - * pinia v2.3.1 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */const nc=Symbol();var Qs;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Qs||(Qs={}));function uf(){const e=ki(!0),t=e.run(()=>Hr({}));let n=[],s=[];const r=Nr({install(i){r._a=i,i.provide(nc,r),i.config.globalProperties.$pinia=r,s.forEach(o=>n.push(o)),s=[]},use(i){return this._a?n.push(i):s.push(i),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return r}/*! - * vue-router v4.5.1 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */const gt=typeof document<"u";function vi(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function sc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&vi(e.default)}const K=Object.assign;function Fn(e,t){const n={};for(const s in t){const r=t[s];n[s]=Re(r)?r.map(e):e(r)}return n}const Bt=()=>{},Re=Array.isArray,bi=/#/g,rc=/&/g,ic=/\//g,oc=/=/g,lc=/\?/g,yi=/\+/g,cc=/%5B/g,fc=/%5D/g,xi=/%5E/g,uc=/%60/g,Ei=/%7B/g,ac=/%7C/g,Si=/%7D/g,hc=/%20/g;function ms(e){return encodeURI(""+e).replace(ac,"|").replace(cc,"[").replace(fc,"]")}function dc(e){return ms(e).replace(Ei,"{").replace(Si,"}").replace(xi,"^")}function Gn(e){return ms(e).replace(yi,"%2B").replace(hc,"+").replace(bi,"%23").replace(rc,"%26").replace(uc,"`").replace(Ei,"{").replace(Si,"}").replace(xi,"^")}function pc(e){return Gn(e).replace(oc,"%3D")}function gc(e){return ms(e).replace(bi,"%23").replace(lc,"%3F")}function mc(e){return e==null?"":gc(e).replace(ic,"%2F")}function Gt(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const _c=/\/$/,vc=e=>e.replace(_c,"");function Nn(e,t,n="/"){let s,r={},i="",o="";const l=t.indexOf("#");let c=t.indexOf("?");return l=0&&(c=-1),c>-1&&(s=t.slice(0,c),i=t.slice(c+1,l>-1?l:t.length),r=e(i)),l>-1&&(s=s||t.slice(0,l),o=t.slice(l,t.length)),s=Ec(s??t,n),{fullPath:s+(i&&"?")+i+o,path:s,query:r,hash:Gt(o)}}function bc(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Ys(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function yc(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&Et(t.matched[s],n.matched[r])&&wi(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Et(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function wi(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!xc(e[n],t[n]))return!1;return!0}function xc(e,t){return Re(e)?Js(e,t):Re(t)?Js(t,e):e===t}function Js(e,t){return Re(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Ec(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let i=n.length-1,o,l;for(o=0;o1&&i--;else break;return n.slice(0,i).join("/")+"/"+s.slice(o).join("/")}const Je={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var zt;(function(e){e.pop="pop",e.push="push"})(zt||(zt={}));var Ut;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Ut||(Ut={}));function Sc(e){if(!e)if(gt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),vc(e)}const wc=/^[^#]+#/;function Rc(e,t){return e.replace(wc,"#")+t}function Cc(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const Sn=()=>({left:window.scrollX,top:window.scrollY});function Pc(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Cc(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Xs(e,t){return(history.state?history.state.position-t:-1)+e}const zn=new Map;function Ac(e,t){zn.set(e,t)}function Oc(e){const t=zn.get(e);return zn.delete(e),t}let Tc=()=>location.protocol+"//"+location.host;function Ri(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let l=r.includes(e.slice(i))?e.slice(i).length:1,c=r.slice(l);return c[0]!=="/"&&(c="/"+c),Ys(c,"")}return Ys(n,e)+s+r}function Mc(e,t,n,s){let r=[],i=[],o=null;const l=({state:g})=>{const m=Ri(e,location),P=n.value,O=t.value;let B=0;if(g){if(n.value=m,t.value=g,o&&o===P){o=null;return}B=O?g.position-O.position:0}else s(m);r.forEach(N=>{N(n.value,P,{delta:B,type:zt.pop,direction:B?B>0?Ut.forward:Ut.back:Ut.unknown})})};function c(){o=n.value}function d(g){r.push(g);const m=()=>{const P=r.indexOf(g);P>-1&&r.splice(P,1)};return i.push(m),m}function a(){const{history:g}=window;g.state&&g.replaceState(K({},g.state,{scroll:Sn()}),"")}function h(){for(const g of i)g();i=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",a)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",a,{passive:!0}),{pauseListeners:c,listen:d,destroy:h}}function Zs(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?Sn():null}}function Ic(e){const{history:t,location:n}=window,s={value:Ri(e,n)},r={value:t.state};r.value||i(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(c,d,a){const h=e.indexOf("#"),g=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+c:Tc()+e+c;try{t[a?"replaceState":"pushState"](d,"",g),r.value=d}catch(m){console.error(m),n[a?"replace":"assign"](g)}}function o(c,d){const a=K({},t.state,Zs(r.value.back,c,r.value.forward,!0),d,{position:r.value.position});i(c,a,!0),s.value=c}function l(c,d){const a=K({},r.value,t.state,{forward:c,scroll:Sn()});i(a.current,a,!0);const h=K({},Zs(s.value,c,null),{position:a.position+1},d);i(c,h,!1),s.value=c}return{location:s,state:r,push:l,replace:o}}function af(e){e=Sc(e);const t=Ic(e),n=Mc(e,t.state,t.location,t.replace);function s(i,o=!0){o||n.pauseListeners(),history.go(i)}const r=K({location:"",base:e,go:s,createHref:Rc.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Fc(e){return typeof e=="string"||e&&typeof e=="object"}function Ci(e){return typeof e=="string"||typeof e=="symbol"}const Pi=Symbol("");var er;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(er||(er={}));function St(e,t){return K(new Error,{type:e,[Pi]:!0},t)}function Be(e,t){return e instanceof Error&&Pi in e&&(t==null||!!(e.type&t))}const tr="[^/]+?",Nc={sensitive:!1,strict:!1,start:!0,end:!0},Hc=/[.+*?^${}()[\]/\\]/g;function $c(e,t){const n=K({},Nc,t),s=[];let r=n.start?"^":"";const i=[];for(const d of e){const a=d.length?[]:[90];n.strict&&!d.length&&(r+="/");for(let h=0;ht.length?t.length===1&&t[0]===80?1:-1:0}function Ai(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Lc={type:0,value:""},Dc=/[a-zA-Z0-9_]/;function Bc(e){if(!e)return[[]];if(e==="/")return[[Lc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${d}": ${m}`)}let n=0,s=n;const r=[];let i;function o(){i&&r.push(i),i=[]}let l=0,c,d="",a="";function h(){d&&(n===0?i.push({type:0,value:d}):n===1||n===2||n===3?(i.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${d}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:d,regexp:a,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),d="")}function g(){d+=c}for(;l{o(H)}:Bt}function o(h){if(Ci(h)){const g=s.get(h);g&&(s.delete(h),n.splice(n.indexOf(g),1),g.children.forEach(o),g.alias.forEach(o))}else{const g=n.indexOf(h);g>-1&&(n.splice(g,1),h.record.name&&s.delete(h.record.name),h.children.forEach(o),h.alias.forEach(o))}}function l(){return n}function c(h){const g=kc(h,n);n.splice(g,0,h),h.record.name&&!ir(h)&&s.set(h.record.name,h)}function d(h,g){let m,P={},O,B;if("name"in h&&h.name){if(m=s.get(h.name),!m)throw St(1,{location:h});B=m.record.name,P=K(sr(g.params,m.keys.filter(H=>!H.optional).concat(m.parent?m.parent.keys.filter(H=>H.optional):[]).map(H=>H.name)),h.params&&sr(h.params,m.keys.map(H=>H.name))),O=m.stringify(P)}else if(h.path!=null)O=h.path,m=n.find(H=>H.re.test(O)),m&&(P=m.parse(O),B=m.record.name);else{if(m=g.name?s.get(g.name):n.find(H=>H.re.test(g.path)),!m)throw St(1,{location:h,currentLocation:g});B=m.record.name,P=K({},g.params,h.params),O=m.stringify(P)}const N=[];let T=m;for(;T;)N.unshift(T.record),T=T.parent;return{name:B,path:O,params:P,matched:N,meta:Wc(N)}}e.forEach(h=>i(h));function a(){n.length=0,s.clear()}return{addRoute:i,resolve:d,removeRoute:o,clearRoutes:a,getRoutes:l,getRecordMatcher:r}}function sr(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function rr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Kc(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Kc(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function ir(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Wc(e){return e.reduce((t,n)=>K(t,n.meta),{})}function or(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function kc(e,t){let n=0,s=t.length;for(;n!==s;){const i=n+s>>1;Ai(e,t[i])<0?s=i:n=i+1}const r=qc(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function qc(e){let t=e;for(;t=t.parent;)if(Oi(t)&&Ai(e,t)===0)return t}function Oi({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Gc(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ri&&Gn(i)):[s&&Gn(s)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+n,i!=null&&(t+="="+i))})}return t}function zc(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=Re(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Qc=Symbol(""),cr=Symbol(""),_s=Symbol(""),Ti=Symbol(""),Qn=Symbol("");function Ot(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function et(e,t,n,s,r,i=o=>o()){const o=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,c)=>{const d=g=>{g===!1?c(St(4,{from:n,to:t})):g instanceof Error?c(g):Fc(g)?c(St(2,{from:t,to:g})):(o&&s.enterCallbacks[r]===o&&typeof g=="function"&&o.push(g),l())},a=i(()=>e.call(s&&s.instances[r],t,n,d));let h=Promise.resolve(a);e.length<3&&(h=h.then(d)),h.catch(g=>c(g))})}function Hn(e,t,n,s,r=i=>i()){const i=[];for(const o of e)for(const l in o.components){let c=o.components[l];if(!(t!=="beforeRouteEnter"&&!o.instances[l]))if(vi(c)){const a=(c.__vccOpts||c)[t];a&&i.push(et(a,n,s,o,l,r))}else{let d=c();i.push(()=>d.then(a=>{if(!a)throw new Error(`Couldn't resolve component "${l}" at "${o.path}"`);const h=sc(a)?a.default:a;o.mods[l]=a,o.components[l]=h;const m=(h.__vccOpts||h)[t];return m&&et(m,n,s,o,l,r)()}))}}return i}function fr(e){const t=We(_s),n=We(Ti),s=xe(()=>{const c=_t(e.to);return t.resolve(c)}),r=xe(()=>{const{matched:c}=s.value,{length:d}=c,a=c[d-1],h=n.matched;if(!a||!h.length)return-1;const g=h.findIndex(Et.bind(null,a));if(g>-1)return g;const m=ur(c[d-2]);return d>1&&ur(a)===m&&h[h.length-1].path!==m?h.findIndex(Et.bind(null,c[d-2])):g}),i=xe(()=>r.value>-1&&ef(n.params,s.value.params)),o=xe(()=>r.value>-1&&r.value===n.matched.length-1&&wi(n.params,s.value.params));function l(c={}){if(Zc(c)){const d=t[_t(e.replace)?"replace":"push"](_t(e.to)).catch(Bt);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>d),d}return Promise.resolve()}return{route:s,href:xe(()=>s.value.href),isActive:i,isExactActive:o,navigate:l}}function Yc(e){return e.length===1?e[0]:e}const Jc=Wr({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:fr,setup(e,{slots:t}){const n=vn(fr(e)),{options:s}=We(_s),r=xe(()=>({[ar(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[ar(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&Yc(t.default(n));return e.custom?i:mi("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),Xc=Jc;function Zc(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ef(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!Re(r)||r.length!==s.length||s.some((i,o)=>i!==r[o]))return!1}return!0}function ur(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const ar=(e,t,n)=>e??t??n,tf=Wr({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=We(Qn),r=xe(()=>e.route||s.value),i=We(cr,0),o=xe(()=>{let d=_t(i);const{matched:a}=r.value;let h;for(;(h=a[d])&&!h.components;)d++;return d}),l=xe(()=>r.value.matched[o.value]);tn(cr,xe(()=>o.value+1)),tn(Qc,l),tn(Qn,r);const c=Hr();return nn(()=>[c.value,l.value,e.name],([d,a,h],[g,m,P])=>{a&&(a.instances[h]=d,m&&m!==a&&d&&d===g&&(a.leaveGuards.size||(a.leaveGuards=m.leaveGuards),a.updateGuards.size||(a.updateGuards=m.updateGuards))),d&&a&&(!m||!Et(a,m)||!g)&&(a.enterCallbacks[h]||[]).forEach(O=>O(d))},{flush:"post"}),()=>{const d=r.value,a=e.name,h=l.value,g=h&&h.components[a];if(!g)return hr(n.default,{Component:g,route:d});const m=h.props[a],P=m?m===!0?d.params:typeof m=="function"?m(d):m:null,B=mi(g,K({},P,t,{onVnodeUnmounted:N=>{N.component.isUnmounted&&(h.instances[a]=null)},ref:c}));return hr(n.default,{Component:B,route:d})||B}}});function hr(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const nf=tf;function hf(e){const t=Vc(e.routes,e),n=e.parseQuery||Gc,s=e.stringifyQuery||lr,r=e.history,i=Ot(),o=Ot(),l=Ot(),c=ao(Je);let d=Je;gt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const a=Fn.bind(null,b=>""+b),h=Fn.bind(null,mc),g=Fn.bind(null,Gt);function m(b,A){let R,I;return Ci(b)?(R=t.getRecordMatcher(b),I=A):I=b,t.addRoute(I,R)}function P(b){const A=t.getRecordMatcher(b);A&&t.removeRoute(A)}function O(){return t.getRoutes().map(b=>b.record)}function B(b){return!!t.getRecordMatcher(b)}function N(b,A){if(A=K({},A||c.value),typeof b=="string"){const p=Nn(n,b,A.path),v=t.resolve({path:p.path},A),y=r.createHref(p.fullPath);return K(p,v,{params:g(v.params),hash:Gt(p.hash),redirectedFrom:void 0,href:y})}let R;if(b.path!=null)R=K({},b,{path:Nn(n,b.path,A.path).path});else{const p=K({},b.params);for(const v in p)p[v]==null&&delete p[v];R=K({},b,{params:h(p)}),A.params=h(A.params)}const I=t.resolve(R,A),Q=b.hash||"";I.params=a(g(I.params));const f=bc(s,K({},b,{hash:dc(Q),path:I.path})),u=r.createHref(f);return K({fullPath:f,hash:Q,query:s===lr?zc(b.query):b.query||{}},I,{redirectedFrom:void 0,href:u})}function T(b){return typeof b=="string"?Nn(n,b,c.value.path):K({},b)}function H(b,A){if(d!==b)return St(8,{from:A,to:b})}function M(b){return Z(b)}function z(b){return M(K(T(b),{replace:!0}))}function se(b){const A=b.matched[b.matched.length-1];if(A&&A.redirect){const{redirect:R}=A;let I=typeof R=="function"?R(b):R;return typeof I=="string"&&(I=I.includes("?")||I.includes("#")?I=T(I):{path:I},I.params={}),K({query:b.query,hash:b.hash,params:I.path!=null?{}:b.params},I)}}function Z(b,A){const R=d=N(b),I=c.value,Q=b.state,f=b.force,u=b.replace===!0,p=se(R);if(p)return Z(K(T(p),{state:typeof p=="object"?K({},Q,p.state):Q,force:f,replace:u}),A||R);const v=R;v.redirectedFrom=A;let y;return!f&&yc(s,I,R)&&(y=St(16,{to:v,from:I}),Oe(I,I,!0,!1)),(y?Promise.resolve(y):Pe(v,I)).catch(_=>Be(_)?Be(_,2)?_:Ye(_):V(_,v,I)).then(_=>{if(_){if(Be(_,2))return Z(K({replace:u},T(_.to),{state:typeof _.to=="object"?K({},Q,_.to.state):Q,force:f}),A||v)}else _=st(v,I,!0,u,Q);return Qe(v,I,_),_})}function Ce(b,A){const R=H(b,A);return R?Promise.reject(R):Promise.resolve()}function ze(b){const A=ht.values().next().value;return A&&typeof A.runWithContext=="function"?A.runWithContext(b):b()}function Pe(b,A){let R;const[I,Q,f]=sf(b,A);R=Hn(I.reverse(),"beforeRouteLeave",b,A);for(const p of I)p.leaveGuards.forEach(v=>{R.push(et(v,b,A))});const u=Ce.bind(null,b,A);return R.push(u),ve(R).then(()=>{R=[];for(const p of i.list())R.push(et(p,b,A));return R.push(u),ve(R)}).then(()=>{R=Hn(Q,"beforeRouteUpdate",b,A);for(const p of Q)p.updateGuards.forEach(v=>{R.push(et(v,b,A))});return R.push(u),ve(R)}).then(()=>{R=[];for(const p of f)if(p.beforeEnter)if(Re(p.beforeEnter))for(const v of p.beforeEnter)R.push(et(v,b,A));else R.push(et(p.beforeEnter,b,A));return R.push(u),ve(R)}).then(()=>(b.matched.forEach(p=>p.enterCallbacks={}),R=Hn(f,"beforeRouteEnter",b,A,ze),R.push(u),ve(R))).then(()=>{R=[];for(const p of o.list())R.push(et(p,b,A));return R.push(u),ve(R)}).catch(p=>Be(p,8)?p:Promise.reject(p))}function Qe(b,A,R){l.list().forEach(I=>ze(()=>I(b,A,R)))}function st(b,A,R,I,Q){const f=H(b,A);if(f)return f;const u=A===Je,p=gt?history.state:{};R&&(I||u?r.replace(b.fullPath,K({scroll:u&&p&&p.scroll},Q)):r.push(b.fullPath,Q)),c.value=b,Oe(b,A,R,u),Ye()}let Ae;function Rt(){Ae||(Ae=r.listen((b,A,R)=>{if(!Jt.listening)return;const I=N(b),Q=se(I);if(Q){Z(K(Q,{replace:!0,force:!0}),I).catch(Bt);return}d=I;const f=c.value;gt&&Ac(Xs(f.fullPath,R.delta),Sn()),Pe(I,f).catch(u=>Be(u,12)?u:Be(u,2)?(Z(K(T(u.to),{force:!0}),I).then(p=>{Be(p,20)&&!R.delta&&R.type===zt.pop&&r.go(-1,!1)}).catch(Bt),Promise.reject()):(R.delta&&r.go(-R.delta,!1),V(u,I,f))).then(u=>{u=u||st(I,f,!1),u&&(R.delta&&!Be(u,8)?r.go(-R.delta,!1):R.type===zt.pop&&Be(u,20)&&r.go(-1,!1)),Qe(I,f,u)}).catch(Bt)}))}let ut=Ot(),te=Ot(),G;function V(b,A,R){Ye(b);const I=te.list();return I.length?I.forEach(Q=>Q(b,A,R)):console.error(b),Promise.reject(b)}function Le(){return G&&c.value!==Je?Promise.resolve():new Promise((b,A)=>{ut.add([b,A])})}function Ye(b){return G||(G=!b,Rt(),ut.list().forEach(([A,R])=>b?R(b):A()),ut.reset()),b}function Oe(b,A,R,I){const{scrollBehavior:Q}=e;if(!gt||!Q)return Promise.resolve();const f=!R&&Oc(Xs(b.fullPath,0))||(I||!R)&&history.state&&history.state.scroll||null;return Dr().then(()=>Q(b,A,f)).then(u=>u&&Pc(u)).catch(u=>V(u,b,A))}const ae=b=>r.go(b);let at;const ht=new Set,Jt={currentRoute:c,listening:!0,addRoute:m,removeRoute:P,clearRoutes:t.clearRoutes,hasRoute:B,getRoutes:O,resolve:N,options:e,push:M,replace:z,go:ae,back:()=>ae(-1),forward:()=>ae(1),beforeEach:i.add,beforeResolve:o.add,afterEach:l.add,onError:te.add,isReady:Le,install(b){const A=this;b.component("RouterLink",Xc),b.component("RouterView",nf),b.config.globalProperties.$router=A,Object.defineProperty(b.config.globalProperties,"$route",{enumerable:!0,get:()=>_t(c)}),gt&&!at&&c.value===Je&&(at=!0,M(r.location).catch(Q=>{}));const R={};for(const Q in Je)Object.defineProperty(R,Q,{get:()=>c.value[Q],enumerable:!0});b.provide(_s,A),b.provide(Ti,Ir(R)),b.provide(Qn,c);const I=b.unmount;ht.add(b),b.unmount=function(){ht.delete(b),ht.size<1&&(d=Je,Ae&&Ae(),Ae=null,c.value=Je,at=!1,G=!1),I()}}};function ve(b){return b.reduce((A,R)=>A.then(()=>ze(R)),Promise.resolve())}return Jt}function sf(e,t){const n=[],s=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let o=0;oEt(d,l))?s.push(l):n.push(l));const c=e.matched[o];c&&(t.matched.find(d=>Et(d,c))||r.push(c))}return[n,s,r]}export{di as a,be as b,lf as c,Wr as d,bl as e,cf as f,hf as g,af as h,ff as i,uf as j,of as o,rf as r,Eo as w}; diff --git a/server/static-vue3/index.html b/server/static-vue3/index.html deleted file mode 100644 index d3300d04..00000000 --- a/server/static-vue3/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - DigiScript Vue 3 - - - - - -
- - \ No newline at end of file From 91d5303197dec255fab49b8b2899ad63fd2bd4f5 Mon Sep 17 00:00:00 2001 From: Tim Bradgate Date: Sat, 30 Aug 2025 17:58:55 +0100 Subject: [PATCH 3/8] Fix Python code quality issues in Vue 3 migration files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Apply Black formatting to vue3_controllers.py and app_server.py - Fix isort import sorting with proper blank line separation - Remove trailing whitespace and add missing final newline - Standardize string quotes and line formatting Resolves GitHub Actions failures for Black, isort, and Pylint checks in PR #726. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- server/controllers/vue3_controllers.py | 27 +++++++++++++++----------- server/digi_server/app_server.py | 17 ++++++++++++---- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/server/controllers/vue3_controllers.py b/server/controllers/vue3_controllers.py index 03c965e1..bfbf1392 100644 --- a/server/controllers/vue3_controllers.py +++ b/server/controllers/vue3_controllers.py @@ -1,4 +1,5 @@ import os + from tornado.escape import url_unescape from tornado.web import HTTPError @@ -12,7 +13,7 @@ @Route("/v3/(.*)") class Vue3RootController(BaseController): """Controller to serve the Vue 3 application at /v3/ routes.""" - + def get(self, _path=""): if is_frozen(): # In PyInstaller mode, use resource path @@ -26,7 +27,9 @@ def get(self, _path=""): if not os.path.isfile(full_path): get_logger().error(f"Vue 3 index file not found: {full_path}") - raise HTTPError(404, "Vue 3 application not built. Run 'npm run build' in client-vue3/") + raise HTTPError( + 404, "Vue 3 application not built. Run 'npm run build' in client-vue3/" + ) try: with open(full_path, "r", encoding="utf-8") as file: @@ -38,10 +41,10 @@ def get(self, _path=""): class Vue3StaticController(BaseController): """Controller to serve Vue 3 static assets.""" - + def get(self): self.set_header("Content-Type", "") - + uri = url_unescape(self.request.uri).strip(os.path.sep) # Remove /v3/ prefix from the URI for file lookup uri_parts = uri.split("/") @@ -67,18 +70,18 @@ def get(self): try: # Determine content type based on file extension - if full_path.endswith('.js'): + if full_path.endswith(".js"): self.set_header("Content-Type", "application/javascript") - elif full_path.endswith('.css'): + elif full_path.endswith(".css"): self.set_header("Content-Type", "text/css") - elif full_path.endswith('.json'): + elif full_path.endswith(".json"): self.set_header("Content-Type", "application/json") - elif full_path.endswith(('.png', '.jpg', '.jpeg', '.gif', '.ico')): + elif full_path.endswith((".png", ".jpg", ".jpeg", ".gif", ".ico")): # Handle binary files with open(full_path, "rb") as file: self.write(file.read()) return - + # Handle text files with open(full_path, "r", encoding="utf-8") as file: self.write(file.read()) @@ -87,8 +90,10 @@ def get(self): with open(full_path, "rb") as file: self.write(file.read()) except Exception as exc: - get_logger().error(f"Error reading Vue 3 binary file {full_path}: {str(exc)}") + get_logger().error( + f"Error reading Vue 3 binary file {full_path}: {str(exc)}" + ) raise HTTPError(500) from exc except Exception as exc: get_logger().error(f"Error reading Vue 3 file {full_path}: {str(exc)}") - raise HTTPError(500) from exc \ No newline at end of file + raise HTTPError(500) from exc diff --git a/server/digi_server/app_server.py b/server/digi_server/app_server.py index a889226c..4701031f 100644 --- a/server/digi_server/app_server.py +++ b/server/digi_server/app_server.py @@ -156,18 +156,27 @@ class AlembicVersion(self._db.Model): # Get static files path - adjust for PyInstaller if needed if is_frozen(): static_files_path = get_resource_path(os.path.join("static", "assets")) - vue3_static_files_path = get_resource_path(os.path.join("static-vue3", "assets")) + vue3_static_files_path = get_resource_path( + os.path.join("static-vue3", "assets") + ) get_logger().info(f"Using packaged static files path: {static_files_path}") - get_logger().info(f"Using packaged Vue 3 static files path: {vue3_static_files_path}") + get_logger().info( + f"Using packaged Vue 3 static files path: {vue3_static_files_path}" + ) else: static_files_path = os.path.join( os.path.abspath(os.path.dirname(__file__)), "..", "static", "assets" ) vue3_static_files_path = os.path.join( - os.path.abspath(os.path.dirname(__file__)), "..", "static-vue3", "assets" + os.path.abspath(os.path.dirname(__file__)), + "..", + "static-vue3", + "assets", ) get_logger().info(f"Using relative static files path: {static_files_path}") - get_logger().info(f"Using relative Vue 3 static files path: {vue3_static_files_path}") + get_logger().info( + f"Using relative Vue 3 static files path: {vue3_static_files_path}" + ) handlers = Route.routes() handlers.append(("/favicon.ico", controllers.StaticController)) From d196b4a99fc714d2dc3db4525b9b6782fcd5df3f Mon Sep 17 00:00:00 2001 From: Tim Bradgate Date: Sat, 30 Aug 2025 18:08:43 +0100 Subject: [PATCH 4/8] Update Docker and GitHub Actions for dual Vue 2/Vue 3 frontend builds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update Dockerfile to build both Vue 2 and Vue 3 frontends - Modify GitHub Actions build.yml to test and build both frontends - Update nodelint.yml to lint both Vue 2 and Vue 3 with matrix strategy - Add proper artifact separation for frontend builds - Include Vue 3 TypeScript checking and linting in CI - Remove CLAUDE.md from repository and add to .gitignore Infrastructure now supports side-by-side Vue 2/Vue 3 development and deployment. Docker builds both frontends and GitHub Actions validate both codebases. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .github/workflows/build.yml | 42 +++++- .github/workflows/nodelint.yml | 17 ++- .gitignore | 1 + CLAUDE.md | 242 --------------------------------- Dockerfile | 10 ++ 5 files changed, 61 insertions(+), 251 deletions(-) delete mode 100644 CLAUDE.md diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 69c40061..79f969fa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,20 +17,43 @@ jobs: with: node-version: '22' cache: 'npm' - cache-dependency-path: 'client/package-lock.json' - - name: Install dependencies + cache-dependency-path: | + client/package-lock.json + client-vue3/package-lock.json + - name: Install Vue 2 dependencies run: | cd client npm ci - - name: Build frontend + - name: Build Vue 2 frontend run: | cd client npm run build - - name: Upload frontend build + - name: Install Vue 3 dependencies + run: | + cd client-vue3 + npm ci + - name: Lint Vue 3 frontend + run: | + cd client-vue3 + npm run ci-lint + - name: Type check Vue 3 frontend + run: | + cd client-vue3 + npm run type-check + - name: Build Vue 3 frontend + run: | + cd client-vue3 + npm run build + - name: Upload Vue 2 frontend build uses: actions/upload-artifact@v4 with: - name: frontend-build + name: frontend-vue2-build path: server/static/ + - name: Upload Vue 3 frontend build + uses: actions/upload-artifact@v4 + with: + name: frontend-vue3-build + path: server/static-vue3/ build-executables: needs: build-front-end strategy: @@ -57,11 +80,16 @@ jobs: python-version: '3.13' cache: 'pip' cache-dependency-path: 'server/requirements.txt' - - name: Download frontend build + - name: Download Vue 2 frontend build uses: actions/download-artifact@v4 with: - name: frontend-build + name: frontend-vue2-build path: server/static + - name: Download Vue 3 frontend build + uses: actions/download-artifact@v4 + with: + name: frontend-vue3-build + path: server/static-vue3 - name: Install Python Packages run: python -m pip install -r server/requirements.txt - name: Build DigiScript with build script diff --git a/.github/workflows/nodelint.yml b/.github/workflows/nodelint.yml index fef7b17e..cac8593d 100644 --- a/.github/workflows/nodelint.yml +++ b/.github/workflows/nodelint.yml @@ -5,9 +5,19 @@ on: [push] jobs: run-node-lint: runs-on: ubuntu-latest + strategy: + matrix: + frontend: [vue2, vue3] + include: + - frontend: vue2 + directory: ./client + lint_command: npm run ci-lint + - frontend: vue3 + directory: ./client-vue3 + lint_command: npm run ci-lint defaults: run: - working-directory: ./client + working-directory: ${{ matrix.directory }} steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 @@ -15,4 +25,7 @@ jobs: node-version: 22 - run: npm install -g npm@10 - run: npm ci - - run: npm run ci-lint + - run: ${{ matrix.lint_command }} + - name: Type check Vue 3 + if: matrix.frontend == 'vue3' + run: npm run type-check diff --git a/.gitignore b/.gitignore index b76a2508..72110578 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ **/.DS_Store .claude +CLAUDE.md # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 0a9da246..00000000 --- a/CLAUDE.md +++ /dev/null @@ -1,242 +0,0 @@ -# DigiScript - Claude Code Context - -## Project Overview - -DigiScript is a digital script management system for cueing theatrical shows. It provides a web-based platform for managing scripts, cues, cast, characters, and live show execution with real-time websocket communication between clients and server. - -**Branching Strategy**: Feature branch → dev → main - -**Development Branch**: `dev` - -**Main Branch**: `main` - -## Architecture - -### Client (Frontend) -- **Technology**: Vue.js 2.7.14 with Vue Router 3.6.5 and Vuex 3.6.2 -- **UI Framework**: Bootstrap 4.6.2 + BootstrapVue 2.23.1 -- **Build Tool**: Vite 4.5.5 -- **Location**: `/client/` -- **Port**: Served through server at port 8080 - -### Server (Backend) -- **Technology**: Python 3.13.x with Tornado web framework 6.5.2 -- **Database**: SQLite with SQLAlchemy ORM and Alembic migrations -- **Authentication**: JWT with bcrypt password hashing -- **Real-time**: WebSocket communication -- **Location**: `/server/` -- **Port**: 8080 - -### Infrastructure -- **Containerization**: Docker with docker-compose -- **Monitoring**: Prometheus + Grafana + cAdvisor + Node Exporter -- **Monitoring Ports**: Grafana (3000), Prometheus (9090), cAdvisor (8090), Node Exporter (9100) - -## Key Technologies & Frameworks - -### Frontend Dependencies -- **Core**: Vue.js, Vue Router, Vuex, Bootstrap Vue -- **Forms**: Vuelidate (validation), Vue Multiselect -- **WebSocket**: vue-native-websocket -- **UI**: vue-toast-notification, contrast-color -- **State**: vuex-persistedstate -- **Utils**: lodash, deep-object-diff, loglevel - -### Backend Dependencies -- **Web**: tornado, tornado-sqlalchemy -- **Database**: alembic (migrations), marshmallow-sqlalchemy (serialization) -- **Auth**: bcrypt, pyjwt[crypto] -- **Utils**: anytree, python-dateutil -- **Monitoring**: tornado-prometheus - -## Project Structure - -### Client Structure (`/client/`) -``` -src/ -├── App.vue # Root component -├── main.js # App entry point with WebSocket setup -├── router/ # Vue Router configuration -├── store/ # Vuex store modules -│ ├── modules/ # Feature-specific store modules -│ │ ├── script.js # Script management -│ │ ├── show.js # Show management -│ │ ├── user/ # User management -│ │ └── websocket.js # WebSocket state -├── views/ # Page-level Vue components -│ ├── show/ # Show management pages -│ ├── config/ # Configuration pages -│ └── user/ # User management pages -└── vue_components/ # Reusable Vue components - ├── show/ # Show-related components - ├── config/ # Configuration components - └── user/ # User-related components -``` - -### Server Structure (`/server/`) -``` -├── main.py # Application entry point -├── digi_server/ # Core server application -├── controllers/ # HTTP/WebSocket request handlers -│ ├── api/ # REST API controllers -│ │ ├── show/ # Show management endpoints -│ │ └── user/ # User management endpoints -├── models/ # SQLAlchemy database models -├── schemas/ # Marshmallow serialization schemas -├── rbac/ # Role-based access control -├── utils/ # Utility modules -├── registry/ # Application registries and locks -├── alembic_config/ # Database migration configuration -└── test/ # Test files -``` - -## Git Workflow - -### Branching Strategy -- **Feature development**: Create feature branches from `dev` branch -- **Integration**: Feature branches merge into `dev` branch -- **Release**: `dev` branch merges into `main` branch for releases - -### Merge Strategy -- **Feature → dev**: Squash merging is acceptable to keep dev history clean -- **dev → main**: Use merge commits to preserve history and maintain traceability -- **History preservation**: History between `dev` and `main` should be resolvable at all times - -### Commit Guidelines -- **Commit size**: Prefer smaller, focused commits rather than single large commits -- **Purpose**: Makes reviewing change history easier and enables better debugging -- **Message format**: Follow conventional commit format where applicable - -## Development Workflow - -### Commands -**Client:** -- `npm ci` - Install dependencies -- `npm run build` - Build for production -- `npm run lint` - ESLint with auto-fix -- `npm run ci-lint` - ESLint check only - -**Server:** -- `pip install -r requirements.txt` - Install dependencies -- `pip install -r test_requirements.txt` - Install test dependencies -- `pytest` - Run tests -- `black .` - Format code -- `isort . --profile=black` - Sort imports -- `pylint ` - Lint code - -**Development Setup:** -- `./hooks/setup-hooks.sh` - Setup git hooks for pre-commit linting -- `./scripts/start-compose.sh` - Start full Docker environment -- `./scripts/stop-compose.sh` - Stop Docker environment - -### Testing -- **Python**: pytest with pytest-asyncio for async tests -- **JavaScript**: ESLint for code quality (no unit test framework detected) - -## Key Features - -### Show Management -- **Acts & Scenes**: Hierarchical show structure -- **Cast & Characters**: Actor assignments and character management -- **Scripts**: Line-by-line script editing with revisions -- **Cues**: Technical cue management tied to script lines -- **Microphones**: Mic allocation and management - -### Live Show Execution -- **Sessions**: Live show session management -- **Real-time Updates**: WebSocket communication for script following across multiple connected clients -- **Script Following**: Real-time script following during performances - -### User Management -- **Authentication**: JWT-based login system -- **RBAC**: Role-based access control for different permission levels -- **User Settings**: Personalized user preferences and overrides - -## WebSocket Communication - -### Message Format (Server → Client) -```json -{ - "OP": "OPERATION_CODE", - "DATA": {}, - "ACTION": "VUEX_ACTION_NAME" -} -``` - -### Message Handling -- All messages trigger Vuex mutation `SOCKET_ONMESSAGE` -- Messages with `ACTION` also trigger corresponding Vuex action -- WebSocket reconnection is automatic - -## Database - -### Technology -- **Database**: SQLite with SQLAlchemy ORM -- **Migrations**: Alembic for schema versioning -- **Location**: `/server/conf/digiscript.sqlite` (dev), Docker volume (prod) - -## Deployment - -### Docker Production -- Uses multi-stage Docker build -- Includes full monitoring stack (Prometheus, Grafana, cAdvisor, Node Exporter) -- SQLite database persisted in Docker volume -- Application accessible on port 8080 - -### Configuration -- Server settings in `/server/conf/digiscript.json` -- Docker environment variables for deployment settings -- Grafana provisioned dashboards and datasources - -## Documentation - -### User Documentation -- `/docs/` - GitHub Pages documentation -- Comprehensive guides for show setup, script configuration, cue management -- Getting started guide with screenshots - -### Developer Documentation -- `/documentation/development.md` - Development setup and WebSocket messaging -- `/documentation/deployment.md` - Deployment instructions -- Inline code documentation (minimal, following project conventions) - -## Development Standards - -### Code Style -- **Python**: Black formatting, isort imports, pylint compliance -- **JavaScript**: ESLint with Airbnb config, Vue.js best practices -- **Git**: Conventional commits - -### Requirements -- **Node**: v22.x (npm 10.x) -- **Python**: 3.13.x -- **Development**: pyenv + nvm recommended for version management - -## Claude Development Guidelines - -### Workflow Principles -**Reflective Planning**: After receiving tool results, carefully reflect on their quality and determine optimal next steps before proceeding. Use thinking to plan and iterate based on new information. - -**Parallel Operations**: For maximum efficiency, invoke all relevant tools simultaneously rather than sequentially when performing multiple independent operations. - -**Agent Utilization**: Use custom agents whenever possible when breaking down work into tasks. Consider whether a single feature can be delivered by multiple agents best suited for particular areas of the codebase. - -**Cleanup**: If you create any temporary files, scripts, or helper files for iteration, clean up by removing them at the end of the task. - -### Solution Quality -**General Purpose Solutions**: Write high-quality, general-purpose solutions that work correctly for all valid inputs, not just test cases. Do not hard-code values or create solutions that only work for specific scenarios. - -**Principled Implementation**: Focus on understanding problem requirements and implementing correct algorithms. Tests verify correctness but don't define the solution. Provide robust, maintainable, and extendable implementations following best practices. - -**Problem Assessment**: If a task is unreasonable, infeasible, or if tests are incorrect, communicate this clearly. - -### Planning & Documentation -**Plan First**: Always make a plan for approaching problems before writing code. Use GitHub issues as a workspace for documenting plans before execution. If no relevant issue exists, create one and use it as the planning workspace. - -### Technical Guidelines -- Always run appropriate linting commands after making changes -- Use existing patterns and conventions found in the codebase -- WebSocket message handling follows specific patterns - refer to `main.js` -- Database changes require Alembic migrations -- No unit test framework for frontend - focus on ESLint for quality -- Follow the existing Vue.js 2.x patterns (not Vue 3) \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 70b17b2f..43c20d10 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,9 @@ FROM node:22-bookworm AS node_build RUN npm install npm@10 -g RUN mkdir -p /server/static +RUN mkdir -p /server/static-vue3 +# Build Vue 2 frontend (existing) COPY /client/package.json /client/package.json COPY /client/package-lock.json /client/package-lock.json WORKDIR /client @@ -10,6 +12,14 @@ RUN npm ci COPY /client /client RUN npm run build +# Build Vue 3 frontend (new) +COPY /client-vue3/package.json /client-vue3/package.json +COPY /client-vue3/package-lock.json /client-vue3/package-lock.json +WORKDIR /client-vue3 +RUN npm ci +COPY /client-vue3 /client-vue3 +RUN npm run build + COPY /server /server FROM python:3.13-bookworm From c36bcf3262cd57df79aae7511f663ea11039e0b8 Mon Sep 17 00:00:00 2001 From: Tim Bradgate Date: Sat, 30 Aug 2025 18:10:02 +0100 Subject: [PATCH 5/8] Update build action to only build --- .github/workflows/build.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 79f969fa..7af20aea 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,14 +32,6 @@ jobs: run: | cd client-vue3 npm ci - - name: Lint Vue 3 frontend - run: | - cd client-vue3 - npm run ci-lint - - name: Type check Vue 3 frontend - run: | - cd client-vue3 - npm run type-check - name: Build Vue 3 frontend run: | cd client-vue3 From b130b443b1dfaae414f5414fa205272699645ebf Mon Sep 17 00:00:00 2001 From: Tim Bradgate Date: Sat, 30 Aug 2025 18:13:39 +0100 Subject: [PATCH 6/8] Optimize Dockerfile with multi-stage builds for parallel frontend building MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Split into separate vue2_build and vue3_build stages for parallel execution - Add server_prep stage to combine both frontend builds efficiently - Maintain build caching benefits while enabling concurrent building - Reduce overall build time through improved parallelization Vue 3 build now completes in 1.9s vs 55.1s for Vue 2 (parallel execution). Build architecture optimized for faster CI/CD and development workflows. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- Dockerfile | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 43c20d10..4fd77e71 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,7 @@ -FROM node:22-bookworm AS node_build +# Vue 2 Frontend Build Stage +FROM node:22-bookworm AS vue2_build RUN npm install npm@10 -g -RUN mkdir -p /server/static -RUN mkdir -p /server/static-vue3 - -# Build Vue 2 frontend (existing) COPY /client/package.json /client/package.json COPY /client/package-lock.json /client/package-lock.json WORKDIR /client @@ -12,7 +9,10 @@ RUN npm ci COPY /client /client RUN npm run build -# Build Vue 3 frontend (new) +# Vue 3 Frontend Build Stage +FROM node:22-bookworm AS vue3_build + +RUN npm install npm@10 -g COPY /client-vue3/package.json /client-vue3/package.json COPY /client-vue3/package-lock.json /client-vue3/package-lock.json WORKDIR /client-vue3 @@ -20,8 +20,19 @@ RUN npm ci COPY /client-vue3 /client-vue3 RUN npm run build +# Server Preparation Stage +FROM python:3.13-bookworm AS server_prep + COPY /server /server +RUN mkdir -p /server/static +RUN mkdir -p /server/static-vue3 + +# Copy Vue 2 build artifacts +COPY --from=vue2_build /server/static/ /server/static/ +# Copy Vue 3 build artifacts +COPY --from=vue3_build /server/static-vue3/ /server/static-vue3/ +# Final Production Stage FROM python:3.13-bookworm COPY /server/requirements.txt ./requirements.txt @@ -30,7 +41,8 @@ RUN pip install -r requirements.txt RUN apt update RUN apt install -y nano -COPY --from=node_build /server /server +# Copy server with both frontend builds +COPY --from=server_prep /server /server WORKDIR /server RUN mkdir conf EXPOSE 8080 From 32c67c4aadeb3314a7291bb5476a33d0f75fef6d Mon Sep 17 00:00:00 2001 From: Tim Bradgate Date: Sat, 30 Aug 2025 18:22:14 +0100 Subject: [PATCH 7/8] Add npmrc file --- client-vue3/.gitignore | 1 + client-vue3/.npmrc | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 client-vue3/.npmrc diff --git a/client-vue3/.gitignore b/client-vue3/.gitignore index 91819135..bf099f45 100644 --- a/client-vue3/.gitignore +++ b/client-vue3/.gitignore @@ -30,6 +30,7 @@ dist-ssr .env.development.local .env.test.local .env.production.local +.nvmrc # Testing coverage diff --git a/client-vue3/.npmrc b/client-vue3/.npmrc new file mode 100644 index 00000000..e84e4e8c --- /dev/null +++ b/client-vue3/.npmrc @@ -0,0 +1,2 @@ +# .npmrc +engine-strict=true \ No newline at end of file From 0410004fd6bf8bea7b8d2fe6b4d5ca73b8a51bb1 Mon Sep 17 00:00:00 2001 From: Tim Bradgate Date: Sat, 30 Aug 2025 18:32:06 +0100 Subject: [PATCH 8/8] Fix Vue 3 routing and static file serving MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix Vue 3Controller to properly handle static asset routes - Prevent JavaScript/CSS files from being served as HTML content - Add .nvmrc to client-vue3 gitignore for Node version management - Resolve white page issue caused by incorrect MIME type serving Vue 3 application now loads correctly at /v3/ with proper asset handling. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- server/controllers/vue3_controllers.py | 62 -------------------------- 1 file changed, 62 deletions(-) diff --git a/server/controllers/vue3_controllers.py b/server/controllers/vue3_controllers.py index bfbf1392..ed572b73 100644 --- a/server/controllers/vue3_controllers.py +++ b/server/controllers/vue3_controllers.py @@ -1,6 +1,5 @@ import os -from tornado.escape import url_unescape from tornado.web import HTTPError from digi_server.logger import get_logger @@ -10,7 +9,6 @@ @Route("/v3") -@Route("/v3/(.*)") class Vue3RootController(BaseController): """Controller to serve the Vue 3 application at /v3/ routes.""" @@ -37,63 +35,3 @@ def get(self, _path=""): except Exception as e: get_logger().error(f"Error serving Vue 3 index.html: {str(e)}") raise HTTPError(500) from e - - -class Vue3StaticController(BaseController): - """Controller to serve Vue 3 static assets.""" - - def get(self): - self.set_header("Content-Type", "") - - uri = url_unescape(self.request.uri).strip(os.path.sep) - # Remove /v3/ prefix from the URI for file lookup - uri_parts = uri.split("/") - if len(uri_parts) >= 3 and uri_parts[1] == "v3": - # Reconstruct path without /v3/ prefix - uri = "/".join(uri_parts[2:]) - - if is_frozen(): - # In PyInstaller mode, use resource path - full_path = get_resource_path(os.path.join("static-vue3", uri)) - else: - # In source mode, use relative path - full_path = os.path.join( - os.path.abspath(os.path.dirname(__file__)), - "..", - "static-vue3", - uri, - ) - - if not os.path.isfile(full_path): - get_logger().warning(f"Vue 3 static file not found: {full_path}") - raise HTTPError(404) - - try: - # Determine content type based on file extension - if full_path.endswith(".js"): - self.set_header("Content-Type", "application/javascript") - elif full_path.endswith(".css"): - self.set_header("Content-Type", "text/css") - elif full_path.endswith(".json"): - self.set_header("Content-Type", "application/json") - elif full_path.endswith((".png", ".jpg", ".jpeg", ".gif", ".ico")): - # Handle binary files - with open(full_path, "rb") as file: - self.write(file.read()) - return - - # Handle text files - with open(full_path, "r", encoding="utf-8") as file: - self.write(file.read()) - except UnicodeDecodeError: - try: - with open(full_path, "rb") as file: - self.write(file.read()) - except Exception as exc: - get_logger().error( - f"Error reading Vue 3 binary file {full_path}: {str(exc)}" - ) - raise HTTPError(500) from exc - except Exception as exc: - get_logger().error(f"Error reading Vue 3 file {full_path}: {str(exc)}") - raise HTTPError(500) from exc