commit 0c220d3fe2463ebfffb2f14263fd51ff6937711e Author: guoyoudu Date: Mon Mar 2 00:17:33 2026 +0800 new version diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5742dcc --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Environment variables +.env +.env.local +.env.*.local + +# Build files +build/ +out/ + +# Test coverage +coverage/ + +# Temporary files +*.tmp +*.temp +.cache/ \ No newline at end of file diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..c904638 --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,237 @@ +# 成长星球项目部署步骤 + +## 项目概述 + +成长星球是一个儿童成长规划Web应用,使用Vue 3 + TypeScript + Vite + Pinia + Three.js + Element Plus技术栈开发。 + +## 部署前准备 + +### 1. 环境要求 + +- Node.js 16.x 或更高版本 +- npm 7.x 或更高版本 +- 服务器环境(推荐使用Nginx + PM2) +- 域名(可选) + +### 2. 项目构建 + +1. **克隆项目** + ```bash + git clone <项目仓库地址> + cd 儿童成长规划项目 + ``` + +2. **安装依赖** + ```bash + npm install + ``` + +3. **构建生产版本** + ```bash + npm run build + ``` + + 构建完成后,生成的静态文件将位于 `dist` 目录中。 + +## 服务器部署 + +### 1. 服务器准备 + +- **安装Node.js** + ```bash + # Ubuntu/Debian + curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - + sudo apt-get install -y nodejs + + # CentOS/RHEL + curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash - + sudo yum install -y nodejs + ``` + +- **安装Nginx** + ```bash + # Ubuntu/Debian + sudo apt-get update + sudo apt-get install -y nginx + + # CentOS/RHEL + sudo yum install -y nginx + ``` + +- **安装PM2(可选,用于管理Node.js应用)** + ```bash + npm install -g pm2 + ``` + +### 2. 部署静态文件 + +1. **复制构建文件到服务器** + ```bash + # 使用scp命令 + scp -r dist/* user@server_ip:/var/www/chengzhangxingqiu + ``` + +2. **配置Nginx** + + 创建Nginx配置文件: + ```bash + sudo nano /etc/nginx/sites-available/chengzhangxingqiu + ``` + + 配置内容: + ```nginx + server { + listen 80; + server_name your-domain.com; + + root /var/www/chengzhangxingqiu; + index index.html; + + location / { + try_files $uri $uri/ /index.html; + } + + # 静态文件缓存 + location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { + expires 30d; + add_header Cache-Control "public, max-age=2592000"; + } + } + ``` + +3. **启用站点** + ```bash + sudo ln -s /etc/nginx/sites-available/chengzhangxingqiu /etc/nginx/sites-enabled/ + sudo nginx -t + sudo systemctl restart nginx + ``` + +### 3. HTTPS配置(可选) + +使用Let's Encrypt获取免费SSL证书: + +```bash +# 安装certbot +sudo apt-get install certbot python3-certbot-nginx + +# 获取证书 +sudo certbot --nginx -d your-domain.com + +# 自动更新证书 +sudo systemctl enable certbot.timer +``` + +## 部署后检查 + +1. **访问应用** + 打开浏览器访问 `http://your-domain.com` 或 `https://your-domain.com` + +2. **功能测试** + - 测试用户登录功能 + - 测试各个模块的功能 + - 测试图片加载是否正常 + - 测试英语发音功能 + +3. **性能监控** + - 监控服务器资源使用情况 + - 检查页面加载速度 + - 测试响应时间 + +## 维护与更新 + +### 1. 代码更新 + +```bash +# 拉取最新代码 +git pull + +# 安装新依赖 +npm install + +# 重新构建 +npm run build + +# 复制新文件到服务器 +scp -r dist/* user@server_ip:/var/www/chengzhangxingqiu + +# 重启Nginx(如果需要) +sudo systemctl restart nginx +``` + +### 2. 日志查看 + +```bash +# Nginx访问日志 +sudo tail -f /var/log/nginx/access.log + +# Nginx错误日志 +sudo tail -f /var/log/nginx/error.log +``` + +### 3. 常见问题排查 + +- **页面空白**:检查Nginx配置和文件路径 +- **图片不显示**:检查图片路径和文件权限 +- **功能异常**:检查浏览器控制台错误信息 +- **服务器错误**:检查Nginx错误日志 + +## 安全建议 + +1. **定期更新依赖** + ```bash + npm update + ``` + +2. **设置文件权限** + ```bash + sudo chown -R www-data:www-data /var/www/chengzhangxingqiu + sudo chmod -R 755 /var/www/chengzhangxingqiu + ``` + +3. **启用防火墙** + ```bash + sudo ufw enable + sudo ufw allow 80/tcp + sudo ufw allow 443/tcp + ``` + +4. **定期备份** + ```bash + # 备份静态文件 + tar -czf chengzhangxingqiu-backup-$(date +%Y%m%d).tar.gz /var/www/chengzhangxingqiu + ``` + +## 部署流程图 + +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ 本地开发环境 │────>│ 构建生产版本 │────>│ 部署到服务器 │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ + │ │ + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ 静态文件生成 │────>│ Nginx配置 │ + └─────────────────┘ └─────────────────┘ + │ + ▼ + ┌─────────────────┐ + │ HTTPS配置 │ + └─────────────────┘ + │ + ▼ + ┌─────────────────┐ + │ 功能测试 │ + └─────────────────┘ +``` + +## 注意事项 + +1. 确保服务器有足够的磁盘空间和内存 +2. 定期更新服务器系统和软件包 +3. 监控服务器状态,及时处理异常 +4. 备份重要数据,防止数据丢失 +5. 遵循安全最佳实践,保护用户数据 + +--- + +**部署完成后,您的成长星球应用将可以在互联网上访问,为孩子们提供一个有趣、安全的学习环境。** \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..af93725 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + 成长星球 + + +
+ + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..427c446 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2178 @@ +{ + "name": "growth-planet", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "growth-planet", + "version": "0.0.0", + "dependencies": { + "@vue/tsconfig": "^0.8.1", + "axios": "^1.13.6", + "element-plus": "^2.13.3", + "pinia": "^3.0.4", + "three": "^0.183.2", + "vue": "^3.5.13" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.2.1", + "typescript": "~5.6.2", + "vite": "^6.0.5", + "vue-tsc": "^2.1.10" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", + "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.4.tgz", + "integrity": "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.5", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.5.tgz", + "integrity": "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.4", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.8", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz", + "integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.15", + "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.15.tgz", + "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.15" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.15", + "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.15.tgz", + "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.15", + "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.15.tgz", + "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.29", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.29.tgz", + "integrity": "sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/shared": "3.5.29", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.29", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.29.tgz", + "integrity": "sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.29", + "@vue/shared": "3.5.29" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.29", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.29.tgz", + "integrity": "sha512-oJZhN5XJs35Gzr50E82jg2cYdZQ78wEwvRO6Y63TvLVTc+6xICzJHP1UIecdSPPYIbkautNBanDiWYa64QSFIA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/compiler-core": "3.5.29", + "@vue/compiler-dom": "3.5.29", + "@vue/compiler-ssr": "3.5.29", + "@vue/shared": "3.5.29", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.29", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.29.tgz", + "integrity": "sha512-Y/ARJZE6fpjzL5GH/phJmsFwx3g6t2KmHKHx5q+MLl2kencADKIrhH5MLF6HHpRMmlRAYBRSvv347Mepf1zVNw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.29", + "@vue/shared": "3.5.29" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.9", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-7.7.9.tgz", + "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.9" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.9", + "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", + "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.9", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.9", + "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", + "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.12", + "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-2.2.12.tgz", + "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.29", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.29.tgz", + "integrity": "sha512-zcrANcrRdcLtmGZETBxWqIkoQei8HaFpZWx/GHKxx79JZsiZ8j1du0VUJtu4eJjgFvU/iKL5lRXFXksVmI+5DA==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.29" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.29", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.29.tgz", + "integrity": "sha512-8DpW2QfdwIWOLqtsNcds4s+QgwSaHSJY/SUe04LptianUQ/0xi6KVsu/pYVh+HO3NTVvVJjIPL2t6GdeKbS4Lg==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.29", + "@vue/shared": "3.5.29" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.29", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.29.tgz", + "integrity": "sha512-AHvvJEtcY9tw/uk+s/YRLSlxxQnqnAkjqvK25ZiM4CllCZWzElRAoQnCM42m9AHRLNJ6oe2kC5DCgD4AUdlvXg==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.29", + "@vue/runtime-core": "3.5.29", + "@vue/shared": "3.5.29", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.29", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.29.tgz", + "integrity": "sha512-G/1k6WK5MusLlbxSE2YTcqAAezS+VuwHhOvLx2KnQU7G2zCH6KIb+5Wyt6UjMq7a3qPzNEjJXs1hvAxDclQH+g==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.29", + "@vue/shared": "3.5.29" + }, + "peerDependencies": { + "vue": "3.5.29" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.29", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.29.tgz", + "integrity": "sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.8.1", + "resolved": "https://registry.npmmirror.com/@vue/tsconfig/-/tsconfig-0.8.1.tgz", + "integrity": "sha512-aK7feIWPXFSUhsCP9PFqPyFOcz4ENkb8hZ2pneL6m2UjCkccvaOhC/5KCKluuBufvp2KzkbdA2W2pk20vLzu3g==", + "license": "MIT", + "peerDependencies": { + "typescript": "5.x", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmmirror.com/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.13.6", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.13.6.tgz", + "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmmirror.com/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/copy-anything": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-4.0.5.tgz", + "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", + "license": "MIT", + "dependencies": { + "is-what": "^5.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.19", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "license": "MIT" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/element-plus": { + "version": "2.13.3", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.13.3.tgz", + "integrity": "sha512-RwLVtFpeHjZ4UCtHxVi1/sGR2cr2xOL7hqWa7qJc/+gdO6QavVG8Nw1C647obCb3tIg2ztMhNbIIjZUv+6z1og==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.2", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.17.20", + "@types/lodash-es": "^4.17.12", + "@vueuse/core": "^10.11.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.19", + "lodash": "^4.17.23", + "lodash-es": "^4.17.23", + "lodash-unified": "^1.0.3", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.3.0" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/is-what": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-5.5.0.tgz", + "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.23", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.23.tgz", + "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-3.0.4.tgz", + "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.7" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.5.0", + "vue": "^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/superjson": { + "version": "2.2.6", + "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.6.tgz", + "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", + "license": "MIT", + "dependencies": { + "copy-anything": "^4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/three": { + "version": "0.183.2", + "resolved": "https://registry.npmmirror.com/three/-/three-0.183.2.tgz", + "integrity": "sha512-di3BsL2FEQ1PA7Hcvn4fyJOlxRRgFYBpMTcyOgkwJIaDOdJMebEFPA+t98EvjuljDx4hNulAGwF6KIjtwI5jgQ==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vite": { + "version": "6.4.1", + "resolved": "https://registry.npmmirror.com/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.29", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.29.tgz", + "integrity": "sha512-BZqN4Ze6mDQVNAni0IHeMJ5mwr8VAJ3MQC9FmprRhcBYENw+wOAAjRj8jfmN6FLl0j96OXbR+CjWhmAmM+QGnA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.29", + "@vue/compiler-sfc": "3.5.29", + "@vue/runtime-dom": "3.5.29", + "@vue/server-renderer": "3.5.29", + "@vue/shared": "3.5.29" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-tsc": { + "version": "2.2.12", + "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-2.2.12.tgz", + "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.15", + "@vue/language-core": "2.2.12" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4e7f648 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "growth-planet", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@vue/tsconfig": "^0.8.1", + "axios": "^1.13.6", + "element-plus": "^2.13.3", + "pinia": "^3.0.4", + "three": "^0.183.2", + "vue": "^3.5.13" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.2.1", + "typescript": "~5.6.2", + "vite": "^6.0.5", + "vue-tsc": "^2.1.10" + } +} diff --git a/public/badge.png b/public/badge.png new file mode 100644 index 0000000..e69de29 diff --git a/public/craft.png b/public/craft.png new file mode 100644 index 0000000..e69de29 diff --git a/public/find_diff_A.png b/public/find_diff_A.png new file mode 100644 index 0000000..e69de29 diff --git a/public/find_diff_B.png b/public/find_diff_B.png new file mode 100644 index 0000000..e69de29 diff --git a/public/habit.png b/public/habit.png new file mode 100644 index 0000000..e69de29 diff --git a/public/home.png b/public/home.png new file mode 100644 index 0000000..e69de29 diff --git a/public/knowledge.png b/public/knowledge.png new file mode 100644 index 0000000..e69de29 diff --git a/public/logic.png b/public/logic.png new file mode 100644 index 0000000..e69de29 diff --git a/public/parent.png b/public/parent.png new file mode 100644 index 0000000..e69de29 diff --git a/public/planet.png b/public/planet.png new file mode 100644 index 0000000..10e39d3 --- /dev/null +++ b/public/planet.png @@ -0,0 +1 @@ +iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwOTI0LCAyMDE3LzA1LzA1LCAyNDQ6MTQ6NTIgICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjYtMDMtMDFUMjE6MTc6NTArMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI2LTAzLTAxVDIxOjE3OjUwKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI2LTAzLTAxVDIxOjE3OjUwKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmQ4N2Q5N2JkLWU2MTMtNDU2YS1iN2Q4LTVmMjY5MDQwZDAyZSIgc3RFdnQ6b2Zmc2V0PSIwIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuZGlkOmQ4N2Q5N2JkLWU2MTMtNDU2YS1iN2Q4LTVmMjY5MDQwZDAyZSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmQ4N2Q5N2JkLWU2MTMtNDU2YS1iN2Q4LTVmMjY5MDQwZDAyZSIgc3RFdnQ6d2hlbj0iMjAyNi0wMy0wMVQyMToxNzo1MCswODowMCIgdHlwZT0iZnJhY3RhbE5vaXNlIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjYtMDMtMDFUMjE6MTc6NTArMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI2LTAzLTAxVDIxOjE3OjUwKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI2LTAzLTAxVDIxOjE3OjUwKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmQ4N2Q5N2JkLWU2MTMtNDU2YS1iN2Q4LTVmMjY5MDQwZDAyZSIgc3RFdnQ6b2Zmc2V0PSIwIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuZGlkOmQ4N2Q5N2JkLWU2MTMtNDU2YS1iN2Q4LTVmMjY5MDQwZDAyZSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmQ4N2Q5N2JkLWU2MTMtNDU2YS1iN2Q4LTVmMjY5MDQwZDAyZSIgc3RFdnQ6d2hlbj0iMjAyNi0wMy0wMVQyMToxNzo1MCswODowMCIgdHlwZT0iZnJhY3RhbE5vaXNlIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+4w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7 \ No newline at end of file diff --git a/public/star.png b/public/star.png new file mode 100644 index 0000000..1525042 --- /dev/null +++ b/public/star.png @@ -0,0 +1 @@ +iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwOTI0LCAyMDE3LzA1LzA1LCAyNDQ6MTQ6NTIgICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjYtMDMtMDFUMjE6MTc6NTArMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI2LTAzLTAxVDIxOjE3OjUwKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI2LTAzLTAxVDIxOjE3OjUwKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmQ4N2Q5N2JkLWU2MTMtNDU2YS1iN2Q4LTVmMjY5MDQwZDAyZSIgc3RFdnQ6b2Zmc2V0PSIwIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuZGlkOmQ4N2Q5N2JkLWU2MTMtNDU2YS1iN2Q4LTVmMjY5MDQwZDAyZSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmQ4N2Q5N2JkLWU2MTMtNDU2YS1iN2Q4LTVmMjY5MDQwZDAyZSIgc3RFdnQ6d2hlbj0iMjAyNi0wMy0wMVQyMToxNzo1MCswODowMCIgdHlwZT0iZnJhY3RhbE5vaXNlIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjYtMDMtMDFUMjE6MTc6NTArMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI2LTAzLTAxVDIxOjE3OjUwKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI2LTAzLTAxVDIxOjE3OjUwKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmQ4N2Q5N2JkLWU2MTMtNDU2YS1iN2Q4LTVmMjY5MDQwZDAyZSIgc3RFdnQ6b2Zmc2V0PSIwIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuZGlkOmQ4N2Q5N2JkLWU2MTMtNDU2YS1iN2Q4LTVmMjY5MDQwZDAyZSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmQ4N2Q5N2JkLWU2MTMtNDU2YS1iN2Q4LTVmMjY5MDQwZDAyZSIgc3RFdnQ6d2hlbj0iMjAyNi0wMy0wMVQyMToxNzo1MCswODowMCIgdHlwZT0iZnJhY3RhbE5vaXNlIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+4w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n4w7z4w7n4w674w6b4w634w6F4w634w6b4w6r4w6z4w7H4w7n \ No newline at end of file diff --git a/public/五人一起.png b/public/五人一起.png new file mode 100644 index 0000000..bde9f0d Binary files /dev/null and b/public/五人一起.png differ diff --git a/public/儿童成长星球.png b/public/儿童成长星球.png new file mode 100644 index 0000000..1c90daf Binary files /dev/null and b/public/儿童成长星球.png differ diff --git a/public/哪吒.png b/public/哪吒.png new file mode 100644 index 0000000..f1c408a Binary files /dev/null and b/public/哪吒.png differ diff --git a/public/唐僧.png b/public/唐僧.png new file mode 100644 index 0000000..88e0b3e Binary files /dev/null and b/public/唐僧.png differ diff --git a/public/孙悟空.png b/public/孙悟空.png new file mode 100644 index 0000000..0f032c0 Binary files /dev/null and b/public/孙悟空.png differ diff --git a/public/成长星球1.png b/public/成长星球1.png new file mode 100644 index 0000000..a847cc2 Binary files /dev/null and b/public/成长星球1.png differ diff --git a/public/沙僧.png b/public/沙僧.png new file mode 100644 index 0000000..0559400 Binary files /dev/null and b/public/沙僧.png differ diff --git a/public/猪八戒.png b/public/猪八戒.png new file mode 100644 index 0000000..c4d5b1c Binary files /dev/null and b/public/猪八戒.png differ diff --git a/public/生成卡通图片 (10).png b/public/生成卡通图片 (10).png new file mode 100644 index 0000000..b5c5f46 Binary files /dev/null and b/public/生成卡通图片 (10).png differ diff --git a/public/生成卡通图片 (11).png b/public/生成卡通图片 (11).png new file mode 100644 index 0000000..b8550ab Binary files /dev/null and b/public/生成卡通图片 (11).png differ diff --git a/public/生成卡通图片 (12).png b/public/生成卡通图片 (12).png new file mode 100644 index 0000000..d70a228 Binary files /dev/null and b/public/生成卡通图片 (12).png differ diff --git a/public/生成卡通图片 (13).png b/public/生成卡通图片 (13).png new file mode 100644 index 0000000..5c64683 Binary files /dev/null and b/public/生成卡通图片 (13).png differ diff --git a/public/生成卡通图片 (4).png b/public/生成卡通图片 (4).png new file mode 100644 index 0000000..d36f8ed Binary files /dev/null and b/public/生成卡通图片 (4).png differ diff --git a/public/生成卡通图片 (5).png b/public/生成卡通图片 (5).png new file mode 100644 index 0000000..2bf6c8c Binary files /dev/null and b/public/生成卡通图片 (5).png differ diff --git a/public/生成卡通图片 (6).png b/public/生成卡通图片 (6).png new file mode 100644 index 0000000..4751a9b Binary files /dev/null and b/public/生成卡通图片 (6).png differ diff --git a/public/生成卡通图片 (7).png b/public/生成卡通图片 (7).png new file mode 100644 index 0000000..2028925 Binary files /dev/null and b/public/生成卡通图片 (7).png differ diff --git a/public/生成卡通图片 (8).png b/public/生成卡通图片 (8).png new file mode 100644 index 0000000..971f92c Binary files /dev/null and b/public/生成卡通图片 (8).png differ diff --git a/public/生成卡通图片 (9).png b/public/生成卡通图片 (9).png new file mode 100644 index 0000000..33a783f Binary files /dev/null and b/public/生成卡通图片 (9).png differ diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..f8e940e --- /dev/null +++ b/src/App.vue @@ -0,0 +1,1922 @@ + + + + + \ No newline at end of file diff --git a/src/components/AdventureArea.vue b/src/components/AdventureArea.vue new file mode 100644 index 0000000..5e699b8 --- /dev/null +++ b/src/components/AdventureArea.vue @@ -0,0 +1,1176 @@ + + + + + \ No newline at end of file diff --git a/src/components/AdventureMap.vue b/src/components/AdventureMap.vue new file mode 100644 index 0000000..a284836 --- /dev/null +++ b/src/components/AdventureMap.vue @@ -0,0 +1,4662 @@ + + + + + + + diff --git a/src/components/CalendarArea.vue b/src/components/CalendarArea.vue new file mode 100644 index 0000000..e2b839c --- /dev/null +++ b/src/components/CalendarArea.vue @@ -0,0 +1,692 @@ + + + + + diff --git a/src/components/CraftArea.vue b/src/components/CraftArea.vue new file mode 100644 index 0000000..8bacae3 --- /dev/null +++ b/src/components/CraftArea.vue @@ -0,0 +1,579 @@ + + + + + \ No newline at end of file diff --git a/src/components/HabitArea.vue b/src/components/HabitArea.vue new file mode 100644 index 0000000..83f9c73 --- /dev/null +++ b/src/components/HabitArea.vue @@ -0,0 +1,1310 @@ + + + + + \ No newline at end of file diff --git a/src/components/KnowledgeArea.vue b/src/components/KnowledgeArea.vue new file mode 100644 index 0000000..65c906a --- /dev/null +++ b/src/components/KnowledgeArea.vue @@ -0,0 +1,3604 @@ + + + + + \ No newline at end of file diff --git a/src/components/LogicArea.vue b/src/components/LogicArea.vue new file mode 100644 index 0000000..8001e99 --- /dev/null +++ b/src/components/LogicArea.vue @@ -0,0 +1,574 @@ + + + + + \ No newline at end of file diff --git a/src/components/ParentArea.vue b/src/components/ParentArea.vue new file mode 100644 index 0000000..df744d6 --- /dev/null +++ b/src/components/ParentArea.vue @@ -0,0 +1,790 @@ + + + + + \ No newline at end of file diff --git a/src/components/RewardArea.vue b/src/components/RewardArea.vue new file mode 100644 index 0000000..9ececd3 --- /dev/null +++ b/src/components/RewardArea.vue @@ -0,0 +1,813 @@ + + + + + diff --git a/src/components/WelcomeArea.vue b/src/components/WelcomeArea.vue new file mode 100644 index 0000000..68c2a9b --- /dev/null +++ b/src/components/WelcomeArea.vue @@ -0,0 +1,744 @@ + + + + + \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..f08b418 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,11 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import App from './App.vue' +import './style.css' + +const app = createApp(App) +app.use(createPinia()) +app.use(ElementPlus) +app.mount('#app') \ No newline at end of file diff --git a/src/stores/adventureProgress.ts b/src/stores/adventureProgress.ts new file mode 100644 index 0000000..783c869 --- /dev/null +++ b/src/stores/adventureProgress.ts @@ -0,0 +1,264 @@ +import { defineStore } from 'pinia'; + +// 从 localStorage 加载数据 +const loadFromLocalStorage = () => { + try { + const saved = localStorage.getItem('adventureProgressData'); + return saved ? JSON.parse(saved) : null; + } catch (error) { + console.error('加载冒险进度失败:', error); + return null; + } +}; + +// 保存到 localStorage +const saveToLocalStorage = (data: any) => { + try { + localStorage.setItem('adventureProgressData', JSON.stringify(data)); + } catch (error) { + console.error('保存冒险进度失败:', error); + } +}; + +// 冒险进度存储 +export const useAdventureProgressStore = defineStore('adventureProgress', { + state: () => { + // 尝试从 localStorage 加载保存的数据 + const savedData = loadFromLocalStorage(); + + return { + // 各游戏完成次数 + gameCompletions: savedData?.gameCompletions || { + // 太空游戏 + 'planet-explorer': 0, + 'star-collector': 0, + 'space-puzzle': 0, + 'moon-walk': 0, + 'constellation': 0, + // 天空游戏 + 'cloud-maze': 0, + 'bird-flight': 0, + 'rainbow-paint': 0, + 'cloud-puzzle': 0, + // 海洋游戏 + 'treasure-hunt': 0, + 'fish-match': 0, + 'coral-color': 0, + 'ocean-puzzle': 0, + // 地下游戏 + 'mining': 0, + 'mole-whack': 0, + 'cave-explore': 0, + // 森林游戏 + 'animal-friends': 0, + 'plant-grow': 0, + 'leaf-collect': 0, + 'forest-puzzle': 0 + }, + // 各游戏最高分数 + highScores: savedData?.highScores || { + 'planet-explorer': 0, + 'star-collector': 0, + 'space-puzzle': 0, + 'moon-walk': 0, + 'constellation': 0, + 'cloud-maze': 0, + 'bird-flight': 0, + 'rainbow-paint': 0, + 'cloud-puzzle': 0, + 'treasure-hunt': 0, + 'fish-match': 0, + 'coral-color': 0, + 'ocean-puzzle': 0, + 'mining': 0, + 'mole-whack': 0, + 'cave-explore': 0, + 'animal-friends': 0, + 'plant-grow': 0, + 'leaf-collect': 0, + 'forest-puzzle': 0 + }, + // 解锁的场景 + unlockedScenes: savedData?.unlockedScenes || ['space', 'sky'], + // 游戏总游玩时间(分钟) + totalPlayTime: savedData?.totalPlayTime || 0, + // 首次访问时间 + firstVisit: savedData?.firstVisit || new Date().toISOString(), + // 最后访问时间 + lastVisit: savedData?.lastVisit || new Date().toISOString() + }; + }, + + getters: { + // 获取游戏完成次数 + getGameCompletions: (state) => (gameId: string) => state.gameCompletions[gameId] || 0, + + // 获取游戏最高分 + getHighScore: (state) => (gameId: string) => state.highScores[gameId] || 0, + + // 获取场景是否解锁 + isSceneUnlocked: (state) => (scene: string) => state.unlockedScenes.includes(scene), + + // 获取总完成次数 + getTotalCompletions: (state) => Object.values(state.gameCompletions).reduce((a, b) => a + b, 0), + + // 获取解锁场景数 + getUnlockedScenesCount: (state) => state.unlockedScenes.length + }, + + actions: { + // 保存状态到 localStorage + $persist() { + const data = { + gameCompletions: this.gameCompletions, + highScores: this.highScores, + unlockedScenes: this.unlockedScenes, + totalPlayTime: this.totalPlayTime, + firstVisit: this.firstVisit, + lastVisit: this.lastVisit + }; + saveToLocalStorage(data); + }, + + // 记录游戏完成 + recordGameCompletion(gameId: string, score: number) { + this.gameCompletions[gameId]++; + + // 更新最高分 + if (score > (this.highScores[gameId] || 0)) { + this.highScores[gameId] = score; + } + + // 检查是否解锁新场景 + this.checkSceneUnlocks(); + + // 更新最后访问时间 + this.lastVisit = new Date().toISOString(); + + this.$persist(); + }, + + // 检查场景解锁条件 + checkSceneUnlocks() { + const totalCompletions = this.getTotalCompletions; + + // 完成太空场景的所有游戏后解锁天空 + const spaceCompleted = ['planet-explorer', 'star-collector', 'space-puzzle', 'moon-walk', 'constellation'] + .every(game => this.gameCompletions[game] > 0); + if (spaceCompleted && !this.unlockedScenes.includes('sky')) { + this.unlockedScenes.push('sky'); + } + + // 完成天空场景的所有游戏后解锁海洋 + const skyCompleted = ['cloud-maze', 'bird-flight', 'rainbow-paint', 'cloud-puzzle'] + .every(game => this.gameCompletions[game] > 0); + if (skyCompleted && !this.unlockedScenes.includes('ocean')) { + this.unlockedScenes.push('ocean'); + } + + // 完成海洋场景的所有游戏后解锁地下 + const oceanCompleted = ['treasure-hunt', 'fish-match', 'coral-color', 'ocean-puzzle'] + .every(game => this.gameCompletions[game] > 0); + if (oceanCompleted && !this.unlockedScenes.includes('underground')) { + this.unlockedScenes.push('underground'); + } + + // 完成地下场景的所有游戏后解锁森林 + const undergroundCompleted = ['mining', 'mole-whack', 'cave-explore'] + .every(game => this.gameCompletions[game] > 0); + if (undergroundCompleted && !this.unlockedScenes.includes('forest')) { + this.unlockedScenes.push('forest'); + } + }, + + // 增加游玩时间 + addPlayTime(minutes: number) { + this.totalPlayTime += minutes; + this.lastVisit = new Date().toISOString(); + this.$persist(); + }, + + // 获取游戏进度百分比 + getGameProgress(gameId: string, targetCompletions: number = 5): number { + const completions = this.gameCompletions[gameId] || 0; + return Math.min(100, Math.round((completions / targetCompletions) * 100)); + }, + + // 获取场景完成进度 + getSceneProgress(scene: string): number { + const sceneGames: Record = { + space: ['planet-explorer', 'star-collector', 'space-puzzle', 'moon-walk', 'constellation'], + sky: ['cloud-maze', 'bird-flight', 'rainbow-paint', 'cloud-puzzle'], + ocean: ['treasure-hunt', 'fish-match', 'coral-color', 'ocean-puzzle'], + underground: ['mining', 'mole-whack', 'cave-explore'], + forest: ['animal-friends', 'plant-grow', 'leaf-collect', 'forest-puzzle'] + }; + + const games = sceneGames[scene] || []; + if (games.length === 0) return 0; + + const completedGames = games.filter(game => this.gameCompletions[game] > 0).length; + return Math.round((completedGames / games.length) * 100); + }, + + // 获取总进度百分比 + getTotalProgress(): number { + const totalGames = Object.keys(this.gameCompletions).length; + const playedGames = Object.values(this.gameCompletions).filter(count => count > 0).length; + return Math.round((playedGames / totalGames) * 100); + }, + + // 重置所有进度 + resetAll() { + this.gameCompletions = { + 'planet-explorer': 0, + 'star-collector': 0, + 'space-puzzle': 0, + 'moon-walk': 0, + 'constellation': 0, + 'cloud-maze': 0, + 'bird-flight': 0, + 'rainbow-paint': 0, + 'cloud-puzzle': 0, + 'treasure-hunt': 0, + 'fish-match': 0, + 'coral-color': 0, + 'ocean-puzzle': 0, + 'mining': 0, + 'mole-whack': 0, + 'cave-explore': 0, + 'animal-friends': 0, + 'plant-grow': 0, + 'leaf-collect': 0, + 'forest-puzzle': 0 + }; + this.highScores = { + 'planet-explorer': 0, + 'star-collector': 0, + 'space-puzzle': 0, + 'moon-walk': 0, + 'constellation': 0, + 'cloud-maze': 0, + 'bird-flight': 0, + 'rainbow-paint': 0, + 'cloud-puzzle': 0, + 'treasure-hunt': 0, + 'fish-match': 0, + 'coral-color': 0, + 'ocean-puzzle': 0, + 'mining': 0, + 'mole-whack': 0, + 'cave-explore': 0, + 'animal-friends': 0, + 'plant-grow': 0, + 'leaf-collect': 0, + 'forest-puzzle': 0 + }; + this.unlockedScenes = ['space', 'sky']; + this.totalPlayTime = 0; + this.firstVisit = new Date().toISOString(); + this.lastVisit = new Date().toISOString(); + localStorage.removeItem('adventureProgressData'); + } + } +}); diff --git a/src/stores/starEnergy.ts b/src/stores/starEnergy.ts new file mode 100644 index 0000000..74aef13 --- /dev/null +++ b/src/stores/starEnergy.ts @@ -0,0 +1,325 @@ +import { defineStore } from 'pinia'; + +// 获取当前用户 +const getCurrentUser = () => { + return localStorage.getItem('currentUser') || 'default'; +}; + +// 从 localStorage 加载数据 +const loadFromLocalStorage = () => { + try { + const user = getCurrentUser(); + const saved = localStorage.getItem(`starEnergyData_${user}`); + return saved ? JSON.parse(saved) : null; + } catch (error) { + console.error('加载数据失败:', error); + return null; + } +}; + +// 保存到 localStorage +const saveToLocalStorage = (data: any) => { + try { + const user = getCurrentUser(); + localStorage.setItem(`starEnergyData_${user}`, JSON.stringify(data)); + } catch (error) { + console.error('保存数据失败:', error); + } +}; + +// 星星能量存储 +export const useStarEnergyStore = defineStore('starEnergy', { + state: () => { + // 尝试从 localStorage 加载保存的数据 + const savedData = loadFromLocalStorage(); + + return { + // 星星能量总数 + total: savedData?.total || 20, + // 各区域的星星能量 + areas: savedData?.areas || { + knowledge: 0, + craft: 0, + logic: 0, + habit: 0, + parent: 0 + }, + // 习惯打卡记录 + habits: savedData?.habits || { + brushTeeth: { + name: '刷牙', + count: 0, + streak: 0, + lastChecked: null as string | null + }, + noBedLate: { + name: '不赖床', + count: 0, + streak: 0, + lastChecked: null as string | null + }, + noPickyEating: { + name: '不挑食', + count: 0, + streak: 0, + lastChecked: null as string | null + }, + washHands: { + name: '勤洗手', + count: 0, + streak: 0, + lastChecked: null as string | null + }, + homeworkFast: { + name: '写作业快', + count: 0, + streak: 0, + lastChecked: null as string | null + }, + earlySleep: { + name: '早睡', + count: 0, + streak: 0, + lastChecked: null as string | null + } + }, + // 怪兽状态 + monsters: { + boss: { + name: '坏习惯大魔王', + health: (savedData?.monsters && 'boss' in savedData.monsters && !savedData.monsters.boss.defeated) ? savedData.monsters.boss.health : 500, + defeated: (savedData?.monsters && 'boss' in savedData.monsters) ? savedData.monsters.boss.defeated : false, + habits: ['brushTeeth', 'noBedLate', 'noPickyEating', 'washHands', 'homeworkFast', 'earlySleep'] + } + }, + // 勋章 + badges: savedData?.badges || [] as string[], + // 已兑换奖励 + claimedRewards: savedData?.claimedRewards || [] as string[], + // 击败BOSS次数 + bossDefeats: savedData?.bossDefeats || 0 + }; + }, + + getters: { + // 获取总星星能量 + getTotalEnergy: (state) => state.total, + + // 获取各区域能量 + getAreaEnergy: (state) => (area: keyof typeof state.areas) => state.areas[area], + + // 获取习惯打卡情况 + getHabitStatus: (state) => (habit: keyof typeof state.habits) => state.habits[habit], + + // 获取怪兽状态 + getMonsterStatus: (state) => (monster: keyof typeof state.monsters) => state.monsters[monster], + + // 获取所有勋章 + getAllBadges: (state) => state.badges, + + // 获取已兑换奖励 + getClaimedRewards: (state) => state.claimedRewards, + + // 获取击败BOSS次数 + getBossDefeats: (state) => state.bossDefeats + }, + + actions: { + // 保存状态到 localStorage + $persist() { + const data = { + total: this.total, + areas: this.areas, + habits: this.habits, + monsters: this.monsters, + badges: this.badges, + claimedRewards: this.claimedRewards + }; + saveToLocalStorage(data); + }, + + // 增加星星能量 + addEnergy(amount: number, area: keyof typeof this.areas) { + this.total += amount; + this.areas[area] += amount; + this.$persist(); + }, + + // 减少星星能量 + removeEnergy(amount: number) { + if (this.total >= amount) { + this.total -= amount; + this.$persist(); + return true; + } + return false; + }, + + // 打卡习惯 + checkHabit(habit: keyof typeof this.habits) { + const today = new Date().toISOString().split('T')[0]; + const habitData = this.habits[habit]; + + // 防止重复打卡 + if (habitData.lastChecked === today) { + return; + } + + // 更新打卡记录 + habitData.count++; + habitData.lastChecked = today; + + // 更新连续打卡天数 + const yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); + const yesterdayStr = yesterday.toISOString().split('T')[0]; + + if (habitData.lastChecked === yesterdayStr) { + habitData.streak++; + } else { + habitData.streak = 1; + } + + // 奖励星星能量 + this.addEnergy(10, 'habit'); + + // 连续3天打卡额外奖励 + if (habitData.streak % 3 === 0) { + this.addEnergy(5, 'habit'); + } + }, + + // 攻击怪兽 + attackMonster(monster: keyof typeof this.monsters, energy: number) { + const monsterData = this.monsters[monster]; + if (monsterData.defeated) return; + + // 每次攻击消耗10颗星星,固定掉10滴血 + if (this.total >= 10) { + monsterData.health = Math.max(0, monsterData.health - 10); + + // 扣除星星能量 + this.total -= 10; + + // 检查是否击败 + if (monsterData.health === 0) { + monsterData.defeated = true; + // 奖励星星能量 + this.addEnergy(200, 'habit'); + + // 增加击败BOSS次数 + this.bossDefeats++; + + // 解锁勋章 + const badge = '习惯守护者'; + if (!this.badges.includes(badge)) { + this.badges.push(badge); + } + } + this.$persist(); + } + }, + + // 亲子合力攻击 + parentAttack(monster: keyof typeof this.monsters) { + const monsterData = this.monsters[monster]; + if (monsterData.defeated) return; + + // 亲子攻击固定掉10滴血 + monsterData.health = Math.max(0, monsterData.health - 10); + + // 检查是否击败 + if (monsterData.health === 0) { + monsterData.defeated = true; + // 奖励星星能量 + this.addEnergy(200, 'habit'); + + // 增加击败BOSS次数 + this.bossDefeats++; + + // 解锁勋章 + const badge = '习惯守护者'; + if (!this.badges.includes(badge)) { + this.badges.push(badge); + } + } + this.$persist(); + }, + + // 兑换奖励 + redeemReward(rewardId: string, cost: number) { + if (this.total < cost) { + return false; + } + this.total -= cost; + if (!this.claimedRewards.includes(rewardId)) { + this.claimedRewards.push(rewardId); + } + this.$persist(); + return true; + }, + + // 重置所有数据(清除游戏进度) + resetAll() { + this.total = 0; + this.areas = { + knowledge: 0, + craft: 0, + logic: 0, + habit: 0, + parent: 0 + }; + this.habits = { + brushTeeth: { + name: '刷牙', + count: 0, + streak: 0, + lastChecked: null + }, + noBedLate: { + name: '不赖床', + count: 0, + streak: 0, + lastChecked: null + }, + noPickyEating: { + name: '不挑食', + count: 0, + streak: 0, + lastChecked: null + }, + washHands: { + name: '勤洗手', + count: 0, + streak: 0, + lastChecked: null + }, + homeworkFast: { + name: '写作业快', + count: 0, + streak: 0, + lastChecked: null + }, + earlySleep: { + name: '早睡', + count: 0, + streak: 0, + lastChecked: null + } + }; + this.monsters = { + boss: { + name: '坏习惯大魔王', + health: 500, + defeated: false, + habits: ['brushTeeth', 'noBedLate', 'noPickyEating', 'washHands', 'homeworkFast', 'earlySleep'] + } + }; + this.badges = []; + this.claimedRewards = []; + this.bossDefeats = 0; + const user = getCurrentUser(); + localStorage.removeItem(`starEnergyData_${user}`); + } + } +}); \ No newline at end of file diff --git a/src/style.css b/src/style.css new file mode 100644 index 0000000..f39c6d2 --- /dev/null +++ b/src/style.css @@ -0,0 +1,227 @@ +/* 全局样式 */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +/* 全局变量 */ +:root { + --primary-color: #FF6B6B; + --secondary-color: #4ECDC4; + --accent-color: #FFD166; + --light-accent: #06D6A0; + --text-color: #292F36; + --light-text: #6C757D; + --white: #ffffff; + --light-bg: rgba(255, 255, 255, 0.95); + --shadow: 0 6px 12px rgba(0, 0, 0, 0.1); + --hover-shadow: 0 12px 24px rgba(0, 0, 0, 0.15); + --border-radius: 20px; + --transition: all 0.3s ease; + --cartoon-font: 'Comic Sans MS', 'Arial', 'Microsoft YaHei', sans-serif; +} + +body { + font-family: var(--cartoon-font); + background-color: #F7FFF7; + color: var(--text-color); + line-height: 1.6; + overflow-x: hidden; + background-image: + radial-gradient(circle at 10% 20%, rgba(255, 107, 107, 0.1) 0%, transparent 20%), + radial-gradient(circle at 90% 30%, rgba(78, 205, 196, 0.1) 0%, transparent 20%), + radial-gradient(circle at 50% 80%, rgba(255, 209, 102, 0.1) 0%, transparent 20%); + background-attachment: fixed; +} + +/* 卡通按钮样式 */ +.cartoon-btn { + background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); + color: var(--white); + border: none; + padding: 12px 24px; + border-radius: 25px; + font-size: 16px; + font-weight: bold; + font-family: var(--cartoon-font); + cursor: pointer; + transition: var(--transition); + box-shadow: var(--shadow); + position: relative; + overflow: hidden; +} + +.cartoon-btn:hover { + transform: translateY(-3px) scale(1.05); + box-shadow: var(--hover-shadow); +} + +.cartoon-btn:active { + transform: translateY(0) scale(0.95); +} + +/* 卡通卡片样式 */ +.cartoon-card { + background: var(--light-bg); + border-radius: var(--border-radius); + padding: 20px; + box-shadow: var(--shadow); + transition: var(--transition); + border: 3px solid var(--accent-color); + position: relative; + overflow: hidden; +} + +.cartoon-card::before { + content: ''; + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 200%; + background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.2), transparent); + transform: rotate(45deg); + animation: shine 3s ease-in-out infinite; +} + +@keyframes shine { + 0% { transform: translateX(-100%) rotate(45deg); } + 100% { transform: translateX(100%) rotate(45deg); } +} + +.cartoon-card:hover { + transform: translateY(-8px) scale(1.02); + box-shadow: var(--hover-shadow); + border-color: var(--primary-color); +} + +/* 卡通标题样式 */ +.cartoon-title { + font-family: var(--cartoon-font); + font-size: 28px; + font-weight: bold; + color: var(--primary-color); + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1); + animation: bounce 2s ease-in-out infinite; +} + +@keyframes bounce { + 0%, 100% { transform: translateY(0); } + 50% { transform: translateY(-5px); } +} + +/* 卡通图标样式 */ +.cartoon-icon { + font-size: 32px; + animation: wiggle 2s ease-in-out infinite; +} + +@keyframes wiggle { + 0%, 100% { transform: rotate(0deg); } + 25% { transform: rotate(5deg); } + 75% { transform: rotate(-5deg); } +} + +/* 卡通徽章样式 */ +.cartoon-badge { + background: linear-gradient(135deg, var(--accent-color), var(--light-accent)); + color: var(--text-color); + padding: 8px 16px; + border-radius: 20px; + font-weight: bold; + font-size: 14px; + box-shadow: var(--shadow); + animation: pulse 2s ease-in-out infinite; +} + +@keyframes pulse { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.1); } +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .cartoon-title { + font-size: 24px; + } + + .cartoon-btn { + padding: 10px 20px; + font-size: 14px; + } +} + +#app { + min-height: 100vh; + display: flex; + flex-direction: column; +} + +/* 通用按钮样式 */ +.btn { + background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); + color: var(--white); + border: none; + padding: 12px 24px; + border-radius: 25px; + font-size: 16px; + font-weight: bold; + cursor: pointer; + transition: var(--transition); + box-shadow: var(--shadow); +} + +.btn:hover { + transform: translateY(-3px); + box-shadow: var(--hover-shadow); +} + +/* 卡片样式 */ +.card { + background: var(--light-bg); + border-radius: var(--border-radius); + padding: 20px; + box-shadow: var(--shadow); + transition: var(--transition); +} + +.card:hover { + transform: translateY(-5px); + box-shadow: var(--hover-shadow); +} + +/* 动画效果 */ +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.fade-in { + animation: fadeIn 0.6s ease forwards; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .map-areas { + grid-template-columns: 1fr; + } + + .app-header { + padding: 15px; + } + + .app-title { + font-size: 20px; + } + + .app-main { + padding: 15px; + } +} diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..ea25245 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,16 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "types": ["vite/client"], + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c452f43 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} \ No newline at end of file diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..6c49e9a --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "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, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..2fb70a6 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import { resolve } from 'path' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': resolve(__dirname, 'src'), + }, + }, + base: './', + build: { + outDir: 'dist', + emptyOutDir: true, + }, +}) \ No newline at end of file