Эх сурвалжийг харах

Merge branch 'feat/v2' of zkpk/PunchSettle-MiniProgram into master

zkpk 1 жил өмнө
parent
commit
853f8c734d
100 өөрчлөгдсөн 11340 нэмэгдсэн , 5641 устгасан
  1. 21 1
      .gitignore
  2. 0 16
      .hbuilderx/launch.json
  3. 0 8
      .vite/deps/_metadata.json
  4. 0 3
      .vite/deps/package.json
  5. 15 0
      .vscode/launch.json
  6. 16 0
      .vscode/tasks.json
  7. 0 42
      App.vue
  8. 0 95
      README.md
  9. 0 21
      common/style/common-style.scss
  10. 1 1
      index.html
  11. 7963 0
      package-lock.json
  12. 85 34
      package.json
  13. 0 40
      pages.json
  14. 0 216
      pages/detail/detail.vue
  15. 0 456
      pages/index/index.vue
  16. 0 156
      pages/login/login.vue
  17. 0 111
      pages/userInfo/userInfo.vue
  18. 0 9
      service/apis.js
  19. 10 0
      shims-uni.d.ts
  20. 25 0
      src/App.vue
  21. 41 0
      src/common/constants/dict.js
  22. 46 0
      src/common/constants/router.js
  23. 11 0
      src/common/constants/scratch.js
  24. 6 0
      src/common/style/common-style.scss
  25. 43 0
      src/components/dict-item/dict-item.vue
  26. 105 0
      src/components/main-layout/main-layout.vue
  27. 26 0
      src/interceptors/naviInterceptor.js
  28. 10 3
      src/main.js
  29. 0 0
      src/manifest.json
  30. 78 0
      src/pages.json
  31. 948 0
      src/pages/index/index.vue
  32. 182 0
      src/pages/login/login.vue
  33. 424 0
      src/pages/punchin-detail/punchin-detail.vue
  34. 245 0
      src/pages/punchin-edit/punchin-edit.vue
  35. 91 0
      src/pages/reward-record-list/reward-record-list.vue
  36. 187 0
      src/pages/scratch-record-list/scratch-record-list.vue
  37. 89 0
      src/pages/settle-list/settle-list.vue
  38. 226 0
      src/pages/user-info/user-info.vue
  39. 17 0
      src/service/apis.js
  40. 18 0
      src/service/dictApi.js
  41. 0 0
      src/service/loginApi.js
  42. 52 2
      src/service/punchInApi.js
  43. 4 3
      src/service/rewardApi.js
  44. 42 0
      src/service/scratchApi.js
  45. 15 0
      src/service/settleApi.js
  46. 24 0
      src/service/userApi.js
  47. 1 0
      src/static/append-active.svg
  48. 1 0
      src/static/append.svg
  49. 1 0
      src/static/archive-active.svg
  50. 1 0
      src/static/archive.svg
  51. 1 0
      src/static/delete-active.svg
  52. 1 0
      src/static/delete.svg
  53. 0 0
      src/static/edit-active.svg
  54. 0 0
      src/static/edit.svg
  55. 0 0
      src/static/logo.png
  56. 1 0
      src/static/revoke.svg
  57. 1 0
      src/static/revoke_active.svg
  58. 60 0
      src/stores/dict.js
  59. 62 0
      src/stores/safeArea.js
  60. 27 0
      src/stores/userInfo.js
  61. 0 0
      src/uni.promisify.adaptor.js
  62. 1 1
      src/uni.scss
  63. 84 0
      src/utils/date.js
  64. 32 7
      src/utils/request.js
  65. 0 1
      src/utils/system.js
  66. 0 10
      uni_modules/uni-dateformat/changelog.md
  67. 0 200
      uni_modules/uni-dateformat/components/uni-dateformat/date-format.js
  68. 0 88
      uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue
  69. 0 88
      uni_modules/uni-dateformat/package.json
  70. 0 11
      uni_modules/uni-dateformat/readme.md
  71. 0 42
      uni_modules/uni-icons/changelog.md
  72. 0 91
      uni_modules/uni-icons/components/uni-icons/uni-icons.uvue
  73. 0 110
      uni_modules/uni-icons/components/uni-icons/uni-icons.vue
  74. 0 664
      uni_modules/uni-icons/components/uni-icons/uniicons.css
  75. BIN
      uni_modules/uni-icons/components/uni-icons/uniicons.ttf
  76. 0 664
      uni_modules/uni-icons/components/uni-icons/uniicons_file.ts
  77. 0 649
      uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js
  78. 0 89
      uni_modules/uni-icons/package.json
  79. 0 8
      uni_modules/uni-icons/readme.md
  80. 0 92
      uni_modules/uni-popup/changelog.md
  81. 0 45
      uni_modules/uni-popup/components/uni-popup-dialog/keypress.js
  82. 0 316
      uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
  83. 0 143
      uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
  84. 0 187
      uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
  85. 0 7
      uni_modules/uni-popup/components/uni-popup/i18n/en.json
  86. 0 8
      uni_modules/uni-popup/components/uni-popup/i18n/index.js
  87. 0 7
      uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
  88. 0 7
      uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
  89. 0 45
      uni_modules/uni-popup/components/uni-popup/keypress.js
  90. 0 26
      uni_modules/uni-popup/components/uni-popup/popup.js
  91. 0 90
      uni_modules/uni-popup/components/uni-popup/uni-popup.uvue
  92. 0 518
      uni_modules/uni-popup/components/uni-popup/uni-popup.vue
  93. 0 88
      uni_modules/uni-popup/package.json
  94. 0 17
      uni_modules/uni-popup/readme.md
  95. 0 8
      uni_modules/uni-scss/changelog.md
  96. 0 1
      uni_modules/uni-scss/index.scss
  97. 0 82
      uni_modules/uni-scss/package.json
  98. 0 4
      uni_modules/uni-scss/readme.md
  99. 0 7
      uni_modules/uni-scss/styles/index.scss
  100. 0 3
      uni_modules/uni-scss/styles/setting/_border.scss

+ 21 - 1
.gitignore

@@ -1 +1,21 @@
-unpackage/
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+.DS_Store
+dist
+*.local
+
+# Editor directories and files
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 0 - 16
.hbuilderx/launch.json

@@ -1,16 +0,0 @@
-{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
-  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
-    "version": "0.0",
-    "configurations": [{
-     	"default" : 
-     	{
-     		"launchtype" : "local"
-     	},
-     	"mp-weixin" : 
-     	{
-     		"launchtype" : "local"
-     	},
-     	"type" : "uniCloud"
-     }
-    ]
-}

+ 0 - 8
.vite/deps/_metadata.json

@@ -1,8 +0,0 @@
-{
-  "hash": "a71c14d9",
-  "configHash": "6093de83",
-  "lockfileHash": "e3b0c442",
-  "browserHash": "cf76de8f",
-  "optimized": {},
-  "chunks": {}
-}

+ 0 - 3
.vite/deps/package.json

@@ -1,3 +0,0 @@
-{
-  "type": "module"
-}

+ 15 - 0
.vscode/launch.json

@@ -0,0 +1,15 @@
+{
+    // 使用 IntelliSense 了解相关属性。 
+    // 悬停以查看现有属性的描述。
+    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "type": "node-terminal",
+            "name": "SIT测试环境",
+            "request": "launch",
+            "command": "npm run dev:custom wp-sit",
+            "cwd": "${workspaceFolder}"
+        }
+    ]
+}

+ 16 - 0
.vscode/tasks.json

@@ -0,0 +1,16 @@
+{
+	"version": "2.0.0",
+	"tasks": [
+		{
+			"type": "npm",
+			"script": "build:custom wp-prod",
+			"group": {
+				"kind": "build",
+				"isDefault": true
+			},
+			"problemMatcher": [],
+			"label": "生产环境打包",
+			"detail": "npm run build:custom wp-prod"
+		}
+	]
+}

+ 0 - 42
App.vue

@@ -1,42 +0,0 @@
-<script>
-	export default {
-		onLaunch: function() {
-			console.log('App Launch');
-			interceptorInit();
-		},
-		onShow: function() {
-			console.log('App Show')
-		},
-		onHide: function() {
-			console.log('App Hide')
-		},
-		onMounted: function() {
-			console.log('App mounted')
-		},
-		onUnmounted: function() {
-			console.log('App unmounted')
-		}
-	}
-	
-	/**
-	 * 拦截器初始化
-	 */
-	const interceptorInit = () => {
-		uni.addInterceptor('navigateTo', {
-		    invoke(data) {
-		        const token = uni.getStorageSync('token');
-		        if (!token) {
-		            uni.reLaunch({
-		                url: "/pages/login/login"
-		            });
-		            return false; // 阻止跳转
-		        }
-		    }
-		});
-	}
-	
-</script>
-
-<style>
-	/*每个页面公共css */
-</style>

+ 0 - 95
README.md

@@ -8,15 +8,6 @@
 
 
 
-待办列表
-
-* 前端样式和使用细节优化
-* ~~uniapp环境配置分离~~
-* ~~前端开发~~
-* ~~前端原型图设计~~
-
-
-
 ## 全局变量
 
 | 变量         | 描述        |
@@ -24,89 +15,3 @@
 | BASE_API_URL | 后端API地址 |
 
 
-
-## 配置跨域代理(vue3+vite)
-
-配置代理实质是配置vite,因此在根目录下创建一个vite.config.js文件,并添加如下配置
-
-```javascript
-import {
-	defineConfig
-} from 'vite';
-import uni from '@dcloudio/vite-plugin-uni';
-
-export default defineConfig({
-	plugins: [uni()],
-	server: {
-		proxy: {
-			'/api': {
-				target: 'http://localhost:8080',
-				changeOrigin: true,
-				rewrite: (path) => path.replace(/^\/api/, '')
-			}
-		}
-	}
-});
-```
-
-说明:
-
-1. 可以参考uniapp官网的vite.config.js,和vite官网的对应配置
-2. 配置中的proxy代理中的key('/api'),**一定要留意项目的文件或者路径不要要相同名称的**,否则在浏览器发起请求文件资源的时候就会发生替换导致项目出错加载不了页面
-
-
-
-参考
-
-* [在uniapp Vue3版本中如何解决web/H5网页浏览器跨域的问题](https://blog.csdn.net/qq_18798149/article/details/135544336)
-* [【彻底搞懂】vite proxy如何解决跨域问题](https://segmentfault.com/a/1190000043775780)
-
-
-
-## 环境配置分离
-
-按照如下格式,在package.json文件中写入变量即可全局使用即可
-
-```json
-{
-	"uni-app": {
-		"scripts": {
-			"h5-dev": {
-				"title": "H5 开发环境",
-				"browser": "chrome",
-				"env": {
-					"UNI_PLATFORM": "h5",
-					"NAME": "development",
-					"BASE_API_URL": "http://loclhost:8080"
-				}
-			},
-			"h5-sit": {
-				"title": "H5 sit-测试环境",
-				"browser": "chrome",
-				"env": {
-					"UNI_PLATFORM": "h5",
-					"NAME": "development",
-					"BASE_API_URL": "http://192.168.1.41:8080"
-				}
-			}
-		}
-	}
-}
-```
-
-使用方法,运行访问process.env对象
-
-```javascript
-// 运行对应环境后,即可获得对应的配置,例:http://loclhost:8080
-process.env.BASE_API_URL
-```
-
-
-
-
-
-参考
-
-* [uniapp官方文档-package.json](https://uniapp.dcloud.net.cn/collocation/package.html)
-* [uniapp + vue3 + vite 环境变量配置](https://blog.csdn.net/MockingBHM/article/details/138125840)
-* [uniapp-hbuilderX创建 自定义多环境配置,动态修改appid](https://juejin.cn/post/7283311024978821177)

+ 0 - 21
common/style/common-style.scss

@@ -1,21 +0,0 @@
-view {
-	box-sizing: border-box;
-}
-
-.layout-container {
-	display: flex;
-	flex-direction: column;
-	height: 100vh;
-	background: linear-gradient(180deg, #B9D3FF 0%, #F2F7FF 22.23%);
-	
-	.capsule-container {
-		padding-left: 16rpx;
-		padding-right: 16rpx;
-	}
-	
-	.content-container {
-		/* 内容区域占满剩余空间 */
-		flex-grow: 1;
-		padding: 16rpx;
-	}
-}

+ 1 - 1
index.html

@@ -15,6 +15,6 @@
   </head>
   <body>
     <div id="app"><!--app-html--></div>
-    <script type="module" src="/main.js"></script>
+    <script type="module" src="/src/main.js"></script>
   </body>
 </html>

+ 7963 - 0
package-lock.json

@@ -0,0 +1,7963 @@
+{
+  "name": "punch-settle-miniprogram",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "punch-settle-miniprogram",
+      "version": "1.0.0",
+      "dependencies": {
+        "@dcloudio/uni-app": "3.0.0-4030620241128001",
+        "@dcloudio/uni-app-harmony": "3.0.0-4030620241128001",
+        "@dcloudio/uni-app-plus": "3.0.0-4030620241128001",
+        "@dcloudio/uni-components": "3.0.0-4030620241128001",
+        "@dcloudio/uni-h5": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-alipay": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-baidu": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-jd": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-kuaishou": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-lark": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-qq": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-toutiao": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-weixin": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-xhs": "3.0.0-4030620241128001",
+        "@dcloudio/uni-quickapp-webview": "3.0.0-4030620241128001",
+        "@dcloudio/uni-ui": "^1.5.7",
+        "pinia": "^2.3.0",
+        "vue": "3.4.21",
+        "vue-i18n": "9.14.2"
+      },
+      "devDependencies": {
+        "@dcloudio/types": "3.4.14",
+        "@dcloudio/uni-automator": "3.0.0-4030620241128001",
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-stacktracey": "3.0.0-4030620241128001",
+        "@dcloudio/vite-plugin-uni": "3.0.0-4030620241128001",
+        "@vue/runtime-core": "3.5.13",
+        "pinia-plugin-unistorage": "^0.1.2",
+        "sass": "^1.83.0",
+        "sass-loader": "^16.0.4",
+        "vite": "5.2.8"
+      }
+    },
+    "node_modules/@ampproject/remapping": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz",
+      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@antfu/utils": {
+      "version": "0.7.10",
+      "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz",
+      "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/@babel/code-frame": {
+      "version": "7.26.2",
+      "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.26.2.tgz",
+      "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.25.9",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/compat-data": {
+      "version": "7.26.3",
+      "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.26.3.tgz",
+      "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/core": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.26.0.tgz",
+      "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
+      "license": "MIT",
+      "dependencies": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.26.0",
+        "@babel/generator": "^7.26.0",
+        "@babel/helper-compilation-targets": "^7.25.9",
+        "@babel/helper-module-transforms": "^7.26.0",
+        "@babel/helpers": "^7.26.0",
+        "@babel/parser": "^7.26.0",
+        "@babel/template": "^7.25.9",
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.26.0",
+        "convert-source-map": "^2.0.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
+      }
+    },
+    "node_modules/@babel/generator": {
+      "version": "7.26.3",
+      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.26.3.tgz",
+      "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.26.3",
+        "@babel/types": "^7.26.3",
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25",
+        "jsesc": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
+      "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-compilation-targets": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
+      "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.25.9",
+        "@babel/helper-validator-option": "^7.25.9",
+        "browserslist": "^4.24.0",
+        "lru-cache": "^5.1.1",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-create-class-features-plugin": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz",
+      "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.25.9",
+        "@babel/helper-member-expression-to-functions": "^7.25.9",
+        "@babel/helper-optimise-call-expression": "^7.25.9",
+        "@babel/helper-replace-supers": "^7.25.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+        "@babel/traverse": "^7.25.9",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-create-regexp-features-plugin": {
+      "version": "7.26.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz",
+      "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.25.9",
+        "regexpu-core": "^6.2.0",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-define-polyfill-provider": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz",
+      "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-compilation-targets": "^7.22.6",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "debug": "^4.1.1",
+        "lodash.debounce": "^4.0.8",
+        "resolve": "^1.14.2"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/@babel/helper-member-expression-to-functions": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
+      "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-imports": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
+      "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-transforms": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
+      "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.25.9",
+        "@babel/helper-validator-identifier": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-optimise-call-expression": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
+      "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-plugin-utils": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
+      "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-remap-async-to-generator": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz",
+      "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.25.9",
+        "@babel/helper-wrap-function": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-replace-supers": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz",
+      "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-member-expression-to-functions": "^7.25.9",
+        "@babel/helper-optimise-call-expression": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
+      "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+      "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+      "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-option": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
+      "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-wrap-function": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz",
+      "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/template": "^7.25.9",
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.26.0.tgz",
+      "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/template": "^7.25.9",
+        "@babel/types": "^7.26.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.26.3",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.3.tgz",
+      "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.26.3"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz",
+      "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz",
+      "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz",
+      "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz",
+      "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+        "@babel/plugin-transform-optional-chaining": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.13.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz",
+      "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-proposal-private-property-in-object": {
+      "version": "7.21.0-placeholder-for-preset-env.2",
+      "resolved": "https://registry.npmmirror.com/@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,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-assertions": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz",
+      "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-attributes": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
+      "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-meta": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-jsx": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
+      "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-typescript": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz",
+      "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+      "version": "7.18.6",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+      "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-arrow-functions": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz",
+      "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-async-generator-functions": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz",
+      "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-remap-async-to-generator": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-async-to-generator": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz",
+      "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-remap-async-to-generator": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz",
+      "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-block-scoping": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz",
+      "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-class-properties": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz",
+      "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-class-static-block": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz",
+      "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.12.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-classes": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz",
+      "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.25.9",
+        "@babel/helper-compilation-targets": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-replace-supers": "^7.25.9",
+        "@babel/traverse": "^7.25.9",
+        "globals": "^11.1.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-computed-properties": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz",
+      "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/template": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-destructuring": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz",
+      "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-dotall-regex": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz",
+      "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-duplicate-keys": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz",
+      "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz",
+      "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-dynamic-import": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz",
+      "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.26.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz",
+      "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-export-namespace-from": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz",
+      "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-for-of": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz",
+      "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-function-name": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz",
+      "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-compilation-targets": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-json-strings": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz",
+      "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-literals": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz",
+      "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz",
+      "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-member-expression-literals": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz",
+      "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-amd": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz",
+      "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-commonjs": {
+      "version": "7.26.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz",
+      "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.26.0",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-systemjs": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz",
+      "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-validator-identifier": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-umd": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz",
+      "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz",
+      "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-new-target": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz",
+      "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz",
+      "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-numeric-separator": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz",
+      "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-object-rest-spread": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz",
+      "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-compilation-targets": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/plugin-transform-parameters": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-object-super": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz",
+      "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-replace-supers": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-optional-catch-binding": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz",
+      "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-optional-chaining": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz",
+      "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-parameters": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz",
+      "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-private-methods": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz",
+      "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-private-property-in-object": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz",
+      "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.25.9",
+        "@babel/helper-create-class-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-property-literals": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz",
+      "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-regenerator": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz",
+      "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "regenerator-transform": "^0.15.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-regexp-modifiers": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz",
+      "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-reserved-words": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz",
+      "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-shorthand-properties": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz",
+      "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-spread": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz",
+      "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-sticky-regex": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz",
+      "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-template-literals": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz",
+      "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-typeof-symbol": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz",
+      "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-typescript": {
+      "version": "7.26.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz",
+      "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.25.9",
+        "@babel/helper-create-class-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+        "@babel/plugin-syntax-typescript": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-escapes": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz",
+      "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-property-regex": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz",
+      "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-regex": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz",
+      "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz",
+      "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/preset-env": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.26.0.tgz",
+      "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.26.0",
+        "@babel/helper-compilation-targets": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-validator-option": "^7.25.9",
+        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9",
+        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9",
+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9",
+        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9",
+        "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+        "@babel/plugin-syntax-import-assertions": "^7.26.0",
+        "@babel/plugin-syntax-import-attributes": "^7.26.0",
+        "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+        "@babel/plugin-transform-arrow-functions": "^7.25.9",
+        "@babel/plugin-transform-async-generator-functions": "^7.25.9",
+        "@babel/plugin-transform-async-to-generator": "^7.25.9",
+        "@babel/plugin-transform-block-scoped-functions": "^7.25.9",
+        "@babel/plugin-transform-block-scoping": "^7.25.9",
+        "@babel/plugin-transform-class-properties": "^7.25.9",
+        "@babel/plugin-transform-class-static-block": "^7.26.0",
+        "@babel/plugin-transform-classes": "^7.25.9",
+        "@babel/plugin-transform-computed-properties": "^7.25.9",
+        "@babel/plugin-transform-destructuring": "^7.25.9",
+        "@babel/plugin-transform-dotall-regex": "^7.25.9",
+        "@babel/plugin-transform-duplicate-keys": "^7.25.9",
+        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9",
+        "@babel/plugin-transform-dynamic-import": "^7.25.9",
+        "@babel/plugin-transform-exponentiation-operator": "^7.25.9",
+        "@babel/plugin-transform-export-namespace-from": "^7.25.9",
+        "@babel/plugin-transform-for-of": "^7.25.9",
+        "@babel/plugin-transform-function-name": "^7.25.9",
+        "@babel/plugin-transform-json-strings": "^7.25.9",
+        "@babel/plugin-transform-literals": "^7.25.9",
+        "@babel/plugin-transform-logical-assignment-operators": "^7.25.9",
+        "@babel/plugin-transform-member-expression-literals": "^7.25.9",
+        "@babel/plugin-transform-modules-amd": "^7.25.9",
+        "@babel/plugin-transform-modules-commonjs": "^7.25.9",
+        "@babel/plugin-transform-modules-systemjs": "^7.25.9",
+        "@babel/plugin-transform-modules-umd": "^7.25.9",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9",
+        "@babel/plugin-transform-new-target": "^7.25.9",
+        "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9",
+        "@babel/plugin-transform-numeric-separator": "^7.25.9",
+        "@babel/plugin-transform-object-rest-spread": "^7.25.9",
+        "@babel/plugin-transform-object-super": "^7.25.9",
+        "@babel/plugin-transform-optional-catch-binding": "^7.25.9",
+        "@babel/plugin-transform-optional-chaining": "^7.25.9",
+        "@babel/plugin-transform-parameters": "^7.25.9",
+        "@babel/plugin-transform-private-methods": "^7.25.9",
+        "@babel/plugin-transform-private-property-in-object": "^7.25.9",
+        "@babel/plugin-transform-property-literals": "^7.25.9",
+        "@babel/plugin-transform-regenerator": "^7.25.9",
+        "@babel/plugin-transform-regexp-modifiers": "^7.26.0",
+        "@babel/plugin-transform-reserved-words": "^7.25.9",
+        "@babel/plugin-transform-shorthand-properties": "^7.25.9",
+        "@babel/plugin-transform-spread": "^7.25.9",
+        "@babel/plugin-transform-sticky-regex": "^7.25.9",
+        "@babel/plugin-transform-template-literals": "^7.25.9",
+        "@babel/plugin-transform-typeof-symbol": "^7.25.9",
+        "@babel/plugin-transform-unicode-escapes": "^7.25.9",
+        "@babel/plugin-transform-unicode-property-regex": "^7.25.9",
+        "@babel/plugin-transform-unicode-regex": "^7.25.9",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.25.9",
+        "@babel/preset-modules": "0.1.6-no-external-plugins",
+        "babel-plugin-polyfill-corejs2": "^0.4.10",
+        "babel-plugin-polyfill-corejs3": "^0.10.6",
+        "babel-plugin-polyfill-regenerator": "^0.6.1",
+        "core-js-compat": "^3.38.1",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/preset-modules": {
+      "version": "0.1.6-no-external-plugins",
+      "resolved": "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+      "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/types": "^7.4.4",
+        "esutils": "^2.0.2"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/@babel/runtime": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.26.0.tgz",
+      "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
+      "license": "MIT",
+      "dependencies": {
+        "regenerator-runtime": "^0.14.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/template": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.25.9.tgz",
+      "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.25.9",
+        "@babel/parser": "^7.25.9",
+        "@babel/types": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse": {
+      "version": "7.26.4",
+      "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.26.4.tgz",
+      "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.26.2",
+        "@babel/generator": "^7.26.3",
+        "@babel/parser": "^7.26.3",
+        "@babel/template": "^7.25.9",
+        "@babel/types": "^7.26.3",
+        "debug": "^4.3.1",
+        "globals": "^11.1.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.26.3",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.3.tgz",
+      "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.25.9",
+        "@babel/helper-validator-identifier": "^7.25.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@dcloudio/types": {
+      "version": "3.4.14",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/types/-/types-3.4.14.tgz",
+      "integrity": "sha512-VolQeZfTh8pQFsr2IlfIVX93blfvGTuBoJuZUc7iWOqtHV8gDrq6fXLhzsVlgZyuhhRZLOxlo33rkEqnY+ucAw==",
+      "dev": true,
+      "license": "Apache-2.0"
+    },
+    "node_modules/@dcloudio/uni-app": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app/-/uni-app-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-J+hIUT+d2RIIKygO+2tOgHPgWjFtnpTTLLBYd2QsXtxWGDqV2CRvf2FG4KzNf82P46OjUh54O+EJwvAcMFItCg==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cloud": "3.0.0-4030620241128001",
+        "@dcloudio/uni-components": "3.0.0-4030620241128001",
+        "@dcloudio/uni-i18n": "3.0.0-4030620241128001",
+        "@dcloudio/uni-push": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-stat": "3.0.0-4030620241128001",
+        "@vue/shared": "3.4.21"
+      },
+      "peerDependencies": {
+        "@dcloudio/types": "^3.4.14"
+      }
+    },
+    "node_modules/@dcloudio/uni-app-harmony": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-harmony/-/uni-app-harmony-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-T2coKkZawltfsgvaPX8bfAQofmHTpkPiZB8Am3gcnkHRE/Z3NOOlk/Ko5EezuquSulTJvOkMMYcdyZcGZS4TLQ==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-app-vite": "3.0.0-4030620241128001",
+        "debug": "^4.3.3",
+        "fs-extra": "^10.0.0",
+        "licia": "^1.29.0",
+        "postcss-selector-parser": "^6.0.6"
+      }
+    },
+    "node_modules/@dcloudio/uni-app-plus": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-plus/-/uni-app-plus-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-iSWCNQ682XKJ6K4U+hnNFFd/83wFkl66l2RvUNlq9DZalh5LnEO+W1/WqzIdeAr6KKB8gulNkTC+GAbGEOABDQ==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-app-uts": "3.0.0-4030620241128001",
+        "@dcloudio/uni-app-vite": "3.0.0-4030620241128001",
+        "@dcloudio/uni-app-vue": "3.0.0-4030620241128001",
+        "debug": "^4.3.3",
+        "fs-extra": "^10.0.0",
+        "licia": "^1.29.0",
+        "postcss-selector-parser": "^6.0.6"
+      }
+    },
+    "node_modules/@dcloudio/uni-app-uts": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-uts/-/uni-app-uts-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-VM4leJqf50UDR/9MMYAHxnKBNf13gpZWZUe8L11ai3zppubh+J12vaVBYmzAitOPCG6LaGnYSlYp3uxxGiEiLw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/parser": "^7.23.9",
+        "@babel/types": "^7.20.7",
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-i18n": "3.0.0-4030620241128001",
+        "@dcloudio/uni-nvue-styler": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@jridgewell/gen-mapping": "^0.3.3",
+        "@jridgewell/trace-mapping": "^0.3.19",
+        "@rollup/pluginutils": "^5.0.5",
+        "@vue/compiler-core": "3.4.21",
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-sfc": "3.4.21",
+        "@vue/consolidate": "^1.0.0",
+        "@vue/shared": "3.4.21",
+        "debug": "^4.3.3",
+        "es-module-lexer": "^1.2.1",
+        "estree-walker": "^2.0.2",
+        "fs-extra": "^10.0.0",
+        "magic-string": "^0.30.7",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2",
+        "unimport": "^3.11.1"
+      }
+    },
+    "node_modules/@dcloudio/uni-app-vite": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-vite/-/uni-app-vite-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-sPSXJqU9zh26lKMPdDRqVjBH4mjXRLrjQGcUPqPNLTQ2TOBhhJtkmiBIYhhgvYgQ4SZ5zqRwXlBvFvyNxAHitA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-i18n": "3.0.0-4030620241128001",
+        "@dcloudio/uni-nvue-styler": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@rollup/pluginutils": "^5.0.5",
+        "@vitejs/plugin-vue": "5.1.0",
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-sfc": "3.4.21",
+        "debug": "^4.3.3",
+        "fs-extra": "^10.0.0",
+        "picocolors": "^1.0.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-app-vue": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-vue/-/uni-app-vue-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-BxblHfDWWmDW2+9M8TJwKNKCbvlmH0VGJvRYudF46vl7+6sRml/06YBy9KjhTRIY4WetN7IVYuSuA0PbH2HG+w==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/@dcloudio/uni-automator": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-automator/-/uni-automator-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-TsJnM9yaSWTnw8eApaNMpdH/+VNC9rjwLDJ6vyMpsYPCxko7LVQmu6QlAbNYONBFvaM5P63qlbooinPvnue2sA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "address": "^1.1.2",
+        "cross-env": "^7.0.3",
+        "debug": "^4.3.3",
+        "default-gateway": "^6.0.3",
+        "fs-extra": "^10.0.0",
+        "jsonc-parser": "^3.2.0",
+        "licia": "^1.29.0",
+        "merge": "^2.1.1",
+        "qrcode-reader": "^1.0.4",
+        "qrcode-terminal": "^0.12.0",
+        "ws": "^8.4.2"
+      },
+      "peerDependencies": {
+        "jest": "27.0.4",
+        "jest-environment-node": "27.5.1"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-cli-shared/-/uni-cli-shared-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-GidAAGBxpSV+77hPLWAACYJDsrcgRXTay+NNO1HPx4ESlOzuUPh9bFWkZL+D5hYcE0uj9xpwX0rMX4hYxApJEw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@ampproject/remapping": "^2.1.2",
+        "@babel/code-frame": "^7.23.5",
+        "@babel/core": "^7.23.3",
+        "@babel/parser": "^7.23.9",
+        "@babel/types": "^7.20.7",
+        "@dcloudio/uni-i18n": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@intlify/core-base": "9.1.9",
+        "@intlify/shared": "9.1.9",
+        "@intlify/vue-devtools": "9.1.9",
+        "@rollup/pluginutils": "^5.0.5",
+        "@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.12",
+        "autoprefixer": "^10.4.19",
+        "base64url": "^3.0.1",
+        "chokidar": "^3.5.3",
+        "compare-versions": "^3.6.0",
+        "debug": "^4.3.3",
+        "es-module-lexer": "^1.2.1",
+        "esbuild": "^0.20.1",
+        "estree-walker": "^2.0.2",
+        "fast-glob": "^3.2.11",
+        "fs-extra": "^10.0.0",
+        "hash-sum": "^2.0.0",
+        "isbinaryfile": "^5.0.2",
+        "jsonc-parser": "^3.2.0",
+        "lines-and-columns": "^2.0.4",
+        "magic-string": "^0.30.7",
+        "merge": "^2.1.1",
+        "mime": "^3.0.0",
+        "module-alias": "^2.2.2",
+        "os-locale-s-fix": "^1.0.8-fix-1",
+        "picocolors": "^1.0.0",
+        "postcss-import": "^14.0.2",
+        "postcss-load-config": "^3.1.1",
+        "postcss-modules": "^4.3.0",
+        "postcss-selector-parser": "^6.0.6",
+        "resolve": "^1.22.1",
+        "source-map-js": "^1.0.2",
+        "tapable": "^2.2.0",
+        "unplugin-auto-import": "^0.18.2",
+        "xregexp": "3.1.0"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-cloud": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-cloud/-/uni-cloud-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-UcQwaBEoQHlA/SNxFij4kITjbbeNmOsOc3VC3PekNDL2rWvNTnH/H5ZWgTmLGn/7mmBmZfAzoF79c1KlVrHdJg==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-i18n": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/shared": "3.4.21",
+        "fast-glob": "^3.2.11"
+      }
+    },
+    "node_modules/@dcloudio/uni-components": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-components/-/uni-components-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-2yZko6In0XAeEHu9WqOjPj3a5r4wF53KDRRvRoxWBEvKg6byUmVg1NEl68N4cE4sa1I6P99jQO4D/SeI/6Dp7w==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cloud": "3.0.0-4030620241128001",
+        "@dcloudio/uni-h5": "3.0.0-4030620241128001",
+        "@dcloudio/uni-i18n": "3.0.0-4030620241128001"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-h5/-/uni-h5-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-Jo83ICFIx1O22Z8FEw57Lqed/gqWw9sm1yn15R3eoYxYJsRdRqFqB+C3ktKdLMDBXNukuUo0zK8IPTN3GWRefA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-h5-vite": "3.0.0-4030620241128001",
+        "@dcloudio/uni-h5-vue": "3.0.0-4030620241128001",
+        "@dcloudio/uni-i18n": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/server-renderer": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "debug": "^4.3.3",
+        "localstorage-polyfill": "^1.0.1",
+        "postcss-selector-parser": "^6.0.6",
+        "safe-area-insets": "^1.4.1",
+        "vue-router": "^4.3.0",
+        "xmlhttprequest": "^1.8.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-h5-vite/-/uni-h5-vite-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-z3tIO2FPQapUV6pj42cvNBrc6Uk2sH54GIC7uxdOGM2n3MWQJccycYaXqATLaMUFIHlHwQP4l+Ozw0dqTzc2mQ==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@rollup/pluginutils": "^5.0.5",
+        "@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.3",
+        "fs-extra": "^10.0.0",
+        "mime": "^3.0.0",
+        "module-alias": "^2.2.2"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-h5-vue/-/uni-h5-vue-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-9fFUYXA30IlgSrNKv5WIP6ksKMaCycEjx6Zo64Tlfyz/8sK6HSQSbL/JE8TawCreci8JgreGOCLBESYXpqmKDA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/server-renderer": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-i18n": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-i18n/-/uni-i18n-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-0AMRvaQ1rxWceNoqkasosiOm9VY/CAziLohtD6WFYqvbn3U/rDy1cne8VpWcDItkNUFS8+mUIIVxp4RW09dtWw==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/@dcloudio/uni-mp-alipay": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-alipay/-/uni-mp-alipay-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-D48x7NOwv6HhTHTnJ09BXA/kMflA+QrB2PTVDL8DhW5BUPsB8njRPwh3IHD1BBMKCmKKunEzCp5JLSq+7ZBJ7g==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vite": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/compiler-core": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-baidu": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-baidu/-/uni-mp-baidu-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-drjDb8AztZJFVmS+0e9g5a3XfwC0a4kjWk3usPMtOYf9DitwRR4p0vmCLv7MfBP//BzqXWrpYY/RaJVJ8A+H5Q==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vite": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-weixin": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/compiler-core": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "jimp": "^0.10.1",
+        "licia": "^1.29.0",
+        "qrcode-reader": "^1.0.4",
+        "qrcode-terminal": "^0.12.0",
+        "ws": "^8.4.2"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-compiler": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-compiler/-/uni-mp-compiler-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-3ZkA/GAlvI/cTPm0zrhf3AHmROA3FXxb1XExdBX6LXY2XIY2psXm5ZFl1N9P3qPI6kEIPqu1H6Od51xfu8PxIg==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/generator": "^7.20.5",
+        "@babel/parser": "^7.23.9",
+        "@babel/types": "^7.20.7",
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/compiler-core": "3.4.21",
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "estree-walker": "^2.0.2"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-jd": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-jd/-/uni-mp-jd-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-CDGj5kaU3ubjEqHjMLgMS7vjRXbQa8Kj49s48ODfxqY3gLQH2seMQ4SDw/b82I4UsYmMIAugfawTKBG3LY/DeA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vite": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-kuaishou": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-kuaishou/-/uni-mp-kuaishou-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-vLJCV3R7sFZj8r4u70Lj5tGzzi7qbJXarrKYkR/xV4/oFQLy9ls5qlXHwj29S0N3qnazqhNMCKg+Ee8/jkatpg==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vite": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-weixin": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/compiler-core": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-lark": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-lark/-/uni-mp-lark-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-7xgnRZwsJKwVxyPQlwtnOYW4pZTDq9AFI2dbxWtVLR6PrGO/HnsxbDp8+dkLwL0OxM9LtnvP/uA57uPgTQmm7g==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-toutiao": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vite": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/compiler-core": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-qq": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-qq/-/uni-mp-qq-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-3ow3Dtrne/k04GvSDGKjfbVcI6EQGEui6ag9//6StalJfCD5kXco5MjAl4EYhVTyKLSCsrsvWNdmUAfDdzWREw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vite": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/shared": "3.4.21",
+        "fs-extra": "^10.0.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-toutiao": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-toutiao/-/uni-mp-toutiao-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-rZVrPIYFiQGfFgm5+1v3SlHUcl7pwfTl2UIEj+Fy98v6kYXoE1yb2AIC9R5t/35QLMXi9yGr7Lg36lp8OoW35w==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vite": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/compiler-core": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-vite": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-vite/-/uni-mp-vite-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-j0J9PIIE02sNJKhmErNHdB6VjCD/YipeP4qgLACymPnUzD3yZK8x7m4qufLyDPifuUXgvuNvVMhzAz/38RtJXA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-i18n": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-sfc": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "debug": "^4.3.3"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-vue": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-vue/-/uni-mp-vue-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-el5ZV62PK4KMhn3kyoAZWsFsDdHVXdTHVtTw++gzzG5PPIdCYgPtGGNZoJO0ZgPWfgtWw9MCoYRqdjFWSOmgBg==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-weixin": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-weixin/-/uni-mp-weixin-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-G3aw7dZUxpO3AvAX8gHbT9fq1LMn++GpE3rHRlXhrE9F+C9eVrRtwqt9EdVszZvJJu8X9aSK9kvaLFFgdSUGiw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vite": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/shared": "3.4.21",
+        "jimp": "^0.10.1",
+        "licia": "^1.29.0",
+        "qrcode-reader": "^1.0.4",
+        "qrcode-terminal": "^0.12.0",
+        "ws": "^8.4.2"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-xhs": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-xhs/-/uni-mp-xhs-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-lD7XL0FZZxPBmFDOiia/oEa2VTA0m2RqBq1WtnSwSeA0C81LFqutpObaA8+XBrIYVqeXs+9golW0Y1a8/FYAMA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vite": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-nvue-styler": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-nvue-styler/-/uni-nvue-styler-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-SNSc5Pw3ekSI0SJ4K9bnbo3KCU3bKsqchLzeeMXe/4WbAs0NkTwoNf6UdzajMo15hsBDu2lJEIU9TsS0GcgZ5A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "parse-css-font": "^4.0.0",
+        "postcss": "^8.4.35"
+      }
+    },
+    "node_modules/@dcloudio/uni-push": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-push/-/uni-push-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-zp5P9KY/pXV7mqFC1lsfqwt0sqT4cRKfS7vgyWb4CRiz4dwxhgFkQwIVyCNhpb1idzyEeK++HWf7dPDO/qU+8A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001"
+      }
+    },
+    "node_modules/@dcloudio/uni-quickapp-webview": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-quickapp-webview/-/uni-quickapp-webview-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-scgFTl3PEzDQ6pIu2OZ2GlD9lD+fkfw5f9G57qEqFAH/YXYdXQz9JMD8dSa14e99Mk5FHu22sBW+n01jlJZ3lw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vite": "3.0.0-4030620241128001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-shared": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-shared/-/uni-shared-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-GrfljYl+hEfRaZZNlAzT35NVK6P4MBg9xMN+bNT2ALLwCt6pL/9tJZLask302sOSjOgjhAzaN9qNdVKCDo0H0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-stacktracey": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-stacktracey/-/uni-stacktracey-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-LJiiKBYYtHME4m0nAPM4VswPXxUopkx3XXkeHBQzEvNGGZZzxrDPpwZavpsifbJml5a47KOO9PsmoBiZymIxqQ==",
+      "dev": true,
+      "license": "Apache-2.0"
+    },
+    "node_modules/@dcloudio/uni-stat": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-stat/-/uni-stat-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-0WCvT+FIKxy1MNryK5nhKH1sBZchu5KTWv/nVZo+NmTwsvcdUf4rWei3DYq6Qo0ehBasVeW8nIIYoAwB7pDQsw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "debug": "^4.3.3"
+      }
+    },
+    "node_modules/@dcloudio/uni-ui": {
+      "version": "1.5.7",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-ui/-/uni-ui-1.5.7.tgz",
+      "integrity": "sha512-DugxSIrQrze1FLdUOj9a+JEQ0bHGjnJTcGUK1mN/MivKg7nuKJBRWk5Ipa9sUdoBznX6ndz5h2e7Uao6x1CdCw==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/@dcloudio/vite-plugin-uni": {
+      "version": "3.0.0-4030620241128001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/vite-plugin-uni/-/vite-plugin-uni-3.0.0-4030620241128001.tgz",
+      "integrity": "sha512-sXIuBQz/j/aUDc+uSJuTozUj8W6Wy6dtC1S7oS95yLqacNOrzAhITfNWpmY51Zff7NXIt4bp+V++awDo0wnLsg==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/core": "^7.23.3",
+        "@babel/plugin-syntax-import-meta": "^7.10.4",
+        "@babel/plugin-transform-typescript": "^7.23.3",
+        "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+        "@dcloudio/uni-shared": "3.0.0-4030620241128001",
+        "@rollup/pluginutils": "^5.0.5",
+        "@vitejs/plugin-legacy": "5.3.2",
+        "@vitejs/plugin-vue": "5.1.0",
+        "@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.3",
+        "estree-walker": "^2.0.2",
+        "express": "^4.17.1",
+        "fast-glob": "^3.2.11",
+        "fs-extra": "^10.0.0",
+        "hash-sum": "^2.0.0",
+        "jsonc-parser": "^3.2.0",
+        "magic-string": "^0.30.7",
+        "picocolors": "^1.0.0",
+        "terser": "^5.4.0",
+        "unplugin-auto-import": "^0.18.2"
+      },
+      "bin": {
+        "uni": "bin/uni.js"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "vite": "^5.2.8"
+      }
+    },
+    "node_modules/@esbuild/aix-ppc64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
+      "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
+      "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/android-arm64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
+      "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/android-x64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
+      "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/darwin-arm64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
+      "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/darwin-x64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
+      "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
+      "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/freebsd-x64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
+      "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-arm": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
+      "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-arm64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
+      "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-ia32": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
+      "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
+      "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-mips64el": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
+      "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
+      "cpu": [
+        "mips64el"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-ppc64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
+      "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-riscv64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
+      "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
+      "cpu": [
+        "riscv64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-s390x": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
+      "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
+      "cpu": [
+        "s390x"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-x64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
+      "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/netbsd-x64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
+      "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/openbsd-x64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
+      "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/sunos-x64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
+      "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/win32-arm64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
+      "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/win32-ia32": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
+      "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
+      "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@intlify/core-base": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.1.9.tgz",
+      "integrity": "sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==",
+      "license": "MIT",
+      "dependencies": {
+        "@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"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/devtools-if": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.1.9.tgz",
+      "integrity": "sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/shared": "9.1.9"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/message-compiler": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.1.9.tgz",
+      "integrity": "sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/shared": "9.1.9",
+        "source-map": "0.6.1"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/message-resolver": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/message-resolver/-/message-resolver-9.1.9.tgz",
+      "integrity": "sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/runtime": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/runtime/-/runtime-9.1.9.tgz",
+      "integrity": "sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==",
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/message-compiler": "9.1.9",
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/shared": "9.1.9"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/shared": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.1.9.tgz",
+      "integrity": "sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/vue-devtools": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz",
+      "integrity": "sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==",
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/runtime": "9.1.9",
+        "@intlify/shared": "9.1.9"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@jimp/bmp": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/bmp/-/bmp-0.10.3.tgz",
+      "integrity": "sha512-keMOc5woiDmONXsB/6aXLR4Z5Q+v8lFq3EY2rcj2FmstbDMhRuGbmcBxlEgOqfRjwvtf/wOtJ3Of37oAWtVfLg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "bmp-js": "^0.1.0",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/core": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/core/-/core-0.10.3.tgz",
+      "integrity": "sha512-Gd5IpL3U2bFIO57Fh/OA3HCpWm4uW/pU01E75rI03BXfTdz3T+J7TwvyG1XaqsQ7/DSlS99GXtLQPlfFIe28UA==",
+      "license": "MIT",
+      "dependencies": {
+        "@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"
+      }
+    },
+    "node_modules/@jimp/custom": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/custom/-/custom-0.10.3.tgz",
+      "integrity": "sha512-nZmSI+jwTi5IRyNLbKSXQovoeqsw+D0Jn0SxW08wYQvdkiWA8bTlDQFgQ7HVwCAKBm8oKkDB/ZEo9qvHJ+1gAQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/core": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "node_modules/@jimp/gif": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/gif/-/gif-0.10.3.tgz",
+      "integrity": "sha512-vjlRodSfz1CrUvvrnUuD/DsLK1GHB/yDZXHthVdZu23zYJIW7/WrIiD1IgQ5wOMV7NocfrvPn2iqUfBP81/WWA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "omggif": "^1.0.9"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/jpeg": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/jpeg/-/jpeg-0.10.3.tgz",
+      "integrity": "sha512-AAANwgUZOt6f6P7LZxY9lyJ9xclqutYJlsxt3JbriXUGJgrrFAIkcKcqv1nObgmQASSAQKYaMV9KdHjMlWFKlQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "jpeg-js": "^0.3.4"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-blit": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-blit/-/plugin-blit-0.10.3.tgz",
+      "integrity": "sha512-5zlKlCfx4JWw9qUVC7GI4DzXyxDWyFvgZLaoGFoT00mlXlN75SarlDwc9iZ/2e2kp4bJWxz3cGgG4G/WXrbg3Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-blur": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-blur/-/plugin-blur-0.10.3.tgz",
+      "integrity": "sha512-cTOK3rjh1Yjh23jSfA6EHCHjsPJDEGLC8K2y9gM7dnTUK1y9NNmkFS23uHpyjgsWFIoH9oRh2SpEs3INjCpZhQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-circle": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-circle/-/plugin-circle-0.10.3.tgz",
+      "integrity": "sha512-51GAPIVelqAcfuUpaM5JWJ0iWl4vEjNXB7p4P7SX5udugK5bxXUjO6KA2qgWmdpHuCKtoNgkzWU9fNSuYp7tCA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-color": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-color/-/plugin-color-0.10.3.tgz",
+      "integrity": "sha512-RgeHUElmlTH7vpI4WyQrz6u59spiKfVQbsG/XUzfWGamFSixa24ZDwX/yV/Ts+eNaz7pZeIuv533qmKPvw2ujg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "tinycolor2": "^1.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-contain": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-contain/-/plugin-contain-0.10.3.tgz",
+      "integrity": "sha512-bYJKW9dqzcB0Ihc6u7jSyKa3juStzbLs2LFr6fu8TzA2WkMS/R8h+ddkiO36+F9ILTWHP0CIA3HFe5OdOGcigw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-blit": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5",
+        "@jimp/plugin-scale": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-cover": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-cover/-/plugin-cover-0.10.3.tgz",
+      "integrity": "sha512-pOxu0cM0BRPzdV468n4dMocJXoMbTnARDY/EpC3ZW15SpMuc/dr1KhWQHgoQX5kVW1Wt8zgqREAJJCQ5KuPKDA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-crop": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5",
+        "@jimp/plugin-scale": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-crop": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-crop/-/plugin-crop-0.10.3.tgz",
+      "integrity": "sha512-nB7HgOjjl9PgdHr076xZ3Sr6qHYzeBYBs9qvs3tfEEUeYMNnvzgCCGtUl6eMakazZFCMk3mhKmcB9zQuHFOvkg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-displace": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-displace/-/plugin-displace-0.10.3.tgz",
+      "integrity": "sha512-8t3fVKCH5IVqI4lewe4lFFjpxxr69SQCz5/tlpDLQZsrNScNJivHdQ09zljTrVTCSgeCqQJIKgH2Q7Sk/pAZ0w==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-dither": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-dither/-/plugin-dither-0.10.3.tgz",
+      "integrity": "sha512-JCX/oNSnEg1kGQ8ffZ66bEgQOLCY3Rn+lrd6v1jjLy/mn9YVZTMsxLtGCXpiCDC2wG/KTmi4862ysmP9do9dAQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-fisheye": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.10.3.tgz",
+      "integrity": "sha512-RRZb1wqe+xdocGcFtj2xHU7sF7xmEZmIa6BmrfSchjyA2b32TGPWKnP3qyj7p6LWEsXn+19hRYbjfyzyebPElQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-flip": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-flip/-/plugin-flip-0.10.3.tgz",
+      "integrity": "sha512-0epbi8XEzp0wmSjoW9IB0iMu0yNF17aZOxLdURCN3Zr+8nWPs5VNIMqSVa1Y62GSyiMDpVpKF/ITiXre+EqrPg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-rotate": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-gaussian": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.10.3.tgz",
+      "integrity": "sha512-25eHlFbHUDnMMGpgRBBeQ2AMI4wsqCg46sue0KklI+c2BaZ+dGXmJA5uT8RTOrt64/K9Wz5E+2n7eBnny4dfpQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-invert": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-invert/-/plugin-invert-0.10.3.tgz",
+      "integrity": "sha512-effYSApWY/FbtlzqsKXlTLkgloKUiHBKjkQnqh5RL4oQxh/33j6aX+HFdDyQKtsXb8CMd4xd7wyiD2YYabTa0g==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-mask": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-mask/-/plugin-mask-0.10.3.tgz",
+      "integrity": "sha512-twrg8q8TIhM9Z6Jcu9/5f+OCAPaECb0eKrrbbIajJqJ3bCUlj5zbfgIhiQIzjPJ6KjpnFPSqHQfHkU1Vvk/nVw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-normalize": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-normalize/-/plugin-normalize-0.10.3.tgz",
+      "integrity": "sha512-xkb5eZI/mMlbwKkDN79+1/t/+DBo8bBXZUMsT4gkFgMRKNRZ6NQPxlv1d3QpRzlocsl6UMxrHnhgnXdLAcgrXw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-print": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-print/-/plugin-print-0.10.3.tgz",
+      "integrity": "sha512-wjRiI6yjXsAgMe6kVjizP+RgleUCLkH256dskjoNvJzmzbEfO7xQw9g6M02VET+emnbY0CO83IkrGm2q43VRyg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "load-bmfont": "^1.4.0"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-blit": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-resize": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-resize/-/plugin-resize-0.10.3.tgz",
+      "integrity": "sha512-rf8YmEB1d7Sg+g4LpqF0Mp+dfXfb6JFJkwlAIWPUOR7lGsPWALavEwTW91c0etEdnp0+JB9AFpy6zqq7Lwkq6w==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-rotate": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-rotate/-/plugin-rotate-0.10.3.tgz",
+      "integrity": "sha512-YXLlRjm18fkW9MOHUaVAxWjvgZM851ofOipytz5FyKp4KZWDLk+dZK1JNmVmK7MyVmAzZ5jsgSLhIgj+GgN0Eg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-blit": ">=0.3.5",
+        "@jimp/plugin-crop": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-scale": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-scale/-/plugin-scale-0.10.3.tgz",
+      "integrity": "sha512-5DXD7x7WVcX1gUgnlFXQa8F+Q3ThRYwJm+aesgrYvDOY+xzRoRSdQvhmdd4JEEue3lyX44DvBSgCIHPtGcEPaw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-shadow": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-shadow/-/plugin-shadow-0.10.3.tgz",
+      "integrity": "sha512-/nkFXpt2zVcdP4ETdkAUL0fSzyrC5ZFxdcphbYBodqD7fXNqChS/Un1eD4xCXWEpW8cnG9dixZgQgStjywH0Mg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-blur": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-threshold": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-threshold/-/plugin-threshold-0.10.3.tgz",
+      "integrity": "sha512-Dzh0Yq2wXP2SOnxcbbiyA4LJ2luwrdf1MghNIt9H+NX7B+IWw/N8qA2GuSm9n4BPGSLluuhdAWJqHcTiREriVA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-color": ">=0.8.0",
+        "@jimp/plugin-resize": ">=0.8.0"
+      }
+    },
+    "node_modules/@jimp/plugins": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugins/-/plugins-0.10.3.tgz",
+      "integrity": "sha512-jTT3/7hOScf0EIKiAXmxwayHhryhc1wWuIe3FrchjDjr9wgIGNN2a7XwCgPl3fML17DXK1x8EzDneCdh261bkw==",
+      "license": "MIT",
+      "dependencies": {
+        "@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"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/png": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/png/-/png-0.10.3.tgz",
+      "integrity": "sha512-YKqk/dkl+nGZxSYIDQrqhmaP8tC3IK8H7dFPnnzFVvbhDnyYunqBZZO3SaZUKTichClRw8k/CjBhbc+hifSGWg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "pngjs": "^3.3.3"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/tiff": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/tiff/-/tiff-0.10.3.tgz",
+      "integrity": "sha512-7EsJzZ5Y/EtinkBGuwX3Bi4S+zgbKouxjt9c82VJTRJOQgLWsE/RHqcyRCOQBhHAZ9QexYmDz34medfLKdoX0g==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "core-js": "^3.4.1",
+        "utif": "^2.0.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/types": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/types/-/types-0.10.3.tgz",
+      "integrity": "sha512-XGmBakiHZqseSWr/puGN+CHzx0IKBSpsKlmEmsNV96HKDiP6eu8NSnwdGCEq2mmIHe0JNcg1hqg59hpwtQ7Tiw==",
+      "license": "MIT",
+      "dependencies": {
+        "@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"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/utils": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/utils/-/utils-0.10.3.tgz",
+      "integrity": "sha512-VcSlQhkil4ReYmg1KkN+WqHyYfZ2XfZxDsKAHSfST1GEz/RQHxKZbX+KhFKtKflnL0F4e6DlNQj3vznMNXCR2w==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "core-js": "^3.4.1",
+        "regenerator-runtime": "^0.13.3"
+      }
+    },
+    "node_modules/@jimp/utils/node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.8",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+      "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/set-array": "^1.2.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/source-map": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+      "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.25",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@parcel/watcher": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.0.tgz",
+      "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "detect-libc": "^1.0.3",
+        "is-glob": "^4.0.3",
+        "micromatch": "^4.0.5",
+        "node-addon-api": "^7.0.0"
+      },
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      },
+      "optionalDependencies": {
+        "@parcel/watcher-android-arm64": "2.5.0",
+        "@parcel/watcher-darwin-arm64": "2.5.0",
+        "@parcel/watcher-darwin-x64": "2.5.0",
+        "@parcel/watcher-freebsd-x64": "2.5.0",
+        "@parcel/watcher-linux-arm-glibc": "2.5.0",
+        "@parcel/watcher-linux-arm-musl": "2.5.0",
+        "@parcel/watcher-linux-arm64-glibc": "2.5.0",
+        "@parcel/watcher-linux-arm64-musl": "2.5.0",
+        "@parcel/watcher-linux-x64-glibc": "2.5.0",
+        "@parcel/watcher-linux-x64-musl": "2.5.0",
+        "@parcel/watcher-win32-arm64": "2.5.0",
+        "@parcel/watcher-win32-ia32": "2.5.0",
+        "@parcel/watcher-win32-x64": "2.5.0"
+      }
+    },
+    "node_modules/@parcel/watcher-android-arm64": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz",
+      "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-darwin-arm64": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz",
+      "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-darwin-x64": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz",
+      "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-freebsd-x64": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz",
+      "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm-glibc": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz",
+      "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm-musl": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz",
+      "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm64-glibc": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz",
+      "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm64-musl": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz",
+      "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-x64-glibc": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz",
+      "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-x64-musl": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz",
+      "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-arm64": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz",
+      "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-ia32": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz",
+      "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-x64": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz",
+      "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@rollup/pluginutils": {
+      "version": "5.1.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz",
+      "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "estree-walker": "^2.0.2",
+        "picomatch": "^4.0.2"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@rollup/rollup-android-arm-eabi": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz",
+      "integrity": "sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-android-arm64": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz",
+      "integrity": "sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-arm64": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz",
+      "integrity": "sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-x64": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz",
+      "integrity": "sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-arm64": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz",
+      "integrity": "sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-x64": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz",
+      "integrity": "sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz",
+      "integrity": "sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz",
+      "integrity": "sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-gnu": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz",
+      "integrity": "sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-musl": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz",
+      "integrity": "sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz",
+      "integrity": "sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz",
+      "integrity": "sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz",
+      "integrity": "sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-s390x-gnu": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz",
+      "integrity": "sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-gnu": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz",
+      "integrity": "sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-musl": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz",
+      "integrity": "sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-arm64-msvc": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz",
+      "integrity": "sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-ia32-msvc": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz",
+      "integrity": "sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-x64-msvc": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz",
+      "integrity": "sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz",
+      "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+      "license": "MIT"
+    },
+    "node_modules/@vitejs/plugin-legacy": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-5.3.2.tgz",
+      "integrity": "sha512-8moCOrIMaZ/Rjln0Q6GsH6s8fAt1JOI3k8nmfX4tXUxE5KAExVctSyOBk+A25GClsdSWqIk2yaUthH3KJ2X4tg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@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"
+      },
+      "engines": {
+        "node": "^18.0.0 || >=20.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/vitejs/vite?sponsor=1"
+      },
+      "peerDependencies": {
+        "terser": "^5.4.0",
+        "vite": "^5.0.0"
+      }
+    },
+    "node_modules/@vitejs/plugin-vue": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.1.0.tgz",
+      "integrity": "sha512-QMRxARyrdiwi1mj3AW4fLByoHTavreXq0itdEW696EihXglf1MB3D4C2gBvE0jMPH29ZjC3iK8aIaUMLf4EOGA==",
+      "license": "MIT",
+      "engines": {
+        "node": "^18.0.0 || >=20.0.0"
+      },
+      "peerDependencies": {
+        "vite": "^5.0.0",
+        "vue": "^3.2.25"
+      }
+    },
+    "node_modules/@vitejs/plugin-vue-jsx": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz",
+      "integrity": "sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.23.3",
+        "@babel/plugin-transform-typescript": "^7.23.3",
+        "@vue/babel-plugin-jsx": "^1.1.5"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "vite": "^4.0.0 || ^5.0.0",
+        "vue": "^3.0.0"
+      }
+    },
+    "node_modules/@vue/babel-helper-vue-transform-on": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.5.tgz",
+      "integrity": "sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@vue/babel-plugin-jsx": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.5.tgz",
+      "integrity": "sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/plugin-syntax-jsx": "^7.24.7",
+        "@babel/template": "^7.25.0",
+        "@babel/traverse": "^7.25.6",
+        "@babel/types": "^7.25.6",
+        "@vue/babel-helper-vue-transform-on": "1.2.5",
+        "@vue/babel-plugin-resolve-type": "1.2.5",
+        "html-tags": "^3.3.1",
+        "svg-tags": "^1.0.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      },
+      "peerDependenciesMeta": {
+        "@babel/core": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.5.tgz",
+      "integrity": "sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.24.7",
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/parser": "^7.25.6",
+        "@vue/compiler-sfc": "^3.5.3"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-core": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
+      "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.25.3",
+        "@vue/shared": "3.5.13",
+        "entities": "^4.5.0",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.2.0"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-dom": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
+      "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-core": "3.5.13",
+        "@vue/shared": "3.5.13"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-sfc": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz",
+      "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.25.3",
+        "@vue/compiler-core": "3.5.13",
+        "@vue/compiler-dom": "3.5.13",
+        "@vue/compiler-ssr": "3.5.13",
+        "@vue/shared": "3.5.13",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.11",
+        "postcss": "^8.4.48",
+        "source-map-js": "^1.2.0"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-ssr": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
+      "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.13",
+        "@vue/shared": "3.5.13"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/shared": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz",
+      "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@vue/compiler-core": {
+      "version": "3.4.21",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.21.tgz",
+      "integrity": "sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==",
+      "license": "MIT",
+      "dependencies": {
+        "@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"
+      }
+    },
+    "node_modules/@vue/compiler-dom": {
+      "version": "3.4.21",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz",
+      "integrity": "sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-core": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@vue/compiler-sfc": {
+      "version": "3.4.21",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz",
+      "integrity": "sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@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"
+      }
+    },
+    "node_modules/@vue/compiler-ssr": {
+      "version": "3.4.21",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz",
+      "integrity": "sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@vue/consolidate": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/@vue/consolidate/-/consolidate-1.0.0.tgz",
+      "integrity": "sha512-oTyUE+QHIzLw2PpV14GD/c7EohDyP64xCniWTcqcEmTd699eFqTIwOmtDYjcO1j3QgdXoJEoWv1/cCdLrRoOfg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.12.0"
+      }
+    },
+    "node_modules/@vue/devtools-api": {
+      "version": "6.6.4",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
+      "license": "MIT"
+    },
+    "node_modules/@vue/reactivity": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz",
+      "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/shared": "3.5.13"
+      }
+    },
+    "node_modules/@vue/reactivity/node_modules/@vue/shared": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz",
+      "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@vue/runtime-core": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz",
+      "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.5.13",
+        "@vue/shared": "3.5.13"
+      }
+    },
+    "node_modules/@vue/runtime-core/node_modules/@vue/shared": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz",
+      "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@vue/runtime-dom": {
+      "version": "3.4.21",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz",
+      "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/runtime-core": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "csstype": "^3.1.3"
+      }
+    },
+    "node_modules/@vue/runtime-dom/node_modules/@vue/reactivity": {
+      "version": "3.4.21",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.21.tgz",
+      "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@vue/runtime-dom/node_modules/@vue/runtime-core": {
+      "version": "3.4.21",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.21.tgz",
+      "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@vue/server-renderer": {
+      "version": "3.4.21",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.21.tgz",
+      "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.4.21",
+        "@vue/shared": "3.4.21"
+      },
+      "peerDependencies": {
+        "vue": "3.4.21"
+      }
+    },
+    "node_modules/@vue/shared": {
+      "version": "3.4.21",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.21.tgz",
+      "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==",
+      "license": "MIT"
+    },
+    "node_modules/accepts": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz",
+      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mime-types": "~2.1.34",
+        "negotiator": "0.6.3"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/acorn": {
+      "version": "8.14.0",
+      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.0.tgz",
+      "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+      "license": "MIT",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/address": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz",
+      "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
+    "node_modules/adm-zip": {
+      "version": "0.5.16",
+      "resolved": "https://registry.npmmirror.com/adm-zip/-/adm-zip-0.5.16.tgz",
+      "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.0"
+      }
+    },
+    "node_modules/any-base": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/any-base/-/any-base-1.1.0.tgz",
+      "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==",
+      "license": "MIT"
+    },
+    "node_modules/anymatch": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+      "license": "ISC",
+      "dependencies": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/anymatch/node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz",
+      "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/autoprefixer": {
+      "version": "10.4.20",
+      "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.20.tgz",
+      "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "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"
+      },
+      "bin": {
+        "autoprefixer": "bin/autoprefixer"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-corejs2": {
+      "version": "0.4.12",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz",
+      "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.22.6",
+        "@babel/helper-define-polyfill-provider": "^0.6.3",
+        "semver": "^6.3.1"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-corejs3": {
+      "version": "0.10.6",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz",
+      "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-define-polyfill-provider": "^0.6.2",
+        "core-js-compat": "^3.38.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-regenerator": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz",
+      "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-define-polyfill-provider": "^0.6.3"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "license": "MIT"
+    },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/base64url": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/base64url/-/base64url-3.0.1.tgz",
+      "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/binary-extensions": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
+      "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/bmp-js": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmmirror.com/bmp-js/-/bmp-js-0.1.0.tgz",
+      "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==",
+      "license": "MIT"
+    },
+    "node_modules/body-parser": {
+      "version": "1.20.3",
+      "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.3.tgz",
+      "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "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"
+      },
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/body-parser/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/body-parser/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/braces": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+      "license": "MIT",
+      "dependencies": {
+        "fill-range": "^7.1.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/browserslist": {
+      "version": "4.24.3",
+      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.3.tgz",
+      "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001688",
+        "electron-to-chromium": "^1.5.73",
+        "node-releases": "^2.0.19",
+        "update-browserslist-db": "^1.1.1"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/browserslist-to-esbuild": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/browserslist-to-esbuild/-/browserslist-to-esbuild-2.1.1.tgz",
+      "integrity": "sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "meow": "^13.0.0"
+      },
+      "bin": {
+        "browserslist-to-esbuild": "cli/index.js"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "browserslist": "*"
+      }
+    },
+    "node_modules/buffer": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
+    },
+    "node_modules/buffer-equal": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmmirror.com/buffer-equal/-/buffer-equal-0.0.1.tgz",
+      "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/bytes": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz",
+      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/cac": {
+      "version": "6.7.9",
+      "resolved": "https://registry.npmmirror.com/cac/-/cac-6.7.9.tgz",
+      "integrity": "sha512-XN5qEpfNQCJ8jRaZgitSkkukjMRCGio+X3Ks5KUbGGlPbV+pSem1l9VuzooCBXOiMFshUZgyYqg6rgN8rjkb/w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
+      "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/call-bound": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.3.tgz",
+      "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "get-intrinsic": "^1.2.6"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001690",
+      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz",
+      "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "CC-BY-4.0"
+    },
+    "node_modules/centra": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmmirror.com/centra/-/centra-2.7.0.tgz",
+      "integrity": "sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==",
+      "license": "MIT",
+      "dependencies": {
+        "follow-redirects": "^1.15.6"
+      }
+    },
+    "node_modules/chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "license": "MIT",
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.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"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/compare-versions": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/compare-versions/-/compare-versions-3.6.0.tgz",
+      "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==",
+      "license": "MIT"
+    },
+    "node_modules/confbox": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz",
+      "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
+      "license": "MIT"
+    },
+    "node_modules/content-disposition": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz",
+      "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "5.2.1"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/content-type": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",
+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+      "license": "MIT"
+    },
+    "node_modules/cookie": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.1.tgz",
+      "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz",
+      "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/core-js": {
+      "version": "3.39.0",
+      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.39.0.tgz",
+      "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
+    "node_modules/core-js-compat": {
+      "version": "3.39.0",
+      "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.39.0.tgz",
+      "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "browserslist": "^4.24.2"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
+    "node_modules/cross-env": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz",
+      "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cross-spawn": "^7.0.1"
+      },
+      "bin": {
+        "cross-env": "src/bin/cross-env.js",
+        "cross-env-shell": "src/bin/cross-env-shell.js"
+      },
+      "engines": {
+        "node": ">=10.14",
+        "npm": ">=6",
+        "yarn": ">=1"
+      }
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.6",
+      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/css-font-size-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz",
+      "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==",
+      "license": "MIT"
+    },
+    "node_modules/css-font-stretch-keywords": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz",
+      "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==",
+      "license": "MIT"
+    },
+    "node_modules/css-font-style-keywords": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz",
+      "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==",
+      "license": "MIT"
+    },
+    "node_modules/css-font-weight-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz",
+      "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==",
+      "license": "MIT"
+    },
+    "node_modules/css-list-helpers": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/css-list-helpers/-/css-list-helpers-2.0.0.tgz",
+      "integrity": "sha512-9Bj8tZ0jWbAM3u/U6m/boAzAwLPwtjzFvwivr2piSvyVa3K3rChJzQy4RIHkNkKiZCHrEMWDJWtTR8UyVhdDnQ==",
+      "license": "MIT"
+    },
+    "node_modules/css-system-font-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz",
+      "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==",
+      "license": "MIT"
+    },
+    "node_modules/cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "license": "MIT",
+      "bin": {
+        "cssesc": "bin/cssesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+      "license": "MIT"
+    },
+    "node_modules/debug": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz",
+      "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/default-gateway": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz",
+      "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "execa": "^5.0.0"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/depd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
+      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/destroy": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
+      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/detect-libc": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz",
+      "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "bin": {
+        "detect-libc": "bin/detect-libc.js"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/dom-walk": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz",
+      "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
+    },
+    "node_modules/dunder-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.5.75",
+      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.75.tgz",
+      "integrity": "sha512-Lf3++DumRE/QmweGjU+ZcKqQ+3bKkU/qjaKYhIJKEOhgIO9Xs6IiAQFkfFoj+RhgDk4LUeNsLo6plExHqSyu6Q==",
+      "license": "ISC"
+    },
+    "node_modules/encodeurl": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz",
+      "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/es-define-property": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-module-lexer": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+      "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
+      "license": "MIT"
+    },
+    "node_modules/es-object-atoms": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+      "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/esbuild": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.20.2.tgz",
+      "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "optionalDependencies": {
+        "@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"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+      "license": "MIT"
+    },
+    "node_modules/esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/execa": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz",
+      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "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"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/exif-parser": {
+      "version": "0.1.12",
+      "resolved": "https://registry.npmmirror.com/exif-parser/-/exif-parser-0.1.12.tgz",
+      "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw=="
+    },
+    "node_modules/express": {
+      "version": "4.21.2",
+      "resolved": "https://registry.npmmirror.com/express/-/express-4.21.2.tgz",
+      "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "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.7.1",
+        "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.3.1",
+        "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.12",
+        "proxy-addr": "~2.0.7",
+        "qs": "6.13.0",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.2.1",
+        "send": "0.19.0",
+        "serve-static": "1.16.2",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/express"
+      }
+    },
+    "node_modules/express/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/express/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fast-glob": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz",
+      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fastq": {
+      "version": "1.17.1",
+      "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz",
+      "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+      "license": "ISC",
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/file-type": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmmirror.com/file-type/-/file-type-9.0.0.tgz",
+      "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+      "license": "MIT",
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/finalhandler": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.1.tgz",
+      "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "on-finished": "2.4.1",
+        "parseurl": "~1.3.3",
+        "statuses": "2.0.1",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/finalhandler/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/finalhandler/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/follow-redirects": {
+      "version": "1.15.9",
+      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
+      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/RubenVerborgh"
+        }
+      ],
+      "license": "MIT",
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/forwarded": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
+      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/fraction.js": {
+      "version": "4.3.7",
+      "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz",
+      "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "type": "patreon",
+        "url": "https://github.com/sponsors/rawify"
+      }
+    },
+    "node_modules/fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/fs-extra": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz",
+      "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/generic-names": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/generic-names/-/generic-names-4.0.0.tgz",
+      "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==",
+      "license": "MIT",
+      "dependencies": {
+        "loader-utils": "^3.2.0"
+      }
+    },
+    "node_modules/gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.6.tgz",
+      "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "dunder-proto": "^1.0.0",
+        "es-define-property": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "function-bind": "^1.1.2",
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "math-intrinsics": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-stream": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz",
+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/global": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmmirror.com/global/-/global-4.4.0.tgz",
+      "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+      "license": "MIT",
+      "dependencies": {
+        "min-document": "^2.19.0",
+        "process": "^0.11.10"
+      }
+    },
+    "node_modules/globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+      "license": "ISC"
+    },
+    "node_modules/has-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/hash-sum": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz",
+      "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
+      "license": "MIT"
+    },
+    "node_modules/hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/html-tags": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz",
+      "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/http-errors": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz",
+      "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "depd": "2.0.0",
+        "inherits": "2.0.4",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "toidentifier": "1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/human-signals": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz",
+      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=10.17.0"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/icss-replace-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+      "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==",
+      "license": "ISC"
+    },
+    "node_modules/icss-utils": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz",
+      "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
+      "license": "ISC",
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/immutable": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.0.3.tgz",
+      "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/invert-kv": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/invert-kv/-/invert-kv-3.0.1.tgz",
+      "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/invert-kv?sponsor=1"
+      }
+    },
+    "node_modules/ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "license": "MIT",
+      "dependencies": {
+        "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.16.0",
+      "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.0.tgz",
+      "integrity": "sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==",
+      "license": "MIT",
+      "dependencies": {
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-function": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/is-function/-/is-function-1.0.2.tgz",
+      "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
+      "license": "MIT"
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "license": "MIT",
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/is-stream": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz",
+      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/isbinaryfile": {
+      "version": "5.0.4",
+      "resolved": "https://registry.npmmirror.com/isbinaryfile/-/isbinaryfile-5.0.4.tgz",
+      "integrity": "sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 18.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/gjtorikian/"
+      }
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/jimp": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/jimp/-/jimp-0.10.3.tgz",
+      "integrity": "sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@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"
+      }
+    },
+    "node_modules/jimp/node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+      "license": "MIT"
+    },
+    "node_modules/jpeg-js": {
+      "version": "0.3.7",
+      "resolved": "https://registry.npmmirror.com/jpeg-js/-/jpeg-js-0.3.7.tgz",
+      "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "license": "MIT"
+    },
+    "node_modules/jsesc": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz",
+      "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+      "license": "MIT",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "license": "MIT",
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/jsonc-parser": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+      "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+      "license": "MIT"
+    },
+    "node_modules/jsonfile": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",
+      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+      "license": "MIT",
+      "dependencies": {
+        "universalify": "^2.0.0"
+      },
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "node_modules/lcid": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/lcid/-/lcid-3.1.1.tgz",
+      "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==",
+      "license": "MIT",
+      "dependencies": {
+        "invert-kv": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/licia": {
+      "version": "1.46.0",
+      "resolved": "https://registry.npmmirror.com/licia/-/licia-1.46.0.tgz",
+      "integrity": "sha512-Zms2AjJB+KdqUKFF87J5J/w9DwXnGN/lKlbjpRgvaPf0BIQ0mOZ/2lX4E79zwNafHGMUq5RtN54FN6Af5G92cA==",
+      "license": "MIT"
+    },
+    "node_modules/lilconfig": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz",
+      "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/lines-and-columns": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz",
+      "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==",
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/load-bmfont": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmmirror.com/load-bmfont/-/load-bmfont-1.4.2.tgz",
+      "integrity": "sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==",
+      "license": "MIT",
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/load-bmfont/node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "license": "MIT",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/load-bmfont/node_modules/phin": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmmirror.com/phin/-/phin-3.7.1.tgz",
+      "integrity": "sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==",
+      "license": "MIT",
+      "dependencies": {
+        "centra": "^2.7.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/loader-utils": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-3.3.1.tgz",
+      "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 12.13.0"
+      }
+    },
+    "node_modules/local-pkg": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.1.tgz",
+      "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==",
+      "license": "MIT",
+      "dependencies": {
+        "mlly": "^1.7.3",
+        "pkg-types": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/localstorage-polyfill": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/localstorage-polyfill/-/localstorage-polyfill-1.0.1.tgz",
+      "integrity": "sha512-m4iHVZxFH5734oQcPKU08025gIz2+4bjWR9lulP8ZYxEJR0BpA0w32oJmkzh8y3UI9ci7xCBehQDc3oA1X+VHw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/lodash.camelcase": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+      "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+      "license": "MIT"
+    },
+    "node_modules/lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.17",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz",
+      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0"
+      }
+    },
+    "node_modules/math-intrinsics": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/meow": {
+      "version": "13.2.0",
+      "resolved": "https://registry.npmmirror.com/meow/-/meow-13.2.0.tgz",
+      "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/merge": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/merge/-/merge-2.1.1.tgz",
+      "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==",
+      "license": "MIT"
+    },
+    "node_modules/merge-descriptors": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+      "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+      "license": "MIT",
+      "dependencies": {
+        "braces": "^3.0.3",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/micromatch/node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/mime": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/mime/-/mime-3.0.0.tgz",
+      "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
+      "license": "MIT",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mimic-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz",
+      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/min-document": {
+      "version": "2.19.0",
+      "resolved": "https://registry.npmmirror.com/min-document/-/min-document-2.19.0.tgz",
+      "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==",
+      "dependencies": {
+        "dom-walk": "^0.1.0"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/mkdirp": {
+      "version": "0.5.6",
+      "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz",
+      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+      "license": "MIT",
+      "dependencies": {
+        "minimist": "^1.2.6"
+      },
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      }
+    },
+    "node_modules/mlly": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.3.tgz",
+      "integrity": "sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==",
+      "license": "MIT",
+      "dependencies": {
+        "acorn": "^8.14.0",
+        "pathe": "^1.1.2",
+        "pkg-types": "^1.2.1",
+        "ufo": "^1.5.4"
+      }
+    },
+    "node_modules/module-alias": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz",
+      "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==",
+      "license": "MIT"
+    },
+    "node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "license": "MIT"
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.8",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz",
+      "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/negotiator": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz",
+      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/neo-async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/node-addon-api": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz",
+      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.19",
+      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz",
+      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+      "license": "MIT"
+    },
+    "node_modules/normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/normalize-range": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz",
+      "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/npm-run-path": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz",
+      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/object-inspect": {
+      "version": "1.13.3",
+      "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.3.tgz",
+      "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/omggif": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmmirror.com/omggif/-/omggif-1.0.10.tgz",
+      "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==",
+      "license": "MIT"
+    },
+    "node_modules/on-finished": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz",
+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/onetime": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz",
+      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mimic-fn": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/os-locale-s-fix": {
+      "version": "1.0.8-fix-1",
+      "resolved": "https://registry.npmmirror.com/os-locale-s-fix/-/os-locale-s-fix-1.0.8-fix-1.tgz",
+      "integrity": "sha512-Sv0OvhPiMutICiwORAUefv02DCPb62IelBmo8ZsSrRHyI3FStqIWZvjqDkvtjU+lcujo7UNir+dCwKSqlEQ/5w==",
+      "license": "MIT",
+      "dependencies": {
+        "lcid": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10",
+        "yarn": "^1.22.4"
+      }
+    },
+    "node_modules/pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+      "license": "(MIT AND Zlib)"
+    },
+    "node_modules/parse-bmfont-ascii": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
+      "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==",
+      "license": "MIT"
+    },
+    "node_modules/parse-bmfont-binary": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
+      "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==",
+      "license": "MIT"
+    },
+    "node_modules/parse-bmfont-xml": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmmirror.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz",
+      "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==",
+      "license": "MIT",
+      "dependencies": {
+        "xml-parse-from-string": "^1.0.0",
+        "xml2js": "^0.5.0"
+      }
+    },
+    "node_modules/parse-css-font": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/parse-css-font/-/parse-css-font-4.0.0.tgz",
+      "integrity": "sha512-lnY7dTUfjRXsSo5G5C639L8RaBBaVSgL+5hacIFKsNHzeCJQ5SFSZv1DZmc7+wZv/22PFGOq2YbaEHLdaCS/mQ==",
+      "license": "MIT",
+      "dependencies": {
+        "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"
+      }
+    },
+    "node_modules/parse-headers": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/parse-headers/-/parse-headers-2.0.5.tgz",
+      "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==",
+      "license": "MIT"
+    },
+    "node_modules/parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "license": "MIT"
+    },
+    "node_modules/path-to-regexp": {
+      "version": "0.1.12",
+      "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
+      "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/pathe": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz",
+      "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+      "license": "MIT"
+    },
+    "node_modules/phin": {
+      "version": "2.9.3",
+      "resolved": "https://registry.npmmirror.com/phin/-/phin-2.9.3.tgz",
+      "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==",
+      "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
+      "license": "MIT"
+    },
+    "node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "license": "ISC"
+    },
+    "node_modules/picomatch": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",
+      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/pinia": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.3.0.tgz",
+      "integrity": "sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-api": "^6.6.3",
+        "vue-demi": "^0.14.10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/posva"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.4.4",
+        "vue": "^2.7.0 || ^3.5.11"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/pinia-plugin-unistorage": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/pinia-plugin-unistorage/-/pinia-plugin-unistorage-0.1.2.tgz",
+      "integrity": "sha512-WXit2cGnm5rG6CDTcLSLehNWhyJS/Yq7WEeeXAapZbCnqoPJxlszqg7rT8S+OP47az0h5nlajGo+LuyMxUQ2uw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/pixelmatch": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/pixelmatch/-/pixelmatch-4.0.2.tgz",
+      "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==",
+      "license": "ISC",
+      "dependencies": {
+        "pngjs": "^3.0.0"
+      },
+      "bin": {
+        "pixelmatch": "bin/pixelmatch"
+      }
+    },
+    "node_modules/pkg-types": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.2.1.tgz",
+      "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==",
+      "license": "MIT",
+      "dependencies": {
+        "confbox": "^0.1.8",
+        "mlly": "^1.7.2",
+        "pathe": "^1.1.2"
+      }
+    },
+    "node_modules/pngjs": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-3.4.0.tgz",
+      "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.4.49",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.49.tgz",
+      "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "nanoid": "^3.3.7",
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/postcss-import": {
+      "version": "14.1.0",
+      "resolved": "https://registry.npmmirror.com/postcss-import/-/postcss-import-14.1.0.tgz",
+      "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+      "license": "MIT",
+      "dependencies": {
+        "postcss-value-parser": "^4.0.0",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.0.0"
+      }
+    },
+    "node_modules/postcss-load-config": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+      "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+      "license": "MIT",
+      "dependencies": {
+        "lilconfig": "^2.0.5",
+        "yaml": "^1.10.2"
+      },
+      "engines": {
+        "node": ">= 10"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": ">=8.0.9",
+        "ts-node": ">=9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "postcss": {
+          "optional": true
+        },
+        "ts-node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/postcss-modules": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmmirror.com/postcss-modules/-/postcss-modules-4.3.1.tgz",
+      "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==",
+      "license": "MIT",
+      "dependencies": {
+        "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"
+      },
+      "peerDependencies": {
+        "postcss": "^8.0.0"
+      }
+    },
+    "node_modules/postcss-modules-extract-imports": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
+      "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
+      "license": "ISC",
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-local-by-default": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz",
+      "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==",
+      "license": "MIT",
+      "dependencies": {
+        "icss-utils": "^5.0.0",
+        "postcss-selector-parser": "^7.0.0",
+        "postcss-value-parser": "^4.1.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz",
+      "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==",
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-modules-scope": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz",
+      "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==",
+      "license": "ISC",
+      "dependencies": {
+        "postcss-selector-parser": "^7.0.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz",
+      "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==",
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-modules-values": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
+      "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
+      "license": "ISC",
+      "dependencies": {
+        "icss-utils": "^5.0.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-selector-parser": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+      "license": "MIT"
+    },
+    "node_modules/process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
+    "node_modules/proxy-addr": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
+      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "forwarded": "0.2.0",
+        "ipaddr.js": "1.9.1"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/qrcode-reader": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/qrcode-reader/-/qrcode-reader-1.0.4.tgz",
+      "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/qrcode-terminal": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmmirror.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
+      "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==",
+      "bin": {
+        "qrcode-terminal": "bin/qrcode-terminal.js"
+      }
+    },
+    "node_modules/qs": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz",
+      "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "side-channel": "^1.0.6"
+      },
+      "engines": {
+        "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz",
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/raw-body": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz",
+      "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bytes": "3.1.2",
+        "http-errors": "2.0.0",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/read-cache": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz",
+      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+      "license": "MIT",
+      "dependencies": {
+        "pify": "^2.3.0"
+      }
+    },
+    "node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "license": "MIT",
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/readdirp/node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/regenerate": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz",
+      "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/regenerate-unicode-properties": {
+      "version": "10.2.0",
+      "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz",
+      "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "regenerate": "^1.4.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/regenerator-runtime": {
+      "version": "0.14.1",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+      "license": "MIT"
+    },
+    "node_modules/regenerator-transform": {
+      "version": "0.15.2",
+      "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
+      "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.8.4"
+      }
+    },
+    "node_modules/regexpu-core": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-6.2.0.tgz",
+      "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "regenerate": "^1.4.2",
+        "regenerate-unicode-properties": "^10.2.0",
+        "regjsgen": "^0.8.0",
+        "regjsparser": "^0.12.0",
+        "unicode-match-property-ecmascript": "^2.0.0",
+        "unicode-match-property-value-ecmascript": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmmirror.com/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/regjsparser": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.12.0.tgz",
+      "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "jsesc": "~3.0.2"
+      },
+      "bin": {
+        "regjsparser": "bin/parser"
+      }
+    },
+    "node_modules/regjsparser/node_modules/jsesc": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.22.10",
+      "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.10.tgz",
+      "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+      "license": "MIT",
+      "dependencies": {
+        "is-core-module": "^2.16.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "license": "MIT",
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rollup": {
+      "version": "4.28.1",
+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.28.1.tgz",
+      "integrity": "sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "1.0.6"
+      },
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=18.0.0",
+        "npm": ">=8.0.0"
+      },
+      "optionalDependencies": {
+        "@rollup/rollup-android-arm-eabi": "4.28.1",
+        "@rollup/rollup-android-arm64": "4.28.1",
+        "@rollup/rollup-darwin-arm64": "4.28.1",
+        "@rollup/rollup-darwin-x64": "4.28.1",
+        "@rollup/rollup-freebsd-arm64": "4.28.1",
+        "@rollup/rollup-freebsd-x64": "4.28.1",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.28.1",
+        "@rollup/rollup-linux-arm-musleabihf": "4.28.1",
+        "@rollup/rollup-linux-arm64-gnu": "4.28.1",
+        "@rollup/rollup-linux-arm64-musl": "4.28.1",
+        "@rollup/rollup-linux-loongarch64-gnu": "4.28.1",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.28.1",
+        "@rollup/rollup-linux-riscv64-gnu": "4.28.1",
+        "@rollup/rollup-linux-s390x-gnu": "4.28.1",
+        "@rollup/rollup-linux-x64-gnu": "4.28.1",
+        "@rollup/rollup-linux-x64-musl": "4.28.1",
+        "@rollup/rollup-win32-arm64-msvc": "4.28.1",
+        "@rollup/rollup-win32-ia32-msvc": "4.28.1",
+        "@rollup/rollup-win32-x64-msvc": "4.28.1",
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/safe-area-insets": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/safe-area-insets/-/safe-area-insets-1.4.1.tgz",
+      "integrity": "sha512-r/nRWTjFGhhm3w1Z6Kd/jY11srN+lHt2mNl1E/emQGW8ic7n3Avu4noibklfSM+Y34peNphHD/BSZecav0sXYQ==",
+      "license": "ISC"
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/sass": {
+      "version": "1.83.0",
+      "resolved": "https://registry.npmmirror.com/sass/-/sass-1.83.0.tgz",
+      "integrity": "sha512-qsSxlayzoOjdvXMVLkzF84DJFc2HZEL/rFyGIKbbilYtAvlCxyuzUeff9LawTn4btVnLKg75Z8MMr1lxU1lfGw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chokidar": "^4.0.0",
+        "immutable": "^5.0.2",
+        "source-map-js": ">=0.6.2 <2.0.0"
+      },
+      "bin": {
+        "sass": "sass.js"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "optionalDependencies": {
+        "@parcel/watcher": "^2.4.1"
+      }
+    },
+    "node_modules/sass-loader": {
+      "version": "16.0.4",
+      "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-16.0.4.tgz",
+      "integrity": "sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "neo-async": "^2.6.2"
+      },
+      "engines": {
+        "node": ">= 18.12.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "@rspack/core": "0.x || 1.x",
+        "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0",
+        "sass": "^1.3.0",
+        "sass-embedded": "*",
+        "webpack": "^5.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@rspack/core": {
+          "optional": true
+        },
+        "node-sass": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "sass-embedded": {
+          "optional": true
+        },
+        "webpack": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/sass/node_modules/chokidar": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz",
+      "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "readdirp": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 14.16.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/sass/node_modules/readdirp": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.0.2.tgz",
+      "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 14.16.0"
+      },
+      "funding": {
+        "type": "individual",
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/sax": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz",
+      "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
+      "license": "ISC"
+    },
+    "node_modules/scule": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz",
+      "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
+      "license": "MIT"
+    },
+    "node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/send": {
+      "version": "0.19.0",
+      "resolved": "https://registry.npmmirror.com/send/-/send-0.19.0.tgz",
+      "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "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"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/send/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/send/node_modules/debug/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/send/node_modules/encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/send/node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/serve-static": {
+      "version": "1.16.2",
+      "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.16.2.tgz",
+      "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.19.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/setprototypeof": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/side-channel": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz",
+      "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.3",
+        "side-channel-list": "^1.0.0",
+        "side-channel-map": "^1.0.1",
+        "side-channel-weakmap": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-list": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz",
+      "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-map": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz",
+      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-weakmap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3",
+        "side-channel-map": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "node_modules/statuses": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/string-hash": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/string-hash/-/string-hash-1.1.3.tgz",
+      "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==",
+      "license": "CC0-1.0"
+    },
+    "node_modules/strip-final-newline": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/strip-literal": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.1.tgz",
+      "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==",
+      "license": "MIT",
+      "dependencies": {
+        "js-tokens": "^9.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/strip-literal/node_modules/js-tokens": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.1.tgz",
+      "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+      "license": "MIT"
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/svg-tags": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz",
+      "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
+      "dev": true
+    },
+    "node_modules/systemjs": {
+      "version": "6.15.1",
+      "resolved": "https://registry.npmmirror.com/systemjs/-/systemjs-6.15.1.tgz",
+      "integrity": "sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/tapable": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz",
+      "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/terser": {
+      "version": "5.37.0",
+      "resolved": "https://registry.npmmirror.com/terser/-/terser-5.37.0.tgz",
+      "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.8.2",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      },
+      "bin": {
+        "terser": "bin/terser"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/timm": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npmmirror.com/timm/-/timm-1.7.1.tgz",
+      "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==",
+      "license": "MIT"
+    },
+    "node_modules/tinycolor2": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz",
+      "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==",
+      "license": "MIT"
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "license": "MIT",
+      "dependencies": {
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/toidentifier": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz",
+      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz",
+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/ufo": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.4.tgz",
+      "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==",
+      "license": "MIT"
+    },
+    "node_modules/unicode-canonical-property-names-ecmascript": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
+      "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unicode-match-property-ecmascript": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+      "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "unicode-canonical-property-names-ecmascript": "^2.0.0",
+        "unicode-property-aliases-ecmascript": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unicode-match-property-value-ecmascript": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",
+      "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unicode-property-aliases-ecmascript": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unimport": {
+      "version": "3.14.5",
+      "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.14.5.tgz",
+      "integrity": "sha512-tn890SwFFZxqaJSKQPPd+yygfKSATbM8BZWW1aCR2TJBTs1SDrmLamBueaFtYsGjHtQaRgqEbQflOjN2iW12gA==",
+      "license": "MIT",
+      "dependencies": {
+        "@rollup/pluginutils": "^5.1.3",
+        "acorn": "^8.14.0",
+        "escape-string-regexp": "^5.0.0",
+        "estree-walker": "^3.0.3",
+        "fast-glob": "^3.3.2",
+        "local-pkg": "^0.5.1",
+        "magic-string": "^0.30.14",
+        "mlly": "^1.7.3",
+        "pathe": "^1.1.2",
+        "picomatch": "^4.0.2",
+        "pkg-types": "^1.2.1",
+        "scule": "^1.3.0",
+        "strip-literal": "^2.1.1",
+        "unplugin": "^1.16.0"
+      }
+    },
+    "node_modules/unimport/node_modules/escape-string-regexp": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/unimport/node_modules/estree-walker": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz",
+      "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0"
+      }
+    },
+    "node_modules/universalify": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz",
+      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
+    "node_modules/unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/unplugin": {
+      "version": "1.16.0",
+      "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.16.0.tgz",
+      "integrity": "sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==",
+      "license": "MIT",
+      "dependencies": {
+        "acorn": "^8.14.0",
+        "webpack-virtual-modules": "^0.6.2"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/unplugin-auto-import": {
+      "version": "0.18.6",
+      "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.18.6.tgz",
+      "integrity": "sha512-LMFzX5DtkTj/3wZuyG5bgKBoJ7WSgzqSGJ8ppDRdlvPh45mx6t6w3OcbExQi53n3xF5MYkNGPNR/HYOL95KL2A==",
+      "license": "MIT",
+      "dependencies": {
+        "@antfu/utils": "^0.7.10",
+        "@rollup/pluginutils": "^5.1.3",
+        "fast-glob": "^3.3.2",
+        "local-pkg": "^0.5.1",
+        "magic-string": "^0.30.14",
+        "minimatch": "^9.0.5",
+        "unimport": "^3.13.4",
+        "unplugin": "^1.16.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "@nuxt/kit": "^3.2.2",
+        "@vueuse/core": "*"
+      },
+      "peerDependenciesMeta": {
+        "@nuxt/kit": {
+          "optional": true
+        },
+        "@vueuse/core": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/unplugin-auto-import/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/unplugin-auto-import/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/unquote": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz",
+      "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==",
+      "license": "MIT"
+    },
+    "node_modules/update-browserslist-db": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+      "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.0"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
+    "node_modules/utif": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/utif/-/utif-2.0.1.tgz",
+      "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==",
+      "license": "MIT",
+      "dependencies": {
+        "pako": "^1.0.5"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+      "license": "MIT"
+    },
+    "node_modules/utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/vite": {
+      "version": "5.2.8",
+      "resolved": "https://registry.npmmirror.com/vite/-/vite-5.2.8.tgz",
+      "integrity": "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "esbuild": "^0.20.1",
+        "postcss": "^8.4.38",
+        "rollup": "^4.13.0"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
+      "engines": {
+        "node": "^18.0.0 || >=20.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/vitejs/vite?sponsor=1"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.3"
+      },
+      "peerDependencies": {
+        "@types/node": "^18.0.0 || >=20.0.0",
+        "less": "*",
+        "lightningcss": "^1.21.0",
+        "sass": "*",
+        "stylus": "*",
+        "sugarss": "*",
+        "terser": "^5.4.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "lightningcss": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue": {
+      "version": "3.4.21",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.4.21.tgz",
+      "integrity": "sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-sfc": "3.4.21",
+        "@vue/runtime-dom": "3.4.21",
+        "@vue/server-renderer": "3.4.21",
+        "@vue/shared": "3.4.21"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue-demi": {
+      "version": "0.14.10",
+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
+      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "vue-demi-fix": "bin/vue-demi-fix.js",
+        "vue-demi-switch": "bin/vue-demi-switch.js"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "@vue/composition-api": "^1.0.0-rc.1",
+        "vue": "^3.0.0-0 || ^2.6.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue-i18n": {
+      "version": "9.14.2",
+      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.14.2.tgz",
+      "integrity": "sha512-JK9Pm80OqssGJU2Y6F7DcM8RFHqVG4WkuCqOZTVsXkEzZME7ABejAUqUdA931zEBedc4thBgSUWxeQh4uocJAQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/core-base": "9.14.2",
+        "@intlify/shared": "9.14.2",
+        "@vue/devtools-api": "^6.5.0"
+      },
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
+      },
+      "peerDependencies": {
+        "vue": "^3.0.0"
+      }
+    },
+    "node_modules/vue-i18n/node_modules/@intlify/core-base": {
+      "version": "9.14.2",
+      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.14.2.tgz",
+      "integrity": "sha512-DZyQ4Hk22sC81MP4qiCDuU+LdaYW91A6lCjq8AWPvY3+mGMzhGDfOCzvyR6YBQxtlPjFqMoFk9ylnNYRAQwXtQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/message-compiler": "9.14.2",
+        "@intlify/shared": "9.14.2"
+      },
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
+      }
+    },
+    "node_modules/vue-i18n/node_modules/@intlify/message-compiler": {
+      "version": "9.14.2",
+      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.14.2.tgz",
+      "integrity": "sha512-YsKKuV4Qv4wrLNsvgWbTf0E40uRv+Qiw1BeLQ0LAxifQuhiMe+hfTIzOMdWj/ZpnTDj4RSZtkXjJM7JDiiB5LQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/shared": "9.14.2",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
+      }
+    },
+    "node_modules/vue-i18n/node_modules/@intlify/shared": {
+      "version": "9.14.2",
+      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.14.2.tgz",
+      "integrity": "sha512-uRAHAxYPeF+G5DBIboKpPgC/Waecd4Jz8ihtkpJQD5ycb5PwXp0k/+hBGl5dAjwF7w+l74kz/PKA8r8OK//RUw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
+      }
+    },
+    "node_modules/vue-router": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.0.tgz",
+      "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-api": "^6.6.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/posva"
+      },
+      "peerDependencies": {
+        "vue": "^3.2.0"
+      }
+    },
+    "node_modules/webpack-virtual-modules": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+      "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
+      "license": "MIT"
+    },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/ws": {
+      "version": "8.18.0",
+      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.0.tgz",
+      "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": ">=5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/xhr": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmmirror.com/xhr/-/xhr-2.6.0.tgz",
+      "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
+      "license": "MIT",
+      "dependencies": {
+        "global": "~4.4.0",
+        "is-function": "^1.0.1",
+        "parse-headers": "^2.0.0",
+        "xtend": "^4.0.0"
+      }
+    },
+    "node_modules/xml-parse-from-string": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
+      "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==",
+      "license": "MIT"
+    },
+    "node_modules/xml2js": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.5.0.tgz",
+      "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
+      "license": "MIT",
+      "dependencies": {
+        "sax": ">=0.6.0",
+        "xmlbuilder": "~11.0.0"
+      },
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/xmlbuilder": {
+      "version": "11.0.1",
+      "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+      "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/xmlhttprequest": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmmirror.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+      "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/xregexp": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/xregexp/-/xregexp-3.1.0.tgz",
+      "integrity": "sha512-4Y1x6DyB8xRoxosooa6PlGWqmmSKatbzhrftZ7Purmm4B8R4qIEJG1A2hZsdz5DhmIqS0msC0I7KEq93GphEVg==",
+      "license": "MIT"
+    },
+    "node_modules/xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4"
+      }
+    },
+    "node_modules/yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+      "license": "ISC"
+    },
+    "node_modules/yaml": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz",
+      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+      "license": "ISC",
+      "engines": {
+        "node": ">= 6"
+      }
+    }
+  }
+}

+ 85 - 34
package.json

@@ -1,35 +1,86 @@
 {
-	"uni-app": {
-		"scripts": {
-			"h5-dev": {
-				"title": "H5 开发环境",
-				"browser": "chrome",
-				"env": {
-					"UNI_PLATFORM": "h5",
-					"BASE_API_URL": "/api"
-				}
-			},
-			"wp-dev": {
-				"title": "微信小程序 开发环境",
-				"env": {
-					"UNI_PLATFORM": "mp-weixin",
-					"BASE_API_URL": "/api"
-				}
-			},
-			"wp-sit": {
-				"title": "微信小程序 sit-测试环境",
-				"env": {
-					"UNI_PLATFORM": "mp-weixin",
-					"BASE_API_URL": "http://192.168.123.146:8080"
-				}
-			},
-			"wp-uat": {
-				"title": "微信小程序 uat-测试环境",
-				"env": {
-					"UNI_PLATFORM": "mp-weixin",
-					"BASE_API_URL": "https://api-punchsettle.20261001.xyz"
-				}
-			}
-		}
-	}
-}
+  "name": "punch-settle-miniprogram",
+  "version": "1.0.0",
+  "scripts": {
+    "dev:custom": "uni -p",
+    "dev:custom wp-dev": "npm run dev:custom wp-dev",
+    "dev:custom wp-sit": "npm run dev:custom wp-sit",
+    "dev:custom wp-uat": "npm run dev:custom wp-uat",
+    "build:custom": "uni build -p",
+    "build:custom wp-uat": "npm run build:custom wp-uat",
+    "build:custom wp-prod": "npm run build:custom wp-prod"
+  },
+  "uni-app": {
+    "scripts": {
+      "h5-dev": {
+        "title": "H5 开发环境",
+        "browser": "chrome",
+        "env": {
+          "UNI_PLATFORM": "h5",
+          "BASE_API_URL": "/api"
+        }
+      },
+      "wp-dev": {
+        "title": "微信小程序 开发环境",
+        "env": {
+          "UNI_PLATFORM": "mp-weixin",
+          "BASE_API_URL": "http://localhost:8080"
+        }
+      },
+      "wp-sit": {
+        "title": "微信小程序 sit-测试环境",
+        "env": {
+          "UNI_PLATFORM": "mp-weixin",
+          "BASE_API_URL": "http://192.168.123.242:8080"
+        }
+      },
+      "wp-uat": {
+        "title": "微信小程序 uat-测试环境",
+        "env": {
+          "UNI_PLATFORM": "mp-weixin",
+          "BASE_API_URL": "https://api-punchsettle.20261001.xyz"
+        }
+      },
+      "wp-prod": {
+        "title": "微信小程序 prod-生产环境",
+        "env": {
+          "UNI_PLATFORM": "mp-weixin",
+          "BASE_API_URL": "https://api-punchsettle.zhixinghe1.top"
+        }
+      }
+    }
+  },
+  "dependencies": {
+    "@dcloudio/uni-app": "3.0.0-4030620241128001",
+    "@dcloudio/uni-app-harmony": "3.0.0-4030620241128001",
+    "@dcloudio/uni-app-plus": "3.0.0-4030620241128001",
+    "@dcloudio/uni-components": "3.0.0-4030620241128001",
+    "@dcloudio/uni-h5": "3.0.0-4030620241128001",
+    "@dcloudio/uni-mp-alipay": "3.0.0-4030620241128001",
+    "@dcloudio/uni-mp-baidu": "3.0.0-4030620241128001",
+    "@dcloudio/uni-mp-jd": "3.0.0-4030620241128001",
+    "@dcloudio/uni-mp-kuaishou": "3.0.0-4030620241128001",
+    "@dcloudio/uni-mp-lark": "3.0.0-4030620241128001",
+    "@dcloudio/uni-mp-qq": "3.0.0-4030620241128001",
+    "@dcloudio/uni-mp-toutiao": "3.0.0-4030620241128001",
+    "@dcloudio/uni-mp-weixin": "3.0.0-4030620241128001",
+    "@dcloudio/uni-mp-xhs": "3.0.0-4030620241128001",
+    "@dcloudio/uni-quickapp-webview": "3.0.0-4030620241128001",
+    "@dcloudio/uni-ui": "^1.5.7",
+    "pinia": "^2.3.0",
+    "vue": "3.4.21",
+    "vue-i18n": "9.14.2"
+  },
+  "devDependencies": {
+    "@dcloudio/types": "3.4.14",
+    "@dcloudio/uni-automator": "3.0.0-4030620241128001",
+    "@dcloudio/uni-cli-shared": "3.0.0-4030620241128001",
+    "@dcloudio/uni-stacktracey": "3.0.0-4030620241128001",
+    "@dcloudio/vite-plugin-uni": "3.0.0-4030620241128001",
+    "@vue/runtime-core": "3.5.13",
+    "pinia-plugin-unistorage": "^0.1.2",
+    "sass": "^1.83.0",
+    "sass-loader": "^16.0.4",
+    "vite": "5.2.8"
+  }
+}

+ 0 - 40
pages.json

@@ -1,40 +0,0 @@
-{
-	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
-		{
-			"path": "pages/index/index",
-			"style": {
-				"navigationBarTitleText": "打卡结算",
-				"enablePullDownRefresh": true
-			}
-		},
-		{
-			"path" : "pages/login/login",
-			"style" : 
-			{
-				"navigationBarTitleText" : "登录"
-			}
-		},
-		{
-			"path" : "pages/userInfo/userInfo",
-			"style" : 
-			{
-				"navigationBarTitleText" : "用户中心"
-			}
-		},
-		{
-			"path" : "pages/detail/detail",
-			"style" : 
-			{
-				"navigationBarTitleText" : "编辑"
-			}
-		}
-	],
-	"globalStyle": {
-		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "uni-app",
-		"navigationBarBackgroundColor": "#F8F8F8",
-		"backgroundColor": "#F8F8F8",
-		"navigationStyle": "custom"
-	},
-	"uniIdRouter": {}
-}

+ 0 - 216
pages/detail/detail.vue

@@ -1,216 +0,0 @@
-<template>
-	<view class="layout-container">
-		<!-- 顶部填充区 -->
-		<view class="top-fill" :style="{height: safeArea.statusBarHeight+'px'}"></view>
-		
-		<!-- 顶部胶囊区 -->
-		<view class="capsule-container" 
-		:style="{
-			height: safeArea.capsuleBarHeight+'px',
-			width: safeArea.capsuleBarLeft+'px',
-			'padding-top': safeArea.capsuleBarMarginTop+'px', 
-			'padding-bottom': safeArea.capsuleBarMarginBottom+'px'}">
-			<view class="back-container" :style="{
-				height: safeArea.capsuleBarContentHeight+'px',
-				width: safeArea.capsuleBarContentHeight+'px',
-			}">
-				<navigator url="/pages/index/index">
-					<uni-icons type="back" :size="safeArea.capsuleBarContentHeight" color="#FFFFFF"></uni-icons>
-				</navigator>
-			</view>
-		</view>
-		
-		<!-- 内容区 -->
-		<view class="content-container">
-			<view class="edit-container">
-				<view class="input-item">
-					<view class="input-title">任务名称</view>
-					<input class="input-box" placeholder="请输入任务名称" v-model="punchIn.taskName"/>
-				</view>
-				<view class="input-item">
-					<view class="input-title">奖励倍数</view>
-					<input class="input-box" type="number" placeholder="请输入任务倍数" v-model="punchIn.rewardNum"/>
-				</view>
-				<view class="switch-item">
-					<view class="input-title">周末双倍</view>
-					<switch class="input-switch" :checked="punchIn.weekendDoubleFlag" @change="weekendDoubleSwitchChange"/>
-				</view>
-				<view class="switch-item">
-					<view class="input-title">全勤奖励</view>
-					<switch class="input-switch" :checked="punchIn.fullAttendanceFlag" @change="fullAttendanceSwitchChange"/>
-				</view>
-				<view class="btn-container">
-					<view class="cancel-btn" @click="cancel">取消</view>
-					<view class="save-btn" @click="savePunchIn">保存</view>
-				</view>
-			</view>
-		</view>
-		
-		<!-- 底部填充区 -->
-		<view class="bottom-fill" :style="{height: safeArea.bottomHeight+'px'}"></view>
-
-	</view>
-</template>
-
-<script setup>
-	import { ref } from 'vue';
-	import { onLoad } from '@dcloudio/uni-app';
-	import { punchInApi } from '@/service/apis';
-	import { getSafeArea } from '@/utils/system.js';
-	
-	/**
-	 * 打卡任务
-	 */
-	const punchIn = ref({
-		"rewardNum": 1,
-		"weekendDoubleFlag": false,
-		"fullAttendanceFlag": false
-	});
-	
-	/**
-	 * 安全区
-	 */
-	const safeArea = ref({});
-	
-	onLoad(async (e) => {
-		if (e.id) {
-			const res = await punchInApi.queryPunchInById({"id": e.id});
-			punchIn.value = res;
-		}
-		safeArea.value = getSafeArea();
-	});
-
-	const weekendDoubleSwitchChange = (e) => {
-		punchIn.value.weekendDoubleFlag = e.detail.value;
-	}
-	
-	const fullAttendanceSwitchChange = (e) => {
-		punchIn.value.fullAttendanceFlag = e.detail.value;
-	}
-	
-	/**
-	 * 保存打卡任务
-	 */
-	const savePunchIn = () => {
-		punchInApi.addPunchIn(punchIn.value).then(() => {
-			uni.showToast({
-				title: '保存成功',
-				icon: 'success',
-				duration: 2000
-			});
-			setTimeout(() => {
-				uni.navigateBack();
-			}, 2000);
-		});
-	}
-	
-	/**
-	 * 后退
-	 */
-	const cancel = () => {
-		uni.navigateBack();
-	}
-</script>
-
-<style lang="scss" scoped>
-	.back-container {
-		border-radius: 50%;
-		background-color: rgba(0, 0, 0, 0.1);
-		
-		display: flex;
-		justify-content: center;
-		align-items: center;
-	}
-	
-	.edit-container {
-		margin-top: 32rpx;
-		width: 100%;
-		
-		.input-item {
-			margin-top: 30rpx;
-			width: 100%;
-			
-			.input-title {
-				font-size: 36rpx;
-				font-weight: 400;
-				letter-spacing: 0rpx;
-				line-height: 52.13rpx;
-				color: rgba(0, 0, 0, 1);
-			}
-			
-			.input-box {
-				box-sizing: border-box;
-				margin-top: 10rpx;
-				width: 100%;
-				height: 65rpx;
-				padding: 10rpx 10rpx;
-				border-radius: 5rpx;
-				background: #FFFFFF;
-			}
-		}
-		
-		.switch-item {
-			margin-top: 30rpx;
-			display: flex;
-			align-items: center;
-			
-			.input-title {
-				font-size: 36rpx;
-				font-weight: 400;
-				letter-spacing: 0rpx;
-				line-height: 52.13rpx;
-				color: rgba(0, 0, 0, 1);
-			}
-			
-			.input-switch {
-				position: absolute;
-				right: 0rpx;
-			}	
-		}
-	}
-	
-	.btn-container {
-		position: absolute;
-		bottom: 44rpx;
-		left: 0rpx;
-		width: 100%;
-		display: grid;
-		grid-template-columns: 1fr 1fr;
-		place-items: center;
-		
-		.cancel-btn {
-			width: 298rpx;
-			height: 67rpx;
-			border-radius: 30rpx;
-			background: #E5E5E5;
-			
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			
-			font-size: 36rpx;
-			font-weight: 400;
-			letter-spacing: 0rpx;
-			line-height: 52.13rpx;
-			color: #FFFFFF;
-	
-		}
-		
-		.save-btn {
-			width: 298rpx;
-			height: 67rpx;
-			border-radius: 30rpx;
-			background: #2A82E4;
-			
-			display: flex;
-			justify-content: center;
-			align-items: center;
-	
-			font-size: 36rpx;
-			font-weight: 400;
-			letter-spacing: 0rpx;
-			line-height: 52.13rpx;
-			color: #FFFFFF;
-		}
-	}
-</style>

+ 0 - 456
pages/index/index.vue

@@ -1,456 +0,0 @@
-<template>
-	<view class="layout-container">
-		<!-- 顶部填充区 -->
-		<view class="top-fill" :style="{height: safeArea.statusBarHeight+'px'}"></view>
-
-		<!-- 顶部胶囊区 -->
-		<view class="capsule-container" :style="{
-			height: safeArea.capsuleBarHeight+'px',
-			width: safeArea.capsuleBarLeft+'px',
-			'padding-top': safeArea.capsuleBarMarginTop+'px',
-			'padding-bottom': safeArea.capsuleBarMarginBottom+'px'}">
-			
-			<view class="user-info-container" @click="goUserInfoPage">
-				<view class="user-info" 
-					:style="{height: safeArea.capsuleBarContentHeight+'px',width: safeArea.capsuleBarContentHeight+'px'}">
-					<image v-if="userInfo" :style="{
-						height: safeArea.capsuleBarContentHeight+'px',
-						width: safeArea.capsuleBarContentHeight+'px',
-					}" mode="aspectFill" :src="userInfo.avatar"></image>
-					<uni-icons v-else type="person" :size="safeArea.capsuleBarContentHeight" color="#FFFFFF"></uni-icons>
-				</view>
-				
-				<view class="nickname" v-if="userInfo">{{userInfo.nickname}}</view>
-				<view class="nickname" v-else>登录</view>
-			</view>
-		</view>
-
-		<!-- 内容区 -->
-		<view class="content-container">
-			<view class="settle-container">
-				<view class="settle-text-container">
-					<view class="settle-title">待领取奖励数</view>
-					<view class="settle-num">{{reward}}</view>
-				</view>
-				<view class="settle-btn" @click="claimReward">领取</view>
-			</view>
-			<view class="task-container">
-				<view class="task-header">
-					<view class="task-title" v-if="punchIns.length && punchIns.length > 0">任务({{punchIns.length}}个)
-					</view>
-					<view class="task-title" v-else>任务</view>
-					<view class="task-add-btn" @click="goPunchInDetailPage">
-						<uni-icons type="plusempty" size="30" color="#406CE7"></uni-icons>
-					</view>
-				</view>
-				<view class="task-item" v-for="punchIn in punchIns" :key="punchIn.punchInId">
-					<view class="item-header">
-						<view class="item-title">{{punchIn.taskName}}</view>
-						<navigator :url="'/pages/detail/detail?id='+punchIn.punchInId">
-							<uni-icons class="item-icon" type="settings" size="30" color="#C4C4C4"></uni-icons>
-						</navigator>
-						<view class="item-tag-container">
-							<view class="item-tag" v-if="punchIn.fullAttendanceFlag">全勤奖励</view>
-							<view class="item-tag" v-if="punchIn.weekendDoubleFlag">周末双倍</view>
-						</view>
-						<view class="item-btn" @click="doPunchIn(punchIn.punchInId)">完成</view>
-					</view>
-					<view class="item-detail-list">
-						<view class="item-detail" v-for="punchInRecord in punchIn.punchInRecords"
-							:key="punchInRecord.punchInDate">
-							<view class="detail-text">
-								<uni-dateformat :date="punchInRecord.punchInDate" format="M月d日"></uni-dateformat>
-							</view>
-							<view class="detail-box" style="background-color: #E5E5E5;"
-								v-if="punchInRecord.punchInStatus == 'uncreated'"></view>
-							<view class="detail-box" style="background-color: #A5D63F;"
-								v-if="punchInRecord.punchInStatus == 'punchIn'"></view>
-							<view class="detail-box" style="background-color: #D43030;"
-								v-if="punchInRecord.punchInStatus == 'unPunchIn'"></view>
-							<view class="detail-box"
-								v-if="punchInRecord.punchInStatus == 'futureTime' || punchInRecord.punchInStatus == 'todayUnknown'">
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-
-		<!-- 弹出框 -->
-		<view>
-			<uni-popup ref="claimRewardDialog" type="dialog">
-				<uni-popup-dialog ref="inputClose" mode="input" title="领取奖励" value="对话框预置提示内容!" placeholder="请输入领取的奖励数"
-					@confirm="claimRewardConfirm"></uni-popup-dialog>
-			</uni-popup>
-		</view>
-
-		<!-- 底部填充区 -->
-		<view class="bottom-fill" :style="{height: safeArea.bottomHeight+'px'}"></view>
-	</view>
-</template>
-
-<script setup>
-	import {
-		onMounted,
-		ref
-	} from 'vue';
-	import {
-		onLoad,
-		onPullDownRefresh,
-		onShow
-	} from "@dcloudio/uni-app";
-	import {
-		rewardApi,
-		punchInApi
-	} from '@/service/apis.js';
-	import {
-		getSafeArea
-	} from '@/utils/system.js';
-
-	/**
-	 * 可领取奖励
-	 */
-	const reward = ref(0);
-
-	/**
-	 * 打卡任务
-	 */
-	const punchIns = ref([]);
-
-	/**
-	 * 领取奖励对话框
-	 */
-	const claimRewardDialog = ref(null);
-
-	/**
-	 * 安全区
-	 */
-	const safeArea = ref({});
-
-	/**
-	 * 用户信息
-	 */
-	const userInfo = ref(null);
-
-
-	/**
-	 * 领取奖励
-	 */
-	const claimReward = () => {
-		claimRewardDialog.value.open();
-	}
-
-	/**
-	 * 确认领取奖励
-	 */
-	const claimRewardConfirm = async (val) => {
-		await rewardApi.claimReward({
-			"claimRewardNum": val
-		});
-		getReward();
-		claimRewardDialog.value.close();
-	}
-
-	/**
-	 * 获取奖励
-	 */
-	const getReward = async () => {
-		let res = await rewardApi.queryReward();
-		reward.value = res.unclaimedRewardNum;
-	}
-
-	/**
-	 * 获取打卡
-	 */
-	const getPunchIn = async () => {
-		let res = await punchInApi.queryPunchIn();
-		punchIns.value = res;
-	}
-
-	/**
-	 * 打卡
-	 */
-	const doPunchIn = async (id) => {
-		await punchInApi.doPunchIn({
-			id
-		});
-		getPunchIn();
-	}
-
-	/**
-	 * 跳转用户用心
-	 */
-	const goUserInfoPage = () => {
-		uni.navigateTo({
-			url: "/pages/userInfo/userInfo"
-		});
-	}
-
-	/**
-	 * 获取打卡编辑页面
-	 */
-	const goPunchInDetailPage = () => {
-		uni.navigateTo({
-			url: "/pages/detail/detail"
-		})
-	};
-	
-	/**
-	 * 加载数据
-	 */
-	const loadData = async () => {
-		let token = uni.getStorageSync("token");
-		// 如果还没登录就结束获取数据
-		if (!token) {
-			reward.value = 0;
-			punchIns.value = [];
-			return;
-		}
-		
-		try {
-			uni.showLoading({
-				title: '加载中',
-				mask: true
-			});
-			// 获取奖励
-			getReward();
-			// 获取打卡
-			getPunchIn();
-		} finally {
-			uni.hideLoading();
-		}
-	};
-
-	onLoad(() => {
-		safeArea.value = getSafeArea();
-	});
-
-	onShow(() => {
-		userInfo.value = uni.getStorageSync("userInfo");
-		loadData();
-	});
-
-	onPullDownRefresh(() => {
-		loadData();
-		uni.stopPullDownRefresh();
-	});
-</script>
-
-<style lang="scss" scoped>
-	.user-info-container {
-		display: flex;
-		align-items: center;
-		
-		.user-info {
-			display: flex;
-			justify-content: center;
-			align-items: center;
-		
-			border-radius: 50%;
-			background: rgba(210, 239, 243, 1);
-		}
-		
-		.nickname {
-			display: flex;
-			/* 水平居中 */
-			justify-content: center;
-			/* 垂直居中 */
-			align-items: center;
-			margin-left: 10rpx;
-			color: rgba(0, 0, 0, 1);
-		}
-	}
-
-	.content-container {
-
-		.settle-container {
-			// margin-top: 16rpx;
-			height: 228rpx;
-			position: relative;
-			border-radius: 20rpx;
-			background: rgba(64, 108, 231, 1);
-			box-shadow: 1rpx 2rpx 4rpx rgba(0, 0, 0, 0.25);
-
-			.settle-text-container {
-				position: absolute;
-				left: 108rpx;
-				top: 20rpx;
-
-				.settle-title {
-					font-size: 24rpx;
-					line-height: 34.75rpx;
-					color: rgba(255, 255, 255, 1);
-				}
-
-				.settle-num {
-					font-size: 100rpx;
-					font-weight: 700;
-					line-height: 144.8rpx;
-					color: rgba(255, 255, 255, 1);
-
-					display: flex;
-					justify-content: center;
-					/* 水平居中 */
-					align-items: center;
-					/* 垂直居中 */
-				}
-			}
-
-			.settle-btn {
-				position: absolute;
-				left: 503rpx;
-				top: 76rpx;
-				width: 164rpx;
-				height: 99rpx;
-				border-radius: 40rpx;
-				background: rgba(242, 247, 255, 1);
-
-				font-size: 48rpx;
-				font-weight: 700;
-				line-height: 69.5px;
-				color: rgba(64, 108, 231, 1);
-				display: flex;
-				justify-content: center;
-				/* 水平居中 */
-				align-items: center;
-				/* 垂直居中 */
-			}
-		}
-
-		.task-container {
-			margin-top: 16rpx;
-
-			.task-header {
-				position: relative;
-				height: 80rpx;
-				display: flex;
-				justify-content: center;
-				/* 水平居中 */
-				align-items: center;
-				/* 垂直居中 */
-
-				.task-title {
-					position: absolute;
-					left: 0rpx;
-					font-size: 30rpx;
-					font-weight: 400;
-					line-height: 43.44rpx;
-					color: rgba(0, 0, 0, 1);
-				}
-
-				.task-add-btn {
-					display: inline-flex;
-					justify-content: center;
-					align-items: center;
-					position: absolute;
-					right: 0rpx;
-					width: 60rpx;
-					height: 60rpx;
-					border-radius: 10rpx;
-					border: 3px solid rgba(64, 108, 231, 1);
-				}
-			}
-
-			.task-item {
-				margin-top: 16rpx;
-				width: 100%;
-				height: 201rpx;
-				border-radius: 20px;
-				background: #FFFFFF;
-				box-shadow: 1px 2px 4px #000000;
-				box-sizing: border-box;
-				padding: 16rpx;
-
-
-				.item-header {
-					position: relative;
-					display: flex;
-					align-items: center;
-
-					.item-title {
-						display: inline-block;
-						// margin-left: 20rpx;
-						font-size: 36rpx;
-						font-weight: 400;
-						letter-spacing: 0rpx;
-						line-height: 52.13rpx;
-						color: rgba(0, 0, 0, 1);
-					}
-
-					.item-icon {
-						margin-left: 10rpx;
-					}
-
-					.item-tag-container {
-						display: inline-block;
-						margin-left: 10rpx;
-
-						.item-tag:not(:first-child) {
-							margin-left: 10rpx;
-						}
-
-						.item-tag {
-							display: inline-block;
-							background-color: #F2F7FF;
-							padding: 10rpx;
-							border-radius: 40rpx;
-							background: #F2F7FF;
-							font-size: 16rpx;
-							font-weight: 400;
-							line-height: 23.17rpx;
-							color: rgba(0, 0, 0, 1);
-							text-align: center;
-							vertical-align: top;
-						}
-					}
-
-					.item-btn {
-						display: inline-flex;
-						position: absolute;
-						right: 0rpx;
-						width: 123rpx;
-						height: 42rpx;
-						border-radius: 30rpx;
-						border: 1rpx solid #2A82E4;
-						justify-content: center;
-						align-items: center;
-
-						font-size: 20rpx;
-						font-weight: 400;
-						line-height: 28.96px;
-						color: rgba(64, 108, 231, 1);
-					}
-				}
-
-				.item-detail-list {
-					margin-top: 16rpx;
-					display: grid;
-					grid-template-columns: repeat(7, 1fr);
-
-					.item-detail {
-						display: flex;
-						flex-direction: column;
-						justify-content: center;
-						align-items: center;
-
-						.detail-text {
-							font-size: 20rpx;
-							font-weight: 400;
-							letter-spacing: 0rpx;
-							line-height: 28.96rpx;
-							color: rgba(0, 0, 0, 1);
-						}
-
-						.detail-box {
-							// display: block;
-							width: 42rpx;
-							height: 42rpx;
-							margin-top: 5rpx;
-							border: 5rpx solid #000000;
-						}
-					}
-				}
-			}
-		}
-	}
-</style>

+ 0 - 156
pages/login/login.vue

@@ -1,156 +0,0 @@
-<template>
-	<view class="layout-container">
-		<!-- 顶部填充区 -->
-		<view class="top-fill" :style="{height: safeArea.statusBarHeight+'px'}"></view>
-		
-		<!-- 顶部胶囊区 -->
-		<view class="capsule-container" 
-		:style="{
-			height: safeArea.capsuleBarHeight+'px',
-			width: safeArea.capsuleBarLeft+'px',
-			'padding-top': safeArea.capsuleBarMarginTop+'px', 
-			'padding-bottom': safeArea.capsuleBarMarginBottom+'px'}">
-			<view class="back-container" :style="{
-				height: safeArea.capsuleBarContentHeight+'px',
-				width: safeArea.capsuleBarContentHeight+'px',
-			}">
-				<navigator url="/pages/index/index">
-					<uni-icons type="back" :size="safeArea.capsuleBarContentHeight" color="#FFFFFF"></uni-icons>
-				</navigator>
-			</view>
-		</view>
-		
-		<!-- 内容区 -->
-		<view class="content-container">
-			<view class="login-container">
-				<view class="avator-container">
-					<uni-icons type="person" size="130" color="#FFFFFF"></uni-icons>
-				</view>
-				<view class="btn-container" @click="login">登录</view>
-			</view>
-		</view>
-		
-		<!-- 底部填充区 -->
-		<view class="bottom-fill" :style="{height: safeArea.bottomHeight+'px'}"></view>
-
-	</view>
-</template>
-
-<script setup>
-	import { ref } from 'vue';
-	import { onLoad } from "@dcloudio/uni-app";
-	import { loginApi } from '@/service/apis.js';
-	import { getSafeArea } from '@/utils/system.js';
-	
-	/**
-	 * 头像
-	 */
-	const avatar = ref("");
-	
-	/**
-	 * 昵称
-	 */
-	const nickname = ref("");
-	
-	/**
-	 * 安全区
-	 */
-	const safeArea = ref({});
-	
-	onLoad(() => {
-		safeArea.value = getSafeArea();
-	});
-	
-	const login = async () => {
-		// 获取供应商
-		let providerResult = await uni.getProvider({
-			service: 'oauth'
-		});
-		const provider = providerResult.provider[0];
-		
-		// 获取登录的code
-		let loginResult = await uni.login({
-			provider
-		});
-		
-		// 获取用户的头像和昵称
-		let userInfoResult = await uni.getUserInfo({
-			 provider
-		});
-		
-		// 获取后端token
-		let token = await loginApi.login({
-			"code": loginResult.code,
-			"avatar": userInfoResult.userInfo.avatarUrl,
-			"nickname": userInfoResult.userInfo.nickName
-		});
-		
-		// 保存token
-		uni.setStorageSync('token', token);
-		// 保存用户信息
-		uni.setStorageSync('userInfo', {
-			"avatar": userInfoResult.userInfo.avatarUrl,
-			"nickname": userInfoResult.userInfo.nickName
-		});
-		console.log(uni.getStorageInfoSync("userInfo"));
-		
-		// 登录结束返回主页
-		uni.navigateTo({
-			url: "/pages/index/index"
-		})
-		
-	}
-</script>
-
-<style lang="scss" scoped>
-	.back-container {
-		border-radius: 50%;
-		background-color: rgba(0, 0, 0, 0.1);
-		
-		display: flex;
-		justify-content: center;
-		align-items: center;
-	}
-	
-	.login-container {
-		width: 100%;
-		height: 100%;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		flex-direction: column;
-		
-		.avator-container {
-			left: 222rpx;
-			top: 254rpx;
-			width: 307rpx;
-			height: 307rpx;
-			background: #D2EFF3;
-			border-radius: 50%;
-			box-shadow: 0px 2px 2px 0px #DBDBDB;
-		
-			display: flex;
-			justify-content: center;
-			align-items: center;
-		}
-		
-		.btn-container {
-			margin-top: 57rpx;
-			
-			width: 500rpx;
-			height: 100rpx;
-			border-radius: 20rpx;
-			background: #2A82E4;
-		
-			font-size: 48rpx;
-			font-weight: 700;
-			letter-spacing: 0rpx;
-			line-height: 69.5rpx;
-			color: #FFFFFF;
-			
-			display: flex;
-			justify-content: center;
-			align-items: center;
-		}
-	}
-</style>

+ 0 - 111
pages/userInfo/userInfo.vue

@@ -1,111 +0,0 @@
-<template>
-	<view class="layout-container">
-		<!-- 顶部填充区 -->
-		<view class="top-fill" :style="{height: safeArea.statusBarHeight+'px'}"></view>
-		
-		<!-- 顶部胶囊区 -->
-		<view class="capsule-container" 
-		:style="{
-			height: safeArea.capsuleBarHeight+'px',
-			width: safeArea.capsuleBarLeft+'px',
-			'padding-top': safeArea.capsuleBarMarginTop+'px', 
-			'padding-bottom': safeArea.capsuleBarMarginBottom+'px'}">
-			<view class="back-container" :style="{
-				height: safeArea.capsuleBarContentHeight+'px',
-				width: safeArea.capsuleBarContentHeight+'px',
-			}">
-				<navigator url="/pages/index/index">
-					<uni-icons type="back" :size="safeArea.capsuleBarContentHeight" color="#FFFFFF"></uni-icons>
-				</navigator>
-			</view>
-		</view>
-		
-		<!-- 内容区 -->
-		<view class="content-container">
-			<view class="login-container">
-				<view class="avator-container">
-					<uni-icons type="person" size="130" color="#FFFFFF"></uni-icons>
-				</view>
-				<view class="btn-container" @click="logout">注销</view>
-			</view>
-		</view>
-		
-		<!-- 底部填充区 -->
-		<view class="bottom-fill" :style="{height: safeArea.bottomHeight+'px'}"></view>
-	</view>
-</template>
-
-<script setup>
-	import { ref } from 'vue';
-	import { onLoad } from "@dcloudio/uni-app";
-	import { getSafeArea } from '@/utils/system.js';
-	
-	/**
-	 * 安全区
-	 */
-	const safeArea = ref({});
-	
-	onLoad(() => {
-		safeArea.value = getSafeArea();
-	});
-	
-	const logout = () => {
-		uni.removeStorageSync("token");
-		uni.reLaunch({
-			url: "/pages/index/index"
-		});
-	}
-</script>
-
-<style lang="scss" scoped>
-	.back-container {
-		border-radius: 50%;
-		background-color: rgba(0, 0, 0, 0.1);
-		
-		display: flex;
-		justify-content: center;
-		align-items: center;
-	}
-	
-	.login-container {
-		width: 100%;
-		height: 100%;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		flex-direction: column;
-		
-		.avator-container {
-			left: 222rpx;
-			top: 254rpx;
-			width: 307rpx;
-			height: 307rpx;
-			background: #D2EFF3;
-			border-radius: 50%;
-			box-shadow: 0px 2px 2px 0px #DBDBDB;
-		
-			display: flex;
-			justify-content: center;
-			align-items: center;
-		}
-		
-		.btn-container {
-			margin-top: 57rpx;
-			
-			width: 500rpx;
-			height: 100rpx;
-			border-radius: 20rpx;
-			background: #FA2525;
-		
-			font-size: 48rpx;
-			font-weight: 700;
-			letter-spacing: 0rpx;
-			line-height: 69.5rpx;
-			color: #FFFFFF;
-			
-			display: flex;
-			justify-content: center;
-			align-items: center;
-		}
-	}	   
-</style>

+ 0 - 9
service/apis.js

@@ -1,9 +0,0 @@
-import * as loginApi from './loginApi.js';
-import * as punchInApi from './punchInApi.js';
-import * as rewardApi from './rewardApi.js';
-
-export {
-	loginApi,
-	punchInApi,
-	rewardApi
-}

+ 10 - 0
shims-uni.d.ts

@@ -0,0 +1,10 @@
+/// <reference types='@dcloudio/types' />
+import 'vue'
+
+declare module '@vue/runtime-core' {
+  type Hooks = App.AppInstance & Page.PageInstance;
+
+  interface ComponentCustomOptions extends Hooks {
+
+  }
+}

+ 25 - 0
src/App.vue

@@ -0,0 +1,25 @@
+<script setup>
+import naviInterceptor from '@/interceptors/naviInterceptor.js';
+import { useSafeAreaStore } from '@/stores/safeArea.js';
+import { onLaunch, onShow } from '@dcloudio/uni-app';
+import { getSafeArea } from '@/utils/system.js';
+import { useDictStore } from '@/stores/dict';
+
+onLaunch(() => {
+	// 导航拦截器初始化
+	naviInterceptor();
+	// 数据字典初始化
+	const dictStore = useDictStore();
+	dictStore.refresh();
+});
+
+onShow(() => {
+	// 安全区初始化
+	const safeAreaStore = useSafeAreaStore();
+	safeAreaStore.$patch(getSafeArea());
+});
+</script>
+
+<style>
+/*每个页面公共css */
+</style>

+ 41 - 0
src/common/constants/dict.js

@@ -0,0 +1,41 @@
+/**
+ * 字典常量
+ */
+const dictConst = {
+    /**
+     * 刮刮乐来源
+     */
+    LOTTERY_SCRATCH_SOURCE: "LOTTERY_SCRATCH_SOURCE",
+
+    /**
+     * 福利彩票刮刮乐种类
+     */
+    WELFARE_SCRATCH: "WELFARE_SCRATCH",
+
+    /**
+     * 体育彩票刮刮乐种类
+     */
+	SPORTS_SCRATCH: "SPORTS_SCRATCH",
+
+    /**
+     * 刮刮乐动作类型
+     */
+    SCRATCH_ACTION_TYPE: "SCRATCH_ACTION_TYPE",
+
+    /**
+     * 启用状态标志
+     */
+	ENABLE_STATUS: "ENABLE_STATUS",
+
+    /**
+     * 打卡类型
+     */
+    PUNCH_IN_CATEGORY: "PUNCH_IN_CATEGORY",
+
+    /**
+     * 打卡比较规则
+     */
+    PUNCH_IN_RULE: "PUNCH_IN_RULE"	
+};
+
+export default dictConst;

+ 46 - 0
src/common/constants/router.js

@@ -0,0 +1,46 @@
+/**
+ * 页面路由
+ */
+const router = {
+	/**
+	 * 主页
+	 */
+	INDEX_URL: '/pages/index/index',
+	
+	/**
+	 * 登录页
+	 */
+	LOGIN_URL: '/pages/login/login',
+	
+	/**
+	 * 用户中心
+	 */
+	USER_INFO_URL: '/pages/user-info/user-info',
+	
+	/**
+	 * 打卡任务编辑页
+	 */
+	PUNCHIN_EDIT_URL: '/pages/punchin-edit/punchin-edit',
+	
+	/**
+	 * 打卡任务详情页
+	 */
+	PUNCHIN_DETAIL_URL: '/pages/punchin-detail/punchin-detail',
+	
+	/**
+	 * 结算页
+	 */
+	SETTLE_LIST_URL: '/pages/settle-list/settle-list',
+	
+	/**
+	 * 奖励领取记录页
+	 */
+	REWARD_RECORD_LIST_URL: '/pages/reward-record-list/reward-record-list',
+	
+	/**
+	 * 刮刮乐投入与中奖记录页
+	 */
+	SCRATCH_RECORD_LIST_URL: '/pages/scratch-record-list/scratch-record-list'
+};
+
+export default router;

+ 11 - 0
src/common/constants/scratch.js

@@ -0,0 +1,11 @@
+//  刮刮乐常量
+
+/**
+ * 动作类型:投入
+ */
+export const SCRATCH_ACTION_TYPE_INVEST = 0;
+
+/**
+ * 动作类型:中奖
+ */
+export const SCRATCH_ACTION_TYPE_WIN = 1;

+ 6 - 0
src/common/style/common-style.scss

@@ -0,0 +1,6 @@
+view {
+	box-sizing: border-box;
+}
+
+// 主色
+$me-color-primary: #406CE7;

+ 43 - 0
src/components/dict-item/dict-item.vue

@@ -0,0 +1,43 @@
+<template>
+  <span>{{ itemName }}</span>
+</template>
+
+<script setup>
+import { computed } from 'vue';
+import { useDictStore } from '@/stores/dict';
+
+// 组件入参
+const props = defineProps({
+  dictCode: {
+    type: String,
+    default: ''
+  },
+  itemCode: {
+    type: [String, Number],
+    default: ''
+  }
+});
+
+// 属性
+/**
+ * 字典信息
+ */
+const dictStore = useDictStore();
+
+/**
+ * 字典显示计算属性
+ */
+const itemName = computed(() => {
+  if (!dictStore[props.dictCode]) {
+    return '';
+  }
+  for (let item of dictStore[props.dictCode]) {
+    if (item.value == props.itemCode) {
+      return item.text;
+    }
+  }
+  return '';
+});
+</script>
+
+<style lang="scss" scoped></style>

+ 105 - 0
src/components/main-layout/main-layout.vue

@@ -0,0 +1,105 @@
+<template>
+	<view class="layout-container">
+		<!-- 顶部填充区 -->
+		<view :style="safeAreaStore.statusBarStyle"></view>
+
+		<!-- 顶部胶囊区 -->
+		<view class="capsule-box" :style="safeAreaStore.capsuleBarStyle">
+			<view class="icon-wrap" v-if="showBack || showHome">
+				<view v-if="showBack" class="icon-box" :style="safeAreaStore.iconBoxStyle" @click="goBackPage">
+					<uni-icons type="back" color="#FFFFFF" :size="safeAreaStore.iconSize"></uni-icons>
+				</view>
+				<view v-if="showHome" class="icon-box" :style="safeAreaStore.iconBoxStyle" @click="goIndexPage">
+					<uni-icons type="home" color="#FFFFFF" :size="safeAreaStore.iconSize"></uni-icons>
+				</view>
+			</view>
+		</view>
+
+		<!-- 内容区 -->
+		<view class="content-box">
+			<slot></slot>
+		</view>
+
+		<!-- 底部填充区 -->
+		<view :style="safeAreaStore.bottomBoxStyle"></view>
+
+	</view>
+</template>
+
+<script setup>
+import { useSafeAreaStore } from '@/stores/safeArea.js';
+import router from '@/common/constants/router';
+
+defineProps({
+	showHome: {
+		type: Boolean,
+		default: false
+	},
+	showBack: {
+		type: Boolean,
+		default: false
+	}
+});
+
+/**
+ * 安全区
+ */
+const safeAreaStore = useSafeAreaStore();
+
+/**
+ * 返回主页
+ */
+const goIndexPage = () => {
+	uni.reLaunch({
+		url: router.INDEX_URL
+	});
+};
+
+/**
+ * 返回上一页
+ */
+const goBackPage = () => {
+	uni.navigateBack();
+};
+</script>
+
+<style lang="scss" scoped>
+.layout-container {
+	display: flex;
+	flex-direction: column;
+	min-height: 100vh;
+	background: linear-gradient(180deg, #B9D3FF 0%, #F2F7FF 22.23%);
+
+	.capsule-box {
+		padding-left: 24rpx;
+		padding-right: 24rpx;
+
+		.icon-wrap {
+			display: flex;
+			justify-content: left;
+			height: 100%;
+			align-items: center;
+
+			.icon-box {
+				margin-left: 16rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				border-radius: 50%;
+				opacity: 0.2;
+				background: rgba(0, 0, 0, 1);
+			}
+
+			.icon-box:first-child {
+				margin-left: 0rpx;
+			}
+		}
+	}
+
+	.content-box {
+		/* 内容区域占满剩余空间 */
+		flex-grow: 1;
+		padding: 0 24rpx 16rpx 24rpx;
+	}
+}
+</style>

+ 26 - 0
src/interceptors/naviInterceptor.js

@@ -0,0 +1,26 @@
+import router from "@/common/constants/router";
+import { useUserInfoStore } from '@/stores/userInfo.js';
+
+/**
+ * 导航拦截器
+ */
+const naviInterceptor = () => {
+	/**
+	 * 用户信息
+	 */
+	let userInfoStore = useUserInfoStore();
+	
+	uni.addInterceptor('navigateTo', {
+	    invoke(data) {
+	        // const token = uni.getStorageSync('token');
+	        if (!userInfoStore.isLogin) {
+	            uni.reLaunch({
+	                url: router.LOGIN_URL
+	            });
+	            return false; // 阻止跳转
+	        }
+	    }
+	});
+};
+
+export default naviInterceptor;

+ 10 - 3
main.js → src/main.js

@@ -12,11 +12,18 @@ app.$mount()
 // #endif
 
 // #ifdef VUE3
-import { createSSRApp } from 'vue'
+import { createSSRApp } from 'vue';
+import * as Pinia from 'pinia';
+import { createUnistorage } from "pinia-plugin-unistorage";
+
 export function createApp() {
-  const app = createSSRApp(App)
+  const app = createSSRApp(App);
+  const pinia = Pinia.createPinia();
+  pinia.use(createUnistorage());
+  app.use(pinia);
   return {
-    app
+    app,
+	  Pinia
   }
 }
 // #endif

+ 0 - 0
manifest.json → src/manifest.json


+ 78 - 0
src/pages.json

@@ -0,0 +1,78 @@
+{
+	"easycom": {
+        "autoscan": true,
+        "custom": {
+            "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
+        }
+    },
+	"pages": [
+		{
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTitleText": "打卡结算",
+				"enablePullDownRefresh": true
+			}
+		},
+		{
+			"path" : "pages/login/login",
+			"style" : 
+			{
+				"navigationBarTitleText" : "登录"
+			}
+		},
+		{
+			"path" : "pages/user-info/user-info",
+			"style" : 
+			{
+				"navigationBarTitleText" : "用户中心"
+			}
+		},
+		{
+			"path" : "pages/punchin-edit/punchin-edit",
+			"style" : 
+			{
+				"navigationBarTitleText" : "编辑"
+			}
+		},
+		{
+			"path" : "pages/punchin-detail/punchin-detail",
+			"style" : 
+			{
+				"navigationBarTitleText" : "",
+				"enablePullDownRefresh": true
+			}
+		},
+		{
+			"path" : "pages/settle-list/settle-list",
+			"style" : 
+			{
+				"navigationBarTitleText" : "奖励结算记录",
+				"enablePullDownRefresh": true
+			}
+		},
+		{
+			"path" : "pages/scratch-record-list/scratch-record-list",
+			"style" : 
+			{
+				"navigationBarTitleText" : "刮刮乐投入与中奖记录",
+				"enablePullDownRefresh": true
+			}
+		},
+		{
+			"path" : "pages/reward-record-list/reward-record-list",
+			"style" : 
+			{
+				"navigationBarTitleText" : "奖励领取记录",
+				"enablePullDownRefresh": true
+			}
+		}
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "uni-app",
+		"navigationBarBackgroundColor": "#F8F8F8",
+		"backgroundColor": "#F8F8F8",
+		"navigationStyle": "custom"
+	},
+	"uniIdRouter": {}
+}

+ 948 - 0
src/pages/index/index.vue

@@ -0,0 +1,948 @@
+<template>
+	<main-layout>
+		<!-- 用户信息区 -->
+		<view class="user-info">
+			<span class="nickname" v-if="!userInfoStore.isLogin" @click="goUserInfoPage">登录</span>
+			<view class="user-icon" v-if="userInfoStore.isLogin">
+				<uni-icons type="person" size="30"></uni-icons>
+			</view>
+			<span class="nickname" v-if="userInfoStore.isLogin" @click="goUserInfoPage">{{ userInfoStore.nickname
+				}}</span>
+			<span class="user-btn" v-if="userInfoStore.isLogin" @click="goUserInfoPage">用户中心</span>
+		</view>
+
+		<!-- 结算 -->
+		<view class="settle-container">
+			<!-- 刮刮乐、奖励数相关区域 -->
+			<view class="left-box">
+				<view class="split-box">
+					<view class="line-box">
+						<span>投入</span>
+						<span class="number-box" @click="addScratchRecord(SCRATCH_ACTION_TYPE_INVEST)">
+							¥{{ userInfo.lotteryInvestAmount }}
+							<uni-icons type="compose" color="#FFFFFF"></uni-icons>
+						</span>
+					</view>
+					<view class="under-line-box">
+						<span>产出</span>
+						<span class="number-box" @click="addScratchRecord(SCRATCH_ACTION_TYPE_WIN)">
+							¥{{ userInfo.lotteryWinAmount }}
+							<uni-icons type="compose" color="#FFFFFF"></uni-icons>
+						</span>
+					</view>
+				</view>
+				<view class="split-box">
+					<view class="line-box">
+						<span>已领取</span>
+						<span class="number-box">{{ userInfo.claimedRewardNum }}</span>
+					</view>
+					<view class="under-line-box">
+						<span>总奖励</span>
+						<span class="number-box">{{ userInfo.totalRewardNum }}</span>
+					</view>
+				</view>
+			</view>
+			<!-- 待领取奖励区 -->
+			<view class="right-box">
+				<view class="reward-title">待领取奖励数</view>
+				<view class="reward-num">{{ userInfo.unclaimedRewardNum }}</view>
+				<view class="reward-btn-group">
+					<view class="reward-btn reward-btn-left" @click="claimReward('all')">全部领取</view>
+					<view class="reward-btn reward-btn-right" @click="claimReward('part')">部分领取</view>
+				</view>
+			</view>
+			<!-- 刷新按钮 -->
+			<view class="refresh-btn" @click="getUserInfo">
+				<uni-icons type="refreshempty" color="#406CE7"></uni-icons>
+			</view>
+		</view>
+
+		<!-- 打卡任务 -->
+		<view class="task-container">
+			<view class="task-header">
+				<view class="task-title" v-if="punchIns.length && punchIns.length > 0">任务({{ punchIns.length }}个)
+				</view>
+				<view class="task-title" v-else>任务</view>
+				<view class="task-add-btn" @click="goPunchInEditPage">
+					<uni-icons type="plusempty" size="30" color="#406CE7"></uni-icons>
+				</view>
+			</view>
+			<view class="task-item" v-for="punchIn in punchIns" :key="punchIn.punchInId">
+				<view class="main-box" @click="goPunchInDetailPage(punchIn.punchInId)">
+					<view class="item-header">
+						<span class="item-title">{{ punchIn.taskName }}</span>
+						<span class="item-reward">x{{ punchIn.rewardNum }}</span>
+						<view class="item-tag" v-if="punchIn.fullAttendanceFlag">全勤奖励</view>
+						<view class="item-tag" v-if="punchIn.weekendDoubleFlag">周末双倍</view>
+					</view>
+					<view class="item-desc" v-if="punchIn.category == 1 || punchIn.category == 2">
+						<span v-if="punchIn.category == 1">规则:打卡次数</span>
+						<span v-if="punchIn.category == 2">规则:计时时间</span>
+						<dict-item :dictCode="dictConst.PUNCH_IN_RULE" :itemCode="punchIn.rule"></dict-item>
+						<span v-if="punchIn.category == 1">{{ punchIn.countTrack }}次</span>
+						<span v-if="punchIn.category == 2">{{ punchIn.timeTrack.slice(0, 5) }}</span>
+					</view>
+					<view class="item-desc">
+						描述:{{ punchIn.description }}
+					</view>
+					<view class="item-detail-list">
+						<view class="item-detail" v-for="punchInRecord in punchIn.punchInRecords"
+							:key="punchInRecord.punchInDate">
+							<view class="detail-text">
+								<uni-dateformat :date="punchInRecord.punchInDate" format="M/d"></uni-dateformat>
+							</view>
+							<view class="detail-box" style="background-color: #E5E5E5;"
+								v-if="punchInRecord.punchInStatus == 'uncreated'"></view>
+							<view class="detail-box" style="background-color: #A5D63F;"
+								v-if="punchInRecord.punchInStatus == 'punchIn'"></view>
+							<view class="detail-box" style="background-color: #D43030;"
+								v-if="punchInRecord.punchInStatus == 'unPunchIn'"></view>
+							<view class="detail-box"
+								v-if="punchInRecord.punchInStatus == 'futureTime' || punchInRecord.punchInStatus == 'todayUnknown'">
+							</view>
+						</view>
+					</view>
+				</view>
+				<view
+					:class="punchIn.punchInStatus == 'punchIn' ? 'func-box func-box-finish' : 'func-box func-box-unfinish'"
+					v-if="punchIn.category == 0" @click="doPunchIn(punchIn.punchInId)">
+					<span
+						v-if="punchIn.punchInStatus == 'unPunchIn' || punchIn.punchInStatus == 'todayUnknown'">打卡</span>
+					<span v-else>已完成</span>
+				</view>
+				<view
+					:class="punchIn.punchInStatus == 'punchIn' ? 'func-box func-box-finish' : 'func-box func-box-unfinish'"
+					v-if="punchIn.category == 1" @click="doPunchIn(punchIn.punchInId)">
+					<span>{{ punchIn.recordCountTrack }}</span>
+					<span>计数</span>
+				</view>
+				<view
+					:class="punchIn.punchInStatus == 'punchIn' ? 'func-box func-box-finish' : 'func-box func-box-unfinish'"
+					v-if="punchIn.category == 2" @click="doPunchInForTimeTrack(punchIn.punchInId, punchIn.timeTrack)">
+					<span>
+						{{ punchIn.recordTimeTrack.slice(0, 5) }}
+					</span>
+					<span>计时</span>
+				</view>
+			</view>
+
+			<uni-load-more status="no-more" v-if="!punchIns || punchIns.length == 0" />
+		</view>
+
+		<!-- 刮刮乐弹出框 -->
+		<uni-popup ref="scratchInputDialog" type="dialog" :is-mask-click="false">
+			<uni-popup-dialog mode="input" :before-close="true"
+				:title="scratchFormData.actionType == SCRATCH_ACTION_TYPE_INVEST ? '投入金额' : '中奖金额'" confirmText="保存"
+				@confirm="scratchFormConfirm" @close="scratchFormClose">
+				<view style="width: 100%;">
+					<uni-forms ref="scratchForm" :modelValue="scratchFormData" :rules="scratchFormRules"
+						label-position="top" :label-width="150">
+						<uni-forms-item label="刮刮乐来源" name="source" required>
+							<uni-data-select :localdata="dictStore.LOTTERY_SCRATCH_SOURCE"
+								v-model="scratchFormData.source"></uni-data-select>
+						</uni-forms-item>
+						<uni-forms-item label="刮刮乐种类" name="category" required>
+							<uni-data-select :localdata="dictStore[scratchFormData.source]"
+								v-model="scratchFormData.category"></uni-data-select>
+						</uni-forms-item>
+						<uni-forms-item
+							:label="scratchFormData.actionType == SCRATCH_ACTION_TYPE_INVEST ? '投入金额' : '中奖金额'"
+							name="amount" required>
+							<uni-easyinput type="digit" placeholder="请输入金额"
+								v-model="scratchFormData.amount"></uni-easyinput>
+						</uni-forms-item>
+					</uni-forms>
+				</view>
+			</uni-popup-dialog>
+		</uni-popup>
+
+		<!-- 领取奖励弹出框 -->
+		<uni-popup ref="claimRewardInputDialog" type="dialog" :is-mask-click="false">
+			<uni-popup-dialog mode="input" :before-close="true" title="领取奖励" confirmText="领取"
+				@confirm="claimRewardFormConfirm" @close="claimRewardFormClose">
+				<view style="width: 100%;">
+					<uni-forms ref="claimRewardForm" :modelValue="claimRewardFormData" :rules="claimRewardFormRules"
+						label-position="top" :label-width="150">
+						<uni-forms-item name="claimRewardNum">
+							<uni-easyinput type="digit" placeholder="请输入领取的奖励数"
+								v-model="claimRewardFormData.claimRewardNum"></uni-easyinput>
+						</uni-forms-item>
+					</uni-forms>
+				</view>
+			</uni-popup-dialog>
+		</uni-popup>
+
+		<!-- 计时弹出框 -->
+		<uni-popup ref="timeTrackInputDialog" type="dialog" :is-mask-click="false">
+			<uni-popup-dialog mode="input" :before-close="true" title="计时记录" confirmText="保存"
+				@confirm="timeTrackFormConfirm" @close="timeTrackFormClose">
+				<view class="pick-box" @click="timeTrackClick">
+					<picker mode="time" :value="timeTrackFormData.timeTrack" @change="timeTrackChange">
+						<view class="pick-box-time">{{ timeTrackFormData.timeTrack }}</view>
+					</picker>
+				</view>
+				<view style="display: none;">
+					<uni-forms ref="timeTrackForm" :modelValue="timeTrackFormData" :rules="timeTrackFormRules">
+						<uni-forms-item name="timeTrack">
+							<uni-easyinput v-model="timeTrackFormData.timeTrack" />
+						</uni-forms-item>
+					</uni-forms>
+				</view>
+			</uni-popup-dialog>
+		</uni-popup>
+	</main-layout>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+import { onPullDownRefresh, onShow } from "@dcloudio/uni-app";
+import { rewardApi, punchInApi, userApi, scratchApi } from '@/service/apis.js';
+import router from '@/common/constants/router.js';
+import { SCRATCH_ACTION_TYPE_INVEST, SCRATCH_ACTION_TYPE_WIN } from '@/common/constants/scratch';
+import { useUserInfoStore } from '@/stores/userInfo.js';
+import { useDictStore } from '@/stores/dict';
+import dictConst from '@/common/constants/dict.js';
+
+// 组件
+/**
+ * 刮刮乐弹出框
+ */
+const scratchInputDialog = ref(null);
+
+/**
+ * 刮刮乐表单
+ */
+const scratchForm = ref(null);
+
+/**
+ * 领取奖励弹出框
+ */
+const claimRewardInputDialog = ref(null);
+
+/**
+ * 领取奖励表单
+ */
+const claimRewardForm = ref(null);
+
+/**
+ * 计时弹出框
+ */
+const timeTrackInputDialog = ref(null);
+
+/**
+ * 计时表单
+ */
+const timeTrackForm = ref(null);
+
+
+// 属性
+/**
+ * 字典信息
+ */
+const dictStore = useDictStore();
+
+/**
+ * 用户信息
+ */
+const userInfoStore = useUserInfoStore();
+
+/**
+ * 用户信息
+ */
+const userInfo = ref({
+	totalRewardNum: 0,
+	unclaimedRewardNum: 0,
+	claimedRewardNum: 0,
+	lotteryInvestAmount: 0.00,
+	lotteryWinAmount: 0.00
+});
+
+/**
+ * 打卡任务
+ */
+const punchIns = ref([]);
+
+/**
+ * 刮刮乐表单数
+ */
+const scratchFormData = ref({});
+
+/**
+ * 刮刮乐表单校验规则
+ */
+const scratchFormRules = ref({
+	"source": {
+		rules: [{
+			required: true,
+			errorMessage: "请选择来源"
+		}]
+	},
+	"category": {
+		rules: [{
+			required: true,
+			errorMessage: "请选择种类"
+		}]
+	},
+	"amount": {
+		rules: [{
+			required: true,
+			errorMessage: "请输入金额"
+		}, {
+			format: 'number',
+			errorMessage: "请输入有效数字"
+		}, {
+			minimum: 0.01,
+			errorMessage: "最小{minimum}元"
+		}]
+	}
+
+});
+
+/**
+ * 领取奖励表单数据
+ */
+const claimRewardFormData = ref({
+	claimRewardNum: 1
+});
+
+/**
+ * 领取奖励表单规则
+ */
+const claimRewardFormRules = ref({
+	claimRewardNum: {
+		rules: [{
+			required: true,
+			errorMessage: "请输入领取的奖励数"
+		}, {
+			format: 'number',
+			errorMessage: "请输入有效数字"
+		}, {
+			minimum: 1,
+			errorMessage: "最少领取{minimum}个"
+		}]
+	}
+});
+
+/**
+ * 计时表单数据
+ */
+const timeTrackFormData = ref({
+	timeTrack: '00:00'
+});
+
+/**
+ * 计时表单规则
+ */
+const timeTrackFormRules = ref({
+	timeTrack: {
+		rules: [{
+			required: true,
+			errorMessage: "请输入时间"
+		}]
+	}
+});
+
+
+// 方法
+/**
+ * 获取用户信息
+ */
+const getUserInfo = async () => {
+	let res = await userApi.queryUserInfo();
+	userInfo.value = res;
+}
+
+/**
+ * 获取打卡
+ */
+const getPunchIns = async () => {
+	let res = await punchInApi.queryPunchIns();
+	punchIns.value = res;
+}
+
+/**
+ * 增加刮刮乐记录
+ */
+const addScratchRecord = async (e) => {
+	// 重置上一轮的表单数据
+	scratchFormData.value = {
+		actionType: e
+	};
+	scratchInputDialog.value.open();
+}
+
+/**
+ * 刮刮乐表单提交
+ */
+const scratchFormConfirm = async () => {
+	scratchForm.value.validate(['actionType']).then(data => {
+		return scratchApi.addScratchRecord(data);
+	}).then(e => {
+		scratchInputDialog.value.close();
+		getUserInfo();
+	});
+}
+
+/**
+ * 刮刮乐表单取消
+ */
+const scratchFormClose = async () => {
+	scratchInputDialog.value.close();
+}
+
+/**
+ * 领取奖励(部分)
+ * @param {String} claimType 部分领取或全部领取(part-部分/all-全部)
+ */
+const claimReward = (claimType) => {
+	if (userInfo.value.unclaimedRewardNum == 0) {
+		uni.showToast({
+			title: "没有可领取的奖励",
+			icon: "none"
+		});
+		return;
+	}
+	// 重置上一轮的表单数据
+	claimRewardFormData.value = {
+		claimRewardNum: claimType == 'part' ? 1 : userInfo.value.unclaimedRewardNum
+	};
+	claimRewardInputDialog.value.open();
+}
+
+
+/**
+ * 领取奖励表单提交
+ */
+const claimRewardFormConfirm = async () => {
+	claimRewardForm.value.validate().then(data => {
+		return rewardApi.claimReward(data);
+	}).then(e => {
+		claimRewardInputDialog.value.close();
+		getUserInfo();
+	});
+}
+
+/**
+ * 领取奖励表单取消
+ */
+const claimRewardFormClose = async () => {
+	claimRewardInputDialog.value.close();
+}
+
+/**
+ * 确认领取奖励
+ */
+const claimRewardConfirm = async (val) => {
+	await rewardApi.claimReward({
+		"claimRewardNum": val
+	});
+	// getReward();
+	claimRewardDialog.value.close();
+}
+
+/**
+ * 计时时间选择监听
+ */
+const timeTrackChange = (e) => {
+	timeTrackFormData.value.timeTrack = e.detail.value;
+}
+
+/**
+ * 打卡(计时)
+ */
+const doPunchInForTimeTrack = (id, timeTrack) => {
+	// 重置上一轮的表单数据
+	timeTrackFormData.value = {
+		id,
+		timeTrack: timeTrack ? timeTrack.slice(0, 5) : '00:00'
+	};
+	timeTrackInputDialog.value.open();
+}
+
+/**
+ * 计时表单提交
+ */
+const timeTrackFormConfirm = async () => {
+	timeTrackForm.value.validate(['id']).then(data => {
+		return punchInApi.doPunchIn(data);
+	}).then(e => {
+		timeTrackInputDialog.value.close();
+		getPunchIns();
+	});
+}
+
+/**
+ * 刮刮乐表单取消
+ */
+const timeTrackFormClose = async () => {
+	timeTrackInputDialog.value.close();
+}
+
+
+/**
+ * 打卡
+ */
+const doPunchIn = async (id) => {
+	await punchInApi.doPunchIn({
+		id
+	});
+	getPunchIns();
+}
+
+/**
+ * 跳转用户用心
+ */
+const goUserInfoPage = () => {
+	uni.navigateTo({
+		url: router.USER_INFO_URL
+	});
+}
+
+/**
+ * 跳转打卡编辑页面
+ */
+const goPunchInEditPage = () => {
+	uni.navigateTo({
+		url: router.PUNCHIN_EDIT_URL
+	});
+};
+
+/**
+ * 跳转打卡详情页面
+ */
+const goPunchInDetailPage = (id) => {
+	uni.navigateTo({
+		url: router.PUNCHIN_DETAIL_URL + "?id=" + id
+	});
+};
+
+/**
+ * 加载数据
+ */
+const loadData = async () => {
+	// 如果还没登录就结束获取数据
+	if (!userInfoStore.isLogin) {
+		userInfo.value = {
+			totalRewardNum: 0,
+			unclaimedRewardNum: 0,
+			claimedRewardNum: 0,
+			lotteryInvestAmount: 0.00,
+			lotteryWinAmount: 0.00
+		};
+		punchIns.value = [];
+		return;
+	}
+
+	// 已登录
+	// isLogin.value = true;
+	try {
+		uni.showLoading({
+			title: '加载中',
+			mask: true
+		});
+		// 获取用户信息
+		getUserInfo();
+		// 获取打卡
+		getPunchIns();
+	} finally {
+		uni.hideLoading();
+	}
+};
+
+onShow(() => {
+	loadData();
+});
+
+onPullDownRefresh(() => {
+	loadData();
+	uni.stopPullDownRefresh();
+});
+</script>
+
+<style lang="scss" scoped>
+.user-info {
+	display: flex;
+	align-items: center;
+	position: relative;
+
+	.user-icon {
+		display: inline-flex !important;
+
+		width: 72rpx;
+		height: 72rpx;
+		background: #FFFFFF;
+		border-radius: 50%;
+
+		justify-content: center;
+		align-items: center;
+	}
+
+	.nickname {
+		margin-left: 16rpx;
+		font-size: 24rpx;
+		font-weight: 400;
+		letter-spacing: 0rpx;
+		line-height: 34.75rpx;
+		color: #000000;
+	}
+
+	.user-btn {
+		position: absolute;
+		right: 0px;
+
+		width: 122rpx;
+		height: 40rpx;
+		opacity: 1;
+		border-radius: 24rpx;
+		background: #FFFFFF;
+		border: 1px solid #406CE7;
+
+		/** 文本1 */
+		font-size: 18rpx;
+		font-weight: 400;
+		letter-spacing: 0rpx;
+		line-height: 26.06rpx;
+		color: #406CE7;
+
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+}
+
+.settle-container {
+	margin-top: 16rpx;
+	display: flex;
+
+	padding: 16rpx 24rpx;
+	height: 266rpx;
+
+	opacity: 1;
+	background: #406CE7;
+	border-radius: 21.35rpx;
+	border: 0.5px solid #E4E4E4;
+	box-shadow: 0px 1px 6px #D8D8D8;
+
+	position: relative;
+
+	.left-box {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+
+		border-right: 1px solid #FFFFFF;
+		padding-right: 24rpx;
+		font-size: 22rpx;
+		font-weight: 400;
+		letter-spacing: 0rpx;
+		line-height: 31.86rpx;
+		color: #FFFFFF;
+
+		.line-box {
+			padding-bottom: 16rpx;
+			border-bottom: 1px solid #FFFFFF;
+			position: relative;
+		}
+
+		.under-line-box {
+			padding-top: 16rpx;
+			position: relative;
+		}
+
+		.number-box {
+			position: absolute;
+			right: 0px;
+			text-align: right;
+		}
+
+		.split-box {
+			flex: 1;
+			display: flex;
+			justify-content: center;
+			align-content: center;
+			flex-direction: column;
+		}
+	}
+
+	.right-box {
+		flex: 2;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+
+		.reward-title {
+			font-size: 26rpx;
+			font-weight: 400;
+			letter-spacing: 0rpx;
+			line-height: 37.65rpx;
+			color: #FFFFFF;
+		}
+
+		.reward-num {
+			flex-grow: 1;
+			font-size: 110rpx;
+			font-weight: 700;
+			letter-spacing: 0rpx;
+			color: #FFFFFF;
+
+			display: flex;
+			align-items: center;
+			justify-content: center;
+		}
+
+		.reward-btn-group {
+			width: 100%;
+			height: 36rpx;
+
+			display: flex;
+			align-items: center;
+			justify-content: center;
+
+			.reward-btn {
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				width: 108rpx;
+				height: 36rpx;
+				opacity: 1;
+				background: #FFFFFF;
+				font-size: 20rpx;
+				font-weight: 700;
+				letter-spacing: 0rpx;
+				line-height: 28.96rpx;
+				color: #406CE7;
+			}
+
+			.reward-btn-left {
+				border-radius: 24rpx 0rpx 0rpx 24rpx;
+			}
+
+			.reward-btn-right {
+				border-radius: 0rpx 24rpx 24rpx 0rpx;
+			}
+		}
+	}
+
+	.refresh-btn {
+		position: absolute;
+		top: 16rpx;
+		right: 24rpx;
+		border-radius: 50%;
+
+		width: 36rpx;
+		height: 36rpx;
+		opacity: 1;
+		background: #F7F7F7;
+
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+}
+
+.task-container {
+	margin-top: 16rpx;
+
+	.task-header {
+		position: relative;
+		height: 80rpx;
+		display: flex;
+		justify-content: center;
+		/* 水平居中 */
+		align-items: center;
+		/* 垂直居中 */
+
+		.task-title {
+			position: absolute;
+			left: 0rpx;
+			font-size: 30rpx;
+			font-weight: 400;
+			line-height: 43.44rpx;
+			color: rgba(0, 0, 0, 1);
+		}
+
+		.task-add-btn {
+			display: inline-flex;
+			justify-content: center;
+			align-items: center;
+			position: absolute;
+			right: 0rpx;
+			width: 60rpx;
+			height: 60rpx;
+			border-radius: 10rpx;
+			border: 3px solid rgba(64, 108, 231, 1);
+		}
+	}
+
+	.task-item {
+		margin-top: 16rpx;
+		width: 100%;
+		// height: 239rpx;
+		border-radius: 24rpx;
+		background: #FFFFFF;
+		border: 0.5px solid #E4E4E4;
+		box-shadow: 0px 1px 6px #D8D8D8;
+
+		display: flex;
+
+		.main-box {
+			flex-grow: 1;
+			padding: 16rpx 16rpx 16rpx 24rpx;
+
+			.item-header {
+				// position: relative;
+				display: flex;
+				align-items: center;
+
+				.item-title {
+					font-size: 30rpx;
+					font-weight: 400;
+					letter-spacing: 0rpx;
+					line-height: 43.44rpx;
+					color: #000000;
+				}
+
+				.item-reward {
+					margin-left: 8rpx;
+					font-size: 24rpx;
+					font-weight: 400;
+					letter-spacing: 0rpx;
+					line-height: 34.75rpx;
+					color: #000000;
+				}
+
+				.item-tag:first-child {
+					margin-left: 24rpx;
+				}
+
+				.item-tag {
+					margin-left: 16rpx;
+					width: 94rpx;
+					height: 38rpx;
+					opacity: 1;
+					border-radius: 24rpx;
+					background: #FFFFFF;
+					border: 1px solid #406CE7;
+
+					display: inline-flex;
+					justify-content: center;
+					align-items: center;
+
+					font-size: 18rpx;
+					font-weight: 400;
+					letter-spacing: 0rpx;
+					// line-height: 26.06rpx;
+					color: #406CE7;
+
+				}
+
+				.item-btn {
+					display: inline-flex;
+					position: absolute;
+					right: 0rpx;
+					width: 123rpx;
+					height: 42rpx;
+					border-radius: 30rpx;
+					border: 1rpx solid #2A82E4;
+					justify-content: center;
+					align-items: center;
+
+					font-size: 20rpx;
+					font-weight: 400;
+					line-height: 28.96px;
+					color: rgba(64, 108, 231, 1);
+				}
+			}
+
+			.item-desc {
+				margin-top: 16rpx;
+				font-size: 24rpx;
+				font-weight: 400;
+				letter-spacing: 0rpx;
+				line-height: 34.75rpx;
+				color: #000000;
+			}
+
+			.item-detail-list {
+				margin-top: 16rpx;
+				display: grid;
+				grid-template-columns: repeat(7, 1fr);
+
+				.item-detail {
+					display: flex;
+					flex-direction: column;
+					justify-content: center;
+					align-items: center;
+
+					.detail-text {
+						font-size: 20rpx;
+						font-weight: 400;
+						letter-spacing: 0rpx;
+						line-height: 28.96rpx;
+						color: rgba(0, 0, 0, 1);
+					}
+
+					.detail-box {
+						// display: block;
+						width: 42rpx;
+						height: 42rpx;
+						margin-top: 5rpx;
+						border: 5rpx solid #000000;
+					}
+				}
+			}
+		}
+
+		.func-box {
+			flex-shrink: 0;
+			width: 160rpx;
+			border-radius: 0rpx 24rpx 24rpx 0rpx;
+
+
+			font-size: 36rpx;
+			font-weight: 400;
+			letter-spacing: 0rpx;
+			line-height: 52.13rpx;
+			color: #FFFFFF;
+
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			flex-direction: column;
+		}
+
+		.func-box-finish {
+			background: #F2607A;
+		}
+
+		.func-box-unfinish {
+			background: #406CE7;
+		}
+	}
+}
+
+.pick-box {
+	width: 100%;
+	height: 100rpx;
+	border-radius: 8px;
+	background: #ffffff;
+	// 阴影
+	border: 0.5px solid #e4e4e4;
+
+	picker {
+		width: 100%;
+		height: 100%;
+
+		.pick-box-time {
+			width: 100%;
+			height: 100rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			color: #000000;
+			border-radius: 24rpx;
+			text-align: center;
+		}
+	}
+}
+</style>

+ 182 - 0
src/pages/login/login.vue

@@ -0,0 +1,182 @@
+<template>
+	<main-layout :showHome="true">
+		<template>
+			<view class="login-container">
+				<view class="login-avator">
+					<uni-icons type="person" size="60"></uni-icons>
+				</view>
+				<view class="login-nickname">
+					<input v-model="loginFormData.nickname" placeholder="请输入昵称" />
+				</view>
+
+				<view style="display: none">
+					<uni-forms ref="loginForm" :modelValue="loginFormData" :rules="loginFormRules"
+						err-show-type="modal">
+						<uni-forms-item name="nickname">
+							<uni-easyinput type="text" v-model="loginFormData.nickname" placeholder="请输入昵称"
+								:clearable="false" :inputBorder="false" />
+						</uni-forms-item>
+					</uni-forms>
+				</view>
+
+				<view class="login-btn" @click="login">登录</view>
+			</view>
+		</template>
+	</main-layout>
+</template>
+
+<script setup>
+import { ref } from "vue";
+import { loginApi } from "@/service/apis.js";
+import router from "@/common/constants/router.js";
+import { useUserInfoStore } from "@/stores/userInfo.js";
+
+// 组件
+/**
+ * 登录表单
+ */
+const loginForm = ref(null);
+
+// 属性
+/**
+ * 用户信息
+ */
+const userInfoStore = useUserInfoStore();
+
+/**
+ * 登录表单数据
+ */
+const loginFormData = ref({
+	nickname: "蜗牛",
+});
+
+/**
+ * 登录表单校验规则
+ */
+const loginFormRules = ref({
+	nickname: {
+		rules: [
+			{
+				required: true,
+				errorMessage: "昵称不能为空",
+			},
+			{
+				maxLength: 30,
+				errorMessage: "昵称不能超过{maxLength}个字符",
+			},
+		],
+	},
+});
+
+// 方法
+const login = async () => {
+	try {
+		let formData = await loginForm.value.validate();
+		uni.showLoading({
+			title: "登录中...",
+		});
+		// 获取供应商
+		let providerResult = await uni.getProvider({ service: "oauth" });
+		// 获取登录code
+		let loginResult = await uni.login({ provider: providerResult.provider[0] });
+		// 登录
+		let token = await loginApi.login({
+			code: loginResult.code,
+			nickname: formData.nickname,
+		});
+
+		// 保存用户信息(token)
+		userInfoStore.$patch({
+			token,
+			nickname: formData.nickname,
+		});
+
+		uni.showToast({
+			title: "登录成功",
+			icon: "success",
+			duration: 1000,
+		});
+
+		// 登录结束返回主页
+		setTimeout(() => {
+			uni.navigateTo({
+				url: router.INDEX_URL,
+			});
+		}, 1000);
+	} finally {
+		uni.hideLoading();
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.login-container {
+	margin-top: 150rpx;
+
+	width: 100%;
+	height: 100%;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	flex-direction: column;
+
+	.login-avator {
+		width: 200rpx;
+		height: 200rpx;
+		background: #ffffff;
+		border-radius: 50%;
+
+		// 阴影
+		border: 0.5px solid #e4e4e4;
+		box-shadow: 0px 1px 6px #d8d8d8;
+
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.login-nickname {
+		margin-top: 50rpx;
+
+		width: 599rpx;
+		height: 100rpx;
+		border-radius: 8px;
+		background: #ffffff;
+
+		// 阴影
+		border: 0.5px solid #e4e4e4;
+		box-shadow: 0px 1px 6px #d8d8d8;
+
+		input {
+			width: 100%;
+			height: 100%;
+			font-size: 36rpx;
+			font-weight: 700;
+			letter-spacing: 0rpx;
+			line-height: 52.13rpx;
+			color: #000000;
+			border-radius: 24rpx;
+			text-align: center;
+		}
+	}
+
+	.login-btn {
+		margin-top: 150rpx;
+
+		width: 599rpx;
+		height: 100rpx;
+		border-radius: 24rpx;
+		background: #406ce7;
+
+		font-size: 36rpx;
+		font-weight: 400;
+		letter-spacing: 0rpx;
+		line-height: 52.13rpx;
+		color: #ffffff;
+
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+}
+</style>

+ 424 - 0
src/pages/punchin-detail/punchin-detail.vue

@@ -0,0 +1,424 @@
+<template>
+	<main-layout :showHome="true" :showBack="true">
+		<uni-calendar :start-date="punchInData.startDate" :end-date="punchInData.endDate"
+			:selected="punchInData.calendarSelected" @monthSwitch="calendarMonthSwitchChange" />
+		<viwe class="info-box">
+			<view class="left">打卡:{{ punchInData.punchInNum }}次</view>
+			<view class="right">全勤率:{{ punchInData.punchInRate }}%</view>
+		</viwe>
+		<view class="log-box">
+			<uni-section title="打卡记录" type="line">
+				<uni-list>
+					<uni-list-item v-for="record in punchInData.punchInRecords" :key="record.punchInDate">
+						<template v-slot:body>
+							{{ record.punchInDate }}
+							<span v-if="record.punchInStatus == 1 || record.punchInStatus == 3"> 完成打卡</span>
+							<span v-else> 未完成打卡</span>
+							<span v-if="record.settleCategory == 1">,打卡{{ record.countTrack }}次</span>
+							<span v-if="record.settleCategory == 2">,打卡时长{{ record.timeTrack }}</span>
+						</template>
+					</uni-list-item>
+				</uni-list>
+				<uni-load-more status="no-more" v-if="punchInData.punchInRecords.length == 0" />
+			</uni-section>
+		</view>
+		<uni-fab ref="fabBtn" :content="fabContent" :pattern="fabPattern" horizontal="right" vertical="bottom"
+			direction="vertical" @trigger="trigger" />
+
+		<!-- 删除确认框 -->
+		<uni-popup ref="deleteDialog" type="dialog">
+			<uni-popup-dialog mode="base" :before-close="true" title="删除提示" content="确认删除当前任务?"
+				@confirm="deleteDialogConfirm" @close="deleteDialogClose"></uni-popup-dialog>
+		</uni-popup>
+
+		<!-- 归档确认框 -->
+		<uni-popup ref="archiveDialog" type="dialog">
+			<uni-popup-dialog mode="base" :before-close="true" title="归档提示" content="确认归档当前任务?"
+				@confirm="archiveDialogConfirm" @close="archiveDialogClose"></uni-popup-dialog>
+		</uni-popup>
+
+		<!-- 撤销确认框 -->
+		<uni-popup ref="revokeDialog" type="dialog">
+			<uni-popup-dialog mode="base" :before-close="true" title="撤销提示" content="确认撤销打卡?"
+				@confirm="revokeDialogConfirm" @close="revokeDialogClose"></uni-popup-dialog>
+		</uni-popup>
+
+		<!-- 补卡弹出框 -->
+		<uni-popup ref="remakeInputDialog" type="dialog" :is-mask-click="false">
+			<uni-popup-dialog mode="input" :before-close="true" title="补卡" @confirm="remakeFormConfirm"
+				@close="remakeFormClose">
+				<view style="width: 100%;">
+					<uni-forms ref="remakeForm" :modelValue="remakeFormData" :rules="remakeFormRules"
+						label-position="top" :label-width="150">
+						<uni-forms-item name="punchInDate">
+							<picker mode="date" :value="remakeFormData.punchInDate" @change="remakePunchInDateChange">
+								<view class="pick-box">{{ remakeFormData.punchInDate }}</view>
+							</picker>
+						</uni-forms-item>
+					</uni-forms>
+				</view>
+			</uni-popup-dialog>
+		</uni-popup>
+
+	</main-layout>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+import { onLoad, onPullDownRefresh } from '@dcloudio/uni-app';
+import router from '@/common/constants/router';
+import { punchInApi } from '@/service/apis.js';
+import dateUtils from '@/utils/date';
+
+// 组件
+const fabBtn = ref(null);
+/**
+ * 删除弹出框
+ */
+const deleteDialog = ref(null);
+
+/**
+ * 归档弹出框
+ */
+const archiveDialog = ref(null);
+
+/**
+ * 补卡弹出框
+ */
+const remakeInputDialog = ref(null);
+
+/**
+ * 补卡表单
+ */
+const remakeForm = ref(null);
+
+/**
+ * 撤销弹出框
+ */
+const revokeDialog = ref(null);
+
+// 属性
+/**
+ * 任务ID
+ */
+const punchInId = ref(null);
+
+/**
+ * 悬浮菜单样式
+ */
+const fabPattern = ref({
+	icon: 'compose'
+});
+
+/**
+ * 悬浮按钮菜单
+ */
+const fabContent = [{
+	text: '删除',
+	active: false,
+	iconPath: '/static/delete.svg',
+	selectedIconPath: '/static/delete-active.svg',
+	func: "delete"
+},
+{
+	text: '归档',
+	active: false,
+	iconPath: '/static/archive.svg',
+	selectedIconPath: '/static/archive-active.svg',
+	func: "archive"
+},
+{
+	text: '撤销',
+	active: false,
+	iconPath: '/static/revoke.svg',
+	selectedIconPath: '/static/revoke_active.svg',
+	func: "revoke"
+},
+{
+	text: '补卡',
+	active: false,
+	iconPath: '/static/append.svg',
+	selectedIconPath: '/static/append-active.svg',
+	func: "remake"
+},
+{
+	text: '编辑',
+	active: false,
+	iconPath: '/static/edit.svg',
+	selectedIconPath: '/static/edit-active.svg',
+	func: "edit"
+}
+];
+
+/**
+ * 补卡表单数据
+ */
+const remakeFormData = ref({
+	punchIndate: '2024-12-16'
+});
+
+/**
+ * 补卡表单校验规则
+ */
+const remakeFormRules = ref({
+	punchInDate: {
+		rules: [{
+			required: true,
+			errorMessage: '补卡日期不能为空'
+		}]
+	}
+});
+
+/**
+ * 查询条件
+ */
+const queryData = ref(null);
+
+/**
+ * 打卡日历数据
+ */
+const punchInData = ref({
+	startDate: '2024-12-01',
+	endDate: '2024-12-31',
+	punchInNum: 0,
+	punchInRate: 0,
+	calendarSelected: [],
+	punchInRecords: []
+});
+
+// 方法
+/**
+ * 悬浮按钮点击事件
+ */
+const trigger = (e) => {
+	if (e.item.func == 'delete') {
+		deleteDialog.value.open();
+	}
+	if (e.item.func == 'archive') {
+		archiveDialog.value.open();
+	}
+	if (e.item.func == 'revoke') {
+		revokeDialog.value.open();
+	}
+	if (e.item.func == 'remake') {
+		// 初始化上一轮的数据
+		remakeFormData.value = {
+			punchInId: punchInId.value,
+			punchInDate: dateUtils.getYesterday()
+		};
+
+		remakeInputDialog.value.open();
+	}
+	if (e.item.func == 'edit') {
+		uni.navigateTo({
+			url: router.PUNCHIN_EDIT_URL + "?id=" + punchInId.value
+		});
+	}
+
+	fabBtn.value.close();
+}
+
+/**
+ * 删除确认
+ */
+const deleteDialogConfirm = async () => {
+	punchInApi.deletePunchIn({ id: punchInId.value })
+		.then(ret => {
+			deleteDialog.value.close();
+			uni.showToast({
+				title: '删除成功',
+				icon: 'success'
+			});
+			setTimeout(() => {
+				uni.navigateBack();
+			}, 1000);
+		})
+		.catch(err => {
+			uni.showToast({
+				title: '删除失败',
+				icon: 'error'
+			});
+		});
+}
+
+/**
+ * 删除取消
+ */
+const deleteDialogClose = () => {
+	deleteDialog.value.close();
+}
+
+/**
+ * 归档确认
+ */
+const archiveDialogConfirm = async () => {
+	punchInApi.archivePunchIn({ id: punchInId.value })
+		.then(ret => {
+			archiveDialog.value.close();
+			uni.showToast({
+				title: '归档成功',
+				icon: 'success'
+			});
+			setTimeout(() => {
+				uni.navigateBack();
+			}, 1000);
+		})
+		.catch(err => {
+			uni.showToast({
+				title: '归档失败',
+				icon: 'error'
+			});
+		});
+}
+
+/**
+ * 归档取消
+ */
+const archiveDialogClose = () => {
+	archiveDialog.value.close();
+}
+
+/**
+ * 补卡时间选择监听
+ */
+const remakePunchInDateChange = (e) => {
+	remakeFormData.value.punchInDate = e.detail.value;
+}
+
+/**
+ * 补卡表单提交
+ */
+const remakeFormConfirm = async () => {
+	remakeForm.value.validate(['punchInId']).then(data => {
+		return punchInApi.remakePunchIn(data);
+	}).then(e => {
+		remakeInputDialog.value.close();
+		uni.showToast({
+			title: '补卡成功',
+			icon: 'success'
+		});
+		loadData();
+	}).catch(err => {
+		uni.showToast({
+			title: '补卡失败',
+			icon: 'error'
+		});
+	})
+}
+
+/**
+ * 补卡表单取消
+ */
+const remakeFormClose = async () => {
+	remakeInputDialog.value.close();
+}
+
+/**
+ * 撤销确认
+ */
+const revokeDialogConfirm = async () => {
+	punchInApi.revokePunchIn({ punchInId: punchInId.value })
+		.then(ret => {
+			revokeDialog.value.close();
+			uni.showToast({
+				title: '撤销成功',
+				icon: 'success'
+			});
+			loadData();
+		})
+		.catch(err => {
+			uni.showToast({
+				title: '撤销失败',
+				icon: 'error'
+			});
+		});
+}
+
+/**
+ * 撤销取消
+ */
+const revokeDialogClose = () => {
+	revokeDialog.value.close();
+}
+
+/**
+ * 日历月份切换
+ */
+const calendarMonthSwitchChange = (e) => {
+	queryData.value = e;
+	loadData();
+}
+
+/**
+ * 加载数据
+ */
+const loadData = () => {
+	punchInApi.queryPunchInData({
+		id: punchInId.value,
+		year: queryData.value.year,
+		month: queryData.value.month,
+	}).then(data => {
+		punchInData.value = data;
+	}).catch(err => {
+		uni.showToast({
+			title: '加载失败',
+			icon: 'error'
+		});
+	});
+}
+
+onLoad(async (e) => {
+	if (e.id) {
+		punchInId.value = e.id;
+		// 初始化查询条件
+		queryData.value = dateUtils.getTodayYearMonthObj();
+
+		// 加载数据
+		loadData();
+	}
+});
+
+onPullDownRefresh(() => {
+	loadData();
+	uni.stopPullDownRefresh();
+});
+</script>
+
+<style lang="scss" scoped>
+.info-box,
+.log-box {
+	margin-top: 24rpx;
+}
+
+.info-box {
+	display: flex;
+	background-color: #FFFFFF;
+	padding: 20rpx 10rpx;
+
+	.left,
+	.right {
+		flex: 1;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+}
+
+.pick-box {
+	display: flex;
+	box-sizing: border-box;
+	flex-direction: row;
+	align-items: center;
+	border: 1px solid #dcdfe6;
+	border-radius: 4px;
+
+	width: auto;
+	position: relative;
+	overflow: hidden;
+	flex: 1;
+	line-height: 1;
+	font-size: 14px;
+	height: 35px;
+	padding-left: 10px;
+}
+</style>

+ 245 - 0
src/pages/punchin-edit/punchin-edit.vue

@@ -0,0 +1,245 @@
+<template>
+	<main-layout :showHome="true" :showBack="true">
+		<template>
+			<uni-forms ref="punchInForm" :modelValue="punchInFormData" :label-width="80" :rules="punchInFormRules">
+				<uni-section title="基本信息" padding="16px" type="line">
+					<uni-forms-item label="任务名称" required name="taskName">
+						<uni-easyinput v-model="punchInFormData.taskName" placeholder="请输入任务名称" />
+					</uni-forms-item>
+					<uni-forms-item label="奖励数" required name="rewardNum">
+						<uni-easyinput v-model="punchInFormData.rewardNum" placeholder="请输入奖励数" type="number" />
+					</uni-forms-item>
+					<uni-forms-item label="周末双倍" required name="weekendDoubleFlag">
+						<uni-data-checkbox v-model="punchInFormData.weekendDoubleFlag"
+							:localdata="dictStore.ENABLE_STATUS"></uni-data-checkbox>
+					</uni-forms-item>
+					<uni-forms-item label="全勤双倍" required name="fullAttendanceFlag">
+						<uni-data-checkbox v-model="punchInFormData.fullAttendanceFlag"
+							:localdata="dictStore.ENABLE_STATUS"></uni-data-checkbox>
+					</uni-forms-item>
+					<uni-forms-item label="打卡类型" required name="category">
+						<uni-data-select :localdata="dictStore.PUNCH_IN_CATEGORY"
+							v-model="punchInFormData.category"></uni-data-select>
+					</uni-forms-item>
+					<uni-forms-item label="规则描述" name="description">
+						<uni-easyinput type="textarea" v-model="punchInFormData.description" placeholder="请输入任务描述" />
+					</uni-forms-item>
+				</uni-section>
+				<uni-section title="计数配置" padding="16px" type="line" v-if="punchInFormData.category == 1">
+					<uni-forms-item label="判断规则" required name="rule">
+						<uni-data-select :localdata="dictStore.PUNCH_IN_RULE"
+							v-model="punchInFormData.rule"></uni-data-select>
+					</uni-forms-item>
+					<uni-forms-item label="数值" required name="countTrack">
+						<uni-easyinput v-model="punchInFormData.countTrack" placeholder="请输入目标数值" type="digit" />
+					</uni-forms-item>
+				</uni-section>
+				<uni-section title="计时配置" padding="16px" type="line" v-if="punchInFormData.category == 2">
+					<uni-forms-item label="判断规则" required name="rule">
+						<uni-data-select :localdata="dictStore.PUNCH_IN_RULE"
+							v-model="punchInFormData.rule"></uni-data-select>
+					</uni-forms-item>
+					<uni-forms-item label="时间" required name="timeTrack">
+						<picker mode="time" :value="punchInFormData.timeTrack" @change="timeChange">
+							<view class="pick-box">{{ punchInFormData.timeTrack }}</view>
+						</picker>
+					</uni-forms-item>
+				</uni-section>
+				<view class="button-container">
+					<button type="default" style="width:300rpx;" @click="cancel">取消</button>
+					<button type="primary" style="color:#ffffff;backgroundColor:#2A82E4;width:300rpx;"
+						@click="savePunchIn">保存</button>
+				</view>
+			</uni-forms>
+		</template>
+	</main-layout>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+import { onLoad } from '@dcloudio/uni-app';
+import { punchInApi } from '@/service/apis';
+import { useDictStore } from '@/stores/dict';
+
+// 组件
+/**
+ * 打卡任务表单
+ */
+const punchInForm = ref(null);
+
+// 属性
+/**
+ * 字典状态管理
+ */
+const dictStore = useDictStore();
+
+/**
+ * 打卡任务表单数据
+ */
+const punchInFormData = ref({
+	"rewardNum": 1,
+	"weekendDoubleFlag": 1,
+	"fullAttendanceFlag": 1,
+	"category": 0,
+	"rule": 0,
+	"countTrack": 10,
+	"timeTrack": "00:00"
+});
+
+/**
+ * 打卡任务表单规则
+ */
+const punchInFormRules = ref({
+	taskName: {
+		rules: [{
+			required: true,
+			errorMessage: '任务名称不能为空'
+		}]
+	},
+	rewardNum: {
+		rules: [{
+			required: true,
+			errorMessage: '奖励数值不能为空'
+		}, {
+			format: 'number',
+			errorMessage: "请输入有效数字"
+		}, {
+			minimum: 1,
+			errorMessage: "最小值{minimum}"
+		}]
+	},
+	weekendDoubleFlag: {
+		rules: [{
+			required: true,
+			errorMessage: '周末双倍奖励不能为空'
+		}]
+	},
+	fullAttendanceFlag: {
+		rules: [{
+			required: true,
+			errorMessage: '全勤奖励不能为空'
+		}]
+	},
+	category: {
+		rules: [{
+			required: true,
+			errorMessage: '任务类型不能为空'
+		}]
+	},
+	description: {
+		rules: [{
+			maxLength: 100,
+			errorMessage: '描述不能超过{maxLength}个字符'
+		}]
+	},
+	rule: {
+		rules: [{
+			required: true,
+			errorMessage: '判断规则不能为空'
+		}]
+	},
+	countTrack: {
+		rules: [{
+			required: true,
+			errorMessage: '数值不能为空'
+		}, {
+			format: 'number',
+			errorMessage: "请输入有效数字"
+		}, {
+			minimum: 1,
+			errorMessage: "最小值{minimum}"
+		}]
+	},
+	timeTrack: {
+		rules: [{
+			required: true,
+			errorMessage: '数值不能为空'
+		}]
+	}
+});
+
+/**
+ * 周末双倍奖励开关改变监听
+ */
+const weekendDoubleSwitchChange = (e) => {
+	punchInFormData.value.weekendDoubleFlag = e.detail.value;
+}
+
+/**
+ * 全勤奖励开关改变监听
+ */
+const fullAttendanceSwitchChange = (e) => {
+	punchInFormData.value.fullAttendanceFlag = e.detail.value;
+}
+
+/**
+ * 时间选择监听
+ */
+const timeChange = (e) => {
+	punchInFormData.value.timeTrack = e.detail.value;
+}
+
+/**
+ * 保存打卡任务
+ */
+const savePunchIn = () => {
+	punchInForm.value.validate(['id']).then(() => {
+		return punchInApi.addPunchIn(punchInFormData.value)
+	}).then(datt => {
+		uni.showToast({
+			title: '保存成功',
+			icon: 'success',
+			duration: 2000
+		});
+		setTimeout(() => {
+			uni.navigateBack();
+		}, 2000);
+	});
+}
+
+/**
+ * 后退
+ */
+const cancel = () => {
+	uni.navigateBack();
+}
+
+onLoad(async (e) => {
+	if (e.id) {
+		const res = await punchInApi.queryPunchInById({ "id": e.id });
+		res.fullAttendanceFlag = res.fullAttendanceFlag ? 1 : 0;
+		res.weekendDoubleFlag = res.weekendDoubleFlag ? 1 : 0;
+		punchInFormData.value = res;
+	}
+});
+</script>
+
+<style lang="scss" scoped>
+.pick-box {
+	display: flex;
+	box-sizing: border-box;
+	flex-direction: row;
+	align-items: center;
+	border: 1px solid #dcdfe6;
+	border-radius: 4px;
+
+	width: auto;
+	position: relative;
+	overflow: hidden;
+	flex: 1;
+	line-height: 1;
+	font-size: 14px;
+	height: 35px;
+	padding-left: 10px;
+}
+
+.button-container {
+	background-color: #FFFFFF;
+	display: flex;
+	/* 使用Flexbox布局 */
+	justify-content: space-between;
+	/* 按钮之间的空间分布 */
+	padding: 20rpx;
+	/* 容器两侧的空白填充 */
+}
+</style>

+ 91 - 0
src/pages/reward-record-list/reward-record-list.vue

@@ -0,0 +1,91 @@
+<template>
+	<main-layout :showHome="true" :showBack="true">
+		<view class="selector">
+			<uni-datetime-picker type="daterange" v-model="datePickerValue" @change="dateChange" />
+		</view>
+		<uni-list :border="true">
+			<uni-list-item v-for="item in listData" :key="item.id">
+				<template v-slot:body>
+					<p>{{ item.claimRewardTime }}</p>
+					<p>
+						领取奖励:{{ item.claimRewardNum }},领取前奖励:{{ item.beforeClaimRewardNum }},领取后奖励:{{
+							item.afterClaimRewardNum }}
+					</p>
+				</template>
+			</uni-list-item>
+		</uni-list>
+		<uni-load-more status="no-more" v-if="!listData || listData.length == 0" />
+	</main-layout>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+import { onLoad, onPullDownRefresh } from "@dcloudio/uni-app";
+import dateUtils from '@/utils/date';
+import { rewardApi } from '@/service/apis';
+
+//属性
+/**
+ * 日期选择器值/
+ */
+const datePickerValue = ref([]);
+
+/**
+ * 查询条件
+ */
+const queryData = ref(null);
+
+/**
+ * 列表数据
+ */
+const listData = ref(null);
+
+// 方法
+/**
+ * 日期选择监听
+ */
+const dateChange = (e) => {
+	if (e.length == 0) {
+		queryData.value = {};
+		return;
+	}
+
+	queryData.value = {
+		startDate: e[0],
+		endDate: e[1]
+	};
+	loadData();
+}
+
+/**
+ * 加载数据
+ */
+const loadData = () => {
+	rewardApi.queryClaimRewardRecords(queryData.value).then(res => {
+		listData.value = res;
+	});
+}
+
+// 生命周期
+onLoad(() => {
+	const startDate = dateUtils.getFirstDayOfMonth();
+	const endDate = dateUtils.getLastDayOfMonth();
+	datePickerValue.value = [startDate, endDate];
+	queryData.value = {
+		startDate,
+		endDate
+	}
+	loadData();
+});
+
+onPullDownRefresh(() => {
+	loadData();
+	uni.stopPullDownRefresh();
+});
+</script>
+
+<style lang="scss" scoped>
+.selector {
+	background-color: #FFFFFF;
+}
+</style>

+ 187 - 0
src/pages/scratch-record-list/scratch-record-list.vue

@@ -0,0 +1,187 @@
+<template>
+	<main-layout :showHome="true" :showBack="true">
+		<view class="selector">
+			<uni-datetime-picker type="daterange" v-model="datePickerValue" @change="dateChange" />
+		</view>
+		<uni-list :border="true">
+			<uni-list-item v-for="item in listData" :key="item.id">
+				<template v-slot:body>
+					<view class="box">
+						<view class="content">
+							<p>{{ item.creationTime }}</p>
+							<p>
+
+								<!-- <span v-if="item.actionType == 0">购买</span> -->
+								<dict-item :dictCode="dictConst.LOTTERY_SCRATCH_SOURCE"
+									:itemCode="item.source"></dict-item>
+								<!-- <span v-if="item.source == 'WELFARE_LOTTERY'">福彩</span>
+								<span v-if="item.source == 'SPORTS_LOTTERY'">体彩</span> -->
+								<dict-item :dictCode="item.source" :itemCode="item.category"></dict-item>
+								<dict-item :dictCode="dictConst.SCRATCH_ACTION_TYPE"
+									:itemCode="item.actionType"></dict-item>
+								<!-- <span v-if="item.category == 'XINYUN88'">幸运88</span>
+								<span v-if="item.category == 'CHAOGEILI'">超给力</span> -->
+								<!-- <span v-if="item.actionType == 0">花费</span>
+								<span v-if="item.actionType == 1">中奖</span> -->
+								{{ item.amount }}元
+							</p>
+						</view>
+						<view class="icon" @click="oepnRevokeDialog(item.id)">
+							<uni-icons type="closeempty" size="30" />
+						</view>
+					</view>
+				</template>
+			</uni-list-item>
+			<uni-load-more status="no-more" v-if="!listData || listData.length == 0" />
+		</uni-list>
+
+		<!-- 撤销确认框 -->
+		<uni-popup ref="revokeDialog" type="dialog">
+			<uni-popup-dialog mode="base" :before-close="true" title="撤销提示" content="确认撤销记录?"
+				@confirm="revokeDialogConfirm" @close="revokeDialogClose"></uni-popup-dialog>
+		</uni-popup>
+	</main-layout>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+import { onLoad, onPullDownRefresh } from "@dcloudio/uni-app";
+import dateUtils from '@/utils/date';
+import { scratchApi } from '@/service/apis';
+import { useDictStore } from '@/stores/dict';
+import dictConst from '@/common/constants/dict.js';
+
+
+// 组件
+const revokeDialog = ref(null);
+
+//属性
+/**
+ * 字典信息
+ */
+const dictStore = useDictStore();
+/**
+ * 日期选择器值/
+ */
+const datePickerValue = ref([]);
+
+/**
+ * 查询条件
+ */
+const queryData = ref(null);
+
+/**
+ * 列表数据
+ */
+const listData = ref(null);
+
+/**
+ * 待撤销的记录ID
+ */
+const scratchRecordId = ref(null);
+
+// 方法
+/**
+ * 日期选择监听
+ */
+const dateChange = (e) => {
+	if (e.length == 0) {
+		queryData.value = {};
+		return;
+	}
+
+	queryData.value = {
+		startDate: e[0],
+		endDate: e[1]
+	};
+	loadData();
+}
+
+/**
+ * 加载数据
+ */
+const loadData = async () => {
+	scratchApi.queryScratchRecord(queryData.value).then(res => {
+		listData.value = res;
+	});
+}
+
+/**
+ * 打卡撤销dialog
+ * @param id 
+ */
+const oepnRevokeDialog = (id) => {
+	scratchRecordId.value = id;
+	revokeDialog.value.open();
+}
+
+/**
+	 * 撤销确认
+	 */
+const revokeDialogConfirm = async () => {
+	try {
+		let res = await scratchApi.revokeScratchRecord({
+			id: scratchRecordId.value
+		});
+		uni.showToast({
+			title: '撤销成功',
+			icon: 'success'
+		});
+		setTimeout(() => {
+			loadData();
+		}, 2000);
+	} catch (e) {
+		uni.showToast({
+			title: '撤销失败',
+			icon: 'error',
+			duration: 5000
+		});
+	} finally {
+		revokeDialogClose();
+	}
+}
+
+/**
+ * 撤销取消
+ */
+const revokeDialogClose = () => {
+	// 重置数据
+	scratchRecordId.value = null;
+	revokeDialog.value.close();
+}
+
+// 生命周期
+onLoad(() => {
+	const startDate = dateUtils.getFirstDayOfMonth();
+	const endDate = dateUtils.getLastDayOfMonth();
+	datePickerValue.value = [startDate, endDate];
+	queryData.value = {
+		startDate,
+		endDate
+	}
+	loadData();
+});
+
+onPullDownRefresh(() => {
+	loadData();
+	uni.stopPullDownRefresh();
+});
+</script>
+
+<style lang="scss" scoped>
+.selector {
+	background-color: #FFFFFF;
+}
+
+.box {
+	width: 100%;
+	height: 100%;
+
+	display: flex;
+	align-items: center;
+
+	.content {
+		flex-grow: 1;
+	}
+}
+</style>

+ 89 - 0
src/pages/settle-list/settle-list.vue

@@ -0,0 +1,89 @@
+<template>
+	<main-layout :showHome="true" :showBack="true">
+		<view class="selector">
+			<uni-datetime-picker type="daterange" v-model="datePickerValue" @change="dateChange" />
+		</view>
+		<uni-list :border="true">
+			<uni-list-item v-for="settle in settleData" :key="settle.id">
+				<template v-slot:body>
+					结算时间:{{ settle.settlementTime }}
+					结算前奖励:{{ settle.beforeSettleRewardNum }},结算奖励:{{ settle.settleRewardNum }},结算后奖励:{{
+						settle.afterSettleRewardNum }}
+				</template>
+			</uni-list-item>
+		</uni-list>
+		<uni-load-more status="no-more" v-if="!settleData || settleData.length == 0" />
+	</main-layout>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+import { onLoad, onPullDownRefresh } from "@dcloudio/uni-app";
+import dateUtils from '@/utils/date';
+import { settleApi } from '@/service/apis';
+
+//属性
+/**
+ * 日期选择器值/
+ */
+const datePickerValue = ref([]);
+
+/**
+ * 查询条件
+ */
+const queryData = ref(null);
+
+/**
+ * 结算数据
+ */
+const settleData = ref(null);
+
+// 方法
+/**
+ * 日期选择监听
+ */
+const dateChange = (e) => {
+	if (e.length == 0) {
+		queryData.value = {};
+		return;
+	}
+
+	queryData.value = {
+		startDate: e[0],
+		endDate: e[1]
+	};
+	loadData();
+}
+
+/**
+ * 加载数据
+ */
+const loadData = () => {
+	settleApi.querySettle(queryData.value).then(res => {
+		settleData.value = res;
+	});
+}
+
+// 生命周期
+onLoad(() => {
+	const startDate = dateUtils.getFirstDayOfMonth();
+	const endDate = dateUtils.getLastDayOfMonth();
+	datePickerValue.value = [startDate, endDate];
+	queryData.value = {
+		startDate,
+		endDate
+	}
+	loadData();
+});
+
+onPullDownRefresh(() => {
+	loadData();
+	uni.stopPullDownRefresh();
+});
+</script>
+
+<style lang="scss" scoped>
+.selector {
+	background-color: #FFFFFF;
+}
+</style>

+ 226 - 0
src/pages/user-info/user-info.vue

@@ -0,0 +1,226 @@
+<template>
+	<main-layout :showBack="true">
+		<template>
+			<view class="header">
+				<view class="avatar">
+					<uni-icons type="person" size="70"></uni-icons>
+				</view>
+				<span class="nickname">{{ userInfoStore.nickname }}</span>
+			</view>
+
+			<view class="func-wrap">
+				<uni-list :border="true">
+					<uni-list-item title="修改昵称" :showArrow="true" :showExtraIcon="true"
+						:extraIcon="{ color: '#000000', size: 22, type: 'compose' }" :clickable="true"
+						@click="modifyNickname">
+					</uni-list-item>
+				</uni-list>
+			</view>
+
+			<view class="func-wrap">
+				<uni-list :border="true">
+					<uni-list-item title="奖励结算记录" :showArrow="true" :showExtraIcon="true"
+						:extraIcon="{ color: '#000000', size: 22, type: 'list' }" link="navigateTo"
+						:to="router.SETTLE_LIST_URL">
+					</uni-list-item>
+					<uni-list-item title="奖励领取记录" :showArrow="true" :showExtraIcon="true"
+						:extraIcon="{ color: '#000000', size: 22, type: 'list' }" link="navigateTo"
+						:to="router.REWARD_RECORD_LIST_URL">
+					</uni-list-item>
+					<uni-list-item title="投入与产出记录" :showArrow="true" :showExtraIcon="true"
+						:extraIcon="{ color: '#000000', size: 22, type: 'list' }" link="navigateTo"
+						:to="router.SCRATCH_RECORD_LIST_URL">
+					</uni-list-item>
+				</uni-list>
+			</view>
+
+			<view class="cancel-btn" @click="logout">注销</view>
+
+			<!-- 修改昵称弹出框 -->
+			<uni-popup ref="nicknameInputDialog" type="dialog" :is-mask-click="false">
+				<uni-popup-dialog mode="input" :before-close="true" title="修改昵称" confirmText="保存"
+					@confirm="nicknameFormConfirm" @close="nicknameFormClose">
+					<view class=".nickname-dialog">
+						<input class=".nickname" v-model="nicknameFormData.nickname" placeholder="请输入昵称" />
+					</view>
+
+					<view style="display: none">
+						<uni-forms ref="nicknameForm" :modelValue="nicknameFormData" :rules="nicknameFormRules"
+							label-position="top" :label-width="150" err-show-type="modal">
+							<uni-forms-item name="nickname">
+								<uni-easyinput type="text" placeholder="请输入昵称"
+									v-model="nicknameFormData.nickname"></uni-easyinput>
+							</uni-forms-item>
+						</uni-forms>
+					</view>
+				</uni-popup-dialog>
+			</uni-popup>
+		</template>
+	</main-layout>
+</template>
+
+<script setup>
+import { ref } from "vue";
+import router from "@/common/constants/router.js";
+import { useUserInfoStore } from "@/stores/userInfo";
+import { userApi } from "@/service/apis.js";
+
+// 组件
+/**
+ * 昵称弹出框
+ */
+const nicknameInputDialog = ref(null);
+
+/**
+ * 昵称表单
+ */
+const nicknameForm = ref(null);
+
+// 属性
+/**
+ * 用户信息
+ */
+const userInfoStore = useUserInfoStore();
+
+/**
+ * 昵称表单数据
+ */
+const nicknameFormData = ref({
+	nickname: userInfoStore.nickname,
+});
+
+/**
+ * 昵称表单验证规则
+ */
+const nicknameFormRules = ref({
+	nickname: {
+		rules: [
+			{
+				required: true,
+				errorMessage: "昵称不能为空",
+			},
+			{
+				maxLength: 30,
+				errorMessage: "昵称不能超过{maxLength}个字符",
+			},
+		],
+	},
+});
+
+// 方法
+/**
+ * 注销登录
+ */
+const logout = () => {
+	userInfoStore.$reset();
+	uni.reLaunch({
+		url: router.INDEX_URL,
+	});
+};
+
+/**
+ * 修改昵称 
+ */
+const modifyNickname = (e) => {
+	nicknameInputDialog.value.open();
+};
+
+/**
+ * 领取奖励表单提交
+ */
+const nicknameFormConfirm = async () => {
+	let data = await nicknameForm.value.validate();
+	await userApi.modifyNickname(data);
+	userInfoStore.nickname = data.nickname;
+	nicknameInputDialog.value.close();
+	uni.showToast({
+		title: "修改成功",
+		icon: "success",
+	});
+};
+
+/**
+ * 领取奖励表单取消
+ */
+const nicknameFormClose = async () => {
+	nicknameInputDialog.value.close();
+};
+</script>
+
+<style lang="scss" scoped>
+.header {
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	flex-direction: column;
+
+	margin-top: 100rpx;
+
+	.avatar {
+		width: 180rpx;
+		height: 180rpx;
+		opacity: 1;
+		background: #ffffff;
+		border-radius: 50%;
+
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.nickname {
+		margin-top: 16rpx;
+		font-size: 36rpx;
+		font-weight: 400;
+		letter-spacing: 0px;
+		line-height: 52.13rpx;
+		color: #000000;
+	}
+}
+
+.func-wrap {
+	background: #ffffff;
+	margin-top: 24rpx;
+}
+
+.cancel-btn {
+	margin-top: 24rpx;
+	height: 54rpx;
+	opacity: 1;
+	border-radius: 24rpx;
+	background: #f2607a;
+
+	/** 文本1 */
+	font-size: 26rpx;
+	font-weight: 400;
+	letter-spacing: 0rpx;
+	// line-height: 37.65rpx;
+	color: #ffffff;
+
+	display: flex;
+	justify-content: center;
+	align-content: center;
+	align-items: center;
+}
+
+.nickname-dialog {
+	width: 100%;
+	height: 100rpx;
+	border-radius: 8px;
+	background: #ffffff;
+	// 阴影
+	border: 0.5px solid #e4e4e4;
+
+	input {
+		width: 100%;
+		height: 100%;
+		font-size: 36rpx;
+		font-weight: 700;
+		letter-spacing: 0rpx;
+		line-height: 52.13rpx;
+		color: #000000;
+		border-radius: 24rpx;
+		text-align: center;
+	}
+}
+</style>

+ 17 - 0
src/service/apis.js

@@ -0,0 +1,17 @@
+import * as loginApi from './loginApi.js';
+import * as punchInApi from './punchInApi.js';
+import * as rewardApi from './rewardApi.js';
+import * as userApi from './userApi.js';
+import * as scratchApi from './scratchApi.js';
+import * as settleApi from './settleApi.js';
+import * as dictApi from './dictApi.js';
+
+export {
+	loginApi,
+	punchInApi,
+	rewardApi,
+	userApi,
+	scratchApi,
+	settleApi,
+	dictApi
+}

+ 18 - 0
src/service/dictApi.js

@@ -0,0 +1,18 @@
+// 字典API
+
+import request from "@/utils/request";
+
+/**
+ * 根据字典编码查询字典项(批量)
+ * @param {String} dictCodes 字典编码数组
+ * @returns 
+ */
+export function queryDictItems(dictCodes) {
+  return request({
+    url: "/dict/queryDictItems",
+    method: "post",
+    data: {
+        "dictCodes": dictCodes
+    }
+  });
+}

+ 0 - 0
service/loginApi.js → src/service/loginApi.js


+ 52 - 2
service/punchInApi.js → src/service/punchInApi.js

@@ -3,9 +3,9 @@ import request from "@/utils/request";
 /**
  * 查询打卡任务列表
  */
-export function queryPunchIn() {
+export function queryPunchIns() {
   return request({
-    url: "/punchIn/queryPunchIn"
+    url: "/punchIn/queryPunchIns"
   });
 }
 
@@ -73,6 +73,56 @@ export function queryPunchInById(data) {
   return request({
     url: "/punchIn/queryPunchInById",
     method: "post",
+    data,
+	loading: true,
+	loadingText: "正在查询打卡任务,请稍后..."
+  });
+}
+
+/**
+ * 归档打卡任务
+ * @param {Object} data
+ */
+export function archivePunchIn(data) {
+  return request({
+    url: "/punchIn/archivePunchIn",
+    method: "post",
+    data
+  });
+}
+
+/**
+ * 补卡
+ * @param {Object} data
+ */
+export function remakePunchIn(data) {
+  return request({
+    url: "/punchIn/remakePunchIn",
+    method: "post",
+    data
+  });
+}
+
+/**
+ * 撤销打卡
+ * @param {Object} data
+ */
+export function revokePunchIn(data) {
+  return request({
+    url: "/punchIn/revokePunchIn",
+    method: "post",
+    data
+  });
+}
+
+/**
+ * 查询打卡数据
+ * @param {Object} data
+ */
+export function queryPunchInData(data) {
+  return request({
+    url: "/punchIn/queryPunchInData",
+    method: "post",
     data
   });
 }

+ 4 - 3
service/rewardApi.js → src/service/rewardApi.js

@@ -3,10 +3,11 @@ import request from "@/utils/request";
 /**
  * 查询奖励
  */
-export function queryReward() {
+export function queryClaimRewardRecords(data) {
 	return request({
-		url: '/reward/queryReward',
-		method: 'get'
+		url: '/reward/queryClaimRewardRecords',
+		method: 'post',
+		data
 	});
 }
 

+ 42 - 0
src/service/scratchApi.js

@@ -0,0 +1,42 @@
+// 刮刮乐API
+
+import request from "@/utils/request";
+
+/**
+ * 新增投入/中奖记录
+ */
+export function addScratchRecord(data) {
+	return request({
+		url: '/scratch/addScratchRecord',
+		method: 'post',
+		data,
+		loading: true,
+		loadingText: '保存中...'
+	});
+}
+
+/**
+ * 新增投入/中奖记录
+ */
+export function queryScratchRecord(data) {
+	return request({
+		url: '/scratch/queryScratchRecord',
+		method: 'post',
+		data,
+		loading: true,
+		loadingText: '查询中...'
+	});
+}
+
+/**
+ * 撤销投入/中奖记录
+ */
+export function revokeScratchRecord(data) {
+	return request({
+		url: '/scratch/revokeScratchRecord',
+		method: 'post',
+		data,
+		loading: true,
+		loadingText: '撤销中...'
+	});
+}

+ 15 - 0
src/service/settleApi.js

@@ -0,0 +1,15 @@
+import request from "@/utils/request";
+
+/**
+ * 查询结算记录
+ * @param {Object} data
+ */
+export function querySettle(data) {
+  return request({
+    url: "/settle/querySettle",
+    method: "post",
+    data,
+	loading: true,
+	loadingText: "查询中..."
+  });
+}

+ 24 - 0
src/service/userApi.js

@@ -0,0 +1,24 @@
+import request from "@/utils/request";
+
+/**
+ * 获取用户信息
+ */
+export function queryUserInfo() {
+	return request({
+		url: '/user/queryUserInfo',
+		method: 'get'
+	});
+}
+
+/**
+ * 修改用户昵称
+ */
+export function modifyNickname(data) {
+	return request({
+		url: '/user/modifyNickname',
+		method: 'post',
+		data,
+		loading: true,
+		loadingText: '正在修改...'
+	});
+}

+ 1 - 0
src/static/append-active.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1733925534566" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12561" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 1008.64L41.642667 773.461333V15.36h940.714666v758.101333L512 1008.64zM109.909333 731.136L512 932.181333l402.090667-201.045333V83.626667H109.909333v647.509333z m838.314667 21.162667z" fill="#1296db" p-id="12562"></path><path d="M299.349333 588.458667l-42.325333-28.672 140.970667-209.237334h-122.88v-51.2h171.008c9.557333 0 18.090667 5.12 22.528 13.653334s4.096 18.432-1.365334 26.282666l-167.936 249.173334z" fill="#1296db" p-id="12563"></path><path d="M337.646933 239.377067l35.293867-37.102934 68.266667 64.9216-35.293867 37.102934zM590.165333 221.525333h51.2v475.136h-51.2zM657.3056 381.883733l47.547733-19.012266 59.938134 149.9136-47.5136 19.012266zM409.6 696.661333h-51.2v-256c0-10.922667 6.826667-20.48 16.725333-23.893333 10.24-3.754667 21.504-0.682667 28.330667 7.509333l111.274667 131.754667-39.253334 33.109333-65.877333-78.506666v186.026666z" fill="#1296db" p-id="12564"></path><path d="M405.640533 514.6624l67.037867-94.344533 41.710933 29.696-67.037866 94.3104z" fill="#1296db" p-id="12565"></path></svg>

+ 1 - 0
src/static/append.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1733925534566" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12561" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 1008.64L41.642667 773.461333V15.36h940.714666v758.101333L512 1008.64zM109.909333 731.136L512 932.181333l402.090667-201.045333V83.626667H109.909333v647.509333z m838.314667 21.162667z" fill="#2c2c2c" p-id="12562"></path><path d="M299.349333 588.458667l-42.325333-28.672 140.970667-209.237334h-122.88v-51.2h171.008c9.557333 0 18.090667 5.12 22.528 13.653334s4.096 18.432-1.365334 26.282666l-167.936 249.173334z" fill="#2c2c2c" p-id="12563"></path><path d="M337.646933 239.377067l35.293867-37.102934 68.266667 64.9216-35.293867 37.102934zM590.165333 221.525333h51.2v475.136h-51.2zM657.3056 381.883733l47.547733-19.012266 59.938134 149.9136-47.5136 19.012266zM409.6 696.661333h-51.2v-256c0-10.922667 6.826667-20.48 16.725333-23.893333 10.24-3.754667 21.504-0.682667 28.330667 7.509333l111.274667 131.754667-39.253334 33.109333-65.877333-78.506666v186.026666z" fill="#2c2c2c" p-id="12564"></path><path d="M405.640533 514.6624l67.037867-94.344533 41.710933 29.696-67.037866 94.3104z" fill="#2c2c2c" p-id="12565"></path></svg>

+ 1 - 0
src/static/archive-active.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1733925794995" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16306" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M865.3 506.3V184.1c0-64.8-52.7-117.5-117.5-117.5H281c-64.8 0-117.5 52.7-117.5 117.5v322.2c-46.4 5.8-82.4 45.5-82.4 93.5v257.8c0 52 42.3 94.2 94.2 94.2h678.2c52 0 94.2-42.3 94.2-94.2V599.8c0-47.9-36-87.6-82.4-93.5zM233.5 184.1c0-26.2 21.3-47.5 47.5-47.5h466.8c26.2 0 47.5 21.3 47.5 47.5v321.5H669.9v87.6c0 3.3-2.7 6-6 6H365c-3.3 0-6-2.7-6-6v-87.6H233.5V184.1z m644.2 673.6c0 13.4-10.9 24.2-24.2 24.2H175.3c-13.4 0-24.2-10.9-24.2-24.2V599.8c0-13.4 10.9-24.2 24.2-24.2H289v17.6c0 41.9 34.1 76 76 76h298.8c41.9 0 76-34.1 76-76v-17.6H853.4c13.4 0 24.2 10.9 24.2 24.2v257.9z" p-id="16307" fill="#1296db"></path><path d="M513.2 520.3l140.6-140.6-49.5-49.5-57.3 57.4V194.5h-70v190.6l-54.9-54.9-49.5 49.5 91.1 91.1z" p-id="16308" fill="#1296db"></path></svg>

+ 1 - 0
src/static/archive.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1733925794995" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16306" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M865.3 506.3V184.1c0-64.8-52.7-117.5-117.5-117.5H281c-64.8 0-117.5 52.7-117.5 117.5v322.2c-46.4 5.8-82.4 45.5-82.4 93.5v257.8c0 52 42.3 94.2 94.2 94.2h678.2c52 0 94.2-42.3 94.2-94.2V599.8c0-47.9-36-87.6-82.4-93.5zM233.5 184.1c0-26.2 21.3-47.5 47.5-47.5h466.8c26.2 0 47.5 21.3 47.5 47.5v321.5H669.9v87.6c0 3.3-2.7 6-6 6H365c-3.3 0-6-2.7-6-6v-87.6H233.5V184.1z m644.2 673.6c0 13.4-10.9 24.2-24.2 24.2H175.3c-13.4 0-24.2-10.9-24.2-24.2V599.8c0-13.4 10.9-24.2 24.2-24.2H289v17.6c0 41.9 34.1 76 76 76h298.8c41.9 0 76-34.1 76-76v-17.6H853.4c13.4 0 24.2 10.9 24.2 24.2v257.9z" p-id="16307" fill="#2c2c2c"></path><path d="M513.2 520.3l140.6-140.6-49.5-49.5-57.3 57.4V194.5h-70v190.6l-54.9-54.9-49.5 49.5 91.1 91.1z" p-id="16308" fill="#2c2c2c"></path></svg>

+ 1 - 0
src/static/delete-active.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1733925740212" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13997" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M847.743 223.953H640.639c-3.132-68.921-60.177-124.029-129.858-124.029s-126.726 55.108-129.858 124.029H173.256c-17.673 0-32 14.327-32 32s14.327 32 32 32h674.487c17.673 0 32-14.327 32-32s-14.327-32-32-32z m-336.962-60.03c34.379 0 62.689 26.426 65.718 60.029H445.064c3.029-33.603 31.338-60.029 65.717-60.029zM767.743 351.79c-17.673 0-32 14.327-32 32v478.173H288.256V383.79c0-17.673-14.327-32-32-32s-32 14.327-32 32v510.173c0 17.673 14.327 32 32 32h511.487c17.673 0 32-14.327 32-32V383.79c0-17.673-14.327-32-32-32z" p-id="13998" fill="#1296db"></path><path d="M449.306 732.802V448.208c0-17.673-14.327-32-32-32s-32 14.327-32 32v284.593c0 17.673 14.327 32 32 32s32-14.326 32-31.999z m191.534 0V448.208c0-17.673-14.327-32-32-32s-32 14.327-32 32v284.593c0 17.673 14.327 32 32 32s32-14.326 32-31.999z" p-id="13999" fill="#1296db"></path></svg>

+ 1 - 0
src/static/delete.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1733925740212" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13997" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M847.743 223.953H640.639c-3.132-68.921-60.177-124.029-129.858-124.029s-126.726 55.108-129.858 124.029H173.256c-17.673 0-32 14.327-32 32s14.327 32 32 32h674.487c17.673 0 32-14.327 32-32s-14.327-32-32-32z m-336.962-60.03c34.379 0 62.689 26.426 65.718 60.029H445.064c3.029-33.603 31.338-60.029 65.717-60.029zM767.743 351.79c-17.673 0-32 14.327-32 32v478.173H288.256V383.79c0-17.673-14.327-32-32-32s-32 14.327-32 32v510.173c0 17.673 14.327 32 32 32h511.487c17.673 0 32-14.327 32-32V383.79c0-17.673-14.327-32-32-32z" p-id="13998" fill="#2c2c2c"></path><path d="M449.306 732.802V448.208c0-17.673-14.327-32-32-32s-32 14.327-32 32v284.593c0 17.673 14.327 32 32 32s32-14.326 32-31.999z m191.534 0V448.208c0-17.673-14.327-32-32-32s-32 14.327-32 32v284.593c0 17.673 14.327 32 32 32s32-14.326 32-31.999z" p-id="13999" fill="#2c2c2c"></path></svg>

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
src/static/edit-active.svg


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
src/static/edit.svg


+ 0 - 0
static/logo.png → src/static/logo.png


+ 1 - 0
src/static/revoke.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1734267918462" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1462" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M396.544 135.968L73.28 459.2a44.8 44.8 0 0 0 0 63.36l323.264 323.264a35.2 35.2 0 0 0 24.896 10.304l3.84-0.192a35.2 35.2 0 0 0 31.36-35.008l-0.032-189.024 10.656 0.416c146.08 7.2 278.304 80.256 359.68 196.032l47.36 67.456 10.56-81.792c2.272-17.856 3.424-35.936 3.424-54.144l-0.096-9.792c-5.216-227.968-191.84-412.096-424.672-422.144l-6.88-0.224V160.832a35.2 35.2 0 0 0-60.096-24.864z m-3.904 94.368v163.04l33.408-1.44c5.76-0.256 11.584-0.384 17.408-0.384l9.696 0.096c189.888 4.608 345.024 143.552 368.16 321.92l1.152 10.304-2.496-2.56c-97.664-96.768-232.192-153.536-376.512-153.536-6.688 0-13.344 0.096-19.968 0.32l-30.848 1.152v182.176L132.096 490.88l260.544-260.544z" fill="#2c2c2c" p-id="1463"></path></svg>

+ 1 - 0
src/static/revoke_active.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1734267918462" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1462" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M396.544 135.968L73.28 459.2a44.8 44.8 0 0 0 0 63.36l323.264 323.264a35.2 35.2 0 0 0 24.896 10.304l3.84-0.192a35.2 35.2 0 0 0 31.36-35.008l-0.032-189.024 10.656 0.416c146.08 7.2 278.304 80.256 359.68 196.032l47.36 67.456 10.56-81.792c2.272-17.856 3.424-35.936 3.424-54.144l-0.096-9.792c-5.216-227.968-191.84-412.096-424.672-422.144l-6.88-0.224V160.832a35.2 35.2 0 0 0-60.096-24.864z m-3.904 94.368v163.04l33.408-1.44c5.76-0.256 11.584-0.384 17.408-0.384l9.696 0.096c189.888 4.608 345.024 143.552 368.16 321.92l1.152 10.304-2.496-2.56c-97.664-96.768-232.192-153.536-376.512-153.536-6.688 0-13.344 0.096-19.968 0.32l-30.848 1.152v182.176L132.096 490.88l260.544-260.544z" fill="#1296db" p-id="1463"></path></svg>

+ 60 - 0
src/stores/dict.js

@@ -0,0 +1,60 @@
+import { defineStore } from 'pinia';
+import dictConst from '@/common/constants/dict';
+import { dictApi } from '@/service/apis';
+
+
+/**
+ * 字典
+ */
+export const useDictStore = defineStore('dict', {
+	state: () => ({
+        /**
+         * 刮刮乐来源
+         */
+		LOTTERY_SCRATCH_SOURCE: [],
+        /**
+         * 福彩刮刮乐种类
+         */
+        WELFARE_SCRATCH: [],
+        /**
+         * 体彩刮刮乐种类
+         */
+        SPORTS_SCRATCH: [],
+        /**
+         * 刮刮乐动作类型
+         */
+        SCRATCH_ACTION_TYPE: [],
+        /**
+         * 启用状态
+         */
+        ENABLE_STATUS: [],
+        /**
+         * 打卡类型
+         */
+        PUNCH_IN_CATEGORY: [],
+        /**
+         * 打卡比较规则
+         */
+        PUNCH_IN_RULE: []
+	}),
+	unistorage: true,
+	actions: {
+        // 刷新获取数据字典
+        async refresh() {
+            const dictCodes = [
+                dictConst.LOTTERY_SCRATCH_SOURCE,
+                dictConst.WELFARE_SCRATCH,
+                dictConst.SPORTS_SCRATCH,
+                dictConst.SCRATCH_ACTION_TYPE,
+                dictConst.ENABLE_STATUS,
+                dictConst.PUNCH_IN_CATEGORY,
+                dictConst.PUNCH_IN_RULE
+            ];
+            dictApi.queryDictItems(dictCodes).then(data => {
+                for (let item of data) {
+                    this[item.dictCode] = item.dictItems ? item.dictItems : [];
+                }
+            });
+        }
+    }
+});

+ 62 - 0
src/stores/safeArea.js

@@ -0,0 +1,62 @@
+import { defineStore } from 'pinia';
+
+/**
+ * 安全区
+ * statusBarHeight: 状态栏高度
+ * capsuleBarHeight: 胶囊按钮高度
+ * topHeight: 状态栏+胶囊按钮高度
+ * bottomHeight: 底部安全区高度
+ * capsuleBarHeight 胶囊按钮栏高度
+ * capsuleBarLeft 胶囊按钮栏左边距离
+ * capsuleBarMargin 胶囊按钮栏边距
+ * capsuleBarMarginTop 胶囊按钮栏上边距
+ * capsuleBarMarginBottom 胶囊按钮栏下边距
+ * capsuleBarContentHeight 胶囊按钮内容高度
+ */
+export const useSafeAreaStore = defineStore('safeArea', {
+	state: () => ({
+		statusBarHeight: 0,
+		capsuleBarHeight: 0,
+		topHeight: 0,
+		bottomHeight: 0,
+		capsuleBarLeft: 0,
+		capsuleBarMargin: 0,
+		capsuleBarMarginTop: 0,
+		capsuleBarMarginBottom: 0,
+		capsuleBarContentHeight: 0
+	}),
+	getters: {
+		/**
+		 * 状态栏样式
+		 */
+		statusBarStyle: (state) => ({
+			height: state.statusBarHeight+'px'
+		}),
+		/**
+		 * 胶囊区样式
+		 */
+		capsuleBarStyle: (state) => ({
+			height: state.capsuleBarHeight+'px',
+			width: state.capsuleBarLeft+'px',
+			'padding-top': state.capsuleBarMarginTop+'px', 
+			'padding-bottom': state.capsuleBarMarginBottom+'px'
+		}),
+		/**
+		 * 图标容器样式
+		 */
+		iconBoxStyle: (state) => ({
+			width: state.capsuleBarContentHeight-5+'px',
+			height: state.capsuleBarContentHeight-5+'px'
+		}),
+		/**
+		 * 图标大小
+		 */
+		iconSize: (state) => state.capsuleBarContentHeight-10,
+		/**
+		 * 底部填充区样式
+		 */
+		bottomBoxStyle: (state) => ({
+			height: state.bottomHeight+'px'
+		})
+	}
+});

+ 27 - 0
src/stores/userInfo.js

@@ -0,0 +1,27 @@
+import { defineStore } from 'pinia';
+
+/**
+ * 用户信息
+ */
+export const useUserInfoStore = defineStore('userInfo', {
+	state: () => ({
+		/**
+		 * 登录凭据
+		 */
+		token: null,
+		
+		/**
+		 * 昵称
+		 */
+		nickname: null
+	}),
+	unistorage: true,
+	getters: {
+		/**
+		 * 登录状态判断
+		 * true-已登录
+		 * false-未登录
+		 */
+	    isLogin: (state) => Boolean(state.token),
+	}
+});

+ 0 - 0
uni.promisify.adaptor.js → src/uni.promisify.adaptor.js


+ 1 - 1
uni.scss → src/uni.scss

@@ -75,4 +75,4 @@ $uni-font-size-subtitle:26px;
 $uni-color-paragraph: #3F536E; // 文章段落颜色
 $uni-font-size-paragraph:15px;
 
-@import "@/common/style/common-style.scss";
+@use "@/common/style/common-style.scss";

+ 84 - 0
src/utils/date.js

@@ -0,0 +1,84 @@
+// 日期
+
+/**
+ * 获取今天对应的年、月
+ * @returns {object} 包含年、月的对象
+ */
+const getTodayYearMonthObj = () => {
+	// 获取今天对应的年、月
+	const today = new Date();
+	const year = today.getFullYear();
+	const month = (today.getMonth() + 1).toString().padStart(2, '0');
+	
+	return {
+		year,
+		month
+	}
+}
+
+/**
+ * 获取昨天的日期
+ * @returns {string} 格式为YYYY-MM-DD的字符串
+ */
+const getYesterday = () => {
+	// 将日期减去1天,得到昨天的日期
+	const yesterday = new Date();
+	yesterday.setDate(yesterday.getDate() - 1);
+	
+	// 获取年、月、日
+	const year = yesterday.getFullYear();
+	const month = (yesterday.getMonth() + 1).toString().padStart(2, '0'); // 月份是从0开始的,所以加1
+	const day = yesterday.getDate().toString().padStart(2, '0'); // 日期格式化为两位数
+	
+	// 格式化输出
+	return `${year}-${month}-${day}`;
+}
+
+/**
+ * 获取本月的第一天
+ * @returns {string} 格式为YYYY-MM-DD的字符串
+ */
+const getFirstDayOfMonth = () => {
+	const today = new Date();
+	let year = today.getFullYear();
+	let month = today.getMonth();
+	const firstDay = new Date(year, month, 1); // 设置日期为1,自动回到本月第一天
+	
+	// 获取年、月、日
+	year = firstDay.getFullYear();
+	month = (firstDay.getMonth() + 1).toString().padStart(2, '0'); // 月份是从0开始的,所以加1
+	const day = firstDay.getDate().toString().padStart(2, '0'); // 日期格式化为两位数
+	
+	// 格式化输出
+	return `${year}-${month}-${day}`;
+}
+
+/**
+ * 获取本月的最后一天
+ */
+const getLastDayOfMonth = () => {	
+	const today = new Date();
+	let year = today.getFullYear();
+	let month = today.getMonth();
+	// 下一个月的第一天的前一天就是本月的最后一天
+	const lastDay = new Date(year, month + 1, 0);
+ 
+	// 获取年、月、日
+	year = lastDay.getFullYear();
+	month = (lastDay.getMonth() + 1).toString().padStart(2, '0'); // 月份是从0开始的,所以加1
+	const day = lastDay.getDate().toString().padStart(2, '0'); // 日期格式化为两位数
+	
+	// 格式化输出
+	return `${year}-${month}-${day}`;
+}
+
+/**
+ * 默认导出对象
+ */
+const dateUtils = {
+	getTodayYearMonthObj,
+	getYesterday,
+	getFirstDayOfMonth,
+	getLastDayOfMonth
+}
+export default dateUtils;

+ 32 - 7
utils/request.js → src/utils/request.js

@@ -1,4 +1,10 @@
+import { useUserInfoStore } from '@/stores/userInfo.js';
+import router from '@/common/constants/router.js';
+
 export default function request(config = {}) {
+	
+	const userInfoStore = useUserInfoStore();
+
 	let {
 		url,
 		data = {},
@@ -11,7 +17,7 @@ export default function request(config = {}) {
 	// 拼接url TODO 这里要修改,改成不同环境取不同的url
 	url = process.env.BASE_API_URL + url;
 	// 添加token
-	header['Authorization'] = uni.getStorageSync('token');
+	header['Authorization'] = userInfoStore.token;
 	// 是否显示loading
 	if (loading) {
 		uni.showLoading({
@@ -28,25 +34,44 @@ export default function request(config = {}) {
 			header,
 			withCredentials: true,
 			success: res => {
+				// 登录状态判断
+				if (res.statusCode === 401) {
+					// 清除token
+					userInfoStore.token = null;
+					uni.showModal({
+						title: "登录提示",
+						content: "登录凭据已失效,请重新登录",
+						showCancel: false,
+						success: function (res) {
+							if (res.confirm) {
+								uni.navigateTo({
+									url: router.LOGIN_URL
+								});
+							}
+						}
+					});
+					reject(res.data);
+					return;
+				}
 				if (res.data.code === '0') {
-					resolve(res.data.data)
+					resolve(res.data.data);
 				} else if (res.data.code === '999') {
 					uni.showModal({
 						title: "错误提示",
 						content: res.data.msg,
 						showCancel: false
-					})
-					reject(res.data)
+					});
+					reject(res.data);
 				} else {
 					uni.showToast({
 						title: res.data.msg,
 						icon: "none"
-					})
-					reject(res.data)
+					});
+					reject(res.data);
 				}
 			},
 			fail: err => {
-				reject(err)
+				reject(err);
 			},
 			complete: () => {
 				if (loading) {

+ 0 - 1
utils/system.js → src/utils/system.js

@@ -64,7 +64,6 @@ export const getCapsuleBarInfo = () => {
  * capsuleBarHeight: 胶囊按钮高度
  * topHeight: 状态栏+胶囊按钮高度
  * bottomHeight: 底部安全区高度
- * capsuleBarHeight 胶囊按钮栏高度
  * capsuleBarLeft 胶囊按钮栏左边距离
  * capsuleBarMargin 胶囊按钮栏边距
  * capsuleBarMarginTop 胶囊按钮栏上边距

+ 0 - 10
uni_modules/uni-dateformat/changelog.md

@@ -1,10 +0,0 @@
-## 1.0.0(2021-11-19)
-- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
-- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-dateformat](https://uniapp.dcloud.io/component/uniui/uni-dateformat)
-## 0.0.5(2021-07-08)
-- 调整 默认时间不再是当前时间,而是显示'-'字符
-## 0.0.4(2021-05-12)
-- 新增 组件示例地址
-## 0.0.3(2021-02-04)
-- 调整为uni_modules目录规范
-- 修复 iOS 平台日期格式化出错的问题

+ 0 - 200
uni_modules/uni-dateformat/components/uni-dateformat/date-format.js

@@ -1,200 +0,0 @@
-// yyyy-MM-dd hh:mm:ss.SSS 所有支持的类型
-function pad(str, length = 2) {
-	str += ''
-	while (str.length < length) {
-		str = '0' + str
-	}
-	return str.slice(-length)
-}
-
-const parser = {
-	yyyy: (dateObj) => {
-		return pad(dateObj.year, 4)
-	},
-	yy: (dateObj) => {
-		return pad(dateObj.year)
-	},
-	MM: (dateObj) => {
-		return pad(dateObj.month)
-	},
-	M: (dateObj) => {
-		return dateObj.month
-	},
-	dd: (dateObj) => {
-		return pad(dateObj.day)
-	},
-	d: (dateObj) => {
-		return dateObj.day
-	},
-	hh: (dateObj) => {
-		return pad(dateObj.hour)
-	},
-	h: (dateObj) => {
-		return dateObj.hour
-	},
-	mm: (dateObj) => {
-		return pad(dateObj.minute)
-	},
-	m: (dateObj) => {
-		return dateObj.minute
-	},
-	ss: (dateObj) => {
-		return pad(dateObj.second)
-	},
-	s: (dateObj) => {
-		return dateObj.second
-	},
-	SSS: (dateObj) => {
-		return pad(dateObj.millisecond, 3)
-	},
-	S: (dateObj) => {
-		return dateObj.millisecond
-	},
-}
-
-// 这都n年了iOS依然不认识2020-12-12,需要转换为2020/12/12
-function getDate(time) {
-	if (time instanceof Date) {
-		return time
-	}
-	switch (typeof time) {
-		case 'string':
-			{
-				// 2020-12-12T12:12:12.000Z、2020-12-12T12:12:12.000
-				if (time.indexOf('T') > -1) {
-					return new Date(time)
-				}
-				return new Date(time.replace(/-/g, '/'))
-			}
-		default:
-			return new Date(time)
-	}
-}
-
-export function formatDate(date, format = 'yyyy/MM/dd hh:mm:ss') {
-	if (!date && date !== 0) {
-		return ''
-	}
-	date = getDate(date)
-	const dateObj = {
-		year: date.getFullYear(),
-		month: date.getMonth() + 1,
-		day: date.getDate(),
-		hour: date.getHours(),
-		minute: date.getMinutes(),
-		second: date.getSeconds(),
-		millisecond: date.getMilliseconds()
-	}
-	const tokenRegExp = /yyyy|yy|MM|M|dd|d|hh|h|mm|m|ss|s|SSS|SS|S/
-	let flag = true
-	let result = format
-	while (flag) {
-		flag = false
-		result = result.replace(tokenRegExp, function(matched) {
-			flag = true
-			return parser[matched](dateObj)
-		})
-	}
-	return result
-}
-
-export function friendlyDate(time, {
-	locale = 'zh',
-	threshold = [60000, 3600000],
-	format = 'yyyy/MM/dd hh:mm:ss'
-}) {
-	if (time === '-') {
-		return time
-	}
-	if (!time && time !== 0) {
-		return ''
-	}
-	const localeText = {
-		zh: {
-			year: '年',
-			month: '月',
-			day: '天',
-			hour: '小时',
-			minute: '分钟',
-			second: '秒',
-			ago: '前',
-			later: '后',
-			justNow: '刚刚',
-			soon: '马上',
-			template: '{num}{unit}{suffix}'
-		},
-		en: {
-			year: 'year',
-			month: 'month',
-			day: 'day',
-			hour: 'hour',
-			minute: 'minute',
-			second: 'second',
-			ago: 'ago',
-			later: 'later',
-			justNow: 'just now',
-			soon: 'soon',
-			template: '{num} {unit} {suffix}'
-		}
-	}
-	const text = localeText[locale] || localeText.zh
-	let date = getDate(time)
-	let ms = date.getTime() - Date.now()
-	let absMs = Math.abs(ms)
-	if (absMs < threshold[0]) {
-		return ms < 0 ? text.justNow : text.soon
-	}
-	if (absMs >= threshold[1]) {
-		return formatDate(date, format)
-	}
-	let num
-	let unit
-	let suffix = text.later
-	if (ms < 0) {
-		suffix = text.ago
-		ms = -ms
-	}
-	const seconds = Math.floor((ms) / 1000)
-	const minutes = Math.floor(seconds / 60)
-	const hours = Math.floor(minutes / 60)
-	const days = Math.floor(hours / 24)
-	const months = Math.floor(days / 30)
-	const years = Math.floor(months / 12)
-	switch (true) {
-		case years > 0:
-			num = years
-			unit = text.year
-			break
-		case months > 0:
-			num = months
-			unit = text.month
-			break
-		case days > 0:
-			num = days
-			unit = text.day
-			break
-		case hours > 0:
-			num = hours
-			unit = text.hour
-			break
-		case minutes > 0:
-			num = minutes
-			unit = text.minute
-			break
-		default:
-			num = seconds
-			unit = text.second
-			break
-	}
-
-	if (locale === 'en') {
-		if (num === 1) {
-			num = 'a'
-		} else {
-			unit += 's'
-		}
-	}
-
-	return text.template.replace(/{\s*num\s*}/g, num + '').replace(/{\s*unit\s*}/g, unit).replace(/{\s*suffix\s*}/g,
-		suffix)
-}

+ 0 - 88
uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue

@@ -1,88 +0,0 @@
-<template>
-	<text>{{dateShow}}</text>
-</template>
-
-<script>
-	import {friendlyDate} from './date-format.js'
-	/**
-	 * Dateformat 日期格式化
-	 * @description 日期格式化组件
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=3279
-	 * @property {Object|String|Number} date 日期对象/日期字符串/时间戳
-	 * @property {String} locale 格式化使用的语言
-	 * 	@value zh 中文
-	 * 	@value en 英文
-	 * @property {Array} threshold 应用不同类型格式化的阈值
-	 * @property {String} format 输出日期字符串时的格式
-	 */
-	export default {
-		name: 'uniDateformat',
-		props: {
-			date: {
-				type: [Object, String, Number],
-				default () {
-					return '-'
-				}
-			},
-			locale: {
-				type: String,
-				default: 'zh',
-			},
-			threshold: {
-				type: Array,
-				default () {
-					return [0, 0]
-				}
-			},
-			format: {
-				type: String,
-				default: 'yyyy/MM/dd hh:mm:ss'
-			},
-			// refreshRate使用不当可能导致性能问题,谨慎使用
-			refreshRate: {
-				type: [Number, String],
-				default: 0
-			}
-		},
-		data() {
-			return {
-				refreshMark: 0
-			}
-		},
-		computed: {
-			dateShow() {
-				this.refreshMark
-				return friendlyDate(this.date, {
-					locale: this.locale,
-					threshold: this.threshold,
-					format: this.format
-				})
-			}
-		},
-		watch: {
-			refreshRate: {
-				handler() {
-					this.setAutoRefresh()
-				},
-				immediate: true
-			}
-		},
-		methods: {
-			refresh() {
-				this.refreshMark++
-			},
-			setAutoRefresh() {
-				clearInterval(this.refreshInterval)
-				if (this.refreshRate) {
-					this.refreshInterval = setInterval(() => {
-						this.refresh()
-					}, parseInt(this.refreshRate))
-				}
-			}
-		}
-	}
-</script>
-
-<style>
-
-</style>

+ 0 - 88
uni_modules/uni-dateformat/package.json

@@ -1,88 +0,0 @@
-{
-  "id": "uni-dateformat",
-  "displayName": "uni-dateformat 日期格式化",
-  "version": "1.0.0",
-  "description": "日期格式化组件,可以将日期格式化为1分钟前、刚刚等形式",
-  "keywords": [
-    "uni-ui",
-    "uniui",
-    "日期格式化",
-    "时间格式化",
-    "格式化时间",
-    ""
-],
-  "repository": "https://github.com/dcloudio/uni-ui",
-  "engines": {
-    "HBuilderX": ""
-  },
-  "directories": {
-    "example": "../../temps/example_temps"
-  },
-  "dcloudext": {
-    "category": [
-      "前端组件",
-      "通用组件"
-    ],
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "无",
-      "permissions": "无"
-    },
-    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
-  },
-  "uni_modules": {
-    "dependencies": ["uni-scss"],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
-      },
-      "client": {
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "y"
-        },
-        "H5-mobile": {
-          "Safari": "y",
-          "Android Browser": "y",
-          "微信浏览器(Android)": "y",
-          "QQ浏览器(Android)": "y"
-        },
-        "H5-pc": {
-          "Chrome": "y",
-          "IE": "y",
-          "Edge": "y",
-          "Firefox": "y",
-          "Safari": "y"
-        },
-        "小程序": {
-          "微信": "y",
-          "阿里": "y",
-          "百度": "y",
-          "字节跳动": "y",
-          "QQ": "y"
-        },
-        "快应用": {
-          "华为": "y",
-          "联盟": "y"
-        },
-        "Vue": {
-            "vue2": "y",
-            "vue3": "y"
-        }
-      }
-    }
-  }
-}

+ 0 - 11
uni_modules/uni-dateformat/readme.md

@@ -1,11 +0,0 @@
-
-
-### DateFormat 日期格式化
-> **组件名:uni-dateformat**
-> 代码块: `uDateformat`
-
-
-日期格式化组件。
-
-### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-dateformat)
-#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 0 - 42
uni_modules/uni-icons/changelog.md

@@ -1,42 +0,0 @@
-## 2.0.10(2024-06-07)
-- 优化 uni-app x 中,size 属性的类型
-## 2.0.9(2024-01-12)
-fix: 修复图标大小默认值错误的问题
-## 2.0.8(2023-12-14)
-- 修复 项目未使用 ts 情况下,打包报错的bug
-## 2.0.7(2023-12-14)
-- 修复 size 属性为 string 时,不加单位导致尺寸异常的bug
-## 2.0.6(2023-12-11)
-- 优化 兼容老版本icon类型,如 top ,bottom 等
-## 2.0.5(2023-12-11)
-- 优化 兼容老版本icon类型,如 top ,bottom 等
-## 2.0.4(2023-12-06)
-- 优化 uni-app x 下示例项目图标排序
-## 2.0.3(2023-12-06)
-- 修复 nvue下引入组件报错的bug
-## 2.0.2(2023-12-05)
--优化 size 属性支持单位
-## 2.0.1(2023-12-05)
-- 新增 uni-app x 支持定义图标
-## 1.3.5(2022-01-24)
-- 优化 size 属性可以传入不带单位的字符串数值
-## 1.3.4(2022-01-24)
-- 优化 size 支持其他单位
-## 1.3.3(2022-01-17)
-- 修复 nvue 有些图标不显示的bug,兼容老版本图标
-## 1.3.2(2021-12-01)
-- 优化 示例可复制图标名称
-## 1.3.1(2021-11-23)
-- 优化 兼容旧组件 type 值
-## 1.3.0(2021-11-19)
-- 新增 更多图标
-- 优化 自定义图标使用方式
-- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
-- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons)
-## 1.1.7(2021-11-08)
-## 1.2.0(2021-07-30)
-- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
-## 1.1.5(2021-05-12)
-- 新增 组件示例地址
-## 1.1.4(2021-02-05)
-- 调整为uni_modules目录规范

+ 0 - 91
uni_modules/uni-icons/components/uni-icons/uni-icons.uvue

@@ -1,91 +0,0 @@
-<template>
-  <text class="uni-icons" :style="styleObj">
-    <slot>{{unicode}}</slot>
-  </text>
-</template>
-
-<script>
-  import { fontData, IconsDataItem } from './uniicons_file'
-
-  /**
-   * Icons 图标
-   * @description 用于展示 icon 图标
-   * @tutorial https://ext.dcloud.net.cn/plugin?id=28
-   * @property {Number,String} size 图标大小
-   * @property {String} type 图标图案,参考示例
-   * @property {String} color 图标颜色
-   * @property {String} customPrefix 自定义图标
-   * @event {Function} click 点击 Icon 触发事件
-   */
-  export default {
-    name: "uni-icons",
-    props: {
-      type: {
-        type: String,
-        default: ''
-      },
-      color: {
-        type: String,
-        default: '#333333'
-      },
-      size: {
-        type: [Number, String],
-        default: 16
-      },
-      fontFamily: {
-        type: String,
-        default: ''
-      }
-    },
-    data() {
-      return {};
-    },
-    computed: {
-      unicode() : string {
-        let codes = fontData.find((item : IconsDataItem) : boolean => { return item.font_class == this.type })
-        if (codes !== null) {
-          return codes.unicode
-        }
-        return ''
-      },
-      iconSize() : string {
-        const size = this.size
-        if (typeof size == 'string') {
-          const reg = /^[0-9]*$/g
-          return reg.test(size as string) ? '' + size + 'px' : '' + size;
-          // return '' + this.size
-        }
-        return this.getFontSize(size as number)
-      },
-      styleObj() : UTSJSONObject {
-        if (this.fontFamily !== '') {
-          return { color: this.color, fontSize: this.iconSize, fontFamily: this.fontFamily }
-        }
-        return { color: this.color, fontSize: this.iconSize }
-      }
-    },
-    created() { },
-    methods: {
-      /**
-       * 字体大小
-       */
-      getFontSize(size : number) : string {
-        return size + 'px';
-      },
-    },
-  }
-</script>
-
-<style scoped>
-  @font-face {
-    font-family: UniIconsFontFamily;
-    src: url('./uniicons.ttf');
-  }
-
-  .uni-icons {
-    font-family: UniIconsFontFamily;
-    font-size: 18px;
-    font-style: normal;
-    color: #333;
-  }
-</style>

+ 0 - 110
uni_modules/uni-icons/components/uni-icons/uni-icons.vue

@@ -1,110 +0,0 @@
-<template>
-	<!-- #ifdef APP-NVUE -->
-	<text :style="styleObj" class="uni-icons" @click="_onClick">{{unicode}}</text>
-	<!-- #endif -->
-	<!-- #ifndef APP-NVUE -->
-	<text :style="styleObj" class="uni-icons" :class="['uniui-'+type,customPrefix,customPrefix?type:'']" @click="_onClick">
-		<slot></slot>
-	</text>
-	<!-- #endif -->
-</template>
-
-<script>
-	import { fontData } from './uniicons_file_vue.js';
-
-	const getVal = (val) => {
-		const reg = /^[0-9]*$/g
-		return (typeof val === 'number' || reg.test(val)) ? val + 'px' : val;
-	}
-
-	// #ifdef APP-NVUE
-	var domModule = weex.requireModule('dom');
-	import iconUrl from './uniicons.ttf'
-	domModule.addRule('fontFace', {
-		'fontFamily': "uniicons",
-		'src': "url('" + iconUrl + "')"
-	});
-	// #endif
-
-	/**
-	 * Icons 图标
-	 * @description 用于展示 icons 图标
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=28
-	 * @property {Number} size 图标大小
-	 * @property {String} type 图标图案,参考示例
-	 * @property {String} color 图标颜色
-	 * @property {String} customPrefix 自定义图标
-	 * @event {Function} click 点击 Icon 触发事件
-	 */
-	export default {
-		name: 'UniIcons',
-		emits: ['click'],
-		props: {
-			type: {
-				type: String,
-				default: ''
-			},
-			color: {
-				type: String,
-				default: '#333333'
-			},
-			size: {
-				type: [Number, String],
-				default: 16
-			},
-			customPrefix: {
-				type: String,
-				default: ''
-			},
-			fontFamily: {
-				type: String,
-				default: ''
-			}
-		},
-		data() {
-			return {
-				icons: fontData
-			}
-		},
-		computed: {
-			unicode() {
-				let code = this.icons.find(v => v.font_class === this.type)
-				if (code) {
-					return code.unicode
-				}
-				return ''
-			},
-			iconSize() {
-				return getVal(this.size)
-			},
-			styleObj() {
-				if (this.fontFamily !== '') {
-					return `color: ${this.color}; font-size: ${this.iconSize}; font-family: ${this.fontFamily};`
-				}
-				return `color: ${this.color}; font-size: ${this.iconSize};`
-			}
-		},
-		methods: {
-			_onClick() {
-				this.$emit('click')
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	/* #ifndef APP-NVUE */
-	@import './uniicons.css';
-
-	@font-face {
-		font-family: uniicons;
-		src: url('./uniicons.ttf');
-	}
-
-	/* #endif */
-	.uni-icons {
-		font-family: uniicons;
-		text-decoration: none;
-		text-align: center;
-	}
-</style>

+ 0 - 664
uni_modules/uni-icons/components/uni-icons/uniicons.css

@@ -1,664 +0,0 @@
-
-.uniui-cart-filled:before {
-  content: "\e6d0";
-}
-
-.uniui-gift-filled:before {
-  content: "\e6c4";
-}
-
-.uniui-color:before {
-  content: "\e6cf";
-}
-
-.uniui-wallet:before {
-  content: "\e6b1";
-}
-
-.uniui-settings-filled:before {
-  content: "\e6ce";
-}
-
-.uniui-auth-filled:before {
-  content: "\e6cc";
-}
-
-.uniui-shop-filled:before {
-  content: "\e6cd";
-}
-
-.uniui-staff-filled:before {
-  content: "\e6cb";
-}
-
-.uniui-vip-filled:before {
-  content: "\e6c6";
-}
-
-.uniui-plus-filled:before {
-  content: "\e6c7";
-}
-
-.uniui-folder-add-filled:before {
-  content: "\e6c8";
-}
-
-.uniui-color-filled:before {
-  content: "\e6c9";
-}
-
-.uniui-tune-filled:before {
-  content: "\e6ca";
-}
-
-.uniui-calendar-filled:before {
-  content: "\e6c0";
-}
-
-.uniui-notification-filled:before {
-  content: "\e6c1";
-}
-
-.uniui-wallet-filled:before {
-  content: "\e6c2";
-}
-
-.uniui-medal-filled:before {
-  content: "\e6c3";
-}
-
-.uniui-fire-filled:before {
-  content: "\e6c5";
-}
-
-.uniui-refreshempty:before {
-  content: "\e6bf";
-}
-
-.uniui-location-filled:before {
-  content: "\e6af";
-}
-
-.uniui-person-filled:before {
-  content: "\e69d";
-}
-
-.uniui-personadd-filled:before {
-  content: "\e698";
-}
-
-.uniui-arrowthinleft:before {
-  content: "\e6d2";
-}
-
-.uniui-arrowthinup:before {
-  content: "\e6d3";
-}
-
-.uniui-arrowthindown:before {
-  content: "\e6d4";
-}
-
-.uniui-back:before {
-  content: "\e6b9";
-}
-
-.uniui-forward:before {
-  content: "\e6ba";
-}
-
-.uniui-arrow-right:before {
-  content: "\e6bb";
-}
-
-.uniui-arrow-left:before {
-  content: "\e6bc";
-}
-
-.uniui-arrow-up:before {
-  content: "\e6bd";
-}
-
-.uniui-arrow-down:before {
-  content: "\e6be";
-}
-
-.uniui-arrowthinright:before {
-  content: "\e6d1";
-}
-
-.uniui-down:before {
-  content: "\e6b8";
-}
-
-.uniui-bottom:before {
-  content: "\e6b8";
-}
-
-.uniui-arrowright:before {
-  content: "\e6d5";
-}
-
-.uniui-right:before {
-  content: "\e6b5";
-}
-
-.uniui-up:before {
-  content: "\e6b6";
-}
-
-.uniui-top:before {
-  content: "\e6b6";
-}
-
-.uniui-left:before {
-  content: "\e6b7";
-}
-
-.uniui-arrowup:before {
-  content: "\e6d6";
-}
-
-.uniui-eye:before {
-  content: "\e651";
-}
-
-.uniui-eye-filled:before {
-  content: "\e66a";
-}
-
-.uniui-eye-slash:before {
-  content: "\e6b3";
-}
-
-.uniui-eye-slash-filled:before {
-  content: "\e6b4";
-}
-
-.uniui-info-filled:before {
-  content: "\e649";
-}
-
-.uniui-reload:before {
-  content: "\e6b2";
-}
-
-.uniui-micoff-filled:before {
-  content: "\e6b0";
-}
-
-.uniui-map-pin-ellipse:before {
-  content: "\e6ac";
-}
-
-.uniui-map-pin:before {
-  content: "\e6ad";
-}
-
-.uniui-location:before {
-  content: "\e6ae";
-}
-
-.uniui-starhalf:before {
-  content: "\e683";
-}
-
-.uniui-star:before {
-  content: "\e688";
-}
-
-.uniui-star-filled:before {
-  content: "\e68f";
-}
-
-.uniui-calendar:before {
-  content: "\e6a0";
-}
-
-.uniui-fire:before {
-  content: "\e6a1";
-}
-
-.uniui-medal:before {
-  content: "\e6a2";
-}
-
-.uniui-font:before {
-  content: "\e6a3";
-}
-
-.uniui-gift:before {
-  content: "\e6a4";
-}
-
-.uniui-link:before {
-  content: "\e6a5";
-}
-
-.uniui-notification:before {
-  content: "\e6a6";
-}
-
-.uniui-staff:before {
-  content: "\e6a7";
-}
-
-.uniui-vip:before {
-  content: "\e6a8";
-}
-
-.uniui-folder-add:before {
-  content: "\e6a9";
-}
-
-.uniui-tune:before {
-  content: "\e6aa";
-}
-
-.uniui-auth:before {
-  content: "\e6ab";
-}
-
-.uniui-person:before {
-  content: "\e699";
-}
-
-.uniui-email-filled:before {
-  content: "\e69a";
-}
-
-.uniui-phone-filled:before {
-  content: "\e69b";
-}
-
-.uniui-phone:before {
-  content: "\e69c";
-}
-
-.uniui-email:before {
-  content: "\e69e";
-}
-
-.uniui-personadd:before {
-  content: "\e69f";
-}
-
-.uniui-chatboxes-filled:before {
-  content: "\e692";
-}
-
-.uniui-contact:before {
-  content: "\e693";
-}
-
-.uniui-chatbubble-filled:before {
-  content: "\e694";
-}
-
-.uniui-contact-filled:before {
-  content: "\e695";
-}
-
-.uniui-chatboxes:before {
-  content: "\e696";
-}
-
-.uniui-chatbubble:before {
-  content: "\e697";
-}
-
-.uniui-upload-filled:before {
-  content: "\e68e";
-}
-
-.uniui-upload:before {
-  content: "\e690";
-}
-
-.uniui-weixin:before {
-  content: "\e691";
-}
-
-.uniui-compose:before {
-  content: "\e67f";
-}
-
-.uniui-qq:before {
-  content: "\e680";
-}
-
-.uniui-download-filled:before {
-  content: "\e681";
-}
-
-.uniui-pyq:before {
-  content: "\e682";
-}
-
-.uniui-sound:before {
-  content: "\e684";
-}
-
-.uniui-trash-filled:before {
-  content: "\e685";
-}
-
-.uniui-sound-filled:before {
-  content: "\e686";
-}
-
-.uniui-trash:before {
-  content: "\e687";
-}
-
-.uniui-videocam-filled:before {
-  content: "\e689";
-}
-
-.uniui-spinner-cycle:before {
-  content: "\e68a";
-}
-
-.uniui-weibo:before {
-  content: "\e68b";
-}
-
-.uniui-videocam:before {
-  content: "\e68c";
-}
-
-.uniui-download:before {
-  content: "\e68d";
-}
-
-.uniui-help:before {
-  content: "\e679";
-}
-
-.uniui-navigate-filled:before {
-  content: "\e67a";
-}
-
-.uniui-plusempty:before {
-  content: "\e67b";
-}
-
-.uniui-smallcircle:before {
-  content: "\e67c";
-}
-
-.uniui-minus-filled:before {
-  content: "\e67d";
-}
-
-.uniui-micoff:before {
-  content: "\e67e";
-}
-
-.uniui-closeempty:before {
-  content: "\e66c";
-}
-
-.uniui-clear:before {
-  content: "\e66d";
-}
-
-.uniui-navigate:before {
-  content: "\e66e";
-}
-
-.uniui-minus:before {
-  content: "\e66f";
-}
-
-.uniui-image:before {
-  content: "\e670";
-}
-
-.uniui-mic:before {
-  content: "\e671";
-}
-
-.uniui-paperplane:before {
-  content: "\e672";
-}
-
-.uniui-close:before {
-  content: "\e673";
-}
-
-.uniui-help-filled:before {
-  content: "\e674";
-}
-
-.uniui-paperplane-filled:before {
-  content: "\e675";
-}
-
-.uniui-plus:before {
-  content: "\e676";
-}
-
-.uniui-mic-filled:before {
-  content: "\e677";
-}
-
-.uniui-image-filled:before {
-  content: "\e678";
-}
-
-.uniui-locked-filled:before {
-  content: "\e668";
-}
-
-.uniui-info:before {
-  content: "\e669";
-}
-
-.uniui-locked:before {
-  content: "\e66b";
-}
-
-.uniui-camera-filled:before {
-  content: "\e658";
-}
-
-.uniui-chat-filled:before {
-  content: "\e659";
-}
-
-.uniui-camera:before {
-  content: "\e65a";
-}
-
-.uniui-circle:before {
-  content: "\e65b";
-}
-
-.uniui-checkmarkempty:before {
-  content: "\e65c";
-}
-
-.uniui-chat:before {
-  content: "\e65d";
-}
-
-.uniui-circle-filled:before {
-  content: "\e65e";
-}
-
-.uniui-flag:before {
-  content: "\e65f";
-}
-
-.uniui-flag-filled:before {
-  content: "\e660";
-}
-
-.uniui-gear-filled:before {
-  content: "\e661";
-}
-
-.uniui-home:before {
-  content: "\e662";
-}
-
-.uniui-home-filled:before {
-  content: "\e663";
-}
-
-.uniui-gear:before {
-  content: "\e664";
-}
-
-.uniui-smallcircle-filled:before {
-  content: "\e665";
-}
-
-.uniui-map-filled:before {
-  content: "\e666";
-}
-
-.uniui-map:before {
-  content: "\e667";
-}
-
-.uniui-refresh-filled:before {
-  content: "\e656";
-}
-
-.uniui-refresh:before {
-  content: "\e657";
-}
-
-.uniui-cloud-upload:before {
-  content: "\e645";
-}
-
-.uniui-cloud-download-filled:before {
-  content: "\e646";
-}
-
-.uniui-cloud-download:before {
-  content: "\e647";
-}
-
-.uniui-cloud-upload-filled:before {
-  content: "\e648";
-}
-
-.uniui-redo:before {
-  content: "\e64a";
-}
-
-.uniui-images-filled:before {
-  content: "\e64b";
-}
-
-.uniui-undo-filled:before {
-  content: "\e64c";
-}
-
-.uniui-more:before {
-  content: "\e64d";
-}
-
-.uniui-more-filled:before {
-  content: "\e64e";
-}
-
-.uniui-undo:before {
-  content: "\e64f";
-}
-
-.uniui-images:before {
-  content: "\e650";
-}
-
-.uniui-paperclip:before {
-  content: "\e652";
-}
-
-.uniui-settings:before {
-  content: "\e653";
-}
-
-.uniui-search:before {
-  content: "\e654";
-}
-
-.uniui-redo-filled:before {
-  content: "\e655";
-}
-
-.uniui-list:before {
-  content: "\e644";
-}
-
-.uniui-mail-open-filled:before {
-  content: "\e63a";
-}
-
-.uniui-hand-down-filled:before {
-  content: "\e63c";
-}
-
-.uniui-hand-down:before {
-  content: "\e63d";
-}
-
-.uniui-hand-up-filled:before {
-  content: "\e63e";
-}
-
-.uniui-hand-up:before {
-  content: "\e63f";
-}
-
-.uniui-heart-filled:before {
-  content: "\e641";
-}
-
-.uniui-mail-open:before {
-  content: "\e643";
-}
-
-.uniui-heart:before {
-  content: "\e639";
-}
-
-.uniui-loop:before {
-  content: "\e633";
-}
-
-.uniui-pulldown:before {
-  content: "\e632";
-}
-
-.uniui-scan:before {
-  content: "\e62a";
-}
-
-.uniui-bars:before {
-  content: "\e627";
-}
-
-.uniui-checkbox:before {
-  content: "\e62b";
-}
-
-.uniui-checkbox-filled:before {
-  content: "\e62c";
-}
-
-.uniui-shop:before {
-  content: "\e62f";
-}
-
-.uniui-headphones:before {
-  content: "\e630";
-}
-
-.uniui-cart:before {
-  content: "\e631";
-}

BIN
uni_modules/uni-icons/components/uni-icons/uniicons.ttf


+ 0 - 664
uni_modules/uni-icons/components/uni-icons/uniicons_file.ts

@@ -1,664 +0,0 @@
-
-export type IconsData = {
-	id : string
-	name : string
-	font_family : string
-	css_prefix_text : string
-	description : string
-	glyphs : Array<IconsDataItem>
-}
-
-export type IconsDataItem = {
-	font_class : string
-	unicode : string
-}
-
-
-export const fontData = [
-  {
-    "font_class": "arrow-down",
-    "unicode": "\ue6be"
-  },
-  {
-    "font_class": "arrow-left",
-    "unicode": "\ue6bc"
-  },
-  {
-    "font_class": "arrow-right",
-    "unicode": "\ue6bb"
-  },
-  {
-    "font_class": "arrow-up",
-    "unicode": "\ue6bd"
-  },
-  {
-    "font_class": "auth",
-    "unicode": "\ue6ab"
-  },
-  {
-    "font_class": "auth-filled",
-    "unicode": "\ue6cc"
-  },
-  {
-    "font_class": "back",
-    "unicode": "\ue6b9"
-  },
-  {
-    "font_class": "bars",
-    "unicode": "\ue627"
-  },
-  {
-    "font_class": "calendar",
-    "unicode": "\ue6a0"
-  },
-  {
-    "font_class": "calendar-filled",
-    "unicode": "\ue6c0"
-  },
-  {
-    "font_class": "camera",
-    "unicode": "\ue65a"
-  },
-  {
-    "font_class": "camera-filled",
-    "unicode": "\ue658"
-  },
-  {
-    "font_class": "cart",
-    "unicode": "\ue631"
-  },
-  {
-    "font_class": "cart-filled",
-    "unicode": "\ue6d0"
-  },
-  {
-    "font_class": "chat",
-    "unicode": "\ue65d"
-  },
-  {
-    "font_class": "chat-filled",
-    "unicode": "\ue659"
-  },
-  {
-    "font_class": "chatboxes",
-    "unicode": "\ue696"
-  },
-  {
-    "font_class": "chatboxes-filled",
-    "unicode": "\ue692"
-  },
-  {
-    "font_class": "chatbubble",
-    "unicode": "\ue697"
-  },
-  {
-    "font_class": "chatbubble-filled",
-    "unicode": "\ue694"
-  },
-  {
-    "font_class": "checkbox",
-    "unicode": "\ue62b"
-  },
-  {
-    "font_class": "checkbox-filled",
-    "unicode": "\ue62c"
-  },
-  {
-    "font_class": "checkmarkempty",
-    "unicode": "\ue65c"
-  },
-  {
-    "font_class": "circle",
-    "unicode": "\ue65b"
-  },
-  {
-    "font_class": "circle-filled",
-    "unicode": "\ue65e"
-  },
-  {
-    "font_class": "clear",
-    "unicode": "\ue66d"
-  },
-  {
-    "font_class": "close",
-    "unicode": "\ue673"
-  },
-  {
-    "font_class": "closeempty",
-    "unicode": "\ue66c"
-  },
-  {
-    "font_class": "cloud-download",
-    "unicode": "\ue647"
-  },
-  {
-    "font_class": "cloud-download-filled",
-    "unicode": "\ue646"
-  },
-  {
-    "font_class": "cloud-upload",
-    "unicode": "\ue645"
-  },
-  {
-    "font_class": "cloud-upload-filled",
-    "unicode": "\ue648"
-  },
-  {
-    "font_class": "color",
-    "unicode": "\ue6cf"
-  },
-  {
-    "font_class": "color-filled",
-    "unicode": "\ue6c9"
-  },
-  {
-    "font_class": "compose",
-    "unicode": "\ue67f"
-  },
-  {
-    "font_class": "contact",
-    "unicode": "\ue693"
-  },
-  {
-    "font_class": "contact-filled",
-    "unicode": "\ue695"
-  },
-  {
-    "font_class": "down",
-    "unicode": "\ue6b8"
-  },
-	{
-	  "font_class": "bottom",
-	  "unicode": "\ue6b8"
-	},
-  {
-    "font_class": "download",
-    "unicode": "\ue68d"
-  },
-  {
-    "font_class": "download-filled",
-    "unicode": "\ue681"
-  },
-  {
-    "font_class": "email",
-    "unicode": "\ue69e"
-  },
-  {
-    "font_class": "email-filled",
-    "unicode": "\ue69a"
-  },
-  {
-    "font_class": "eye",
-    "unicode": "\ue651"
-  },
-  {
-    "font_class": "eye-filled",
-    "unicode": "\ue66a"
-  },
-  {
-    "font_class": "eye-slash",
-    "unicode": "\ue6b3"
-  },
-  {
-    "font_class": "eye-slash-filled",
-    "unicode": "\ue6b4"
-  },
-  {
-    "font_class": "fire",
-    "unicode": "\ue6a1"
-  },
-  {
-    "font_class": "fire-filled",
-    "unicode": "\ue6c5"
-  },
-  {
-    "font_class": "flag",
-    "unicode": "\ue65f"
-  },
-  {
-    "font_class": "flag-filled",
-    "unicode": "\ue660"
-  },
-  {
-    "font_class": "folder-add",
-    "unicode": "\ue6a9"
-  },
-  {
-    "font_class": "folder-add-filled",
-    "unicode": "\ue6c8"
-  },
-  {
-    "font_class": "font",
-    "unicode": "\ue6a3"
-  },
-  {
-    "font_class": "forward",
-    "unicode": "\ue6ba"
-  },
-  {
-    "font_class": "gear",
-    "unicode": "\ue664"
-  },
-  {
-    "font_class": "gear-filled",
-    "unicode": "\ue661"
-  },
-  {
-    "font_class": "gift",
-    "unicode": "\ue6a4"
-  },
-  {
-    "font_class": "gift-filled",
-    "unicode": "\ue6c4"
-  },
-  {
-    "font_class": "hand-down",
-    "unicode": "\ue63d"
-  },
-  {
-    "font_class": "hand-down-filled",
-    "unicode": "\ue63c"
-  },
-  {
-    "font_class": "hand-up",
-    "unicode": "\ue63f"
-  },
-  {
-    "font_class": "hand-up-filled",
-    "unicode": "\ue63e"
-  },
-  {
-    "font_class": "headphones",
-    "unicode": "\ue630"
-  },
-  {
-    "font_class": "heart",
-    "unicode": "\ue639"
-  },
-  {
-    "font_class": "heart-filled",
-    "unicode": "\ue641"
-  },
-  {
-    "font_class": "help",
-    "unicode": "\ue679"
-  },
-  {
-    "font_class": "help-filled",
-    "unicode": "\ue674"
-  },
-  {
-    "font_class": "home",
-    "unicode": "\ue662"
-  },
-  {
-    "font_class": "home-filled",
-    "unicode": "\ue663"
-  },
-  {
-    "font_class": "image",
-    "unicode": "\ue670"
-  },
-  {
-    "font_class": "image-filled",
-    "unicode": "\ue678"
-  },
-  {
-    "font_class": "images",
-    "unicode": "\ue650"
-  },
-  {
-    "font_class": "images-filled",
-    "unicode": "\ue64b"
-  },
-  {
-    "font_class": "info",
-    "unicode": "\ue669"
-  },
-  {
-    "font_class": "info-filled",
-    "unicode": "\ue649"
-  },
-  {
-    "font_class": "left",
-    "unicode": "\ue6b7"
-  },
-  {
-    "font_class": "link",
-    "unicode": "\ue6a5"
-  },
-  {
-    "font_class": "list",
-    "unicode": "\ue644"
-  },
-  {
-    "font_class": "location",
-    "unicode": "\ue6ae"
-  },
-  {
-    "font_class": "location-filled",
-    "unicode": "\ue6af"
-  },
-  {
-    "font_class": "locked",
-    "unicode": "\ue66b"
-  },
-  {
-    "font_class": "locked-filled",
-    "unicode": "\ue668"
-  },
-  {
-    "font_class": "loop",
-    "unicode": "\ue633"
-  },
-  {
-    "font_class": "mail-open",
-    "unicode": "\ue643"
-  },
-  {
-    "font_class": "mail-open-filled",
-    "unicode": "\ue63a"
-  },
-  {
-    "font_class": "map",
-    "unicode": "\ue667"
-  },
-  {
-    "font_class": "map-filled",
-    "unicode": "\ue666"
-  },
-  {
-    "font_class": "map-pin",
-    "unicode": "\ue6ad"
-  },
-  {
-    "font_class": "map-pin-ellipse",
-    "unicode": "\ue6ac"
-  },
-  {
-    "font_class": "medal",
-    "unicode": "\ue6a2"
-  },
-  {
-    "font_class": "medal-filled",
-    "unicode": "\ue6c3"
-  },
-  {
-    "font_class": "mic",
-    "unicode": "\ue671"
-  },
-  {
-    "font_class": "mic-filled",
-    "unicode": "\ue677"
-  },
-  {
-    "font_class": "micoff",
-    "unicode": "\ue67e"
-  },
-  {
-    "font_class": "micoff-filled",
-    "unicode": "\ue6b0"
-  },
-  {
-    "font_class": "minus",
-    "unicode": "\ue66f"
-  },
-  {
-    "font_class": "minus-filled",
-    "unicode": "\ue67d"
-  },
-  {
-    "font_class": "more",
-    "unicode": "\ue64d"
-  },
-  {
-    "font_class": "more-filled",
-    "unicode": "\ue64e"
-  },
-  {
-    "font_class": "navigate",
-    "unicode": "\ue66e"
-  },
-  {
-    "font_class": "navigate-filled",
-    "unicode": "\ue67a"
-  },
-  {
-    "font_class": "notification",
-    "unicode": "\ue6a6"
-  },
-  {
-    "font_class": "notification-filled",
-    "unicode": "\ue6c1"
-  },
-  {
-    "font_class": "paperclip",
-    "unicode": "\ue652"
-  },
-  {
-    "font_class": "paperplane",
-    "unicode": "\ue672"
-  },
-  {
-    "font_class": "paperplane-filled",
-    "unicode": "\ue675"
-  },
-  {
-    "font_class": "person",
-    "unicode": "\ue699"
-  },
-  {
-    "font_class": "person-filled",
-    "unicode": "\ue69d"
-  },
-  {
-    "font_class": "personadd",
-    "unicode": "\ue69f"
-  },
-  {
-    "font_class": "personadd-filled",
-    "unicode": "\ue698"
-  },
-  {
-    "font_class": "personadd-filled-copy",
-    "unicode": "\ue6d1"
-  },
-  {
-    "font_class": "phone",
-    "unicode": "\ue69c"
-  },
-  {
-    "font_class": "phone-filled",
-    "unicode": "\ue69b"
-  },
-  {
-    "font_class": "plus",
-    "unicode": "\ue676"
-  },
-  {
-    "font_class": "plus-filled",
-    "unicode": "\ue6c7"
-  },
-  {
-    "font_class": "plusempty",
-    "unicode": "\ue67b"
-  },
-  {
-    "font_class": "pulldown",
-    "unicode": "\ue632"
-  },
-  {
-    "font_class": "pyq",
-    "unicode": "\ue682"
-  },
-  {
-    "font_class": "qq",
-    "unicode": "\ue680"
-  },
-  {
-    "font_class": "redo",
-    "unicode": "\ue64a"
-  },
-  {
-    "font_class": "redo-filled",
-    "unicode": "\ue655"
-  },
-  {
-    "font_class": "refresh",
-    "unicode": "\ue657"
-  },
-  {
-    "font_class": "refresh-filled",
-    "unicode": "\ue656"
-  },
-  {
-    "font_class": "refreshempty",
-    "unicode": "\ue6bf"
-  },
-  {
-    "font_class": "reload",
-    "unicode": "\ue6b2"
-  },
-  {
-    "font_class": "right",
-    "unicode": "\ue6b5"
-  },
-  {
-    "font_class": "scan",
-    "unicode": "\ue62a"
-  },
-  {
-    "font_class": "search",
-    "unicode": "\ue654"
-  },
-  {
-    "font_class": "settings",
-    "unicode": "\ue653"
-  },
-  {
-    "font_class": "settings-filled",
-    "unicode": "\ue6ce"
-  },
-  {
-    "font_class": "shop",
-    "unicode": "\ue62f"
-  },
-  {
-    "font_class": "shop-filled",
-    "unicode": "\ue6cd"
-  },
-  {
-    "font_class": "smallcircle",
-    "unicode": "\ue67c"
-  },
-  {
-    "font_class": "smallcircle-filled",
-    "unicode": "\ue665"
-  },
-  {
-    "font_class": "sound",
-    "unicode": "\ue684"
-  },
-  {
-    "font_class": "sound-filled",
-    "unicode": "\ue686"
-  },
-  {
-    "font_class": "spinner-cycle",
-    "unicode": "\ue68a"
-  },
-  {
-    "font_class": "staff",
-    "unicode": "\ue6a7"
-  },
-  {
-    "font_class": "staff-filled",
-    "unicode": "\ue6cb"
-  },
-  {
-    "font_class": "star",
-    "unicode": "\ue688"
-  },
-  {
-    "font_class": "star-filled",
-    "unicode": "\ue68f"
-  },
-  {
-    "font_class": "starhalf",
-    "unicode": "\ue683"
-  },
-  {
-    "font_class": "trash",
-    "unicode": "\ue687"
-  },
-  {
-    "font_class": "trash-filled",
-    "unicode": "\ue685"
-  },
-  {
-    "font_class": "tune",
-    "unicode": "\ue6aa"
-  },
-  {
-    "font_class": "tune-filled",
-    "unicode": "\ue6ca"
-  },
-  {
-    "font_class": "undo",
-    "unicode": "\ue64f"
-  },
-  {
-    "font_class": "undo-filled",
-    "unicode": "\ue64c"
-  },
-  {
-    "font_class": "up",
-    "unicode": "\ue6b6"
-  },
-	{
-	  "font_class": "top",
-	  "unicode": "\ue6b6"
-	},
-  {
-    "font_class": "upload",
-    "unicode": "\ue690"
-  },
-  {
-    "font_class": "upload-filled",
-    "unicode": "\ue68e"
-  },
-  {
-    "font_class": "videocam",
-    "unicode": "\ue68c"
-  },
-  {
-    "font_class": "videocam-filled",
-    "unicode": "\ue689"
-  },
-  {
-    "font_class": "vip",
-    "unicode": "\ue6a8"
-  },
-  {
-    "font_class": "vip-filled",
-    "unicode": "\ue6c6"
-  },
-  {
-    "font_class": "wallet",
-    "unicode": "\ue6b1"
-  },
-  {
-    "font_class": "wallet-filled",
-    "unicode": "\ue6c2"
-  },
-  {
-    "font_class": "weibo",
-    "unicode": "\ue68b"
-  },
-  {
-    "font_class": "weixin",
-    "unicode": "\ue691"
-  }
-] as IconsDataItem[]
-
-// export const fontData = JSON.parse<IconsDataItem>(fontDataJson)

+ 0 - 649
uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js

@@ -1,649 +0,0 @@
-
-export const fontData = [
-  {
-    "font_class": "arrow-down",
-    "unicode": "\ue6be"
-  },
-  {
-    "font_class": "arrow-left",
-    "unicode": "\ue6bc"
-  },
-  {
-    "font_class": "arrow-right",
-    "unicode": "\ue6bb"
-  },
-  {
-    "font_class": "arrow-up",
-    "unicode": "\ue6bd"
-  },
-  {
-    "font_class": "auth",
-    "unicode": "\ue6ab"
-  },
-  {
-    "font_class": "auth-filled",
-    "unicode": "\ue6cc"
-  },
-  {
-    "font_class": "back",
-    "unicode": "\ue6b9"
-  },
-  {
-    "font_class": "bars",
-    "unicode": "\ue627"
-  },
-  {
-    "font_class": "calendar",
-    "unicode": "\ue6a0"
-  },
-  {
-    "font_class": "calendar-filled",
-    "unicode": "\ue6c0"
-  },
-  {
-    "font_class": "camera",
-    "unicode": "\ue65a"
-  },
-  {
-    "font_class": "camera-filled",
-    "unicode": "\ue658"
-  },
-  {
-    "font_class": "cart",
-    "unicode": "\ue631"
-  },
-  {
-    "font_class": "cart-filled",
-    "unicode": "\ue6d0"
-  },
-  {
-    "font_class": "chat",
-    "unicode": "\ue65d"
-  },
-  {
-    "font_class": "chat-filled",
-    "unicode": "\ue659"
-  },
-  {
-    "font_class": "chatboxes",
-    "unicode": "\ue696"
-  },
-  {
-    "font_class": "chatboxes-filled",
-    "unicode": "\ue692"
-  },
-  {
-    "font_class": "chatbubble",
-    "unicode": "\ue697"
-  },
-  {
-    "font_class": "chatbubble-filled",
-    "unicode": "\ue694"
-  },
-  {
-    "font_class": "checkbox",
-    "unicode": "\ue62b"
-  },
-  {
-    "font_class": "checkbox-filled",
-    "unicode": "\ue62c"
-  },
-  {
-    "font_class": "checkmarkempty",
-    "unicode": "\ue65c"
-  },
-  {
-    "font_class": "circle",
-    "unicode": "\ue65b"
-  },
-  {
-    "font_class": "circle-filled",
-    "unicode": "\ue65e"
-  },
-  {
-    "font_class": "clear",
-    "unicode": "\ue66d"
-  },
-  {
-    "font_class": "close",
-    "unicode": "\ue673"
-  },
-  {
-    "font_class": "closeempty",
-    "unicode": "\ue66c"
-  },
-  {
-    "font_class": "cloud-download",
-    "unicode": "\ue647"
-  },
-  {
-    "font_class": "cloud-download-filled",
-    "unicode": "\ue646"
-  },
-  {
-    "font_class": "cloud-upload",
-    "unicode": "\ue645"
-  },
-  {
-    "font_class": "cloud-upload-filled",
-    "unicode": "\ue648"
-  },
-  {
-    "font_class": "color",
-    "unicode": "\ue6cf"
-  },
-  {
-    "font_class": "color-filled",
-    "unicode": "\ue6c9"
-  },
-  {
-    "font_class": "compose",
-    "unicode": "\ue67f"
-  },
-  {
-    "font_class": "contact",
-    "unicode": "\ue693"
-  },
-  {
-    "font_class": "contact-filled",
-    "unicode": "\ue695"
-  },
-  {
-    "font_class": "down",
-    "unicode": "\ue6b8"
-  },
-	{
-	  "font_class": "bottom",
-	  "unicode": "\ue6b8"
-	},
-  {
-    "font_class": "download",
-    "unicode": "\ue68d"
-  },
-  {
-    "font_class": "download-filled",
-    "unicode": "\ue681"
-  },
-  {
-    "font_class": "email",
-    "unicode": "\ue69e"
-  },
-  {
-    "font_class": "email-filled",
-    "unicode": "\ue69a"
-  },
-  {
-    "font_class": "eye",
-    "unicode": "\ue651"
-  },
-  {
-    "font_class": "eye-filled",
-    "unicode": "\ue66a"
-  },
-  {
-    "font_class": "eye-slash",
-    "unicode": "\ue6b3"
-  },
-  {
-    "font_class": "eye-slash-filled",
-    "unicode": "\ue6b4"
-  },
-  {
-    "font_class": "fire",
-    "unicode": "\ue6a1"
-  },
-  {
-    "font_class": "fire-filled",
-    "unicode": "\ue6c5"
-  },
-  {
-    "font_class": "flag",
-    "unicode": "\ue65f"
-  },
-  {
-    "font_class": "flag-filled",
-    "unicode": "\ue660"
-  },
-  {
-    "font_class": "folder-add",
-    "unicode": "\ue6a9"
-  },
-  {
-    "font_class": "folder-add-filled",
-    "unicode": "\ue6c8"
-  },
-  {
-    "font_class": "font",
-    "unicode": "\ue6a3"
-  },
-  {
-    "font_class": "forward",
-    "unicode": "\ue6ba"
-  },
-  {
-    "font_class": "gear",
-    "unicode": "\ue664"
-  },
-  {
-    "font_class": "gear-filled",
-    "unicode": "\ue661"
-  },
-  {
-    "font_class": "gift",
-    "unicode": "\ue6a4"
-  },
-  {
-    "font_class": "gift-filled",
-    "unicode": "\ue6c4"
-  },
-  {
-    "font_class": "hand-down",
-    "unicode": "\ue63d"
-  },
-  {
-    "font_class": "hand-down-filled",
-    "unicode": "\ue63c"
-  },
-  {
-    "font_class": "hand-up",
-    "unicode": "\ue63f"
-  },
-  {
-    "font_class": "hand-up-filled",
-    "unicode": "\ue63e"
-  },
-  {
-    "font_class": "headphones",
-    "unicode": "\ue630"
-  },
-  {
-    "font_class": "heart",
-    "unicode": "\ue639"
-  },
-  {
-    "font_class": "heart-filled",
-    "unicode": "\ue641"
-  },
-  {
-    "font_class": "help",
-    "unicode": "\ue679"
-  },
-  {
-    "font_class": "help-filled",
-    "unicode": "\ue674"
-  },
-  {
-    "font_class": "home",
-    "unicode": "\ue662"
-  },
-  {
-    "font_class": "home-filled",
-    "unicode": "\ue663"
-  },
-  {
-    "font_class": "image",
-    "unicode": "\ue670"
-  },
-  {
-    "font_class": "image-filled",
-    "unicode": "\ue678"
-  },
-  {
-    "font_class": "images",
-    "unicode": "\ue650"
-  },
-  {
-    "font_class": "images-filled",
-    "unicode": "\ue64b"
-  },
-  {
-    "font_class": "info",
-    "unicode": "\ue669"
-  },
-  {
-    "font_class": "info-filled",
-    "unicode": "\ue649"
-  },
-  {
-    "font_class": "left",
-    "unicode": "\ue6b7"
-  },
-  {
-    "font_class": "link",
-    "unicode": "\ue6a5"
-  },
-  {
-    "font_class": "list",
-    "unicode": "\ue644"
-  },
-  {
-    "font_class": "location",
-    "unicode": "\ue6ae"
-  },
-  {
-    "font_class": "location-filled",
-    "unicode": "\ue6af"
-  },
-  {
-    "font_class": "locked",
-    "unicode": "\ue66b"
-  },
-  {
-    "font_class": "locked-filled",
-    "unicode": "\ue668"
-  },
-  {
-    "font_class": "loop",
-    "unicode": "\ue633"
-  },
-  {
-    "font_class": "mail-open",
-    "unicode": "\ue643"
-  },
-  {
-    "font_class": "mail-open-filled",
-    "unicode": "\ue63a"
-  },
-  {
-    "font_class": "map",
-    "unicode": "\ue667"
-  },
-  {
-    "font_class": "map-filled",
-    "unicode": "\ue666"
-  },
-  {
-    "font_class": "map-pin",
-    "unicode": "\ue6ad"
-  },
-  {
-    "font_class": "map-pin-ellipse",
-    "unicode": "\ue6ac"
-  },
-  {
-    "font_class": "medal",
-    "unicode": "\ue6a2"
-  },
-  {
-    "font_class": "medal-filled",
-    "unicode": "\ue6c3"
-  },
-  {
-    "font_class": "mic",
-    "unicode": "\ue671"
-  },
-  {
-    "font_class": "mic-filled",
-    "unicode": "\ue677"
-  },
-  {
-    "font_class": "micoff",
-    "unicode": "\ue67e"
-  },
-  {
-    "font_class": "micoff-filled",
-    "unicode": "\ue6b0"
-  },
-  {
-    "font_class": "minus",
-    "unicode": "\ue66f"
-  },
-  {
-    "font_class": "minus-filled",
-    "unicode": "\ue67d"
-  },
-  {
-    "font_class": "more",
-    "unicode": "\ue64d"
-  },
-  {
-    "font_class": "more-filled",
-    "unicode": "\ue64e"
-  },
-  {
-    "font_class": "navigate",
-    "unicode": "\ue66e"
-  },
-  {
-    "font_class": "navigate-filled",
-    "unicode": "\ue67a"
-  },
-  {
-    "font_class": "notification",
-    "unicode": "\ue6a6"
-  },
-  {
-    "font_class": "notification-filled",
-    "unicode": "\ue6c1"
-  },
-  {
-    "font_class": "paperclip",
-    "unicode": "\ue652"
-  },
-  {
-    "font_class": "paperplane",
-    "unicode": "\ue672"
-  },
-  {
-    "font_class": "paperplane-filled",
-    "unicode": "\ue675"
-  },
-  {
-    "font_class": "person",
-    "unicode": "\ue699"
-  },
-  {
-    "font_class": "person-filled",
-    "unicode": "\ue69d"
-  },
-  {
-    "font_class": "personadd",
-    "unicode": "\ue69f"
-  },
-  {
-    "font_class": "personadd-filled",
-    "unicode": "\ue698"
-  },
-  {
-    "font_class": "personadd-filled-copy",
-    "unicode": "\ue6d1"
-  },
-  {
-    "font_class": "phone",
-    "unicode": "\ue69c"
-  },
-  {
-    "font_class": "phone-filled",
-    "unicode": "\ue69b"
-  },
-  {
-    "font_class": "plus",
-    "unicode": "\ue676"
-  },
-  {
-    "font_class": "plus-filled",
-    "unicode": "\ue6c7"
-  },
-  {
-    "font_class": "plusempty",
-    "unicode": "\ue67b"
-  },
-  {
-    "font_class": "pulldown",
-    "unicode": "\ue632"
-  },
-  {
-    "font_class": "pyq",
-    "unicode": "\ue682"
-  },
-  {
-    "font_class": "qq",
-    "unicode": "\ue680"
-  },
-  {
-    "font_class": "redo",
-    "unicode": "\ue64a"
-  },
-  {
-    "font_class": "redo-filled",
-    "unicode": "\ue655"
-  },
-  {
-    "font_class": "refresh",
-    "unicode": "\ue657"
-  },
-  {
-    "font_class": "refresh-filled",
-    "unicode": "\ue656"
-  },
-  {
-    "font_class": "refreshempty",
-    "unicode": "\ue6bf"
-  },
-  {
-    "font_class": "reload",
-    "unicode": "\ue6b2"
-  },
-  {
-    "font_class": "right",
-    "unicode": "\ue6b5"
-  },
-  {
-    "font_class": "scan",
-    "unicode": "\ue62a"
-  },
-  {
-    "font_class": "search",
-    "unicode": "\ue654"
-  },
-  {
-    "font_class": "settings",
-    "unicode": "\ue653"
-  },
-  {
-    "font_class": "settings-filled",
-    "unicode": "\ue6ce"
-  },
-  {
-    "font_class": "shop",
-    "unicode": "\ue62f"
-  },
-  {
-    "font_class": "shop-filled",
-    "unicode": "\ue6cd"
-  },
-  {
-    "font_class": "smallcircle",
-    "unicode": "\ue67c"
-  },
-  {
-    "font_class": "smallcircle-filled",
-    "unicode": "\ue665"
-  },
-  {
-    "font_class": "sound",
-    "unicode": "\ue684"
-  },
-  {
-    "font_class": "sound-filled",
-    "unicode": "\ue686"
-  },
-  {
-    "font_class": "spinner-cycle",
-    "unicode": "\ue68a"
-  },
-  {
-    "font_class": "staff",
-    "unicode": "\ue6a7"
-  },
-  {
-    "font_class": "staff-filled",
-    "unicode": "\ue6cb"
-  },
-  {
-    "font_class": "star",
-    "unicode": "\ue688"
-  },
-  {
-    "font_class": "star-filled",
-    "unicode": "\ue68f"
-  },
-  {
-    "font_class": "starhalf",
-    "unicode": "\ue683"
-  },
-  {
-    "font_class": "trash",
-    "unicode": "\ue687"
-  },
-  {
-    "font_class": "trash-filled",
-    "unicode": "\ue685"
-  },
-  {
-    "font_class": "tune",
-    "unicode": "\ue6aa"
-  },
-  {
-    "font_class": "tune-filled",
-    "unicode": "\ue6ca"
-  },
-  {
-    "font_class": "undo",
-    "unicode": "\ue64f"
-  },
-  {
-    "font_class": "undo-filled",
-    "unicode": "\ue64c"
-  },
-  {
-    "font_class": "up",
-    "unicode": "\ue6b6"
-  },
-	{
-	  "font_class": "top",
-	  "unicode": "\ue6b6"
-	},
-  {
-    "font_class": "upload",
-    "unicode": "\ue690"
-  },
-  {
-    "font_class": "upload-filled",
-    "unicode": "\ue68e"
-  },
-  {
-    "font_class": "videocam",
-    "unicode": "\ue68c"
-  },
-  {
-    "font_class": "videocam-filled",
-    "unicode": "\ue689"
-  },
-  {
-    "font_class": "vip",
-    "unicode": "\ue6a8"
-  },
-  {
-    "font_class": "vip-filled",
-    "unicode": "\ue6c6"
-  },
-  {
-    "font_class": "wallet",
-    "unicode": "\ue6b1"
-  },
-  {
-    "font_class": "wallet-filled",
-    "unicode": "\ue6c2"
-  },
-  {
-    "font_class": "weibo",
-    "unicode": "\ue68b"
-  },
-  {
-    "font_class": "weixin",
-    "unicode": "\ue691"
-  }
-]
-
-// export const fontData = JSON.parse<IconsDataItem>(fontDataJson)

+ 0 - 89
uni_modules/uni-icons/package.json

@@ -1,89 +0,0 @@
-{
-  "id": "uni-icons",
-  "displayName": "uni-icons 图标",
-  "version": "2.0.10",
-  "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
-  "keywords": [
-    "uni-ui",
-    "uniui",
-    "icon",
-    "图标"
-],
-  "repository": "https://github.com/dcloudio/uni-ui",
-  "engines": {
-    "HBuilderX": "^3.2.14"
-  },
-  "directories": {
-    "example": "../../temps/example_temps"
-  },
-"dcloudext": {
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "无",
-      "permissions": "无"
-    },
-    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
-    "type": "component-vue"
-  },
-  "uni_modules": {
-    "dependencies": ["uni-scss"],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y",
-        "alipay": "n"
-      },
-      "client": {
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "y",
-          "app-uvue": "y"
-        },
-        "H5-mobile": {
-          "Safari": "y",
-          "Android Browser": "y",
-          "微信浏览器(Android)": "y",
-          "QQ浏览器(Android)": "y"
-        },
-        "H5-pc": {
-          "Chrome": "y",
-          "IE": "y",
-          "Edge": "y",
-          "Firefox": "y",
-          "Safari": "y"
-        },
-        "小程序": {
-          "微信": "y",
-          "阿里": "y",
-          "百度": "y",
-          "字节跳动": "y",
-          "QQ": "y",
-					"钉钉": "y",
-					"快手": "y",
-					"飞书": "y",
-					"京东": "y"
-        },
-        "快应用": {
-          "华为": "y",
-          "联盟": "y"
-        },
-        "Vue": {
-            "vue2": "y",
-            "vue3": "y"
-        }
-      }
-    }
-  }
-}

+ 0 - 8
uni_modules/uni-icons/readme.md

@@ -1,8 +0,0 @@
-## Icons 图标
-> **组件名:uni-icons**
-> 代码块: `uIcons`
-
-用于展示 icons 图标 。
-
-### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons)
-#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 0 - 92
uni_modules/uni-popup/changelog.md

@@ -1,92 +0,0 @@
-## 1.9.5(2024-10-15)
-- 修复 微信小程序中的getSystemInfo警告
-## 1.9.4(2024-10-12)
-- 修复 微信小程序中的getSystemInfo警告
-## 1.9.3(2024-10-12)
-- 修复 微信小程序中的getSystemInfo警告
-## 1.9.2(2024-09-21)
-- 修复 uni-popup在android上的重复点击弹出位置不正确的bug
-## 1.9.1(2024-04-02)
-- 修复 uni-popup-dialog vue3下使用value无法进行绑定的bug(双向绑定兼容旧写法)
-## 1.9.0(2024-03-28)
-- 修复 uni-popup-dialog 双向绑定时初始化逻辑修正
-## 1.8.9(2024-03-20)
-- 修复 uni-popup-dialog 数据输入时修正为双向绑定
-## 1.8.8(2024-02-20)
-- 修复 uni-popup 在微信小程序下出现文字向上闪动的bug
-## 1.8.7(2024-02-02)
-- 新增 uni-popup-dialog 新增属性focus:input模式下,是否自动自动聚焦
-## 1.8.6(2024-01-30)
-- 新增 uni-popup-dialog 新增属性maxLength:限制输入框字数
-## 1.8.5(2024-01-26)
-- 新增 uni-popup-dialog 新增属性showClose:控制关闭按钮的显示
-## 1.8.4(2023-11-15)
-- 新增 uni-popup 支持uni-app-x 注意暂时仅支持 `maskClick` `@open` `@close`
-## 1.8.3(2023-04-17)
-- 修复 uni-popup 重复打开时的 bug
-## 1.8.2(2023-02-02)
-- uni-popup-dialog 组件新增 inputType 属性
-## 1.8.1(2022-12-01)
-- 修复 nvue 下 v-show 报错
-## 1.8.0(2022-11-29)
-- 优化 主题样式
-## 1.7.9(2022-04-02)
-- 修复 弹出层内部无法滚动的bug
-## 1.7.8(2022-03-28)
-- 修复 小程序中高度错误的bug
-## 1.7.7(2022-03-17)
-- 修复 快速调用open出现问题的Bug
-## 1.7.6(2022-02-14)
-- 修复 safeArea 属性不能设置为false的bug
-## 1.7.5(2022-01-19)
-- 修复 isMaskClick 失效的bug
-## 1.7.4(2022-01-19)
-- 新增 cancelText \ confirmText 属性 ,可自定义文本
-- 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色
-- 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题
-## 1.7.3(2022-01-13)
-- 修复 设置 safeArea 属性不生效的bug
-## 1.7.2(2021-11-26)
-- 优化 组件示例
-## 1.7.1(2021-11-26)
-- 修复 vuedoc 文字错误
-## 1.7.0(2021-11-19)
-- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
-- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-popup](https://uniapp.dcloud.io/component/uniui/uni-popup)
-## 1.6.2(2021-08-24)
-- 新增 支持国际化
-## 1.6.1(2021-07-30)
-- 优化 vue3下事件警告的问题
-## 1.6.0(2021-07-13)
-- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
-## 1.5.0(2021-06-23)
-- 新增 mask-click 遮罩层点击事件
-## 1.4.5(2021-06-22)
-- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
-## 1.4.4(2021-06-18)
-- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
-## 1.4.3(2021-06-08)
-- 修复 错误的 watch 字段
-- 修复 safeArea 属性不生效的问题
-- 修复 点击内容,再点击遮罩无法关闭的Bug
-## 1.4.2(2021-05-12)
-- 新增 组件示例地址
-## 1.4.1(2021-04-29)
-- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题
-## 1.4.0 (2021-04-29)
-- 新增 type 属性的 left\right 值,支持左右弹出
-- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗
-- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色
-- 新增 safeArea 属性,是否适配底部安全区
-- 修复 App\h5\微信小程序底部安全区占位不对的Bug
-- 修复 App 端弹出等待的Bug
-- 优化 提升低配设备性能,优化动画卡顿问题
-- 优化 更简单的组件自定义方式
-## 1.2.9(2021-02-05)
-- 优化 组件引用关系,通过uni_modules引用组件
-## 1.2.8(2021-02-05)
-- 调整为uni_modules目录规范
-## 1.2.7(2021-02-05)
-- 调整为uni_modules目录规范
-- 新增 支持 PC 端
-- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端

+ 0 - 45
uni_modules/uni-popup/components/uni-popup-dialog/keypress.js

@@ -1,45 +0,0 @@
-// #ifdef H5
-export default {
-  name: 'Keypress',
-  props: {
-    disable: {
-      type: Boolean,
-      default: false
-    }
-  },
-  mounted () {
-    const keyNames = {
-      esc: ['Esc', 'Escape'],
-      tab: 'Tab',
-      enter: 'Enter',
-      space: [' ', 'Spacebar'],
-      up: ['Up', 'ArrowUp'],
-      left: ['Left', 'ArrowLeft'],
-      right: ['Right', 'ArrowRight'],
-      down: ['Down', 'ArrowDown'],
-      delete: ['Backspace', 'Delete', 'Del']
-    }
-    const listener = ($event) => {
-      if (this.disable) {
-        return
-      }
-      const keyName = Object.keys(keyNames).find(key => {
-        const keyName = $event.key
-        const value = keyNames[key]
-        return value === keyName || (Array.isArray(value) && value.includes(keyName))
-      })
-      if (keyName) {
-        // 避免和其他按键事件冲突
-        setTimeout(() => {
-          this.$emit(keyName, {})
-        }, 0)
-      }
-    }
-    document.addEventListener('keyup', listener)
-    this.$once('hook:beforeDestroy', () => {
-      document.removeEventListener('keyup', listener)
-    })
-  },
-	render: () => {}
-}
-// #endif

+ 0 - 316
uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue

@@ -1,316 +0,0 @@
-<template>
-	<view class="uni-popup-dialog">
-		<view class="uni-dialog-title">
-			<text class="uni-dialog-title-text" :class="['uni-popup__'+dialogType]">{{titleText}}</text>
-		</view>
-		<view v-if="mode === 'base'" class="uni-dialog-content">
-			<slot>
-				<text class="uni-dialog-content-text">{{content}}</text>
-			</slot>
-		</view>
-		<view v-else class="uni-dialog-content">
-			<slot>
-				<input class="uni-dialog-input" :maxlength="maxlength" v-model="val" :type="inputType"
-					:placeholder="placeholderText" :focus="focus">
-			</slot>
-		</view>
-		<view class="uni-dialog-button-group">
-			<view class="uni-dialog-button" v-if="showClose" @click="closeDialog">
-				<text class="uni-dialog-button-text">{{closeText}}</text>
-			</view>
-			<view class="uni-dialog-button" :class="showClose?'uni-border-left':''" @click="onOk">
-				<text class="uni-dialog-button-text uni-button-color">{{okText}}</text>
-			</view>
-		</view>
-
-	</view>
-</template>
-
-<script>
-	import popup from '../uni-popup/popup.js'
-	import {
-		initVueI18n
-	} from '@dcloudio/uni-i18n'
-	import messages from '../uni-popup/i18n/index.js'
-	const {
-		t
-	} = initVueI18n(messages)
-	/**
-	 * PopUp 弹出层-对话框样式
-	 * @description 弹出层-对话框样式
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=329
-	 * @property {String} value input 模式下的默认值
-	 * @property {String} placeholder input 模式下输入提示
-	 * @property {Boolean} focus input模式下是否自动聚焦,默认为true
-	 * @property {String} type = [success|warning|info|error] 主题样式
-	 *  @value success 成功
-	 * 	@value warning 提示
-	 * 	@value info 消息
-	 * 	@value error 错误
-	 * @property {String} mode = [base|input] 模式、
-	 * 	@value base 基础对话框
-	 * 	@value input 可输入对话框
-	 * @showClose {Boolean} 是否显示关闭按钮
-	 * @property {String} content 对话框内容
-	 * @property {Boolean} beforeClose 是否拦截取消事件
-	 * @property {Number} maxlength 输入
-	 * @event {Function} confirm 点击确认按钮触发
-	 * @event {Function} close 点击取消按钮触发
-	 */
-
-	export default {
-		name: "uniPopupDialog",
-		mixins: [popup],
-		emits: ['confirm', 'close', 'update:modelValue', 'input'],
-		props: {
-			inputType: {
-				type: String,
-				default: 'text'
-			},
-			showClose: {
-				type: Boolean,
-				default: true
-			},
-			// #ifdef VUE2
-			value: {
-				type: [String, Number],
-				default: ''
-			},
-			// #endif
-			// #ifdef VUE3
-			modelValue: {
-				type: [Number, String],
-				default: ''
-			},
-			// #endif
-
-
-			placeholder: {
-				type: [String, Number],
-				default: ''
-			},
-			type: {
-				type: String,
-				default: 'error'
-			},
-			mode: {
-				type: String,
-				default: 'base'
-			},
-			title: {
-				type: String,
-				default: ''
-			},
-			content: {
-				type: String,
-				default: ''
-			},
-			beforeClose: {
-				type: Boolean,
-				default: false
-			},
-			cancelText: {
-				type: String,
-				default: ''
-			},
-			confirmText: {
-				type: String,
-				default: ''
-			},
-			maxlength: {
-				type: Number,
-				default: -1,
-			},
-			focus: {
-				type: Boolean,
-				default: true,
-			}
-		},
-		data() {
-			return {
-				dialogType: 'error',
-				val: ""
-			}
-		},
-		computed: {
-			okText() {
-				return this.confirmText || t("uni-popup.ok")
-			},
-			closeText() {
-				return this.cancelText || t("uni-popup.cancel")
-			},
-			placeholderText() {
-				return this.placeholder || t("uni-popup.placeholder")
-			},
-			titleText() {
-				return this.title || t("uni-popup.title")
-			}
-		},
-		watch: {
-			type(val) {
-				this.dialogType = val
-			},
-			mode(val) {
-				if (val === 'input') {
-					this.dialogType = 'info'
-				}
-			},
-			value(val) {
-				if (this.maxlength != -1 && this.mode === 'input') {
-					this.val = val.slice(0, this.maxlength);
-				} else {
-					this.val = val
-				}
-			},
-			val(val) {
-				// #ifdef VUE2
-				// TODO 兼容 vue2
-				this.$emit('input', val);
-				// #endif
-				// #ifdef VUE3
-				// TODO 兼容 vue3
-				this.$emit('update:modelValue', val);
-				// #endif
-			}
-		},
-		created() {
-			// 对话框遮罩不可点击
-			this.popup.disableMask()
-			// this.popup.closeMask()
-			if (this.mode === 'input') {
-				this.dialogType = 'info'
-				this.val = this.value;
-				// #ifdef VUE3
-				this.val = this.modelValue;
-				// #endif
-			} else {
-				this.dialogType = this.type
-			}
-		},
-		methods: {
-			/**
-			 * 点击确认按钮
-			 */
-			onOk() {
-				if (this.mode === 'input') {
-					this.$emit('confirm', this.val)
-				} else {
-					this.$emit('confirm')
-				}
-				if (this.beforeClose) return
-				this.popup.close()
-			},
-			/**
-			 * 点击取消按钮
-			 */
-			closeDialog() {
-				this.$emit('close')
-				if (this.beforeClose) return
-				this.popup.close()
-			},
-			close() {
-				this.popup.close()
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.uni-popup-dialog {
-		width: 300px;
-		border-radius: 11px;
-		background-color: #fff;
-	}
-
-	.uni-dialog-title {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		justify-content: center;
-		padding-top: 25px;
-	}
-
-	.uni-dialog-title-text {
-		font-size: 16px;
-		font-weight: 500;
-	}
-
-	.uni-dialog-content {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
-		padding: 20px;
-	}
-
-	.uni-dialog-content-text {
-		font-size: 14px;
-		color: #6C6C6C;
-	}
-
-	.uni-dialog-button-group {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		border-top-color: #f5f5f5;
-		border-top-style: solid;
-		border-top-width: 1px;
-	}
-
-	.uni-dialog-button {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-
-		flex: 1;
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
-		height: 45px;
-	}
-
-	.uni-border-left {
-		border-left-color: #f0f0f0;
-		border-left-style: solid;
-		border-left-width: 1px;
-	}
-
-	.uni-dialog-button-text {
-		font-size: 16px;
-		color: #333;
-	}
-
-	.uni-button-color {
-		color: #007aff;
-	}
-
-	.uni-dialog-input {
-		flex: 1;
-		font-size: 14px;
-		border: 1px #eee solid;
-		height: 40px;
-		padding: 0 10px;
-		border-radius: 5px;
-		color: #555;
-	}
-
-	.uni-popup__success {
-		color: #4cd964;
-	}
-
-	.uni-popup__warn {
-		color: #f0ad4e;
-	}
-
-	.uni-popup__error {
-		color: #dd524d;
-	}
-
-	.uni-popup__info {
-		color: #909399;
-	}
-</style>

+ 0 - 143
uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue

@@ -1,143 +0,0 @@
-<template>
-	<view class="uni-popup-message">
-		<view class="uni-popup-message__box fixforpc-width" :class="'uni-popup__'+type">
-			<slot>
-				<text class="uni-popup-message-text" :class="'uni-popup__'+type+'-text'">{{message}}</text>
-			</slot>
-		</view>
-	</view>
-</template>
-
-<script>
-	import popup from '../uni-popup/popup.js'
-	/**
-	 * PopUp 弹出层-消息提示
-	 * @description 弹出层-消息提示
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=329
-	 * @property {String} type = [success|warning|info|error] 主题样式
-	 *  @value success 成功
-	 * 	@value warning 提示
-	 * 	@value info 消息
-	 * 	@value error 错误
-	 * @property {String} message 消息提示文字
-	 * @property {String} duration 显示时间,设置为 0 则不会自动关闭
-	 */
-
-	export default {
-		name: 'uniPopupMessage',
-		mixins:[popup],
-		props: {
-			/**
-			 * 主题 success/warning/info/error	  默认 success
-			 */
-			type: {
-				type: String,
-				default: 'success'
-			},
-			/**
-			 * 消息文字
-			 */
-			message: {
-				type: String,
-				default: ''
-			},
-			/**
-			 * 显示时间,设置为 0 则不会自动关闭
-			 */
-			duration: {
-				type: Number,
-				default: 3000
-			},
-			maskShow:{
-				type:Boolean,
-				default:false
-			}
-		},
-		data() {
-			return {}
-		},
-		created() {
-			this.popup.maskShow = this.maskShow
-			this.popup.messageChild = this
-		},
-		methods: {
-			timerClose(){
-				if(this.duration === 0) return
-				clearTimeout(this.timer) 
-				this.timer = setTimeout(()=>{
-					this.popup.close()
-				},this.duration)
-			}
-		}
-	}
-</script>
-<style lang="scss" >
-	.uni-popup-message {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		justify-content: center;
-	}
-
-	.uni-popup-message__box {
-		background-color: #e1f3d8;
-		padding: 10px 15px;
-		border-color: #eee;
-		border-style: solid;
-		border-width: 1px;
-		flex: 1;
-	}
-
-	@media screen and (min-width: 500px) {
-		.fixforpc-width {
-			margin-top: 20px;
-			border-radius: 4px;
-			flex: none;
-			min-width: 380px;
-			/* #ifndef APP-NVUE */
-			max-width: 50%;
-			/* #endif */
-			/* #ifdef APP-NVUE */
-			max-width: 500px;
-			/* #endif */
-		}
-	}
-
-	.uni-popup-message-text {
-		font-size: 14px;
-		padding: 0;
-	}
-
-	.uni-popup__success {
-		background-color: #e1f3d8;
-	}
-
-	.uni-popup__success-text {
-		color: #67C23A;
-	}
-
-	.uni-popup__warn {
-		background-color: #faecd8;
-	}
-
-	.uni-popup__warn-text {
-		color: #E6A23C;
-	}
-
-	.uni-popup__error {
-		background-color: #fde2e2;
-	}
-
-	.uni-popup__error-text {
-		color: #F56C6C;
-	}
-
-	.uni-popup__info {
-		background-color: #F2F6FC;
-	}
-
-	.uni-popup__info-text {
-		color: #909399;
-	}
-</style>

+ 0 - 187
uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue

@@ -1,187 +0,0 @@
-<template>
-	<view class="uni-popup-share">
-		<view class="uni-share-title"><text class="uni-share-title-text">{{shareTitleText}}</text></view>
-		<view class="uni-share-content">
-			<view class="uni-share-content-box">
-				<view class="uni-share-content-item" v-for="(item,index) in bottomData" :key="index" @click.stop="select(item,index)">
-					<image class="uni-share-image" :src="item.icon" mode="aspectFill"></image>
-					<text class="uni-share-text">{{item.text}}</text>
-				</view>
-
-			</view>
-		</view>
-		<view class="uni-share-button-box">
-			<button class="uni-share-button" @click="close">{{cancelText}}</button>
-		</view>
-	</view>
-</template>
-
-<script>
-	import popup from '../uni-popup/popup.js'
-	import {
-	initVueI18n
-	} from '@dcloudio/uni-i18n'
-	import messages from '../uni-popup/i18n/index.js'
-	const {	t	} = initVueI18n(messages)
-	export default {
-		name: 'UniPopupShare',
-		mixins:[popup],
-		emits:['select'],
-		props: {
-			title: {
-				type: String,
-				default: ''
-			},
-			beforeClose: {
-				type: Boolean,
-				default: false
-			}
-		},
-		data() {
-			return {
-				bottomData: [{
-						text: '微信',
-						icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/c2b17470-50be-11eb-b680-7980c8a877b8.png',
-						name: 'wx'
-					},
-					{
-						text: '支付宝',
-						icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/d684ae40-50be-11eb-8ff1-d5dcf8779628.png',
-						name: 'ali'
-					},
-					{
-						text: 'QQ',
-						icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/e7a79520-50be-11eb-b997-9918a5dda011.png',
-						name: 'qq'
-					},
-					{
-						text: '新浪',
-						icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/0dacdbe0-50bf-11eb-8ff1-d5dcf8779628.png',
-						name: 'sina'
-					},
-					// {
-					// 	text: '百度',
-					// 	icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/1ec6e920-50bf-11eb-8a36-ebb87efcf8c0.png',
-					// 	name: 'copy'
-					// },
-					// {
-					// 	text: '其他',
-					// 	icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/2e0fdfe0-50bf-11eb-b997-9918a5dda011.png',
-					// 	name: 'more'
-					// }
-				]
-			}
-		},
-		created() {},
-		computed: {
-			cancelText() {
-				return t("uni-popup.cancel")
-			},
-		shareTitleText() {
-				return this.title || t("uni-popup.shareTitle")
-			}
-		},
-		methods: {
-			/**
-			 * 选择内容
-			 */
-			select(item, index) {
-				this.$emit('select', {
-					item,
-					index
-				})
-				this.close()
-
-			},
-			/**
-			 * 关闭窗口
-			 */
-			close() {
-				if(this.beforeClose) return
-				this.popup.close()
-			}
-		}
-	}
-</script>
-<style lang="scss" >
-	.uni-popup-share {
-		background-color: #fff;
-		border-top-left-radius: 11px;
-		border-top-right-radius: 11px;
-	}
-	.uni-share-title {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		align-items: center;
-		justify-content: center;
-		height: 40px;
-	}
-	.uni-share-title-text {
-		font-size: 14px;
-		color: #666;
-	}
-	.uni-share-content {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		justify-content: center;
-		padding-top: 10px;
-	}
-
-	.uni-share-content-box {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		flex-wrap: wrap;
-		width: 360px;
-	}
-
-	.uni-share-content-item {
-		width: 90px;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		justify-content: center;
-		padding: 10px 0;
-		align-items: center;
-	}
-
-	.uni-share-content-item:active {
-		background-color: #f5f5f5;
-	}
-
-	.uni-share-image {
-		width: 30px;
-		height: 30px;
-	}
-
-	.uni-share-text {
-		margin-top: 10px;
-		font-size: 14px;
-		color: #3B4144;
-	}
-
-	.uni-share-button-box {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		padding: 10px 15px;
-	}
-
-	.uni-share-button {
-		flex: 1;
-		border-radius: 50px;
-		color: #666;
-		font-size: 16px;
-	}
-
-	.uni-share-button::after {
-		border-radius: 50px;
-	}
-</style>

+ 0 - 7
uni_modules/uni-popup/components/uni-popup/i18n/en.json

@@ -1,7 +0,0 @@
-{
-	"uni-popup.cancel": "cancel",
-	"uni-popup.ok": "ok",
-	"uni-popup.placeholder": "pleace enter",
-	"uni-popup.title": "Hint",
-	"uni-popup.shareTitle": "Share to"
-}

+ 0 - 8
uni_modules/uni-popup/components/uni-popup/i18n/index.js

@@ -1,8 +0,0 @@
-import en from './en.json'
-import zhHans from './zh-Hans.json'
-import zhHant from './zh-Hant.json'
-export default {
-	en,
-	'zh-Hans': zhHans,
-	'zh-Hant': zhHant
-}

+ 0 - 7
uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json

@@ -1,7 +0,0 @@
-{
-	"uni-popup.cancel": "取消",
-	"uni-popup.ok": "确定",
-	"uni-popup.placeholder": "请输入",
-		"uni-popup.title": "提示",
-		"uni-popup.shareTitle": "分享到"
-}

+ 0 - 7
uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json

@@ -1,7 +0,0 @@
-{
-	"uni-popup.cancel": "取消",
-	"uni-popup.ok": "確定",
-	"uni-popup.placeholder": "請輸入",
-	"uni-popup.title": "提示",
-	"uni-popup.shareTitle": "分享到"
-}

+ 0 - 45
uni_modules/uni-popup/components/uni-popup/keypress.js

@@ -1,45 +0,0 @@
-// #ifdef H5
-export default {
-  name: 'Keypress',
-  props: {
-    disable: {
-      type: Boolean,
-      default: false
-    }
-  },
-  mounted () {
-    const keyNames = {
-      esc: ['Esc', 'Escape'],
-      tab: 'Tab',
-      enter: 'Enter',
-      space: [' ', 'Spacebar'],
-      up: ['Up', 'ArrowUp'],
-      left: ['Left', 'ArrowLeft'],
-      right: ['Right', 'ArrowRight'],
-      down: ['Down', 'ArrowDown'],
-      delete: ['Backspace', 'Delete', 'Del']
-    }
-    const listener = ($event) => {
-      if (this.disable) {
-        return
-      }
-      const keyName = Object.keys(keyNames).find(key => {
-        const keyName = $event.key
-        const value = keyNames[key]
-        return value === keyName || (Array.isArray(value) && value.includes(keyName))
-      })
-      if (keyName) {
-        // 避免和其他按键事件冲突
-        setTimeout(() => {
-          this.$emit(keyName, {})
-        }, 0)
-      }
-    }
-    document.addEventListener('keyup', listener)
-    // this.$once('hook:beforeDestroy', () => {
-    //   document.removeEventListener('keyup', listener)
-    // })
-  },
-	render: () => {}
-}
-// #endif

+ 0 - 26
uni_modules/uni-popup/components/uni-popup/popup.js

@@ -1,26 +0,0 @@
-
-export default {
-	data() {
-		return {
-			
-		}
-	},
-	created(){
-		this.popup = this.getParent()
-	},
-	methods:{
-		/**
-		 * 获取父元素实例
-		 */
-		getParent(name = 'uniPopup') {
-			let parent = this.$parent;
-			let parentName = parent.$options.name;
-			while (parentName !== name) {
-				parent = parent.$parent;
-				if (!parent) return false
-				parentName = parent.$options.name;
-			}
-			return parent;
-		},
-	}
-}

+ 0 - 90
uni_modules/uni-popup/components/uni-popup/uni-popup.uvue

@@ -1,90 +0,0 @@
-<template>
-  <view class="popup-root" v-if="isOpen" v-show="isShow" @click="clickMask">
-    <view @click.stop>
-      <slot></slot>
-    </view>
-  </view>
-</template>
-
-<script>
-  type CloseCallBack = ()=> void;
-  let closeCallBack:CloseCallBack = () :void => {};
-  export default {
-    emits:["close","clickMask"],
-    data() {
-      return {
-        isShow:false,
-        isOpen:false
-      }
-    },
-    props: {
-      maskClick: {
-        type: Boolean,
-        default: true
-      },
-    },
-    watch: {
-      // 设置show = true 时,如果没有 open 需要设置为 open
-      isShow:{
-        handler(isShow) {
-          // console.log("isShow",isShow)
-          if(isShow && this.isOpen == false){
-            this.isOpen = true
-          }
-        },
-        immediate:true
-      },
-      // 设置isOpen = true 时,如果没有 isShow 需要设置为 isShow
-      isOpen:{
-        handler(isOpen) {
-          // console.log("isOpen",isOpen)
-          if(isOpen && this.isShow == false){
-            this.isShow = true
-          }
-        },
-        immediate:true
-      }
-    },
-    methods:{
-      open(){
-        // ...funs : CloseCallBack[]
-        // if(funs.length > 0){
-        //   closeCallBack = funs[0]
-        // }
-        this.isOpen = true;
-      },
-      clickMask(){
-        if(this.maskClick == true){
-          this.$emit('clickMask')
-          this.close()
-        }
-      },
-      close(): void{
-        this.isOpen = false;
-        this.$emit('close')
-        closeCallBack()
-      },
-      hiden(){
-        this.isShow = false
-      },
-      show(){
-        this.isShow = true
-      }
-    }
-  }
-</script>
-
-<style>
-.popup-root {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 750rpx;
-  height: 100%;
-  flex: 1;
-  background-color: rgba(0, 0, 0, 0.3);
-  justify-content: center;
-  align-items: center;
-  z-index: 99;
-}
-</style>

+ 0 - 518
uni_modules/uni-popup/components/uni-popup/uni-popup.vue

@@ -1,518 +0,0 @@
-<template>
-	<view v-if="showPopup" class="uni-popup" :class="[popupstyle, isDesktop ? 'fixforpc-z-index' : '']">
-		<view @touchstart="touchstart">
-			<uni-transition key="1" v-if="maskShow" name="mask" mode-class="fade" :styles="maskClass"
-				:duration="duration" :show="showTrans" @click="onTap" />
-			<uni-transition key="2" :mode-class="ani" name="content" :styles="transClass" :duration="duration"
-				:show="showTrans" @click="onTap">
-				<view class="uni-popup__wrapper" :style="getStyles" :class="[popupstyle]" @click="clear">
-					<slot />
-				</view>
-			</uni-transition>
-		</view>
-		<!-- #ifdef H5 -->
-		<keypress v-if="maskShow" @esc="onTap" />
-		<!-- #endif -->
-	</view>
-</template>
-
-<script>
-	// #ifdef H5
-	import keypress from './keypress.js'
-	// #endif
-
-	/**
-	 * PopUp 弹出层
-	 * @description 弹出层组件,为了解决遮罩弹层的问题
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=329
-	 * @property {String} type = [top|center|bottom|left|right|message|dialog|share] 弹出方式
-	 * 	@value top 顶部弹出
-	 * 	@value center 中间弹出
-	 * 	@value bottom 底部弹出
-	 * 	@value left		左侧弹出
-	 * 	@value right  右侧弹出
-	 * 	@value message 消息提示
-	 * 	@value dialog 对话框
-	 * 	@value share 底部分享示例
-	 * @property {Boolean} animation = [true|false] 是否开启动画
-	 * @property {Boolean} maskClick = [true|false] 蒙版点击是否关闭弹窗(废弃)
-	 * @property {Boolean} isMaskClick = [true|false] 蒙版点击是否关闭弹窗
-	 * @property {String}  backgroundColor 主窗口背景色
-	 * @property {String}  maskBackgroundColor 蒙版颜色
-	 * @property {String}  borderRadius 设置圆角(左上、右上、右下和左下) 示例:"10px 10px 10px 10px"
-	 * @property {Boolean} safeArea		   是否适配底部安全区
-	 * @event {Function} change 打开关闭弹窗触发,e={show: false}
-	 * @event {Function} maskClick 点击遮罩触发
-	 */
-
-	export default {
-		name: 'uniPopup',
-		components: {
-			// #ifdef H5
-			keypress
-			// #endif
-		},
-		emits: ['change', 'maskClick'],
-		props: {
-			// 开启动画
-			animation: {
-				type: Boolean,
-				default: true
-			},
-			// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
-			// message: 消息提示 ; dialog : 对话框
-			type: {
-				type: String,
-				default: 'center'
-			},
-			// maskClick
-			isMaskClick: {
-				type: Boolean,
-				default: null
-			},
-			// TODO 2 个版本后废弃属性 ,使用 isMaskClick
-			maskClick: {
-				type: Boolean,
-				default: null
-			},
-			backgroundColor: {
-				type: String,
-				default: 'none'
-			},
-			safeArea: {
-				type: Boolean,
-				default: true
-			},
-			maskBackgroundColor: {
-				type: String,
-				default: 'rgba(0, 0, 0, 0.4)'
-			},
-			borderRadius:{
-				type: String,
-			}
-		},
-
-		watch: {
-			/**
-			 * 监听type类型
-			 */
-			type: {
-				handler: function(type) {
-					if (!this.config[type]) return
-					this[this.config[type]](true)
-				},
-				immediate: true
-			},
-			isDesktop: {
-				handler: function(newVal) {
-					if (!this.config[newVal]) return
-					this[this.config[this.type]](true)
-				},
-				immediate: true
-			},
-			/**
-			 * 监听遮罩是否可点击
-			 * @param {Object} val
-			 */
-			maskClick: {
-				handler: function(val) {
-					this.mkclick = val
-				},
-				immediate: true
-			},
-			isMaskClick: {
-				handler: function(val) {
-					this.mkclick = val
-				},
-				immediate: true
-			},
-			// H5 下禁止底部滚动
-			showPopup(show) {
-				// #ifdef H5
-				// fix by mehaotian 处理 h5 滚动穿透的问题
-				document.getElementsByTagName('body')[0].style.overflow = show ? 'hidden' : 'visible'
-				// #endif
-			}
-		},
-		data() {
-			return {
-				duration: 300,
-				ani: [],
-				showPopup: false,
-				showTrans: false,
-				popupWidth: 0,
-				popupHeight: 0,
-				config: {
-					top: 'top',
-					bottom: 'bottom',
-					center: 'center',
-					left: 'left',
-					right: 'right',
-					message: 'top',
-					dialog: 'center',
-					share: 'bottom'
-				},
-				maskClass: {
-					position: 'fixed',
-					bottom: 0,
-					top: 0,
-					left: 0,
-					right: 0,
-					backgroundColor: 'rgba(0, 0, 0, 0.4)'
-				},
-				transClass: {
-					backgroundColor: 'transparent',
-					borderRadius: this.borderRadius || "0",
-					position: 'fixed',
-					left: 0,
-					right: 0
-				},
-				maskShow: true,
-				mkclick: true,
-				popupstyle: 'top'
-			}
-		},
-		computed: {
-			getStyles() {
-				let res = { backgroundColor: this.bg };
-				if (this.borderRadius || "0") {
-					res = Object.assign(res, { borderRadius: this.borderRadius })
-				}
-				return res;
-			},
-			isDesktop() {
-				return this.popupWidth >= 500 && this.popupHeight >= 500
-			},
-			bg() {
-				if (this.backgroundColor === '' || this.backgroundColor === 'none') {
-					return 'transparent'
-				}
-				return this.backgroundColor
-			}
-		},
-		mounted() {
-			const fixSize = () => {
-				// #ifdef MP-WEIXIN
-				const {
-					windowWidth,
-					windowHeight,
-					windowTop,
-					safeArea,
-					screenHeight,
-					safeAreaInsets
-				} = uni.getWindowInfo()
-				// #endif
-				// #ifndef MP-WEIXIN
-				const {
-					windowWidth,
-					windowHeight,
-					windowTop,
-					safeArea,
-					screenHeight,
-					safeAreaInsets
-				} = uni.getSystemInfoSync()
-				// #endif
-				this.popupWidth = windowWidth
-				this.popupHeight = windowHeight + (windowTop || 0)
-				// TODO fix by mehaotian 是否适配底部安全区 ,目前微信ios 、和 app ios 计算有差异,需要框架修复
-				if (safeArea && this.safeArea) {
-					// #ifdef MP-WEIXIN
-					this.safeAreaInsets = screenHeight - safeArea.bottom
-					// #endif
-					// #ifndef MP-WEIXIN
-					this.safeAreaInsets = safeAreaInsets.bottom
-					// #endif
-				} else {
-					this.safeAreaInsets = 0
-				}
-			}
-			fixSize()
-			// #ifdef H5
-			// window.addEventListener('resize', fixSize)
-			// this.$once('hook:beforeDestroy', () => {
-			// 	window.removeEventListener('resize', fixSize)
-			// })
-			// #endif
-		},
-		// #ifndef VUE3
-		// TODO vue2
-		destroyed() {
-			this.setH5Visible()
-		},
-		// #endif
-		// #ifdef VUE3
-		// TODO vue3
-		unmounted() {
-			this.setH5Visible()
-		},
-		// #endif
-		activated() {
-   	  this.setH5Visible(!this.showPopup);
-    },
-    deactivated() {
-      this.setH5Visible(true);
-    },
-		created() {
-			// this.mkclick =  this.isMaskClick || this.maskClick
-			if (this.isMaskClick === null && this.maskClick === null) {
-				this.mkclick = true
-			} else {
-				this.mkclick = this.isMaskClick !== null ? this.isMaskClick : this.maskClick
-			}
-			if (this.animation) {
-				this.duration = 300
-			} else {
-				this.duration = 0
-			}
-			// TODO 处理 message 组件生命周期异常的问题
-			this.messageChild = null
-			// TODO 解决头条冒泡的问题
-			this.clearPropagation = false
-			this.maskClass.backgroundColor = this.maskBackgroundColor
-		},
-		methods: {
-			setH5Visible(visible = true) {
-				// #ifdef H5
-				// fix by mehaotian 处理 h5 滚动穿透的问题
-				document.getElementsByTagName('body')[0].style.overflow =  visible ? "visible" : "hidden";
-				// #endif
-			},
-			/**
-			 * 公用方法,不显示遮罩层
-			 */
-			closeMask() {
-				this.maskShow = false
-			},
-			/**
-			 * 公用方法,遮罩层禁止点击
-			 */
-			disableMask() {
-				this.mkclick = false
-			},
-			// TODO nvue 取消冒泡
-			clear(e) {
-				// #ifndef APP-NVUE
-				e.stopPropagation()
-				// #endif
-				this.clearPropagation = true
-			},
-
-			open(direction) {
-				// fix by mehaotian 处理快速打开关闭的情况
-				if (this.showPopup) {
-					return
-				}
-				let innerType = ['top', 'center', 'bottom', 'left', 'right', 'message', 'dialog', 'share']
-				if (!(direction && innerType.indexOf(direction) !== -1)) {
-					direction = this.type
-				}
-				if (!this.config[direction]) {
-					console.error('缺少类型:', direction)
-					return
-				}
-				this[this.config[direction]]()
-				this.$emit('change', {
-					show: true,
-					type: direction
-				})
-			},
-			close(type) {
-				this.showTrans = false
-				this.$emit('change', {
-					show: false,
-					type: this.type
-				})
-				clearTimeout(this.timer)
-				// // 自定义关闭事件
-				// this.customOpen && this.customClose()
-				this.timer = setTimeout(() => {
-					this.showPopup = false
-				}, 300)
-			},
-			// TODO 处理冒泡事件,头条的冒泡事件有问题 ,先这样兼容
-			touchstart() {
-				this.clearPropagation = false
-			},
-
-			onTap() {
-				if (this.clearPropagation) {
-					// fix by mehaotian 兼容 nvue
-					this.clearPropagation = false
-					return
-				}
-				this.$emit('maskClick')
-				if (!this.mkclick) return
-				this.close()
-			},
-			/**
-			 * 顶部弹出样式处理
-			 */
-			top(type) {
-				this.popupstyle = this.isDesktop ? 'fixforpc-top' : 'top'
-				this.ani = ['slide-top']
-				this.transClass = {
-					position: 'fixed',
-					left: 0,
-					right: 0,
-					backgroundColor: this.bg,
-					borderRadius:this.borderRadius || "0"
-				}
-				// TODO 兼容 type 属性 ,后续会废弃
-				if (type) return
-				this.showPopup = true
-				this.showTrans = true
-				this.$nextTick(() => {
-					this.showPoptrans()
-					if (this.messageChild && this.type === 'message') {
-						this.messageChild.timerClose()
-					}
-				})
-			},
-			/**
-			 * 底部弹出样式处理
-			 */
-			bottom(type) {
-				this.popupstyle = 'bottom'
-				this.ani = ['slide-bottom']
-				this.transClass = {
-					position: 'fixed',
-					left: 0,
-					right: 0,
-					bottom: 0,
-					paddingBottom: this.safeAreaInsets + 'px',
-					backgroundColor: this.bg,
-					borderRadius:this.borderRadius || "0",
-				}
-				// TODO 兼容 type 属性 ,后续会废弃
-				if (type) return
-				this.showPoptrans()
-			},
-			/**
-			 * 中间弹出样式处理
-			 */
-			center(type) {
-				this.popupstyle = 'center'
-				//微信小程序下,组合动画会出现文字向上闪动问题,再此做特殊处理
-				// #ifdef MP-WEIXIN
-					this.ani = ['fade']
-				// #endif
-				// #ifndef MP-WEIXIN
-					this.ani = ['zoom-out', 'fade']
-				// #endif
-				this.transClass = {
-					position: 'fixed',
-					/* #ifndef APP-NVUE */
-					display: 'flex',
-					flexDirection: 'column',
-					/* #endif */
-					bottom: 0,
-					left: 0,
-					right: 0,
-					top: 0,
-					justifyContent: 'center',
-					alignItems: 'center',
-					borderRadius:this.borderRadius || "0"
-				}
-				// TODO 兼容 type 属性 ,后续会废弃
-				if (type) return
-				this.showPoptrans()
-			},
-			left(type) {
-				this.popupstyle = 'left'
-				this.ani = ['slide-left']
-				this.transClass = {
-					position: 'fixed',
-					left: 0,
-					bottom: 0,
-					top: 0,
-					backgroundColor: this.bg,
-					borderRadius:this.borderRadius || "0",
-					/* #ifndef APP-NVUE */
-					display: 'flex',
-					flexDirection: 'column'
-					/* #endif */
-				}
-				// TODO 兼容 type 属性 ,后续会废弃
-				if (type) return
-				this.showPoptrans()
-			},
-			right(type) {
-				this.popupstyle = 'right'
-				this.ani = ['slide-right']
-				this.transClass = {
-					position: 'fixed',
-					bottom: 0,
-					right: 0,
-					top: 0,
-					backgroundColor: this.bg,
-					borderRadius:this.borderRadius || "0",
-					/* #ifndef APP-NVUE */
-					display: 'flex',
-					flexDirection: 'column'
-					/* #endif */
-				}
-				// TODO 兼容 type 属性 ,后续会废弃
-				if (type) return
-				this.showPoptrans()
-			},
-			showPoptrans(){
-				this.$nextTick(()=>{
-					this.showPopup = true
-					this.showTrans = true
-				})
-			}
-		}
-	}
-</script>
-<style lang="scss">
-	.uni-popup {
-		position: fixed;
-		/* #ifndef APP-NVUE */
-		z-index: 99;
-
-		/* #endif */
-		&.top,
-		&.left,
-		&.right {
-			/* #ifdef H5 */
-			top: var(--window-top);
-			/* #endif */
-			/* #ifndef H5 */
-			top: 0;
-			/* #endif */
-		}
-
-		.uni-popup__wrapper {
-			/* #ifndef APP-NVUE */
-			display: block;
-			/* #endif */
-			position: relative;
-
-			/* iphonex 等安全区设置,底部安全区适配 */
-			/* #ifndef APP-NVUE */
-			// padding-bottom: constant(safe-area-inset-bottom);
-			// padding-bottom: env(safe-area-inset-bottom);
-			/* #endif */
-			&.left,
-			&.right {
-				/* #ifdef H5 */
-				padding-top: var(--window-top);
-				/* #endif */
-				/* #ifndef H5 */
-				padding-top: 0;
-				/* #endif */
-				flex: 1;
-			}
-		}
-	}
-
-	.fixforpc-z-index {
-		/* #ifndef APP-NVUE */
-		z-index: 999;
-		/* #endif */
-	}
-
-	.fixforpc-top {
-		top: 0;
-	}
-</style>

+ 0 - 88
uni_modules/uni-popup/package.json

@@ -1,88 +0,0 @@
-{
-	"id": "uni-popup",
-	"displayName": "uni-popup 弹出层",
-	"version": "1.9.5",
-	"description": " Popup 组件,提供常用的弹层",
-	"keywords": [
-        "uni-ui",
-        "弹出层",
-        "弹窗",
-        "popup",
-        "弹框"
-    ],
-	"repository": "https://github.com/dcloudio/uni-ui",
-	"engines": {
-		"HBuilderX": ""
-	},
-	"directories": {
-		"example": "../../temps/example_temps"
-	},
-    "dcloudext": {
-        "sale": {
-			"regular": {
-				"price": "0.00"
-			},
-			"sourcecode": {
-				"price": "0.00"
-			}
-		},
-		"contact": {
-			"qq": ""
-		},
-		"declaration": {
-			"ads": "无",
-			"data": "无",
-			"permissions": "无"
-		},
-        "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
-        "type": "component-vue"
-	},
-	"uni_modules": {
-		"dependencies": [
-			"uni-scss",
-			"uni-transition"
-		],
-		"encrypt": [],
-		"platforms": {
-			"cloud": {
-				"tcb": "y",
-                "aliyun": "y",
-                "alipay": "n"
-			},
-			"client": {
-				"App": {
-					"app-vue": "y",
-					"app-nvue": "y"
-				},
-				"H5-mobile": {
-					"Safari": "y",
-					"Android Browser": "y",
-					"微信浏览器(Android)": "y",
-					"QQ浏览器(Android)": "y"
-				},
-				"H5-pc": {
-					"Chrome": "y",
-					"IE": "y",
-					"Edge": "y",
-					"Firefox": "y",
-					"Safari": "y"
-				},
-				"小程序": {
-					"微信": "y",
-					"阿里": "y",
-					"百度": "y",
-					"字节跳动": "y",
-					"QQ": "y"
-				},
-				"快应用": {
-					"华为": "u",
-					"联盟": "u"
-                },
-                "Vue": {
-                    "vue2": "y",
-                    "vue3": "y"
-                }
-			}
-		}
-	}
-}

+ 0 - 17
uni_modules/uni-popup/readme.md

@@ -1,17 +0,0 @@
-
-
-## Popup 弹出层
-> **组件名:uni-popup**
-> 代码块: `uPopup`
-> 关联组件:`uni-transition`
-
-
-弹出层组件,在应用中弹出一个消息提示窗口、提示框等
-
-### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup)
-#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
-
-
-
-
-

+ 0 - 8
uni_modules/uni-scss/changelog.md

@@ -1,8 +0,0 @@
-## 1.0.3(2022-01-21)
-- 优化 组件示例
-## 1.0.2(2021-11-22)
-- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题
-## 1.0.1(2021-11-22)
-- 修复 vue3中scss语法兼容问题
-## 1.0.0(2021-11-18)
-- init

+ 0 - 1
uni_modules/uni-scss/index.scss

@@ -1 +0,0 @@
-@import './styles/index.scss';

+ 0 - 82
uni_modules/uni-scss/package.json

@@ -1,82 +0,0 @@
-{
-  "id": "uni-scss",
-  "displayName": "uni-scss 辅助样式",
-  "version": "1.0.3",
-  "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。",
-  "keywords": [
-    "uni-scss",
-    "uni-ui",
-    "辅助样式"
-],
-  "repository": "https://github.com/dcloudio/uni-ui",
-  "engines": {
-    "HBuilderX": "^3.1.0"
-  },
-  "dcloudext": {
-    "category": [
-        "JS SDK",
-        "通用 SDK"
-    ],
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "无",
-      "permissions": "无"
-    },
-    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
-  },
-  "uni_modules": {
-    "dependencies": [],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
-      },
-      "client": {
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "u"
-        },
-        "H5-mobile": {
-          "Safari": "y",
-          "Android Browser": "y",
-          "微信浏览器(Android)": "y",
-          "QQ浏览器(Android)": "y"
-        },
-        "H5-pc": {
-          "Chrome": "y",
-          "IE": "y",
-          "Edge": "y",
-          "Firefox": "y",
-          "Safari": "y"
-        },
-        "小程序": {
-          "微信": "y",
-          "阿里": "y",
-          "百度": "y",
-          "字节跳动": "y",
-          "QQ": "y"
-        },
-        "快应用": {
-          "华为": "n",
-          "联盟": "n"
-        },
-        "Vue": {
-            "vue2": "y",
-            "vue3": "y"
-        }
-      }
-    }
-  }
-}

+ 0 - 4
uni_modules/uni-scss/readme.md

@@ -1,4 +0,0 @@
-`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。
-
-### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass)
-#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 0 - 7
uni_modules/uni-scss/styles/index.scss

@@ -1,7 +0,0 @@
-@import './setting/_variables.scss';
-@import './setting/_border.scss';
-@import './setting/_color.scss';
-@import './setting/_space.scss';
-@import './setting/_radius.scss';
-@import './setting/_text.scss';
-@import './setting/_styles.scss';

+ 0 - 3
uni_modules/uni-scss/styles/setting/_border.scss

@@ -1,3 +0,0 @@
-.uni-border {
-	border: 1px $uni-border-1 solid;
-}

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно