From 570a5f5317e130aa1717b45072378991f1f54f51 Mon Sep 17 00:00:00 2001 From: NguyenAnhQuan Date: Mon, 24 Nov 2025 16:44:48 +0700 Subject: [PATCH] init_base --- .editorconfig | 19 + .env.example | 2 + .eslintignore | 8 + .eslintrc.cjs | 37 + .gitignore | 52 + .prettierignore | 10 + .prettierrc.json | 12 + .vscode/extensions.json | 8 + .vscode/settings.json | 26 + README.md | 59 + components.json | 21 + index.html | 17 + package.json | 46 + pnpm-lock.yaml | 3036 +++++++++++++++++ public/favicon.ico | Bin 0 -> 370070 bytes src/App.vue | 30 + src/api/neptuneApi.ts | 80 + src/api/request.ts | 50 + src/assets/imgs/neptune_logo.jpg | Bin 0 -> 23552 bytes src/components/HelloWorld.vue | 41 + src/components/ui/button/Button.vue | 28 + src/components/ui/button/index.ts | 38 + src/components/ui/switch/Switch.vue | 35 + src/components/ui/switch/index.ts | 1 + .../ui/theme-toggle/ThemeToggle.vue | 20 + src/components/ui/theme-toggle/index.ts | 2 + src/composables/useTheme.ts | 53 + src/i18n/index.ts | 19 + src/i18n/locales/en.ts | 41 + src/i18n/locales/jp.ts | 41 + src/lib/utils.ts | 8 + src/main.ts | 20 + src/router/index.ts | 46 + src/stores/authStore.ts | 52 + src/stores/index.ts | 3 + src/stores/neptuneStore.ts | 140 + src/style.css | 121 + src/utils/constants.ts | 6 + src/views/AuthView.vue | 13 + src/views/HomeView.vue | 13 + src/views/NotFoundView.vue | 21 + tailwind.config.ts | 4 + tsconfig.app.json | 24 + tsconfig.json | 13 + tsconfig.node.json | 23 + vite.config.ts | 14 + 46 files changed, 4353 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .eslintignore create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .prettierrc.json create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 components.json create mode 100644 index.html create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 public/favicon.ico create mode 100644 src/App.vue create mode 100644 src/api/neptuneApi.ts create mode 100644 src/api/request.ts create mode 100644 src/assets/imgs/neptune_logo.jpg create mode 100644 src/components/HelloWorld.vue create mode 100644 src/components/ui/button/Button.vue create mode 100644 src/components/ui/button/index.ts create mode 100644 src/components/ui/switch/Switch.vue create mode 100644 src/components/ui/switch/index.ts create mode 100644 src/components/ui/theme-toggle/ThemeToggle.vue create mode 100644 src/components/ui/theme-toggle/index.ts create mode 100644 src/composables/useTheme.ts create mode 100644 src/i18n/index.ts create mode 100644 src/i18n/locales/en.ts create mode 100644 src/i18n/locales/jp.ts create mode 100644 src/lib/utils.ts create mode 100644 src/main.ts create mode 100644 src/router/index.ts create mode 100644 src/stores/authStore.ts create mode 100644 src/stores/index.ts create mode 100644 src/stores/neptuneStore.ts create mode 100644 src/style.css create mode 100644 src/utils/constants.ts create mode 100644 src/views/AuthView.vue create mode 100644 src/views/HomeView.vue create mode 100644 src/views/NotFoundView.vue create mode 100644 tailwind.config.ts create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..17cfec8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +# EditorConfig helps maintain consistent coding styles +# https://editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..b28cbae --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +VITE_APP_API= +VITE_NODE_NETWORK= diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..b1049bb --- /dev/null +++ b/.eslintignore @@ -0,0 +1,8 @@ +node_modules +dist +.vscode +.git +*.config.js +*.config.ts +components.json + diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..58244b7 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,37 @@ +module.exports = { + root: true, + env: { + browser: true, + es2021: true, + node: true, + }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:vue/vue3-recommended', + '@vue/eslint-config-typescript', + '@vue/eslint-config-prettier', + ], + parser: 'vue-eslint-parser', + parserOptions: { + ecmaVersion: 'latest', + parser: '@typescript-eslint/parser', + sourceType: 'module', + }, + plugins: ['@typescript-eslint', 'vue'], + rules: { + 'vue/multi-word-component-names': 'off', + 'vue/no-v-html': 'warn', + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + }, + ], + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + }, +} + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7c87c5b --- /dev/null +++ b/.gitignore @@ -0,0 +1,52 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +# Dependencies +node_modules + +# Build outputs +dist +dist-ssr +out +build +*.local + +# Environment files +.env +.env.local +.env.*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +!.vscode/settings.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# OS files +Thumbs.db +.DS_Store + +# TypeScript +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..2b935ff --- /dev/null +++ b/.prettierignore @@ -0,0 +1,10 @@ +node_modules +dist +.vscode +.git +pnpm-lock.yaml +package-lock.json +*.min.js +*.min.css +public + diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..0ec9ffa --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,12 @@ +{ + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "useTabs": false, + "trailingComma": "es5", + "printWidth": 100, + "arrowParens": "avoid", + "endOfLine": "auto", + "vueIndentScriptAndStyle": false +} + diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a241802 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "Vue.volar", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "bradlc.vscode-tailwindcss" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a90570c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,26 @@ +{ + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "[vue]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "vue" + ], + "typescript.tsdk": "node_modules/typescript/lib", + "vetur.validation.template": false +} + diff --git a/README.md b/README.md new file mode 100644 index 0000000..3a31cf7 --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +# Neptune Wallet + +A modern, secure wallet application for the Neptune blockchain network. + +## ✨ Features + +- 🎨 Modern UI with Shadcn-vue components and Tailwind CSS v4 +- 🌓 Dark/Light theme support +- 🔒 Secure wallet management +- 💼 Transaction handling +- 📊 UTXO tracking +- 🌐 Network monitoring + +## 🚀 Quick Start + +```bash +# Install dependencies +pnpm install + +# Setup environment +cp .env.example .env + +# Start development server +pnpm dev + +# Build for production +pnpm build +``` + +## 📋 Available Scripts + +- `pnpm dev` - Start development server +- `pnpm build` - Build for production +- `pnpm preview` - Preview production build +- `pnpm type-check` - Run TypeScript type checking +- `pnpm lint` - Lint and fix code with ESLint +- `pnpm format` - Format code with Prettier + +## 🛠️ Tech Stack + +- **Framework**: Vue 3.5 + TypeScript +- **Build Tool**: Vite 7 +- **State Management**: Pinia 2.3 +- **Routing**: Vue Router 4.5 +- **HTTP Client**: Axios 1.7 +- **i18n**: Vue I18n 10.0 +- **Styling**: Tailwind CSS v4 (CSS-first configuration) +- **UI Components**: Shadcn-vue (New York style) +- **Icons**: Lucide Vue Next +- **Utilities**: VueUse, class-variance-authority, clsx + +## 📖 Documentation + +For detailed installation and setup instructions, see [INSTALLATION.md](./INSTALLATION.md) + +## 📝 License + +Apache-2.0 + diff --git a/components.json b/components.json new file mode 100644 index 0000000..bf3d400 --- /dev/null +++ b/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://shadcn-vue.com/schema.json", + "style": "new-york", + "typescript": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/style.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "composables": "@/composables" + }, + "registries": {} +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..28640e9 --- /dev/null +++ b/index.html @@ -0,0 +1,17 @@ + + + + + + + + + Neptune Wallet + + + +
+ + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..e7cb225 --- /dev/null +++ b/package.json @@ -0,0 +1,46 @@ +{ + "name": "neptune-wallet", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview", + "type-check": "vue-tsc --build --force", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .eslintignore", + "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,vue,css,scss,json}\"" + }, + "dependencies": { + "@tailwindcss/vite": "^4.1.17", + "@vueuse/core": "^14.0.0", + "axios": "^1.7.9", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-vue-next": "^0.554.0", + "pinia": "^2.3.1", + "reka-ui": "^2.6.0", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^4.1.17", + "tailwindcss-animate": "^1.0.7", + "vue": "^3.5.24", + "vue-i18n": "^10.0.8", + "vue-router": "^4.5.0" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.15.0", + "@types/node": "^24.10.1", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "@vitejs/plugin-vue": "^6.0.1", + "@vue/eslint-config-prettier": "^10.0.0", + "@vue/eslint-config-typescript": "^14.0.0", + "@vue/tsconfig": "^0.8.1", + "eslint": "^9.0.0", + "eslint-plugin-vue": "^9.30.0", + "prettier": "^3.4.0", + "typescript": "~5.9.3", + "vite": "^7.2.4", + "vue-tsc": "^3.1.4" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..cb81994 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3036 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@tailwindcss/vite': + specifier: ^4.1.17 + version: 4.1.17(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)) + '@vueuse/core': + specifier: ^14.0.0 + version: 14.0.0(vue@3.5.24(typescript@5.9.3)) + axios: + specifier: ^1.7.9 + version: 1.13.2 + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + lucide-vue-next: + specifier: ^0.554.0 + version: 0.554.0(vue@3.5.24(typescript@5.9.3)) + pinia: + specifier: ^2.3.1 + version: 2.3.1(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3)) + reka-ui: + specifier: ^2.6.0 + version: 2.6.0(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3)) + tailwind-merge: + specifier: ^3.4.0 + version: 3.4.0 + tailwindcss: + specifier: ^4.1.17 + version: 4.1.17 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@4.1.17) + vue: + specifier: ^3.5.24 + version: 3.5.24(typescript@5.9.3) + vue-i18n: + specifier: ^10.0.8 + version: 10.0.8(vue@3.5.24(typescript@5.9.3)) + vue-router: + specifier: ^4.5.0 + version: 4.6.3(vue@3.5.24(typescript@5.9.3)) + devDependencies: + '@rushstack/eslint-patch': + specifier: ^1.15.0 + version: 1.15.0 + '@types/node': + specifier: ^24.10.1 + version: 24.10.1 + '@typescript-eslint/eslint-plugin': + specifier: ^8.0.0 + version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': + specifier: ^8.0.0 + version: 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@vitejs/plugin-vue': + specifier: ^6.0.1 + version: 6.0.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.24(typescript@5.9.3)) + '@vue/eslint-config-prettier': + specifier: ^10.0.0 + version: 10.2.0(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2) + '@vue/eslint-config-typescript': + specifier: ^14.0.0 + version: 14.6.0(eslint-plugin-vue@9.33.0(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@vue/tsconfig': + specifier: ^0.8.1 + version: 0.8.1(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3)) + eslint: + specifier: ^9.0.0 + version: 9.39.1(jiti@2.6.1) + eslint-plugin-vue: + specifier: ^9.30.0 + version: 9.33.0(eslint@9.39.1(jiti@2.6.1)) + prettier: + specifier: ^3.4.0 + version: 3.6.2 + typescript: + specifier: ~5.9.3 + version: 5.9.3 + vite: + specifier: ^7.2.4 + version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2) + vue-tsc: + specifier: ^3.1.4 + version: 3.1.5(typescript@5.9.3) + +packages: + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.1': + resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + + '@floating-ui/vue@1.1.9': + resolution: {integrity: sha512-BfNqNW6KA83Nexspgb9DZuz578R7HT8MZw1CfK9I6Ah4QReNWEJsXWHN+SdmOVLNGmTPDi+fDT535Df5PzMLbQ==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@internationalized/date@3.10.0': + resolution: {integrity: sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==} + + '@internationalized/number@3.6.5': + resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==} + + '@intlify/core-base@10.0.8': + resolution: {integrity: sha512-FoHslNWSoHjdUBLy35bpm9PV/0LVI/DSv9L6Km6J2ad8r/mm0VaGg06C40FqlE8u2ADcGUM60lyoU7Myo4WNZQ==} + engines: {node: '>= 16'} + + '@intlify/message-compiler@10.0.8': + resolution: {integrity: sha512-DV+sYXIkHVd5yVb2mL7br/NEUwzUoLBsMkV3H0InefWgmYa34NLZUvMCGi5oWX+Hqr2Y2qUxnVrnOWF4aBlgWg==} + engines: {node: '>= 16'} + + '@intlify/shared@10.0.8': + resolution: {integrity: sha512-BcmHpb5bQyeVNrptC3UhzpBZB/YHHDoEREOUERrmF2BRxsyOEuRrq+Z96C/D4+2KJb8kuHiouzAei7BXlG0YYw==} + engines: {node: '>= 16'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgr/core@0.2.9': + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@rolldown/pluginutils@1.0.0-beta.50': + resolution: {integrity: sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==} + + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} + cpu: [x64] + os: [win32] + + '@rushstack/eslint-patch@1.15.0': + resolution: {integrity: sha512-ojSshQPKwVvSMR8yT2L/QtUkV5SXi/IfDiJ4/8d6UbTPjiHVmxZzUAzGD8Tzks1b9+qQkZa0isUOvYObedITaw==} + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@tailwindcss/node@4.1.17': + resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==} + + '@tailwindcss/oxide-android-arm64@4.1.17': + resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.17': + resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.17': + resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.17': + resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': + resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': + resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.17': + resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.17': + resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.17': + resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.17': + resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': + resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.17': + resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.17': + resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==} + engines: {node: '>= 10'} + + '@tailwindcss/vite@4.1.17': + resolution: {integrity: sha512-4+9w8ZHOiGnpcGI6z1TVVfWaX/koK7fKeSYF3qlYg2xpBtbteP2ddBxiarL+HVgfSJGeK5RIxRQmKm4rTJJAwA==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 + + '@tanstack/virtual-core@3.13.12': + resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} + + '@tanstack/vue-virtual@3.13.12': + resolution: {integrity: sha512-vhF7kEU9EXWXh+HdAwKJ2m3xaOnTTmgcdXcF2pim8g4GvI7eRrk2YRuV5nUlZnd/NbCIX4/Ja2OZu5EjJL06Ww==} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@typescript-eslint/eslint-plugin@8.47.0': + resolution: {integrity: sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.47.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.47.0': + resolution: {integrity: sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.47.0': + resolution: {integrity: sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.47.0': + resolution: {integrity: sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.47.0': + resolution: {integrity: sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.47.0': + resolution: {integrity: sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.47.0': + resolution: {integrity: sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.47.0': + resolution: {integrity: sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.47.0': + resolution: {integrity: sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.47.0': + resolution: {integrity: sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitejs/plugin-vue@6.0.2': + resolution: {integrity: sha512-iHmwV3QcVGGvSC1BG5bZ4z6iwa1SOpAPWmnjOErd4Ske+lZua5K9TtAVdx0gMBClJ28DViCbSmZitjWZsWO3LA==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + vue: ^3.2.25 + + '@volar/language-core@2.4.23': + resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==} + + '@volar/source-map@2.4.23': + resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==} + + '@volar/typescript@2.4.23': + resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==} + + '@vue/compiler-core@3.5.24': + resolution: {integrity: sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==} + + '@vue/compiler-dom@3.5.24': + resolution: {integrity: sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==} + + '@vue/compiler-sfc@3.5.24': + resolution: {integrity: sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==} + + '@vue/compiler-ssr@3.5.24': + resolution: {integrity: sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/eslint-config-prettier@10.2.0': + resolution: {integrity: sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==} + peerDependencies: + eslint: '>= 8.21.0' + prettier: '>= 3.0.0' + + '@vue/eslint-config-typescript@14.6.0': + resolution: {integrity: sha512-UpiRY/7go4Yps4mYCjkvlIbVWmn9YvPGQDxTAlcKLphyaD77LjIu3plH4Y9zNT0GB4f3K5tMmhhtRhPOgrQ/bQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.10.0 + eslint-plugin-vue: ^9.28.0 || ^10.0.0 + typescript: '>=4.8.4' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/language-core@3.1.5': + resolution: {integrity: sha512-FMcqyzWN+sYBeqRMWPGT2QY0mUasZMVIuHvmb5NT3eeqPrbHBYtCP8JWEUCDCgM+Zr62uuWY/qoeBrPrzfa78w==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/reactivity@3.5.24': + resolution: {integrity: sha512-BM8kBhtlkkbnyl4q+HiF5R5BL0ycDPfihowulm02q3WYp2vxgPcJuZO866qa/0u3idbMntKEtVNuAUp5bw4teg==} + + '@vue/runtime-core@3.5.24': + resolution: {integrity: sha512-RYP/byyKDgNIqfX/gNb2PB55dJmM97jc9wyF3jK7QUInYKypK2exmZMNwnjueWwGceEkP6NChd3D2ZVEp9undQ==} + + '@vue/runtime-dom@3.5.24': + resolution: {integrity: sha512-Z8ANhr/i0XIluonHVjbUkjvn+CyrxbXRIxR7wn7+X7xlcb7dJsfITZbkVOeJZdP8VZwfrWRsWdShH6pngMxRjw==} + + '@vue/server-renderer@3.5.24': + resolution: {integrity: sha512-Yh2j2Y4G/0/4z/xJ1Bad4mxaAk++C2v4kaa8oSYTMJBJ00/ndPuxCnWeot0/7/qafQFLh5pr6xeV6SdMcE/G1w==} + peerDependencies: + vue: 3.5.24 + + '@vue/shared@3.5.24': + resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==} + + '@vue/tsconfig@0.8.1': + resolution: {integrity: sha512-aK7feIWPXFSUhsCP9PFqPyFOcz4ENkb8hZ2pneL6m2UjCkccvaOhC/5KCKluuBufvp2KzkbdA2W2pk20vLzu3g==} + peerDependencies: + typescript: 5.x + vue: ^3.4.0 + peerDependenciesMeta: + typescript: + optional: true + vue: + optional: true + + '@vueuse/core@12.8.2': + resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} + + '@vueuse/core@14.0.0': + resolution: {integrity: sha512-d6tKRWkZE8IQElX2aHBxXOMD478fHIYV+Dzm2y9Ag122ICBpNKtGICiXKOhWU3L1kKdttDD9dCMS4bGP3jhCTQ==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/metadata@12.8.2': + resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} + + '@vueuse/metadata@14.0.0': + resolution: {integrity: sha512-6yoGqbJcMldVCevkFiHDBTB1V5Hq+G/haPlGIuaFZHpXC0HADB0EN1ryQAAceiW+ryS3niUwvdFbGiqHqBrfVA==} + + '@vueuse/shared@12.8.2': + resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} + + '@vueuse/shared@14.0.0': + resolution: {integrity: sha512-mTCA0uczBgurRlwVaQHfG0Ja7UdGe4g9mwffiJmvLiTtp1G4AQyIjej6si/k8c8pUwTfVpNufck+23gXptPAkw==} + peerDependencies: + vue: ^3.5.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + alien-signals@3.1.0: + resolution: {integrity: sha512-yufC6VpSy8tK3I0lO67pjumo5JvDQVQyr38+3OHqe6CHl1t2VZekKZ7EKKZSqk0cRmE7U7tfZbpXiKNzuc+ckg==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.13.2: + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.5.4: + resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-vue@9.33.0: + resolution: {integrity: sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.39.1: + resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + engines: {node: '>= 12.0.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lucide-vue-next@0.554.0: + resolution: {integrity: sha512-nDchDVm/J3mv+7aYtDh7aLkeBVtzDNyaelKEOlhAE0MKMtDfB9fFatx2siqZUBYhLHjMK5DZnaAC/ODT9vQ63Q==} + peerDependencies: + vue: '>=3.0.1' + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pinia@2.3.1: + resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==} + peerDependencies: + typescript: '>=4.4.4' + vue: ^2.7.0 || ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + reka-ui@2.6.0: + resolution: {integrity: sha512-NrGMKrABD97l890mFS3TNUzB0BLUfbL3hh0NjcJRIUSUljb288bx3Mzo31nOyUcdiiW0HqFGXJwyCBh9cWgb0w==} + peerDependencies: + vue: '>= 3.2.0' + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + synckit@0.11.11: + resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} + engines: {node: ^14.18.0 || >=16.0.0} + + tailwind-merge@3.4.0: + resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} + + tailwindcss-animate@1.0.7: + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + + tailwindcss@4.1.17: + resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==} + + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typescript-eslint@8.47.0: + resolution: {integrity: sha512-Lwe8i2XQ3WoMjua/r1PHrCTpkubPYJCAfOurtn+mtTzqB6jNd+14n9UN1bJ4s3F49x9ixAm0FLflB/JzQ57M8Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vite@7.2.4: + resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-eslint-parser@10.2.0: + resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + vue-eslint-parser@9.4.3: + resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + vue-i18n@10.0.8: + resolution: {integrity: sha512-mIjy4utxMz9lMMo6G9vYePv7gUFt4ztOMhY9/4czDJxZ26xPeJ49MAGa9wBAE3XuXbYCrtVPmPxNjej7JJJkZQ==} + engines: {node: '>= 16'} + peerDependencies: + vue: ^3.0.0 + + vue-router@4.6.3: + resolution: {integrity: sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg==} + peerDependencies: + vue: ^3.5.0 + + vue-tsc@3.1.5: + resolution: {integrity: sha512-L/G9IUjOWhBU0yun89rv8fKqmKC+T0HfhrFjlIml71WpfBv9eb4E9Bev8FMbyueBIU9vxQqbd+oOsVcDa5amGw==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue@3.5.24: + resolution: {integrity: sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/parser@7.28.5': + dependencies: + '@babel/types': 7.28.5 + + '@babel/types@7.28.5': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))': + dependencies: + eslint: 9.39.1(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.1': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.1': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.4': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/utils@0.2.10': {} + + '@floating-ui/vue@1.1.9(vue@3.5.24(typescript@5.9.3))': + dependencies: + '@floating-ui/dom': 1.7.4 + '@floating-ui/utils': 0.2.10 + vue-demi: 0.14.10(vue@3.5.24(typescript@5.9.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@internationalized/date@3.10.0': + dependencies: + '@swc/helpers': 0.5.17 + + '@internationalized/number@3.6.5': + dependencies: + '@swc/helpers': 0.5.17 + + '@intlify/core-base@10.0.8': + dependencies: + '@intlify/message-compiler': 10.0.8 + '@intlify/shared': 10.0.8 + + '@intlify/message-compiler@10.0.8': + dependencies: + '@intlify/shared': 10.0.8 + source-map-js: 1.2.1 + + '@intlify/shared@10.0.8': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@pkgr/core@0.2.9': {} + + '@rolldown/pluginutils@1.0.0-beta.50': {} + + '@rollup/rollup-android-arm-eabi@4.53.3': + optional: true + + '@rollup/rollup-android-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-x64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.53.3': + optional: true + + '@rollup/rollup-openharmony-arm64@4.53.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.53.3': + optional: true + + '@rushstack/eslint-patch@1.15.0': {} + + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/node@4.1.17': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.17 + + '@tailwindcss/oxide-android-arm64@4.1.17': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.17': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.17': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.17': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.17': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.17': + optional: true + + '@tailwindcss/oxide@4.1.17': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.17 + '@tailwindcss/oxide-darwin-arm64': 4.1.17 + '@tailwindcss/oxide-darwin-x64': 4.1.17 + '@tailwindcss/oxide-freebsd-x64': 4.1.17 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.17 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.17 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.17 + '@tailwindcss/oxide-linux-x64-musl': 4.1.17 + '@tailwindcss/oxide-wasm32-wasi': 4.1.17 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.17 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.17 + + '@tailwindcss/vite@4.1.17(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2))': + dependencies: + '@tailwindcss/node': 4.1.17 + '@tailwindcss/oxide': 4.1.17 + tailwindcss: 4.1.17 + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2) + + '@tanstack/virtual-core@3.13.12': {} + + '@tanstack/vue-virtual@3.13.12(vue@3.5.24(typescript@5.9.3))': + dependencies: + '@tanstack/virtual-core': 3.13.12 + vue: 3.5.24(typescript@5.9.3) + + '@types/estree@1.0.8': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@24.10.1': + dependencies: + undici-types: 7.16.0 + + '@types/web-bluetooth@0.0.21': {} + + '@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.47.0 + '@typescript-eslint/type-utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.47.0 + eslint: 9.39.1(jiti@2.6.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.47.0 + '@typescript-eslint/types': 8.47.0 + '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.47.0 + debug: 4.4.3 + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.47.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.9.3) + '@typescript-eslint/types': 8.47.0 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.47.0': + dependencies: + '@typescript-eslint/types': 8.47.0 + '@typescript-eslint/visitor-keys': 8.47.0 + + '@typescript-eslint/tsconfig-utils@8.47.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.47.0 + '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.39.1(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.47.0': {} + + '@typescript-eslint/typescript-estree@8.47.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.47.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.9.3) + '@typescript-eslint/types': 8.47.0 + '@typescript-eslint/visitor-keys': 8.47.0 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.47.0 + '@typescript-eslint/types': 8.47.0 + '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.47.0': + dependencies: + '@typescript-eslint/types': 8.47.0 + eslint-visitor-keys: 4.2.1 + + '@vitejs/plugin-vue@6.0.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.24(typescript@5.9.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-beta.50 + vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2) + vue: 3.5.24(typescript@5.9.3) + + '@volar/language-core@2.4.23': + dependencies: + '@volar/source-map': 2.4.23 + + '@volar/source-map@2.4.23': {} + + '@volar/typescript@2.4.23': + dependencies: + '@volar/language-core': 2.4.23 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vue/compiler-core@3.5.24': + dependencies: + '@babel/parser': 7.28.5 + '@vue/shared': 3.5.24 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.24': + dependencies: + '@vue/compiler-core': 3.5.24 + '@vue/shared': 3.5.24 + + '@vue/compiler-sfc@3.5.24': + dependencies: + '@babel/parser': 7.28.5 + '@vue/compiler-core': 3.5.24 + '@vue/compiler-dom': 3.5.24 + '@vue/compiler-ssr': 3.5.24 + '@vue/shared': 3.5.24 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.24': + dependencies: + '@vue/compiler-dom': 3.5.24 + '@vue/shared': 3.5.24 + + '@vue/devtools-api@6.6.4': {} + + '@vue/eslint-config-prettier@10.2.0(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2)': + dependencies: + eslint: 9.39.1(jiti@2.6.1) + eslint-config-prettier: 10.1.8(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2) + prettier: 3.6.2 + transitivePeerDependencies: + - '@types/eslint' + + '@vue/eslint-config-typescript@14.6.0(eslint-plugin-vue@9.33.0(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) + eslint-plugin-vue: 9.33.0(eslint@9.39.1(jiti@2.6.1)) + fast-glob: 3.3.3 + typescript-eslint: 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + vue-eslint-parser: 10.2.0(eslint@9.39.1(jiti@2.6.1)) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@vue/language-core@3.1.5(typescript@5.9.3)': + dependencies: + '@volar/language-core': 2.4.23 + '@vue/compiler-dom': 3.5.24 + '@vue/shared': 3.5.24 + alien-signals: 3.1.0 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + picomatch: 4.0.3 + optionalDependencies: + typescript: 5.9.3 + + '@vue/reactivity@3.5.24': + dependencies: + '@vue/shared': 3.5.24 + + '@vue/runtime-core@3.5.24': + dependencies: + '@vue/reactivity': 3.5.24 + '@vue/shared': 3.5.24 + + '@vue/runtime-dom@3.5.24': + dependencies: + '@vue/reactivity': 3.5.24 + '@vue/runtime-core': 3.5.24 + '@vue/shared': 3.5.24 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.24(vue@3.5.24(typescript@5.9.3))': + dependencies: + '@vue/compiler-ssr': 3.5.24 + '@vue/shared': 3.5.24 + vue: 3.5.24(typescript@5.9.3) + + '@vue/shared@3.5.24': {} + + '@vue/tsconfig@0.8.1(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3))': + optionalDependencies: + typescript: 5.9.3 + vue: 3.5.24(typescript@5.9.3) + + '@vueuse/core@12.8.2(typescript@5.9.3)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 12.8.2 + '@vueuse/shared': 12.8.2(typescript@5.9.3) + vue: 3.5.24(typescript@5.9.3) + transitivePeerDependencies: + - typescript + + '@vueuse/core@14.0.0(vue@3.5.24(typescript@5.9.3))': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 14.0.0 + '@vueuse/shared': 14.0.0(vue@3.5.24(typescript@5.9.3)) + vue: 3.5.24(typescript@5.9.3) + + '@vueuse/metadata@12.8.2': {} + + '@vueuse/metadata@14.0.0': {} + + '@vueuse/shared@12.8.2(typescript@5.9.3)': + dependencies: + vue: 3.5.24(typescript@5.9.3) + transitivePeerDependencies: + - typescript + + '@vueuse/shared@14.0.0(vue@3.5.24(typescript@5.9.3))': + dependencies: + vue: 3.5.24(typescript@5.9.3) + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + alien-signals@3.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + + asynckit@0.4.0: {} + + axios@1.13.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.5 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + boolbase@1.0.0: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + callsites@3.1.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + concat-map@0.0.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + csstype@3.2.3: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + defu@6.1.4: {} + + delayed-stream@1.0.0: {} + + detect-libc@2.1.2: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + entities@4.5.0: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)): + dependencies: + eslint: 9.39.1(jiti@2.6.1) + + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2): + dependencies: + eslint: 9.39.1(jiti@2.6.1) + prettier: 3.6.2 + prettier-linter-helpers: 1.0.0 + synckit: 0.11.11 + optionalDependencies: + eslint-config-prettier: 10.1.8(eslint@9.39.1(jiti@2.6.1)) + + eslint-plugin-vue@9.33.0(eslint@9.39.1(jiti@2.6.1)): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + eslint: 9.39.1(jiti@2.6.1) + globals: 13.24.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.2 + semver: 7.7.3 + vue-eslint-parser: 9.4.3(eslint@9.39.1(jiti@2.6.1)) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.39.1(jiti@2.6.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.39.1 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + espree@9.6.1: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 3.4.3 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + follow-redirects@1.15.11: {} + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-intrinsic@1.3.0: + 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 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globals@14.0.0: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + isexe@2.0.0: {} + + jiti@2.6.1: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.30.2: + optional: true + + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + + lightningcss-linux-arm64-musl@1.30.2: + optional: true + + lightningcss-linux-x64-gnu@1.30.2: + optional: true + + lightningcss-linux-x64-musl@1.30.2: + optional: true + + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + + lightningcss-win32-x64-msvc@1.30.2: + optional: true + + lightningcss@1.30.2: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + lucide-vue-next@0.554.0(vue@3.5.24(typescript@5.9.3)): + dependencies: + vue: 3.5.24(typescript@5.9.3) + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + math-intrinsics@1.1.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + ms@2.1.3: {} + + muggle-string@0.4.1: {} + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + ohash@2.0.11: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pinia@2.3.1(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.24(typescript@5.9.3) + vue-demi: 0.14.10(vue@3.5.24(typescript@5.9.3)) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@vue/composition-api' + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.6.2: {} + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + reka-ui@2.6.0(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3)): + dependencies: + '@floating-ui/dom': 1.7.4 + '@floating-ui/vue': 1.1.9(vue@3.5.24(typescript@5.9.3)) + '@internationalized/date': 3.10.0 + '@internationalized/number': 3.6.5 + '@tanstack/vue-virtual': 3.13.12(vue@3.5.24(typescript@5.9.3)) + '@vueuse/core': 12.8.2(typescript@5.9.3) + '@vueuse/shared': 12.8.2(typescript@5.9.3) + aria-hidden: 1.2.6 + defu: 6.1.4 + ohash: 2.0.11 + vue: 3.5.24(typescript@5.9.3) + transitivePeerDependencies: + - '@vue/composition-api' + - typescript + + resolve-from@4.0.0: {} + + reusify@1.1.0: {} + + rollup@4.53.3: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + semver@7.7.3: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + source-map-js@1.2.1: {} + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + synckit@0.11.11: + dependencies: + '@pkgr/core': 0.2.9 + + tailwind-merge@3.4.0: {} + + tailwindcss-animate@1.0.7(tailwindcss@4.1.17): + dependencies: + tailwindcss: 4.1.17 + + tailwindcss@4.1.17: {} + + tapable@2.3.0: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@2.1.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + typescript-eslint@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + typescript@5.9.3: {} + + undici-types@7.16.0: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.3 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.10.1 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + + vscode-uri@3.1.0: {} + + vue-demi@0.14.10(vue@3.5.24(typescript@5.9.3)): + dependencies: + vue: 3.5.24(typescript@5.9.3) + + vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1)): + dependencies: + debug: 4.4.3 + eslint: 9.39.1(jiti@2.6.1) + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + vue-eslint-parser@9.4.3(eslint@9.39.1(jiti@2.6.1)): + dependencies: + debug: 4.4.3 + eslint: 9.39.1(jiti@2.6.1) + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + lodash: 4.17.21 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + vue-i18n@10.0.8(vue@3.5.24(typescript@5.9.3)): + dependencies: + '@intlify/core-base': 10.0.8 + '@intlify/shared': 10.0.8 + '@vue/devtools-api': 6.6.4 + vue: 3.5.24(typescript@5.9.3) + + vue-router@4.6.3(vue@3.5.24(typescript@5.9.3)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.24(typescript@5.9.3) + + vue-tsc@3.1.5(typescript@5.9.3): + dependencies: + '@volar/typescript': 2.4.23 + '@vue/language-core': 3.1.5(typescript@5.9.3) + typescript: 5.9.3 + + vue@3.5.24(typescript@5.9.3): + dependencies: + '@vue/compiler-dom': 3.5.24 + '@vue/compiler-sfc': 3.5.24 + '@vue/runtime-dom': 3.5.24 + '@vue/server-renderer': 3.5.24(vue@3.5.24(typescript@5.9.3)) + '@vue/shared': 3.5.24 + optionalDependencies: + typescript: 5.9.3 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + xml-name-validator@4.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a37e7fe0ef71393e22075f97a5e69beab9c39df4 GIT binary patch literal 370070 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 literal 0 HcmV?d00001 diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..369ab23 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/api/neptuneApi.ts b/src/api/neptuneApi.ts new file mode 100644 index 0000000..64192a5 --- /dev/null +++ b/src/api/neptuneApi.ts @@ -0,0 +1,80 @@ +import request from './request' + +const DEFAULT_MIN_BLOCK_HEIGHT = 0 + +/** + * JSON-RPC 2.0 call helper + */ +export const callJsonRpc = (method: string, params: any = []) => { + const requestData = { + jsonrpc: '2.0', + method, + params, + id: 1, + } + return request({ + method: 'POST', + data: requestData, + }) +} + +/** + * Get UTXOs from view key + */ +export const getUtxosFromViewKey = async ( + viewKey: string, + startBlock: number = DEFAULT_MIN_BLOCK_HEIGHT, + endBlock: number | null = null, + maxSearchDepth: number = 1000 +): Promise => { + const params = { + viewKey, + startBlock, + endBlock, + maxSearchDepth, + } + return await callJsonRpc('wallet_getUtxoInfo', params) +} + +/** + * Get balance from view key + */ +export const getBalance = async ( + viewKey: string, + startBlock: number = DEFAULT_MIN_BLOCK_HEIGHT, + endBlock: number | null = null, + maxSearchDepth: number = 1000 +): Promise => { + const params = { + viewKey, + startBlock, + endBlock, + maxSearchDepth, + } + return await callJsonRpc('wallet_getBalanceFromViewKey', params) +} + +/** + * Get current block height + */ +export const getBlockHeight = async (): Promise => { + return await callJsonRpc('chain_height') +} + +/** + * Get network info + */ +export const getNetworkInfo = async (): Promise => { + return await callJsonRpc('node_network') +} + +/** + * Broadcast signed transaction + */ +export const broadcastSignedTransaction = async (transactionHex: string): Promise => { + const params = { + transactionHex, + } + return await callJsonRpc('mempool_submitTransaction', params) +} + diff --git a/src/api/request.ts b/src/api/request.ts new file mode 100644 index 0000000..4d161d1 --- /dev/null +++ b/src/api/request.ts @@ -0,0 +1,50 @@ +import axios, { type AxiosInstance, type AxiosResponse, type AxiosError } from 'axios' + +const STATUS_CODE_SUCCESS = 200 + +export const API_URL = import.meta.env.VITE_APP_API || '' + +// Create axios instance +const instance: AxiosInstance = axios.create({ + baseURL: API_URL, + timeout: 30000, + headers: { + 'Content-Type': 'application/json', + }, + withCredentials: false, +}) + +// Request interceptor +instance.interceptors.request.use( + config => { + // Add request interceptors here (e.g., auth tokens) + return config + }, + (error: AxiosError) => { + return Promise.reject(error) + } +) + +// Response interceptor +instance.interceptors.response.use( + (response: AxiosResponse) => { + if (response?.status !== STATUS_CODE_SUCCESS) { + return Promise.reject(response?.data) + } + return response.data + }, + (error: AxiosError) => { + if (error?.response?.data) { + return Promise.reject(error?.response?.data) + } + return Promise.reject(error) + } +) + +// Set locale for API requests +export const setLocaleApi = (locale: string) => { + instance.defaults.headers.common['lang'] = locale +} + +export default instance + diff --git a/src/assets/imgs/neptune_logo.jpg b/src/assets/imgs/neptune_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72c27beed3cefc85d03eb8f9da69f1b85c43c918 GIT binary patch literal 23552 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 literal 0 HcmV?d00001 diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue new file mode 100644 index 0000000..b58e52b --- /dev/null +++ b/src/components/HelloWorld.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/components/ui/button/Button.vue b/src/components/ui/button/Button.vue new file mode 100644 index 0000000..3330ec9 --- /dev/null +++ b/src/components/ui/button/Button.vue @@ -0,0 +1,28 @@ + + + diff --git a/src/components/ui/button/index.ts b/src/components/ui/button/index.ts new file mode 100644 index 0000000..3b23ad4 --- /dev/null +++ b/src/components/ui/button/index.ts @@ -0,0 +1,38 @@ +import type { VariantProps } from "class-variance-authority" +import { cva } from "class-variance-authority" + +export { default as Button } from "./Button.vue" + +export const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground shadow hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + "default": "h-9 px-4 py-2", + "xs": "h-7 rounded px-2", + "sm": "h-8 rounded-md px-3 text-xs", + "lg": "h-10 rounded-md px-8", + "icon": "h-9 w-9", + "icon-sm": "size-8", + "icon-lg": "size-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +) + +export type ButtonVariants = VariantProps diff --git a/src/components/ui/switch/Switch.vue b/src/components/ui/switch/Switch.vue new file mode 100644 index 0000000..f88f835 --- /dev/null +++ b/src/components/ui/switch/Switch.vue @@ -0,0 +1,35 @@ + + + diff --git a/src/components/ui/switch/index.ts b/src/components/ui/switch/index.ts new file mode 100644 index 0000000..cc081f3 --- /dev/null +++ b/src/components/ui/switch/index.ts @@ -0,0 +1 @@ +export { default as Switch } from "./Switch.vue" diff --git a/src/components/ui/theme-toggle/ThemeToggle.vue b/src/components/ui/theme-toggle/ThemeToggle.vue new file mode 100644 index 0000000..47fdf08 --- /dev/null +++ b/src/components/ui/theme-toggle/ThemeToggle.vue @@ -0,0 +1,20 @@ + + + + diff --git a/src/components/ui/theme-toggle/index.ts b/src/components/ui/theme-toggle/index.ts new file mode 100644 index 0000000..cb469a6 --- /dev/null +++ b/src/components/ui/theme-toggle/index.ts @@ -0,0 +1,2 @@ +export { default as ThemeToggle } from './ThemeToggle.vue' + diff --git a/src/composables/useTheme.ts b/src/composables/useTheme.ts new file mode 100644 index 0000000..8f7a96d --- /dev/null +++ b/src/composables/useTheme.ts @@ -0,0 +1,53 @@ +import { ref, watch } from 'vue' + +type Theme = 'light' | 'dark' + +const theme = ref('light') +const isDark = ref(false) + +// Initialize theme immediately +function initTheme() { + if (window != null) return + + // Load saved theme or default to light + const savedTheme = localStorage.getItem('theme') as Theme | null + if (savedTheme && ['light', 'dark'].includes(savedTheme)) { + theme.value = savedTheme + } + + applyTheme(theme.value) +} + +function applyTheme(newTheme: Theme) { + const root = document.documentElement + + root.classList.toggle('dark', newTheme === 'dark') + isDark.value = newTheme === 'dark' + + // Save to localStorage + localStorage.setItem('theme', newTheme) +} + +// Initialize on module load +if (window != null) initTheme() + +export function useTheme() { + const setTheme = (newTheme: Theme) => { + theme.value = newTheme + applyTheme(newTheme) + } + + const toggleTheme = () => { + setTheme(isDark.value ? 'light' : 'dark') + } + + watch(isDark, () => setTheme(isDark.value ? 'dark' : 'light')) + + return { + theme, + isDark, + setTheme, + toggleTheme, + } +} + diff --git a/src/i18n/index.ts b/src/i18n/index.ts new file mode 100644 index 0000000..ec3771d --- /dev/null +++ b/src/i18n/index.ts @@ -0,0 +1,19 @@ +import { createI18n } from 'vue-i18n' +import en from './locales/en' +import jp from './locales/jp' + +export type MessageSchema = typeof en + +const i18n = createI18n<[MessageSchema], 'en' | 'jp'>({ + legacy: false, + locale: 'en', + fallbackLocale: 'en', + messages: { + en, + jp, + }, + globalInjection: true, +}) + +export default i18n + diff --git a/src/i18n/locales/en.ts b/src/i18n/locales/en.ts new file mode 100644 index 0000000..912b906 --- /dev/null +++ b/src/i18n/locales/en.ts @@ -0,0 +1,41 @@ +export default { + common: { + app_name: 'Neptune Wallet', + welcome: 'Welcome to Neptune Wallet', + cancel: 'Cancel', + confirm: 'Confirm', + save: 'Save', + back: 'Back', + next: 'Next', + submit: 'Submit', + close: 'Close', + }, + wallet: { + title: 'Wallet', + create: 'Create New Wallet', + recover: 'Recover Wallet', + balance: 'Balance', + address: 'Address', + send: 'Send', + receive: 'Receive', + }, + auth: { + login: 'Login', + password: 'Password', + unlock: 'Unlock Wallet', + create_password: 'Create Password', + confirm_password: 'Confirm Password', + }, + validation: { + required: 'This field is required', + invalid_password: 'Invalid password', + password_mismatch: 'Passwords do not match', + invalid_address: 'Invalid address', + }, + errors: { + generic: 'An error occurred', + network: 'Network error', + failed_to_load: 'Failed to load data', + }, +} + diff --git a/src/i18n/locales/jp.ts b/src/i18n/locales/jp.ts new file mode 100644 index 0000000..631386f --- /dev/null +++ b/src/i18n/locales/jp.ts @@ -0,0 +1,41 @@ +export default { + common: { + app_name: 'Neptune ウォレット', + welcome: 'Neptune ウォレットへようこそ', + cancel: 'キャンセル', + confirm: '確認', + save: '保存', + back: '戻る', + next: '次へ', + submit: '送信', + close: '閉じる', + }, + wallet: { + title: 'ウォレット', + create: '新しいウォレットを作成', + recover: 'ウォレットを復元', + balance: '残高', + address: 'アドレス', + send: '送信', + receive: '受信', + }, + auth: { + login: 'ログイン', + password: 'パスワード', + unlock: 'ウォレットをアンロック', + create_password: 'パスワードを作成', + confirm_password: 'パスワードを確認', + }, + validation: { + required: 'この項目は必須です', + invalid_password: '無効なパスワード', + password_mismatch: 'パスワードが一致しません', + invalid_address: '無効なアドレス', + }, + errors: { + generic: 'エラーが発生しました', + network: 'ネットワークエラー', + failed_to_load: 'データの読み込みに失敗しました', + }, +} + diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..8bc6824 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,8 @@ +import type { ClassValue } from 'clsx' +import { clsx } from 'clsx' +import { twMerge } from 'tailwind-merge' + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..468b631 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,20 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import router from './router' +import i18n from './i18n' +import App from './App.vue' +import { useTheme } from './composables/useTheme' +import './style.css' + +// Initialize theme before mounting app +useTheme() + +const app = createApp(App) + +// Install plugins +app.use(createPinia()) +app.use(router) +app.use(i18n) + +app.mount('#app') + diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..ee2a05b --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,46 @@ +import { createRouter, createWebHistory } from 'vue-router' +import type { RouteRecordRaw } from 'vue-router' + +const routes: RouteRecordRaw[] = [ + { + path: '/', + name: 'home', + component: () => import('@/views/HomeView.vue'), + meta: { requiresAuth: true }, + }, + { + path: '/auth', + name: 'auth', + component: () => import('@/views/AuthView.vue'), + meta: { requiresAuth: false }, + }, + { + path: '/:pathMatch(.*)*', + name: 'not-found', + component: () => import('@/views/NotFoundView.vue'), + }, +] + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes, +}) + +// Navigation guards +router.beforeEach((to, _from, next) => { + // Add authentication logic here + // const hasWallet = useNeptuneStore().hasWallet + + if (to.meta.requiresAuth) { + // Check if user has wallet + // if (!hasWallet) { + // next({ name: 'auth' }) + // return + // } + } + + next() +}) + +export default router + diff --git a/src/stores/authStore.ts b/src/stores/authStore.ts new file mode 100644 index 0000000..a02bcac --- /dev/null +++ b/src/stores/authStore.ts @@ -0,0 +1,52 @@ +import { ref, computed } from 'vue' +import { defineStore } from 'pinia' + +export type AuthState = 'onboarding' | 'login' | 'create' | 'recovery' | 'confirm' | 'complete' + +export const useAuthStore = defineStore('auth', () => { + // State + const currentState = ref('onboarding') + const previousState = ref(null) + + // Getters + const getCurrentState = computed(() => currentState.value) + const getPreviousState = computed(() => previousState.value) + + // Actions + const setState = (state: AuthState) => { + previousState.value = currentState.value + currentState.value = state + } + + const goToCreate = () => { + setState('create') + } + + const goToLogin = () => { + setState('login') + } + + const goToRecover = () => { + setState('recovery') + } + + const goBack = () => { + if (previousState.value) { + setState(previousState.value) + } else { + setState('onboarding') + } + } + + return { + currentState, + getCurrentState, + getPreviousState, + setState, + goToCreate, + goToLogin, + goToRecover, + goBack, + } +}) + diff --git a/src/stores/index.ts b/src/stores/index.ts new file mode 100644 index 0000000..f1efee2 --- /dev/null +++ b/src/stores/index.ts @@ -0,0 +1,3 @@ +export { useAuthStore } from './authStore' +export { useNeptuneStore } from './neptuneStore' + diff --git a/src/stores/neptuneStore.ts b/src/stores/neptuneStore.ts new file mode 100644 index 0000000..fc7e816 --- /dev/null +++ b/src/stores/neptuneStore.ts @@ -0,0 +1,140 @@ +import { ref, computed } from 'vue' +import { defineStore } from 'pinia' + +export interface WalletState { + receiverId: string | null + viewKey: string | null + spendingKey: string | null + address: string | null + network: 'mainnet' | 'testnet' + balance: string | null + pendingBalance: string | null + utxos: any[] + minBlockHeight: number | null +} + +export const useNeptuneStore = defineStore('neptune', () => { + const defaultNetwork = (import.meta.env.VITE_NODE_NETWORK || 'mainnet') as 'mainnet' | 'testnet' + + // State + const wallet = ref({ + receiverId: null, + viewKey: null, + spendingKey: null, + address: null, + network: defaultNetwork, + balance: null, + pendingBalance: null, + utxos: [], + minBlockHeight: null, + }) + + const keystoreFileName = ref(null) + + // Getters + const getWallet = computed(() => wallet.value) + const getReceiverId = computed(() => wallet.value.receiverId) + const getViewKey = computed(() => wallet.value.viewKey) + const getSpendingKey = computed(() => wallet.value.spendingKey) + const getAddress = computed(() => wallet.value.address) + const getNetwork = computed(() => wallet.value.network) + const getBalance = computed(() => wallet.value.balance) + const getPendingBalance = computed(() => wallet.value.pendingBalance) + const getUtxos = computed(() => wallet.value.utxos) + const getMinBlockHeight = computed(() => wallet.value.minBlockHeight ?? null) + const hasWallet = computed(() => wallet.value.address !== null) + const getKeystoreFileName = computed(() => keystoreFileName.value ?? null) + + // Actions + const setReceiverId = (receiverId: string | null) => { + wallet.value.receiverId = receiverId + } + + const setViewKey = (viewKey: string | null) => { + wallet.value.viewKey = viewKey + } + + const setSpendingKey = (spendingKey: string | null) => { + wallet.value.spendingKey = spendingKey + } + + const setAddress = (address: string | null) => { + wallet.value.address = address + } + + const setNetwork = (network: 'mainnet' | 'testnet') => { + wallet.value.network = network + } + + const setBalance = (balance: string | null) => { + wallet.value.balance = balance + } + + const setPendingBalance = (pendingBalance: string | null) => { + wallet.value.pendingBalance = pendingBalance + } + + const setUtxos = (utxos: any[]) => { + wallet.value.utxos = utxos + } + + const setMinBlockHeight = (minBlockHeight: number | null) => { + wallet.value.minBlockHeight = minBlockHeight + } + + const setWallet = (walletData: Partial) => { + wallet.value = { ...wallet.value, ...walletData } + } + + const setKeystoreFileName = (fileName: string | null) => { + keystoreFileName.value = fileName + } + + const clearWallet = () => { + wallet.value = { + receiverId: null, + viewKey: null, + spendingKey: null, + address: null, + network: defaultNetwork, + balance: null, + pendingBalance: null, + utxos: [], + minBlockHeight: null, + } + keystoreFileName.value = null + } + + return { + // State + wallet, + keystoreFileName, + // Getters + getWallet, + getReceiverId, + getViewKey, + getSpendingKey, + getAddress, + getNetwork, + getBalance, + getPendingBalance, + getUtxos, + getMinBlockHeight, + hasWallet, + getKeystoreFileName, + // Actions + setReceiverId, + setViewKey, + setSpendingKey, + setAddress, + setNetwork, + setBalance, + setPendingBalance, + setUtxos, + setMinBlockHeight, + setWallet, + setKeystoreFileName, + clearWallet, + } +}) + diff --git a/src/style.css b/src/style.css new file mode 100644 index 0000000..d47e6ac --- /dev/null +++ b/src/style.css @@ -0,0 +1,121 @@ +@import "tailwindcss"; + +@plugin "tailwindcss-animate"; + +@custom-variant dark (&:is(.dark *)); + +@theme inline { + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); +} + +:root { + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.205 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.205 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.922 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.556 0 0); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.556 0 0); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/src/utils/constants.ts b/src/utils/constants.ts new file mode 100644 index 0000000..3d004ea --- /dev/null +++ b/src/utils/constants.ts @@ -0,0 +1,6 @@ +export const PAGE_FIRST = 1 +export const PER_PAGE = 20 +export const POLLING_INTERVAL = 1000 * 60 // 1 minute +export const DEFAULT_MIN_BLOCK_HEIGHT = 0 +export const STATUS_CODE_SUCCESS = 200 + diff --git a/src/views/AuthView.vue b/src/views/AuthView.vue new file mode 100644 index 0000000..5f16cd7 --- /dev/null +++ b/src/views/AuthView.vue @@ -0,0 +1,13 @@ + + + + diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue new file mode 100644 index 0000000..17adc77 --- /dev/null +++ b/src/views/HomeView.vue @@ -0,0 +1,13 @@ + + + + diff --git a/src/views/NotFoundView.vue b/src/views/NotFoundView.vue new file mode 100644 index 0000000..46310a0 --- /dev/null +++ b/src/views/NotFoundView.vue @@ -0,0 +1,21 @@ + + + + diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 0000000..16ff1cf --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,4 @@ +// Tailwind CSS v4 uses CSS-first configuration +// This file is kept for shadcn-vue compatibility but configuration is done in CSS +export default {} + diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..f865296 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,24 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "types": [ + "vite/client" + ], + "baseUrl": ".", + "paths": { + "@/*": [ + "./src/*" + ] + }, + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue" + ] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..07a88bb --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..7be5155 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..ada632c --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,14 @@ +import path from 'node:path' +import { defineConfig } from 'vite' +import tailwindcss from '@tailwindcss/vite' +import vue from '@vitejs/plugin-vue' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [vue(), tailwindcss()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, +})