commit 43d095ea0f8c8dc61d17e2d22fd9cd2b40e7c154
Author: 韩冷 <280828574@qq.com>
Date: Wed Sep 16 15:04:08 2026 +0800
first commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b5e8de4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+node_modules/
+unpackage/
+dist/
+.hbuilderx/
+.DS_Store
+*.log
+*.tmp
+.idea/
+.vscode/
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000..3c03207
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+18
diff --git a/.workbuddy/memory/2026-09-15.md b/.workbuddy/memory/2026-09-15.md
new file mode 100644
index 0000000..33b5e02
--- /dev/null
+++ b/.workbuddy/memory/2026-09-15.md
@@ -0,0 +1,18 @@
+# 2026-09-15 工作记录
+
+## npm run dev:h5 报错修复
+
+### 问题
+运行 时报错:
+
+
+### 原因
+nvm 默认 Node.js 版本为 **14.21.3**,但 CLI 依赖的 包使用了 (nullish coalescing assignment)运算符,该语法需要 **Node.js 15+**。
+
+### 解决
+将 nvm 默认版本切换至 Node 18:
+
+切换后 正常运行,H5 开发服务器监听在 **http://localhost:5174**。
+
+### 建议
+- 在项目根目录添加 文件,内容为 ,确保后续协作时自动使用正确版本
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..1dd3653
--- /dev/null
+++ b/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ 全犀云CDN
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..39a3f68
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,5385 @@
+{
+ "name": "quanxiyun-app",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+ "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+ "requires": {
+ "@babel/highlight": "^7.24.7",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg=="
+ },
+ "@babel/core": {
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
+ "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+ "requires": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.25.0",
+ "@babel/helper-compilation-targets": "^7.25.2",
+ "@babel/helper-module-transforms": "^7.25.2",
+ "@babel/helpers": "^7.25.0",
+ "@babel/parser": "^7.25.0",
+ "@babel/template": "^7.25.0",
+ "@babel/traverse": "^7.25.2",
+ "@babel/types": "^7.25.2",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz",
+ "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==",
+ "requires": {
+ "@babel/parser": "^7.29.8",
+ "@babel/types": "^7.29.8",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "dependencies": {
+ "@babel/parser": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
+ "requires": {
+ "@babel/types": "^7.29.8"
+ }
+ },
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ }
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz",
+ "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.29.7"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ }
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
+ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
+ "requires": {
+ "@babel/compat-data": "^7.29.7",
+ "@babel/helper-validator-option": "^7.29.7",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz",
+ "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.29.7",
+ "@babel/helper-member-expression-to-functions": "^7.29.7",
+ "@babel/helper-optimise-call-expression": "^7.29.7",
+ "@babel/helper-replace-supers": "^7.29.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7",
+ "@babel/traverse": "^7.29.7",
+ "semver": "^6.3.1"
+ }
+ },
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz",
+ "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.29.7",
+ "regexpu-core": "^6.3.1",
+ "semver": "^6.3.1"
+ }
+ },
+ "@babel/helper-define-polyfill-provider": {
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz",
+ "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "debug": "^4.4.3",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.22.11"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.3"
+ }
+ },
+ "resolve": {
+ "version": "1.22.12",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
+ "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
+ "dev": true,
+ "requires": {
+ "es-errors": "^1.3.0",
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-globals": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz",
+ "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ }
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
+ "requires": {
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ }
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
+ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz",
+ "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.29.7"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ }
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz",
+ "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==",
+ "dev": true
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz",
+ "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.29.7",
+ "@babel/helper-wrap-function": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz",
+ "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.29.7",
+ "@babel/helper-optimise-call-expression": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ }
+ },
+ "@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz",
+ "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ }
+ }
+ },
+ "@babel/helper-string-parser": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw=="
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz",
+ "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.29.7",
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ }
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
+ "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
+ "requires": {
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ }
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz",
+ "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.25.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
+ "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
+ "requires": {
+ "@babel/types": "^7.25.6"
+ }
+ },
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz",
+ "integrity": "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ }
+ },
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz",
+ "integrity": "sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz",
+ "integrity": "sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz",
+ "integrity": "sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7"
+ }
+ },
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz",
+ "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7",
+ "@babel/plugin-transform-optional-chaining": "^7.29.7"
+ }
+ },
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz",
+ "integrity": "sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ }
+ },
+ "@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.21.0-placeholder-for-preset-env.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+ "dev": true
+ },
+ "@babel/plugin-syntax-import-assertions": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz",
+ "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-syntax-import-attributes": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz",
+ "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz",
+ "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-syntax-typescript": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz",
+ "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-syntax-unicode-sets-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+ "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz",
+ "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-async-generator-functions": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz",
+ "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/helper-remap-async-to-generator": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz",
+ "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/helper-remap-async-to-generator": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz",
+ "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz",
+ "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-class-properties": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz",
+ "integrity": "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-class-static-block": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz",
+ "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz",
+ "integrity": "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.29.7",
+ "@babel/helper-compilation-targets": "^7.29.7",
+ "@babel/helper-globals": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/helper-replace-supers": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz",
+ "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/template": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz",
+ "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz",
+ "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz",
+ "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz",
+ "integrity": "sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-dynamic-import": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz",
+ "integrity": "sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-explicit-resource-management": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz",
+ "integrity": "sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/plugin-transform-destructuring": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz",
+ "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-export-namespace-from": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz",
+ "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz",
+ "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz",
+ "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-json-strings": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz",
+ "integrity": "sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz",
+ "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-logical-assignment-operators": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz",
+ "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz",
+ "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz",
+ "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz",
+ "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz",
+ "integrity": "sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "@babel/traverse": "^7.29.8"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz",
+ "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz",
+ "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz",
+ "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-nullish-coalescing-operator": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz",
+ "integrity": "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-numeric-separator": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz",
+ "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-object-rest-spread": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz",
+ "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/plugin-transform-destructuring": "^7.29.7",
+ "@babel/plugin-transform-parameters": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz",
+ "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/helper-replace-supers": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-optional-catch-binding": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz",
+ "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-optional-chaining": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz",
+ "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz",
+ "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-private-methods": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz",
+ "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-private-property-in-object": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz",
+ "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.29.7",
+ "@babel/helper-create-class-features-plugin": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz",
+ "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz",
+ "integrity": "sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-regexp-modifiers": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz",
+ "integrity": "sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz",
+ "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz",
+ "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz",
+ "integrity": "sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz",
+ "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz",
+ "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz",
+ "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-typescript": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz",
+ "integrity": "sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.29.7",
+ "@babel/helper-create-class-features-plugin": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7",
+ "@babel/plugin-syntax-typescript": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-unicode-escapes": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz",
+ "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-unicode-property-regex": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz",
+ "integrity": "sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz",
+ "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/plugin-transform-unicode-sets-regex": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz",
+ "integrity": "sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz",
+ "integrity": "sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.29.7",
+ "@babel/helper-compilation-targets": "^7.29.7",
+ "@babel/helper-plugin-utils": "^7.29.7",
+ "@babel/helper-validator-option": "^7.29.7",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7",
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7",
+ "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7",
+ "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+ "@babel/plugin-syntax-import-assertions": "^7.29.7",
+ "@babel/plugin-syntax-import-attributes": "^7.29.7",
+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+ "@babel/plugin-transform-arrow-functions": "^7.29.7",
+ "@babel/plugin-transform-async-generator-functions": "^7.29.7",
+ "@babel/plugin-transform-async-to-generator": "^7.29.7",
+ "@babel/plugin-transform-block-scoped-functions": "^7.29.7",
+ "@babel/plugin-transform-block-scoping": "^7.29.7",
+ "@babel/plugin-transform-class-properties": "^7.29.7",
+ "@babel/plugin-transform-class-static-block": "^7.29.7",
+ "@babel/plugin-transform-classes": "^7.29.7",
+ "@babel/plugin-transform-computed-properties": "^7.29.7",
+ "@babel/plugin-transform-destructuring": "^7.29.7",
+ "@babel/plugin-transform-dotall-regex": "^7.29.7",
+ "@babel/plugin-transform-duplicate-keys": "^7.29.7",
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7",
+ "@babel/plugin-transform-dynamic-import": "^7.29.7",
+ "@babel/plugin-transform-explicit-resource-management": "^7.29.7",
+ "@babel/plugin-transform-exponentiation-operator": "^7.29.7",
+ "@babel/plugin-transform-export-namespace-from": "^7.29.7",
+ "@babel/plugin-transform-for-of": "^7.29.7",
+ "@babel/plugin-transform-function-name": "^7.29.7",
+ "@babel/plugin-transform-json-strings": "^7.29.7",
+ "@babel/plugin-transform-literals": "^7.29.7",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.29.7",
+ "@babel/plugin-transform-member-expression-literals": "^7.29.7",
+ "@babel/plugin-transform-modules-amd": "^7.29.7",
+ "@babel/plugin-transform-modules-commonjs": "^7.29.7",
+ "@babel/plugin-transform-modules-systemjs": "^7.29.7",
+ "@babel/plugin-transform-modules-umd": "^7.29.7",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7",
+ "@babel/plugin-transform-new-target": "^7.29.7",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7",
+ "@babel/plugin-transform-numeric-separator": "^7.29.7",
+ "@babel/plugin-transform-object-rest-spread": "^7.29.7",
+ "@babel/plugin-transform-object-super": "^7.29.7",
+ "@babel/plugin-transform-optional-catch-binding": "^7.29.7",
+ "@babel/plugin-transform-optional-chaining": "^7.29.7",
+ "@babel/plugin-transform-parameters": "^7.29.7",
+ "@babel/plugin-transform-private-methods": "^7.29.7",
+ "@babel/plugin-transform-private-property-in-object": "^7.29.7",
+ "@babel/plugin-transform-property-literals": "^7.29.7",
+ "@babel/plugin-transform-regenerator": "^7.29.7",
+ "@babel/plugin-transform-regexp-modifiers": "^7.29.7",
+ "@babel/plugin-transform-reserved-words": "^7.29.7",
+ "@babel/plugin-transform-shorthand-properties": "^7.29.7",
+ "@babel/plugin-transform-spread": "^7.29.7",
+ "@babel/plugin-transform-sticky-regex": "^7.29.7",
+ "@babel/plugin-transform-template-literals": "^7.29.7",
+ "@babel/plugin-transform-typeof-symbol": "^7.29.7",
+ "@babel/plugin-transform-unicode-escapes": "^7.29.7",
+ "@babel/plugin-transform-unicode-property-regex": "^7.29.7",
+ "@babel/plugin-transform-unicode-regex": "^7.29.7",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.29.7",
+ "@babel/preset-modules": "0.1.6-no-external-plugins",
+ "babel-plugin-polyfill-corejs2": "^0.4.15",
+ "babel-plugin-polyfill-corejs3": "^0.14.0",
+ "babel-plugin-polyfill-regenerator": "^0.6.6",
+ "core-js-compat": "^3.48.0",
+ "semver": "^6.3.1"
+ }
+ },
+ "@babel/preset-modules": {
+ "version": "0.1.6-no-external-plugins",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+ "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz",
+ "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="
+ },
+ "@babel/runtime-corejs3": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.29.7.tgz",
+ "integrity": "sha512-ppj9ouYku+RX0ljtgZd+KMO5mkM2bCqg8H2PYAFWnLsHEIKIdRojqbJ2i3eVHrisuxy7nOFCmngTDdWtUCdXUQ==",
+ "requires": {
+ "core-js-pure": "^3.48.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
+ "requires": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
+ "requires": {
+ "@babel/types": "^7.29.8"
+ }
+ },
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ }
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz",
+ "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==",
+ "requires": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.8",
+ "@babel/helper-globals": "^7.29.7",
+ "@babel/parser": "^7.29.8",
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.8",
+ "debug": "^4.3.1"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
+ "requires": {
+ "@babel/types": "^7.29.8"
+ }
+ },
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.25.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
+ "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.24.8",
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@dcloudio/types": {
+ "version": "3.4.32",
+ "resolved": "https://registry.npmjs.org/@dcloudio/types/-/types-3.4.32.tgz",
+ "integrity": "sha512-sjhbkjUKxoym8KLEnyeXxCsxvRlBc7Bd/kNSZZRLj+lewS384bDPtq/x5FZ4iG+NrnzDmg3+HyiwV5u5vu2reQ==",
+ "dev": true
+ },
+ "@dcloudio/uni-app": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-app/-/uni-app-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-yMfuGjj52VIgdG1VJ/YpQus3TyVnlc1JYt7rcqGfsSG+pPI7M/kTKSEIsXZ2acEPKH6hHYX/DC3k4wPdwf18Ag==",
+ "requires": {
+ "@dcloudio/uni-cloud": "3.0.0-5010520260709002",
+ "@dcloudio/uni-components": "3.0.0-5010520260709002",
+ "@dcloudio/uni-console": "3.0.0-5010520260709002",
+ "@dcloudio/uni-i18n": "3.0.0-5010520260709002",
+ "@dcloudio/uni-push": "3.0.0-5010520260709002",
+ "@dcloudio/uni-shared": "3.0.0-5010520260709002",
+ "@dcloudio/uni-stat": "3.0.0-5010520260709002",
+ "@vue/shared": "3.4.21"
+ }
+ },
+ "@dcloudio/uni-automator": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-automator/-/uni-automator-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-9wIp9LnBcSzRDVn71LH3N+krXrZXZZDwGBaFUvHR09/J+cKUGSw246gRLwkgxX7U0rgDvD6S2JuZhZor1hlxnw==",
+ "dev": true,
+ "requires": {
+ "@dcloudio/uni-cli-shared": "3.0.0-5010520260709002",
+ "address": "^1.1.2",
+ "cross-env": "^7.0.3",
+ "debug": "4.3.7",
+ "default-gateway": "^6.0.3",
+ "fs-extra": "10.1.0",
+ "jsonc-parser": "3.3.1",
+ "licia": "1.41.1",
+ "merge": "2.1.1",
+ "qrcode-reader": "1.0.4",
+ "qrcode-terminal": "0.12.0",
+ "ws": "8.18.0"
+ }
+ },
+ "@dcloudio/uni-cli-shared": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-cli-shared/-/uni-cli-shared-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-2zZvEQ5fAZpmWDR+u2BcKnuYNrzoWtHUgUG7ZtGaLwMJSowSOywHZRR/dokKuW89Ll5pFCJC32Q85ECkaq0y5A==",
+ "requires": {
+ "@ampproject/remapping": "^2.1.2",
+ "@babel/code-frame": "7.24.7",
+ "@babel/core": "7.25.2",
+ "@babel/parser": "7.25.6",
+ "@babel/types": "7.25.6",
+ "@dcloudio/uni-i18n": "3.0.0-5010520260709002",
+ "@dcloudio/uni-nvue-styler": "3.0.0-5010520260709002",
+ "@dcloudio/uni-shared": "3.0.0-5010520260709002",
+ "@intlify/core-base": "9.1.9",
+ "@intlify/shared": "9.1.9",
+ "@intlify/vue-devtools": "9.1.9",
+ "@rollup/pluginutils": "5.1.0",
+ "@vue/compiler-core": "3.4.21",
+ "@vue/compiler-dom": "3.4.21",
+ "@vue/compiler-sfc": "3.4.21",
+ "@vue/compiler-ssr": "3.4.21",
+ "@vue/server-renderer": "3.4.21",
+ "@vue/shared": "3.4.21",
+ "adm-zip": "0.5.16",
+ "autoprefixer": "10.4.20",
+ "base64url": "^3.0.1",
+ "chokidar": "3.6.0",
+ "compare-versions": "^3.6.0",
+ "debug": "4.3.7",
+ "entities": "^7.0.0",
+ "es-module-lexer": "1.5.4",
+ "esbuild": "0.20.2",
+ "estree-walker": "2.0.2",
+ "fast-glob": "3.3.3",
+ "fs-extra": "10.1.0",
+ "hash-sum": "2.0.0",
+ "isbinaryfile": "5.0.2",
+ "jsonc-parser": "3.3.1",
+ "lines-and-columns": "^2.0.4",
+ "magic-string": "0.30.11",
+ "merge": "2.1.1",
+ "mime": "3.0.0",
+ "module-alias": "2.2.3",
+ "os-locale-s-fix": "^1.0.8-fix-1",
+ "picocolors": "1.1.0",
+ "postcss-import": "^14.0.2",
+ "postcss-load-config": "^3.1.1",
+ "postcss-modules": "^4.3.0",
+ "postcss-selector-parser": "6.1.2",
+ "resolve": "1.22.8",
+ "source-map-js": "1.2.1",
+ "tapable": "^2.2.0",
+ "tinycolor2": "1.6.0",
+ "unimport": "4.1.1",
+ "unplugin-auto-import": "19.1.0",
+ "xregexp": "5.1.2"
+ }
+ },
+ "@dcloudio/uni-cloud": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-cloud/-/uni-cloud-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-/AGi0uKwEZzL58rPNjHTYPlH0TN5903ldyOJYMYWhwTvDftfAvoVI4rFrAmDTeVxF/eEsTSNr73Sh+gw0qTC2g==",
+ "requires": {
+ "@dcloudio/uni-cli-shared": "3.0.0-5010520260709002",
+ "@dcloudio/uni-i18n": "3.0.0-5010520260709002",
+ "@dcloudio/uni-shared": "3.0.0-5010520260709002",
+ "@vue/shared": "3.4.21",
+ "fast-glob": "3.3.3"
+ }
+ },
+ "@dcloudio/uni-components": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-components/-/uni-components-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-Pj8bPRjPwUKvFt3JOj1HDfEyz1Pejnq2lpJ3MWGnWQlATZgESfruWcglGt1+D8KJolrzodyXk8ffSXBEkn6moA==",
+ "requires": {
+ "@dcloudio/uni-cloud": "3.0.0-5010520260709002",
+ "@dcloudio/uni-h5": "3.0.0-5010520260709002",
+ "@dcloudio/uni-i18n": "3.0.0-5010520260709002"
+ }
+ },
+ "@dcloudio/uni-console": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-console/-/uni-console-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-CXpJt726xYdtGSvDvEny5zsQllB1TY23aq6ShSj4CEkdoxz2+6fJxlFBdIHwcO55C5GWlZSqjQfUKC99bslNDw==",
+ "requires": {
+ "@dcloudio/uni-cli-shared": "3.0.0-5010520260709002",
+ "fs-extra": "10.1.0"
+ }
+ },
+ "@dcloudio/uni-h5": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5/-/uni-h5-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-a/PXypwJjJUa5iqufJ0PGt7+1H5KjUksHsv9p0r+naYj2pA8+MhIDnrLQJ36rAepgCRwkSV1K3WqxYJxVpdA0Q==",
+ "requires": {
+ "@dcloudio/uni-h5-vite": "3.0.0-5010520260709002",
+ "@dcloudio/uni-h5-vue": "3.0.0-5010520260709002",
+ "@dcloudio/uni-i18n": "3.0.0-5010520260709002",
+ "@dcloudio/uni-shared": "3.0.0-5010520260709002",
+ "@vue/server-renderer": "3.4.21",
+ "@vue/shared": "3.4.21",
+ "debug": "4.3.7",
+ "localstorage-polyfill": "^1.0.1",
+ "postcss-selector-parser": "6.1.2",
+ "safe-area-insets": "1.4.1",
+ "vue-router": "4.4.4",
+ "xmlhttprequest": "^1.8.0"
+ }
+ },
+ "@dcloudio/uni-h5-vite": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5-vite/-/uni-h5-vite-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-jUOvuSsu89TMM/S7ZieqyQI7fBSjDAMSHiH5RwBLFyYgp8ln8BtNtaDrlWBhrz+TXY7lGzRj2842+KM1PAn7VQ==",
+ "requires": {
+ "@dcloudio/uni-cli-shared": "3.0.0-5010520260709002",
+ "@dcloudio/uni-shared": "3.0.0-5010520260709002",
+ "@rollup/pluginutils": "5.1.0",
+ "@vitejs/plugin-basic-ssl": "1.2.0",
+ "@vue/compiler-dom": "3.4.21",
+ "@vue/compiler-sfc": "3.4.21",
+ "@vue/server-renderer": "3.4.21",
+ "@vue/shared": "3.4.21",
+ "debug": "4.3.7",
+ "fs-extra": "10.1.0",
+ "mime": "3.0.0",
+ "module-alias": "2.2.3"
+ }
+ },
+ "@dcloudio/uni-h5-vue": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5-vue/-/uni-h5-vue-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-lo/mZdF+NgJESVpJC7ec5MiEMbnY8hF9PNBLlvrsloqMiC8epvFcqCsNCe5QW/ZqQD7szS4vuC8lbqWs7rDfFA==",
+ "requires": {
+ "@dcloudio/uni-shared": "3.0.0-5010520260709002",
+ "@vue/server-renderer": "3.4.21"
+ }
+ },
+ "@dcloudio/uni-i18n": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-i18n/-/uni-i18n-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-DktZWotqAOT1dtrGq+IO61LXW1z7FBxqh+Zl71BU2lgWcnjrPNdxJmbDOsDmlM+QuXPCial0VEyzCtJqqkvWjg=="
+ },
+ "@dcloudio/uni-mp-compiler": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-compiler/-/uni-mp-compiler-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-5svWqWCzyUMiSTwz2b6xo+QWcZryLm1C8z3clhbJwQUSGxopLzalUCorA8nJx/4zfG6QcxdKVp/O4GymXw9vbg==",
+ "requires": {
+ "@babel/generator": "7.25.6",
+ "@babel/parser": "7.25.6",
+ "@babel/types": "7.25.6",
+ "@dcloudio/uni-cli-shared": "3.0.0-5010520260709002",
+ "@dcloudio/uni-shared": "3.0.0-5010520260709002",
+ "@vue/compiler-core": "3.4.21",
+ "@vue/compiler-dom": "3.4.21",
+ "@vue/shared": "3.4.21",
+ "estree-walker": "2.0.2"
+ },
+ "dependencies": {
+ "@babel/generator": {
+ "version": "7.25.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
+ "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
+ "requires": {
+ "@babel/types": "^7.25.6",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^2.5.1"
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+ }
+ }
+ },
+ "@dcloudio/uni-mp-vite": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-vite/-/uni-mp-vite-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-Sr+omTz9dqxRaXL0MgVJoxCX7s5Iouo0SQL86I55CdCaybACx9cr5y3idNoFkCHXQaycjg3U6ZQts9PeEUVlwg==",
+ "requires": {
+ "@dcloudio/uni-cli-shared": "3.0.0-5010520260709002",
+ "@dcloudio/uni-i18n": "3.0.0-5010520260709002",
+ "@dcloudio/uni-mp-compiler": "3.0.0-5010520260709002",
+ "@dcloudio/uni-mp-vue": "3.0.0-5010520260709002",
+ "@dcloudio/uni-shared": "3.0.0-5010520260709002",
+ "@vue/compiler-dom": "3.4.21",
+ "@vue/compiler-sfc": "3.4.21",
+ "@vue/shared": "3.4.21",
+ "debug": "4.3.7"
+ }
+ },
+ "@dcloudio/uni-mp-vue": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-vue/-/uni-mp-vue-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-ZdVsTcWQA6YFFXbQ5lqV1ghk81Nn6/TNCMs1EbTANMXtyCa/yboWrqBt7c+UENwheGQTqIMb+hdeqMx+XF3BQw==",
+ "requires": {
+ "@dcloudio/uni-shared": "3.0.0-5010520260709002",
+ "@vue/shared": "3.4.21"
+ }
+ },
+ "@dcloudio/uni-mp-weixin": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-weixin/-/uni-mp-weixin-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-Nmd8Gst6BnMbhouoc7JWZaYA8xCU9Wp+vu1/QTjn0f0nTUHKLXvQMV/itC9X9CLQiebLUpZ4BcsDaRIPHiFVhg==",
+ "requires": {
+ "@dcloudio/uni-cli-shared": "3.0.0-5010520260709002",
+ "@dcloudio/uni-mp-compiler": "3.0.0-5010520260709002",
+ "@dcloudio/uni-mp-vite": "3.0.0-5010520260709002",
+ "@dcloudio/uni-mp-vue": "3.0.0-5010520260709002",
+ "@dcloudio/uni-shared": "3.0.0-5010520260709002",
+ "@vue/shared": "3.4.21",
+ "jimp": "0.10.3",
+ "licia": "1.41.1",
+ "qrcode-reader": "1.0.4",
+ "qrcode-terminal": "0.12.0",
+ "ws": "8.18.0"
+ }
+ },
+ "@dcloudio/uni-nvue-styler": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-nvue-styler/-/uni-nvue-styler-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-83M+uqEpokNqngpb47Qvc70FLp11oBDSMtgwsj2jphjMSyrFq7jPtIEcccQZJk+nJeo0XsJxNR3ZXOCigipOKw==",
+ "requires": {
+ "@vue/shared": "3.4.21",
+ "parse-css-font": "^4.0.0",
+ "postcss": "8.5.6",
+ "tinycolor2": "1.6.0"
+ }
+ },
+ "@dcloudio/uni-push": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-push/-/uni-push-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-WatifhlclLyjpnA8zu0CmKvNa2k2917idUe5sFsHyJyK3VNuvxBxbJ6gJnnMVKJDWTitHwUkoByPUapkdzdEHw==",
+ "requires": {
+ "@dcloudio/uni-cli-shared": "3.0.0-5010520260709002"
+ }
+ },
+ "@dcloudio/uni-shared": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-shared/-/uni-shared-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-+LvzWApQTNV+x7exXWNZcwmk6dAUhkpzjMqC8lYUZ4TnduoSq940XxEbPQEBR4ZELvKzhp18nyP3IzkQ97TSow==",
+ "requires": {
+ "@vue/shared": "3.4.21"
+ }
+ },
+ "@dcloudio/uni-stacktracey": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-stacktracey/-/uni-stacktracey-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-DPSKSWS2kfj1vzdiZC4Oulis/UvpHl/fBh0rjaH0CkjhVWqtIcxfOVwHzX0BWcjD8QKdLTIhE35co737YUCLRg==",
+ "dev": true
+ },
+ "@dcloudio/uni-stat": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/uni-stat/-/uni-stat-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-+adkx156iY4/B6JzttO0AJBi4PyJEByz+NlP5si72RSVbIYgrGXUsljuYM2vGgzIaVuyl5isilg8DozNNU57YA==",
+ "requires": {
+ "@dcloudio/uni-cli-shared": "3.0.0-5010520260709002",
+ "@dcloudio/uni-shared": "3.0.0-5010520260709002",
+ "debug": "4.3.7"
+ }
+ },
+ "@dcloudio/vite-plugin-uni": {
+ "version": "3.0.0-5010520260709002",
+ "resolved": "https://registry.npmjs.org/@dcloudio/vite-plugin-uni/-/vite-plugin-uni-3.0.0-5010520260709002.tgz",
+ "integrity": "sha512-HynSNsicIj8KJ9OztI3hVcU7inFw/vzQGauqfzlLV+yBNRhAGqxx9WKN/NZiN6HVpOc8xTyICr0x4XlI7r7f7A==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "7.25.2",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-transform-typescript": "^7.23.3",
+ "@dcloudio/uni-cli-shared": "3.0.0-5010520260709002",
+ "@dcloudio/uni-nvue-styler": "3.0.0-5010520260709002",
+ "@dcloudio/uni-shared": "3.0.0-5010520260709002",
+ "@rollup/pluginutils": "5.1.0",
+ "@vitejs/plugin-legacy": "5.3.2",
+ "@vitejs/plugin-vue": "5.2.4",
+ "@vitejs/plugin-vue-jsx": "3.1.0",
+ "@vue/compiler-core": "3.4.21",
+ "@vue/compiler-dom": "3.4.21",
+ "@vue/compiler-sfc": "3.4.21",
+ "@vue/shared": "3.4.21",
+ "cac": "6.7.9",
+ "debug": "4.3.7",
+ "estree-walker": "2.0.2",
+ "express": "4.20.0",
+ "fast-glob": "3.3.3",
+ "fs-extra": "10.1.0",
+ "hash-sum": "2.0.0",
+ "jsonc-parser": "3.3.1",
+ "magic-string": "0.30.11",
+ "picocolors": "1.1.0",
+ "terser": "^5.4.0",
+ "unplugin-auto-import": "19.1.0"
+ }
+ },
+ "@esbuild/aix-ppc64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
+ "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
+ "optional": true
+ },
+ "@esbuild/android-arm": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
+ "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
+ "optional": true
+ },
+ "@esbuild/android-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
+ "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
+ "optional": true
+ },
+ "@esbuild/android-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
+ "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
+ "optional": true
+ },
+ "@esbuild/darwin-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
+ "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
+ "optional": true
+ },
+ "@esbuild/darwin-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
+ "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
+ "optional": true
+ },
+ "@esbuild/freebsd-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
+ "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
+ "optional": true
+ },
+ "@esbuild/freebsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
+ "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
+ "optional": true
+ },
+ "@esbuild/linux-arm": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
+ "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
+ "optional": true
+ },
+ "@esbuild/linux-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
+ "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
+ "optional": true
+ },
+ "@esbuild/linux-ia32": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
+ "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
+ "optional": true
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
+ "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
+ "optional": true
+ },
+ "@esbuild/linux-mips64el": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
+ "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
+ "optional": true
+ },
+ "@esbuild/linux-ppc64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
+ "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
+ "optional": true
+ },
+ "@esbuild/linux-riscv64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
+ "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
+ "optional": true
+ },
+ "@esbuild/linux-s390x": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
+ "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
+ "optional": true
+ },
+ "@esbuild/linux-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
+ "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
+ "optional": true
+ },
+ "@esbuild/netbsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
+ "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
+ "optional": true
+ },
+ "@esbuild/openbsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
+ "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
+ "optional": true
+ },
+ "@esbuild/sunos-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
+ "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
+ "optional": true
+ },
+ "@esbuild/win32-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
+ "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
+ "optional": true
+ },
+ "@esbuild/win32-ia32": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
+ "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
+ "optional": true
+ },
+ "@esbuild/win32-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
+ "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
+ "optional": true
+ },
+ "@intlify/core-base": {
+ "version": "9.1.9",
+ "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.1.9.tgz",
+ "integrity": "sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==",
+ "requires": {
+ "@intlify/devtools-if": "9.1.9",
+ "@intlify/message-compiler": "9.1.9",
+ "@intlify/message-resolver": "9.1.9",
+ "@intlify/runtime": "9.1.9",
+ "@intlify/shared": "9.1.9",
+ "@intlify/vue-devtools": "9.1.9"
+ }
+ },
+ "@intlify/devtools-if": {
+ "version": "9.1.9",
+ "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.1.9.tgz",
+ "integrity": "sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==",
+ "requires": {
+ "@intlify/shared": "9.1.9"
+ }
+ },
+ "@intlify/message-compiler": {
+ "version": "9.1.9",
+ "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.1.9.tgz",
+ "integrity": "sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==",
+ "requires": {
+ "@intlify/message-resolver": "9.1.9",
+ "@intlify/shared": "9.1.9",
+ "source-map": "0.6.1"
+ }
+ },
+ "@intlify/message-resolver": {
+ "version": "9.1.9",
+ "resolved": "https://registry.npmjs.org/@intlify/message-resolver/-/message-resolver-9.1.9.tgz",
+ "integrity": "sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA=="
+ },
+ "@intlify/runtime": {
+ "version": "9.1.9",
+ "resolved": "https://registry.npmjs.org/@intlify/runtime/-/runtime-9.1.9.tgz",
+ "integrity": "sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==",
+ "requires": {
+ "@intlify/message-compiler": "9.1.9",
+ "@intlify/message-resolver": "9.1.9",
+ "@intlify/shared": "9.1.9"
+ }
+ },
+ "@intlify/shared": {
+ "version": "9.1.9",
+ "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.1.9.tgz",
+ "integrity": "sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw=="
+ },
+ "@intlify/vue-devtools": {
+ "version": "9.1.9",
+ "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz",
+ "integrity": "sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==",
+ "requires": {
+ "@intlify/message-resolver": "9.1.9",
+ "@intlify/runtime": "9.1.9",
+ "@intlify/shared": "9.1.9"
+ }
+ },
+ "@jimp/bmp": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.10.3.tgz",
+ "integrity": "sha512-keMOc5woiDmONXsB/6aXLR4Z5Q+v8lFq3EY2rcj2FmstbDMhRuGbmcBxlEgOqfRjwvtf/wOtJ3Of37oAWtVfLg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "bmp-js": "^0.1.0",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/core": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.10.3.tgz",
+ "integrity": "sha512-Gd5IpL3U2bFIO57Fh/OA3HCpWm4uW/pU01E75rI03BXfTdz3T+J7TwvyG1XaqsQ7/DSlS99GXtLQPlfFIe28UA==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "any-base": "^1.1.0",
+ "buffer": "^5.2.0",
+ "core-js": "^3.4.1",
+ "exif-parser": "^0.1.12",
+ "file-type": "^9.0.0",
+ "load-bmfont": "^1.3.1",
+ "mkdirp": "^0.5.1",
+ "phin": "^2.9.1",
+ "pixelmatch": "^4.0.2",
+ "tinycolor2": "^1.4.1"
+ }
+ },
+ "@jimp/custom": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.10.3.tgz",
+ "integrity": "sha512-nZmSI+jwTi5IRyNLbKSXQovoeqsw+D0Jn0SxW08wYQvdkiWA8bTlDQFgQ7HVwCAKBm8oKkDB/ZEo9qvHJ+1gAQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/core": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/gif": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.10.3.tgz",
+ "integrity": "sha512-vjlRodSfz1CrUvvrnUuD/DsLK1GHB/yDZXHthVdZu23zYJIW7/WrIiD1IgQ5wOMV7NocfrvPn2iqUfBP81/WWA==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1",
+ "omggif": "^1.0.9"
+ }
+ },
+ "@jimp/jpeg": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.10.3.tgz",
+ "integrity": "sha512-AAANwgUZOt6f6P7LZxY9lyJ9xclqutYJlsxt3JbriXUGJgrrFAIkcKcqv1nObgmQASSAQKYaMV9KdHjMlWFKlQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1",
+ "jpeg-js": "^0.3.4"
+ }
+ },
+ "@jimp/plugin-blit": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.10.3.tgz",
+ "integrity": "sha512-5zlKlCfx4JWw9qUVC7GI4DzXyxDWyFvgZLaoGFoT00mlXlN75SarlDwc9iZ/2e2kp4bJWxz3cGgG4G/WXrbg3Q==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-blur": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.10.3.tgz",
+ "integrity": "sha512-cTOK3rjh1Yjh23jSfA6EHCHjsPJDEGLC8K2y9gM7dnTUK1y9NNmkFS23uHpyjgsWFIoH9oRh2SpEs3INjCpZhQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-circle": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.10.3.tgz",
+ "integrity": "sha512-51GAPIVelqAcfuUpaM5JWJ0iWl4vEjNXB7p4P7SX5udugK5bxXUjO6KA2qgWmdpHuCKtoNgkzWU9fNSuYp7tCA==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-color": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.10.3.tgz",
+ "integrity": "sha512-RgeHUElmlTH7vpI4WyQrz6u59spiKfVQbsG/XUzfWGamFSixa24ZDwX/yV/Ts+eNaz7pZeIuv533qmKPvw2ujg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1",
+ "tinycolor2": "^1.4.1"
+ }
+ },
+ "@jimp/plugin-contain": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.10.3.tgz",
+ "integrity": "sha512-bYJKW9dqzcB0Ihc6u7jSyKa3juStzbLs2LFr6fu8TzA2WkMS/R8h+ddkiO36+F9ILTWHP0CIA3HFe5OdOGcigw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-cover": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.10.3.tgz",
+ "integrity": "sha512-pOxu0cM0BRPzdV468n4dMocJXoMbTnARDY/EpC3ZW15SpMuc/dr1KhWQHgoQX5kVW1Wt8zgqREAJJCQ5KuPKDA==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-crop": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.10.3.tgz",
+ "integrity": "sha512-nB7HgOjjl9PgdHr076xZ3Sr6qHYzeBYBs9qvs3tfEEUeYMNnvzgCCGtUl6eMakazZFCMk3mhKmcB9zQuHFOvkg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-displace": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.10.3.tgz",
+ "integrity": "sha512-8t3fVKCH5IVqI4lewe4lFFjpxxr69SQCz5/tlpDLQZsrNScNJivHdQ09zljTrVTCSgeCqQJIKgH2Q7Sk/pAZ0w==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-dither": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.10.3.tgz",
+ "integrity": "sha512-JCX/oNSnEg1kGQ8ffZ66bEgQOLCY3Rn+lrd6v1jjLy/mn9YVZTMsxLtGCXpiCDC2wG/KTmi4862ysmP9do9dAQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-fisheye": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.10.3.tgz",
+ "integrity": "sha512-RRZb1wqe+xdocGcFtj2xHU7sF7xmEZmIa6BmrfSchjyA2b32TGPWKnP3qyj7p6LWEsXn+19hRYbjfyzyebPElQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-flip": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.10.3.tgz",
+ "integrity": "sha512-0epbi8XEzp0wmSjoW9IB0iMu0yNF17aZOxLdURCN3Zr+8nWPs5VNIMqSVa1Y62GSyiMDpVpKF/ITiXre+EqrPg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-gaussian": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.10.3.tgz",
+ "integrity": "sha512-25eHlFbHUDnMMGpgRBBeQ2AMI4wsqCg46sue0KklI+c2BaZ+dGXmJA5uT8RTOrt64/K9Wz5E+2n7eBnny4dfpQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-invert": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.10.3.tgz",
+ "integrity": "sha512-effYSApWY/FbtlzqsKXlTLkgloKUiHBKjkQnqh5RL4oQxh/33j6aX+HFdDyQKtsXb8CMd4xd7wyiD2YYabTa0g==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-mask": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.10.3.tgz",
+ "integrity": "sha512-twrg8q8TIhM9Z6Jcu9/5f+OCAPaECb0eKrrbbIajJqJ3bCUlj5zbfgIhiQIzjPJ6KjpnFPSqHQfHkU1Vvk/nVw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-normalize": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.10.3.tgz",
+ "integrity": "sha512-xkb5eZI/mMlbwKkDN79+1/t/+DBo8bBXZUMsT4gkFgMRKNRZ6NQPxlv1d3QpRzlocsl6UMxrHnhgnXdLAcgrXw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-print": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.10.3.tgz",
+ "integrity": "sha512-wjRiI6yjXsAgMe6kVjizP+RgleUCLkH256dskjoNvJzmzbEfO7xQw9g6M02VET+emnbY0CO83IkrGm2q43VRyg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1",
+ "load-bmfont": "^1.4.0"
+ }
+ },
+ "@jimp/plugin-resize": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.10.3.tgz",
+ "integrity": "sha512-rf8YmEB1d7Sg+g4LpqF0Mp+dfXfb6JFJkwlAIWPUOR7lGsPWALavEwTW91c0etEdnp0+JB9AFpy6zqq7Lwkq6w==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-rotate": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.10.3.tgz",
+ "integrity": "sha512-YXLlRjm18fkW9MOHUaVAxWjvgZM851ofOipytz5FyKp4KZWDLk+dZK1JNmVmK7MyVmAzZ5jsgSLhIgj+GgN0Eg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-scale": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.10.3.tgz",
+ "integrity": "sha512-5DXD7x7WVcX1gUgnlFXQa8F+Q3ThRYwJm+aesgrYvDOY+xzRoRSdQvhmdd4JEEue3lyX44DvBSgCIHPtGcEPaw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-shadow": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.10.3.tgz",
+ "integrity": "sha512-/nkFXpt2zVcdP4ETdkAUL0fSzyrC5ZFxdcphbYBodqD7fXNqChS/Un1eD4xCXWEpW8cnG9dixZgQgStjywH0Mg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugin-threshold": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.10.3.tgz",
+ "integrity": "sha512-Dzh0Yq2wXP2SOnxcbbiyA4LJ2luwrdf1MghNIt9H+NX7B+IWw/N8qA2GuSm9n4BPGSLluuhdAWJqHcTiREriVA==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1"
+ }
+ },
+ "@jimp/plugins": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.10.3.tgz",
+ "integrity": "sha512-jTT3/7hOScf0EIKiAXmxwayHhryhc1wWuIe3FrchjDjr9wgIGNN2a7XwCgPl3fML17DXK1x8EzDneCdh261bkw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/plugin-blit": "^0.10.3",
+ "@jimp/plugin-blur": "^0.10.3",
+ "@jimp/plugin-circle": "^0.10.3",
+ "@jimp/plugin-color": "^0.10.3",
+ "@jimp/plugin-contain": "^0.10.3",
+ "@jimp/plugin-cover": "^0.10.3",
+ "@jimp/plugin-crop": "^0.10.3",
+ "@jimp/plugin-displace": "^0.10.3",
+ "@jimp/plugin-dither": "^0.10.3",
+ "@jimp/plugin-fisheye": "^0.10.3",
+ "@jimp/plugin-flip": "^0.10.3",
+ "@jimp/plugin-gaussian": "^0.10.3",
+ "@jimp/plugin-invert": "^0.10.3",
+ "@jimp/plugin-mask": "^0.10.3",
+ "@jimp/plugin-normalize": "^0.10.3",
+ "@jimp/plugin-print": "^0.10.3",
+ "@jimp/plugin-resize": "^0.10.3",
+ "@jimp/plugin-rotate": "^0.10.3",
+ "@jimp/plugin-scale": "^0.10.3",
+ "@jimp/plugin-shadow": "^0.10.3",
+ "@jimp/plugin-threshold": "^0.10.3",
+ "core-js": "^3.4.1",
+ "timm": "^1.6.1"
+ }
+ },
+ "@jimp/png": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.10.3.tgz",
+ "integrity": "sha512-YKqk/dkl+nGZxSYIDQrqhmaP8tC3IK8H7dFPnnzFVvbhDnyYunqBZZO3SaZUKTichClRw8k/CjBhbc+hifSGWg==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.10.3",
+ "core-js": "^3.4.1",
+ "pngjs": "^3.3.3"
+ }
+ },
+ "@jimp/tiff": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.10.3.tgz",
+ "integrity": "sha512-7EsJzZ5Y/EtinkBGuwX3Bi4S+zgbKouxjt9c82VJTRJOQgLWsE/RHqcyRCOQBhHAZ9QexYmDz34medfLKdoX0g==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "core-js": "^3.4.1",
+ "utif": "^2.0.1"
+ }
+ },
+ "@jimp/types": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.10.3.tgz",
+ "integrity": "sha512-XGmBakiHZqseSWr/puGN+CHzx0IKBSpsKlmEmsNV96HKDiP6eu8NSnwdGCEq2mmIHe0JNcg1hqg59hpwtQ7Tiw==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/bmp": "^0.10.3",
+ "@jimp/gif": "^0.10.3",
+ "@jimp/jpeg": "^0.10.3",
+ "@jimp/png": "^0.10.3",
+ "@jimp/tiff": "^0.10.3",
+ "core-js": "^3.4.1",
+ "timm": "^1.6.1"
+ }
+ },
+ "@jimp/utils": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.10.3.tgz",
+ "integrity": "sha512-VcSlQhkil4ReYmg1KkN+WqHyYfZ2XfZxDsKAHSfST1GEz/RQHxKZbX+KhFKtKflnL0F4e6DlNQj3vznMNXCR2w==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "core-js": "^3.4.1",
+ "regenerator-runtime": "^0.13.3"
+ }
+ },
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="
+ },
+ "@jridgewell/source-map": {
+ "version": "0.3.11",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
+ "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
+ }
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
+ "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@parcel/watcher": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz",
+ "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@parcel/watcher-android-arm64": "2.6.0",
+ "@parcel/watcher-darwin-arm64": "2.6.0",
+ "@parcel/watcher-darwin-x64": "2.6.0",
+ "@parcel/watcher-freebsd-x64": "2.6.0",
+ "@parcel/watcher-linux-arm-glibc": "2.6.0",
+ "@parcel/watcher-linux-arm-musl": "2.6.0",
+ "@parcel/watcher-linux-arm64-glibc": "2.6.0",
+ "@parcel/watcher-linux-arm64-musl": "2.6.0",
+ "@parcel/watcher-linux-x64-glibc": "2.6.0",
+ "@parcel/watcher-linux-x64-musl": "2.6.0",
+ "@parcel/watcher-win32-arm64": "2.6.0",
+ "@parcel/watcher-win32-x64": "2.6.0",
+ "detect-libc": "^2.0.3",
+ "is-glob": "^4.0.3",
+ "node-addon-api": "^7.0.0",
+ "picomatch": "^4.0.4"
+ },
+ "dependencies": {
+ "picomatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "@parcel/watcher-android-arm64": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz",
+ "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-darwin-arm64": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz",
+ "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-darwin-x64": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz",
+ "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-freebsd-x64": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz",
+ "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm-glibc": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz",
+ "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm-musl": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz",
+ "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm64-glibc": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz",
+ "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm64-musl": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz",
+ "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-x64-glibc": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz",
+ "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-x64-musl": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz",
+ "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-win32-arm64": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz",
+ "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-win32-x64": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz",
+ "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/pluginutils": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
+ "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
+ "requires": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "@rollup/rollup-android-arm-eabi": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz",
+ "integrity": "sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-android-arm64": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.3.tgz",
+ "integrity": "sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-arm64": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.3.tgz",
+ "integrity": "sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-x64": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.3.tgz",
+ "integrity": "sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.3.tgz",
+ "integrity": "sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.14.3.tgz",
+ "integrity": "sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.3.tgz",
+ "integrity": "sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-musl": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.3.tgz",
+ "integrity": "sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.3.tgz",
+ "integrity": "sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.3.tgz",
+ "integrity": "sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.3.tgz",
+ "integrity": "sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-gnu": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.3.tgz",
+ "integrity": "sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-musl": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.3.tgz",
+ "integrity": "sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.3.tgz",
+ "integrity": "sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.3.tgz",
+ "integrity": "sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-x64-msvc": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.3.tgz",
+ "integrity": "sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==",
+ "dev": true,
+ "optional": true
+ },
+ "@types/estree": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="
+ },
+ "@vitejs/plugin-basic-ssl": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.2.0.tgz",
+ "integrity": "sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q=="
+ },
+ "@vitejs/plugin-legacy": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-5.3.2.tgz",
+ "integrity": "sha512-8moCOrIMaZ/Rjln0Q6GsH6s8fAt1JOI3k8nmfX4tXUxE5KAExVctSyOBk+A25GClsdSWqIk2yaUthH3KJ2X4tg==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.23.9",
+ "@babel/preset-env": "^7.23.9",
+ "browserslist": "^4.23.0",
+ "browserslist-to-esbuild": "^2.1.1",
+ "core-js": "^3.36.0",
+ "magic-string": "^0.30.7",
+ "regenerator-runtime": "^0.14.1",
+ "systemjs": "^6.14.3"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "dev": true
+ }
+ }
+ },
+ "@vitejs/plugin-vue": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
+ "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==",
+ "dev": true
+ },
+ "@vitejs/plugin-vue-jsx": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz",
+ "integrity": "sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.23.3",
+ "@babel/plugin-transform-typescript": "^7.23.3",
+ "@vue/babel-plugin-jsx": "^1.1.5"
+ }
+ },
+ "@vue/babel-helper-vue-transform-on": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz",
+ "integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==",
+ "dev": true
+ },
+ "@vue/babel-plugin-jsx": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz",
+ "integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/template": "^7.27.2",
+ "@babel/traverse": "^7.28.0",
+ "@babel/types": "^7.28.2",
+ "@vue/babel-helper-vue-transform-on": "1.5.0",
+ "@vue/babel-plugin-resolve-type": "1.5.0",
+ "@vue/shared": "^3.5.18"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.42.tgz",
+ "integrity": "sha512-2rPxex1jQf4jvl9MOHl6YaXCPcrNqz/FstMOEh3QWY+/OME9nQTvl9WYeCwhW7AFjaR0SnngZGlp/wkR6rkI6g==",
+ "dev": true
+ }
+ }
+ },
+ "@vue/babel-plugin-resolve-type": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz",
+ "integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/parser": "^7.28.0",
+ "@vue/compiler-sfc": "^3.5.18"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.29.8"
+ }
+ },
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ },
+ "@vue/compiler-core": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.42.tgz",
+ "integrity": "sha512-2Ye1ilMtKXxl8qZUrQ5j0CdgenFp/HFQmta6rfRyfEsTG69L6Wk+tWuNoHYHMx9E8tF2Slvdg1FuwDvAXdy1LQ==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.29.8",
+ "@vue/shared": "3.5.42",
+ "entities": "^7.0.1",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "@vue/compiler-dom": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.42.tgz",
+ "integrity": "sha512-qbhQZEFmycr+ni/qyuccS4sucNN7VAbDfbkvNxWOX2VfgFm90MNs3/UhRNKoPMEIVn0F8gdlYjLPvqxHwHeQOA==",
+ "dev": true,
+ "requires": {
+ "@vue/compiler-core": "3.5.42",
+ "@vue/shared": "3.5.42"
+ }
+ },
+ "@vue/compiler-sfc": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.42.tgz",
+ "integrity": "sha512-fkCAFB4okcAANGMThboWnScp/gzWjU0ZSkVnjTIiplmMDq2uq0tIB3j+xVu4rhv5rvOgBySCysudmbMd6xRRqw==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.29.8",
+ "@vue/compiler-core": "3.5.42",
+ "@vue/compiler-dom": "3.5.42",
+ "@vue/compiler-ssr": "3.5.42",
+ "@vue/shared": "3.5.42",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.21",
+ "postcss": "^8.5.19",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "@vue/compiler-ssr": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.42.tgz",
+ "integrity": "sha512-xmLk3wLkbizPAiLyomjgFFosf2ys9b5Ghb+oh/k2tnvipNz8OFrQOiTcWCzyK7MpBp9KkyGtfvgfLUivbmuGYA==",
+ "dev": true,
+ "requires": {
+ "@vue/compiler-dom": "3.5.42",
+ "@vue/shared": "3.5.42"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.42.tgz",
+ "integrity": "sha512-2rPxex1jQf4jvl9MOHl6YaXCPcrNqz/FstMOEh3QWY+/OME9nQTvl9WYeCwhW7AFjaR0SnngZGlp/wkR6rkI6g==",
+ "dev": true
+ },
+ "magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.5.28",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz",
+ "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==",
+ "dev": true,
+ "requires": {
+ "nanoid": "^3.3.18",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ }
+ }
+ }
+ },
+ "@vue/compiler-core": {
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz",
+ "integrity": "sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==",
+ "requires": {
+ "@babel/parser": "^7.23.9",
+ "@vue/shared": "3.4.21",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.0.2"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
+ }
+ }
+ },
+ "@vue/compiler-dom": {
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz",
+ "integrity": "sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==",
+ "requires": {
+ "@vue/compiler-core": "3.4.21",
+ "@vue/shared": "3.4.21"
+ }
+ },
+ "@vue/compiler-sfc": {
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz",
+ "integrity": "sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==",
+ "requires": {
+ "@babel/parser": "^7.23.9",
+ "@vue/compiler-core": "3.4.21",
+ "@vue/compiler-dom": "3.4.21",
+ "@vue/compiler-ssr": "3.4.21",
+ "@vue/shared": "3.4.21",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.7",
+ "postcss": "^8.4.35",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "@vue/compiler-ssr": {
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz",
+ "integrity": "sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==",
+ "requires": {
+ "@vue/compiler-dom": "3.4.21",
+ "@vue/shared": "3.4.21"
+ }
+ },
+ "@vue/devtools-api": {
+ "version": "6.6.4",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
+ },
+ "@vue/reactivity": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.42.tgz",
+ "integrity": "sha512-TzNNfKpb7hDxbQltwAut8VDQA5YP+BuRlxntHUuRjyKwlMvmAPbs3unhCvieijifY6vFfVBwsS7wG/C7uq+bEQ==",
+ "requires": {
+ "@vue/shared": "3.5.42"
+ },
+ "dependencies": {
+ "@vue/shared": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.42.tgz",
+ "integrity": "sha512-2rPxex1jQf4jvl9MOHl6YaXCPcrNqz/FstMOEh3QWY+/OME9nQTvl9WYeCwhW7AFjaR0SnngZGlp/wkR6rkI6g=="
+ }
+ }
+ },
+ "@vue/runtime-core": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.42.tgz",
+ "integrity": "sha512-9uACtuHs7vJGkm5Bp3xu4xRDLFTIYy5DgxpToVjqGIAhAEKwQfsaLvKINhM6nFVp6bZPRFGdDqd1g52MqKsotA==",
+ "requires": {
+ "@vue/reactivity": "3.5.42",
+ "@vue/shared": "3.5.42"
+ },
+ "dependencies": {
+ "@vue/shared": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.42.tgz",
+ "integrity": "sha512-2rPxex1jQf4jvl9MOHl6YaXCPcrNqz/FstMOEh3QWY+/OME9nQTvl9WYeCwhW7AFjaR0SnngZGlp/wkR6rkI6g=="
+ }
+ }
+ },
+ "@vue/runtime-dom": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.42.tgz",
+ "integrity": "sha512-rsCmhiWLaRxGltLwhlCWyYkFn7WAbKRh0q17eZ1A6Dq6eqc2ACQ61IIryxz0LrsvCzHSilLA9JHovVwM8CNE2g==",
+ "requires": {
+ "@vue/reactivity": "3.5.42",
+ "@vue/runtime-core": "3.5.42",
+ "@vue/shared": "3.5.42",
+ "csstype": "^3.2.3"
+ },
+ "dependencies": {
+ "@vue/shared": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.42.tgz",
+ "integrity": "sha512-2rPxex1jQf4jvl9MOHl6YaXCPcrNqz/FstMOEh3QWY+/OME9nQTvl9WYeCwhW7AFjaR0SnngZGlp/wkR6rkI6g=="
+ }
+ }
+ },
+ "@vue/server-renderer": {
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.21.tgz",
+ "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==",
+ "requires": {
+ "@vue/compiler-ssr": "3.4.21",
+ "@vue/shared": "3.4.21"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz",
+ "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g=="
+ },
+ "accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ }
+ },
+ "acorn": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz",
+ "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ=="
+ },
+ "address": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz",
+ "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",
+ "dev": true
+ },
+ "adm-zip": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz",
+ "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ=="
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "any-base": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz",
+ "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="
+ },
+ "anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "10.4.20",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
+ "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
+ "requires": {
+ "browserslist": "^4.23.3",
+ "caniuse-lite": "^1.0.30001646",
+ "fraction.js": "^4.3.7",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.1",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "babel-plugin-polyfill-corejs2": {
+ "version": "0.4.17",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz",
+ "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.8",
+ "semver": "^6.3.1"
+ }
+ },
+ "babel-plugin-polyfill-corejs3": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz",
+ "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.6.8",
+ "core-js-compat": "^3.48.0"
+ }
+ },
+ "babel-plugin-polyfill-regenerator": {
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz",
+ "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.6.8"
+ }
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+ },
+ "base64url": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
+ "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A=="
+ },
+ "baseline-browser-mapping": {
+ "version": "2.11.23",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.23.tgz",
+ "integrity": "sha512-le521dGVfxM7yRX0EikCoSz+rOK+hHzdDt/E7mG1jOJB/6WAAUuwVroLwaB7ApaUsz5Q0kFlDXLSA9MheUIfRQ=="
+ },
+ "binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="
+ },
+ "bmp-js": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz",
+ "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw=="
+ },
+ "body-parser": {
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.5",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.13.0",
+ "raw-body": "2.5.2",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "dev": true,
+ "requires": {
+ "side-channel": "^1.0.6"
+ }
+ }
+ }
+ },
+ "braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "requires": {
+ "fill-range": "^7.1.1"
+ }
+ },
+ "browserslist": {
+ "version": "4.28.9",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz",
+ "integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==",
+ "requires": {
+ "baseline-browser-mapping": "^2.11.20",
+ "caniuse-lite": "^1.0.30001810",
+ "electron-to-chromium": "^1.5.420",
+ "node-releases": "^2.0.54",
+ "update-browserslist-db": "^1.3.2"
+ }
+ },
+ "browserslist-to-esbuild": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/browserslist-to-esbuild/-/browserslist-to-esbuild-2.1.1.tgz",
+ "integrity": "sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==",
+ "dev": true,
+ "requires": {
+ "meow": "^13.0.0"
+ }
+ },
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "buffer-equal": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
+ "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA=="
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true
+ },
+ "cac": {
+ "version": "6.7.9",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.9.tgz",
+ "integrity": "sha512-XN5qEpfNQCJ8jRaZgitSkkukjMRCGio+X3Ks5KUbGGlPbV+pSem1l9VuzooCBXOiMFshUZgyYqg6rgN8rjkb/w==",
+ "dev": true
+ },
+ "call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "requires": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ }
+ },
+ "call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "dev": true,
+ "requires": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001810",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz",
+ "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg=="
+ },
+ "centra": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/centra/-/centra-2.7.0.tgz",
+ "integrity": "sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==",
+ "requires": {
+ "follow-redirects": "^1.15.6"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "compare-versions": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz",
+ "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA=="
+ },
+ "confbox": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
+ "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="
+ },
+ "content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.2.1"
+ }
+ },
+ "content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
+ },
+ "cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "3.50.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.50.0.tgz",
+ "integrity": "sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw=="
+ },
+ "core-js-compat": {
+ "version": "3.50.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.50.0.tgz",
+ "integrity": "sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.28.7"
+ }
+ },
+ "core-js-pure": {
+ "version": "3.50.0",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.50.0.tgz",
+ "integrity": "sha512-6GP3Pxz4IKyWjAfa747vIu/jilB5z29JWROLqH/b+pXVcpgh6tM06ZIBwSuglgVqzDYURhOK6oEzTrG0bCHitA=="
+ },
+ "cross-env": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
+ "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "css-font-size-keywords": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz",
+ "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q=="
+ },
+ "css-font-stretch-keywords": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz",
+ "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg=="
+ },
+ "css-font-style-keywords": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz",
+ "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg=="
+ },
+ "css-font-weight-keywords": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz",
+ "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA=="
+ },
+ "css-list-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/css-list-helpers/-/css-list-helpers-2.0.0.tgz",
+ "integrity": "sha512-9Bj8tZ0jWbAM3u/U6m/boAzAwLPwtjzFvwivr2piSvyVa3K3rChJzQy4RIHkNkKiZCHrEMWDJWtTR8UyVhdDnQ=="
+ },
+ "css-system-font-keywords": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz",
+ "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA=="
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+ },
+ "csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="
+ },
+ "debug": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "requires": {
+ "ms": "^2.1.3"
+ }
+ },
+ "default-gateway": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
+ "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
+ "dev": true,
+ "requires": {
+ "execa": "^5.0.0"
+ }
+ },
+ "depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "dev": true
+ },
+ "detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "dev": true,
+ "optional": true
+ },
+ "dom-walk": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
+ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
+ },
+ "dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "requires": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.5.428",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.428.tgz",
+ "integrity": "sha512-1JxbaFJj1bRKurj1uY3l4xxpU9kOUAUjcIgApj0qu1Pao5GhoIWI8iL0BeMYJ2njig1hBx0A7eKD9VGjH9wlHw=="
+ },
+ "encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "dev": true
+ },
+ "entities": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
+ "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="
+ },
+ "es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true
+ },
+ "es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true
+ },
+ "es-module-lexer": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw=="
+ },
+ "es-object-atoms": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
+ "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
+ "dev": true,
+ "requires": {
+ "es-errors": "^1.3.0"
+ }
+ },
+ "esbuild": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
+ "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
+ "requires": {
+ "@esbuild/aix-ppc64": "0.20.2",
+ "@esbuild/android-arm": "0.20.2",
+ "@esbuild/android-arm64": "0.20.2",
+ "@esbuild/android-x64": "0.20.2",
+ "@esbuild/darwin-arm64": "0.20.2",
+ "@esbuild/darwin-x64": "0.20.2",
+ "@esbuild/freebsd-arm64": "0.20.2",
+ "@esbuild/freebsd-x64": "0.20.2",
+ "@esbuild/linux-arm": "0.20.2",
+ "@esbuild/linux-arm64": "0.20.2",
+ "@esbuild/linux-ia32": "0.20.2",
+ "@esbuild/linux-loong64": "0.20.2",
+ "@esbuild/linux-mips64el": "0.20.2",
+ "@esbuild/linux-ppc64": "0.20.2",
+ "@esbuild/linux-riscv64": "0.20.2",
+ "@esbuild/linux-s390x": "0.20.2",
+ "@esbuild/linux-x64": "0.20.2",
+ "@esbuild/netbsd-x64": "0.20.2",
+ "@esbuild/openbsd-x64": "0.20.2",
+ "@esbuild/sunos-x64": "0.20.2",
+ "@esbuild/win32-arm64": "0.20.2",
+ "@esbuild/win32-ia32": "0.20.2",
+ "@esbuild/win32-x64": "0.20.2"
+ }
+ },
+ "escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
+ },
+ "estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "dev": true
+ },
+ "execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "exif-parser": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz",
+ "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw=="
+ },
+ "express": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.20.0.tgz",
+ "integrity": "sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.3",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.6.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.2.0",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.3",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.10",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.11.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.19.0",
+ "serve-static": "1.16.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ }
+ }
+ },
+ "exsolve": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.1.1.tgz",
+ "integrity": "sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g=="
+ },
+ "fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ }
+ },
+ "fastq": {
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz",
+ "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==",
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "file-type": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz",
+ "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw=="
+ },
+ "fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "finalhandler": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ }
+ }
+ },
+ "follow-redirects": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="
+ },
+ "forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "dev": true
+ },
+ "fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+ },
+ "generic-names": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz",
+ "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==",
+ "requires": {
+ "loader-utils": "^3.2.0"
+ }
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
+ },
+ "get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
+ "requires": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ }
+ },
+ "get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "requires": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "global": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
+ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+ "requires": {
+ "min-document": "^2.19.0",
+ "process": "^0.11.10"
+ }
+ },
+ "gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
+ },
+ "has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true
+ },
+ "hash-sum": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
+ "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg=="
+ },
+ "hasown": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
+ "requires": {
+ "function-bind": "^1.1.2"
+ }
+ },
+ "http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dev": true,
+ "requires": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ }
+ },
+ "human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "icss-replace-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+ "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg=="
+ },
+ "icss-utils": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
+ "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+ },
+ "immutable": {
+ "version": "5.1.9",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz",
+ "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==",
+ "dev": true
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "invert-kv": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz",
+ "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw=="
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.16.2",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz",
+ "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
+ "requires": {
+ "hasown": "^2.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+ },
+ "is-function": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
+ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true
+ },
+ "isbinaryfile": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.2.tgz",
+ "integrity": "sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg=="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "jimp": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.10.3.tgz",
+ "integrity": "sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/custom": "^0.10.3",
+ "@jimp/plugins": "^0.10.3",
+ "@jimp/types": "^0.10.3",
+ "core-js": "^3.4.1",
+ "regenerator-runtime": "^0.13.3"
+ }
+ },
+ "jpeg-js": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz",
+ "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ=="
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="
+ },
+ "json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
+ },
+ "jsonc-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="
+ },
+ "jsonfile": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz",
+ "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==",
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "lcid": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz",
+ "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==",
+ "requires": {
+ "invert-kv": "^3.0.0"
+ }
+ },
+ "licia": {
+ "version": "1.41.1",
+ "resolved": "https://registry.npmjs.org/licia/-/licia-1.41.1.tgz",
+ "integrity": "sha512-XqObV8u1KEMdYWaNK0leRrTwhzKnLQEkhbnuUu7qGNH3zJoN7l9sfvF6PfHstSCuUOmpEP+0SBjRrk0I9uZs8g=="
+ },
+ "lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
+ },
+ "lines-and-columns": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz",
+ "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A=="
+ },
+ "load-bmfont": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.2.tgz",
+ "integrity": "sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==",
+ "requires": {
+ "buffer-equal": "0.0.1",
+ "mime": "^1.3.4",
+ "parse-bmfont-ascii": "^1.0.3",
+ "parse-bmfont-binary": "^1.0.5",
+ "parse-bmfont-xml": "^1.1.4",
+ "phin": "^3.7.1",
+ "xhr": "^2.0.1",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
+ "phin": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/phin/-/phin-3.7.1.tgz",
+ "integrity": "sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==",
+ "requires": {
+ "centra": "^2.7.0"
+ }
+ }
+ }
+ },
+ "loader-utils": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz",
+ "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg=="
+ },
+ "local-pkg": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.2.1.tgz",
+ "integrity": "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==",
+ "requires": {
+ "mlly": "^1.7.4",
+ "pkg-types": "^2.3.0",
+ "quansync": "^0.2.11"
+ },
+ "dependencies": {
+ "confbox": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.3.1.tgz",
+ "integrity": "sha512-cKUSoKa8YxFZZSmraVi7onONx3amu77ngK3kGpsYHDH7drPwCRkQE1RYMPlLRrMtnciRj274XNRxcHxnKmDSnA=="
+ },
+ "pkg-types": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.3.tgz",
+ "integrity": "sha512-j/lCFdcppV0JxWpCEITdbDltBxPP6cHT+yNJ6Go2OgoSA9518X847X9z0p6LtA4Nc16+eQzCZjRrWanTGvHJ5w==",
+ "requires": {
+ "confbox": "^0.3.1",
+ "exsolve": "^1.1.1",
+ "pathe": "^2.0.3"
+ }
+ }
+ }
+ },
+ "localstorage-polyfill": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/localstorage-polyfill/-/localstorage-polyfill-1.0.1.tgz",
+ "integrity": "sha512-m4iHVZxFH5734oQcPKU08025gIz2+4bjWR9lulP8ZYxEJR0BpA0w32oJmkzh8y3UI9ci7xCBehQDc3oA1X+VHw=="
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "magic-string": {
+ "version": "0.30.11",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
+ "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.5.0"
+ }
+ },
+ "math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "dev": true
+ },
+ "meow": {
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+ "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
+ "dev": true
+ },
+ "merge": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz",
+ "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w=="
+ },
+ "merge-descriptors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "requires": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mime": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
+ "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "min-document": {
+ "version": "2.19.2",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.2.tgz",
+ "integrity": "sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==",
+ "requires": {
+ "dom-walk": "^0.1.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+ },
+ "mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "requires": {
+ "minimist": "^1.2.6"
+ }
+ },
+ "mlly": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz",
+ "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==",
+ "requires": {
+ "acorn": "^8.16.0",
+ "pathe": "^2.0.3",
+ "pkg-types": "^1.3.1",
+ "ufo": "^1.6.3"
+ }
+ },
+ "module-alias": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz",
+ "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "nanoid": {
+ "version": "3.3.19",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz",
+ "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug=="
+ },
+ "negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "dev": true
+ },
+ "node-addon-api": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+ "dev": true,
+ "optional": true
+ },
+ "node-releases": {
+ "version": "2.0.55",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.55.tgz",
+ "integrity": "sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ=="
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "dev": true
+ },
+ "omggif": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz",
+ "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="
+ },
+ "on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "os-locale-s-fix": {
+ "version": "1.0.8-fix-1",
+ "resolved": "https://registry.npmjs.org/os-locale-s-fix/-/os-locale-s-fix-1.0.8-fix-1.tgz",
+ "integrity": "sha512-Sv0OvhPiMutICiwORAUefv02DCPb62IelBmo8ZsSrRHyI3FStqIWZvjqDkvtjU+lcujo7UNir+dCwKSqlEQ/5w==",
+ "requires": {
+ "lcid": "^3.0.0"
+ }
+ },
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+ },
+ "parse-bmfont-ascii": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
+ "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA=="
+ },
+ "parse-bmfont-binary": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
+ "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA=="
+ },
+ "parse-bmfont-xml": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz",
+ "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==",
+ "requires": {
+ "xml-parse-from-string": "^1.0.0",
+ "xml2js": "^0.5.0"
+ }
+ },
+ "parse-css-font": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-css-font/-/parse-css-font-4.0.0.tgz",
+ "integrity": "sha512-lnY7dTUfjRXsSo5G5C639L8RaBBaVSgL+5hacIFKsNHzeCJQ5SFSZv1DZmc7+wZv/22PFGOq2YbaEHLdaCS/mQ==",
+ "requires": {
+ "css-font-size-keywords": "^1.0.0",
+ "css-font-stretch-keywords": "^1.0.1",
+ "css-font-style-keywords": "^1.0.1",
+ "css-font-weight-keywords": "^1.0.0",
+ "css-list-helpers": "^2.0.0",
+ "css-system-font-keywords": "^1.0.0",
+ "unquote": "^1.1.1"
+ }
+ },
+ "parse-headers": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.6.tgz",
+ "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A=="
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-to-regexp": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
+ "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",
+ "dev": true
+ },
+ "pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="
+ },
+ "phin": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz",
+ "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA=="
+ },
+ "picocolors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
+ "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw=="
+ },
+ "picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="
+ },
+ "pinia": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz",
+ "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==",
+ "requires": {
+ "@vue/devtools-api": "^6.6.3",
+ "vue-demi": "^0.14.10"
+ }
+ },
+ "pixelmatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz",
+ "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==",
+ "requires": {
+ "pngjs": "^3.0.0"
+ }
+ },
+ "pkg-types": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz",
+ "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
+ "requires": {
+ "confbox": "^0.1.8",
+ "mlly": "^1.7.4",
+ "pathe": "^2.0.1"
+ }
+ },
+ "pngjs": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
+ "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="
+ },
+ "postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "requires": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ }
+ }
+ },
+ "postcss-import": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
+ "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+ "requires": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ }
+ },
+ "postcss-load-config": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+ "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+ "requires": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^1.10.2"
+ }
+ },
+ "postcss-modules": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz",
+ "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==",
+ "requires": {
+ "generic-names": "^4.0.0",
+ "icss-replace-symbols": "^1.1.0",
+ "lodash.camelcase": "^4.3.0",
+ "postcss-modules-extract-imports": "^3.0.0",
+ "postcss-modules-local-by-default": "^4.0.0",
+ "postcss-modules-scope": "^3.0.0",
+ "postcss-modules-values": "^4.0.0",
+ "string-hash": "^1.1.1"
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
+ "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q=="
+ },
+ "postcss-modules-local-by-default": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz",
+ "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==",
+ "requires": {
+ "icss-utils": "^5.0.0",
+ "postcss-selector-parser": "^7.0.0",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz",
+ "integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==",
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ }
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz",
+ "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==",
+ "requires": {
+ "postcss-selector-parser": "^7.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz",
+ "integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==",
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ }
+ }
+ },
+ "postcss-modules-values": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
+ "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
+ "requires": {
+ "icss-utils": "^5.0.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
+ },
+ "proxy-addr": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz",
+ "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==",
+ "dev": true,
+ "requires": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ }
+ },
+ "qrcode-reader": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/qrcode-reader/-/qrcode-reader-1.0.4.tgz",
+ "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ=="
+ },
+ "qrcode-terminal": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
+ "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ=="
+ },
+ "qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dev": true,
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "quansync": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz",
+ "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ }
+ },
+ "read-cache": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.2.tgz",
+ "integrity": "sha512-/peqiBB/n07gQGLsWaHho3WfvUyRscw0gYTsEFMhrIe/nWLkYaf5SbKYjGYqtRV3aPwykJgF2VEMo1ac4bnsGA=="
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz",
+ "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.2"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+ },
+ "regexpu-core": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz",
+ "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^10.2.2",
+ "regjsgen": "^0.8.0",
+ "regjsparser": "^0.13.0",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.2.1"
+ }
+ },
+ "regjsgen": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.13.2",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz",
+ "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==",
+ "dev": true,
+ "requires": {
+ "jsesc": "~3.1.0"
+ }
+ },
+ "resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="
+ },
+ "rollup": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.3.tgz",
+ "integrity": "sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==",
+ "dev": true,
+ "requires": {
+ "@rollup/rollup-android-arm-eabi": "4.14.3",
+ "@rollup/rollup-android-arm64": "4.14.3",
+ "@rollup/rollup-darwin-arm64": "4.14.3",
+ "@rollup/rollup-darwin-x64": "4.14.3",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.14.3",
+ "@rollup/rollup-linux-arm-musleabihf": "4.14.3",
+ "@rollup/rollup-linux-arm64-gnu": "4.14.3",
+ "@rollup/rollup-linux-arm64-musl": "4.14.3",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.14.3",
+ "@rollup/rollup-linux-riscv64-gnu": "4.14.3",
+ "@rollup/rollup-linux-s390x-gnu": "4.14.3",
+ "@rollup/rollup-linux-x64-gnu": "4.14.3",
+ "@rollup/rollup-linux-x64-musl": "4.14.3",
+ "@rollup/rollup-win32-arm64-msvc": "4.14.3",
+ "@rollup/rollup-win32-ia32-msvc": "4.14.3",
+ "@rollup/rollup-win32-x64-msvc": "4.14.3",
+ "@types/estree": "1.0.5",
+ "fsevents": "~2.3.2"
+ },
+ "dependencies": {
+ "@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true
+ }
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "safe-area-insets": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/safe-area-insets/-/safe-area-insets-1.4.1.tgz",
+ "integrity": "sha512-r/nRWTjFGhhm3w1Z6Kd/jY11srN+lHt2mNl1E/emQGW8ic7n3Avu4noibklfSM+Y34peNphHD/BSZecav0sXYQ=="
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "sass": {
+ "version": "1.104.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.104.1.tgz",
+ "integrity": "sha512-yDA+1aIG3EHgN4V/BvuhCvu61FF6hEd4e+9DxikUm9U0CAGuvdIZ/UYy7qbOxjhbbWQraoyLlMuzdRGOSV5Bmw==",
+ "dev": true,
+ "requires": {
+ "@parcel/watcher": "^2.4.1",
+ "chokidar": "^5.0.0",
+ "immutable": "^5.1.5",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "dependencies": {
+ "chokidar": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz",
+ "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==",
+ "dev": true,
+ "requires": {
+ "readdirp": "^5.0.0"
+ }
+ },
+ "readdirp": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz",
+ "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==",
+ "dev": true
+ }
+ }
+ },
+ "sax": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz",
+ "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q=="
+ },
+ "scule": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz",
+ "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
+ },
+ "send": {
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ }
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.0.tgz",
+ "integrity": "sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.18.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ }
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ },
+ "send": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ }
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "side-channel": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
+ "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
+ "dev": true,
+ "requires": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.4",
+ "side-channel-list": "^1.0.1",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ }
+ },
+ "side-channel-list": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
+ "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
+ "dev": true,
+ "requires": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.4"
+ }
+ },
+ "side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "dev": true,
+ "requires": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ }
+ },
+ "side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "dev": true,
+ "requires": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
+ },
+ "source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "dev": true
+ },
+ "string-hash": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",
+ "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A=="
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ },
+ "strip-literal": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz",
+ "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==",
+ "requires": {
+ "js-tokens": "^9.0.1"
+ },
+ "dependencies": {
+ "js-tokens": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
+ "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="
+ }
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "systemjs": {
+ "version": "6.15.1",
+ "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.15.1.tgz",
+ "integrity": "sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==",
+ "dev": true
+ },
+ "tapable": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",
+ "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="
+ },
+ "terser": {
+ "version": "5.51.2",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz",
+ "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.15.0",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ }
+ },
+ "timm": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz",
+ "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw=="
+ },
+ "tinycolor2": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz",
+ "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "ufo": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz",
+ "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA=="
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
+ "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz",
+ "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz",
+ "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==",
+ "dev": true
+ },
+ "unimport": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/unimport/-/unimport-4.1.1.tgz",
+ "integrity": "sha512-j9+fijH6aDd05yv1fXlyt7HSxtOWtGtrZeYTVBsSUg57Iuf+Ps2itIZjeyu7bEQ4k0WOgYhHrdW8m/pJgOpl5g==",
+ "requires": {
+ "acorn": "^8.14.0",
+ "escape-string-regexp": "^5.0.0",
+ "estree-walker": "^3.0.3",
+ "fast-glob": "^3.3.3",
+ "local-pkg": "^1.0.0",
+ "magic-string": "^0.30.17",
+ "mlly": "^1.7.4",
+ "pathe": "^2.0.2",
+ "picomatch": "^4.0.2",
+ "pkg-types": "^1.3.1",
+ "scule": "^1.3.0",
+ "strip-literal": "^3.0.0",
+ "unplugin": "^2.1.2",
+ "unplugin-utils": "^0.2.3"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="
+ },
+ "estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "requires": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "picomatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="
+ }
+ }
+ },
+ "universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "dev": true
+ },
+ "unplugin": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz",
+ "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==",
+ "requires": {
+ "@jridgewell/remapping": "^2.3.5",
+ "acorn": "^8.15.0",
+ "picomatch": "^4.0.3",
+ "webpack-virtual-modules": "^0.6.2"
+ },
+ "dependencies": {
+ "picomatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="
+ }
+ }
+ },
+ "unplugin-auto-import": {
+ "version": "19.1.0",
+ "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-19.1.0.tgz",
+ "integrity": "sha512-B+TGBEBHqY9aR+7YfShfLujETOHstzpV+yaqgy5PkfV0QG7Py+TYMX7vJ9W4SrysHR+UzR+gzcx/nuZjmPeclA==",
+ "requires": {
+ "local-pkg": "^1.0.0",
+ "magic-string": "^0.30.17",
+ "picomatch": "^4.0.2",
+ "unimport": "^4.1.1",
+ "unplugin": "^2.2.0",
+ "unplugin-utils": "^0.2.4"
+ },
+ "dependencies": {
+ "magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "picomatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="
+ }
+ }
+ },
+ "unplugin-utils": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.5.tgz",
+ "integrity": "sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==",
+ "requires": {
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3"
+ },
+ "dependencies": {
+ "picomatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="
+ }
+ }
+ },
+ "unquote": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+ "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg=="
+ },
+ "update-browserslist-db": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz",
+ "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==",
+ "requires": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ }
+ }
+ },
+ "utif": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz",
+ "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==",
+ "requires": {
+ "pako": "^1.0.5"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "dev": true
+ },
+ "uview-plus": {
+ "version": "3.8.120",
+ "resolved": "https://registry.npmjs.org/uview-plus/-/uview-plus-3.8.120.tgz",
+ "integrity": "sha512-tXIxmHlHwO8uMwBjXWUoNwl5PiEDNaY1fDXMBVz6X78FG8AHaurwFDDo/FvILw+r9Hj2F93JYxzuYyDBZUpebQ=="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "dev": true
+ },
+ "vite": {
+ "version": "5.2.8",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.8.tgz",
+ "integrity": "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==",
+ "dev": true,
+ "requires": {
+ "esbuild": "^0.20.1",
+ "fsevents": "~2.3.3",
+ "postcss": "^8.4.38",
+ "rollup": "^4.13.0"
+ }
+ },
+ "vue": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.42.tgz",
+ "integrity": "sha512-4RyHQTbQvOPs3MfvUO1Sg0YRrKNnA0mAVtvpd12Tg1fKDN7OHBUl1IqSn8zGJjK9nI3NkNp8cgTpVrSZC5TTcA==",
+ "requires": {
+ "@vue/compiler-dom": "3.5.42",
+ "@vue/compiler-sfc": "3.5.42",
+ "@vue/runtime-dom": "3.5.42",
+ "@vue/server-renderer": "3.5.42",
+ "@vue/shared": "3.5.42"
+ },
+ "dependencies": {
+ "@babel/parser": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
+ "requires": {
+ "@babel/types": "^7.29.8"
+ }
+ },
+ "@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ }
+ },
+ "@vue/compiler-core": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.42.tgz",
+ "integrity": "sha512-2Ye1ilMtKXxl8qZUrQ5j0CdgenFp/HFQmta6rfRyfEsTG69L6Wk+tWuNoHYHMx9E8tF2Slvdg1FuwDvAXdy1LQ==",
+ "requires": {
+ "@babel/parser": "^7.29.8",
+ "@vue/shared": "3.5.42",
+ "entities": "^7.0.1",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "@vue/compiler-dom": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.42.tgz",
+ "integrity": "sha512-qbhQZEFmycr+ni/qyuccS4sucNN7VAbDfbkvNxWOX2VfgFm90MNs3/UhRNKoPMEIVn0F8gdlYjLPvqxHwHeQOA==",
+ "requires": {
+ "@vue/compiler-core": "3.5.42",
+ "@vue/shared": "3.5.42"
+ }
+ },
+ "@vue/compiler-sfc": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.42.tgz",
+ "integrity": "sha512-fkCAFB4okcAANGMThboWnScp/gzWjU0ZSkVnjTIiplmMDq2uq0tIB3j+xVu4rhv5rvOgBySCysudmbMd6xRRqw==",
+ "requires": {
+ "@babel/parser": "^7.29.8",
+ "@vue/compiler-core": "3.5.42",
+ "@vue/compiler-dom": "3.5.42",
+ "@vue/compiler-ssr": "3.5.42",
+ "@vue/shared": "3.5.42",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.21",
+ "postcss": "^8.5.19",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "@vue/compiler-ssr": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.42.tgz",
+ "integrity": "sha512-xmLk3wLkbizPAiLyomjgFFosf2ys9b5Ghb+oh/k2tnvipNz8OFrQOiTcWCzyK7MpBp9KkyGtfvgfLUivbmuGYA==",
+ "requires": {
+ "@vue/compiler-dom": "3.5.42",
+ "@vue/shared": "3.5.42"
+ }
+ },
+ "@vue/server-renderer": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.42.tgz",
+ "integrity": "sha512-2++5dUyYS4gvo7xQXSECUDhB7TS0aOl5SeVfC5qSq1Jgfhjvegw1zqhwTIR3imZ+QYPJQw9gfcFvXGAjGZ7ajQ==",
+ "requires": {
+ "@vue/compiler-ssr": "3.5.42",
+ "@vue/runtime-dom": "3.5.42",
+ "@vue/shared": "3.5.42"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.5.42",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.42.tgz",
+ "integrity": "sha512-2rPxex1jQf4jvl9MOHl6YaXCPcrNqz/FstMOEh3QWY+/OME9nQTvl9WYeCwhW7AFjaR0SnngZGlp/wkR6rkI6g=="
+ },
+ "magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ },
+ "postcss": {
+ "version": "8.5.28",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz",
+ "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==",
+ "requires": {
+ "nanoid": "^3.3.18",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ }
+ }
+ }
+ },
+ "vue-demi": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg=="
+ },
+ "vue-i18n": {
+ "version": "9.14.5",
+ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.5.tgz",
+ "integrity": "sha512-0jQ9Em3ymWngyiIkj0+c/k7WgaPO+TNzjKSNq9BvBQaKJECqn9cd9fL4tkDhB5G1QBskGl9YxxbDAhgbFtpe2g==",
+ "requires": {
+ "@intlify/core-base": "9.14.5",
+ "@intlify/shared": "9.14.5",
+ "@vue/devtools-api": "^6.5.0"
+ },
+ "dependencies": {
+ "@intlify/core-base": {
+ "version": "9.14.5",
+ "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.5.tgz",
+ "integrity": "sha512-5ah5FqZG4pOoHjkvs8mjtv+gPKYU0zCISaYNjBNNqYiaITxW8ZtVih3GS/oTOqN8d9/mDLyrjD46GBApNxmlsA==",
+ "requires": {
+ "@intlify/message-compiler": "9.14.5",
+ "@intlify/shared": "9.14.5"
+ }
+ },
+ "@intlify/message-compiler": {
+ "version": "9.14.5",
+ "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.5.tgz",
+ "integrity": "sha512-IHzgEu61/YIpQV5Pc3aRWScDcnFKWvQA9kigcINcCBXN8mbW+vk9SK+lDxA6STzKQsVJxUPg9ACC52pKKo3SVQ==",
+ "requires": {
+ "@intlify/shared": "9.14.5",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "@intlify/shared": {
+ "version": "9.14.5",
+ "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.5.tgz",
+ "integrity": "sha512-9gB+E53BYuAEMhbCAxVgG38EZrk59sxBtv3jSizNL2hEWlgjBjAw1AwpLHtNaeda12pe6W20OGEa0TwuMSRbyQ=="
+ }
+ }
+ },
+ "vue-router": {
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.4.tgz",
+ "integrity": "sha512-3MlnDqwRwZwCQVbtVfpsU+nrNymNjnXSsQtXName5925NVC1+326VVfYH9vSrA0N13teGEo8z5x7gbRnGjCDiQ==",
+ "requires": {
+ "@vue/devtools-api": "^6.6.4"
+ }
+ },
+ "webpack-virtual-modules": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+ "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "ws": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="
+ },
+ "xhr": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
+ "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
+ "requires": {
+ "global": "~4.4.0",
+ "is-function": "^1.0.1",
+ "parse-headers": "^2.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "xml-parse-from-string": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
+ "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g=="
+ },
+ "xml2js": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
+ "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ }
+ },
+ "xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
+ },
+ "xmlhttprequest": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+ "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA=="
+ },
+ "xregexp": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.2.tgz",
+ "integrity": "sha512-6hGgEMCGhqCTFEJbqmWrNIPqfpdirdGWkqshu7fFZddmTSfgv5Sn9D2SaKloR79s5VUiUlpwzg3CM3G6D3VIlw==",
+ "requires": {
+ "@babel/runtime-corejs3": "^7.26.9"
+ }
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ },
+ "yaml": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz",
+ "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA=="
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..2b9e6e3
--- /dev/null
+++ b/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "quanxiyun-app",
+ "version": "1.0.0",
+ "private": true,
+ "description": "全犀云移动端",
+ "scripts": {
+ "dev:h5": "uni",
+ "dev:mp-weixin": "uni -p mp-weixin",
+ "build:h5": "uni build",
+ "build:mp-weixin": "uni build -p mp-weixin"
+ },
+ "dependencies": {
+ "@dcloudio/uni-app": "3.0.0-5010520260709002",
+ "@dcloudio/uni-components": "3.0.0-5010520260709002",
+ "@dcloudio/uni-h5": "3.0.0-5010520260709002",
+ "@dcloudio/uni-mp-weixin": "3.0.0-5010520260709002",
+ "vue": "^3.4.21",
+ "vue-i18n": "^9.1.9",
+ "pinia": "^2.0.36",
+ "uview-plus": "^3.3.43"
+ },
+ "devDependencies": {
+ "@dcloudio/types": "^3.4.8",
+ "@dcloudio/uni-automator": "3.0.0-5010520260709002",
+ "@dcloudio/uni-cli-shared": "3.0.0-5010520260709002",
+ "@dcloudio/uni-stacktracey": "3.0.0-5010520260709002",
+ "@dcloudio/vite-plugin-uni": "3.0.0-5010520260709002",
+ "@vue/runtime-core": "^3.4.21",
+ "rollup": "4.14.3",
+ "vite": "5.2.8",
+ "sass": "^1.77.6"
+ }
+}
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..28bdcf8
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
diff --git a/src/components/BTopBar.vue b/src/components/BTopBar.vue
new file mode 100644
index 0000000..9ff5c54
--- /dev/null
+++ b/src/components/BTopBar.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/CustomTabBar.vue b/src/components/CustomTabBar.vue
new file mode 100644
index 0000000..f9ce435
--- /dev/null
+++ b/src/components/CustomTabBar.vue
@@ -0,0 +1,163 @@
+
+
+
+
+ {{ item.emoji }}
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
diff --git a/src/components/DeviceCard.vue b/src/components/DeviceCard.vue
new file mode 100644
index 0000000..3d8fce0
--- /dev/null
+++ b/src/components/DeviceCard.vue
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+ {{ device.name || '未命名设备' }}
+ VIP{{ device.vipLevel }}
+ {{ isOwn ? '自有部署' : '平台购买' }}
+
+ {{ statusConfig.label }}
+
+ {{ device.model || '' }}
+
+
+
+
+ {{ device.bandwidth > 0 ? device.bandwidth : '—' }}
+ 带宽 Mbps
+
+
+
+ ¥{{ formatMoney(device.todayRevenue || 0) }}
+ 今日产出
+
+
+ ¥{{ formatMoney(device.totalRevenue || 0) }}
+ 累计积分
+
+
+
+
+
+
+
+
diff --git a/src/components/Empty.vue b/src/components/Empty.vue
new file mode 100644
index 0000000..fb0a22f
--- /dev/null
+++ b/src/components/Empty.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/NavBar.vue b/src/components/NavBar.vue
new file mode 100644
index 0000000..d51b619
--- /dev/null
+++ b/src/components/NavBar.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/NewsFeed.vue b/src/components/NewsFeed.vue
new file mode 100644
index 0000000..e6b2260
--- /dev/null
+++ b/src/components/NewsFeed.vue
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+ {{ item.title }}
+
+ {{ item.category }}
+ {{ item.time }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/OrderCard.vue b/src/components/OrderCard.vue
new file mode 100644
index 0000000..7da9bce
--- /dev/null
+++ b/src/components/OrderCard.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+ {{ order.productName || '--' }}
+ {{ order.spec }}
+ {{ order.createTime || '--' }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/RevenueCard.vue b/src/components/RevenueCard.vue
new file mode 100644
index 0000000..971c8f7
--- /dev/null
+++ b/src/components/RevenueCard.vue
@@ -0,0 +1,102 @@
+
+
+
+ {{ label }}
+
+ ¥{{ formatThousands(value) }}
+
+ {{ trendEmoji }}
+ {{ Math.abs(trend) }}%
+
+
+ {{ sub }}
+
+
+
+
+
+
diff --git a/src/composables/useNavigation.js b/src/composables/useNavigation.js
new file mode 100644
index 0000000..1c93663
--- /dev/null
+++ b/src/composables/useNavigation.js
@@ -0,0 +1,172 @@
+/**
+ * 全局子页面导航工具
+ * 封装 uni.navigateTo / navigateBack,提供统一的子页面跳转和数据传递
+ */
+import { useAppStore } from '@/store/modules/app'
+
+// 路由映射表:sub page name → actual route path
+const ROUTE_MAP = {
+ // 设备模块
+ 'device-detail': '/pages-sub/device/detail',
+ 'device-monitor': '/pages-sub/device/monitor',
+ 'monitor': '/pages-sub/device/monitor',
+ 'device-revenue': '/pages-sub/device/revenue-detail',
+ 'revenue-detail': '/pages-sub/device/revenue-detail',
+ 'device-log': '/pages-sub/device/log',
+ 'log': '/pages-sub/device/log',
+ 'add-own-device': '/pages-sub/device/add-own',
+ 'own-voucher': '/pages-sub/device/own-voucher',
+ 'own-orders': '/pages-sub/device/own-orders',
+ 'own-order-detail': '/pages-sub/device/own-order-detail',
+ 'deploy-guide': '/pages-sub/device/deploy-guide',
+ 'docking-detail': '/pages-sub/device/docking-detail',
+ 'credit-detail': '/pages-sub/device/credit-detail',
+ 'diagnosis': '/pages-sub/device/diagnosis',
+ 'nat-test': '/pages-sub/device/nat-test',
+ 'deploy-progress': '/pages-sub/device/deploy-progress',
+ 'device-info': '/pages-sub/device/device-info',
+
+ // 商城模块
+ 'product-detail': '/pages-sub/mall/product-detail',
+ 'coupon-detail': '/pages-sub/mall/coupon-detail',
+ 'my-coupons': '/pages-sub/mall/my-coupons',
+ 'mall-orders': '/pages-sub/mall/order-list',
+ 'pending-payment': '/pages-sub/mall/pending-payment',
+ 'pending-order-detail': '/pages-sub/mall/pending-order-detail',
+ 'welfare': '/pages-sub/mall/welfare',
+
+ // 收益模块
+ 'points-log': '/pages-sub/revenue/points-log',
+ 'withdraw': '/pages-sub/revenue/withdraw',
+ 'leaderboard': '/pages-sub/revenue/leaderboard',
+ 'revenue-overview': '/pages-sub/revenue/overview',
+ 'calculator': '/pages-sub/revenue/calculator',
+ 'online-reward': '/pages-sub/revenue/online-reward',
+
+ // 用户模块
+ 'user-level': '/pages-sub/user/level',
+ 'level-rules': '/pages-sub/user/level-rules',
+ 'contracts': '/pages-sub/user/contracts',
+ 'contract-preview': '/pages-sub/user/contract-preview',
+ 'tickets': '/pages-sub/user/tickets',
+ 'ticket-detail': '/pages-sub/user/ticket-detail',
+ 'ticket-create': '/pages-sub/user/ticket-create',
+ 'profile-edit': '/pages-sub/user/profile-edit',
+ 'partner-apply': '/pages-sub/user/partner-apply',
+ 'invitation': '/pages-sub/user/invitation',
+ 'user-poster': '/pages-sub/user/poster',
+ 'realname-auth': '/pages-sub/user/realname-auth',
+ 'settings': '/pages-sub/user/settings',
+ 'promotion-center': '/pages-sub/user/promotion-center',
+ 'help-center': '/pages-sub/user/help-center',
+ 'wallet': '/pages-sub/user/wallet',
+
+ // B端推广模块
+ 'b-sub-promo-home': '/pages-sub/b-promotion/promo-home',
+ 'b-sub-leader-promo': '/pages-sub/b-promotion/leader-promo',
+ 'b-team': '/pages/b-team/index',
+ 'b-sub-poster': '/pages-sub/b-promotion/poster',
+ 'b-sub-poster-leader': '/pages-sub/b-promotion/leader-poster',
+ 'b-level': '/pages-sub/b-promotion/b-level',
+ 'b-sub-level': '/pages-sub/b-promotion/b-level',
+
+ // 商务经理推广模块
+ 'b-sub-manager-promo': '/pages-sub/b-promotion/manager-promo',
+ 'b-sub-manager-team': '/pages/b-manager-team/index',
+ 'b-sub-manager-poster': '/pages-sub/b-promotion/manager-poster',
+ 'b-sub-manager-level': '/pages-sub/b-promotion/manager-level',
+ 'b-sub-leader-detail': '/pages-sub/b-promotion/leader-detail',
+
+ // 内容模块
+ 'notifications': '/pages-sub/content/notices',
+ 'news-list': '/pages-sub/content/news-list',
+ 'news-detail': '/pages-sub/content/news-detail',
+ 'notice-detail': '/pages-sub/content/notice-detail',
+ 'docs': '/pages-sub/content/docs',
+ 'doc-detail': '/pages-sub/content/doc-detail',
+ 'software': '/pages-sub/content/software'
+}
+
+/**
+ * 打开子页面
+ * @param {string} name - 子页面标识名,对应 ROUTE_MAP 中的 key
+ * @param {object} params - 传递给子页面的参数(会编码到URL query中)
+ */
+export function openSub(name, params = {}) {
+ const route = ROUTE_MAP[name]
+ if (!route) {
+ console.warn(`[useNavigation] Unknown subpage: ${name}`)
+ uni.showToast({ title: `页面 ${name} 未配置路由`, icon: 'none' })
+ return
+ }
+
+ // 构建URL参数
+ const queryParts = []
+ for (const [key, value] of Object.entries(params)) {
+ if (value !== undefined && value !== null) {
+ queryParts.push(`${key}=${encodeURIComponent(value)}`)
+ }
+ }
+
+ const url = queryParts.length > 0 ? `${route}?${queryParts.join('&')}` : route
+
+ uni.navigateTo({
+ url,
+ animationType: 'slide-in-right',
+ animationDuration: 300,
+ fail: (err) => {
+ console.error(`[useNavigation] Failed to open ${name}:`, err)
+ }
+ })
+}
+
+/**
+ * 关闭当前子页面,返回上一页
+ */
+export function closeSub() {
+ uni.navigateBack({ delta: 1 })
+}
+
+/**
+ * 切换到TabBar页面
+ */
+export function switchTab(tabName) {
+ const tabMap = {
+ home: '/pages/index/index',
+ devices: '/pages/devices/index',
+ revenue: '/pages/revenue/index',
+ mall: '/pages/mall/index',
+ profile: '/pages/profile/index',
+ 'b-home': '/pages/b-home/index',
+ 'b-team': '/pages/b-team/index',
+ 'b-revenue': '/pages/b-revenue/index',
+ 'b-profile': '/pages/b-profile/index',
+ 'b-super-home': '/pages/b-super-home/index',
+ 'b-super-team': '/pages/b-super-team/index',
+ 'b-super-revenue': '/pages/b-super-revenue/index',
+ 'b-super-profile': '/pages/b-super-profile/index',
+ 'b-manager-home': '/pages/b-manager-home/index',
+ 'b-manager-team': '/pages/b-manager-team/index',
+ 'b-manager-revenue': '/pages/b-manager-revenue/index',
+ 'b-manager-profile': '/pages/b-manager-profile/index'
+ }
+ const url = tabMap[tabName]
+ if (!url) return
+ // C端页面在 tabBar.list 中,用 switchTab
+ // B端页面不在 tabBar.list 中,需用 reLaunch
+ if (tabName.startsWith('b-')) {
+ uni.reLaunch({ url })
+ } else {
+ uni.switchTab({ url })
+ }
+}
+
+/**
+ * 从URL参数中解析子页面传入的数据
+ * 在子页面的 onLoad 中使用
+ */
+export function parseSubParams(options) {
+ return options || {}
+}
+
+export { ROUTE_MAP }
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000..9435ba8
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,16 @@
+import { createSSRApp } from 'vue'
+import App from './App.vue'
+import uviewPlus from 'uview-plus'
+import { createPinia } from 'pinia'
+
+export function createApp() {
+ const app = createSSRApp(App)
+ const pinia = createPinia()
+
+ app.use(uviewPlus)
+ app.use(pinia)
+
+ return {
+ app
+ }
+}
diff --git a/src/manifest.json b/src/manifest.json
new file mode 100644
index 0000000..622a70e
--- /dev/null
+++ b/src/manifest.json
@@ -0,0 +1,69 @@
+{
+ "name": "全犀云",
+ "appid": "__UNI__QUANXIYUN",
+ "description": "全犀云移动端APP",
+ "versionName": "1.0.0",
+ "versionCode": "100",
+ "transformPx": false,
+ "app-plus": {
+ "usingComponents": true,
+ "nvueStyleCompiler": "uni-app",
+ "compilerVersion": 3,
+ "splashscreen": {
+ "alwaysShowBeforeRender": true,
+ "waiting": true,
+ "autoclose": true,
+ "delay": 0
+ },
+ "modules": {},
+ "distribute": {
+ "android": {
+ "permissions": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "minSdkVersion": 21,
+ "targetSdkVersion": 33
+ },
+ "ios": {},
+ "sdkConfigs": {}
+ }
+ },
+ "quickapp": {},
+ "mp-weixin": {
+ "appid": "wx25de044b93c55fa2",
+ "setting": {
+ "urlCheck": false,
+ "es6": true,
+ "postcss": true,
+ "minified": true
+ },
+ "usingComponents": true
+ },
+ "h5": {
+ "title": "全犀云",
+ "router": {
+ "mode": "hash",
+ "base": "./"
+ },
+ "devServer": {
+ "port": 5174,
+ "proxy": {
+ "/api": {
+ "target": "http://127.0.0.1:8000",
+ "changeOrigin": true
+ },
+ "/storage": {
+ "target": "http://127.0.0.1:8000",
+ "changeOrigin": true
+ }
+ }
+ }
+ },
+ "vueVersion": "3"
+}
diff --git a/src/pages-sub/b-promotion/b-level.vue b/src/pages-sub/b-promotion/b-level.vue
new file mode 100644
index 0000000..b8bfd36
--- /dev/null
+++ b/src/pages-sub/b-promotion/b-level.vue
@@ -0,0 +1,347 @@
+
+
+
+
+
+
+
+
+
+
+ ★
+
+ {{ currentLevelName }}
+ {{ isMaxLevel ? `已解锁${currentLevelName}权益,已达到最高等级` : `已解锁${currentLevelName}权益,距离下一等级仅差 ${targetRemain.toLocaleString()} 成长值` }}
+
+
+
+
+ 当前等级权益
+
+
+
+ 💰
+
+ 直接推荐 C 端{{ currentR1 }}% 即时收益
+
+
+
+ 🕐
+
+ 直接推荐 C 端{{ currentR2 }}% 长期激励
+
+
+
+ 🖼️
+
+ 专属推广海报 + 链接
+
+
+
+ 💳
+
+ 基础兑换额度
+
+
+
+
+
+
+
+ {{ isMaxLevel ? '当前等级' : '下个等级' }}
+ {{ displayGrowthValue.toLocaleString() }} / {{ targetThreshold.toLocaleString() }}
+
+
+
+
+ 已达到当前角色的最高等级
+ 还差 {{ targetRemain.toLocaleString() }} 成长值 即可升级,解锁更高推广比例、专属活动优先权等权益
+
+
+
+
+ 所有等级权益
+
+
+ {{ item.badge }}
+
+ {{ item.name }}
+ {{ item.quota }}
+
+
+ ✓
+ ●
+ ○
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/b-promotion/leader-detail.vue b/src/pages-sub/b-promotion/leader-detail.vue
new file mode 100644
index 0000000..934ac23
--- /dev/null
+++ b/src/pages-sub/b-promotion/leader-detail.vue
@@ -0,0 +1,376 @@
+
+
+
+
+
+
+
+
+
+
+ {{ leaderData.name ? leaderData.name.charAt(0) : '团' }}
+
+ {{ leaderData.name || '团长' }}
+ {{ leaderData.isSuper ? '超级团长 · 可查看直接推荐C端 + 直接推荐团长贡献数据' : '普通团长 · 仅可查看直接推荐C端贡献数据' }}
+
+
+ 超级团长
+
+
+
+
+
+ {{ leaderData.cCount || 0 }}
+ 直接推荐C端
+
+
+ {{ leaderData.cDevices || 0 }}
+ 设备(台)
+
+
+ ¥{{ leaderData.cAmount || '0' }}
+ C端总额
+
+
+ {{ leaderData.lCount || 0 }}
+ 直接推荐团长
+
+
+
+
+
+
+ {{ leaderData.isSuper ? '直接推荐C端用户贡献(黄金池)' : '直接推荐C端用户贡献' }}
+ 共 {{ leaderData.cCount || 0 }} 人
+
+
+
+
+ {{ user.avatar }}
+
+ {{ user.name }}
+
+ 设备 {{ user.devices }} 台
+ ·
+ 消费 ¥{{ user.amount }}
+
+
+
+ {{ user.contribution }}
+ 贡献积分
+
+
+
+ 暂无直接推荐C端用户
+
+
+
+
+
+
+ 超级
+ 直接推荐团长贡献
+
+ 共 {{ leaderData.lCount || 0 }} 人
+
+
+
+
+ {{ l.avatar }}
+
+ {{ l.name }}下级团长
+
+ 设备 {{ l.devices }} 台
+ ·
+ 总金额 ¥{{ l.amount }}
+
+
+
+ {{ l.contribution }}
+ 贡献积分
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/b-promotion/leader-poster.vue b/src/pages-sub/b-promotion/leader-poster.vue
new file mode 100644
index 0000000..9568940
--- /dev/null
+++ b/src/pages-sub/b-promotion/leader-poster.vue
@@ -0,0 +1,228 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 邀请团长 加入平台
+
+ 每邀请一位团长获得该团长贡献收益的 5%
+
+ 团长·推广
+ 后台暂未上传海报图片
+
+
+
+ 保存到相册
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/b-promotion/leader-promo.vue b/src/pages-sub/b-promotion/leader-promo.vue
new file mode 100644
index 0000000..2348e8c
--- /dev/null
+++ b/src/pages-sub/b-promotion/leader-promo.vue
@@ -0,0 +1,356 @@
+
+
+
+
+
+
+
+
+
+
+
+ ♡
+
+ 推荐好友,获取直接推荐奖励
+
+
+
+
+ 我的推荐码
+ {{ inviteCode }}
+ 复制
+
+
+
+
+
+
+
+ {{ stats.monthInvites }}
+ 本月邀请
+
+
+ {{ stats.totalInvites }}
+ 累计邀请
+
+
+ {{ stats.totalEarnings }}
+ 累计积分
+
+
+
+
+
+
+
+ 🔗
+
+
+ 复制C端邀请链接
+ {{ inviteUrl }}
+
+
+
+
+
+ 🖼️
+
+
+ 生成C端分享海报
+ 一键生成专属分享海报
+
+
+
+
+
+
+
+ 邀请成果
+
+
+
+ 查看/生成专属海报
+
+
+
+
+
+ {{ item.avatar }}
+
+ {{ item.name }}
+ {{ item.meta }}
+
+ {{ item.value }}
+
+
+
+ 暂无推荐记录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/b-promotion/manager-level.vue b/src/pages-sub/b-promotion/manager-level.vue
new file mode 100644
index 0000000..af7300c
--- /dev/null
+++ b/src/pages-sub/b-promotion/manager-level.vue
@@ -0,0 +1,601 @@
+
+
+
+
+
+
+
+
+
+
+ 目前等级
+ 商务经理
+
+
+ ★
+ {{ currentLevelName }}
+
+
+
+
+
+
+ VIP1
+ VIP2
+ VIP3
+ VIP4
+ VIP5
+
+
+ 已累计 {{ currentGrowthValue.toLocaleString() }} / {{ targetThreshold.toLocaleString() }} 成长值
+
+
+
+
+
+
+
+
+ 分成
+ 团长直接推荐C端即时分成 {{ currentR1 }}%
+
+
+ 长期
+ 团长直接推荐C端长期分成 {{ currentR2 }}%
+
+
+ 下级
+ 超级团长的下级分成 {{ currentSuperRatio }}%
+
+
+ 特权
+ 专属商务经理素材中心 + 优先结算
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥
+
+
+ 累计成长值 ≥ {{ targetThreshold.toLocaleString() }}
+ 当前 {{ currentGrowthValue.toLocaleString() }} / {{ targetThreshold.toLocaleString() }}(已完成 {{ progressPct }}%)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ VIP1
+ 10,000
+
+
+
+ 2
+ VIP2
+ 30,000
+
+
+
+ 3
+ VIP3
+ 60,000
+
+
+
+ 4
+ VIP4
+ 100,000
+
+
+ 5
+ VIP5
+ 200,000
+
+
+
+
+
+
+
+
+ VIP1
+ 银牌经理(10,000 成长值)
+
+ 团长直接推荐C端即时分成 2% · 长期分成 1% · 基础素材中心
+
+
+
+ VIP2
+ 银牌经理+(30,000 成长值)
+
+ 团长直接推荐C端即时分成 3% · 长期分成 2% · 超级团长下级分成 0.5%
+
+
+
+ VIP3
+ 金牌经理(60,000 成长值)
+ 当前
+
+ 团长直接推荐C端即时分成 5% · 长期分成 3% · 超级团长下级分成 1% · 专属素材中心 + 优先结算
+
+
+
+ VIP4
+ 钻石经理(100,000 成长值)
+
+ 团长直接推荐C端即时分成 7% · 长期分成 4% · 超级团长下级分成 1.5% · 季度激励
+
+
+
+ VIP5
+ 王牌经理(200,000 成长值)
+
+ 团长直接推荐C端即时分成 10% · 长期分成 5% · 超级团长下级分成 2% · 年度奖励 + 战略合作权益
+
+
+
+
+
+ ⚠ 等级调整规则
+ 成长值基于最近30天的有效数据计算
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/b-promotion/manager-poster.vue b/src/pages-sub/b-promotion/manager-poster.vue
new file mode 100644
index 0000000..a86b8af
--- /dev/null
+++ b/src/pages-sub/b-promotion/manager-poster.vue
@@ -0,0 +1,241 @@
+
+
+
+
+
+
+
+
+
+
+
+ 邀请团长 加入我们
+ 每邀请一位团长获得该团长贡献收益的 3%
+ 商务经理·推广
+ 后台暂未上传海报图片
+
+
+
+ 保存到相册
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/b-promotion/manager-promo.vue b/src/pages-sub/b-promotion/manager-promo.vue
new file mode 100644
index 0000000..35a0089
--- /dev/null
+++ b/src/pages-sub/b-promotion/manager-promo.vue
@@ -0,0 +1,488 @@
+
+
+
+
+
+
+
+
+
+ 您是商务经理
+ VIP3 · 金牌经理
+ 仅可邀团长(不支持邀请 C 端用户)
+
+
+ 我的推荐码
+ {{ inviteCode }}
+ 复制
+
+
+
+
+
+
+ 📄
+ 分享激励政策
+
+
+
+ 1
+ 商务经理仅可邀请团长,注册成功即建立推荐关系
+
+
+ 2
+ 获得团长直接推荐C端的 即时奖励分成 + 长期奖励分成
+
+
+ 3
+ 若直接推荐团长后台开放了邀请团长权益(超级团长),您可获得其下级团长的奖励分成
+
+
+ 4
+ 推广关系长期有效,无时间限制
+
+
+ 5
+ 后台运营可调整奖励分成比例和邀请范围
+
+
+
+
+
+
+ 🔗
+ 邀请团长链接
+
+
+ {{ inviteUrl }}
+
+
+ 复制链接
+
+
+
+
+
+
+ 🖼️
+ 邀请团长海报
+
+
+
+ 邀请团长加入我们
+
+
+ 每邀请一位团长,获得该团长直接推荐C端收益的奖励分成
+ 查看/生成海报
+
+
+
+
+
+
+
+
+
+ {{ stats.leaderCount }}
+ 邀请团长
+
+
+ {{ stats.totalCommission }}
+ 累计奖励分成(积分)
+
+
+
+
+
+ {{ item.avatar }}
+
+ {{ item.name }}
+ 注册 {{ item.date }} · 已贡献 {{ item.contribution }}
+
+
+ 超级
+ 已激活
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/b-promotion/poster.vue b/src/pages-sub/b-promotion/poster.vue
new file mode 100644
index 0000000..ed49980
--- /dev/null
+++ b/src/pages-sub/b-promotion/poster.vue
@@ -0,0 +1,228 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 推荐好友加入 一起赚收益
+
+ 邀请C端用户获得好友年度收益的直接推荐奖励
+
+ 团长·推广
+ 后台暂未上传海报图片
+
+
+
+ 保存到相册
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/b-promotion/promo-home.vue b/src/pages-sub/b-promotion/promo-home.vue
new file mode 100644
index 0000000..52de385
--- /dev/null
+++ b/src/pages-sub/b-promotion/promo-home.vue
@@ -0,0 +1,611 @@
+
+
+
+
+
+
+
+
+
+
+ ♡
+
+ 推荐好友与团长,获取双重奖励
+
+ 推荐好友得3%直接推荐奖励 + 邀请团长得5%团队贡献收益
+
+
+
+
+
+ C端推荐码
+ {{ cCode }}
+ 复制
+
+
+ 团长推荐码
+ {{ ldrCode }}
+ 复制
+
+
+
+
+
+
+
+ {{ stats.monthInvites }}
+ 本月邀请
+
+
+ {{ stats.totalInvites }}
+ 累计邀请
+
+
+ {{ stats.totalEarnings }}
+ 累计积分
+
+
+
+
+
+
+ 邀请C端
+ 邀请团长
+
+
+
+
+ 🔗
+
+
+ 复制C端邀请链接
+ {{ cUrl }}
+
+
+
+
+
+ 👥
+
+
+ 复制团长邀请链接
+ {{ ldrUrl }}
+
+
+
+
+
+ 🖼️
+
+
+ 生成C端分享海报
+ 邀请C端用户的海报
+
+
+
+
+
+
+ 🖼️
+
+
+ 生成团长分享海报
+ 邀请团长的海报
+
+
+
+
+
+
+
+ 邀请成果
+
+
+
+
+
+
+
+ {{ item.avatar }}
+
+ {{ item.name }}
+ {{ item.meta }}
+
+ {{ item.value }}
+
+
+
+ 加载中...
+ 暂无推荐记录
+
+ {{ currentRecordState.loading ? '加载中...' : '加载更多' }}
+
+ 已加载全部
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/content/doc-detail.vue b/src/pages-sub/content/doc-detail.vue
new file mode 100644
index 0000000..30420e9
--- /dev/null
+++ b/src/pages-sub/content/doc-detail.vue
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+ {{ currentDoc.title }}文档列表:
+
+
+
+
+
+
+
+
+
+
+ 暂无文档内容
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/content/docs.vue b/src/pages-sub/content/docs.vue
new file mode 100644
index 0000000..9ec4126
--- /dev/null
+++ b/src/pages-sub/content/docs.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ doc.icon }}
+
+
+ {{ doc.title }}
+ {{ doc.desc }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/content/news-detail.vue b/src/pages-sub/content/news-detail.vue
new file mode 100644
index 0000000..07de6f7
--- /dev/null
+++ b/src/pages-sub/content/news-detail.vue
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+ {{ article.title }}
+
+
+ {{ article.category }}
+ {{ article.date }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/content/news-list.vue b/src/pages-sub/content/news-list.vue
new file mode 100644
index 0000000..3d17b87
--- /dev/null
+++ b/src/pages-sub/content/news-list.vue
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+ {{ tab }}
+
+
+
+
+
+
+
+
+ {{ news.emoji || '📰' }}
+
+
+ {{ news.title }}
+ {{ news.desc }}
+
+ {{ news.category }}
+ {{ news.date }}
+
+
+
+
+
+ 暂无资讯
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/content/notice-detail.vue b/src/pages-sub/content/notice-detail.vue
new file mode 100644
index 0000000..41b2058
--- /dev/null
+++ b/src/pages-sub/content/notice-detail.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+ {{ notice.title }}
+ {{ notice.subtitle }}
+
+ 系统通知
+ {{ notice.date }}
+
+
+
+
+
+ 📋
+ 暂无正文内容
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/content/notices.vue b/src/pages-sub/content/notices.vue
new file mode 100644
index 0000000..4dbd51a
--- /dev/null
+++ b/src/pages-sub/content/notices.vue
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+
+
+
+ {{ tab.name }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ n.type }}
+ {{ n.time }}
+
+ {{ n.title }}
+ {{ n.desc }}
+
+
+
+
+ 暂无消息
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/content/software.vue b/src/pages-sub/content/software.vue
new file mode 100644
index 0000000..53f8ef2
--- /dev/null
+++ b/src/pages-sub/content/software.vue
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
+ 客户端下载
+
+
+
+
+ {{ item.platform === 'windows' ? '🪟' : '🐧' }}
+
+
+ {{ item.name }}
+ v{{ item.version }}
+ {{ formatThousands(item.download_count) }} 次下载
+
+
+ 下载
+
+
+
+ 暂无可用客户端
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+ 更新日志
+
+
+
+ {{ log.changelog }}
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/add-own.vue b/src/pages-sub/device/add-own.vue
new file mode 100644
index 0000000..bc3c78a
--- /dev/null
+++ b/src/pages-sub/device/add-own.vue
@@ -0,0 +1,526 @@
+
+
+
+
+
+
+
+
+ 🖥️
+ 自有设备部署
+ 支持用户自主部署服务器、安装软件,通过设备ID和特征码绑定接入平台,独立运行、独立统计收益
+
+
+
+
+
+ 1
+ 填写设备信息
+
+
+
+
+ 设备名称 *
+
+ 规则: 2‑32字符,支持中文、字母、数字、‑_,禁止空格及其它特殊符号
+
+
+
+
+ 设备ID / 型号 *
+
+
+ 📷
+
+ 支持手动输入或拍照识别设备铭牌(设备ID / SN / 型号等)
+
+
+
+
+ 对接方式
+ 对接方式说明(图文/视频)由后台运营编辑下发,包括方案介绍、适用场景、操作步骤等
+ 查看对接机制详情 ›
+
+
+
+
+ 特征码
+
+
+ 扫码
+
+
+ 1. 在设备上安装全犀云Agent
+ 2. Agent自动采集硬件指纹生成特征码
+ 3. 复制特征码到此处录入并验证
+
+ 特征码与设备硬件唯一绑定(CPU+MAC+磁盘序列号),换机即失效
+
+
+
+
+ 设备类型 *
+
+ {{ selectedTypeFee.name }}(¥{{ formatThousands(selectedTypeFee.fee) }})
+ {{ showTypePicker ? '▲' : '▼' }}
+
+
+
+
+
+ {{ t.name }}
+ ¥{{ formatThousands(t.fee) }}
+
+
+ 设备类型由后台统一配置,工程师按您设备实际型号匹配最优方案
+
+
+
+
+ 部署位置
+
+
+
+
+
+
+
+ 2
+ 部署引导
+
+
+ 1
+
+ 下载部署脚本
+ SSH登录设备,执行安装命令
+
+ curl -fsSL https://quanxi.cloud/install | bash
+
+
+
+
+ 2
+
+ 启动Agent服务
+ 安装完成后Agent自动启动,并生成特征码
+
+
+
+ 3
+
+ 验证绑定
+ 将特征码填入 Step 1,点击提交完成绑定
+
+
+
+
+
+
+
+ 3
+ 接口费(已选设备类型)
+
+
+
+
+
+ {{ selectedTypeFee.name }}
+ {{ selectedTypeFee.desc }}
+
+ ¥{{ formatThousands(selectedTypeFee.fee) }}
+
+
+
+
+ 应付接口费
+ ¥{{ formatThousands(selectedTypeFee.fee) }}
+
+ 订单生成后请按公户信息打款并上传回执凭证,平台审核完成后开通部署权限;接口费按设备型号一次性收取,不含硬件费用
+
+
+
+
+ 自有设备权益
+
+ {{ b.label }}
+ {{ b.value }}
+
+
+
+
+
+ 生成订单并公户打款
+ 提交后生成订单,需通过公户打款完成支付
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/credit-detail.vue b/src/pages-sub/device/credit-detail.vue
new file mode 100644
index 0000000..344fc4a
--- /dev/null
+++ b/src/pages-sub/device/credit-detail.vue
@@ -0,0 +1,185 @@
+
+
+
+
+
+
+ 📡 单设备 · 由中控平台计算并推送
+ 📊 全部设备信用分均值 · 点击设备详情查看单设备明细
+
+
+
+
+
+ 当前信用分
+
+
+
+
+ {{ creditScore }}
+ / 100
+
+
+
+ {{ scoreLabel }}
+
+
+
+
+
+ 信用分构成(五维度)
+
+ {{ d.name }} (权重{{ d.weight }}%)
+ {{ d.raw }} → {{ d.score }}分
+
+
+
+ 信用分构成(五维度)
+
+ 查看单设备信用分明细请从设备详情页进入
+
+
+
+
+
+ 信用分等级说明
+
+ {{ g.label }} ({{ g.range }})
+ {{ g.bonus }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/deploy-guide.vue b/src/pages-sub/device/deploy-guide.vue
new file mode 100644
index 0000000..c9f0cde
--- /dev/null
+++ b/src/pages-sub/device/deploy-guide.vue
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+ 1
+ 2
+ 3
+ 4
+
+
+
+
+ 🖥️
+ {{ deviceName }}ID: {{ deviceIdDisplay }} · 待部署
+ 部署中
+
+
+
+
+ ✓步骤1 · 特征码绑定方案B
+
+ ✓{{ c.label }}{{ c.status }}
+
+ 了解双轨对接策略 ›
+
+
+
+
+ ✓步骤2 · 网络环境检测
+
+
+ {{ c.warn ? '!' : '✓' }}{{ c.label }}{{ c.status }}
+
+
+ 环境检测全部通过,可以继续部署
+
+
+
+
+ 3步骤3 · 安装全犀云Agent
+ Linux / macOS 一键安装
+ curl -fsSL https://quanxi.cloud/install | bash复制
+ Windows 下载安装
+ QuanXiAgent_Setup_v2.1.0.exe · 下载
+
+
+
+
+ 4步骤4 · 验证绑定 & 启动收益
+
+ ✓{{ c }}
+
+ ¥106.60/天自有设备 1.1x 加成 · 月产出约 ¥3,198
+ 完成部署,上线收益
+
+
+
+
+ 遇到问题?
+ 技术支持:400-888-0000
+ 在线客服:立即咨询
+ 部署交流群:QQ群 123456789
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/deploy-progress.vue b/src/pages-sub/device/deploy-progress.vue
new file mode 100644
index 0000000..c2ea1c0
--- /dev/null
+++ b/src/pages-sub/device/deploy-progress.vue
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+ 运
+
+
+ 部署进行中
+ 已完成 5/7 个阶段
+
+ 72%
+
+
+
+
+
+
+
+
+
+ 部署阶段
+
+
+
+ ✓
+ {{ i + 1 }}
+
+
+
+
+ {{ phase.desc }}
+ {{ phase.time }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/detail.vue b/src/pages-sub/device/detail.vue
new file mode 100644
index 0000000..7b2b4c3
--- /dev/null
+++ b/src/pages-sub/device/detail.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+ {{ device.model }} · {{ device.deviceId }}
+
+
+
+
+ {{ device.bandwidth }}
+ Mbps
+ 当前带宽
+
+
+ ¥{{ device.todayRevenue }}
+ 今日产出
+
+
+
+ ¥{{ device.totalRevenue }}
+ 累计积分
+
+
+
+
+
+
+
+
+
+ 积分明细
+
+
+
+
+ 运行记录
+
+
+
+ 📊
+ 实时监控
+
+
+
+
+ 诊断报告
+
+
+
+
+ NAT检测
+
+
+
+
+ 部署进度
+
+
+
+
+ 设备信息
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/device-info.vue b/src/pages-sub/device/device-info.vue
new file mode 100644
index 0000000..41cc2d7
--- /dev/null
+++ b/src/pages-sub/device/device-info.vue
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+ 基本信息
+ 设备ID{{ info.deviceId }}
+ 型号{{ info.model }}
+ 来源{{ info.source }}
+ 激活时间{{ info.createdAt }}
+ 最后遥测{{ info.lastUpdate }}
+
+
+
+ 运行指标
+ CPU使用率{{ info.cpu }}%
+ 内存使用率{{ info.memory }}%
+ 磁盘类型{{ info.ssd || '--' }}
+ 磁盘使用率{{ info.disk }}%
+ 设备温度{{ info.temperature }}°C
+ 网络延迟{{ info.latency }}ms
+ 丢包率{{ info.packetLoss }}%
+ 在线时长{{ info.onlineHours }}h
+ 当前带宽{{ info.bandwidth }}Mbps
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/diagnosis.vue b/src/pages-sub/device/diagnosis.vue
new file mode 100644
index 0000000..4028a2d
--- /dev/null
+++ b/src/pages-sub/device/diagnosis.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+
+ 综合健康评分
+ {{ data.score }}
+ {{ data.level }}
+
+
+
+
+
+ 8维度诊断指标
+
+ {{ dim.name }}
+ {{ dim.value }} → {{ dim.level }}
+
+
+
+
+
+ 优化建议
+
+ {{ s.title }}
+ {{ s.body }}
+
+
+
+
+
+ 历史诊断记录
+
+
+
+ {{ h.date }} 诊断报告
+ 综合评分 {{ h.score }} · {{ h.level }}
+
+ {{ h.level }}
+
+
+ 暂无历史诊断记录
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/docking-detail.vue b/src/pages-sub/device/docking-detail.vue
new file mode 100644
index 0000000..f51e7b4
--- /dev/null
+++ b/src/pages-sub/device/docking-detail.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+ {{ verified ? '✓' : '!' }}
+
+ {{ verified ? '已验证(方案B)' : '待验证' }}
+ Agent本地生成特征码,基于硬件指纹绑定
+
+
+
+
+
+ 硬件指纹信息
+
+
+ 设备名称
+ {{ deviceName }}
+
+
+ 对接方式
+ {{ dockMethod }}
+
+
+ 特征码
+ {{ featureCode }}
+
+
+ 生成方式
+ 本地Agent生成
+
+
+ 绑定时间
+ {{ bindTime }}
+
+
+ 验证状态
+ {{ verified ? '已验证通过' : '未验证' }}
+
+
+
+
+
+
+ 双轨策略
+
+
+
+ 当前使用
+
+
+
+ {{ i + 1 }}
+ {{ s }}
+
+
+
+
+
+
+ 二期上线
+
+
+
+ {{ i + 1 }}
+ {{ s }}
+
+
+
+
+
+
+
+ 对接验证流程
+
+
+ {{ f.step }}
+
+ {{ f.title }}
+ {{ f.desc }}
+
+
+
+
+
+
+
+ 方案对比
+
+
+
+ {{ row.item }}
+ {{ row.planB }}
+ {{ row.planA }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/log.vue b/src/pages-sub/device/log.vue
new file mode 100644
index 0000000..bfa30ac
--- /dev/null
+++ b/src/pages-sub/device/log.vue
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+ 事件时间线
+
+
+ 加载中...
+
+
+
+ 暂无运行记录
+
+
+
+
+
+
+
+
+
+ {{ event.time }}
+ {{ event.content }}
+ {{ event.detail }}
+
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/monitor.vue b/src/pages-sub/device/monitor.vue
new file mode 100644
index 0000000..ac2f569
--- /dev/null
+++ b/src/pages-sub/device/monitor.vue
@@ -0,0 +1,497 @@
+
+
+
+
+
+
+
+
+ 设备状态
+
+
+ {{ data.statusText }}
+
+
+ 在线 {{ data.onlineDays }}天
+ 高峰在线率 98.5%
+ 日均在线 {{ dailyAvg }}h
+
+
+
+
+
+
+ {{ m.label }}
+
+ {{ m.value }}
+ {{ m.unit }}
+
+ {{ m.note }}
+
+
+
+
+
+
+
+
+
+ {{ l }}
+
+
+ {{ bwTooltip.time }}
+ ↑ {{ bwTooltip.up }}
+ ↓ {{ bwTooltip.down }}
+
+
+
+
+
+
+
+
+
+
+ {{ l }}
+
+
+ {{ revTooltip.time }}
+ ¥{{ revTooltip.value }}
+
+
+
+
+
+
+ 网络质量
+
+ {{ r.label }}
+ {{ r.value }}
+
+
+
+
+
+ 硬件状态
+
+ {{ r.label }}
+ {{ r.value }}
+
+
+
+
+
+ 在线统计
+
+ {{ r.label }}
+ {{ r.value }}
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/nat-test.vue b/src/pages-sub/device/nat-test.vue
new file mode 100644
index 0000000..44936e5
--- /dev/null
+++ b/src/pages-sub/device/nat-test.vue
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+ 当前NAT类型
+ {{ data.nat_type.cn }}({{ data.nat_type.en }})
+ 最优秀的NAT类型 · 对所有CDN业务无限制
+ NAT类型较差,建议优化网络以提升收益
+
+
+
+
+ {{ t.cn }}{{ t.cn === data.nat_type.cn ? ' ●' : '' }}
+
+
+
+
+
+
+ NAT类型说明
+
+ {{ t.cn }}
+ {{ t.level }} · 收益加成{{ t.multiplier }}x
+
+
+
+
+
+ NAT优化指南
+
+ ① PPPoE拨号(推荐)
+ 将设备直接通过PPPoE拨号获取公网IP,可达到公网型NAT,最大化收益。联系运营商申请公网IP。
+
+
+ ② DMZ设置
+ 在路由器管理页面将设备内网IP设置为DMZ主机,开放所有端口。适用于无公网IP场景。
+
+
+ ③ UPNP设置
+ 在路由器管理页面开启UPNP功能,设备自动映射端口。适用于大部分家庭和小型企业网络。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/own-order-detail.vue b/src/pages-sub/device/own-order-detail.vue
new file mode 100644
index 0000000..b0d4b88
--- /dev/null
+++ b/src/pages-sub/device/own-order-detail.vue
@@ -0,0 +1,289 @@
+
+
+
+
+
+
+
+
+
+ {{ order.orderId }}
+ {{ statusCfg.label }}
+
+
+ {{ order.deviceName }}
+ {{ order.deviceModel }}
+
+
+ 接口费用
+ ¥{{ formatThousands(order.fee) }}
+
+
+ {{ order.createTime }} 创建
+ {{ order.deviceType }}
+
+
+
+
+
+ 订单进度
+
+
+
+ ✓
+ {{ i + 1 }}
+
+
+
+ {{ step.title }}
+ {{ step.desc }}
+ {{ step.time }}
+
+
+
+
+
+
+
+ 设备信息
+
+
+ {{ item.label }}
+ {{ item.value }}
+
+
+
+
+
+
+ 立即支付
+ 取消订单
+
+
+ 查看部署指南
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/own-orders.vue b/src/pages-sub/device/own-orders.vue
new file mode 100644
index 0000000..674b598
--- /dev/null
+++ b/src/pages-sub/device/own-orders.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+
+ {{ tab.label }}
+
+
+
+
+
+
+ 📦
+ 暂无订单
+
+
+
+
+
+
+
+ 设备名称
+ {{ order.deviceName }}
+
+
+ 支付方式
+ {{ order.payMethod }}
+
+
+ 金额
+ ¥{{ formatThousands(order.amount) }}
+
+
+ 创建时间
+ {{ order.createTime }}
+
+
+
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/own-voucher.vue b/src/pages-sub/device/own-voucher.vue
new file mode 100644
index 0000000..5996e6d
--- /dev/null
+++ b/src/pages-sub/device/own-voucher.vue
@@ -0,0 +1,396 @@
+
+
+
+
+
+
+
+
+
+ 订单编号
+
+ {{ order.orderNo }}
+ 复制
+
+
+
+
+ 接口费用
+ ¥{{ formatThousands(order.amount) }}
+
+
+ 支付期限
+ 请在 2 小时内完成转账
+
+
+ 订单状态
+ {{ statusCfg.label }}
+
+
+
+
+
+ 对公收款账户
+
+
+ 户名
+ {{ bankInfo.account_name || '--' }}
+
+
+ 开户行
+ {{ bankInfo.bank_name || '--' }}
+
+
+ 账号
+ {{ bankInfo.bank_card || '--' }}
+
+
+ 备注
+ {{ order.orderNo }}
+
+
+
+
+
+
+ 上传支付凭证
+ 支持 JPG / JPEG / PNG 格式,单文件不超过10MB
+
+
+
+
+ +
+ 点击上传凭证文件
+
+
+
+
+ 📄
+
+ {{ uploadedFile.name }}
+ {{ uploadedFile.time || '' }}
+
+ 删除
+
+
+
+ 我已完成打款并上传凭证
+
+
+
+
+
+ 订单进度
+
+
+
+
+
+ {{ step.title }}
+ {{ step.time }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/device/revenue-detail.vue b/src/pages-sub/device/revenue-detail.vue
new file mode 100644
index 0000000..c8b5388
--- /dev/null
+++ b/src/pages-sub/device/revenue-detail.vue
@@ -0,0 +1,203 @@
+
+
+
+
+
+
+
+
+
+ ¥{{ todayRevenue }}
+ 今日产出
+
+
+
+ ¥{{ monthRevenue }}
+ 本月产出
+
+
+
+ ¥{{ totalRevenue }}
+ 累计积分
+
+
+
+
+
+ 积分明细
+
+
+
+ {{ row.date }}
+ {{ row.hours }}h
+ {{ row.bw }}M
+ {{ row.timeFactor }}
+ {{ row.qualityFactor }}
+ ¥{{ row.revenue }}
+
+
+ 暂无收益记录
+
+
+
+
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+ 共 {{ rows.length }} 天收益记录
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/mall/coupon-detail.vue b/src/pages-sub/mall/coupon-detail.vue
new file mode 100644
index 0000000..aaed4fd
--- /dev/null
+++ b/src/pages-sub/mall/coupon-detail.vue
@@ -0,0 +1,282 @@
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+ ⚡ 收益加成券
+ {{ coupon.multiplier }}x
+ 设备收益{{ coupon.multiplier }}倍加成 · 限时生效
+
+ {{ coupon.days }}天有效期
+ {{ coupon.days * 24 }}小时加成
+ +{{ ((coupon.multiplierVal - 1) * 100).toFixed(0) }}%收益提升
+
+
+
+
+
+
+ 📊{{ coupon.multiplier }}x加成倍数
+ 📅{{ coupon.days }}天有效期
+ ✅{{ coupon.scope }}适用范围
+ 🔒{{ coupon.limit }}限购规则
+
+
+
+
+
+ ⚡ 加成效果说明
+
+
+ 无加成券¥{{ formatThousands(coupon.baselineM) }}/月
+ →
+ 含加成券¥{{ formatThousands(coupon.boostedM) }}/月
+
+ 以 QH-500 Edge 为例,额外多赚 ¥{{ formatThousands(coupon.benefit) }},设备成本缩短 {{ coupon.paybackShort }} 天
+
+
+
+
+
+ 🖥️ 绑定设备
+ 购买后选择1台设备绑定,加成期间该设备收益按{{ coupon.multiplier }}x计算
+
+
+
+ {{ d.name }}{{ d.model }}
+ ¥{{ d.daily }} → ¥{{ d.dailyBoosted }}/天
+
+
+
+
+
+
+ 使用规则
+ · 加成券购买后需在7天内绑定设备,过期失效
+ · 每台设备同时仅可生效一张加成券
+ · 有效期从绑定当日开始计算
+ · 加成期设备下线,加成期顺延
+ · 收益加成在每日0:30结算时生效
+ · 绑定后不可更换设备,解绑后券失效
+
+
+
+
+ {{ coupon.priceText }}
+ {{ coupon.oldPrice }}
+
+
+
+ {{ m.label }}
+
+
+
+
+ 现金部分 ¥{{ coupon.cashPart }} + 积分部分 {{ coupon.pointsPart }}积分
+
+
+
+
+ {{ coupon.points_exchange || 0 }}积分兑换
+ ¥{{ coupon.price || 0 }} 立即购买
+ ¥{{ coupon.price || 0 }} + {{ coupon.points_exchange || 0 }}积分 立即兑换
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/mall/my-coupons.vue b/src/pages-sub/mall/my-coupons.vue
new file mode 100644
index 0000000..4e8bce5
--- /dev/null
+++ b/src/pages-sub/mall/my-coupons.vue
@@ -0,0 +1,222 @@
+
+
+
+
+
+
+
+
+ 可用加成券
+ {{ summary.unused }} 张
+
+ {{ summary.unused }}未使用
+ {{ summary.using }}使用中
+ {{ summary.expired }}已过期
+
+
+
+
+
+
+ {{ t.label }}{{ t.count }}
+
+
+
+
+
+
+
+ {{ c.multiplier }}x
+
+ 收益加成券 {{ c.multiplier }}x
+ {{ c.desc }}
+
+ 未使用
+
+
+
+ {{ c.multiplier }}x加成倍数
+ {{ c.days }}天有效期
+ {{ c.scope }}适用范围
+
+ {{ c.boughtAt }} · 剩余 {{ c.remainTime }}
+
+ 使用规则
+ 去使用
+
+
+
+
+
+
+
+
+
+ {{ c.multiplier }}x
+
+ 收益加成券 {{ c.multiplier }}x
+ 绑定: {{ c.deviceName }}
+
+ 使用中
+
+
+ 🖥️ {{ c.deviceName }} · {{ c.deviceModel }}
+ 日产出 ¥{{ c.dailyEarn }}
+
+ 已使用 {{ c.usedDays }}天剩余 {{ c.remainDays }}天
+
+ 积分明细
+ 解绑设备
+
+
+
+
+
+
+
+
+
+ {{ c.multiplier }}x
+
+ 收益加成券 {{ c.multiplier }}x
+ 已过期 {{ c.expiredAt }}
+
+ 已过期
+
+
+ 曾绑定: {{ c.boundDevice }} · 产生收益 ¥{{ formatThousands(c.generatedRev) }}
+
+
+ 仅显示最近3条过期记录 · 查看全部
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/mall/order-list.vue b/src/pages-sub/mall/order-list.vue
new file mode 100644
index 0000000..05c2e72
--- /dev/null
+++ b/src/pages-sub/mall/order-list.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+ {{ t.label }}
+
+
+
+ {{ o.name }}
+ {{ o.status }}
+
+ 订单号: {{ o.order_no }}
+ ¥{{ formatThousands(o.amount) }}
+ {{ o.pay_method }}
+
+ 暂无订单
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/mall/pending-order-detail.vue b/src/pages-sub/mall/pending-order-detail.vue
new file mode 100644
index 0000000..e16669c
--- /dev/null
+++ b/src/pages-sub/mall/pending-order-detail.vue
@@ -0,0 +1,506 @@
+
+
+
+
+
+
+
+
+
+ {{ toastMsg }}
+
+
+
+
+
+ {{ toastMsg }}
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+
+ {{ statusLabel }}
+
+
+ 请在 2 小时内完成支付
+ {{ countdownText }}
+
+
+
+
+
+ 订单信息
+
+
+ 订单编号
+ {{ orderNo }}
+
+
+ 创建时间
+ {{ createTime }}
+
+
+ 商品名称
+ {{ productName }}
+
+
+ 应付金额
+ {{ amount }}
+
+
+
+
+
+
+ 银行转账信息
+
+
+ 户名
+ {{ bankInfo.account_name }}
+
+
+
+
+ 账号
+ {{ bankInfo.bank_card }}
+
+
+
+
+ 开户行
+ {{ bankInfo.bank_name }}
+
+
+
+
+ 备注
+
+
+
+
+
+
+
+
+
+ 打款回执
+
+ 支持 JPG / JPEG / PNG 格式,大小不超过10MB
+
+
+
+
+ 点击上传回执
+
+
+ 已选择回执,重新选择
+
+
+
+
+ 回执已上传,可点击查看
+
+
+
+ 未上传回执
+
+
+
+
+ 订单进度
+
+
+
+
+
+
+
+ {{ step.title }}
+ {{ step.desc }}
+
+
+
+
+
+
+
+
+
+
+
+ 返回
+
+
+ {{ submitting ? '上传中...' : '上传打款回执' }}
+
+
+ 查看我的订单
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/mall/pending-payment.vue b/src/pages-sub/mall/pending-payment.vue
new file mode 100644
index 0000000..5a298b4
--- /dev/null
+++ b/src/pages-sub/mall/pending-payment.vue
@@ -0,0 +1,270 @@
+
+
+
+
+
+
+
+
+
+ 🖥️
+
+
+ {{ productName }}
+ {{ productSpec }}
+ {{ totalAmount }}
+
+
+
+
+
+ 设备绑定
+
+
+ 绑定设备
+ {{ deviceName }}
+
+
+ 设备编号
+ {{ deviceId }}
+
+
+
+
+
+
+ 费用明细
+
+ {{ item.label }}
+ {{ item.value }}
+
+
+
+ 应付总额
+ {{ totalAmount }}
+
+
+
+
+
+ 支付方式
+
+
+
+ {{ method.emoji }}
+ {{ method.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 应付
+ {{ totalAmount }}
+
+
+ 确认支付
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/mall/product-detail.vue b/src/pages-sub/mall/product-detail.vue
new file mode 100644
index 0000000..4c13bf8
--- /dev/null
+++ b/src/pages-sub/mall/product-detail.vue
@@ -0,0 +1,269 @@
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+ {{ product.emoji }}
+ {{ product.topBadge }}
+ {{ product.stockBadge }}
+
+
+
+
+
+ {{ t.text }}
+
+ {{ product.name }}
+ {{ product.desc }}
+
+
+
+ ¥{{ formatThousands(product.price) }}
+ 可用 {{ formatThousands(product.pointsUse) }} 积分抵扣
+
+
+
+
+ ¥{{ formatThousands(product.hwPrice) }}硬件费
+ +
+ ¥{{ formatThousands(product.svcPrice) }}服务费
+ =
+ ¥{{ formatThousands(product.price) }}总价
+
+
+
+
+ 📌 服务费说明
+ 前:收益的90%归您,10%平台服务费
+ 后:收益的40%归您,60%平台服务费
+
+
+
+
+
+ 技术参数
+
+ {{ s.label }}
+ {{ s.value }}
+
+
+
+
+
+ 收益预估
+
+
+ ¥{{ product.dailyEarn }}
+ /天
+ 日产出
+
+
+ ¥{{ formatThousands(product.monthlyEarn) }}
+ /月
+ 月产出
+
+
+ {{ product.paybackDays }}
+ 天
+ 设备成本收益周期
+
+
+ 使用积分计算器详细测算 ›
+
+
+
+
+ 购买流程
+
+ 1下单支付
+ 2签署合同
+ 3运输安装
+ 4上线收益
+
+
+
+
+
+
+
+
+ 收益计算
+ 立即购买
+
+
+
+
+
+
+
diff --git a/src/pages-sub/mall/welfare.vue b/src/pages-sub/mall/welfare.vue
new file mode 100644
index 0000000..f2d6f48
--- /dev/null
+++ b/src/pages-sub/mall/welfare.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+ 搜索福利商品
+
+
+
+
+ {{ cat.emoji }}
+ {{ cat.name }}
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+ {{ item.points }}积分
+ ¥{{ item.price }}
+
+
+
+
+
+
+
+ 为你推荐
+
+
+
+ {{ item.name }}
+ {{ item.points }}积分
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/revenue/calculator.vue b/src/pages-sub/revenue/calculator.vue
new file mode 100644
index 0000000..b7519e7
--- /dev/null
+++ b/src/pages-sub/revenue/calculator.vue
@@ -0,0 +1,658 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ model.name }}
+ {{ model.multiplier }}x 收益系数
+ ¥{{ formatThousands(model.price) }}
+
+
+
+
+
+
+
+
+
+
+
+ 100Mbps
+ 5000Mbps
+
+
+
+
+
+
+
+
+
+ {{ svc.name }}
+ {{ svc.multiplier }}x
+
+
+
+
+
+
+
+
+
+ 省份
+
+
+ {{ selectedProvince || '请选择省份' }}
+
+ ↓
+
+
+
+ 城市
+
+
+ {{ selectedCity || '请选择城市' }}
+
+ ↓
+
+
+
+ 区域系数
+ {{ regionCoefficient.toFixed(2) }}x
+
+
+
+
+
+
+ 费用参数
+
+
+ {{ cost.label }}
+ ¥{{ formatMoney(cost.value) }}
+
+
+ 总计
+ ¥{{ formatCalculatedMoney(totalCost) }}
+
+
+
+
+
+
+
+
+
+ ¥{{ formatCalculatedMoney(dailyEarning) }}
+ /天
+ 日产出参考
+
+
+ ¥{{ formatCalculatedMoney(monthlyEarning) }}
+ /月
+ 月产出参考
+
+
+ ¥{{ formatCalculatedMoney(annualEarning) }}
+ /年
+ 年产出参考
+
+
+ {{ roi }}%
+ 参考产出率
+
+
+
+
+
+
+ 设备成本周期分析
+
+
+ 含残值
+ {{ residualPaybackDays }}天
+ 设备残值按30%计算
+
+
+ 不含残值
+ {{ noResidualPaybackDays }}天
+ 纯收益
+
+
+
+ 含残值可缩短 {{ paybackDiff }}天 设备成本
+
+
+
+
+
+ 加成券效果对比
+
+
+
+ 无券
+ ¥{{ formatCalculatedMoney(monthlyEarning) }}
+
+ VS
+
+ 1.5x加成
+ ¥{{ formatCalculatedMoney(monthlyWithCoupon) }}
+
+
+ 使用加成券每月多收益 ¥{{ formatCalculatedMoney(couponBenefit) }}
+
+
+
+
+
+ 12个月产出趋势
+
+
+
+
+
+ {{ m }}
+
+
+
+
+
+
+
+ 第一年产出明细
+
+
+ {{ item.label }}
+ ¥{{ formatCalculatedMoney(item.value) }}
+
+
+
+
+
+
+
+
+ 前往商城选购
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/revenue/leaderboard.vue b/src/pages-sub/revenue/leaderboard.vue
new file mode 100644
index 0000000..7221e46
--- /dev/null
+++ b/src/pages-sub/revenue/leaderboard.vue
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+ 用户榜
+ 设备榜
+
+
+
+
+
+ {{ t.label }}
+
+
+
+
+
+
+ {{ i + 1 }}
+
+ {{ item.name }}
+
+ ¥{{ formatThousands(item.revenue) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/revenue/online-reward.vue b/src/pages-sub/revenue/online-reward.vue
new file mode 100644
index 0000000..76bf442
--- /dev/null
+++ b/src/pages-sub/revenue/online-reward.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ actualHours }}h
+ 目标 {{ targetHours }}h
+
+
+
+ 还差 {{ diffHours }}h 达标,加油!
+
+
+
+ 已超额完成 {{ Math.abs(diffHours) }}h
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ rule.condition }}
+ {{ rule.reward }}
+
+ 已达成
+
+
+
+
+
+
+ 历史记录
+
+
+
+ {{ record.week }}
+
+
+ 在线 {{ record.hours }}h
+
+
+
+
+
+ {{ record.reward > 0 ? '+' + record.reward : '未达标' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/revenue/overview.vue b/src/pages-sub/revenue/overview.vue
new file mode 100644
index 0000000..f1582bb
--- /dev/null
+++ b/src/pages-sub/revenue/overview.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+ 近30天收益趋势
+
+
+
+
+ {{ d.date }}
+
+
+
+
+
+
+
+
+ {{ item.label }}
+ {{ item.value }}
+ {{ item.trend }}
+
+
+
+
+
+ 收益构成
+
+ {{ item.label }}
+ ¥{{ item.value }}
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/revenue/points-log.vue b/src/pages-sub/revenue/points-log.vue
new file mode 100644
index 0000000..b77d000
--- /dev/null
+++ b/src/pages-sub/revenue/points-log.vue
@@ -0,0 +1,330 @@
+
+
+
+
+
+
+
+
+
+
+ 可用兑换积分
+ ¥{{ withdrawableAmount }}
+ 1积分 = ¥1.00 · 最低兑换 ¥100
+
+
+ 兑换
+
+
+
+
+
+ {{ item.icon }}
+ {{ item.label }}
+
+ {{ item.amount }}
+ {{ item.sub }}
+
+
+
+
+
+
+
+
+
+ ¥{{ statusCard.withdrawable }}
+ 可兑换
+
+
+ ¥{{ statusCard.frozen }}
+ 冻结中
+
+
+ ¥{{ statusCard.withdrawn }}
+ 已兑换
+
+
+ ¥{{ statusCard.gift }}
+ 活动赠送
+
+
+
+
+
+
+
+ {{ t.label }}
+
+
+
+
+
+
+
+
+ {{ item.icon }}
+
+
+ {{ item.title }}
+ {{ item.sub }}
+
+
+ {{ item.amount }}
+ {{ item.status }}
+
+
+
+
+ 暂无相关积分记录
+
+
+
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/revenue/withdraw.vue b/src/pages-sub/revenue/withdraw.vue
new file mode 100644
index 0000000..f958ab2
--- /dev/null
+++ b/src/pages-sub/revenue/withdraw.vue
@@ -0,0 +1,442 @@
+
+
+
+
+
+
+
+
+ 可兑换积分余额
+ ¥{{ formatThousands(balance) }}
+ 1积分 = ¥1.00 · 服务费{{ feeRatePercent }}% · 最低{{ minAmount }}积分起提
+ 全部兑换
+
+
+
+
+
+
+ 兑换金额
+
+ ¥
+
+
+
+ {{ q === 'all' ? '全部' : '¥' + formatThousands(q) }}
+
+ {{ errorMsg }}
+ 当前可兑换积分余额 ¥{{ formatThousands(balance) }},预计1-3个工作日发放
+
+
+
+
+ 收款账户
+
+
+ {{ accountTypes[selectedAccountType] }}
+ ▼
+
+
+
+ {{ walletCard.bank_name }}
+ {{ walletCard.bank_card }}
+ {{ walletCard.account_name }}
+ 修改 ›
+
+
+ 尚未绑定{{ accountTypes[selectedAccountType] }},点击设置 ›
+
+
+
+
+
+
+ 兑换金额
+ ¥{{ formatThousands(Number(withdrawAmount) || 0) }}
+
+
+ 服务费({{ feeRatePercent }}%)
+ -¥{{ formatMoney(calcFee()) }}
+
+
+
+ 实际发放金额
+ ¥{{ formatThousands(calcActual()) }}
+
+
+
+
+
+
+ 确认兑换
+
+
+
+
+
+
+
+
+ -¥{{ formatThousands(record.amount) }}
+ {{ record.time }}
+
+
+ {{ record.statusLabel }}
+
+
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/contract-preview.vue b/src/pages-sub/user/contract-preview.vue
new file mode 100644
index 0000000..6137f55
--- /dev/null
+++ b/src/pages-sub/user/contract-preview.vue
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+ {{ contract.title }}
+ 合同编号:{{ contract.number }}
+
+
+
+ 甲方
+ {{ contract.partyA }}
+
+
+ 乙方
+ {{ contract.partyB }}
+
+
+ 签订日期
+ {{ contract.date }}
+
+
+
+
+
+
+ 合同条款
+
+ {{ cl.title }}
+ {{ cl.content }}
+
+
+
+
+
+
+
+ 请仔细阅读合同条款,特别是关于付款方式、违约责任、争议解决等条款。如有疑问,请咨询平台客服或法律顾问后再签署。
+
+
+
+
+
+ 返回
+ 确认签署
+
+
+ ✓
+ 该合同已签署
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/contracts.vue b/src/pages-sub/user/contracts.vue
new file mode 100644
index 0000000..1713b1b
--- /dev/null
+++ b/src/pages-sub/user/contracts.vue
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+
+
+ {{ tab }}
+
+
+
+
+
+
+
+ 合同编号:{{ c.number }}
+
+ {{ c.date }}
+ {{ formatMoney(c.amount) }}元
+
+
+
+
+ 暂无合同
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/help-center.vue b/src/pages-sub/user/help-center.vue
new file mode 100644
index 0000000..a9c7759
--- /dev/null
+++ b/src/pages-sub/user/help-center.vue
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ cat.icon }}
+
+ {{ cat.label }}
+
+
+
+
+
+ 常见问题
+
+
+
+ {{ faq.a }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/invitation.vue b/src/pages-sub/user/invitation.vue
new file mode 100644
index 0000000..1224db5
--- /dev/null
+++ b/src/pages-sub/user/invitation.vue
@@ -0,0 +1,244 @@
+
+
+
+
+
+
+
+
+
+
+
+ 分享链接
+
+ {{ inviteUrl }}
+ 复制
+
+
+
+
+ 🖼
+ 生成海报
+
+
+
+
+
+
+
+
+
+
+
+ {{ s.value }}
+ {{ s.label }}
+
+
+
+
+
+ 推荐记录
+
+ {{ r.name[0] }}
+
+ {{ r.name }}
+ {{ r.time }}
+
+
+ {{ r.statusText }}
+ +{{ formatMoney(r.earnings) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/level-rules.vue b/src/pages-sub/user/level-rules.vue
new file mode 100644
index 0000000..a7c3c48
--- /dev/null
+++ b/src/pages-sub/user/level-rules.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+ 📐 活跃度计算公式
+
+ 活跃度 = 自身消费 × 0.4 + 直接推荐C端消费 × 0.2
+
+ 消费指购买服务器、加成券、自有设备接口费等订单金额
+
+
+
+
+ 等级条件 · VIP3 → VIP4
+
+
+
+ 基础条件(必须达成)
+
+ ✓
+
+ 累计积分 ≥ 200,000
+
+ 156,800 / 200,000 (78%)
+
+
+
+
+
+
+ 次要条件(至少满足3项)
+
+
+ {{ c.met ? '✓' : '○' }}
+
+
+ {{ c.name }}
+ {{ c.current }} / {{ c.target }} {{ c.unit }}
+
+ {{ c.met ? '已达标' : '未达标' }}
+
+
+ 当前已满足 3/4 项次要条件 ✓
+
+
+
+
+
+ 📌 等级维持规则
+ VIP3 季度考核,任意满足2项即等级维持:
+ · 季度收益 ≥ ¥15,000
+ · 设备在线率 ≥ 85%
+ · 新增设备 ≥ 1台
+
+
+ ⚠️ 等级调整规则
+ 连续2个评估周期未满足等级维持条件,将自动等级调整至 VIP2。
+ 等级调整后30天内达到等级条件可恢复原等级。
+
+
+
+
+
+ 权益发放方式
+
+
+ ⚡
+ 直接发放户
+ 收益加成 · 直接推荐奖励
+ 自动发放,每日结算
+
+
+ 📋
+ 公示发放
+ 加成券 · 优先工单
+ 每月1日公示,统一发放
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/level.vue b/src/pages-sub/user/level.vue
new file mode 100644
index 0000000..fb36b78
--- /dev/null
+++ b/src/pages-sub/user/level.vue
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+
+ {{ currentLevel }}
+ {{ currentLevelName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/partner-apply.vue b/src/pages-sub/user/partner-apply.vue
new file mode 100644
index 0000000..41c04b0
--- /dev/null
+++ b/src/pages-sub/user/partner-apply.vue
@@ -0,0 +1,291 @@
+
+
+
+
+
+
+
+
+
+
+ 角色:{{ roleLabelMap[application.role] || '未知' }}
+ 企业:{{ application.company_name }}
+ 提交时间:{{ application.created_at }}
+
+
+
+
+
+
+ *角色选择
+
+
+ {{ roleLabelMap[form.role] || '请选择角色' }}
+
+
+
+
+
+ *所在省份
+
+
+ {{ selectedProvince || '请选择省份' }}
+
+
+
+
+
+ *所在城市
+
+
+ {{ selectedCity || '请选择城市' }}
+
+
+
+
+
+ *所在区县
+
+
+ {{ selectedDistrict || '请选择区县' }}
+
+
+
+
+ *企业名称
+
+
+
+ *联系电话
+
+
+
+ *申请说明
+
+
+
+
+ 提交申请
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/poster.vue b/src/pages-sub/user/poster.vue
new file mode 100644
index 0000000..976f9c5
--- /dev/null
+++ b/src/pages-sub/user/poster.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+ 推荐好友加入 一起赚收益
+ 邀请C端用户获得好友年度收益的直接推荐奖励
+ {{ userName }}
+ 生成中...
+
+
+
+ 保存到相册
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/profile-edit.vue b/src/pages-sub/user/profile-edit.vue
new file mode 100644
index 0000000..cd7e03e
--- /dev/null
+++ b/src/pages-sub/user/profile-edit.vue
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
+
+
+ 企业名称
+
+
+
+ 手机号
+
+
+
+ VIP等级
+
+
+
+ 实名认证状态
+
+ {{ authStatus.text }}
+ 去认证
+
+
+
+ 排行榜展示
+
+
+
+
+
+
+
+ 保存
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/promotion-center.vue b/src/pages-sub/user/promotion-center.vue
new file mode 100644
index 0000000..94d9865
--- /dev/null
+++ b/src/pages-sub/user/promotion-center.vue
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+ 推荐好友获取直接推荐奖励
+ 每邀请一位好友注册并消费,您可获得最高8%的直接推荐收益
+
+
+ 🎉
+
+
+
+
+
+ 我的推荐码
+
+ {{ inviteCode }}
+ 复制
+
+
+ {{ inviteUrl }}
+ 复制链接
+
+
+
+ 🖼
+ 生成海报
+
+
+ 💬
+ 微信分享
+
+
+ 📤
+ 更多
+
+
+
+
+
+
+
+ {{ stats.direct }}
+ 直接推荐人数
+
+
+ {{ stats.team }}
+ 团队人数
+
+
+ {{ stats.total }}
+ 总收益
+
+
+ {{ stats.month }}
+ 本月产出
+
+
+
+
+
+ 推广技巧
+
+ {{ i + 1 }}
+ {{ tip }}
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/realname-auth.vue b/src/pages-sub/user/realname-auth.vue
new file mode 100644
index 0000000..213f433
--- /dev/null
+++ b/src/pages-sub/user/realname-auth.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+ ✓
+
+ 已认证
+ 您的身份信息已通过实名认证
+
+
+
+
+ 身份信息
+
+ 姓名
+ *峰
+
+
+ 证件号码
+ 440************876
+
+
+ 证件类型
+ 中国大陆身份证
+
+
+ 认证时间
+ 2026-03-15 10:30
+
+
+
+
+
+ 人脸识别
+
+ 活体检测
+ 已通过
+
+
+ 识别时间
+ 2026-03-15 10:32
+
+
+
+
+
+ 企业信息
+
+ 企业名称
+ 深圳智算科技有限公司
+
+
+ 统一社会信用代码
+ 914403************
+
+
+ 企业认证
+ 已认证
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/settings.vue b/src/pages-sub/user/settings.vue
new file mode 100644
index 0000000..3b82197
--- /dev/null
+++ b/src/pages-sub/user/settings.vue
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+
+
+
+
+ 🔒
+ 账号安全
+
+
+
+
+
+ 🔔
+ 通知设置
+
+
+
+
+
+ 🛡
+ 隐私设置
+
+
+
+
+
+ 🗑
+ 清除缓存
+
+
+ {{ cacheSize }}
+
+
+
+
+
+
+
+
+
+ ℹ
+ 当前版本
+
+ v2.1.0
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+
diff --git a/src/pages-sub/user/ticket-create.vue b/src/pages-sub/user/ticket-create.vue
new file mode 100644
index 0000000..93548cf
--- /dev/null
+++ b/src/pages-sub/user/ticket-create.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+ 工单类型
+
+
+ {{ form.type || '请选择工单类型' }}
+
+
+
+
+
+ 关联设备
+
+
+ {{ form.device || '请选择设备(可选)' }}
+
+
+
+
+
+ 工单标题
+
+
+
+ 问题描述
+
+
+
+
+
+
+
+ 提交工单
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/ticket-detail.vue b/src/pages-sub/user/ticket-detail.vue
new file mode 100644
index 0000000..9c641ba
--- /dev/null
+++ b/src/pages-sub/user/ticket-detail.vue
@@ -0,0 +1,205 @@
+
+
+
+
+
+
+
+
+
+ {{ ticket.title }}
+
+
+
+ 工单类型
+ {{ ticket.type }}
+
+
+ 关联设备
+ {{ ticket.device }}
+
+
+ 处理目标
+ {{ ticket.target }}
+
+
+ 处理人
+ {{ ticket.assignee }}
+
+
+ 创建时间
+ {{ ticket.createTime }}
+
+
+
+
+
+
+ 处理日志
+
+
+
+
+
+ {{ log.action }}
+ {{ log.operator }}
+ {{ log.time }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/tickets.vue b/src/pages-sub/user/tickets.vue
new file mode 100644
index 0000000..93eaac3
--- /dev/null
+++ b/src/pages-sub/user/tickets.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+ {{ t.id }}
+ {{ t.statusText }}
+
+ {{ t.title }}
+
+ {{ t.type }}
+ {{ t.time }}
+
+
+
+
+
+
+
+ +
+ 创建工单
+
+
+
+
+
+
+
+
diff --git a/src/pages-sub/user/wallet.vue b/src/pages-sub/user/wallet.vue
new file mode 100644
index 0000000..3432c06
--- /dev/null
+++ b/src/pages-sub/user/wallet.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+ 个人收款账户
+
+ * 开户行
+
+
+
+ * 收款账户号
+
+
+
+ * 持卡人姓名
+
+
+
+
+
+
+ 公户收款账户
+
+ * 开户行
+
+
+
+ * 收款账户号
+
+
+
+ * 公司名称
+
+
+
+
+ 保存
+
+
+
+
+
+
+
diff --git a/src/pages.json b/src/pages.json
new file mode 100644
index 0000000..996a8ea
--- /dev/null
+++ b/src/pages.json
@@ -0,0 +1,270 @@
+{
+ "pages": [
+ {
+ "path": "pages/login/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "登录",
+ "backgroundColor": "#ffffff"
+ }
+ },
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "全犀云",
+ "backgroundColor": "#f5f7fa",
+ }
+ },
+ {
+ "path": "pages/devices/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "我的设备",
+ "backgroundColor": "#f5f7fa",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/revenue/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "收益",
+ "backgroundColor": "#f5f7fa",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/mall/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "商城",
+ "backgroundColor": "#f5f7fa",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/profile/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "我的",
+ "backgroundColor": "#f5f7fa"
+ }
+ },
+ {
+ "path": "pages/b-home/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "普通团长首页",
+ "backgroundColor": "#f5f7fa"
+ }
+ },
+ {
+ "path": "pages/b-team/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "普通团长团队",
+ "backgroundColor": "#f5f7fa"
+ }
+ },
+ {
+ "path": "pages/b-revenue/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "普通团长收益",
+ "backgroundColor": "#f5f7fa"
+ }
+ },
+ {
+ "path": "pages/b-profile/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "普通团长我的",
+ "backgroundColor": "#f5f7fa"
+ }
+ },
+ {
+ "path": "pages/b-super-home/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "超级团长首页",
+ "backgroundColor": "#f5f7fa"
+ }
+ },
+ {
+ "path": "pages/b-super-team/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "超级团长团队",
+ "backgroundColor": "#f5f7fa"
+ }
+ },
+ {
+ "path": "pages/b-super-revenue/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "超级团长收益",
+ "backgroundColor": "#f5f7fa"
+ }
+ },
+ {
+ "path": "pages/b-super-profile/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "超级团长我的",
+ "backgroundColor": "#f5f7fa"
+ }
+ },
+ {
+ "path": "pages/b-manager-home/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "商务经理首页",
+ "backgroundColor": "#f5f7fa"
+ }
+ },
+ {
+ "path": "pages/b-manager-team/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "商务经理团队",
+ "backgroundColor": "#f5f7fa"
+ }
+ },
+ {
+ "path": "pages/b-manager-revenue/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "商务经理收益",
+ "backgroundColor": "#f5f7fa"
+ }
+ },
+ {
+ "path": "pages/b-manager-profile/index",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "商务经理我的",
+ "backgroundColor": "#f5f7fa"
+ }
+ }
+ ],
+ "subPackages": [
+ {
+ "root": "pages-sub/device",
+ "pages": [
+ { "path": "detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "设备详情" } },
+ { "path": "monitor", "style": { "navigationStyle": "custom", "navigationBarTitleText": "实时监控" } },
+ { "path": "revenue-detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "积分明细" } },
+ { "path": "log", "style": { "navigationStyle": "custom", "navigationBarTitleText": "运行记录" } },
+ { "path": "add-own", "style": { "navigationStyle": "custom", "navigationBarTitleText": "添加自有设备" } },
+ { "path": "own-voucher", "style": { "navigationStyle": "custom", "navigationBarTitleText": "凭证管理" } },
+ { "path": "own-orders", "style": { "navigationStyle": "custom", "navigationBarTitleText": "自有设备订单" } },
+ { "path": "own-order-detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "订单详情" } },
+ { "path": "deploy-guide", "style": { "navigationStyle": "custom", "navigationBarTitleText": "部署引导" } },
+ { "path": "docking-detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "特征码对接" } },
+ { "path": "credit-detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "信用分详情" } },
+ { "path": "diagnosis", "style": { "navigationStyle": "custom", "navigationBarTitleText": "诊断报告" } },
+ { "path": "nat-test", "style": { "navigationStyle": "custom", "navigationBarTitleText": "NAT检测" } },
+ { "path": "deploy-progress", "style": { "navigationStyle": "custom", "navigationBarTitleText": "部署进度" } },
+ { "path": "device-info", "style": { "navigationStyle": "custom", "navigationBarTitleText": "设备信息" } }
+ ]
+ },
+ {
+ "root": "pages-sub/mall",
+ "pages": [
+ { "path": "product-detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "商品详情" } },
+ { "path": "coupon-detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "加成券详情" } },
+ { "path": "my-coupons", "style": { "navigationStyle": "custom", "navigationBarTitleText": "我的加成券" } },
+ { "path": "order-list", "style": { "navigationStyle": "custom", "navigationBarTitleText": "商城订单" } },
+ { "path": "pending-payment", "style": { "navigationStyle": "custom", "navigationBarTitleText": "立即购买" } },
+ { "path": "pending-order-detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "待支付详情" } },
+ { "path": "welfare", "style": { "navigationStyle": "custom", "navigationBarTitleText": "福利商城" } }
+ ]
+ },
+ {
+ "root": "pages-sub/revenue",
+ "pages": [
+ { "path": "points-log", "style": { "navigationStyle": "custom", "navigationBarTitleText": "积分明细" } },
+ { "path": "withdraw", "style": { "navigationStyle": "custom", "navigationBarTitleText": "积分兑换" } },
+ { "path": "leaderboard", "style": { "navigationStyle": "custom", "navigationBarTitleText": "排行榜" } },
+ { "path": "overview", "style": { "navigationStyle": "custom", "navigationBarTitleText": "积分概览" } },
+ { "path": "calculator", "style": { "navigationStyle": "custom", "navigationBarTitleText": "积分计算器" } },
+ { "path": "online-reward", "style": { "navigationStyle": "custom", "navigationBarTitleText": "在线激励" } }
+ ]
+ },
+ {
+ "root": "pages-sub/user",
+ "pages": [
+ { "path": "level", "style": { "navigationStyle": "custom", "navigationBarTitleText": "用户等级" } },
+ { "path": "level-rules", "style": { "navigationStyle": "custom", "navigationBarTitleText": "等级规则" } },
+ { "path": "contracts", "style": { "navigationStyle": "custom", "navigationBarTitleText": "合同管理" } },
+ { "path": "contract-preview", "style": { "navigationStyle": "custom", "navigationBarTitleText": "合同预览" } },
+ { "path": "tickets", "style": { "navigationStyle": "custom", "navigationBarTitleText": "工单管理" } },
+ { "path": "ticket-detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "工单详情" } },
+ { "path": "ticket-create", "style": { "navigationStyle": "custom", "navigationBarTitleText": "新建工单" } },
+ { "path": "profile-edit", "style": { "navigationStyle": "custom", "navigationBarTitleText": "企业信息" } },
+ { "path": "partner-apply", "style": { "navigationStyle": "custom", "navigationBarTitleText": "拓展伙伴申请" } },
+ { "path": "invitation", "style": { "navigationStyle": "custom", "navigationBarTitleText": "推荐有礼" } },
+ { "path": "poster", "style": { "navigationStyle": "custom", "navigationBarTitleText": "分享海报" } },
+ { "path": "realname-auth", "style": { "navigationStyle": "custom", "navigationBarTitleText": "实名认证" } },
+ { "path": "settings", "style": { "navigationStyle": "custom", "navigationBarTitleText": "设置" } },
+ { "path": "promotion-center", "style": { "navigationStyle": "custom", "navigationBarTitleText": "分享中心" } },
+ { "path": "help-center", "style": { "navigationStyle": "custom", "navigationBarTitleText": "帮助中心" } },
+ { "path": "wallet", "style": { "navigationStyle": "custom", "navigationBarTitleText": "收款账户" } }
+ ]
+ },
+ {
+ "root": "pages-sub/content",
+ "pages": [
+ { "path": "notices", "style": { "navigationStyle": "custom", "navigationBarTitleText": "消息中心" } },
+ { "path": "news-list", "style": { "navigationStyle": "custom", "navigationBarTitleText": "行业资讯" } },
+ { "path": "news-detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "资讯详情" } },
+ { "path": "notice-detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "通知详情" } },
+ { "path": "docs", "style": { "navigationStyle": "custom", "navigationBarTitleText": "帮助文档" } },
+ { "path": "doc-detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "文档详情" } },
+ { "path": "software", "style": { "navigationStyle": "custom", "navigationBarTitleText": "平台软件" } }
+ ]
+ },
+ {
+ "root": "pages-sub/b-promotion",
+ "pages": [
+ { "path": "promo-home", "style": { "navigationStyle": "custom", "navigationBarTitleText": "分享中心" } },
+ { "path": "leader-promo", "style": { "navigationStyle": "custom", "navigationBarTitleText": "分享中心" } },
+ { "path": "poster", "style": { "navigationStyle": "custom", "navigationBarTitleText": "分享海报" } },
+ { "path": "leader-poster", "style": { "navigationStyle": "custom", "navigationBarTitleText": "超级团长分享海报" } },
+ { "path": "b-level", "style": { "navigationStyle": "custom", "navigationBarTitleText": "等级权益" } },
+ { "path": "manager-promo", "style": { "navigationStyle": "custom", "navigationBarTitleText": "分享中心" } },
+ { "path": "manager-poster", "style": { "navigationStyle": "custom", "navigationBarTitleText": "商务经理分享海报" } },
+ { "path": "manager-level", "style": { "navigationStyle": "custom", "navigationBarTitleText": "经理等级权益" } },
+ { "path": "leader-detail", "style": { "navigationStyle": "custom", "navigationBarTitleText": "团长详情" } }
+ ]
+ }
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "全犀云",
+ "navigationBarBackgroundColor": "#ffffff",
+ "backgroundColor": "#f5f7fa",
+ "navigationStyle": "custom"
+ },
+ "easycom": {
+ "autoscan": true,
+ "custom": {
+ "^u-(.*)": "uview-plus/components/u-$1/u-$1.vue"
+ }
+ },
+ "tabBar": {
+ "custom": true,
+ "color": "#999999",
+ "selectedColor": "#1677ff",
+ "backgroundColor": "#ffffff",
+ "borderStyle": "black",
+ "list": [
+ { "pagePath": "pages/index/index", "text": "首页" },
+ { "pagePath": "pages/devices/index", "text": "设备" },
+ { "pagePath": "pages/revenue/index", "text": "收益" },
+ { "pagePath": "pages/mall/index", "text": "商城" },
+ { "pagePath": "pages/profile/index", "text": "我的" }
+ ]
+ }
+}
diff --git a/src/pages/b-home/index.vue b/src/pages/b-home/index.vue
new file mode 100644
index 0000000..b45bae0
--- /dev/null
+++ b/src/pages/b-home/index.vue
@@ -0,0 +1,536 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ greetingText }},{{ userName }}
+
+ ★
+ {{ dashboard.level_name }}
+ ›
+
+
+ 总收益积分
+
+ {{ dashboard.total_points ?? 0 }}
+ 累计已结算
+
+
+ 积分说明
+ 1元 = 1积分
+
+
+
+ 总积分
+ {{ dashboard.total_points ?? 0 }}
+ 累计激励金
+
+
+ 待生效积分
+ {{ dashboard.frozen_points ?? 0 }}
+ T+1生效
+
+
+ 总金额
+ ¥{{ dashboard.total_amount ?? 0 }}
+ C端消费总额
+
+
+
+
+
+
+
+
+
+ {{ noticeText }}
+ 更多 ›
+
+
+
+
+
+
+
+ 总积分
+ {{ formatThousands(dashboard.total_points || 0) }}
+ 累计激励金
+
+
+ 待生效积分
+ {{ formatThousands(dashboard.frozen_points || 0) }}
+ T+1生效
+
+
+ 总金额
+ ¥{{ formatThousands(dashboard.total_amount || 0) }}
+ C端消费总额
+
+
+ 活跃C端
+ {{ dashboard.active_c_count || 0 }}
+ 7日内活跃
+
+
+ 设备总数
+ {{ dashboard.device_count || 0 }}台
+ 已支付订单
+
+
+ 本月新增C端
+ {{ dashboard.new_c_count || 0 }}
+ 本月注册
+
+
+
+
+
+
+
+
+
+
+ ❤️
+
+ 分享中心
+
+
+
+ 👥
+
+ 我的团队
+
+
+
+ 🖼️
+
+ 生成海报
+
+
+
+ 💰
+
+ 积分明细
+
+
+
+
+
+
+
+
+ 暂无直属C端用户
+
+ {{ item.rank }}
+ {{ item.name }}
+ ¥{{ item.value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/b-manager-home/index.vue b/src/pages/b-manager-home/index.vue
new file mode 100644
index 0000000..0c01b4f
--- /dev/null
+++ b/src/pages/b-manager-home/index.vue
@@ -0,0 +1,590 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ greetingText }},{{ userName }}
+
+ ★
+ {{ dashboard.level_name }}
+ ›
+
+
+ 总收益积分
+
+ {{ dashboard.total_points ?? 0 }}
+ 累计已结算
+
+
+ 积分说明
+ 1元 = 1积分
+
+
+
+ 下属团长
+ {{ dashboard.leader_count || 0 }} 人
+ 商务经理下属
+
+
+ 团长直接推荐C端
+ {{ dashboard.total_c_count || 0 }} 人
+ 下属团长直接推荐
+
+
+ 本月积分
+ {{ dashboard.total_points ?? 0 }}
+ 累计激励金
+
+
+
+
+
+
+
+ 📢
+
+ {{ noticeText }}
+ 更多 ›
+
+
+
+
+
+
+
+ {{ item.title }}
+
+ {{ item.value }}{{ item.unit }}
+
+ {{ item.trend }}
+
+
+
+
+
+
+
+
+
+
+ {{ item.emoji }}
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+ {{ item.rank }}
+ {{ item.name }}
+ {{ item.value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/b-manager-profile/index.vue b/src/pages/b-manager-profile/index.vue
new file mode 100644
index 0000000..10282f5
--- /dev/null
+++ b/src/pages/b-manager-profile/index.vue
@@ -0,0 +1,511 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ (profile.name || '用')[0] }}
+
+ ✓
+
+
+
+ {{ profile.name }}
+
+
+ ★
+ {{ profile.level }}
+ ›
+
+ ID: {{ profile.id }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ❤️
+
+ 分享中心
+
+
+
+ 👥
+
+ 我的团队
+
+
+
+ 🖼️
+
+ 生成海报
+
+
+
+ 💰
+
+ 积分明细
+
+
+
+
+
+
+
+
+
+
+ 👥
+
+
+ 推荐记录
+ {{ inviteSub }}
+
+
+
+
+
+ 💰
+
+
+ 积分动态
+ 即时积分+长期积分明细
+
+
+
+
+
+ 💳
+
+
+ 兑换记录
+ 积分余额·兑换·兑换记录
+
+
+
+
+
+ ⭐
+
+
+ 等级规则
+ 等级条件·奖励比例
+
+
+
+
+
+ 🪪
+
+
+ 实名认证
+ 身份证·人脸识别·企业资质
+
+ 待认证
+
+
+
+
+ 💳
+
+
+ 收款账户
+ 管理个人/公户收款账户
+
+
+
+
+
+ ❓
+
+
+ 帮助中心
+ FAQ·在线客服·常见问题
+
+
+
+
+
+
+
+
+
+
+
+
+ ⚙️
+
+
+ 账号设置
+ 安全·通知·隐私
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/b-manager-revenue/index.vue b/src/pages/b-manager-revenue/index.vue
new file mode 100644
index 0000000..346c515
--- /dev/null
+++ b/src/pages/b-manager-revenue/index.vue
@@ -0,0 +1,433 @@
+
+
+
+
+
+
+
+
+
+ 可兑换收益积分
+ {{ withdrawable }}
+
+ 兑换
+ 积分明细
+
+
+
+
+
+
+ {{ item.label }}
+ {{ item.value }}
+ {{ item.trend }}
+
+
+
+
+
+ 收益积分来源构成 商务经理·下属团长贡献
+
+
+
+
+ {{ item.label }}
+ {{ item.value }}
+
+
+
+
+
+
+
+
+ 暂无相关收益记录
+
+
+
+
+
+ {{ item.icon }}
+
+
+ {{ item.title }}
+ {{ item.date }} · {{ item.desc }}
+
+
+ {{ item.amount }}
+ {{ item.status }}
+
+
+
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/b-manager-team/index.vue b/src/pages/b-manager-team/index.vue
new file mode 100644
index 0000000..5990f31
--- /dev/null
+++ b/src/pages/b-manager-team/index.vue
@@ -0,0 +1,329 @@
+
+
+
+
+
+
+
+
+
+
+
+ 下属团长人数
+ {{ teamStats.leader_count }} 人
+
+
+ 团队总贡献积分
+ {{ formatThousands(teamStats.total_contribution || 0) }}
+
+
+
+
+ {{ teamStats.total_c_count }}
+ 团长直接推荐C端
+
+
+ {{ teamStats.device_count }}
+ 设备总数(台)
+
+
+ {{ formatThousands(teamStats.total_spend || 0) }}
+ 总消费金额
+
+
+
+
+
+
+ 直接合作伙伴 {{ leaderList.length }} 人
+ 超级团长带 紫 标签,可点击查看下级
+
+
+
+
+ 直接合作伙伴贡献收益汇总
+
+ 直接合作伙伴 {{ leaderList.length }}人
+ 设备总数 {{ teamStats.device_count }}台
+
+
+
+
+
+
+ {{ item.avatar }}
+
+
+ {{ item.name }}
+ 超级团长
+
+
+ 直接推荐C端 {{ item.cCount }}人
+ ·
+ 设备 {{ item.cDevices }}台
+ ·
+ 总金额 ¥{{ item.cAmount }}
+
+
+ ▎直接推荐团长 {{ item.lCount }}人
+ ·
+ 设备 {{ item.lDevices }}台
+ ·
+ 总金额 ¥{{ item.lAmount }}
+
+
+
+ {{ item.contribution }}
+ 贡献积分
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/b-profile/index.vue b/src/pages/b-profile/index.vue
new file mode 100644
index 0000000..217e277
--- /dev/null
+++ b/src/pages/b-profile/index.vue
@@ -0,0 +1,562 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ profile.name ? profile.name.charAt(0) : '团' }}
+
+ ✓
+
+
+
+ {{ profile.name }}
+
+ 仅可邀请C端
+
+
+
+ ★
+ {{ profile.level }}
+ ›
+
+ ID: {{ profile.id }}
+
+
+
+
+
+
+
+ {{ profile.isMaxLevel ? profile.nextLevelName + '合作伙伴' : '距离' + profile.nextLevelName + '合作伙伴' }}
+ {{ profile.displayGrowthValue.toLocaleString() }} / {{ profile.targetPoints.toLocaleString() }} 成长值
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ❤️
+
+ 分享中心
+
+
+
+ 🔗
+
+ 分享链接
+
+
+
+ 🖼️
+
+ 分享海报
+
+
+
+ 📋
+
+ 关联订单
+
+
+
+
+
+
+
+
+
+
+ 👥
+
+
+ 推荐记录
+ {{ inviteSub }}
+
+
+
+
+
+ 💰
+
+
+ 积分动态
+ 即时积分+长期积分明细
+
+
+
+
+
+ 💳
+
+
+ 兑换记录
+ 积分余额·兑换·兑换记录
+
+
+
+
+
+ ⭐
+
+
+ 等级规则
+ 等级条件·奖励比例
+
+
+
+
+
+ 🛡️
+
+
+ 实名认证
+ 身份证·人脸识别·企业资质
+
+ 待认证
+
+
+
+
+ 💳
+
+
+ 收款账户
+ 管理个人/公户收款账户
+
+
+
+
+
+ ❓
+
+
+ 帮助中心
+ FAQ·在线客服·常见问题
+
+
+
+
+
+
+
+
+
+
+
+
+ ⚙️
+
+
+ 账号设置
+ 安全·通知·隐私
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/b-revenue/index.vue b/src/pages/b-revenue/index.vue
new file mode 100644
index 0000000..3652732
--- /dev/null
+++ b/src/pages/b-revenue/index.vue
@@ -0,0 +1,402 @@
+
+
+
+
+
+
+
+
+
+
+
+ 可兑换收益积分
+ {{ withdrawable }}
+
+ 兑换
+ 积分明细
+
+
+
+
+
+
+ {{ item.label }}
+ {{ item.value }}
+ {{ item.trend }}
+
+
+
+
+
+ 收益积分来源构成 团长·激励金收益
+
+ {{ item.label }}
+ {{ item.value }}
+
+
+
+
+
+
+ 收益积分明细
+
+
+
+
+
+ 暂无相关收益记录
+
+
+
+
+ {{ item.icon }}
+
+
+ {{ item.title }}
+ {{ item.sub }}
+
+
+ {{ item.amount }}
+ {{ item.status }}
+
+
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/b-super-home/index.vue b/src/pages/b-super-home/index.vue
new file mode 100644
index 0000000..d56d670
--- /dev/null
+++ b/src/pages/b-super-home/index.vue
@@ -0,0 +1,523 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ greetingText }},{{ userName }}
+
+ ★
+ {{ dashboard.level_name }}
+ ›
+
+
+ 总收益积分
+
+ {{ dashboard.total_points ?? 0 }}
+ 累计已结算
+
+
+ 积分说明
+ 1元 = 1积分
+
+
+
+ 直接推荐C端
+ {{ dashboard.direct_c_count || 0 }} 人
+ 团长直接推荐
+
+
+ 设备总数
+ {{ dashboard.device_count || 0 }} 台
+ 直接推荐C端设备
+
+
+ 本月积分
+ {{ dashboard.total_points ?? 0 }}
+ 累计激励金
+
+
+
+
+
+
+
+
+
+ {{ noticeText }}
+ 更多 ›
+
+
+
+
+
+
+
+ {{ item.title }}
+
+ {{ item.value }}{{ item.unit }}
+
+ {{ item.trend }}
+
+
+
+
+
+
+
+
+
+
+ {{ item.emoji }}
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+ 暂无直属C端用户
+
+ {{ item.rank }}
+ {{ item.name }}
+ ¥{{ item.value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/b-super-profile/index.vue b/src/pages/b-super-profile/index.vue
new file mode 100644
index 0000000..aea072a
--- /dev/null
+++ b/src/pages/b-super-profile/index.vue
@@ -0,0 +1,516 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ (profile.name || '用')[0] }}
+
+ ✓
+
+
+
+ {{ profile.name }}
+
+ 已开放邀请团长
+
+
+
+ ★
+ {{ profile.level }}
+
+
+ ID: {{ profile.id }}
+
+
+
+
+
+
+ {{ profile.isMaxLevel ? profile.nextLevelName + '合作伙伴' : '距离' + profile.nextLevelName + '合作伙伴' }}
+ {{ profile.displayGrowthValue.toLocaleString() }} / {{ profile.targetPoints.toLocaleString() }} 成长值
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ❤️
+
+ 分享中心
+
+
+
+ 🔗
+
+ 分享链接
+
+
+
+ 🖼️
+
+ 分享海报
+
+
+
+ 📋
+
+ 关联订单
+
+
+
+
+
+
+
+
+
+
+ 👥
+
+
+ 推荐记录
+ {{ inviteSub }}
+
+
+
+
+
+ 💰
+
+
+ 积分动态
+ 即时积分+长期激励+团队贡献收益
+
+
+
+
+
+ 💳
+
+
+ 兑换记录
+ 积分余额·兑换·兑换记录
+
+
+
+
+
+ ⭐
+
+
+ 等级规则
+ 等级条件·奖励比例
+
+
+
+
+
+ 🛡️
+
+
+ 实名认证
+ 身份证·人脸识别·企业资质
+
+ 待认证
+
+
+
+
+ 💳
+
+
+ 收款账户
+ 管理个人/公户收款账户
+
+
+
+
+
+ ❓
+
+
+ 帮助中心
+ FAQ·在线客服·常见问题
+
+
+
+
+
+
+
+
+
+
+
+
+ ⚙️
+
+
+ 账号设置
+ 安全·通知·隐私
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/b-super-revenue/index.vue b/src/pages/b-super-revenue/index.vue
new file mode 100644
index 0000000..14e3187
--- /dev/null
+++ b/src/pages/b-super-revenue/index.vue
@@ -0,0 +1,319 @@
+
+
+
+
+
+
+
+
+
+
+ 可兑换收益积分
+ {{ withdrawable }}
+
+ 兑换
+ 积分明细
+
+
+
+
+
+
+ {{ item.label }}
+ {{ item.value }}
+ {{ item.trend }}
+
+
+
+
+
+ 收益积分来源构成 团长·激励金收益
+
+ {{ item.label }}
+ {{ item.value }}
+
+
+
+
+
+
+ 收益积分明细
+
+
+
+
+ {{ item.icon }}
+
+
+ {{ item.title }}
+ {{ item.sub }}
+
+
+ {{ item.amount }}
+ {{ item.status }}
+
+
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/b-super-team/index.vue b/src/pages/b-super-team/index.vue
new file mode 100644
index 0000000..09150f2
--- /dev/null
+++ b/src/pages/b-super-team/index.vue
@@ -0,0 +1,431 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 直接推荐C端总数
+ {{ teamStats.userCount }} 人
+
+
+ 团队总贡献积分
+ {{ teamStats.totalContribution }}
+
+
+
+
+ {{ teamStats.directCUsers }}
+ 团长直接推荐C端
+
+
+ {{ teamStats.deviceCount }}
+ 设备总数(台)
+
+
+ {{ teamStats.totalSpend }}
+ 总消费金额
+
+
+ {{ teamStats.leaderContribution }}
+ 团长团队贡献
+
+
+
+
+
+
+
+ 直接推荐C端 ({{ teamStats.userCount }})
+
+
+ 直接推荐团长 ({{ teamStats.leaderCount }})
+
+
+
+
+
+
+ 直接推荐C端用户·贡献收益汇总
+
+ 直接推荐C端 {{ teamStats.userCount }}人
+ 设备总数 {{ teamStats.deviceCount }}台
+
+
+
+
+
+ 暂无下属成员记录
+
+
+
+ {{ member.avatar }}
+
+
+ {{ member.name }}
+ 由团长"{{ member.promoter }}"直接推荐 · {{ member.devices }}台设备
+
+
+ {{ formatThousands(member.points) }}
+ 贡献积分
+
+
+
+ {{ memberState.c.loading ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+ 直接推荐团长·团队贡献收益汇总
+
+ 直接推荐团长 {{ teamStats.leaderCount }}人
+ 团队C端 {{ teamStats.leaderTeamCCount }}人
+ 设备 {{ teamStats.leaderTeamDeviceCount }}台
+
+
+
+
+
+ 暂无下属团长记录
+
+
+
+ {{ item.avatar }}
+
+
+ {{ item.name }}
+ {{ item.desc }}
+
+
+ {{ formatThousands(item.points) }}
+ 团队贡献积分
+
+
+
+ {{ memberState.leader.loading ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/b-team/index.vue b/src/pages/b-team/index.vue
new file mode 100644
index 0000000..d77d6c1
--- /dev/null
+++ b/src/pages/b-team/index.vue
@@ -0,0 +1,345 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 下属用户总数
+ {{ teamStats.userCount }} 人
+
+
+ 团队总贡献积分
+ {{ teamStats.totalContribution }}
+
+
+
+
+ {{ teamStats.directPush }}
+ 团长直接推荐C端
+
+
+ {{ teamStats.deviceCount }}
+ 设备总数(台)
+
+
+ {{ teamStats.totalSpend }}
+ 总消费金额
+
+
+
+
+
+
+ 直接推荐C端 ({{ teamMembers.length }})
+
+
+
+
+ 直接推荐C端用户·贡献收益汇总
+
+ 直接推荐C端 {{ teamMembers.length }}人
+ 设备总数 {{ teamStats.deviceCount }}台
+
+
+
+
+
+
+
+ 暂无下属成员记录
+
+
+
+
+ {{ member.avatar }}
+
+
+ {{ member.name }}
+ 由团长"{{ member.promoter }}"直接推荐 · {{ member.devices }}台设备
+
+
+ {{ formatThousands(member.points) }}
+ 贡献积分
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/devices/index.vue b/src/pages/devices/index.vue
new file mode 100644
index 0000000..e79c5ee
--- /dev/null
+++ b/src/pages/devices/index.vue
@@ -0,0 +1,259 @@
+
+
+
+
+
+ 共 {{ stats.total }} 台
+
+
+
+
+
+
+
+ 平台购买
+ {{ stats.platform }}台
+ 累计积分 ¥{{ formatThousands(stats.buyRevenue) }}
+
+
+ 自有部署
+ {{ stats.self }}台
+ 累计积分 ¥{{ formatThousands(stats.ownRevenue) }}
+
+
+
+
+
+
+ {{ tab }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无相关设备
+
+
+
+
+ {{ loadingMore ? '加载中...' : '加载更多' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue
new file mode 100644
index 0000000..977d77f
--- /dev/null
+++ b/src/pages/index/index.vue
@@ -0,0 +1,723 @@
+
+
+
+
+
+
+
+
+ 全犀云
+
+
+
+ ✕
+ 🔍
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ greeting }},{{ userCompany }}
+
+
+ 累计积分
+
+ ¥{{ stats.totalPoints }}
+ ≈ {{ stats.totalPoints }} 积分
+
+
+
+
+
+ 我的设备
+ {{ deviceStats.total }} 台
+ {{ deviceStats.running }} 运行中
+
+
+ 今日产出
+ ¥{{ stats.todayPoints }}
+
+
+
+
+
+
+
+
+
+
+
+ 📢
+
+ {{ noticeText }}
+ 更多 ›
+
+
+
+
+
+
+
+
+
+ {{ item.emoji }}
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.emoji }}
+
+
+ {{ item.name }}
+ {{ item.specs }}
+ ¥{{ formatThousands(item.price) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 用户收益榜
+ 设备收益榜
+
+
+
+
+ {{ i + 1 }}
+ {{ item.name }}
+ ¥{{ formatThousands(item.revenue) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ news.emoji }}
+
+
+ {{ news.title }}
+ {{ news.subtitle }}
+
+ {{ news.cat }}
+ {{ news.date }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/login/index-bak.vue b/src/pages/login/index-bak.vue
new file mode 100644
index 0000000..0612f7a
--- /dev/null
+++ b/src/pages/login/index-bak.vue
@@ -0,0 +1,533 @@
+
+
+
+
+
+
+
+
+
+
+ 全犀云
+
+
+
+
+
+
+ 正在验证身份...
+ 首次访问需注册 · 已注册用户将自动登录
+ 点击继续
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 手机号
+
+
+
+ {{ codeCountdown > 0 ? codeCountdown + 's' : '获取验证码' }}
+
+
+
+
+
+
+ 验证码
+
+
+
+
+
+
+ ✓
+
+
+ 我已阅读并同意 《用户协议》 和 《隐私政策》
+
+
+
+ 登 录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 手机号
+
+
+
+
+
+ 验证码
+
+
+
+ {{ regCodeCountdown > 0 ? regCodeCountdown + 's' : '获取验证码' }}
+
+
+ 登录环节已通过手机号与验证码校验,请直接填写推荐码完成注册
+
+
+
+
+ 推荐码(推荐码) *
+
+ 注册需填写推荐码(必填)。扫描推荐人海报二维码进入时将自动填入,填写后与推荐人建立推荐关系
+
+
+
+
+
+ ✓
+
+
+ 我已阅读并同意 《用户协议》 和 《隐私政策》
+
+
+
+ 注 册
+
+
+
+
+
+
+
+
+
+
+
+
+ 一、服务条款
+ 欢迎使用全犀云边缘宽带共享平台。本协议是您与全犀云平台之间关于使用全犀云服务所订立的协议。
+ 1. 您在使用全犀云服务时,应遵守中华人民共和国相关法律法规。
+ 2. 您应保证所提供的企业及个人信息真实、准确、完整。
+ 3. 平台有权根据业务需要调整服务内容和收费标准,并提前公告通知。
+
+
+ 二、隐私政策
+ 全犀云重视您的隐私保护。我们将按照法律法规要求,采取相应的安全保护措施保护您的个人信息。
+ 1. 我们收集的信息包括:企业信息、联系人信息、设备信息、收益数据等。
+ 2. 我们不会将您的个人信息出售或分享给第三方。
+ 3. 您有权查询、更正、删除您的个人信息。
+
+
+ 三、收益与结算
+ 1. 设备收益根据实际带宽贡献量和服务质量综合计算。
+ 2. 收益积分按日结算,T+1日发放至账户。
+ 3. 积分兑换需满足最低兑换门槛,服务费按平台规则执行。
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/login/index.vue b/src/pages/login/index.vue
new file mode 100644
index 0000000..ddcb1b0
--- /dev/null
+++ b/src/pages/login/index.vue
@@ -0,0 +1,410 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 欢迎回来
+ 请输入手机号登录
+
+
+
+
+ +86
+
+
+
+
+
+
+
+
+
+
+
+ {{ codeCountdown > 0 ? codeCountdown + 's' : '重新获取' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ sending ? '发送中...' : '获取验证码' }}
+
+
+ {{ loading ? '登录中...' : '登 录' }}
+
+
+ {{ loading ? '注册中...' : '注 册' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/mall/index.vue b/src/pages/mall/index.vue
new file mode 100644
index 0000000..f9f3896
--- /dev/null
+++ b/src/pages/mall/index.vue
@@ -0,0 +1,787 @@
+
+
+
+
+
+
+
+
+ 商城
+
+
+
+ ✕
+ 🔍
+
+
+ 🛒
+
+
+
+
+
+
+
+
+
+
+
+ {{ tab.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ product.emoji }}
+ {{ product.topBadge }}
+ {{ product.stockBadge }}
+
+
+
+
+ {{ tag.text }}
+
+
+ {{ product.name }}
+
+ {{ product.stars }}
+ {{ product.score }}
+ ({{ product.reviewCount }}评价)
+
+
+
+
+ ¥{{ product.dailyEarn }}/天
+ 日产出
+
+
+ ¥{{ formatThousands(product.monthlyEarn) }}/月
+ 月产出
+
+
+ {{ product.paybackDays }}天
+ 设备成本周期
+
+
+
+
+ {{ spec }}
+
+
+
+
+
+
+ 已售 {{ product.sold }}台
+ 库存 {{ product.stock }}
+
+
+
+
+ ¥{{ formatThousands(product.price) }} 起
+
+
+ 月销{{ product.sold }}台
+ 立即购买
+
+
+
+
+ 硬件费 ¥{{ formatThousands(product.hardwarePrice) }} + 服务费 ¥{{ formatThousands(product.servicePrice) }}
+
+
+
+
+
+
+ {{ serverLoading ? '加载中...' : '加载更多' }}
+
+ — 已加载全部 —
+
+
+
+
+
+ ⚡
+ -30%
+ 秒杀
+
+
+
+ 限时
+ 1.2x
+
+ QH-200 Pro 秒杀款
+
+
+ ¥12,600
+ ¥18,000
+
+ 立即抢
+
+
+
+ 剩余 02:35:18
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ coupon.multiplier }}x
+
+ 收益加成券 {{ coupon.multiplier }}x
+
+ {{ tag.text }}
+
+
+
+ {{ coupon.priceText }}
+ {{ coupon.oldPrice }}
+
+
+
+
+
+
+ {{ coupon.multiplier }}x
+ 加成倍数
+
+
+ {{ coupon.days }}天
+ 有效期
+
+
+ {{ coupon.scope }}
+ 适用范围
+
+
+
+
+ 💡 月产出预估
+
+
+ ¥{{ formatThousands(coupon.baselineMonthly) }}
+ 基础收益
+
+ →
+
+ ¥{{ formatThousands(coupon.boostedMonthly) }}
+ 加成后
+
+
+
+
+
+ {{ coupon.btnText }}
+ 月销 {{ coupon.sold }}张
+
+
+
+
+
+
+ {{ couponLoading ? '加载中...' : '加载更多' }}
+
+ — 已加载全部 —
+
+
+
+ 💡 加成券使用说明
+ · 加成券购买后需绑定到具体设备方可生效
+ · 每台设备同时仅可生效一张加成券
+ · 有效期从绑定当日开始计算,过期失效
+ · 收益加成在每日0:30结算时生效
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ cat.emoji }}
+
+ {{ cat.name }}
+
+
+
+
+
+
+
+
+
+ {{ item.emoji }}
+
+ {{ item.name }}
+
+ ¥{{ item.price }}
+ ¥{{ item.oldPrice }}
+
+
+
+
+
+
+
+ 为你推荐
+
+
+
+
+ {{ item.emoji }}
+
+
+ {{ item.name }}
+ ¥{{ item.price }}
+ ¥{{ item.oldPrice }}
+ 已售 {{ item.sold }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/profile/index.vue b/src/pages/profile/index.vue
new file mode 100644
index 0000000..e3d2516
--- /dev/null
+++ b/src/pages/profile/index.vue
@@ -0,0 +1,431 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 云
+
+
+ {{ userInfo.companyName }}
+
+ {{ userInfo.vipLevel }}
+ ID: {{ userInfo.userId }}
+
+
+
+
+
+
+
+
+
+
+ {{ userInfo.deviceCount }}
+ 设备
+
+
+ {{ userInfo.totalPoints }}
+ 累计积分
+
+
+
+
+
+
+
+
+ {{ userInfo.vipLevel }}
+ 用户等级
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 常用功能
+
+
+
+
+ {{ item.emoji }}
+
+
+ {{ item.name }}
+ {{ item.badge }}
+
+
+
+
+
+
+
+
+ 业务中心
+
+
+
+ {{ item.emoji }}
+
+
+
+ {{ item.name }}
+ {{ item.desc }}
+
+
+ {{ item.badge }}
+
+
+
+
+
+
+
+
+
+
+ 工具与支持
+
+
+
+ {{ item.emoji }}
+
+
+
+ {{ item.name }}
+ {{ item.desc }}
+
+ {{ item.badge }}
+
+
+
+
+
+
+
+
+ 通用
+
+
+
+
+
+
+ 设置
+ 账号安全与偏好设置
+
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/revenue/index.vue b/src/pages/revenue/index.vue
new file mode 100644
index 0000000..b0e4cb7
--- /dev/null
+++ b/src/pages/revenue/index.vue
@@ -0,0 +1,213 @@
+
+
+
+
+
+
+
+
+ 可用兑换积分
+ ¥{{ formatThousands(withdrawablePoints) }}
+
+ 兑换
+ 积分明细
+
+
+
+
+
+
+
+
+ ¥{{ item.amount }}
+ {{ item.label }}
+ {{ item.sub }}
+
+
+
+
+
+
+ 收益监控
+
+
+ {{ item.label }}
+ ¥{{ item.value }}
+
+ {{ item.trend > 0 ? '↑' : item.trend < 0 ? '↓' : '' }} {{ Math.abs(item.trend) }}%
+
+
+
+
+
+
+
+ 快捷功能
+
+
+
+ {{ item.emoji }}
+
+
+
+ {{ item.title }}
+ {{ item.desc }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/static/images/README.md b/src/static/images/README.md
new file mode 100644
index 0000000..170d409
--- /dev/null
+++ b/src/static/images/README.md
@@ -0,0 +1,8 @@
+# 图片资源目录
+
+存放以下图片资源:
+- logo.png - 平台logo(80x80px)
+- 各种图标、默认占位图
+- 运营海报、商品图片等
+
+当前占位使用uView自带图标,后续替换为实际设计资源。
diff --git a/src/static/images/logo.svg b/src/static/images/logo.svg
new file mode 100644
index 0000000..799d847
--- /dev/null
+++ b/src/static/images/logo.svg
@@ -0,0 +1,11 @@
+
diff --git a/src/static/quanxiyun-logo.png b/src/static/quanxiyun-logo.png
new file mode 100644
index 0000000..4bd6369
Binary files /dev/null and b/src/static/quanxiyun-logo.png differ
diff --git a/src/static/share-cover.png b/src/static/share-cover.png
new file mode 100644
index 0000000..ba1617b
Binary files /dev/null and b/src/static/share-cover.png differ
diff --git a/src/static/styles/common.scss b/src/static/styles/common.scss
new file mode 100644
index 0000000..601d1b7
--- /dev/null
+++ b/src/static/styles/common.scss
@@ -0,0 +1,124 @@
+// 全犀云 APP 全局样式变量
+// 与 C端.html 原型设计变量保持一致
+
+// 主题色
+$primary: #1677FF;
+$primary-2: #4096FF;
+$primary-3: #E6F4FF;
+$primary-4: #BAE0FF;
+$primary-dark: #0958D9;
+
+// 成功/正面
+$success: #00C4A7;
+$success-2: #E6FAF5;
+
+// 警告
+$warning: #FF8800;
+$warning-2: #FFF7E6;
+
+// 危险/错误
+$danger: #FF4D4F;
+$danger-2: #FFF1F0;
+
+// 紫色强调
+$accent: #722ED1;
+$accent-2: #F9F0FF;
+$accent-3: #E9D8FF;
+
+// 中性色
+$bg: #F2F4F8;
+$card-bg: #fff;
+$border: #EAEDF3;
+$border-2: #F3F5F9;
+$border-3: #F7F9FC;
+
+// 文字颜色
+$text: #0F1226;
+$text-2: #5A6072;
+$text-3: #8B91A1;
+$text-4: #BCC2CE;
+
+// 圆角
+$radius: 10px;
+$radius-2: 14px;
+$radius-3: 18px;
+
+// 阴影
+$shadow: 0 1px 3px rgba(15, 18, 38, 0.04), 0 1px 2px rgba(15, 18, 38, 0.03);
+$shadow-2: 0 4px 16px rgba(15, 18, 38, 0.06), 0 1px 3px rgba(15, 18, 38, 0.04);
+$shadow-3: 0 8px 28px rgba(15, 18, 38, 0.08), 0 2px 8px rgba(15, 18, 38, 0.05);
+$shadow-blue: 0 6px 20px rgba(22, 119, 255, 0.22);
+
+// 间距
+$tab-height: 54px;
+
+// 字体
+$font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Helvetica Neue', sans-serif;
+$num-font: 'DIN Alternate', 'Helvetica Neue', -apple-system, sans-serif;
+
+// 通用样式类
+.card {
+ background: #fff;
+ border-radius: 14rpx;
+ padding: 24rpx;
+ box-shadow: 0 2rpx 8rpx rgba(15, 18, 38, 0.04);
+}
+
+.section-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 24rpx;
+}
+
+.section-title {
+ font-size: 32rpx;
+ font-weight: 700;
+ color: #0F1226;
+ display: flex;
+ align-items: center;
+ gap: 12rpx;
+
+ &::before {
+ content: '';
+ width: 6rpx;
+ height: 28rpx;
+ background: linear-gradient(180deg, $primary, $primary-2);
+ border-radius: 4rpx;
+ }
+}
+
+.section-more {
+ font-size: 24rpx;
+ color: #8B91A1;
+ display: flex;
+ align-items: center;
+ gap: 4rpx;
+}
+
+// 页面容器
+.page-container {
+ min-height: 100vh;
+ background: $bg;
+}
+
+// 子页面容器
+.sub-page {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: $bg;
+ z-index: 50;
+ overflow-y: auto;
+}
+
+// 渐变背景
+.hero-bg {
+ background: linear-gradient(135deg, #0A1733 0%, #0D2B6E 35%, #1342B5 65%, #1B66E8 100%);
+}
+
+.hero-bg-light {
+ background: linear-gradient(135deg, #e6f4ff, #f0f7ff);
+}
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..8a05980
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,5 @@
+import { createPinia } from 'pinia'
+
+const pinia = createPinia()
+
+export default pinia
diff --git a/src/store/modules/app.js b/src/store/modules/app.js
new file mode 100644
index 0000000..73914fd
--- /dev/null
+++ b/src/store/modules/app.js
@@ -0,0 +1,66 @@
+import { defineStore } from 'pinia'
+import { ref } from 'vue'
+
+export const useAppStore = defineStore('app', () => {
+ // 系统配置
+ const systemConfig = ref({
+ withdrawFeeRate: 0.005,
+ minWithdraw: 100,
+ pointsRate: 1
+ })
+
+ // 公告列表
+ const notices = ref([])
+
+ // 未读消息数
+ const unreadCount = ref(0)
+
+ // 应用版本
+ const version = ref('1.0.0')
+
+ // 临时存储:当前打开的资讯详情(页面间传参用,避免长文本放URL)
+ const currentNews = ref(null)
+
+ // 临时存储:当前打开的帮助文档分类
+ const currentHelpDoc = ref(null)
+
+ // 方法
+ const setSystemConfig = (config) => {
+ systemConfig.value = { ...systemConfig.value, ...config }
+ }
+
+ const setNotices = (list) => {
+ notices.value = list
+ }
+
+ const setUnreadCount = (count) => {
+ unreadCount.value = count
+ }
+
+ const incrementUnread = () => {
+ unreadCount.value++
+ }
+
+ const setCurrentNews = (news) => {
+ currentNews.value = news
+ }
+
+ const setCurrentHelpDoc = (doc) => {
+ currentHelpDoc.value = doc
+ }
+
+ return {
+ systemConfig,
+ notices,
+ unreadCount,
+ version,
+ currentNews,
+ currentHelpDoc,
+ setSystemConfig,
+ setNotices,
+ setUnreadCount,
+ incrementUnread,
+ setCurrentNews,
+ setCurrentHelpDoc
+ }
+})
diff --git a/src/store/modules/device.js b/src/store/modules/device.js
new file mode 100644
index 0000000..4f8451c
--- /dev/null
+++ b/src/store/modules/device.js
@@ -0,0 +1,77 @@
+import { defineStore } from 'pinia'
+import { ref, computed } from 'vue'
+
+export const useDeviceStore = defineStore('device', () => {
+ // 设备列表
+ const devices = ref([])
+
+ // 设备状态统计
+ const stats = ref({
+ total: 0,
+ running: 0,
+ error: 0,
+ offline: 0
+ })
+
+ // 当前查看的设备
+ const currentDevice = ref(null)
+
+ // 计算属性
+ const runningDevices = computed(() => devices.value.filter(d => d.status === 'running' || d.status === 'stable' || d.status === 'testing'))
+
+ const errorDevices = computed(() => devices.value.filter(d => d.status === 'error'))
+
+ const offlineDevices = computed(() => devices.value.filter(d => d.status === 'offline'))
+
+ const buyDevices = computed(() => devices.value.filter(d => d.source === 'buy'))
+
+ const ownDevices = computed(() => devices.value.filter(d => d.source === 'own'))
+
+ // 方法
+ const setDevices = (list) => {
+ devices.value = list
+ updateStats()
+ }
+
+ const setCurrentDevice = (device) => {
+ currentDevice.value = device
+ }
+
+ const updateStats = () => {
+ const list = devices.value
+ stats.value = {
+ total: list.length,
+ running: runningDevices.value.length,
+ error: errorDevices.value.length,
+ offline: offlineDevices.value.length
+ }
+ }
+
+ const addDevice = (device) => {
+ devices.value.unshift(device)
+ updateStats()
+ }
+
+ const updateDevice = (id, data) => {
+ const idx = devices.value.findIndex(d => d.id === id)
+ if (idx !== -1) {
+ devices.value[idx] = { ...devices.value[idx], ...data }
+ updateStats()
+ }
+ }
+
+ return {
+ devices,
+ stats,
+ currentDevice,
+ runningDevices,
+ errorDevices,
+ offlineDevices,
+ buyDevices,
+ ownDevices,
+ setDevices,
+ setCurrentDevice,
+ addDevice,
+ updateDevice
+ }
+})
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
new file mode 100644
index 0000000..e2c20fa
--- /dev/null
+++ b/src/store/modules/user.js
@@ -0,0 +1,64 @@
+import { defineStore } from 'pinia'
+import { ref } from 'vue'
+import request from '@/utils/request'
+
+export const useUserStore = defineStore('user', () => {
+ const token = ref(uni.getStorageSync('token') || '')
+ const userInfo = ref({})
+ const currentRole = ref(uni.getStorageSync('userRole') || 'c')
+
+ const switchRole = (role) => {
+ currentRole.value = role
+ uni.setStorageSync('userRole', role)
+ }
+
+ const setToken = (newToken) => {
+ token.value = newToken
+ uni.setStorageSync('token', newToken)
+ }
+
+ const setUserInfo = (info) => {
+ userInfo.value = info
+ currentRole.value = info.role || 'c'
+ uni.setStorageSync('userInfo', info)
+ uni.setStorageSync('userRole', info.role || 'c')
+ }
+
+ // 登出
+ const logout = async () => {
+ const t = token.value || uni.getStorageSync('token')
+ console.log('[logout] token:', t ? t.substring(0, 20) + '...' : 'EMPTY')
+ // 先调后端删 token
+ if (t && t !== 'dev-token') {
+ try {
+ console.log('[logout] calling /api/c/auth/logout...')
+ await request.post('/c/auth/logout', {}, { showLoading: false })
+ console.log('[logout] API success')
+ } catch (e) {
+ console.log('[logout] API failed:', e)
+ }
+ }
+ // 清前端状态
+ token.value = ''
+ userInfo.value = {}
+ currentRole.value = 'c'
+ try { localStorage.removeItem('token') } catch (e) {}
+ try { localStorage.removeItem('userInfo') } catch (e) {}
+ try { localStorage.removeItem('userRole') } catch (e) {}
+ uni.removeStorageSync('token')
+ uni.removeStorageSync('userInfo')
+ uni.removeStorageSync('userRole')
+ console.log('[logout] navigating to login...')
+ uni.reLaunch({ url: '/pages/login/index' })
+ }
+
+ return {
+ token,
+ userInfo,
+ currentRole,
+ switchRole,
+ setToken,
+ setUserInfo,
+ logout
+ }
+})
diff --git a/src/uni.scss b/src/uni.scss
new file mode 100644
index 0000000..3bd0af3
--- /dev/null
+++ b/src/uni.scss
@@ -0,0 +1,25 @@
+/* 全局颜色变量,匹配原型配色 */
+$u-primary: #1677ff;
+$u-success: #00C4A7;
+$u-warning: #FF8800;
+$u-error: #FF4D4D;
+$u-info: #909399;
+$u-main-color: #303133;
+$u-content-color: #606266;
+$u-tips-color: #909399;
+$u-light-color: #c0c4cc;
+
+/* 边框颜色 */
+$u-border-color: #e4e7ed;
+
+/* 背景色 */
+$u-bg-color: #f5f7fa;
+
+/* 自定义颜色 */
+$heroblue-dark: #0F3460;
+$heroblue-light: #1A4B8C;
+$purple: #722ED1;
+$orange-light: #FFF7E6;
+
+// 引入uview-plus主题样式
+@import 'uview-plus/theme.scss';
diff --git a/src/utils/auth.js b/src/utils/auth.js
new file mode 100644
index 0000000..1884d07
--- /dev/null
+++ b/src/utils/auth.js
@@ -0,0 +1,25 @@
+const TOKEN_KEY = 'token'
+
+export const getToken = () => {
+ return uni.getStorageSync(TOKEN_KEY)
+}
+
+export const setToken = (token) => {
+ uni.setStorageSync(TOKEN_KEY, token)
+}
+
+export const removeToken = () => {
+ uni.removeStorageSync(TOKEN_KEY)
+}
+
+export const isLoggedIn = () => {
+ return !!getToken()
+}
+
+export const redirectToLogin = () => {
+ removeToken()
+ uni.showToast({ title: '登录已过期,请重新登录', icon: 'none' })
+ setTimeout(() => {
+ uni.reLaunch({ url: '/pages/login/index' })
+ }, 1500)
+}
diff --git a/src/utils/constant.js b/src/utils/constant.js
new file mode 100644
index 0000000..90cf494
--- /dev/null
+++ b/src/utils/constant.js
@@ -0,0 +1,143 @@
+// 设备状态
+export const DEVICE_STATUS = {
+ PENDING_ACTIVE: 'pending_active',
+ ACTIVATING: 'activating',
+ DEPLOYING: 'deploying',
+ RUNNING: 'running',
+ STABLE: 'stable',
+ TESTING: 'testing',
+ MAINTAINING: 'maintaining',
+ ERROR: 'error',
+ OFFLINE: 'offline',
+ DISABLED: 'disabled',
+ SCRAPPED: 'scrapped',
+ RETURNED: 'returned'
+}
+
+// 设备状态文本映射
+export const DEVICE_STATUS_MAP = {
+ pending_active: { label: '待激活', color: '#909399', bg: '#f0f0f0' },
+ activating: { label: '激活中', color: '#1677ff', bg: '#e6f4ff' },
+ deploying: { label: '部署中', color: '#1677ff', bg: '#e6f4ff' },
+ running: { label: '运行中', color: '#00C4A7', bg: '#e6faf5' },
+ stable: { label: '稳定期', color: '#00C4A7', bg: '#e6faf5' },
+ testing: { label: '压测期', color: '#FF8800', bg: '#fff7e6' },
+ maintaining: { label: '维护中', color: '#FF8800', bg: '#fff7e6' },
+ error: { label: '异常', color: '#FF4D4F', bg: '#fff1f0' },
+ abnormal: { label: '异常', color: '#FF4D4F', bg: '#fff1f0' },
+ offline: { label: '离线', color: '#909399', bg: '#f0f0f0' },
+ frozen: { label: '已冻结', color: '#909399', bg: '#f0f0f0' },
+ disabled: { label: '已停用', color: '#909399', bg: '#f0f0f0' },
+ scrapped: { label: '已报废', color: '#909399', bg: '#f0f0f0' },
+ returned: { label: '已退货', color: '#FF4D4F', bg: '#fff1f0' }
+}
+
+// 订单状态
+export const ORDER_STATUS = {
+ PENDING_PAY: 'pending_pay',
+ RECEIPT_AUDITING: 'receipt_auditing',
+ PAID: 'paid',
+ REJECTED: 'rejected',
+ COMPLETED: 'completed',
+ CANCELED: 'canceled'
+}
+
+export const ORDER_STATUS_MAP = {
+ pending_pay: { label: '待支付', color: '#FF8800', bg: '#fff7e6' },
+ receipt_auditing: { label: '回执审核中', color: '#1677ff', bg: '#e6f4ff' },
+ paid: { label: '已支付', color: '#00C4A7', bg: '#e6faf5' },
+ rejected: { label: '已驳回', color: '#FF4D4F', bg: '#fff1f0' },
+ completed: { label: '已完成', color: '#00C4A7', bg: '#e6faf5' },
+ canceled: { label: '已取消', color: '#909399', bg: '#f0f0f0' }
+}
+
+// 信用分/健康分系数映射
+export const CREDIT_COEFFICIENT = [
+ { min: 95, max: 100, coefficient: 1.2, label: '优秀' },
+ { min: 80, max: 94, coefficient: 1.0, label: '正常' },
+ { min: 60, max: 79, coefficient: 0.8, label: '一般' },
+ { min: 0, max: 59, coefficient: 0, label: '不合格' }
+]
+
+// 角色类型
+export const ROLE_TYPE = {
+ C_USER: 'c',
+ LEADER: 'leader',
+ SUPER_LEADER: 'super_leader',
+ MANAGER: 'manager'
+}
+
+export const ROLE_TYPE_MAP = {
+ c: 'C端用户',
+ leader: '团长',
+ super_leader: '超级团长',
+ manager: '商务经理'
+}
+
+// 推荐码类型
+export const INVITE_CODE_TYPE = {
+ LDR: 'ldr',
+ MGR: 'mgr'
+}
+
+// 积分类型
+export const POINTS_TYPE = {
+ DEVICE_OUTPUT: 'device_output',
+ ACTIVITY_GIFT: 'activity_gift',
+ LEVEL_REWARD: 'level_reward',
+ INVITE_REWARD: 'invite_reward',
+ CONSUMPTION_REBATE: 'consumption_rebate'
+}
+
+export const POINTS_TYPE_MAP = {
+ device_output: { label: '设备产出积分', color: '#00C4A7', icon: 'server' },
+ activity_gift: { label: '活动赠送积分', color: '#FF8800', icon: 'gift' },
+ level_reward: { label: '等级奖励积分', color: '#722ED1', icon: 'star' },
+ invite_reward: { label: '邀请奖励积分', color: '#1677ff', icon: 'heart' },
+ consumption_rebate: { label: '消费返利积分', color: '#FF4D4F', icon: 'rmb-circle' }
+}
+
+// VIP等级门槛
+export const VIP_LEVELS = [
+ { level: 1, name: 'VIP1', consumptionRequired: 1000, earningMultiplier: 1.0 },
+ { level: 2, name: 'VIP2', consumptionRequired: 10000, earningMultiplier: 1.05 },
+ { level: 3, name: 'VIP3', consumptionRequired: 50000, earningMultiplier: 1.1 },
+ { level: 4, name: 'VIP4', consumptionRequired: 200000, earningMultiplier: 1.15 },
+ { level: 5, name: 'VIP5', consumptionRequired: 500000, earningMultiplier: 1.2 }
+]
+
+// 设备来源
+export const DEVICE_SOURCE = {
+ BUY: 'buy',
+ OWN: 'own'
+}
+
+export const DEVICE_SOURCE_MAP = {
+ buy: { label: '平台购买', color: '#1677ff', bg: '#e6f4ff' },
+ own: { label: '自有设备', color: '#722ED1', bg: '#f9f0ff' }
+}
+
+// 自有设备订单状态
+export const OWN_ORDER_STATUS = {
+ PENDING_PAY: 'pending_pay',
+ PAID: 'paid',
+ PAID_OK: 'paid-ok',
+ PAID_FAIL: 'paid-fail',
+ INTEGRATING: 'integrating',
+ CURING: 'curing',
+ RUNNING: 'running',
+ FAULT: 'fault',
+ REPAIRING: 'repairing'
+}
+
+export const OWN_ORDER_STATUS_MAP = {
+ 'pending_pay': { label: '待支付', color: '#FF8800', bg: '#fff7e6' },
+ 'paid': { label: '审核中', color: '#1677ff', bg: '#e6f4ff' },
+ 'paid-ok': { label: '审核通过', color: '#00C4A7', bg: '#e6faf5' },
+ 'paid-fail': { label: '审核驳回', color: '#FF4D4F', bg: '#fff1f0' },
+ 'integrating': { label: '技术对接', color: '#1677ff', bg: '#e6f4ff' },
+ 'curing': { label: '熟化中', color: '#FF8800', bg: '#fff7e6' },
+ 'running': { label: '运行中', color: '#00C4A7', bg: '#e6faf5' },
+ 'fault': { label: '故障', color: '#FF4D4F', bg: '#fff1f0' },
+ 'repairing': { label: '维修中', color: '#FF8800', bg: '#fff7e6' }
+}
diff --git a/src/utils/order.mjs b/src/utils/order.mjs
new file mode 100644
index 0000000..58b9ce6
--- /dev/null
+++ b/src/utils/order.mjs
@@ -0,0 +1,4 @@
+/** 仅以实际回执地址判断是否已经上传或选择回执。 */
+export function hasUploadedReceipt(receiptPath) {
+ return Boolean(receiptPath)
+}
diff --git a/src/utils/request.js b/src/utils/request.js
new file mode 100644
index 0000000..3001183
--- /dev/null
+++ b/src/utils/request.js
@@ -0,0 +1,91 @@
+import { getToken, removeToken } from '@/utils/auth'
+
+// #ifdef MP-WEIXIN
+const baseURL = 'https://qxy.trhinoai.com/api'
+// #endif
+// #ifndef MP-WEIXIN
+const baseURL = '/api'
+// #endif
+
+const request = (options) => {
+ return new Promise((resolve, reject) => {
+ const token = getToken()
+ const showLoading = options.showLoading !== false
+
+ if (showLoading) {
+ uni.showLoading({ title: '加载中...', mask: true })
+ }
+
+ uni.request({
+ url: baseURL + options.url,
+ method: options.method || 'GET',
+ data: options.data || {},
+ params: options.params || {},
+ header: {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': token ? `Bearer ${token}` : '',
+ ...options.header
+ },
+ success: (res) => {
+ if (showLoading) uni.hideLoading()
+
+ if (res.statusCode === 200 || res.statusCode === 201) {
+ resolve(res.data)
+ } else if (res.statusCode === 401) {
+ // 无 token 时不提示(未登录状态静默失败)
+ if (token) {
+ removeToken()
+ uni.showToast({ title: '登录已过期,请重新登录', icon: 'none' })
+ setTimeout(() => {
+ uni.reLaunch({ url: '/pages/login/index' })
+ }, 1500)
+ }
+ reject(res)
+ } else if (res.statusCode === 403) {
+ uni.showToast({ title: '无权限操作', icon: 'none' })
+ reject(res)
+ } else if (res.statusCode === 422) {
+ // 优先取业务 message(如"推荐码无效""验证码错误"),无则取验证 errors
+ const firstError = res.data.message
+ || Object.values(res.data.errors || {})[0]?.[0]
+ || '参数错误'
+ uni.showToast({ title: firstError, icon: 'none' })
+ reject(res)
+ } else if (res.statusCode === 500) {
+ uni.showToast({ title: '服务器错误,请稍后重试', icon: 'none' })
+ reject(res)
+ } else {
+ uni.showToast({ title: res.data.message || '请求失败', icon: 'none' })
+ reject(res)
+ }
+ },
+ fail: (err) => {
+ if (showLoading) uni.hideLoading()
+ uni.showToast({ title: '网络错误,请检查网络连接', icon: 'none' })
+ reject(err)
+ }
+ })
+ })
+}
+
+request.get = (url, options = {}) => {
+ const { showLoading, header, ...params } = options
+ return request({ url, method: 'GET', data: params, ...(showLoading !== undefined ? { showLoading } : {}), ...(header ? { header } : {}) })
+}
+
+request.post = (url, data, options = {}) => {
+ return request({ url, method: 'POST', data, ...options })
+}
+
+request.put = (url, data, options = {}) => {
+ return request({ url, method: 'PUT', data, ...options })
+}
+
+request.delete = (url, options = {}) => {
+ return request({ url, method: 'DELETE', ...options })
+}
+
+request.baseURL = baseURL
+
+export default request
diff --git a/src/utils/richText.mjs b/src/utils/richText.mjs
new file mode 100644
index 0000000..d84d2a0
--- /dev/null
+++ b/src/utils/richText.mjs
@@ -0,0 +1,24 @@
+const RESPONSIVE_IMAGE_STYLE = 'width:100%;max-width:100%;height:auto;box-sizing:border-box;display:block;'
+
+/** 为小程序 rich-text 图片注入内联响应式样式。 */
+export function normalizeRichTextImages(html = '') {
+ return html.replace(/
]*>/gi, (tag) => {
+ let normalized = tag.replace(/\s+(?:width|height)\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi, '')
+ const stylePattern = /\s+style\s*=\s*(["'])(.*?)\1/i
+ const styleMatch = normalized.match(stylePattern)
+
+ if (styleMatch) {
+ const preservedStyle = styleMatch[2]
+ .split(';')
+ .map((item) => item.trim())
+ .filter((item) => item && !/^(?:width|max-width|height|box-sizing|display)\s*:/i.test(item))
+ .map((item) => `${item};`)
+ .join('')
+ return normalized.replace(stylePattern, ` style=${styleMatch[1]}${RESPONSIVE_IMAGE_STYLE}${preservedStyle}${styleMatch[1]}`)
+ }
+
+ const closing = normalized.endsWith('/>') ? '/>' : '>'
+ normalized = normalized.slice(0, -closing.length).trimEnd()
+ return `${normalized} style="${RESPONSIVE_IMAGE_STYLE}"${closing}`
+ })
+}
diff --git a/src/utils/util.js b/src/utils/util.js
new file mode 100644
index 0000000..74777fd
--- /dev/null
+++ b/src/utils/util.js
@@ -0,0 +1,93 @@
+/**
+ * 相对时间(几分钟前、几小时前、昨天、几天前)
+ */
+export const timeAgo = (dateStr) => {
+ if (!dateStr) return ''
+ const now = Date.now()
+ const diff = now - new Date(dateStr).getTime()
+ const seconds = Math.floor(diff / 1000)
+ if (seconds < 60) return '刚刚'
+ const minutes = Math.floor(seconds / 60)
+ if (minutes < 60) return minutes + '分钟前'
+ const hours = Math.floor(minutes / 60)
+ if (hours < 24) return hours + '小时前'
+ const days = Math.floor(hours / 24)
+ if (days === 1) return '昨天'
+ if (days < 7) return days + '天前'
+ return dateStr.slice(0, 10)
+}
+
+const formatNumberWithThousands = (amount) => {
+ if (amount === null || amount === undefined || amount === '' || amount === '--') return '--'
+ const raw = String(amount).replace(/,/g, '').trim()
+ if (!/^-?(?:\d+|\d*\.\d+)$/.test(raw)) return '--'
+ const sign = raw.startsWith('-') ? '-' : ''
+ const [integer, decimal] = raw.replace(/^-/, '').split('.')
+ const formattedInteger = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
+ return sign + formattedInteger + (decimal !== undefined ? '.' + decimal : '')
+}
+
+/**
+ * 格式化金额,保留原始小数并增加千分位
+ */
+export const formatMoney = (amount) => {
+ return formatNumberWithThousands(amount)
+}
+
+/**
+ * 格式化千分位,保留原始小数
+ */
+export const formatThousands = (amount) => {
+ return formatNumberWithThousands(amount)
+}
+
+/**
+ * 复制文本到剪贴板
+ */
+export const copyText = (text, successMsg = '复制成功') => {
+ uni.setClipboardData({
+ data: text,
+ success: () => {
+ uni.showToast({ title: successMsg, icon: 'success' })
+ }
+ })
+}
+
+/**
+ * 时间格式化
+ */
+export const formatTime = (timestamp, format = 'YYYY-MM-DD HH:mm') => {
+ const date = new Date(timestamp)
+ const year = date.getFullYear()
+ const month = String(date.getMonth() + 1).padStart(2, '0')
+ const day = String(date.getDate()).padStart(2, '0')
+ const hour = String(date.getHours()).padStart(2, '0')
+ const minute = String(date.getMinutes()).padStart(2, '0')
+
+ return format
+ .replace('YYYY', year)
+ .replace('MM', month)
+ .replace('DD', day)
+ .replace('HH', hour)
+ .replace('mm', minute)
+}
+
+/**
+ * 设备状态映射
+ */
+export const deviceStatusMap = {
+ running: { label: '运行中', color: '#00C4A7', bg: '#E6FAF5' },
+ stable: { label: '稳定期', color: '#00C4A7', bg: '#E6FAF5' },
+ testing: { label: '压测期', color: '#1677ff', bg: '#E6F4FF' },
+ error: { label: '异常', color: '#FF4D4D', bg: '#FFF1F0' },
+ offline: { label: '离线', color: '#909399', bg: '#F4F4F5' },
+ pending_active: { label: '待激活', color: '#FF8800', bg: '#FFF7E6' },
+ maintaining: { label: '维护中', color: '#FF8800', bg: '#FFF7E6' }
+}
+
+/**
+ * 获取设备状态配置
+ */
+export const getDeviceStatus = (status) => {
+ return deviceStatusMap[status] || { label: '未知', color: '#909399', bg: '#F4F4F5' }
+}
diff --git a/tests/receipt-display.test.mjs b/tests/receipt-display.test.mjs
new file mode 100644
index 0000000..9fe5cfb
--- /dev/null
+++ b/tests/receipt-display.test.mjs
@@ -0,0 +1,13 @@
+import assert from 'node:assert/strict'
+import test from 'node:test'
+
+import { hasUploadedReceipt } from '../src/utils/order.mjs'
+
+test('已取消订单没有回执地址时不视为已上传', () => {
+ assert.equal(hasUploadedReceipt(''), false)
+ assert.equal(hasUploadedReceipt(null), false)
+})
+
+test('存在回执地址时视为已上传', () => {
+ assert.equal(hasUploadedReceipt('https://example.com/receipt.jpg'), true)
+})
diff --git a/tests/rich-text-image.test.mjs b/tests/rich-text-image.test.mjs
new file mode 100644
index 0000000..f84b722
--- /dev/null
+++ b/tests/rich-text-image.test.mjs
@@ -0,0 +1,19 @@
+import assert from 'node:assert/strict'
+import test from 'node:test'
+
+import { normalizeRichTextImages } from '../src/utils/richText.mjs'
+
+test('富文本图片移除固定尺寸并添加响应式内联样式', () => {
+ const html = '正文
'
+ const result = normalizeRichTextImages(html)
+
+ assert.doesNotMatch(result, /width="800"|height="1200"|width:800px|height:1200px/)
+ assert.match(result, /width:100%;max-width:100%;height:auto;box-sizing:border-box;/)
+ assert.match(result, /border-radius:8px;/)
+})
+
+test('非图片富文本保持不变', () => {
+ const html = '普通正文
'
+
+ assert.equal(normalizeRichTextImages(html), html)
+})
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..5671df4
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,32 @@
+import { defineConfig } from 'vite'
+import uni from '@dcloudio/vite-plugin-uni'
+import path from 'path'
+
+export default defineConfig({
+ plugins: [uni()],
+ resolve: {
+ alias: {
+ '@': path.resolve(__dirname, 'src'),
+ },
+ },
+ server: {
+ host: '0.0.0.0',
+ port: 8000,
+ proxy: {
+ '/api': {
+ target: 'http://127.0.0.1:8000',
+ changeOrigin: true,
+ },
+ },
+ },
+ css: {
+ preprocessorOptions: {
+ scss: {
+ // 1. 切换为 Modern API,解决 [legacy-js-api] 警告
+ api: 'modern-compiler',
+ // 2. 静音 [import] 和 [legacy-js-api] 等弃用警告
+ silenceDeprecations: ['legacy-js-api', 'import'],
+ },
+ },
+ },
+})