From 8a4843bf467caf38f4f27e84200e31bbc15b41dc Mon Sep 17 00:00:00 2001 From: cjd Date: Tue, 4 Nov 2025 21:09:11 +0800 Subject: [PATCH] inti --- .dockerignore | 21 + .gitignore | 35 +- .vscode/extensions.json | 3 + Dockerfile | 7 + README.md | 109 +- env.d.ts | 1 + index.html | 13 + package-lock.json | 7336 +++++++++++++++++ package.json | 36 + public/favicon.ico | Bin 0 -> 4286 bytes src/App.vue | 13 + src/api/blogApi.ts | 72 + src/api/departmentApi.ts | 96 + src/api/loginApi.ts | 78 + src/api/moduleApi.ts | 79 + src/api/permissionApi.ts | 150 + src/api/quartzJobApi.ts | 88 + src/api/roleApi.ts | 73 + src/api/userApi.ts | 80 + src/assets/base.css | 86 + src/assets/iconfont/iconfont.scss | 56 + src/assets/iconfont/iconfont.ttf | Bin 0 -> 5088 bytes src/assets/images/avatar copy.gif | Bin 0 -> 6334 bytes src/assets/images/avatar.gif | Bin 0 -> 6334 bytes src/assets/images/login_bg.svg | 33 + src/assets/images/login_left.png | Bin 0 -> 35966 bytes src/assets/images/logo.svg | 1 + src/assets/images/msg01.png | Bin 0 -> 6527 bytes src/assets/images/notData.png | Bin 0 -> 1168 bytes src/assets/images/welcome.png | Bin 0 -> 75638 bytes src/assets/logo.svg | 1 + src/assets/main.css | 35 + src/components/HelloWorld.vue | 18 + src/components/TheWelcome.vue | 88 + src/components/WelcomeItem.vue | 13 + src/components/icons/IconCommunity.vue | 7 + src/components/icons/IconDocumentation.vue | 7 + src/components/icons/IconEcosystem.vue | 7 + src/components/icons/IconSupport.vue | 7 + src/components/icons/IconTooling.vue | 19 + src/components/toolbar.vue | 34 + src/layouts/LayoutTransverse/index.scss | 70 + src/layouts/LayoutTransverse/index.vue | 62 + src/layouts/LayoutVertical/index.scss | 56 + src/layouts/LayoutVertical/index.vue | 51 + src/layouts/components/Footer/index.vue | 20 + src/layouts/components/Header/ToolBarLeft.vue | 23 + .../components/Header/ToolBarRight.vue | 46 + .../components/Header/components/Avatar.vue | 87 + .../Header/components/Breadcrumb.vue | 105 + .../Header/components/CollapseIcon.vue | 21 + .../Header/components/InfoDialog.vue | 22 + .../components/Header/components/Message.vue | 88 + .../Header/components/PasswordDialog.vue | 22 + .../Header/components/ThemeSetting.vue | 12 + src/layouts/components/Main/index.vue | 83 + src/layouts/components/Menu/SubMenu.vue | 116 + .../components/Tabs/components/MoreButton.vue | 100 + src/layouts/components/Tabs/index.scss | 82 + src/layouts/components/Tabs/index.vue | 97 + src/layouts/components/ThemeDrawer/index.scss | 166 + src/layouts/components/ThemeDrawer/index.vue | 98 + src/layouts/index.vue | 28 + src/main.ts | 31 + src/router/index.ts | 90 + src/router/modules/dynamicRouter.ts | 57 + src/stores/auth.ts | 17 + src/stores/config/piniaPersist.ts | 19 + src/stores/counter.ts | 23 + src/stores/index.ts | 8 + src/stores/interface/index.ts | 56 + src/stores/modules/authMenu.ts | 39 + src/stores/modules/global.ts | 50 + src/stores/modules/keepAlive.ts | 23 + src/stores/modules/tabs.ts | 70 + src/stores/userInfo.ts | 19 + src/styles/element.scss | 284 + src/typings/global.d.ts | 66 + src/utils/axiosInstance.ts | 112 + src/utils/index.ts | 117 + src/utils/mittBus.ts | 5 + src/utils/mittBusT.ts | 11 + src/views/AboutView.vue | 25 + src/views/Blog/Blogs.vue | 155 + src/views/Blog/Detail.vue | 5 + src/views/Blog/blogsFunctions.ts | 108 + src/views/Department/Department.vue | 211 + src/views/Department/departmentFunctions.ts | 217 + src/views/Form/Charts.vue | 5 + src/views/Form/Form.vue | 5 + src/views/HomeView.vue | 22 + src/views/Login.vue | 124 + src/views/Permission/Assign.vue | 242 + src/views/Permission/Module.vue | 198 + src/views/Permission/Permission.vue | 415 + src/views/Permission/moduleFunctions.ts | 202 + src/views/Permission/permissionFunctions.ts | 274 + .../Recursion/Menu_1/Menu_1_1/Menu_1_1_1.vue | 13 + .../Recursion/Menu_1/Menu_1_1/Menu_1_1_2.vue | 13 + src/views/Recursion/Menu_1/Menu_1_2.vue | 13 + src/views/System/BasicSetting.vue | 5 + src/views/System/My.vue | 116 + src/views/Task/QuartzJob.vue | 454 + src/views/Task/quartzJobFunctions.ts | 231 + src/views/Tibug/Bugs.vue | 5 + src/views/User/Roles.vue | 247 + src/views/User/Users.vue | 260 + src/views/User/rolesFunctions.ts | 245 + src/views/User/usersFunctions.ts | 252 + src/views/home/index.vue | 23 + src/views/login/components/LoginForm.vue | 121 + src/views/login/index.scss | 94 + src/views/login/index.vue | 24 + tsconfig.app.json | 14 + tsconfig.json | 11 + tsconfig.node.json | 19 + vite.config.ts | 28 + 117 files changed, 15641 insertions(+), 9 deletions(-) create mode 100644 .dockerignore create mode 100644 .vscode/extensions.json create mode 100644 Dockerfile create mode 100644 env.d.ts create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/favicon.ico create mode 100644 src/App.vue create mode 100644 src/api/blogApi.ts create mode 100644 src/api/departmentApi.ts create mode 100644 src/api/loginApi.ts create mode 100644 src/api/moduleApi.ts create mode 100644 src/api/permissionApi.ts create mode 100644 src/api/quartzJobApi.ts create mode 100644 src/api/roleApi.ts create mode 100644 src/api/userApi.ts create mode 100644 src/assets/base.css create mode 100644 src/assets/iconfont/iconfont.scss create mode 100644 src/assets/iconfont/iconfont.ttf create mode 100644 src/assets/images/avatar copy.gif create mode 100644 src/assets/images/avatar.gif create mode 100644 src/assets/images/login_bg.svg create mode 100644 src/assets/images/login_left.png create mode 100644 src/assets/images/logo.svg create mode 100644 src/assets/images/msg01.png create mode 100644 src/assets/images/notData.png create mode 100644 src/assets/images/welcome.png create mode 100644 src/assets/logo.svg create mode 100644 src/assets/main.css create mode 100644 src/components/HelloWorld.vue create mode 100644 src/components/TheWelcome.vue create mode 100644 src/components/WelcomeItem.vue create mode 100644 src/components/icons/IconCommunity.vue create mode 100644 src/components/icons/IconDocumentation.vue create mode 100644 src/components/icons/IconEcosystem.vue create mode 100644 src/components/icons/IconSupport.vue create mode 100644 src/components/icons/IconTooling.vue create mode 100644 src/components/toolbar.vue create mode 100644 src/layouts/LayoutTransverse/index.scss create mode 100644 src/layouts/LayoutTransverse/index.vue create mode 100644 src/layouts/LayoutVertical/index.scss create mode 100644 src/layouts/LayoutVertical/index.vue create mode 100644 src/layouts/components/Footer/index.vue create mode 100644 src/layouts/components/Header/ToolBarLeft.vue create mode 100644 src/layouts/components/Header/ToolBarRight.vue create mode 100644 src/layouts/components/Header/components/Avatar.vue create mode 100644 src/layouts/components/Header/components/Breadcrumb.vue create mode 100644 src/layouts/components/Header/components/CollapseIcon.vue create mode 100644 src/layouts/components/Header/components/InfoDialog.vue create mode 100644 src/layouts/components/Header/components/Message.vue create mode 100644 src/layouts/components/Header/components/PasswordDialog.vue create mode 100644 src/layouts/components/Header/components/ThemeSetting.vue create mode 100644 src/layouts/components/Main/index.vue create mode 100644 src/layouts/components/Menu/SubMenu.vue create mode 100644 src/layouts/components/Tabs/components/MoreButton.vue create mode 100644 src/layouts/components/Tabs/index.scss create mode 100644 src/layouts/components/Tabs/index.vue create mode 100644 src/layouts/components/ThemeDrawer/index.scss create mode 100644 src/layouts/components/ThemeDrawer/index.vue create mode 100644 src/layouts/index.vue create mode 100644 src/main.ts create mode 100644 src/router/index.ts create mode 100644 src/router/modules/dynamicRouter.ts create mode 100644 src/stores/auth.ts create mode 100644 src/stores/config/piniaPersist.ts create mode 100644 src/stores/counter.ts create mode 100644 src/stores/index.ts create mode 100644 src/stores/interface/index.ts create mode 100644 src/stores/modules/authMenu.ts create mode 100644 src/stores/modules/global.ts create mode 100644 src/stores/modules/keepAlive.ts create mode 100644 src/stores/modules/tabs.ts create mode 100644 src/stores/userInfo.ts create mode 100644 src/styles/element.scss create mode 100644 src/typings/global.d.ts create mode 100644 src/utils/axiosInstance.ts create mode 100644 src/utils/index.ts create mode 100644 src/utils/mittBus.ts create mode 100644 src/utils/mittBusT.ts create mode 100644 src/views/AboutView.vue create mode 100644 src/views/Blog/Blogs.vue create mode 100644 src/views/Blog/Detail.vue create mode 100644 src/views/Blog/blogsFunctions.ts create mode 100644 src/views/Department/Department.vue create mode 100644 src/views/Department/departmentFunctions.ts create mode 100644 src/views/Form/Charts.vue create mode 100644 src/views/Form/Form.vue create mode 100644 src/views/HomeView.vue create mode 100644 src/views/Login.vue create mode 100644 src/views/Permission/Assign.vue create mode 100644 src/views/Permission/Module.vue create mode 100644 src/views/Permission/Permission.vue create mode 100644 src/views/Permission/moduleFunctions.ts create mode 100644 src/views/Permission/permissionFunctions.ts create mode 100644 src/views/Recursion/Menu_1/Menu_1_1/Menu_1_1_1.vue create mode 100644 src/views/Recursion/Menu_1/Menu_1_1/Menu_1_1_2.vue create mode 100644 src/views/Recursion/Menu_1/Menu_1_2.vue create mode 100644 src/views/System/BasicSetting.vue create mode 100644 src/views/System/My.vue create mode 100644 src/views/Task/QuartzJob.vue create mode 100644 src/views/Task/quartzJobFunctions.ts create mode 100644 src/views/Tibug/Bugs.vue create mode 100644 src/views/User/Roles.vue create mode 100644 src/views/User/Users.vue create mode 100644 src/views/User/rolesFunctions.ts create mode 100644 src/views/User/usersFunctions.ts create mode 100644 src/views/home/index.vue create mode 100644 src/views/login/components/LoginForm.vue create mode 100644 src/views/login/index.scss create mode 100644 src/views/login/index.vue create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..db5a893 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,21 @@ +.DS_Store +node_modules + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* +.doc/contents/.vuepress/dist/* diff --git a/.gitignore b/.gitignore index a19f004..8ee54e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,30 @@ -# ---> Vue -# gitignore template for Vue.js projects -# -# Recommended template: Node.gitignore +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* -# TODO: where does this rule come from? -docs/_book +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local -# TODO: where does this rule come from? -test/ +/cypress/videos/ +/cypress/screenshots/ +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6d074db --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM nginx +MAINTAINER vueadmin3 +ADD dist /usr/share/nginx/html +ADD vueadmin3.nginx.conf /etc/nginx/nginx.conf +RUN chown nginx:nginx -R /usr/share/nginx/html +EXPOSE 80 +RUN echo 'build admin image successful!!' diff --git a/README.md b/README.md index 1df124c..31ff916 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,109 @@ -# Admin + + + + + 注意node >= v18.13.0+ + C:\Users\laozh>npm -v + 8.19.3 + C:\Users\laozh>node -v + v18.13.0 + + + + +一个基于 Vue.js 的后台管理系统项目,基于vue2版本的Blog.Admin,进行升级vue3,后端代码是BlogCore,拥有丰富功能的RBAC按钮级别的权限管理后台系统。 + + +这里仅仅是vue项目,api接口工程,请查看 [Blog.Core](https://github.com/anjoy8/Blog.Core) + + + + +## 给个星星! ⭐️ +如果你喜欢这个项目或者它帮助你, 请给 Star~ + +********************************************************* +### 项目下载后,首先安装依赖包 +``` +npm install +``` + +### 安装成功后,运行即可 +``` +npm run dev +``` +然后你就可以直接访问 http://localhost:5173 + + +## Tips: + + + +``` +默认代理的是BlogCore的9291后端接口,(如果后端配置了 CORS 跨域,这里就不用配置了): + + server: { + proxy: { + '/api': { + target: 'http://localhost:9291', // 请替换为你的后端服务器地址 + changeOrigin: true, // 是否改变源 + // rewrite: (path) => path.replace(/^\/api/, ''), // 重写路径 + }, + } + } + +``` + +### 如果要部署,先执行bulid +``` +npm run build +``` + + + + +## 加入我们 +目前群聊先对贡献者开放,提交代码PR后,加我QQ:3143422472 + + + +***************************************************** +### 视频教程 + +https://www.bilibili.com/video/BV1zVSzY3EkE/?spm_id_from=333.1387.homepage.video_card.click + +### 文字教程 + + + +
+

目录

+ + +https://mp.weixin.qq.com/s/S8VxZ2DUz28sE65iE0r6zQ + +《第一课:项目初始化与核心知识点说明》 +《第二课:基于泛型基类封装Axios请求》 +《第三课:封装Axios拦截器》 +《第四课:登录页设计》 +《第五课:获取用户信息》 +《第六课:获取动态菜单接口》 +《第七课:基于布局模式实现动态菜单渲染》 +《第八课:丰富面包屑组件》 +《第九课:实现tabs标签栏》 +《第十课:个人中心模块》 +《第十一课:基于总线实现框架多种布局样式》 +《第十二课:渲染动态权限按钮》 + + + + +
+****************************** + + + + + + diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/index.html b/index.html new file mode 100644 index 0000000..a888544 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..f80ad9c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7336 @@ +{ + "name": "bcvp.vue3", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "bcvp.vue3", + "version": "0.0.0", + "dependencies": { + "@element-plus/icons-vue": "^2.1.0", + "axios": "^1.7.7", + "element-plus": "^2.3.4", + "mitt": "^3.0.1", + "pinia": "^2.1.7", + "pinia-plugin-persistedstate": "^4.0.2", + "vue": "^3.4.29", + "vue-router": "^4.3.3" + }, + "devDependencies": { + "@tsconfig/node20": "^20.1.4", + "@types/node": "^20.14.5", + "@vitejs/plugin-vue": "^5.0.5", + "@vitejs/plugin-vue-jsx": "^4.0.0", + "@vue/tsconfig": "^0.5.1", + "npm-run-all2": "^6.2.0", + "sass-embedded": "^1.78.0", + "typescript": "~5.4.0", + "vite": "^5.3.1", + "vite-plugin-vue-devtools": "^7.3.1", + "vue-tsc": "^2.0.21" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "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.4", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.4", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz", + "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-decorators": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz", + "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", + "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", + "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.25.2", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", + "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/standalone": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/standalone/-/standalone-7.25.6.tgz", + "integrity": "sha512-Kf2ZcZVqsKbtYhlA7sP0z5A3q5hmCVYMKMWRWNK/5OVwHIve3JY1djVRmIVAx8FMueLIfZGKQDIILK2w8zO4mg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", + "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", + "dev": true + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.7", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.7.tgz", + "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", + "dependencies": { + "@floating-ui/utils": "^0.2.7" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.10", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.10.tgz", + "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.7" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.7.tgz", + "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "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==", + "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==", + "engines": { + "node": ">=6.0.0" + } + }, + "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==" + }, + "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==", + "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==", + "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==", + "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==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxt/kit": { + "version": "3.13.2", + "resolved": "https://registry.npmmirror.com/@nuxt/kit/-/kit-3.13.2.tgz", + "integrity": "sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==", + "dependencies": { + "@nuxt/schema": "3.13.2", + "c12": "^1.11.2", + "consola": "^3.2.3", + "defu": "^6.1.4", + "destr": "^2.0.3", + "globby": "^14.0.2", + "hash-sum": "^2.0.0", + "ignore": "^5.3.2", + "jiti": "^1.21.6", + "klona": "^2.0.6", + "knitwork": "^1.1.0", + "mlly": "^1.7.1", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "scule": "^1.3.0", + "semver": "^7.6.3", + "ufo": "^1.5.4", + "unctx": "^2.3.1", + "unimport": "^3.12.0", + "untyped": "^1.4.2" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/kit/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nuxt/schema": { + "version": "3.13.2", + "resolved": "https://registry.npmmirror.com/@nuxt/schema/-/schema-3.13.2.tgz", + "integrity": "sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==", + "dependencies": { + "compatx": "^0.1.8", + "consola": "^3.2.3", + "defu": "^6.1.4", + "hookable": "^5.5.3", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "scule": "^1.3.0", + "std-env": "^3.7.0", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3", + "unimport": "^3.12.0", + "untyped": "^1.4.2" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.25", + "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.25.tgz", + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", + "dev": true + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.2.tgz", + "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "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.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", + "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", + "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", + "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", + "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", + "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", + "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", + "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", + "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", + "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", + "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", + "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", + "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", + "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", + "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", + "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", + "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tsconfig/node20": { + "version": "20.1.4", + "resolved": "https://registry.npmmirror.com/@tsconfig/node20/-/node20-20.1.4.tgz", + "integrity": "sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/lodash": { + "version": "4.17.7", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.7.tgz", + "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/node": { + "version": "20.16.5", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.16.5.tgz", + "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.1.3.tgz", + "integrity": "sha512-3xbWsKEKXYlmX82aOHufFQVnkbMC/v8fLpWwh6hWOUrK5fbbtBh9Q/WWse27BFgSy2/e2c0fz5Scgya9h2GLhw==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.0.1.tgz", + "integrity": "sha512-7mg9HFGnFHMEwCdB6AY83cVK4A6sCqnrjFYF4WIlebYAQVVJ/sC/CiTruVdrRlhrFoeZ8rlMxY9wYpPTIRhhAg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.24.7", + "@vue/babel-plugin-jsx": "^1.2.2" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.4", + "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.4.tgz", + "integrity": "sha512-kO9k4kTLfxpg+6lq7/KAIv3m2d62IHuCL6GbVgYZTpfKvIGoAIlDxK7pFcB/eczN2+ydg/vnyaeZ6SGyZrJw2w==", + "dev": true, + "dependencies": { + "@volar/source-map": "2.4.4" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.4", + "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.4.tgz", + "integrity": "sha512-xG3PZqOP2haG8XG4Pg3PD1UGDAdqZg24Ru8c/qYjYAnmcj6GBR64mstx+bZux5QOyRaJK+/lNM/RnpvBD3489g==", + "dev": true + }, + "node_modules/@volar/typescript": { + "version": "2.4.4", + "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.4.tgz", + "integrity": "sha512-QQMQRVj0fVHJ3XdRKiS1LclhG0VBXdFYlyuHRQF/xLk2PuJuHNWP26MDZNvEVCvnyUQuUQhIAfylwY5TGPgc6w==", + "dev": true, + "dependencies": { + "@volar/language-core": "2.4.4", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.4.tgz", + "integrity": "sha512-3L9zXWRN2jvmLjtSyw9vtcO5KTSCfKhCD5rEZM+024bc+4dKSzTjIABl/5b+uZ5nXe5y31uUMxxLo1PdXkYaig==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.4.tgz", + "integrity": "sha512-jwAVtHUaDfOGGT1EmVKBi0anXOtPvsuKbImcdnHXluaJQ6GEJzshf1JMTtMRx2fPiG7BZjNmyMv+NdZY2OyZEA==", + "dev": true, + "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.4", + "@vue/babel-plugin-resolve-type": "1.2.4", + "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.4", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.4.tgz", + "integrity": "sha512-jWcJAmfKvc/xT2XBC4JAmy2eezNjU3CLfeDecl2Ge3tSjJCTmKJWkEhHdzXyx9Nr6PbIcQrFKhCaEDobhSrPqw==", + "dev": true, + "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/compiler-core": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.3.tgz", + "integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.3", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz", + "integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==", + "dependencies": { + "@vue/compiler-core": "3.5.3", + "@vue/shared": "3.5.3" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz", + "integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.3", + "@vue/compiler-dom": "3.5.3", + "@vue/compiler-ssr": "3.5.3", + "@vue/shared": "3.5.3", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.44", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz", + "integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==", + "dependencies": { + "@vue/compiler-dom": "3.5.3", + "@vue/shared": "3.5.3" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.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==" + }, + "node_modules/@vue/devtools-core": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-7.4.4.tgz", + "integrity": "sha512-DLxgA3DfeADkRzhAfm3G2Rw/cWxub64SdP5b+s5dwL30+whOGj+QNhmyFpwZ8ZTrHDFRIPj0RqNzJ8IRR1pz7w==", + "dev": true, + "dependencies": { + "@vue/devtools-kit": "^7.4.4", + "@vue/devtools-shared": "^7.4.4", + "mitt": "^3.0.1", + "nanoid": "^3.3.4", + "pathe": "^1.1.2", + "vite-hot-client": "^0.2.3" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.4.4.tgz", + "integrity": "sha512-awK/4NfsUG0nQ7qnTM37m7ZkEUMREyPh8taFCX+uQYps/MTFEum0AD05VeGDRMXwWvMmGIcWX9xp8ZiBddY0jw==", + "dev": true, + "dependencies": { + "@vue/devtools-shared": "^7.4.4", + "birpc": "^0.2.17", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.4.4.tgz", + "integrity": "sha512-yeJULXFHOKIm8yL2JFO050a9ztTVqOCKTqN9JHFxGTJN0b+gjtfn6zC+FfyHUgjwCwf6E3hfKrlohtthcqoYqw==", + "dev": true, + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/language-core": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-2.1.6.tgz", + "integrity": "sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==", + "dev": true, + "dependencies": { + "@volar/language-core": "~2.4.1", + "@vue/compiler-dom": "^3.4.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.4.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.3.tgz", + "integrity": "sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==", + "dependencies": { + "@vue/shared": "3.5.3" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.3.tgz", + "integrity": "sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==", + "dependencies": { + "@vue/reactivity": "3.5.3", + "@vue/shared": "3.5.3" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.3.tgz", + "integrity": "sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==", + "dependencies": { + "@vue/reactivity": "3.5.3", + "@vue/runtime-core": "3.5.3", + "@vue/shared": "3.5.3", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.3.tgz", + "integrity": "sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==", + "dependencies": { + "@vue/compiler-ssr": "3.5.3", + "@vue/shared": "3.5.3" + }, + "peerDependencies": { + "vue": "3.5.3" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.3.tgz", + "integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==" + }, + "node_modules/@vue/tsconfig": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/@vue/tsconfig/-/tsconfig-0.5.1.tgz", + "integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==", + "dev": true + }, + "node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "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/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/birpc": { + "version": "0.2.17", + "resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.17.tgz", + "integrity": "sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "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==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "dev": true + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c12": { + "version": "1.11.2", + "resolved": "https://registry.npmmirror.com/c12/-/c12-1.11.2.tgz", + "integrity": "sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew==", + "dependencies": { + "chokidar": "^3.6.0", + "confbox": "^0.1.7", + "defu": "^6.1.4", + "dotenv": "^16.4.5", + "giget": "^1.2.3", + "jiti": "^1.21.6", + "mlly": "^1.7.1", + "ohash": "^1.1.3", + "pathe": "^1.1.2", + "perfect-debounce": "^1.0.0", + "pkg-types": "^1.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.4" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001659", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001659.tgz", + "integrity": "sha512-Qxxyfv3RdHAfJcXelgf0hU4DFUVXBGTjqrBUZLUh8AtlGnsDo+CnncYtTd95+ZKfnANUOzxyIQCuU/UeBZBYoA==", + "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" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compatx": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/compatx/-/compatx-0.1.8.tgz", + "integrity": "sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==" + }, + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, + "node_modules/confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==" + }, + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "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==" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-pick-omit": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/deep-pick-omit/-/deep-pick-omit-1.2.0.tgz", + "integrity": "sha512-2CGvfTM2c+IP/MhdRZMpaHhTc6zIlgz3tQXJ/VGAkc7mjMrjqSU28qiI63yEcy+fcYfd/K+NNJcGRzap4M4bqw==" + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/destr": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==" + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.18", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz", + "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==" + }, + "node_modules/element-plus": { + "version": "2.8.3", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.8.3.tgz", + "integrity": "sha512-BXQOyDf0s7JHyNEV8iaO+iaOzTZPsBXVKMzMI967vLCodUBDLrtiY5vglAn1YEebQcUOEUMhGcttTpIvEkcBjQ==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.3", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "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==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "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==" + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "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==", + "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==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "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, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.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==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/giget": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/giget/-/giget-1.2.3.tgz", + "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.2.3", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.3", + "nypm": "^0.3.8", + "ohash": "^1.1.3", + "pathe": "^1.1.2", + "tar": "^6.2.0" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmmirror.com/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "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==" + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + }, + "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, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmmirror.com/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "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==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/knitwork": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/knitwork/-/knitwork-1.1.0.tgz", + "integrity": "sha512-oHnmiBUVHz1V+URE77PNot2lv3QiYU2zQf1JjOVkMt3YDKGbu8NAFr+c4mcNOhdsGrB/VpVbRwPwhiXrPhxQbw==" + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, + "node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "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==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "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==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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==", + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mlly": { + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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==" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.4", + "resolved": "https://registry.npmmirror.com/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-all2": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/npm-run-all2/-/npm-run-all2-6.2.2.tgz", + "integrity": "sha512-Q+alQAGIW7ZhKcxLt8GcSi3h3ryheD6xnmXahkMRVM5LYmajcUrSITm8h+OPC9RYWMV2GR0Q1ntTUCfxaNoOJw==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.3", + "memorystream": "^0.3.1", + "minimatch": "^9.0.0", + "pidtree": "^0.6.0", + "read-package-json-fast": "^3.0.2", + "shell-quote": "^1.7.3" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "npm-run-all2": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": "^14.18.0 || ^16.13.0 || >=18.0.0", + "npm": ">= 8" + } + }, + "node_modules/npm-run-all2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nypm": { + "version": "0.3.12", + "resolved": "https://registry.npmmirror.com/nypm/-/nypm-0.3.12.tgz", + "integrity": "sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.2.3", + "execa": "^8.0.1", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "ufo": "^1.5.4" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, + "node_modules/ohash": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/ohash/-/ohash-1.1.4.tgz", + "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==" + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pinia": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.2.2.tgz", + "integrity": "sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia-plugin-persistedstate": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-4.0.2.tgz", + "integrity": "sha512-KSApXsnGTrWKnAeHgEpYqtzeO84y4NH7uVM0/KMog+/oR2Py8p25tKjHQUmkcNNluzc0rJjFzlv2i5ZTdLeTXA==", + "dependencies": { + "@nuxt/kit": "^3.13.2", + "deep-pick-omit": "^1.2.0", + "defu": "^6.1.4", + "destr": "^2.0.3" + }, + "peerDependencies": { + "@pinia/nuxt": ">=0.5.0", + "pinia": ">=2.0.0" + }, + "peerDependenciesMeta": { + "@pinia/nuxt": { + "optional": true + }, + "pinia": { + "optional": true + } + } + }, + "node_modules/pinia/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, + "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/pkg-types": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.2.0.tgz", + "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", + "dependencies": { + "confbox": "^0.1.7", + "mlly": "^1.7.1", + "pathe": "^1.1.2" + } + }, + "node_modules/postcss": { + "version": "8.4.45", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.45.tgz", + "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "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" + } + ] + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/rollup": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.21.2.tgz", + "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", + "devOptional": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.21.2", + "@rollup/rollup-android-arm64": "4.21.2", + "@rollup/rollup-darwin-arm64": "4.21.2", + "@rollup/rollup-darwin-x64": "4.21.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", + "@rollup/rollup-linux-arm-musleabihf": "4.21.2", + "@rollup/rollup-linux-arm64-gnu": "4.21.2", + "@rollup/rollup-linux-arm64-musl": "4.21.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", + "@rollup/rollup-linux-riscv64-gnu": "4.21.2", + "@rollup/rollup-linux-s390x-gnu": "4.21.2", + "@rollup/rollup-linux-x64-gnu": "4.21.2", + "@rollup/rollup-linux-x64-musl": "4.21.2", + "@rollup/rollup-win32-arm64-msvc": "4.21.2", + "@rollup/rollup-win32-ia32-msvc": "4.21.2", + "@rollup/rollup-win32-x64-msvc": "4.21.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sass-embedded": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded/-/sass-embedded-1.78.0.tgz", + "integrity": "sha512-NR2kvhWVFABmBm0AqgFw9OweQycs0Qs+/teJ9Su+BUY7up+f8S5F/Zi+7QtAqJlewsQyUNfzm1vRuM+20lBwRQ==", + "dev": true, + "dependencies": { + "@bufbuild/protobuf": "^1.0.0", + "buffer-builder": "^0.2.0", + "immutable": "^4.0.0", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-android-arm": "1.78.0", + "sass-embedded-android-arm64": "1.78.0", + "sass-embedded-android-ia32": "1.78.0", + "sass-embedded-android-riscv64": "1.78.0", + "sass-embedded-android-x64": "1.78.0", + "sass-embedded-darwin-arm64": "1.78.0", + "sass-embedded-darwin-x64": "1.78.0", + "sass-embedded-linux-arm": "1.78.0", + "sass-embedded-linux-arm64": "1.78.0", + "sass-embedded-linux-ia32": "1.78.0", + "sass-embedded-linux-musl-arm": "1.78.0", + "sass-embedded-linux-musl-arm64": "1.78.0", + "sass-embedded-linux-musl-ia32": "1.78.0", + "sass-embedded-linux-musl-riscv64": "1.78.0", + "sass-embedded-linux-musl-x64": "1.78.0", + "sass-embedded-linux-riscv64": "1.78.0", + "sass-embedded-linux-x64": "1.78.0", + "sass-embedded-win32-arm64": "1.78.0", + "sass-embedded-win32-ia32": "1.78.0", + "sass-embedded-win32-x64": "1.78.0" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-android-arm/-/sass-embedded-android-arm-1.78.0.tgz", + "integrity": "sha512-YM6nrmKsj+ImaSTd96F+jzbWSbhPkRN4kedbLgIJ5FsILNa9NAqhmrCQz9pdcjuAhyfxWImdUACsT23CPGENZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.78.0.tgz", + "integrity": "sha512-2sAr11EgwPudAuyk4Ite+fWGYJspiFSiZDU2D8/vjjI7BaB9FG6ksYqww3svoMMnjPUWBCjKPDELpZTxViLJbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-ia32": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.78.0.tgz", + "integrity": "sha512-TyJOo4TgnHpOfC/PfqCBqd+jGRanWoRd4Br/0KAfIvaIFjTGIPdk26vUyDVugV1J8QUEY4INGE8EXAuDeRldUQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.78.0.tgz", + "integrity": "sha512-wwajpsVRuhb7ixrkA3Yu60V2LtROYn45PIYeda30/MrMJi9k3xEqHLhodTexFm6wZoKclGSDZ6L9U5q0XyRKiQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-android-x64/-/sass-embedded-android-x64-1.78.0.tgz", + "integrity": "sha512-k5l66PO0LgSHMDbDzAQ/vqrXMlJ3r42ZHJA8MJvUbA6sQxTzDS381V7L+EhOATwyI225j2FhEeTHW6rr4WBQzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.78.0.tgz", + "integrity": "sha512-3JaxceFSR6N+a22hPYYkj1p45eBaWTt/M8MPTbfzU3TGZrU9bmRX7WlUVtXTo1yYI2iMf22nCv0PQ5ExFF3FMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.78.0.tgz", + "integrity": "sha512-UMTijqE3fJ8vEaaD7GPG7G3GsHuPKOdpS8vuA2v2uwO3BPFp/rEKah66atvGqvGO+0JYApkSv0YTnnexSrkHIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.78.0.tgz", + "integrity": "sha512-JafT+Co0RK8oO3g9TfVRuG7tkYeh35yDGTgqCFxLrktnkiw5pmIagCfpjxk5GBcSfJMOzhCgclTCDJWAuHGuMQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.78.0.tgz", + "integrity": "sha512-juMIMpp3DIAiQ842y+boqh0u2SjN4m3mDKrDfMuBznj8DSQoy9J/3e4hLh3g+p0/j83WuROu5nNoYxm2Xz8rww==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-ia32": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.78.0.tgz", + "integrity": "sha512-Gy8GW5g6WX9t8CT2Dto5AL6ikB+pG7aAXWXvfu3RFHktixSwSbyy6CeGqSk1t0xyJCFkQQA/V8HU9bNdeHiBxg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.78.0.tgz", + "integrity": "sha512-DUVXtcsfsiOJ2Zwp4Y3T6KZWX8h0gWpzmFUrx+gSIbg67vV8Ww2DWMjWRwqLe7HOLTYBegMBYpMgMgZiPtXhIA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.78.0.tgz", + "integrity": "sha512-Lu/TlRHbe9aJY7B7PwWCJz7pTT5Rc50VkApWEmPiU/nu0mGbSpg0Xwar6pNeG8+98ubgKKdRb01N3bvclf5a4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-ia32": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.78.0.tgz", + "integrity": "sha512-1E5ywUnq6MRPAecr2r/vDOBr93wXyculEmfyF5JRG8mUufMaxGIhfx64OQE6Drjs+EDURcYZ+Qcg6/ubJWqhcw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.78.0.tgz", + "integrity": "sha512-YvQEvX7ctn5BwC79+HBagDYIciEkwcl2NLgoydmEsBO/0+ncMKSGnjsn/iRzErbq1KJNyjGEni8eSHlrtQI1vQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.78.0.tgz", + "integrity": "sha512-azdUcZZvZmtUBslIKr2/l4aQrTX7BvO96TD0GLdWz9vuXZrokYm09AJZEnb5j6Pk5I4Xr0yM6BG1Vgcbzqi5Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.78.0.tgz", + "integrity": "sha512-g8M6vqHMjZUoH9C1WJsgwu+qmwdJAAMDaJTM1emeAScUZMTaQGzm+Q6C5oSGnAGR3XLT/drgbHhbmruXDgkdeQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.78.0.tgz", + "integrity": "sha512-m997ThzpMwql4u6LzZCoHPIQkgK6bbLPLc7ydemo2Wusqzh6j8XAGxVT5oANp6s2Dmj+yh49pKDozal+tzEX9w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.78.0.tgz", + "integrity": "sha512-qTLIIC5URYRmeuYYllfoL0K1cHSUd+f3sFHAA6fjtdgf288usd6ToCbWpuFb0BtVceEfGQX8lEp+teOG7n7Quw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-ia32": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.78.0.tgz", + "integrity": "sha512-BrOWh18T6Y9xgCokGXElEnd8j03fO4W83bwJ9wHRRkrQWaeHtHs3XWW0fX1j2brngWUTjU+jcYUijWF1Z60krw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.78.0.tgz", + "integrity": "sha512-C14iFDJd7oGhmQehRiEL7GtzMmLwubcDqsBarQ+u9LbHoDlUQfIPd7y8mVtNgtxJCdrAO/jc5qR4C+85yE3xPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sass-embedded/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "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==" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmmirror.com/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==" + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.0.tgz", + "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", + "dependencies": { + "js-tokens": "^9.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.0.tgz", + "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==" + }, + "node_modules/superjson": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.1.tgz", + "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==", + "dev": true, + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==" + }, + "node_modules/unctx": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/unctx/-/unctx-2.3.1.tgz", + "integrity": "sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A==", + "dependencies": { + "acorn": "^8.8.2", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.0", + "unplugin": "^1.3.1" + } + }, + "node_modules/unctx/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport": { + "version": "3.13.1", + "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.13.1.tgz", + "integrity": "sha512-nNrVzcs93yrZQOW77qnyOVHtb68LegvhYFwxFMfuuWScmwQmyVCG/NBuN8tYsaGzgQUVYv34E/af+Cc9u4og4A==", + "dependencies": { + "@rollup/pluginutils": "^5.1.2", + "acorn": "^8.12.1", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.11", + "mlly": "^1.7.1", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "scule": "^1.3.0", + "strip-literal": "^2.1.0", + "unplugin": "^1.14.1" + } + }, + "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==", + "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==", + "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==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unplugin": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.14.1.tgz", + "integrity": "sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==", + "dependencies": { + "acorn": "^8.12.1", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "webpack-sources": "^3" + }, + "peerDependenciesMeta": { + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/untyped": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/untyped/-/untyped-1.5.0.tgz", + "integrity": "sha512-o2Vjmn2dal08BzCcINxSmWuAteReUUiXseii5VRhmxyLF0b21K0iKZQ9fMYK7RWspVkY+0saqaVQNq4roe3Efg==", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/standalone": "^7.25.6", + "@babel/types": "^7.25.6", + "defu": "^6.1.4", + "jiti": "^2.0.0", + "mri": "^1.2.0", + "scule": "^1.3.0" + }, + "bin": { + "untyped": "dist/cli.mjs" + } + }, + "node_modules/untyped/node_modules/jiti": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/jiti/-/jiti-2.1.0.tgz", + "integrity": "sha512-Nftp80J8poC3u+93ZxpjstsgfQ5d0o5qyD6yStv32sgnWr74xRxBppEwsUoA/GIdrJpgGRkC1930YkLcAsFdSw==", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true + }, + "node_modules/vite": { + "version": "5.4.3", + "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.3.tgz", + "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-hot-client": { + "version": "0.2.3", + "resolved": "https://registry.npmmirror.com/vite-hot-client/-/vite-hot-client-0.2.3.tgz", + "integrity": "sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/vite-plugin-inspect": { + "version": "0.8.7", + "resolved": "https://registry.npmmirror.com/vite-plugin-inspect/-/vite-plugin-inspect-0.8.7.tgz", + "integrity": "sha512-/XXou3MVc13A5O9/2Nd6xczjrUwt7ZyI9h8pTnUMkr5SshLcb0PJUOVq2V+XVkdeU4njsqAtmK87THZuO2coGA==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.0", + "debug": "^4.3.6", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.0.1", + "sirv": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-devtools": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.4.4.tgz", + "integrity": "sha512-lJ7Vr6gznv1nf2S75XJTpXl4XcwnHfyvqJQ7szOvTUfumQALDGo772TEH69wx8gkY/ZWZQea4DZR5IQZMOZKUA==", + "dev": true, + "dependencies": { + "@vue/devtools-core": "^7.4.4", + "@vue/devtools-kit": "^7.4.4", + "@vue/devtools-shared": "^7.4.4", + "execa": "^8.0.1", + "sirv": "^2.0.4", + "vite-plugin-inspect": "^0.8.7", + "vite-plugin-vue-inspector": "^5.2.0" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0" + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.2.0.tgz", + "integrity": "sha512-wWxyb9XAtaIvV/Lr7cqB1HIzmHZFVUJsTNm3yAxkS87dgh/Ky4qr2wDEWNxF23fdhVa3jQ8MZREpr4XyiuaRqA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0" + } + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true + }, + "node_modules/vue": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.3.tgz", + "integrity": "sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==", + "dependencies": { + "@vue/compiler-dom": "3.5.3", + "@vue/compiler-sfc": "3.5.3", + "@vue/runtime-dom": "3.5.3", + "@vue/server-renderer": "3.5.3", + "@vue/shared": "3.5.3" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.4.3.tgz", + "integrity": "sha512-sv6wmNKx2j3aqJQDMxLFzs/u/mjA9Z5LCgy6BE0f7yFWMjrPLnS/sPNn8ARY/FXw6byV18EFutn5lTO6+UsV5A==", + "dependencies": { + "@vue/devtools-api": "^6.6.3" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-2.1.6.tgz", + "integrity": "sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==", + "dev": true, + "dependencies": { + "@volar/typescript": "~2.4.1", + "@vue/language-core": "2.1.6", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/vue-tsc/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true + }, + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==" + }, + "@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + } + }, + "@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "requires": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "requires": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.25.4", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.4", + "semver": "^6.3.1" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.24.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + } + }, + "@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "requires": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.25.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==" + }, + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" + }, + "@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==" + }, + "@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "requires": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" + } + }, + "@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "requires": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + }, + "@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "requires": { + "@babel/types": "^7.25.6" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz", + "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-decorators": "^7.24.7" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz", + "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", + "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.25.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", + "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.25.2", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", + "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.24.7" + } + }, + "@babel/standalone": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/standalone/-/standalone-7.25.6.tgz", + "integrity": "sha512-Kf2ZcZVqsKbtYhlA7sP0z5A3q5hmCVYMKMWRWNK/5OVwHIve3JY1djVRmIVAx8FMueLIfZGKQDIILK2w8zO4mg==" + }, + "@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + } + }, + "@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "requires": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + } + }, + "@bufbuild/protobuf": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", + "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", + "dev": true + }, + "@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==" + }, + "@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "requires": {} + }, + "@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "dev": true, + "optional": true + }, + "@floating-ui/core": { + "version": "1.6.7", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.7.tgz", + "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", + "requires": { + "@floating-ui/utils": "^0.2.7" + } + }, + "@floating-ui/dom": { + "version": "1.6.10", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.10.tgz", + "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", + "requires": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.7" + } + }, + "@floating-ui/utils": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.7.tgz", + "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==" + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@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==" + }, + "@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==" + }, + "@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==" + }, + "@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==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@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==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@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==" + }, + "@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==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nuxt/kit": { + "version": "3.13.2", + "resolved": "https://registry.npmmirror.com/@nuxt/kit/-/kit-3.13.2.tgz", + "integrity": "sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==", + "requires": { + "@nuxt/schema": "3.13.2", + "c12": "^1.11.2", + "consola": "^3.2.3", + "defu": "^6.1.4", + "destr": "^2.0.3", + "globby": "^14.0.2", + "hash-sum": "^2.0.0", + "ignore": "^5.3.2", + "jiti": "^1.21.6", + "klona": "^2.0.6", + "knitwork": "^1.1.0", + "mlly": "^1.7.1", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "scule": "^1.3.0", + "semver": "^7.6.3", + "ufo": "^1.5.4", + "unctx": "^2.3.1", + "unimport": "^3.12.0", + "untyped": "^1.4.2" + }, + "dependencies": { + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" + } + } + }, + "@nuxt/schema": { + "version": "3.13.2", + "resolved": "https://registry.npmmirror.com/@nuxt/schema/-/schema-3.13.2.tgz", + "integrity": "sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==", + "requires": { + "compatx": "^0.1.8", + "consola": "^3.2.3", + "defu": "^6.1.4", + "hookable": "^5.5.3", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "scule": "^1.3.0", + "std-env": "^3.7.0", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3", + "unimport": "^3.12.0", + "untyped": "^1.4.2" + } + }, + "@polka/url": { + "version": "1.0.0-next.25", + "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.25.tgz", + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", + "dev": true + }, + "@popperjs/core": { + "version": "npm:@sxzz/popperjs-es@2.11.7", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==" + }, + "@rollup/pluginutils": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.2.tgz", + "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==", + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", + "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", + "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", + "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", + "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", + "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", + "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", + "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", + "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", + "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", + "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", + "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", + "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", + "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", + "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", + "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", + "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", + "dev": true, + "optional": true + }, + "@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==" + }, + "@tsconfig/node20": { + "version": "20.1.4", + "resolved": "https://registry.npmmirror.com/@tsconfig/node20/-/node20-20.1.4.tgz", + "integrity": "sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==", + "dev": true + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "@types/lodash": { + "version": "4.17.7", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.7.tgz", + "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==" + }, + "@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "requires": { + "@types/lodash": "*" + } + }, + "@types/node": { + "version": "20.16.5", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.16.5.tgz", + "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", + "dev": true, + "requires": { + "undici-types": "~6.19.2" + } + }, + "@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "@vitejs/plugin-vue": { + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.1.3.tgz", + "integrity": "sha512-3xbWsKEKXYlmX82aOHufFQVnkbMC/v8fLpWwh6hWOUrK5fbbtBh9Q/WWse27BFgSy2/e2c0fz5Scgya9h2GLhw==", + "dev": true, + "requires": {} + }, + "@vitejs/plugin-vue-jsx": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.0.1.tgz", + "integrity": "sha512-7mg9HFGnFHMEwCdB6AY83cVK4A6sCqnrjFYF4WIlebYAQVVJ/sC/CiTruVdrRlhrFoeZ8rlMxY9wYpPTIRhhAg==", + "dev": true, + "requires": { + "@babel/core": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.24.7", + "@vue/babel-plugin-jsx": "^1.2.2" + } + }, + "@volar/language-core": { + "version": "2.4.4", + "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.4.tgz", + "integrity": "sha512-kO9k4kTLfxpg+6lq7/KAIv3m2d62IHuCL6GbVgYZTpfKvIGoAIlDxK7pFcB/eczN2+ydg/vnyaeZ6SGyZrJw2w==", + "dev": true, + "requires": { + "@volar/source-map": "2.4.4" + } + }, + "@volar/source-map": { + "version": "2.4.4", + "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.4.tgz", + "integrity": "sha512-xG3PZqOP2haG8XG4Pg3PD1UGDAdqZg24Ru8c/qYjYAnmcj6GBR64mstx+bZux5QOyRaJK+/lNM/RnpvBD3489g==", + "dev": true + }, + "@volar/typescript": { + "version": "2.4.4", + "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.4.tgz", + "integrity": "sha512-QQMQRVj0fVHJ3XdRKiS1LclhG0VBXdFYlyuHRQF/xLk2PuJuHNWP26MDZNvEVCvnyUQuUQhIAfylwY5TGPgc6w==", + "dev": true, + "requires": { + "@volar/language-core": "2.4.4", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "@vue/babel-helper-vue-transform-on": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.4.tgz", + "integrity": "sha512-3L9zXWRN2jvmLjtSyw9vtcO5KTSCfKhCD5rEZM+024bc+4dKSzTjIABl/5b+uZ5nXe5y31uUMxxLo1PdXkYaig==", + "dev": true + }, + "@vue/babel-plugin-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.4.tgz", + "integrity": "sha512-jwAVtHUaDfOGGT1EmVKBi0anXOtPvsuKbImcdnHXluaJQ6GEJzshf1JMTtMRx2fPiG7BZjNmyMv+NdZY2OyZEA==", + "dev": true, + "requires": { + "@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.4", + "@vue/babel-plugin-resolve-type": "1.2.4", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-plugin-resolve-type": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.4.tgz", + "integrity": "sha512-jWcJAmfKvc/xT2XBC4JAmy2eezNjU3CLfeDecl2Ge3tSjJCTmKJWkEhHdzXyx9Nr6PbIcQrFKhCaEDobhSrPqw==", + "dev": true, + "requires": { + "@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" + } + }, + "@vue/compiler-core": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.3.tgz", + "integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==", + "requires": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.3", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "@vue/compiler-dom": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz", + "integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==", + "requires": { + "@vue/compiler-core": "3.5.3", + "@vue/shared": "3.5.3" + } + }, + "@vue/compiler-sfc": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz", + "integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==", + "requires": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.3", + "@vue/compiler-dom": "3.5.3", + "@vue/compiler-ssr": "3.5.3", + "@vue/shared": "3.5.3", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.44", + "source-map-js": "^1.2.0" + } + }, + "@vue/compiler-ssr": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz", + "integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==", + "requires": { + "@vue/compiler-dom": "3.5.3", + "@vue/shared": "3.5.3" + } + }, + "@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "@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==" + }, + "@vue/devtools-core": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-7.4.4.tgz", + "integrity": "sha512-DLxgA3DfeADkRzhAfm3G2Rw/cWxub64SdP5b+s5dwL30+whOGj+QNhmyFpwZ8ZTrHDFRIPj0RqNzJ8IRR1pz7w==", + "dev": true, + "requires": { + "@vue/devtools-kit": "^7.4.4", + "@vue/devtools-shared": "^7.4.4", + "mitt": "^3.0.1", + "nanoid": "^3.3.4", + "pathe": "^1.1.2", + "vite-hot-client": "^0.2.3" + } + }, + "@vue/devtools-kit": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.4.4.tgz", + "integrity": "sha512-awK/4NfsUG0nQ7qnTM37m7ZkEUMREyPh8taFCX+uQYps/MTFEum0AD05VeGDRMXwWvMmGIcWX9xp8ZiBddY0jw==", + "dev": true, + "requires": { + "@vue/devtools-shared": "^7.4.4", + "birpc": "^0.2.17", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "@vue/devtools-shared": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.4.4.tgz", + "integrity": "sha512-yeJULXFHOKIm8yL2JFO050a9ztTVqOCKTqN9JHFxGTJN0b+gjtfn6zC+FfyHUgjwCwf6E3hfKrlohtthcqoYqw==", + "dev": true, + "requires": { + "rfdc": "^1.4.1" + } + }, + "@vue/language-core": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-2.1.6.tgz", + "integrity": "sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==", + "dev": true, + "requires": { + "@volar/language-core": "~2.4.1", + "@vue/compiler-dom": "^3.4.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.4.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + } + }, + "@vue/reactivity": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.3.tgz", + "integrity": "sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==", + "requires": { + "@vue/shared": "3.5.3" + } + }, + "@vue/runtime-core": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.3.tgz", + "integrity": "sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==", + "requires": { + "@vue/reactivity": "3.5.3", + "@vue/shared": "3.5.3" + } + }, + "@vue/runtime-dom": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.3.tgz", + "integrity": "sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==", + "requires": { + "@vue/reactivity": "3.5.3", + "@vue/runtime-core": "3.5.3", + "@vue/shared": "3.5.3", + "csstype": "^3.1.3" + } + }, + "@vue/server-renderer": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.3.tgz", + "integrity": "sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==", + "requires": { + "@vue/compiler-ssr": "3.5.3", + "@vue/shared": "3.5.3" + } + }, + "@vue/shared": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.3.tgz", + "integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==" + }, + "@vue/tsconfig": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/@vue/tsconfig/-/tsconfig-0.5.1.tgz", + "integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==", + "dev": true + }, + "@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "requires": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "dependencies": { + "vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "requires": {} + } + } + }, + "@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==" + }, + "@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "requires": { + "vue-demi": "*" + }, + "dependencies": { + "vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "requires": {} + } + } + }, + "acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "1.7.7", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "requires": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + }, + "birpc": { + "version": "0.2.17", + "resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.17.tgz", + "integrity": "sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "requires": { + "fill-range": "^7.1.1" + } + }, + "browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "requires": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + } + }, + "buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "dev": true + }, + "bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "requires": { + "run-applescript": "^7.0.0" + } + }, + "c12": { + "version": "1.11.2", + "resolved": "https://registry.npmmirror.com/c12/-/c12-1.11.2.tgz", + "integrity": "sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew==", + "requires": { + "chokidar": "^3.6.0", + "confbox": "^0.1.7", + "defu": "^6.1.4", + "dotenv": "^16.4.5", + "giget": "^1.2.3", + "jiti": "^1.21.6", + "mlly": "^1.7.1", + "ohash": "^1.1.3", + "pathe": "^1.1.2", + "perfect-debounce": "^1.0.0", + "pkg-types": "^1.2.0", + "rc9": "^2.1.2" + } + }, + "caniuse-lite": { + "version": "1.0.30001659", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001659.tgz", + "integrity": "sha512-Qxxyfv3RdHAfJcXelgf0hU4DFUVXBGTjqrBUZLUh8AtlGnsDo+CnncYtTd95+ZKfnANUOzxyIQCuU/UeBZBYoA==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "citty": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "requires": { + "consola": "^3.2.3" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "compatx": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/compatx/-/compatx-0.1.8.tgz", + "integrity": "sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==" + }, + "computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, + "confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==" + }, + "consola": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==" + }, + "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==" + }, + "copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "requires": { + "is-what": "^4.1.8" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "requires": { + "ms": "^2.1.3" + } + }, + "deep-pick-omit": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/deep-pick-omit/-/deep-pick-omit-1.2.0.tgz", + "integrity": "sha512-2CGvfTM2c+IP/MhdRZMpaHhTc6zIlgz3tQXJ/VGAkc7mjMrjqSU28qiI63yEcy+fcYfd/K+NNJcGRzap4M4bqw==" + }, + "default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "requires": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + } + }, + "default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true + }, + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true + }, + "defu": { + "version": "6.1.4", + "resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "destr": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==" + }, + "dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" + }, + "electron-to-chromium": { + "version": "1.5.18", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz", + "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==" + }, + "element-plus": { + "version": "2.8.3", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.8.3.tgz", + "integrity": "sha512-BXQOyDf0s7JHyNEV8iaO+iaOzTZPsBXVKMzMI967vLCodUBDLrtiY5vglAn1YEebQcUOEUMhGcttTpIvEkcBjQ==", + "requires": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.3", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "dev": true + }, + "esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" + }, + "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==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "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==" + }, + "execa": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + } + }, + "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==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "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==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, + "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==" + }, + "get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==" + }, + "giget": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/giget/-/giget-1.2.3.tgz", + "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==", + "requires": { + "citty": "^0.1.6", + "consola": "^3.2.3", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.3", + "nypm": "^0.3.8", + "ohash": "^1.1.3", + "pathe": "^1.1.2", + "tar": "^6.2.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "14.0.2", + "resolved": "https://registry.npmmirror.com/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "requires": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + } + }, + "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==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "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==" + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + }, + "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 + }, + "human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==" + }, + "ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" + }, + "immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true + }, + "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==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "requires": { + "is-docker": "^3.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + }, + "is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true + }, + "is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "requires": { + "is-inside-container": "^1.0.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmmirror.com/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "klona": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==" + }, + "knitwork": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/knitwork/-/knitwork-1.1.0.tgz", + "integrity": "sha512-oHnmiBUVHz1V+URE77PNot2lv3QiYU2zQf1JjOVkMt3YDKGbu8NAFr+c4mcNOhdsGrB/VpVbRwPwhiXrPhxQbw==" + }, + "kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, + "local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "requires": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "requires": {} + }, + "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==", + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "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==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "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==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "mlly": { + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", + "requires": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" + } + }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + }, + "mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + }, + "node-fetch-native": { + "version": "1.6.4", + "resolved": "https://registry.npmmirror.com/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==" + }, + "node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true + }, + "npm-run-all2": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/npm-run-all2/-/npm-run-all2-6.2.2.tgz", + "integrity": "sha512-Q+alQAGIW7ZhKcxLt8GcSi3h3ryheD6xnmXahkMRVM5LYmajcUrSITm8h+OPC9RYWMV2GR0Q1ntTUCfxaNoOJw==", + "dev": true, + "requires": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.3", + "memorystream": "^0.3.1", + "minimatch": "^9.0.0", + "pidtree": "^0.6.0", + "read-package-json-fast": "^3.0.2", + "shell-quote": "^1.7.3" + }, + "dependencies": { + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + } + } + }, + "npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + } + } + }, + "nypm": { + "version": "0.3.12", + "resolved": "https://registry.npmmirror.com/nypm/-/nypm-0.3.12.tgz", + "integrity": "sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==", + "requires": { + "citty": "^0.1.6", + "consola": "^3.2.3", + "execa": "^8.0.1", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "ufo": "^1.5.4" + } + }, + "ohash": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/ohash/-/ohash-1.1.4.tgz", + "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==" + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "open": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "requires": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + } + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==" + }, + "pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, + "perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + }, + "picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, + "pinia": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.2.2.tgz", + "integrity": "sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==", + "requires": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "dependencies": { + "vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "requires": {} + } + } + }, + "pinia-plugin-persistedstate": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-4.0.2.tgz", + "integrity": "sha512-KSApXsnGTrWKnAeHgEpYqtzeO84y4NH7uVM0/KMog+/oR2Py8p25tKjHQUmkcNNluzc0rJjFzlv2i5ZTdLeTXA==", + "requires": { + "@nuxt/kit": "^3.13.2", + "deep-pick-omit": "^1.2.0", + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "pkg-types": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.2.0.tgz", + "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", + "requires": { + "confbox": "^0.1.7", + "mlly": "^1.7.1", + "pathe": "^1.1.2" + } + }, + "postcss": { + "version": "8.4.45", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.45.tgz", + "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "requires": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "rollup": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.21.2.tgz", + "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", + "devOptional": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.21.2", + "@rollup/rollup-android-arm64": "4.21.2", + "@rollup/rollup-darwin-arm64": "4.21.2", + "@rollup/rollup-darwin-x64": "4.21.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", + "@rollup/rollup-linux-arm-musleabihf": "4.21.2", + "@rollup/rollup-linux-arm64-gnu": "4.21.2", + "@rollup/rollup-linux-arm64-musl": "4.21.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", + "@rollup/rollup-linux-riscv64-gnu": "4.21.2", + "@rollup/rollup-linux-s390x-gnu": "4.21.2", + "@rollup/rollup-linux-x64-gnu": "4.21.2", + "@rollup/rollup-linux-x64-musl": "4.21.2", + "@rollup/rollup-win32-arm64-msvc": "4.21.2", + "@rollup/rollup-win32-ia32-msvc": "4.21.2", + "@rollup/rollup-win32-x64-msvc": "4.21.2", + "@types/estree": "1.0.5", + "fsevents": "~2.3.2" + } + }, + "run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true + }, + "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==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "sass-embedded": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded/-/sass-embedded-1.78.0.tgz", + "integrity": "sha512-NR2kvhWVFABmBm0AqgFw9OweQycs0Qs+/teJ9Su+BUY7up+f8S5F/Zi+7QtAqJlewsQyUNfzm1vRuM+20lBwRQ==", + "dev": true, + "requires": { + "@bufbuild/protobuf": "^1.0.0", + "buffer-builder": "^0.2.0", + "immutable": "^4.0.0", + "rxjs": "^7.4.0", + "sass-embedded-android-arm": "1.78.0", + "sass-embedded-android-arm64": "1.78.0", + "sass-embedded-android-ia32": "1.78.0", + "sass-embedded-android-riscv64": "1.78.0", + "sass-embedded-android-x64": "1.78.0", + "sass-embedded-darwin-arm64": "1.78.0", + "sass-embedded-darwin-x64": "1.78.0", + "sass-embedded-linux-arm": "1.78.0", + "sass-embedded-linux-arm64": "1.78.0", + "sass-embedded-linux-ia32": "1.78.0", + "sass-embedded-linux-musl-arm": "1.78.0", + "sass-embedded-linux-musl-arm64": "1.78.0", + "sass-embedded-linux-musl-ia32": "1.78.0", + "sass-embedded-linux-musl-riscv64": "1.78.0", + "sass-embedded-linux-musl-x64": "1.78.0", + "sass-embedded-linux-riscv64": "1.78.0", + "sass-embedded-linux-x64": "1.78.0", + "sass-embedded-win32-arm64": "1.78.0", + "sass-embedded-win32-ia32": "1.78.0", + "sass-embedded-win32-x64": "1.78.0", + "supports-color": "^8.1.1", + "varint": "^6.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "sass-embedded-android-arm": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-android-arm/-/sass-embedded-android-arm-1.78.0.tgz", + "integrity": "sha512-YM6nrmKsj+ImaSTd96F+jzbWSbhPkRN4kedbLgIJ5FsILNa9NAqhmrCQz9pdcjuAhyfxWImdUACsT23CPGENZQ==", + "dev": true, + "optional": true + }, + "sass-embedded-android-arm64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.78.0.tgz", + "integrity": "sha512-2sAr11EgwPudAuyk4Ite+fWGYJspiFSiZDU2D8/vjjI7BaB9FG6ksYqww3svoMMnjPUWBCjKPDELpZTxViLJbw==", + "dev": true, + "optional": true + }, + "sass-embedded-android-ia32": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.78.0.tgz", + "integrity": "sha512-TyJOo4TgnHpOfC/PfqCBqd+jGRanWoRd4Br/0KAfIvaIFjTGIPdk26vUyDVugV1J8QUEY4INGE8EXAuDeRldUQ==", + "dev": true, + "optional": true + }, + "sass-embedded-android-riscv64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.78.0.tgz", + "integrity": "sha512-wwajpsVRuhb7ixrkA3Yu60V2LtROYn45PIYeda30/MrMJi9k3xEqHLhodTexFm6wZoKclGSDZ6L9U5q0XyRKiQ==", + "dev": true, + "optional": true + }, + "sass-embedded-android-x64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-android-x64/-/sass-embedded-android-x64-1.78.0.tgz", + "integrity": "sha512-k5l66PO0LgSHMDbDzAQ/vqrXMlJ3r42ZHJA8MJvUbA6sQxTzDS381V7L+EhOATwyI225j2FhEeTHW6rr4WBQzA==", + "dev": true, + "optional": true + }, + "sass-embedded-darwin-arm64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.78.0.tgz", + "integrity": "sha512-3JaxceFSR6N+a22hPYYkj1p45eBaWTt/M8MPTbfzU3TGZrU9bmRX7WlUVtXTo1yYI2iMf22nCv0PQ5ExFF3FMQ==", + "dev": true, + "optional": true + }, + "sass-embedded-darwin-x64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.78.0.tgz", + "integrity": "sha512-UMTijqE3fJ8vEaaD7GPG7G3GsHuPKOdpS8vuA2v2uwO3BPFp/rEKah66atvGqvGO+0JYApkSv0YTnnexSrkHIQ==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-arm": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.78.0.tgz", + "integrity": "sha512-JafT+Co0RK8oO3g9TfVRuG7tkYeh35yDGTgqCFxLrktnkiw5pmIagCfpjxk5GBcSfJMOzhCgclTCDJWAuHGuMQ==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-arm64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.78.0.tgz", + "integrity": "sha512-juMIMpp3DIAiQ842y+boqh0u2SjN4m3mDKrDfMuBznj8DSQoy9J/3e4hLh3g+p0/j83WuROu5nNoYxm2Xz8rww==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-ia32": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.78.0.tgz", + "integrity": "sha512-Gy8GW5g6WX9t8CT2Dto5AL6ikB+pG7aAXWXvfu3RFHktixSwSbyy6CeGqSk1t0xyJCFkQQA/V8HU9bNdeHiBxg==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-musl-arm": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.78.0.tgz", + "integrity": "sha512-DUVXtcsfsiOJ2Zwp4Y3T6KZWX8h0gWpzmFUrx+gSIbg67vV8Ww2DWMjWRwqLe7HOLTYBegMBYpMgMgZiPtXhIA==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-musl-arm64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.78.0.tgz", + "integrity": "sha512-Lu/TlRHbe9aJY7B7PwWCJz7pTT5Rc50VkApWEmPiU/nu0mGbSpg0Xwar6pNeG8+98ubgKKdRb01N3bvclf5a4A==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-musl-ia32": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.78.0.tgz", + "integrity": "sha512-1E5ywUnq6MRPAecr2r/vDOBr93wXyculEmfyF5JRG8mUufMaxGIhfx64OQE6Drjs+EDURcYZ+Qcg6/ubJWqhcw==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-musl-riscv64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.78.0.tgz", + "integrity": "sha512-YvQEvX7ctn5BwC79+HBagDYIciEkwcl2NLgoydmEsBO/0+ncMKSGnjsn/iRzErbq1KJNyjGEni8eSHlrtQI1vQ==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-musl-x64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.78.0.tgz", + "integrity": "sha512-azdUcZZvZmtUBslIKr2/l4aQrTX7BvO96TD0GLdWz9vuXZrokYm09AJZEnb5j6Pk5I4Xr0yM6BG1Vgcbzqi5Zg==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-riscv64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.78.0.tgz", + "integrity": "sha512-g8M6vqHMjZUoH9C1WJsgwu+qmwdJAAMDaJTM1emeAScUZMTaQGzm+Q6C5oSGnAGR3XLT/drgbHhbmruXDgkdeQ==", + "dev": true, + "optional": true + }, + "sass-embedded-linux-x64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.78.0.tgz", + "integrity": "sha512-m997ThzpMwql4u6LzZCoHPIQkgK6bbLPLc7ydemo2Wusqzh6j8XAGxVT5oANp6s2Dmj+yh49pKDozal+tzEX9w==", + "dev": true, + "optional": true + }, + "sass-embedded-win32-arm64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.78.0.tgz", + "integrity": "sha512-qTLIIC5URYRmeuYYllfoL0K1cHSUd+f3sFHAA6fjtdgf288usd6ToCbWpuFb0BtVceEfGQX8lEp+teOG7n7Quw==", + "dev": true, + "optional": true + }, + "sass-embedded-win32-ia32": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.78.0.tgz", + "integrity": "sha512-BrOWh18T6Y9xgCokGXElEnd8j03fO4W83bwJ9wHRRkrQWaeHtHs3XWW0fX1j2brngWUTjU+jcYUijWF1Z60krw==", + "dev": true, + "optional": true + }, + "sass-embedded-win32-x64": { + "version": "1.78.0", + "resolved": "https://registry.npmmirror.com/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.78.0.tgz", + "integrity": "sha512-C14iFDJd7oGhmQehRiEL7GtzMmLwubcDqsBarQ+u9LbHoDlUQfIPd7y8mVtNgtxJCdrAO/jc5qR4C+85yE3xPQ==", + "dev": true, + "optional": true + }, + "scule": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==" + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + }, + "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==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, + "sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + } + }, + "slash": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==" + }, + "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==" + }, + "speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true + }, + "std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmmirror.com/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==" + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + }, + "strip-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.0.tgz", + "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", + "requires": { + "js-tokens": "^9.0.0" + }, + "dependencies": { + "js-tokens": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.0.tgz", + "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==" + } + } + }, + "superjson": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.1.tgz", + "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==", + "dev": true, + "requires": { + "copy-anything": "^3.0.2" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "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 + }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true + }, + "tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true + }, + "typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "devOptional": true + }, + "ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" + }, + "uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==" + }, + "unctx": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/unctx/-/unctx-2.3.1.tgz", + "integrity": "sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A==", + "requires": { + "acorn": "^8.8.2", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.0", + "unplugin": "^1.3.1" + }, + "dependencies": { + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "requires": { + "@types/estree": "^1.0.0" + } + } + } + }, + "undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, + "unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==" + }, + "unimport": { + "version": "3.13.1", + "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.13.1.tgz", + "integrity": "sha512-nNrVzcs93yrZQOW77qnyOVHtb68LegvhYFwxFMfuuWScmwQmyVCG/NBuN8tYsaGzgQUVYv34E/af+Cc9u4og4A==", + "requires": { + "@rollup/pluginutils": "^5.1.2", + "acorn": "^8.12.1", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.11", + "mlly": "^1.7.1", + "pathe": "^1.1.2", + "pkg-types": "^1.2.0", + "scule": "^1.3.0", + "strip-literal": "^2.1.0", + "unplugin": "^1.14.1" + }, + "dependencies": { + "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==" + }, + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "requires": { + "@types/estree": "^1.0.0" + } + } + } + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true + }, + "unplugin": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.14.1.tgz", + "integrity": "sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==", + "requires": { + "acorn": "^8.12.1", + "webpack-virtual-modules": "^0.6.2" + } + }, + "untyped": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/untyped/-/untyped-1.5.0.tgz", + "integrity": "sha512-o2Vjmn2dal08BzCcINxSmWuAteReUUiXseii5VRhmxyLF0b21K0iKZQ9fMYK7RWspVkY+0saqaVQNq4roe3Efg==", + "requires": { + "@babel/core": "^7.25.2", + "@babel/standalone": "^7.25.6", + "@babel/types": "^7.25.6", + "defu": "^6.1.4", + "jiti": "^2.0.0", + "mri": "^1.2.0", + "scule": "^1.3.0" + }, + "dependencies": { + "jiti": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/jiti/-/jiti-2.1.0.tgz", + "integrity": "sha512-Nftp80J8poC3u+93ZxpjstsgfQ5d0o5qyD6yStv32sgnWr74xRxBppEwsUoA/GIdrJpgGRkC1930YkLcAsFdSw==" + } + } + }, + "update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "requires": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + } + }, + "varint": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true + }, + "vite": { + "version": "5.4.3", + "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.3.tgz", + "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==", + "dev": true, + "requires": { + "esbuild": "^0.21.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + } + }, + "vite-hot-client": { + "version": "0.2.3", + "resolved": "https://registry.npmmirror.com/vite-hot-client/-/vite-hot-client-0.2.3.tgz", + "integrity": "sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==", + "dev": true, + "requires": {} + }, + "vite-plugin-inspect": { + "version": "0.8.7", + "resolved": "https://registry.npmmirror.com/vite-plugin-inspect/-/vite-plugin-inspect-0.8.7.tgz", + "integrity": "sha512-/XXou3MVc13A5O9/2Nd6xczjrUwt7ZyI9h8pTnUMkr5SshLcb0PJUOVq2V+XVkdeU4njsqAtmK87THZuO2coGA==", + "dev": true, + "requires": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.0", + "debug": "^4.3.6", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.0.1", + "sirv": "^2.0.4" + } + }, + "vite-plugin-vue-devtools": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.4.4.tgz", + "integrity": "sha512-lJ7Vr6gznv1nf2S75XJTpXl4XcwnHfyvqJQ7szOvTUfumQALDGo772TEH69wx8gkY/ZWZQea4DZR5IQZMOZKUA==", + "dev": true, + "requires": { + "@vue/devtools-core": "^7.4.4", + "@vue/devtools-kit": "^7.4.4", + "@vue/devtools-shared": "^7.4.4", + "execa": "^8.0.1", + "sirv": "^2.0.4", + "vite-plugin-inspect": "^0.8.7", + "vite-plugin-vue-inspector": "^5.2.0" + } + }, + "vite-plugin-vue-inspector": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.2.0.tgz", + "integrity": "sha512-wWxyb9XAtaIvV/Lr7cqB1HIzmHZFVUJsTNm3yAxkS87dgh/Ky4qr2wDEWNxF23fdhVa3jQ8MZREpr4XyiuaRqA==", + "dev": true, + "requires": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + } + }, + "vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true + }, + "vue": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.3.tgz", + "integrity": "sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==", + "requires": { + "@vue/compiler-dom": "3.5.3", + "@vue/compiler-sfc": "3.5.3", + "@vue/runtime-dom": "3.5.3", + "@vue/server-renderer": "3.5.3", + "@vue/shared": "3.5.3" + } + }, + "vue-router": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.4.3.tgz", + "integrity": "sha512-sv6wmNKx2j3aqJQDMxLFzs/u/mjA9Z5LCgy6BE0f7yFWMjrPLnS/sPNn8ARY/FXw6byV18EFutn5lTO6+UsV5A==", + "requires": { + "@vue/devtools-api": "^6.6.3" + } + }, + "vue-tsc": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-2.1.6.tgz", + "integrity": "sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==", + "dev": true, + "requires": { + "@volar/typescript": "~2.4.1", + "@vue/language-core": "2.1.6", + "semver": "^7.5.4" + }, + "dependencies": { + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true + } + } + }, + "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==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..64e6f54 --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "bcvp.vue3", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --build --force" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.1.0", + "axios": "^1.7.7", + "element-plus": "^2.3.4", + "mitt": "^3.0.1", + "pinia": "^2.1.7", + "pinia-plugin-persistedstate": "^4.0.2", + "vue": "^3.4.29", + "vue-router": "^4.3.3" + }, + "devDependencies": { + "@tsconfig/node20": "^20.1.4", + "@types/node": "^20.14.5", + "@vitejs/plugin-vue": "^5.0.5", + "@vitejs/plugin-vue-jsx": "^4.0.0", + "@vue/tsconfig": "^0.5.1", + "npm-run-all2": "^6.2.0", + "sass-embedded": "^1.78.0", + "typescript": "~5.4.0", + "vite": "^5.3.1", + "vite-plugin-vue-devtools": "^7.3.1", + "vue-tsc": "^2.0.21" + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..ef624df --- /dev/null +++ b/src/App.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/api/blogApi.ts b/src/api/blogApi.ts new file mode 100644 index 0000000..f259bec --- /dev/null +++ b/src/api/blogApi.ts @@ -0,0 +1,72 @@ +import { get, post, put, del, type BaseResponse, type PageModel } from '@/utils/axiosInstance'; + +/** + * 请求的入参接口 + * @interface BlogRequest + */ +export interface BlogRequest { + page: number; + pageSize: number; + key: string; + f: string; +} + +/** + * 实体模型响应接口 + * @interface Blog + */ +export interface Blog { + bID: string; + bsubmitter: string; + User: string | null; + btitle: string; + bcategory: string; + bcontent: string; + btraffic: number; + bcommentNum: number; + bUpdateTime: string; + bCreateTime: string; + bRemark: string; + IsDeleted: boolean; + Comments: string | null; +} + +// 获取业务数据列表 +export const getBlogListApi = async (params: BlogRequest): Promise>> => { + try { + const response = await get>>('/api/blog', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 新增业务数据 +export const addBlog = async (params: Blog): Promise> => { + try { + const response = await post>('/api/blog/post', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 编辑业务数据 +export const editBlog = async (params: Blog): Promise> => { + try { + const response = await put>('/api/blog/put', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 删除业务数据 +export const removeBlog = async (id: string): Promise> => { + try { + const response = await del>('/api/blog/delete', { id: id }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; \ No newline at end of file diff --git a/src/api/departmentApi.ts b/src/api/departmentApi.ts new file mode 100644 index 0000000..97e88fa --- /dev/null +++ b/src/api/departmentApi.ts @@ -0,0 +1,96 @@ +import { get, post, put, del, type BaseResponse } from '@/utils/axiosInstance'; + +/** + * 请求的入参接口 + * @interface DepartmentRequest + */ +export interface DepartmentRequest { + page: number; + key: string; + f: string; +} + +/** + * 部门响应接口 + * @interface Department + */ +export interface Department { + CodeRelationship: string; + Name: string; + Leader: string; + OrderSort: number; + Enabled: boolean; + Status: boolean; + IsDeleted: boolean; + CreateBy: string; + CreateTime: string; + ModifyBy: string | null; + ModifyTime: string; + hasChildren: boolean; + Pid: string; + PidArr: string[]; + Id: string; +} + +// 获取菜单列表 +export const getDepartmentListApi = async (params: DepartmentRequest): Promise> => { + try { + const response = await get>('/api/department/getTreeTable', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +/** + * 机构树节点接口 + * @interface DepartmentNode + */ +export interface DepartmentNode { + value: string; + Pid: string; + label: string; + order: number; + disabled: boolean; + children: DepartmentNode[] | null; +} + +// 获取部门全量树 +export const getDepartmentTree = async (pid: string): Promise> => { + try { + const response = await get>('/api/department/getDepartmentTree', { pid: pid }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 新增部门数据 +export const addDepartment = async (params: Department): Promise> => { + try { + const response = await post>('/api/department/post', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 编辑部门数据 +export const editDepartment = async (params: Department): Promise> => { + try { + const response = await put>('/api/department/put', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 删除部门数据 +export const removeDepartment = async (id: string): Promise> => { + try { + const response = await del>('/api/department/delete', { id: id }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; diff --git a/src/api/loginApi.ts b/src/api/loginApi.ts new file mode 100644 index 0000000..9892f4c --- /dev/null +++ b/src/api/loginApi.ts @@ -0,0 +1,78 @@ +import { get, type BaseResponse } from '@/utils/axiosInstance'; +import { useAuthStore } from "@/stores/auth"; + +/** + * 请求的入参接口 + * @interface LoginRequest + * @property {string} name - 用户名 + * @property {string} pass - 密码 + */ +export interface LoginRequest { + name: string; + pass: string; +} + +/** + * 登录响应接口 + * @interface LoginResponse + * @property {boolean} success - 是否登录成功 + * @property {string} token - JWT token + * @property {number} expires_in - token 的有效时长(秒) + * @property {string} token_type - token 类型,通常为 "Bearer" + */ +export interface LoginResponse { + success: boolean; + token: string; + expires_in: number; + token_type: string; +} + + +/** + * 发起登录请求 + * @function login + * @param {LoginRequest} params - 登录请求的参数 + * @returns {Promise>} 返回一个包含登录响应数据的 Promise + * @throws {Error} 请求失败时抛出错误 + */ +export const login = async (params: LoginRequest): Promise> => { + try { + const response = await get>('/api/Login/JWTToken3.0', { + name: params.name, + pass: params.pass, + }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +export const userInfo = async (): Promise> => { + try { + const userStore = useAuthStore(); + const response = await get>('/api/user/getInfoByToken', { + token: userStore.token, + }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + + +// 获取菜单列表 +export const getAuthMenuListApi = async (params: Menu.MenuRequest): Promise> => { + try { + const response = await get>('/api/permission/GetNavigationBar', { + uid: params.uid, + }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 获取按钮权限 +export const getAuthButtonListApi = () => { + return []; +}; \ No newline at end of file diff --git a/src/api/moduleApi.ts b/src/api/moduleApi.ts new file mode 100644 index 0000000..ee4a750 --- /dev/null +++ b/src/api/moduleApi.ts @@ -0,0 +1,79 @@ +import { get, post, put, del, type BaseResponse, type PageModel } from '@/utils/axiosInstance'; + +/** + * 请求的入参接口 + * @interface ModuleRequest + */ +export interface ModuleRequest { + page: number; + pageSize: number; + key: string; + f: string; +} + +/** + * 实体模型响应接口 + * @interface Module + */ +export interface Module { + IsDeleted: boolean; + Name: string; + LinkUrl: string; + Area: string | null; + Controller: string | null; + Action: string | null; + Icon: string | null; + Code: string | null; + OrderSort: number; + Description: string | null; + IsMenu: boolean; + Enabled: boolean; + CreateId: string; + CreateBy: string; + CreateTime: string; + ModifyId: string | null; + ModifyBy: string | null; + ModifyTime: string; + ParentId: string; + Id: string; +} + +// 获取业务数据列表 +export const getModuleListApi = async (params: ModuleRequest): Promise>> => { + try { + const response = await get>>('/api/module/get', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 新增业务数据 +export const addModule = async (params: Module): Promise> => { + try { + const response = await post>('/api/module/post', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 编辑业务数据 +export const editModule = async (params: Module): Promise> => { + try { + const response = await put>('/api/module/put', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 删除业务数据 +export const removeModule = async (id: string): Promise> => { + try { + const response = await del>('/api/module/delete', { id: id }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; \ No newline at end of file diff --git a/src/api/permissionApi.ts b/src/api/permissionApi.ts new file mode 100644 index 0000000..f0f9cd6 --- /dev/null +++ b/src/api/permissionApi.ts @@ -0,0 +1,150 @@ +import { get, post, put, del, type BaseResponse, type PageModel } from '@/utils/axiosInstance'; + +/** + * 请求的入参接口 + * @interface PermissionRequest + */ +export interface PermissionRequest { + page: number; + pageSize: number; + key: string; + f: string; +} + +/** + * 实体模型响应接口 + * @interface Permission + */ +export interface Permission { + MenuType: string; + Code: string; // 菜单代码 + Name: string; // 菜单名称 + IsButton: boolean; // 是否是按钮 + IsHide: boolean; // 是否隐藏 + IskeepAlive: boolean; // 是否保持活跃 + Func: string | null; // 功能,可能为 null + OrderSort: number; // 排序 + IconNew: string; // 图标 + Description: string; // 描述 + Enabled: boolean; // 是否启用 + CreateId: string; // 创建 ID + CreateBy: string; // 创建者 + CreateTime: string; // 创建时间 + ModifyId: string | null; // 修改 ID,可能为 null + ModifyBy: string | null; // 修改者,可能为 null + ModifyTime: string; // 修改时间 + IsDeleted: boolean; // 是否已删除 + PnameArr: string[]; // 上级名称数组 + PCodeArr: string[]; // 上级代码数组 + MName: string | null; // 模块名称,可能为 null + hasChildren: boolean; // 是否有子菜单 + Children: any[]; // 子菜单数组 + Module: any | null; // 模块,可能为 null + Pid: string; // 上级 ID + Mid: string; // 模块 ID + PidArr: string[]; // 上级 ID 数组 + Id: string; // 菜单 ID +} + +/** + * 菜单树模型响应接口 + * @interface Permission + */ +export interface PermissionNode { + value: string; // 值 + Pid: string; // 父级ID + label: string; // 标签名称 + order: number; // 排序 + isbtn: boolean; // 是否为按钮 + disabled: boolean; // 是否禁用 + children: PermissionNode[] | null; // 子节点 + btns: PermissionNode[] | null; // 按钮列表 +} + + +export interface PermissionByRoleNode { + permissionids: string[] | null; // 子节点 + assignbtns: string[] | null; // 子节点 +} +export interface AssignRequest { + pids: string[] | null; // 子节点 + rid: string | null; // 子节点 +} + +// 获取业务数据列表 +export const getPermissionListApi = async (params: PermissionRequest): Promise> => { + try { + const response = await get>('/api/permission/GetTreeTable', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 新增业务数据 +export const addPermission = async (params: Permission): Promise> => { + try { + const response = await post>('/api/permission/post', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 编辑业务数据 +export const editPermission = async (params: Permission): Promise> => { + try { + const response = await put>('/api/permission/put', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 删除业务数据 +export const removePermission = async (id: string): Promise> => { + try { + const response = await del>('/api/permission/delete', { id: id }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 菜单树业务数据 +export const getPermissionTree = async (pid: string): Promise> => { + try { + const response = await get>('/api/permission/getpermissiontree', { pid: pid }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 菜单树业务数据 +export const getPermissionTreeNobtn = async (): Promise> => { + try { + const response = await get>('/api/permission/getpermissiontree', { needbtn: false }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +export const getPermissionIdsApi = async (rid: string): Promise> => { + try { + const response = await get>('/api/permission/GetPermissionIdByRoleId', { rid: rid }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +export const addRolePermission = async (params: AssignRequest): Promise> => { + try { + const response = await post>('/api/permission/Assign', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; \ No newline at end of file diff --git a/src/api/quartzJobApi.ts b/src/api/quartzJobApi.ts new file mode 100644 index 0000000..961143d --- /dev/null +++ b/src/api/quartzJobApi.ts @@ -0,0 +1,88 @@ +import { get, post, put, del, type BaseResponse, type PageModel } from '@/utils/axiosInstance'; + +/** + * 请求的入参接口 + * @interface QuartzJobRequest + */ +export interface QuartzJobRequest { + page: number; + pageSize: number; + key: string; + f: string; +} + +/** + * 实体模型响应接口 + * @interface QuartzJob + */ +export interface QuartzJob { + Name: string; + JobGroup: string; + Cron: string; + AssemblyName: string; + ClassName: string; + Remark: string; + RunTimes: number; + BeginTime: string; + EndTime: string; + TriggerType: number; + TriggerTypeBl: boolean; + IntervalSecond: number; + CycleRunTimes: number; + CycleHasRunTimes: number; + IsStart: boolean; + JobParams: string; + IsDeleted: boolean; + CreateTime: string; + Triggers: Trigger[]; + Id: string; +} +interface Trigger { + jobId: string; + jobName: string | null; + jobGroup: string; + triggerId: string; + triggerName: string | null; + triggerGroup: string; + triggerStatus: string; +} + +// 获取业务数据列表 +export const getQuartzJobListApi = async (params: QuartzJobRequest): Promise>> => { + try { + const response = await get>>('/api/TasksQz/get', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 新增业务数据 +export const addQuartzJob = async (params: QuartzJob): Promise> => { + try { + const response = await post>('/api/TasksQz/post', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 编辑业务数据 +export const editQuartzJob = async (params: QuartzJob): Promise> => { + try { + const response = await put>('/api/TasksQz/put', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 删除业务数据 +export const removeQuartzJob = async (jobId: string): Promise> => { + try { + const response = await del>('/api/TasksQz/delete', { jobId: jobId }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; \ No newline at end of file diff --git a/src/api/roleApi.ts b/src/api/roleApi.ts new file mode 100644 index 0000000..2960122 --- /dev/null +++ b/src/api/roleApi.ts @@ -0,0 +1,73 @@ +import { get, post, put, del, type BaseResponse, type PageModel } from '@/utils/axiosInstance'; + +/** + * 请求的入参接口 + * @interface RoleRequest + */ +export interface RoleRequest { + page: number; + pageSize: number; + key: string; + f: string; +} + +/** + * 实体模型响应接口 + * @interface Role + */ +export interface Role { + IsDeleted: boolean; + Name: string; + Description: string; + OrderSort: number; + Dids: string | null; + AuthorityScope: number; + Enabled: boolean; + CreateId: string; + CreateBy: string; + CreateTime: string; + ModifyId: string | null; + ModifyBy: string | null; + ModifyTime: string; + Id: string; +} + +// 获取业务数据列表 +export const getRoleListApi = async (params: RoleRequest): Promise>> => { + try { + const response = await get>>('/api/role/get', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 新增业务数据 +export const addRole = async (params: Role): Promise> => { + try { + const response = await post>('/api/role/post', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 编辑业务数据 +export const editRole = async (params: Role): Promise> => { + try { + const response = await put>('/api/role/put', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 删除业务数据 +export const removeRole = async (id: string): Promise> => { + try { + const response = await del>('/api/role/delete', { id: id }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; \ No newline at end of file diff --git a/src/api/userApi.ts b/src/api/userApi.ts new file mode 100644 index 0000000..925cf66 --- /dev/null +++ b/src/api/userApi.ts @@ -0,0 +1,80 @@ +import { get, post, put, del, type BaseResponse, type PageModel } from '@/utils/axiosInstance'; + +/** + * 请求的入参接口 + * @interface UserRequest + */ +export interface UserRequest { + page: number; + pageSize: number; + key: string; + f: string; +} + +/** + * 实体模型响应接口 + * @interface User + */ +export interface User { + uLoginName: string; // 用户登录名 + uLoginPWD: string; // 用户登录密码(加密) + uRealName: string; // 用户真实姓名 + uStatus: number; // 用户状态 + DepartmentId: string; // 部门ID + uRemark: string; // 用户备注 + uCreateTime: string | null; // 创建时间 + uUpdateTime: string | null; // 更新时间 + uLastErrTime: string | null; // 上次错误时间 + uErrorCount: number; // 错误计数 + name: string | null; // 用户名,可能为空 + sex: number; // 性别 + age: number; // 年龄 + birth: string; // 生日 + addr: string | null; // 地址,可能为空 + tdIsDelete: boolean; // 是否已删除 + RoleNames: string[]; // 角色名称数组 + Dids: string[]; // 部门ID数组 + DepartmentName: string; // 部门名称 + uID: string; // 用户ID + RIDs: string[]; // 角色ID数组 +} + +// 获取业务数据列表 +export const getUserListApi = async (params: UserRequest): Promise>> => { + try { + const response = await get>>('/api/user/get', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 新增业务数据 +export const addUser = async (params: User): Promise> => { + try { + const response = await post>('/api/user/post', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 编辑业务数据 +export const editUser = async (params: User): Promise> => { + try { + const response = await put>('/api/user/put', params); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; + +// 删除业务数据 +export const removeUser = async (id: string): Promise> => { + try { + const response = await del>('/api/user/delete', { id: id }); + return response; + } catch (error) { + throw new Error('请求失败'); + } +}; \ No newline at end of file diff --git a/src/assets/base.css b/src/assets/base.css new file mode 100644 index 0000000..8816868 --- /dev/null +++ b/src/assets/base.css @@ -0,0 +1,86 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: + color 0.5s, + background-color 0.5s; + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/src/assets/iconfont/iconfont.scss b/src/assets/iconfont/iconfont.scss new file mode 100644 index 0000000..dc6ddc5 --- /dev/null +++ b/src/assets/iconfont/iconfont.scss @@ -0,0 +1,56 @@ +@font-face { + font-family: iconfont; + /* Project id 2667653 */ + src: url("iconfont.ttf?t=1691032190261") format("truetype"); +} + +.iconfont { + font-family: iconfont !important; + font-size: 20px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + cursor: pointer; +} + +.icon-xiala::before { + content: "\e62b"; +} + +.icon-tuichu::before { + content: "\e645"; +} + +.icon-xiaoxi::before { + font-size: 21.2px; + content: "\e61f"; +} + +.icon-zhuti::before { + font-size: 22.4px; + content: "\e638"; +} + +.icon-sousuo::before { + content: "\e611"; +} + +.icon-contentright::before { + content: "\e8c9"; +} + +.icon-contentleft::before { + content: "\e8ca"; +} + +.icon-fangda::before { + content: "\e826"; +} + +.icon-suoxiao::before { + content: "\e641"; +} + +.icon-zhongyingwen::before { + content: "\e8cb"; +} \ No newline at end of file diff --git a/src/assets/iconfont/iconfont.ttf b/src/assets/iconfont/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0c6bb6a3c63f62c78e8ae1529e2b7705320a8eb3 GIT binary patch literal 5088 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/avatar.gif b/src/assets/images/avatar.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdbd32c675f85af4ed57021ac0638a21a3c6cad3 GIT binary patch literal 6334 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/login_bg.svg b/src/assets/images/login_bg.svg new file mode 100644 index 0000000..0a9514b --- /dev/null +++ b/src/assets/images/login_bg.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/login_left.png b/src/assets/images/login_left.png new file mode 100644 index 0000000000000000000000000000000000000000..e9ebc1163e49e562efda757fe7c2509bec735b5f GIT binary patch literal 35966 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͞o1JEE7TRIbMeK_j}T`FCt4wX%$(@WMqjCz%Rm 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 FV1o6%-l+fp literal 0 HcmV?d00001 diff --git a/src/assets/images/logo.svg b/src/assets/images/logo.svg new file mode 100644 index 0000000..7565660 --- /dev/null +++ b/src/assets/images/logo.svg @@ -0,0 +1 @@ + diff --git a/src/assets/images/msg01.png b/src/assets/images/msg01.png new file mode 100644 index 0000000000000000000000000000000000000000..6ecca0d7b66c8c1f1bc0b11be7decfa1b05d5d60 GIT binary patch literal 6527 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/notData.png b/src/assets/images/notData.png new file mode 100644 index 0000000000000000000000000000000000000000..c579a788fcdc39a742a8223f344926dfc5e6231b GIT binary patch literal 1168 zcmX9-2{fB&6pf`lmMSrnv9z@`offSgT3yTxCYDfZXlD#9t!>c3&}!)*8fzP)mYUke zGM0|m$`G|w5jA!bL}E#Z^$-?~!ZRHP6HgbcnVFf{*;!y9fPoA$ z@Is7_j{~GoDByxi4_b|mjxH@Nfqi6T^EoKKovPzRp){T5Hks zI9#Z^@yi#1KYhK;U!~O$b8%4)%5O6Sb@>Q{=rjgx>im7@LMAn$$V53lsYvxy!O3Id zYpq#+ngtb7Tz(T5sX!uhKt^3x&97bh zD*h3ZFi1wK(2xJyq@`KArignKOB%eS*&y@KHYl3s$D`aNx$i38MsTltSQ}yb1ZD~g zL5<&`c1fMCOX0N-u30#0O!@!$w0WIVZJ+X_!97QI{ZMnbl8BCH&5lThx(SYtZH|iX zz4=YDX@IA4PlftxVwmc9M|YBDv~6rn-EcoHqN!QtZ&UMy_3-CCJbEUnje4?jE4jy~mia&6hVYzyu==SFE#Nd|FK zko1mxv=ha{h$(3Q*DBr@hUQwO&!zoAok+u5B~=dWmRPOt8%b0iGI-_VPk*3YVrMImxJ@-jXg~>`QIyg*q=ovJc6>(rC32A1)sn(gqbvdU~eLkC{Ht zgv!hQM1;eE0{{Ss65=9?005LG000pL1My|4U+QcF0Kj|XrIkg$E}0!$*EY69qxP3K z4`@=~Xk%W;(%;t39{!y_t)D%7tx410wl1H0ww_s%-bgau=%QbkqF*pQ?};+LT(4AV zZ|Mbp$98Wf_HKZl_rrTnmrrk_dv_yyj{|$J7f+vkd#?j~FJHk!d(Ui1|LM}M)ywBk zL`=ai@0TE;^M7efkNYo8knoaGHTJa_*?Y*Uo%mXCB))y=wwV(|px_tim;7D1Zk;^% zGJc6@!haBD-D@Q2Z{INmdE(!Io)3vd{a+dhgTHg};wv8O|E+$7Apixxq^Yc@n?CrBJ1SkFNZIqalke@i`UA+8l>-rN6nvEgn z?WWFe=IRqK>+N&qhiK&+dHO41;tOujIVA`uWih@wov00|M{;FWAQzIw34QEvC|ITOd2B`H$+)лnJ9?R52T@ApJPs+ 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

    #vp+a?M69eOv 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 literal 0 HcmV?d00001 diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 0000000..7565660 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 0000000..36fb845 --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,35 @@ +@import './base.css'; + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; + padding: 3px; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} + +@media (min-width: 1024px) { + body { + display: flex; + place-items: center; + } + + #app { + display: grid; + grid-template-columns: 1fr 1fr; + padding: 0 2rem; + } +} diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue new file mode 100644 index 0000000..1e6df7a --- /dev/null +++ b/src/components/HelloWorld.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/components/TheWelcome.vue b/src/components/TheWelcome.vue new file mode 100644 index 0000000..49d8f73 --- /dev/null +++ b/src/components/TheWelcome.vue @@ -0,0 +1,88 @@ + + + diff --git a/src/components/WelcomeItem.vue b/src/components/WelcomeItem.vue new file mode 100644 index 0000000..b0f5a0c --- /dev/null +++ b/src/components/WelcomeItem.vue @@ -0,0 +1,13 @@ + diff --git a/src/components/icons/IconCommunity.vue b/src/components/icons/IconCommunity.vue new file mode 100644 index 0000000..2dc8b05 --- /dev/null +++ b/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconDocumentation.vue b/src/components/icons/IconDocumentation.vue new file mode 100644 index 0000000..6d4791c --- /dev/null +++ b/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconEcosystem.vue b/src/components/icons/IconEcosystem.vue new file mode 100644 index 0000000..c3a4f07 --- /dev/null +++ b/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconSupport.vue b/src/components/icons/IconSupport.vue new file mode 100644 index 0000000..7452834 --- /dev/null +++ b/src/components/icons/IconSupport.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconTooling.vue b/src/components/icons/IconTooling.vue new file mode 100644 index 0000000..660598d --- /dev/null +++ b/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/src/components/toolbar.vue b/src/components/toolbar.vue new file mode 100644 index 0000000..546b928 --- /dev/null +++ b/src/components/toolbar.vue @@ -0,0 +1,34 @@ + + + \ No newline at end of file diff --git a/src/layouts/LayoutTransverse/index.scss b/src/layouts/LayoutTransverse/index.scss new file mode 100644 index 0000000..19bf7e9 --- /dev/null +++ b/src/layouts/LayoutTransverse/index.scss @@ -0,0 +1,70 @@ +.el-container { + width: 100%; + height: 100%; + + :deep(.el-header) { + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-between; + height: 55px; + padding: 0 15px 0 0; + background-color: var(--el-header-bg-color); + border-bottom: 1px solid var(--el-header-border-color); + + .logo { + width: 210px; + margin-right: 30px; + + .logo-img { + width: 28px; + object-fit: contain; + margin-right: 6px; + } + + .logo-text { + font-size: 21.5px; + font-weight: bold; + color: var(--el-header-logo-text-color); + white-space: nowrap; + } + } + + .el-menu { + flex: 1; + height: 100%; + overflow: hidden; + border-bottom: none; + + .el-sub-menu__hide-arrow { + width: 65px; + height: 55px; + } + + .el-menu-item.is-active { + color: #ffffff !important; + } + + .is-active { + background-color: var(--el-color-primary) !important; + border-bottom-color: var(--el-color-primary) !important; + + &::before { + width: 0; + } + + .el-sub-menu__title { + color: #ffffff !important; + background-color: var(--el-color-primary) !important; + border-bottom-color: var(--el-color-primary) !important; + } + } + } + } + + @media screen and (width <=730px) { + .logo { + display: none !important; + } + } +} \ No newline at end of file diff --git a/src/layouts/LayoutTransverse/index.vue b/src/layouts/LayoutTransverse/index.vue new file mode 100644 index 0000000..c314f2c --- /dev/null +++ b/src/layouts/LayoutTransverse/index.vue @@ -0,0 +1,62 @@ + + + + + + diff --git a/src/layouts/LayoutVertical/index.scss b/src/layouts/LayoutVertical/index.scss new file mode 100644 index 0000000..d1a8cdc --- /dev/null +++ b/src/layouts/LayoutVertical/index.scss @@ -0,0 +1,56 @@ +.el-container { + width: 100%; + height: 100%; + + :deep(.el-aside) { + width: auto; + background-color: #ffffff; + border-right: 1px solid #e4e7ed; + + .aside-box { + display: flex; + flex-direction: column; + height: 100%; + transition: width 0.3s ease; + + .el-scrollbar { + height: calc(100% - 55px); + + .el-menu { + width: 100%; + overflow-x: hidden; + border-right: none; + } + } + + .logo { + box-sizing: border-box; + height: 55px; + + .logo-img { + width: 28px; + object-fit: contain; + margin-right: 6px; + } + + .logo-text { + font-size: 21.5px; + font-weight: bold; + color: var(--el-aside-logo-text-color); + white-space: nowrap; + } + } + } + } + + .el-header { + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-between; + height: 55px; + padding: 0 15px; + background-color: #ffffff; + border-bottom: 1px solid #e4e7ed; + } +} \ No newline at end of file diff --git a/src/layouts/LayoutVertical/index.vue b/src/layouts/LayoutVertical/index.vue new file mode 100644 index 0000000..d0e77d2 --- /dev/null +++ b/src/layouts/LayoutVertical/index.vue @@ -0,0 +1,51 @@ + + + + + + diff --git a/src/layouts/components/Footer/index.vue b/src/layouts/components/Footer/index.vue new file mode 100644 index 0000000..c114abc --- /dev/null +++ b/src/layouts/components/Footer/index.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/layouts/components/Header/ToolBarLeft.vue b/src/layouts/components/Header/ToolBarLeft.vue new file mode 100644 index 0000000..c3eb161 --- /dev/null +++ b/src/layouts/components/Header/ToolBarLeft.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/src/layouts/components/Header/ToolBarRight.vue b/src/layouts/components/Header/ToolBarRight.vue new file mode 100644 index 0000000..870429d --- /dev/null +++ b/src/layouts/components/Header/ToolBarRight.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/layouts/components/Header/components/Avatar.vue b/src/layouts/components/Header/components/Avatar.vue new file mode 100644 index 0000000..f9a8092 --- /dev/null +++ b/src/layouts/components/Header/components/Avatar.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/src/layouts/components/Header/components/Breadcrumb.vue b/src/layouts/components/Header/components/Breadcrumb.vue new file mode 100644 index 0000000..95eb689 --- /dev/null +++ b/src/layouts/components/Header/components/Breadcrumb.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/src/layouts/components/Header/components/CollapseIcon.vue b/src/layouts/components/Header/components/CollapseIcon.vue new file mode 100644 index 0000000..81cde80 --- /dev/null +++ b/src/layouts/components/Header/components/CollapseIcon.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/src/layouts/components/Header/components/InfoDialog.vue b/src/layouts/components/Header/components/InfoDialog.vue new file mode 100644 index 0000000..e2ad84b --- /dev/null +++ b/src/layouts/components/Header/components/InfoDialog.vue @@ -0,0 +1,22 @@ + + + diff --git a/src/layouts/components/Header/components/Message.vue b/src/layouts/components/Header/components/Message.vue new file mode 100644 index 0000000..4f8fae6 --- /dev/null +++ b/src/layouts/components/Header/components/Message.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/layouts/components/Header/components/PasswordDialog.vue b/src/layouts/components/Header/components/PasswordDialog.vue new file mode 100644 index 0000000..bf30bb3 --- /dev/null +++ b/src/layouts/components/Header/components/PasswordDialog.vue @@ -0,0 +1,22 @@ + + + diff --git a/src/layouts/components/Header/components/ThemeSetting.vue b/src/layouts/components/Header/components/ThemeSetting.vue new file mode 100644 index 0000000..b2de486 --- /dev/null +++ b/src/layouts/components/Header/components/ThemeSetting.vue @@ -0,0 +1,12 @@ + + + diff --git a/src/layouts/components/Main/index.vue b/src/layouts/components/Main/index.vue new file mode 100644 index 0000000..d243096 --- /dev/null +++ b/src/layouts/components/Main/index.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/layouts/components/Menu/SubMenu.vue b/src/layouts/components/Menu/SubMenu.vue new file mode 100644 index 0000000..748a890 --- /dev/null +++ b/src/layouts/components/Menu/SubMenu.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/layouts/components/Tabs/components/MoreButton.vue b/src/layouts/components/Tabs/components/MoreButton.vue new file mode 100644 index 0000000..7063bc4 --- /dev/null +++ b/src/layouts/components/Tabs/components/MoreButton.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/src/layouts/components/Tabs/index.scss b/src/layouts/components/Tabs/index.scss new file mode 100644 index 0000000..43f44df --- /dev/null +++ b/src/layouts/components/Tabs/index.scss @@ -0,0 +1,82 @@ +.tabs-box { + background-color: var(--el-bg-color); + + .tabs-menu { + position: relative; + width: 100%; + + .el-dropdown { + position: absolute; + top: 0; + right: 0; + bottom: 0; + + .more-button { + display: flex; + align-items: center; + justify-content: center; + width: 43px; + cursor: pointer; + border-left: 1px solid var(--el-border-color-light); + transition: all 0.3s; + + &:hover { + background-color: var(--el-color-info-light-9); + } + + .iconfont { + font-size: 12.5px; + } + } + } + + :deep(.el-tabs) { + .el-tabs__header { + box-sizing: border-box; + height: 40px; + padding: 0 10px; + margin: 0; + + .el-tabs__nav-wrap { + position: absolute; + width: calc(100% - 70px); + + .el-tabs__nav { + display: flex; + border: none; + + .el-tabs__item { + display: flex; + align-items: center; + justify-content: center; + color: #afafaf; + border: none; + + .tabs-icon { + margin: 1.5px 4px 0 0; + font-size: 15px; + } + + .is-icon-close { + margin-top: 1px; + } + + &.is-active { + color: var(--el-color-primary); + + &::before { + position: absolute; + bottom: 0; + width: 100%; + height: 0; + content: ""; + border-bottom: 2px solid var(--el-color-primary) !important; + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/src/layouts/components/Tabs/index.vue b/src/layouts/components/Tabs/index.vue new file mode 100644 index 0000000..361da0e --- /dev/null +++ b/src/layouts/components/Tabs/index.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/src/layouts/components/ThemeDrawer/index.scss b/src/layouts/components/ThemeDrawer/index.scss new file mode 100644 index 0000000..eb9d3b1 --- /dev/null +++ b/src/layouts/components/ThemeDrawer/index.scss @@ -0,0 +1,166 @@ +.divider { + margin-top: 15px; + + .el-icon { + position: relative; + top: 2px; + right: 5px; + font-size: 15px; + } +} + +.theme-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 5px; + margin: 14px 0; + + span { + display: flex; + align-items: center; + font-size: 14px; + + .el-icon { + margin-left: 3px; + font-size: 15px; + color: var(--el-text-color-regular); + cursor: pointer; + } + } +} + +.layout-box { + position: relative; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + padding: 15px 7px 0; + + .layout-item { + position: relative; + box-sizing: border-box; + width: 100px; + height: 70px; + padding: 6px; + cursor: pointer; + border-radius: 5px; + box-shadow: 0 0 5px 1px var(--el-border-color-dark); + transition: all 0.2s; + + .layout-dark { + background-color: var(--el-color-primary); + border-radius: 3px; + } + + .layout-light { + background-color: var(--el-color-primary-light-5); + border-radius: 3px; + } + + .layout-content { + background-color: var(--el-color-primary-light-8); + border: 1px dashed var(--el-color-primary); + border-radius: 3px; + } + + .el-icon { + position: absolute; + right: 10px; + bottom: 10px; + color: var(--el-color-primary); + transition: all 0.2s; + } + + &:hover { + box-shadow: 0 0 5px 1px var(--el-text-color-secondary); + } + } + + .is-active { + box-shadow: 0 0 0 2px var(--el-color-primary) !important; + } + + .layout-vertical { + display: flex; + justify-content: space-between; + margin-bottom: 20px; + + .layout-dark { + width: 20%; + } + + .layout-container { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 72%; + + .layout-light { + height: 20%; + } + + .layout-content { + height: 67%; + } + } + } + + .layout-classic { + display: flex; + flex-direction: column; + justify-content: space-between; + margin-bottom: 20px; + + .layout-dark { + height: 22%; + } + + .layout-container { + display: flex; + justify-content: space-between; + height: 70%; + + .layout-light { + width: 20%; + } + + .layout-content { + width: 70%; + } + } + } + + .layout-transverse { + display: flex; + flex-direction: column; + justify-content: space-between; + margin-bottom: 15px; + + .layout-dark { + height: 20%; + } + + .layout-content { + height: 67%; + } + } + + .layout-columns { + display: flex; + justify-content: space-between; + margin-bottom: 15px; + + .layout-dark { + width: 14%; + } + + .layout-light { + width: 17%; + } + + .layout-content { + width: 55%; + } + } +} \ No newline at end of file diff --git a/src/layouts/components/ThemeDrawer/index.vue b/src/layouts/components/ThemeDrawer/index.vue new file mode 100644 index 0000000..677e75b --- /dev/null +++ b/src/layouts/components/ThemeDrawer/index.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/src/layouts/index.vue b/src/layouts/index.vue new file mode 100644 index 0000000..5f4614d --- /dev/null +++ b/src/layouts/index.vue @@ -0,0 +1,28 @@ + + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..86276f8 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,31 @@ +import { createApp } from 'vue' + +import "@/assets/iconfont/iconfont.scss"; + +// element css +import "element-plus/dist/index.css"; +// custom element css +import "@/styles/element.scss"; +// element dark css +import "element-plus/theme-chalk/dark/css-vars.css"; +// element plus +import ElementPlus from "element-plus"; +// element icons +import * as Icons from "@element-plus/icons-vue"; + +import App from './App.vue' +import router from './router' +import pinia from "@/stores"; + +const app = createApp(App) + +// register the element Icons component +Object.keys(Icons).forEach(key => { + app.component(key, Icons[key as keyof typeof Icons]); +}); + +app.use(ElementPlus) +app.use(pinia) +app.use(router) + +app.mount('#app') diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..9407212 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,90 @@ +import { createRouter, createWebHistory } from 'vue-router' +import { useAuthStore } from "@/stores/auth"; +import { useAuthMenuStore } from "@/stores/modules/authMenu"; +import { initDynamicRouter } from "@/router/modules/dynamicRouter"; +import HomeView from '../views/home/index.vue' +import LoginView from '../views/login/index.vue' +import { useUserInfoStore } from '@/stores/userInfo'; + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/login', + name: 'login', + component: LoginView + }, + { + path: '/home', + name: 'home', + component: HomeView + }, + { + path: "/layout", + name: "layout", + component: () => import("@/layouts/index.vue"), + redirect: '/', + children: [] + }, + { + path: '/about', + name: 'about', + // route level code-splitting + // this generates a separate chunk (About.[hash].js) for this route + // which is lazy-loaded when the route is visited. + component: () => import('../views/AboutView.vue') + } + ] +}) + +/** + * @description 路由拦截 beforeEach + * */ +router.beforeEach(async (to, from, next) => { + const userStore = useAuthStore(); + const authStore = useAuthMenuStore(); + + // 2.动态设置标题 + const title = 'blogvue3'; + document.title = to.meta.title ? `${to.meta.title} - ${title}` : title; + + // 3.判断是访问登陆页,有 Token 就在当前页面,没有 Token 重置路由到登陆页 + if (to.path.toLocaleLowerCase() === '/login') { + if (userStore.token) return next(from.fullPath); + resetRouter(); + return next(); + } + + // 4.判断访问页面是否在路由白名单地址(静态路由)中,如果存在直接放行 + if (["/500"].includes(to.path)) return next(); + + // 5.判断是否有 Token,没有重定向到 login 页面 + if (!userStore.token) return next({ path: '/login', replace: true }); + + // 6.如果没有菜单列表,就重新请求菜单列表并添加动态路由 + if (!authStore.authMenuListGet.length) { + const userInfoStore = useUserInfoStore(); + const menuReq: Menu.MenuRequest = { uid: userInfoStore.user?.uID || '12'}; + await initDynamicRouter(menuReq); + return next({ ...to, replace: true }); + } + + // 7.存储 routerName 做按钮权限筛选 + authStore.setRouteName(to.name as string); + + // 8.正常访问页面 + next(); +}); + +/** + * @description 重置路由 + * */ +export const resetRouter = () => { + const authStore = useAuthMenuStore(); + authStore.flatMenuListGet.forEach(route => { + const { name } = route; + if (name && router.hasRoute(name)) router.removeRoute(name); + }); +}; + +export default router diff --git a/src/router/modules/dynamicRouter.ts b/src/router/modules/dynamicRouter.ts new file mode 100644 index 0000000..c1d0696 --- /dev/null +++ b/src/router/modules/dynamicRouter.ts @@ -0,0 +1,57 @@ +import router from "@/router/index"; +import type { RouteRecordRaw } from "vue-router"; +import { ElNotification } from "element-plus"; +import { useAuthStore } from "@/stores/auth"; +import { useAuthMenuStore } from "@/stores/modules/authMenu"; + +// 引入 views 文件夹下所有 vue 文件 +const modules = import.meta.glob("@/views/**/*.vue"); + +/** + * @description 初始化动态路由 + */ +export const initDynamicRouter = async (params: Menu.MenuRequest) => { + const userStore = useAuthStore(); + const authStore = useAuthMenuStore(); + + try { + // 1.获取菜单列表 && 按钮权限列表 + await authStore.getAuthMenuList(params); + // await authStore.getAuthButtonList(); + + // 2.判断当前用户有没有菜单权限 + if (!authStore.authMenuListGet.length) { + ElNotification({ + title: "无权限访问", + message: "当前账号无任何菜单权限,请联系系统管理员!", + type: "warning", + duration: 3000 + }); + userStore.setToken(""); + router.replace("/login"); + return Promise.reject("No permission"); + } + + console.log(authStore.flatMenuListGet); + + // 3.添加动态路由 + authStore.flatMenuListGet.forEach(item => { + item.children && delete item.children; + if (!item.IsButton && item.path && typeof item.path == "string" && item.path != ' ' && item.path != '-') { + if (item.path == '/') { + item.component = modules["/src/views/home/index.vue"]; + } else if (item.path.indexOf('/:id')) { + item.component = modules["/src/views" + item.path.replace('/:id','') + ".vue"]; + } else { + item.component = modules["/src/views" + item.path + ".vue"]; + } + router.addRoute("layout", item as unknown as RouteRecordRaw); + } + }); + } catch (error) { + // 当按钮 || 菜单请求出错时,重定向到登陆页 + userStore.setToken(""); + router.replace("/login"); + return Promise.reject(error); + } +}; diff --git a/src/stores/auth.ts b/src/stores/auth.ts new file mode 100644 index 0000000..2994e1a --- /dev/null +++ b/src/stores/auth.ts @@ -0,0 +1,17 @@ +import { defineStore } from 'pinia'; + +export const useAuthStore = defineStore('auth', { + state: () => ({ + token: localStorage.getItem('token') || '', // 初始化时从 localStorage 读取 token + }), + actions: { + setToken(newToken: string) { + this.token = newToken; + localStorage.setItem('token', newToken); // 保存 token 到 localStorage + }, + clearToken() { + this.token = ''; + localStorage.removeItem('token'); // 清除 localStorage 中的 token + }, + }, +}); \ No newline at end of file diff --git a/src/stores/config/piniaPersist.ts b/src/stores/config/piniaPersist.ts new file mode 100644 index 0000000..9e727bc --- /dev/null +++ b/src/stores/config/piniaPersist.ts @@ -0,0 +1,19 @@ +import type { PersistedStateOptions } from "pinia-plugin-persistedstate"; + +/** + * @description pinia 持久化参数配置 + * @param {String} key 存储到持久化的 name + * @param {Array} paths 需要持久化的 state name + * @return persist + * */ +const piniaPersistConfig = (key: string, paths?: string[]) => { + const persist: PersistedStateOptions = { + key, + storage: localStorage, + // storage: sessionStorage, + paths + }; + return persist; +}; + +export default piniaPersistConfig; diff --git a/src/stores/counter.ts b/src/stores/counter.ts new file mode 100644 index 0000000..29ffac4 --- /dev/null +++ b/src/stores/counter.ts @@ -0,0 +1,23 @@ +import { defineStore } from 'pinia' + +export const useCounterStore = defineStore('counter', { + // 定义状态 + state: () => ({ + count: 0, + }), + + // 定义 actions,可以包含异步操作 + actions: { + increment() { + this.count++ + }, + decrement() { + this.count-- + }, + }, + + // 定义 getters,用来计算衍生的状态 + getters: { + doubleCount: (state) => state.count * 2, + }, +}) \ No newline at end of file diff --git a/src/stores/index.ts b/src/stores/index.ts new file mode 100644 index 0000000..0c7dfda --- /dev/null +++ b/src/stores/index.ts @@ -0,0 +1,8 @@ +import { createPinia } from "pinia"; +import piniaPluginPersistedstate from "pinia-plugin-persistedstate"; + +// pinia persist +const pinia = createPinia(); +pinia.use(piniaPluginPersistedstate); + +export default pinia; diff --git a/src/stores/interface/index.ts b/src/stores/interface/index.ts new file mode 100644 index 0000000..f75b22c --- /dev/null +++ b/src/stores/interface/index.ts @@ -0,0 +1,56 @@ +export type LayoutType = "vertical" | 'transverse'; + +export type AssemblySizeType = "large" | "default" | "small"; +/* GlobalState */ +export interface GlobalState { + layout: LayoutType; + assemblySize: AssemblySizeType; + maximize: boolean; + primary: string; + isDark: boolean; + isGrey: boolean; + isWeak: boolean; + asideInverted: boolean; + headerInverted: boolean; + isCollapse: boolean; + accordion: boolean; + breadcrumb: boolean; + breadcrumbIcon: boolean; + tabs: boolean; + tabsIcon: boolean; + footer: boolean; +} + +/* UserState */ +export interface UserState { + token: string; + userInfo: { name: string }; +} + +/* tabsMenuProps */ +export interface TabsMenuProps { + icon: string; + title: string; + path: string; + name: string; + close: boolean; +} + +/* TabsState */ +export interface TabsState { + tabsMenuList: TabsMenuProps[]; +} + +/* AuthState */ +export interface AuthState { + routeName: string; + authButtonList: { + [key: string]: string[]; + }; + authMenuList: Menu.MenuOptions[]; +} + +/* KeepAliveState */ +export interface KeepAliveState { + keepAliveName: string[]; +} diff --git a/src/stores/modules/authMenu.ts b/src/stores/modules/authMenu.ts new file mode 100644 index 0000000..4c2fce8 --- /dev/null +++ b/src/stores/modules/authMenu.ts @@ -0,0 +1,39 @@ +import { defineStore } from "pinia"; +import type { AuthState } from "@/stores/interface"; +import { getAuthMenuListApi } from "@/api/loginApi"; +import { getFlatMenuList, getShowMenuList, getAllBreadcrumbList } from "@/utils"; + +export const useAuthMenuStore = defineStore({ + id: "blogvue3-auth", + state: (): AuthState => ({ + // 按钮权限列表 + authButtonList: {}, + // 菜单权限列表 + authMenuList: [], + // 当前页面的 router name,用来做按钮权限筛选 + routeName: "" + }), + getters: { + // 按钮权限列表 + authButtonListGet: state => state.authButtonList, + // 菜单权限列表 ==> 这里的菜单没有经过任何处理 + authMenuListGet: state => state.authMenuList, + // 菜单权限列表 ==> 左侧菜单栏渲染,需要剔除 isHide == true + showMenuListGet: state => getShowMenuList(state.authMenuList), + // 菜单权限列表 ==> 扁平化之后的一维数组菜单,主要用来添加动态路由 + flatMenuListGet: state => getFlatMenuList(state.authMenuList), + // 递归处理后的所有面包屑导航列表 + breadcrumbListGet: state => getAllBreadcrumbList(state.authMenuList) + }, + actions: { + // Get AuthMenuList + async getAuthMenuList(params: Menu.MenuRequest) { + const { response } = await getAuthMenuListApi(params); + this.authMenuList = response.children ?? []; + }, + // Set RouteName + async setRouteName(name: string) { + this.routeName = name; + } + } +}); diff --git a/src/stores/modules/global.ts b/src/stores/modules/global.ts new file mode 100644 index 0000000..208b528 --- /dev/null +++ b/src/stores/modules/global.ts @@ -0,0 +1,50 @@ +import { defineStore } from "pinia"; +import type { GlobalState } from "@/stores/interface"; +import piniaPersistConfig from "@/stores/config/piniaPersist"; + +export const useGlobalStore = defineStore({ + id: "blogvue3-global", + // 修改默认值之后,需清除 localStorage 数据 + state: (): GlobalState => ({ + // 布局模式 (纵向:vertical | 经典:classic | 横向:transverse | 分栏:columns) + layout: "vertical", + // element 组件大小 + assemblySize: "default", + // 当前页面是否全屏 + maximize: false, + // 主题颜色 + primary: '#009688', + // 深色模式 + isDark: false, + // 灰色模式 + isGrey: false, + // 色弱模式 + isWeak: false, + // 侧边栏反转 + asideInverted: false, + // 头部反转 + headerInverted: false, + // 折叠菜单 + isCollapse: false, + // 菜单手风琴 + accordion: true, + // 面包屑导航 + breadcrumb: true, + // 面包屑导航图标 + breadcrumbIcon: true, + // 标签页 + tabs: true, + // 标签页图标 + tabsIcon: true, + // 页脚 + footer: true + }), + getters: {}, + actions: { + // Set GlobalState + setGlobalState(...args: ObjToKeyValArray) { + this.$patch({ [args[0]]: args[1] }); + } + }, + persist: piniaPersistConfig("blogvue3-global") +}); diff --git a/src/stores/modules/keepAlive.ts b/src/stores/modules/keepAlive.ts new file mode 100644 index 0000000..38b9fdd --- /dev/null +++ b/src/stores/modules/keepAlive.ts @@ -0,0 +1,23 @@ +import { defineStore } from "pinia"; +import type { KeepAliveState } from "@/stores/interface"; + +export const useKeepAliveStore = defineStore({ + id: "blogvue3-keepAlive", + state: (): KeepAliveState => ({ + keepAliveName: [] + }), + actions: { + // Add KeepAliveName + async addKeepAliveName(name: string) { + !this.keepAliveName.includes(name) && this.keepAliveName.push(name); + }, + // Remove KeepAliveName + async removeKeepAliveName(name: string) { + this.keepAliveName = this.keepAliveName.filter(item => item !== name); + }, + // Set KeepAliveName + async setKeepAliveName(keepAliveName: string[] = []) { + this.keepAliveName = keepAliveName; + } + } +}); diff --git a/src/stores/modules/tabs.ts b/src/stores/modules/tabs.ts new file mode 100644 index 0000000..0ea6e9f --- /dev/null +++ b/src/stores/modules/tabs.ts @@ -0,0 +1,70 @@ +import router from "@/router"; +import { defineStore } from "pinia"; +import type { TabsState, TabsMenuProps } from "@/stores/interface"; +import piniaPersistConfig from "@/stores/config/piniaPersist"; +import { useKeepAliveStore } from "./keepAlive"; + +const keepAliveStore = useKeepAliveStore(); + +export const useTabsStore = defineStore({ + id: "blogvue3-tabs", + state: (): TabsState => ({ + tabsMenuList: [] + }), + actions: { + // Add Tabs + async addTabs(tabItem: TabsMenuProps) { + if (this.tabsMenuList.every(item => item.path !== tabItem.path)) { + this.tabsMenuList.push(tabItem); + } + }, + // Remove Tabs + async removeTabs(tabPath: string, isCurrent: boolean = true) { + const tabsMenuList = this.tabsMenuList; + // 如果是删除当前路由 + if (isCurrent) { + tabsMenuList.forEach((item, index) => { + if (item.path !== tabPath) return; + // 让页面自动加载前一个或者后一个路由页面 + const nextTab = tabsMenuList[index + 1] || tabsMenuList[index - 1]; + if (!nextTab) return; + router.push(nextTab.path); + }); + } + // 数据清理 + this.tabsMenuList = tabsMenuList.filter(item => item.path !== tabPath); + }, + // Close Tabs On Side + async closeTabsOnSide(path: string, type: "left" | "right") { + // 关闭左侧、右侧 + const currentIndex = this.tabsMenuList.findIndex(item => item.path === path); + if (currentIndex !== -1) { + const range = type === "left" ? [0, currentIndex] : [currentIndex + 1, this.tabsMenuList.length]; + this.tabsMenuList = this.tabsMenuList.filter((item, index) => { + return index < range[0] || index >= range[1] || !item.close; + }); + } + keepAliveStore.setKeepAliveName(this.tabsMenuList.map(item => item.name)); + }, + // Close MultipleTab + async closeMultipleTab(tabsMenuValue?: string) { + // 关闭其他 + this.tabsMenuList = this.tabsMenuList.filter(item => { + return item.path === tabsMenuValue || !item.close; + }); + keepAliveStore.setKeepAliveName(this.tabsMenuList.map(item => item.name)); + }, + // Set Tabs + async setTabs(tabsMenuList: TabsMenuProps[]) { + this.tabsMenuList = tabsMenuList; + }, + // Set Tabs Title + async setTabsTitle(title: string) { + const nowFullPath = location.hash.substring(1); + this.tabsMenuList.forEach(item => { + if (item.path == nowFullPath) item.title = title; + }); + } + }, + persist: piniaPersistConfig("blogvue3-tabs") +}); diff --git a/src/stores/userInfo.ts b/src/stores/userInfo.ts new file mode 100644 index 0000000..2dc5c89 --- /dev/null +++ b/src/stores/userInfo.ts @@ -0,0 +1,19 @@ +import { defineStore } from 'pinia'; +import piniaPersistConfig from "@/stores/config/piniaPersist"; + +export const useUserInfoStore = defineStore({ + id: 'userinfo', + state: (): { user: User.UserResponse | null } => ({ + user: null + }), + actions: { + setUser(user: User.UserResponse) { + this.user = user; + }, + clearUser() { + this.user = null; + localStorage.removeItem('userinfo'); + } + }, + persist: piniaPersistConfig("userinfo") +}); \ No newline at end of file diff --git a/src/styles/element.scss b/src/styles/element.scss new file mode 100644 index 0000000..c2a6e14 --- /dev/null +++ b/src/styles/element.scss @@ -0,0 +1,284 @@ +html, +body, +#app, +#watermark { + width: 100%; + height: 100%; + padding: 0; + margin: 0; +} + +/* 设置 notification、message 层级在 loading 之上 */ +.el-message, +.el-notification { + z-index: 2058 !important; +} + +/* el-alert */ +.el-alert { + border: 1px solid; +} + +/* 当前页面最大化 css */ +.main-maximize { + + .aside-split, + .el-aside, + .el-header, + .el-footer, + .tabs-box { + display: none !important; + } +} + +/* mask image */ +.mask-image { + padding-right: 50px; + mask-image: linear-gradient(90deg, #000000 0%, #000000 calc(100% - 50px), transparent); +} + +/* custom card */ +.card { + box-sizing: border-box; + padding: 20px; + overflow-x: hidden; + background-color: var(--el-bg-color); + border: 1px solid var(--el-border-color-light); + border-radius: 6px; + box-shadow: 0 0 12px rgb(0 0 0 / 5%); +} + +/* ProTable 不需要 card 样式(在组件内使用 ProTable 会使用到) */ +.no-card { + .card { + padding: 0; + background-color: transparent; + border: none; + border-radius: 0; + box-shadow: none; + } + + .table-search { + padding: 18px 0 0 !important; + margin-bottom: 0 !important; + } +} + +/* content-box (常用内容盒子) */ +.content-box { + display: flex; + flex-direction: column; + align-items: center; + height: 100%; + + .text { + margin: 20px 0 30px; + font-size: 23px; + font-weight: bold; + color: var(--el-text-color-regular); + } + + .el-descriptions { + width: 100%; + padding: 40px 0 0; + + .el-descriptions__title { + font-size: 18px; + } + + .el-descriptions__label { + width: 200px; + } + } +} + +/* main-box (树形表格 treeFilter 页面会使用,左右布局 flex) */ +.main-box { + display: flex; + width: 100%; + height: 100%; + + .table-box { + // 这里减去的是 treeFilter 组件宽度 + width: calc(100% - 230px); + } +} + +/* proTable */ +.table-box, +.table-main { + display: flex; + flex: 1; + flex-direction: column; + width: 100%; + height: 100%; + + // table-search 表格搜索样式 + .table-search { + padding: 18px 18px 0; + margin-bottom: 10px; + + .el-form { + .el-form-item__content>* { + width: 100%; + } + + // 去除时间选择器上下 padding + .el-range-editor.el-input__wrapper { + padding: 0 10px; + } + } + + .operation { + display: flex; + align-items: center; + justify-content: flex-end; + margin-bottom: 18px; + } + } + + // 表格 header 样式 + .table-header { + .header-button-lf { + float: left; + } + + .header-button-ri { + float: right; + } + + .el-button { + margin-bottom: 15px; + } + } + + // el-table 表格样式 + .el-table { + flex: 1; + + // 修复 safari 浏览器表格错位 https://github.com/HalseySpicy/Geeker-Admin/issues/83 + table { + width: 100%; + } + + .el-table__header th { + height: 45px; + font-size: 15px; + font-weight: bold; + color: var(--el-text-color-primary); + background: var(--el-fill-color-light); + } + + .el-table__row { + height: 45px; + font-size: 14px; + } + + // 设置 el-table 中 header 文字不换行,并省略 + .el-table__header .el-table__cell>.cell { + white-space: nowrap; + } + + // 解决表格数据为空时样式不居中问题(仅在element-plus中) + .el-table__empty-block { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + + .table-empty { + line-height: 30px; + } + } + + // table 中 image 图片样式 + .table-image { + width: 50px; + height: 50px; + border-radius: 50%; + } + } + + // 表格 pagination 样式 + .el-pagination { + display: flex; + justify-content: flex-end; + margin-top: 20px; + } +} + +/* el-table 组件大小 */ +.el-table--small { + .el-table__header th { + height: 40px !important; + font-size: 14px !important; + } + + .el-table__row { + height: 40px !important; + font-size: 13px !important; + } +} + +.el-table--large { + .el-table__header th { + height: 50px !important; + font-size: 16px !important; + } + + .el-table__row { + height: 50px !important; + font-size: 15px !important; + } +} + +/* el-drawer */ +.el-drawer { + .el-drawer__header { + padding: 16px 20px; + margin-bottom: 0; + border-bottom: 1px solid var(--el-border-color-lighter); + + span { + font-size: 17px; + line-height: 17px; + color: var(--el-text-color-primary) !important; + } + } + + .el-drawer__footer { + border-top: 1px solid var(--el-border-color-lighter); + } + + // select 样式 + .el-select { + width: 100%; + } + + // drawer-form 中存在两列 form-item 样式 + .drawer-multiColumn-form { + display: flex; + flex-wrap: wrap; + + .el-form-item { + width: 47%; + + &:nth-child(2n-1) { + margin-right: 5%; + } + } + } +} + +/* el-dialog */ +.el-dialog { + .el-dialog__header { + padding: 15px 20px; + margin: 0; + border-bottom: 1px solid var(--el-border-color-lighter); + + .el-dialog__title { + font-size: 17px; + } + } +} \ No newline at end of file diff --git a/src/typings/global.d.ts b/src/typings/global.d.ts new file mode 100644 index 0000000..f4e32f4 --- /dev/null +++ b/src/typings/global.d.ts @@ -0,0 +1,66 @@ +/* Menu */ +declare namespace Menu { + interface MenuOptions { + id: string; + pid: string; + order: number; + name: string; + IsHide: boolean; + IsButton: boolean; + path: string; + Func: string | null; + component?: string | (() => Promise); + iconCls: string; + search: string; + meta: MetaProps; + children?: MenuOptions[] | null; + } + interface MetaProps { + title: string | null; + requireAuth: boolean; + NoTabPage: boolean; + keepAlive: boolean; + isLink: string | null; + icon: string | null; + } + export interface MenuRequest { + uid: string; + } +} + +/* User */ +declare namespace User { + + export interface UserResponse { + uLoginName: string; + uLoginPWD: string; + uRealName: string; + uStatus: number; + DepartmentId: string; + uRemark: string | null; + uCreateTime: string; + uUpdateTime: string; + uLastErrTime: string; + uErrorCount: number; + name: string; + sex: number; + age: number; + birth: string; + addr: string | null; + tdIsDelete: boolean; + RoleNames: string[]; + Dids: string[]; + DepartmentName: string | null; + uID: string; + RIDs: string[]; + } +} + +/* Generic Tools */ +type ObjToKeyValUnion = { + [K in keyof T]: { key: K; value: T[K] }; +}[keyof T]; + +type ObjToKeyValArray = { + [K in keyof T]: [K, T[K]]; +}[keyof T]; diff --git a/src/utils/axiosInstance.ts b/src/utils/axiosInstance.ts new file mode 100644 index 0000000..823df74 --- /dev/null +++ b/src/utils/axiosInstance.ts @@ -0,0 +1,112 @@ +import axios from 'axios'; +import type { InternalAxiosRequestConfig, AxiosResponse } from 'axios'; +import { useAuthStore } from '@/stores/auth'; +import router from '@/router'; +import { ElMessage } from 'element-plus'; + + +/** + * 基础响应接口,使用泛型 T 来表示响应体 + * @template T + * @interface BaseResponse + * @property {number} status - HTTP 响应状态码 + * @property {boolean} success - 请求是否成功 + * @property {string} msg - 响应的消息 + * @property {string | null} [msgDev] - 开发用的详细信息,可能为空 + * @property {T} response - 具体的响应数据 + */ +export interface BaseResponse { + status: number; + success: boolean; + msg: string; + msgDev?: string | null; + response: T; +} + +/** + * 分页响应基类接口,使用泛型 T 来表示数据列表 + * @template T + * @interface PageModel + * @property {number} PageSize - 每页条数 + * @property {number} dataCount - 数据总条数 + * @property {number} page - 当前页码 + * @property {number} pageCount - 总页数 + * @property {T} data - 具体的响应数据数组 + */ +export interface PageModel { + PageSize: number; + dataCount: number; + page: number; + pageCount: number; + data: T[]; +} + +// 创建 axios 实例 +const axiosInstance = axios.create({ + baseURL: '', // 替换为你的 API 基础 URL + timeout: 10000, // 请求超时时间 +}); + +// 请求拦截器 +axiosInstance.interceptors.request.use( + (config: InternalAxiosRequestConfig) => { // 使用 InternalAxiosRequestConfig 类型 + const authStore = useAuthStore(); + if (authStore.token) { + config.headers['Authorization'] = `Bearer ${authStore.token}`; // 在请求头中添加 token + } + return config; + }, + (error) => { + return Promise.reject(error); + } +); + +// 响应拦截器 +axiosInstance.interceptors.response.use( + (response: AxiosResponse) => { + return response; + }, + (error) => { + if (error.response) { + const { status } = error.response; + if (status === 401) { + // 未授权,跳转到登录页面 + router.push({ name: 'login' }); + } else if (status === 403) { + // 无权限访问,提示用户 + ElMessage.error('无权限访问'); + router.push({ name: 'login' }); + } else if (status === 500) { + // 服务器错误 + console.error('服务器错误'); + } + } + return Promise.reject(error); + } +); + +// 封装 get 请求 +export const get = async (url: string, params?: any): Promise => { + const response: AxiosResponse = await axiosInstance.get(url, { params }); + return response.data; +}; + +// 封装 post 请求 +export const post = async (url: string, data?: any): Promise => { + const response: AxiosResponse = await axiosInstance.post(url, data); + return response.data; +}; + +// 封装 put 请求 +export const put = async (url: string, data?: any): Promise => { + const response: AxiosResponse = await axiosInstance.put(url, data); + return response.data; +}; + +// 封装 delete 请求 +export const del = async (url: string, params?: any): Promise => { + const response: AxiosResponse = await axiosInstance.delete(url, { params }); + return response.data; +}; + +export default axiosInstance; \ No newline at end of file diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..2f9b14b --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,117 @@ + +/** + * @description 使用递归扁平化菜单,方便添加动态路由 + * @param {Array} menuList 菜单列表 + * @returns {Array} + */ +export function getFlatMenuList(menuList: Menu.MenuOptions[]): Menu.MenuOptions[] { + let newMenuList: Menu.MenuOptions[] = JSON.parse(JSON.stringify(menuList)); + return newMenuList.flatMap(item => [item, ...(item.children ? getFlatMenuList(item.children) : [])]); +} + +/** + * @description 使用递归过滤出需要渲染在左侧菜单的列表 (需剔除 isHide == true 的菜单) + * @param {Array} menuList 菜单列表 + * @returns {Array} + * */ +export function getShowMenuList(menuList: Menu.MenuOptions[]) { + let newMenuList: Menu.MenuOptions[] = JSON.parse(JSON.stringify(menuList)); + return newMenuList.filter(item => { + item.children?.length && (item.children = getShowMenuList(item.children)); + return !item.IsButton; + }); +} + +/** + * @description 使用递归找出所有面包屑存储到 pinia/vuex 中 + * @param {Array} menuList 菜单列表 + * @param {Array} parent 父级菜单 + * @param {Object} result 处理后的结果 + * @returns {Object} + */ +export const getAllBreadcrumbList = (menuList: Menu.MenuOptions[], parent = [], result: { [key: string]: any } = {}) => { + for (const item of menuList) { + result[item.path] = [...parent, item]; + if (item.children) getAllBreadcrumbList(item.children, result[item.path], result); + } + return result; +}; + +/** + * @description 使用递归处理路由菜单 path,生成一维数组 (第一版本地路由鉴权会用到,该函数暂未使用) + * @param {Array} menuList 所有菜单列表 + * @param {Array} menuPathArr 菜单地址的一维数组 ['**','**'] + * @returns {Array} + */ +export function getMenuListPath(menuList: Menu.MenuOptions[], menuPathArr: string[] = []): string[] { + for (const item of menuList) { + if (typeof item === "object" && item.path) menuPathArr.push(item.path); + if (item.children?.length) getMenuListPath(item.children, menuPathArr); + } + return menuPathArr; +} + +/** + * @description 递归查询当前 path 所对应的菜单对象 (该函数暂未使用) + * @param {Array} menuList 菜单列表 + * @param {String} path 当前访问地址 + * @returns {Object | null} + */ +export function findMenuByPath(menuList: Menu.MenuOptions[], path: string): Menu.MenuOptions | null { + for (const item of menuList) { + if (item.path === path) return item; + if (item.children) { + const res = findMenuByPath(item.children, path); + if (res) return res; + } + } + return null; +} + +export function getButtonList(routePath: string, routers: Menu.MenuOptions[]): Menu.MenuOptions[] { + let buttonList: Menu.MenuOptions[] = []; + const findButtons = (path: string, routes: Menu.MenuOptions[]) => { + for (let element of routes) { + if (path && element.path) { + const currentPath = path.toLowerCase(); + if (element.path && element.path.toLowerCase() === currentPath) { + buttonList = element.children || []; + return; + } else if (element.children) { + findButtons(currentPath, element.children); + } + } + } + }; + findButtons(routePath.toLowerCase(), routers); + return buttonList; +} + +/** + * 格式化日期为指定格式的字符串 + * @param date - Date 对象或日期字符串 + * @param format - 目标日期格式,例如:'yyyy-MM-dd' 或 'yyyy年MM月dd日 hh:mm:ss' + * @returns 格式化后的日期字符串 + */ +export function formatDate(date: Date | string, format: string): string { + if (typeof date === 'string') { + date = new Date(date); + } + + if (!(date instanceof Date) || isNaN(date.getTime())) { + throw new Error('Invalid date'); + } + + const padZero = (num: number) => (num < 10 ? '0' : '') + num; + + const replacements: Record = { + 'yyyy': date.getFullYear().toString(), + 'MM': padZero(date.getMonth() + 1), + 'dd': padZero(date.getDate()), + 'hh': padZero(date.getHours()), + 'mm': padZero(date.getMinutes()), + 'ss': padZero(date.getSeconds()) + }; + + return format.replace(/yyyy|MM|dd|hh|mm|ss/g, match => replacements[match]); +} \ No newline at end of file diff --git a/src/utils/mittBus.ts b/src/utils/mittBus.ts new file mode 100644 index 0000000..1ab1228 --- /dev/null +++ b/src/utils/mittBus.ts @@ -0,0 +1,5 @@ +import mitt from "mitt"; + +const mittBus = mitt(); + +export default mittBus; diff --git a/src/utils/mittBusT.ts b/src/utils/mittBusT.ts new file mode 100644 index 0000000..0f65b9b --- /dev/null +++ b/src/utils/mittBusT.ts @@ -0,0 +1,11 @@ +import mitt from 'mitt'; + +// 定义事件类型 +type Events = { + callFunction: Menu.MenuOptions; +}; + +// 创建已键入的 mitt 实例 +const emitter = mitt(); + +export default emitter; \ No newline at end of file diff --git a/src/views/AboutView.vue b/src/views/AboutView.vue new file mode 100644 index 0000000..a589c37 --- /dev/null +++ b/src/views/AboutView.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/src/views/Blog/Blogs.vue b/src/views/Blog/Blogs.vue new file mode 100644 index 0000000..e90c52e --- /dev/null +++ b/src/views/Blog/Blogs.vue @@ -0,0 +1,155 @@ + + + \ No newline at end of file diff --git a/src/views/Blog/Detail.vue b/src/views/Blog/Detail.vue new file mode 100644 index 0000000..83576fb --- /dev/null +++ b/src/views/Blog/Detail.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/Blog/blogsFunctions.ts b/src/views/Blog/blogsFunctions.ts new file mode 100644 index 0000000..9af8f71 --- /dev/null +++ b/src/views/Blog/blogsFunctions.ts @@ -0,0 +1,108 @@ +// blogFunctions.ts + +import { reactive, toRaw, ref } from 'vue'; +import { getBlogListApi, addBlog, editBlog, removeBlog } from '@/api/blogApi'; // 接口 +import type { BlogRequest, Blog } from '@/api/blogApi';// 模型类 +import { ElMessage, ElForm, ElMessageBox, ElTree } from "element-plus"; +import { formatDate } from "@/utils"; +import { useUserInfoStore } from '@/stores/userInfo'; + +export const blogs = ref([]);// 数据数组 +export const listLoading = ref(false);// 表格loading +export const total = ref(0);// 总数据条数 +export const page = ref(1);//当前页 +export const pageSize = ref(20);// 每页数据条数 + +export const addFormVisible = ref(false); +export const addLoading = ref(false); +export const editFormVisible = ref(false); +export const editLoading = ref(false); +export const isResouceShow = ref(0); +// 创建一个 ref 引用 el-form +export const addFormRef = ref | null>(null); +export const editFormRef = ref | null>(null); +export const currentRow = ref(null); + +// ↓↓↓↓↓ 查询 ↓↓↓↓↓ +export const handleQuery = async (filters: { name: string }) => { + currentRow.value = null; + page.value = 1; + + const para = ref({ + page: page.value, + pageSize: 20, + f: '0', + key: filters.name, + }); + + listLoading.value = true; + try { + const { response } = await getBlogListApi(para.value); + blogs.value = response.data ?? []; + total.value = response.dataCount; + } finally { + listLoading.value = false; + } +}; +// ↑↑↑↑↑ 查询 ↑↑↑↑↑ + + +// ↓↓↓↓↓ 新增 ↓↓↓↓↓ +export const addForm = reactive({ + bID: "", + bsubmitter: "", + User: null, + btitle: "", + bcategory: "", + bcontent: "", + btraffic: 0, + bcommentNum: 0, + bUpdateTime: "", + bCreateTime: "", + bRemark: "", + IsDeleted: false, + Comments: null +}); +export const handleAdd = async () => { + addFormVisible.value = true; + // 使用引用重置表单 + if (addFormRef.value) { + addFormRef.value.resetFields(); + } + +}; + + +// ↑↑↑↑↑ 新增 ↑↑↑↑↑ + + +// ↓↓↓↓↓ 编辑 ↓↓↓↓↓ + +export const handleEdit = async () => { + ElMessage.warning('编辑-非核心功能-该功能未开放'); +}; + +// ↑↑↑↑↑ 编辑 ↑↑↑↑↑ + +// ↓↓↓↓↓ 删除 ↓↓↓↓↓ +// 删除数据 +export const handleDel = async () => { + if (!(currentRow.value && currentRow.value?.bID)) { + ElMessage.error('请选择要删除的一行数据!'); + return; + } + ElMessageBox.confirm("确认删除该记录吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const { success, msg } = await removeBlog(currentRow.value?.bID || '0'); + if (success) { + ElMessage.success('删除成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); +}; +// ↑↑↑↑↑ 删除 ↑↑↑↑↑ \ No newline at end of file diff --git a/src/views/Department/Department.vue b/src/views/Department/Department.vue new file mode 100644 index 0000000..3ae7acc --- /dev/null +++ b/src/views/Department/Department.vue @@ -0,0 +1,211 @@ + + + \ No newline at end of file diff --git a/src/views/Department/departmentFunctions.ts b/src/views/Department/departmentFunctions.ts new file mode 100644 index 0000000..101930f --- /dev/null +++ b/src/views/Department/departmentFunctions.ts @@ -0,0 +1,217 @@ +// departmentFunctions.ts + +import { reactive, toRaw, ref } from 'vue'; +import { getDepartmentListApi, addDepartment, editDepartment, removeDepartment, getDepartmentTree } from '@/api/departmentApi'; +import type { DepartmentRequest, Department, DepartmentNode } from '@/api/departmentApi'; +import { ElMessage, ElForm, ElMessageBox } from "element-plus"; +import { formatDate } from "@/utils"; + +export const departments = ref([]); +export const listLoading = ref(false); +export const page = ref(1); + +export const options = ref([]); +export const addFormVisible = ref(false); +export const addLoading = ref(false); +export const editFormVisible = ref(false); +export const editLoading = ref(false); +export const isResouceShow = ref(0); +// 创建一个 ref 引用 el-form +export const addFormRef = ref | null>(null); +export const editFormRef = ref | null>(null); +export const currentRow = ref(null); + +// ↓↓↓↓↓ 查询 ↓↓↓↓↓ +export const handleQuery = async (filters: { name: string }) => { + currentRow.value = null; + + const para = ref({ + page: page.value, + f: '0', + key: filters.name, + }); + + listLoading.value = true; + try { + const { response } = await getDepartmentListApi(para.value); + departments.value = response ?? []; + } finally { + listLoading.value = false; + } +}; +// ↑↑↑↑↑ 查询 ↑↑↑↑↑ + +// ↓↓↓↓↓ 新增 ↓↓↓↓↓ +// 定义addForm数据并指定其类型为Department +export const addForm = reactive({ + CodeRelationship: "", + Name: "", + Leader: "", + OrderSort: 0, + Enabled: true, // 可以根据需要设置初始值 + Status: false, + IsDeleted: false, // 默认为false表示未删除 + CreateBy: "", + CreateTime: "", + ModifyBy: null, + ModifyTime: "", + hasChildren: false, // 初始设为false,可以根据上下文修改 + Pid: "", + PidArr: [], + Id: "" // 或使用字符串初始化如“0”以符号根节点 +}); +export const handleAdd = async () => { + options.value = []; + addFormVisible.value = true; + addLoading.value = true; + // 使用引用重置表单 + if (addFormRef.value) { + addFormRef.value.resetFields(); + } + + try { + const { response } = await getDepartmentTree('0'); + isResouceShow.value++; + options.value.push(response); + addLoading.value = false; + } catch (error) { + ElMessage.error("加载机构树失败"); + } finally { + addLoading.value = false; + } +}; + +// 新增提交表单 +export const addSubmit = async () => { + const formEl = addFormRef.value; // 获取表单实例 + if (!formEl) return; + + await formEl.validate(async (isValid) => { + if (isValid) { + const postData = toRaw(addForm); + postData.CodeRelationship = postData.PidArr.join() + ","; + postData.CreateTime = formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"); + postData.ModifyTime = postData.CreateTime; + postData.IsDeleted = false; + postData.Pid = postData.PidArr.pop() ?? ''; + console.log(postData); + const { success, msg } = await addDepartment(postData); + if (success) { + ElMessage.success('提交成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + + addFormVisible.value = false; + } else { + ElMessage.error('验证失败,请检查输入项'); + } + }); +}; +// ↑↑↑↑↑ 新增 ↑↑↑↑↑ + +// ↓↓↓↓↓ 编辑 ↓↓↓↓↓ + +// 定义addForm数据并指定其类型为Department +export const editForm = reactive({ + CodeRelationship: "", + Name: "", + Leader: "", + OrderSort: 0, + Enabled: true, // 可以根据需要设置初始值 + Status: false, + IsDeleted: false, // 默认为false表示未删除 + CreateBy: "", + CreateTime: "", + ModifyBy: null, + ModifyTime: "", + hasChildren: false, // 初始设为false,可以根据上下文修改 + Pid: "", + PidArr: [], + Id: "" // 或使用字符串初始化如“0”以符号根节点 +}); +export const handleEdit = async () => { + if (!(currentRow.value && currentRow.value?.Id)) { + ElMessage.error('请选择要编辑的一行数据!'); + return; + } + + options.value = []; + editFormVisible.value = true; + editLoading.value = true; + + try { + const { response } = await getDepartmentTree(currentRow.value?.Id); + if (currentRow.value) { + Object.assign(editForm, currentRow.value); + } + isResouceShow.value++; + options.value.push(response); + editLoading.value = false; + } catch (error) { + ElMessage.error("加载机构树失败"); + } finally { + editLoading.value = false; + } +}; +// 编辑提交表单 +export const editSubmit = async () => { + const formEl = editFormRef.value; // 获取表单实例 + if (!formEl) return; + + await formEl.validate(async (isValid) => { + if (isValid) { + ElMessageBox.confirm("确认提交吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + + const postData = toRaw(editForm); + postData.CodeRelationship = postData.PidArr.join() + ","; + postData.ModifyTime = formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"); + postData.Pid = postData.PidArr.pop() ?? ''; + console.log(postData); + const { success, msg } = await editDepartment(postData); + if (success) { + ElMessage.success('提交成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); + + editFormVisible.value = false; + + } else { + ElMessage.error('验证失败,请检查输入项'); + } + }); +}; +// ↑↑↑↑↑ 编辑 ↑↑↑↑↑ + +// ↓↓↓↓↓ 删除 ↓↓↓↓↓ +// 删除数据 +export const handleDel = async () => { + if (!(currentRow.value && currentRow.value?.Id)) { + ElMessage.error('请选择要删除的一行数据!'); + return; + } + ElMessageBox.confirm("确认删除该记录吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const { success, msg } = await removeDepartment(currentRow.value?.Id || '0'); + if (success) { + ElMessage.success('删除成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); + + +}; +// ↑↑↑↑↑ 删除 ↑↑↑↑↑ \ No newline at end of file diff --git a/src/views/Form/Charts.vue b/src/views/Form/Charts.vue new file mode 100644 index 0000000..a9274b7 --- /dev/null +++ b/src/views/Form/Charts.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/Form/Form.vue b/src/views/Form/Form.vue new file mode 100644 index 0000000..005a383 --- /dev/null +++ b/src/views/Form/Form.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue new file mode 100644 index 0000000..ae31a16 --- /dev/null +++ b/src/views/HomeView.vue @@ -0,0 +1,22 @@ + + + diff --git a/src/views/Login.vue b/src/views/Login.vue new file mode 100644 index 0000000..0076bd2 --- /dev/null +++ b/src/views/Login.vue @@ -0,0 +1,124 @@ + + + + + + + + \ No newline at end of file diff --git a/src/views/Permission/Assign.vue b/src/views/Permission/Assign.vue new file mode 100644 index 0000000..cac3887 --- /dev/null +++ b/src/views/Permission/Assign.vue @@ -0,0 +1,242 @@ + + + + \ No newline at end of file diff --git a/src/views/Permission/Module.vue b/src/views/Permission/Module.vue new file mode 100644 index 0000000..a69c2ac --- /dev/null +++ b/src/views/Permission/Module.vue @@ -0,0 +1,198 @@ + + + \ No newline at end of file diff --git a/src/views/Permission/Permission.vue b/src/views/Permission/Permission.vue new file mode 100644 index 0000000..1435aee --- /dev/null +++ b/src/views/Permission/Permission.vue @@ -0,0 +1,415 @@ + + + + \ No newline at end of file diff --git a/src/views/Permission/moduleFunctions.ts b/src/views/Permission/moduleFunctions.ts new file mode 100644 index 0000000..d537a48 --- /dev/null +++ b/src/views/Permission/moduleFunctions.ts @@ -0,0 +1,202 @@ +// moduleFunctions.ts + +import { reactive, toRaw, ref } from 'vue'; +import { getModuleListApi, addModule, editModule, removeModule } from '@/api/moduleApi'; // 接口 +import type { ModuleRequest, Module } from '@/api/moduleApi';// 模型类 +import { ElMessage, ElForm, ElMessageBox } from "element-plus"; +import { formatDate } from "@/utils"; + +export const modules = ref([]);// 数据数组 +export const listLoading = ref(false);// 表格loading +export const total = ref(0);// 总数据条数 +export const page = ref(1);//当前页 +export const pageSize = ref(20);// 每页数据条数 + +export const addFormVisible = ref(false); +export const addLoading = ref(false); +export const editFormVisible = ref(false); +export const editLoading = ref(false); +export const isResouceShow = ref(0); +// 创建一个 ref 引用 el-form +export const addFormRef = ref | null>(null); +export const editFormRef = ref | null>(null); +export const currentRow = ref(null); + +// ↓↓↓↓↓ 查询 ↓↓↓↓↓ +export const handleQuery = async (filters: { name: string }) => { + currentRow.value = null; + page.value = 1; + + const para = ref({ + page: page.value, + pageSize: 20, + f: '0', + key: filters.name, + }); + + listLoading.value = true; + try { + const { response } = await getModuleListApi(para.value); + modules.value = response.data ?? []; + total.value = response.dataCount; + } finally { + listLoading.value = false; + } +}; +// ↑↑↑↑↑ 查询 ↑↑↑↑↑ + + +// ↓↓↓↓↓ 新增 ↓↓↓↓↓ +export const addForm = reactive({ + IsDeleted: false, // 默认为false表示未删除 + Name: "", + LinkUrl: "", + Area: null, // 可以根据需要初始化为null或其它值 + Controller: null, + Action: null, + Icon: null, + Code: null, + OrderSort: 0, // 根据你的需求初始化数值 + Description: null, + IsMenu: false, // 根据需求设置默认值 + Enabled: true, // 例如设置为true以允许功能 + CreateId: "", + CreateBy: "", + CreateTime: "", + ModifyId: null, + ModifyBy: null, + ModifyTime: "", + ParentId: "", // 初始化为合适的字符串,可能是"0"或"根" + Id: "" +}); +export const handleAdd = async () => { + addFormVisible.value = true; + // 使用引用重置表单 + if (addFormRef.value) { + addFormRef.value.resetFields(); + } +}; + +export const addSubmit = async () => { + const formEl = addFormRef.value; // 获取表单实例 + if (!formEl) return; + + await formEl.validate(async (isValid) => { + if (isValid) { + addLoading.value = true; + const postData = toRaw(addForm); + postData.CreateTime = formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"); + postData.ModifyTime = postData.CreateTime; + postData.IsDeleted = false; + console.log(postData); + const { success, msg } = await addModule(postData); + if (success) { + ElMessage.success('提交成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + + addLoading.value = false; + addFormVisible.value = false; + } else { + ElMessage.error('验证失败,请检查输入项'); + } + }); +}; + +// ↑↑↑↑↑ 新增 ↑↑↑↑↑ + + +// ↓↓↓↓↓ 编辑 ↓↓↓↓↓ +export const editForm = reactive({ + IsDeleted: false, // 默认为false表示未删除 + Name: "", + LinkUrl: "", + Area: null, // 可以根据需要初始化为null或其它值 + Controller: null, + Action: null, + Icon: null, + Code: null, + OrderSort: 0, // 根据你的需求初始化数值 + Description: null, + IsMenu: false, // 根据需求设置默认值 + Enabled: true, // 例如设置为true以允许功能 + CreateId: "", + CreateBy: "", + CreateTime: "", + ModifyId: null, + ModifyBy: null, + ModifyTime: "", + ParentId: "", // 初始化为合适的字符串,可能是"0"或"根" + Id: "" +}); +export const handleEdit = async () => { + if (!(currentRow.value && currentRow.value?.Id)) { + ElMessage.error('请选择要编辑的一行数据!'); + return; + } + + editFormVisible.value = true; + editLoading.value = true; + if (currentRow.value) { + Object.assign(editForm, currentRow.value); + } + editLoading.value = false; + isResouceShow.value++; +}; +export const editSubmit = async () => { + const formEl = editFormRef.value; // 获取表单实例 + if (!formEl) return; + + await formEl.validate(async (isValid) => { + if (isValid) { + ElMessageBox.confirm("确认提交吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const postData = toRaw(editForm); + postData.ModifyTime = formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"); + console.log(postData); + const { success, msg } = await editModule(postData); + if (success) { + ElMessage.success('提交成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); + + editFormVisible.value = false; + + } else { + ElMessage.error('验证失败,请检查输入项'); + } + }); +}; + +// ↑↑↑↑↑ 编辑 ↑↑↑↑↑ + +// ↓↓↓↓↓ 删除 ↓↓↓↓↓ +// 删除数据 +export const handleDel = async () => { + if (!(currentRow.value && currentRow.value?.Id)) { + ElMessage.error('请选择要删除的一行数据!'); + return; + } + ElMessageBox.confirm("确认删除该记录吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const { success, msg } = await removeModule(currentRow.value?.Id || '0'); + if (success) { + ElMessage.success('删除成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); +}; +// ↑↑↑↑↑ 删除 ↑↑↑↑↑ \ No newline at end of file diff --git a/src/views/Permission/permissionFunctions.ts b/src/views/Permission/permissionFunctions.ts new file mode 100644 index 0000000..4408851 --- /dev/null +++ b/src/views/Permission/permissionFunctions.ts @@ -0,0 +1,274 @@ +// permissionFunctions.ts + +import { reactive, toRaw, ref } from 'vue'; +import { getDepartmentTree, type DepartmentNode } from '@/api/departmentApi'; +import { getPermissionListApi, addPermission, editPermission, removePermission, getPermissionTree } from '@/api/permissionApi'; // 接口 +import type { PermissionRequest, Permission, PermissionNode } from '@/api/permissionApi';// 模型类 +import { ElMessage, ElForm, ElMessageBox, ElTree } from "element-plus"; +import { formatDate } from "@/utils"; +import { useUserInfoStore } from '@/stores/userInfo'; +import { getModuleListApi, type Module, type ModuleRequest } from '@/api/moduleApi'; + +export const modules = ref([]);// 数据数组 +export const options = ref([]); +export const permissions = ref([]);// 数据数组 +export const listLoading = ref(false);// 表格loading +export const total = ref(0);// 总数据条数 +export const page = ref(1);//当前页 +export const pageSize = ref(20);// 每页数据条数 + +export const addFormVisible = ref(false); +export const addLoading = ref(false); +export const editFormVisible = ref(false); +export const editLoading = ref(false); +export const isResouceShow = ref(0); +export const addCodeDisabled = ref(false); +export const editCodeDisabled = ref(false); +// 创建一个 ref 引用 el-form +export const addFormRef = ref | null>(null); +export const editFormRef = ref | null>(null); +export const currentRow = ref(null); +// 引用树组件 +export const treeAddRef = ref | null>(null); +export const treeEditRef = ref | null>(null); + +// ↓↓↓↓↓ 查询 ↓↓↓↓↓ +export const handleQuery = async (filters: { name: string }) => { + currentRow.value = null; + page.value = 1; + + const para = ref({ + page: page.value, + pageSize: 999, + f: '0', + key: filters.name, + }); + + listLoading.value = true; + try { + const moduleReq = ref({ + page: 0, + pageSize: 999, + f: '0', + key: '', + }); + const moduleRlt = await getModuleListApi(moduleReq.value); + modules.value = moduleRlt.response?.data ?? []; + + const { response } = await getPermissionListApi(para.value); + permissions.value = response ?? []; + } finally { + listLoading.value = false; + } +}; +// ↑↑↑↑↑ 查询 ↑↑↑↑↑ + + +// ↓↓↓↓↓ 新增 ↓↓↓↓↓ +export const addForm = reactive({ + MenuType: "", + Code: "", // 默认代码为空字符串 + Name: "", // 默认名称为空字符串 + IsButton: false, // 默认不是按钮 + IsHide: false, // 默认不隐藏 + IskeepAlive: false, // 默认不保持活跃 + Func: null, // 默认没有功能 + OrderSort: 0, // 默认排序为 0 + IconNew: "", // 默认图标为空字符串 + Description: "", // 默认描述为空字符串 + Enabled: true, // 默认启用 + CreateId: "", // 默认创建 ID 为空字符串 + CreateBy: "", // 默认创建者为空字符串 + CreateTime: "", // 默认创建时间为空字符串 + ModifyId: null, // 默认没有修改 ID + ModifyBy: null, // 默认没有修改者 + ModifyTime: "", // 默认修改时间为空字符串 + IsDeleted: false, // 默认未删除 + PnameArr: [], // 默认上级名称数组为空 + PCodeArr: [], // 默认上级代码数组为空 + MName: null, // 默认没有模块名称 + hasChildren: false, // 默认没有子菜单 + Children: [], // 默认子菜单数组为空 + Module: null, // 默认没有模块 + Pid: "", // 默认上级 ID 为空字符串 + Mid: "", // 默认模块 ID 为空字符串 + PidArr: [], // 默认上级 ID 数组为空 + Id: "" // 默认菜单 ID 为空字符串 +}); +export const handleAdd = async () => { + options.value = []; + addFormVisible.value = true; + // 使用引用重置表单 + if (addFormRef.value) { + addFormRef.value.resetFields(); + } + + try { + const { response } = await getPermissionTree('0'); + isResouceShow.value++; + options.value.push(response); + addLoading.value = false; + } catch (error) { + ElMessage.error("加载菜单树失败"); + } finally { + addLoading.value = false; + } +}; + +export const addSubmit = async () => { + const formEl = addFormRef.value; // 获取表单实例 + if (!formEl) return; + + await formEl.validate(async (isValid) => { + if (isValid) { + addLoading.value = true; + const postData = toRaw(addForm); + postData.CreateTime = formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"); + postData.ModifyTime = postData.CreateTime; + postData.IsDeleted = false; + + const userStore = useUserInfoStore(); + postData.CreateId = userStore.user?.uID ?? ''; + postData.CreateBy = userStore.user?.uRealName ?? ''; + + postData.Pid = postData.PidArr?.pop() ?? ''; + + + console.log(postData); + const { success, msg } = await addPermission(postData); + if (success) { + ElMessage.success('提交成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + + addLoading.value = false; + addFormVisible.value = false; + } else { + ElMessage.error('验证失败,请检查输入项'); + } + }); +}; + +// ↑↑↑↑↑ 新增 ↑↑↑↑↑ + + +// ↓↓↓↓↓ 编辑 ↓↓↓↓↓ +export const editForm = reactive({ + MenuType: "", + Code: "", // 默认代码为空字符串 + Name: "", // 默认名称为空字符串 + IsButton: false, // 默认不是按钮 + IsHide: false, // 默认不隐藏 + IskeepAlive: false, // 默认不保持活跃 + Func: null, // 默认没有功能 + OrderSort: 0, // 默认排序为 0 + IconNew: "", // 默认图标为空字符串 + Description: "", // 默认描述为空字符串 + Enabled: true, // 默认启用 + CreateId: "", // 默认创建 ID 为空字符串 + CreateBy: "", // 默认创建者为空字符串 + CreateTime: "", // 默认创建时间为空字符串 + ModifyId: null, // 默认没有修改 ID + ModifyBy: null, // 默认没有修改者 + ModifyTime: "", // 默认修改时间为空字符串 + IsDeleted: false, // 默认未删除 + PnameArr: [], // 默认上级名称数组为空 + PCodeArr: [], // 默认上级代码数组为空 + MName: null, // 默认没有模块名称 + hasChildren: false, // 默认没有子菜单 + Children: [], // 默认子菜单数组为空 + Module: null, // 默认没有模块 + Pid: "", // 默认上级 ID 为空字符串 + Mid: "", // 默认模块 ID 为空字符串 + PidArr: [], // 默认上级 ID 数组为空 + Id: "" // 默认菜单 ID 为空字符串 +}); +export const handleEdit = async () => { + if (!(currentRow.value && currentRow.value?.Id)) { + ElMessage.error('请选择要编辑的一行数据!'); + return; + } + options.value = []; + editFormVisible.value = true; + editLoading.value = true; + if (currentRow.value) { + Object.assign(editForm, currentRow.value); + } + + try { + const { response } = await getPermissionTree('0'); + isResouceShow.value++; + options.value.push(response); + editLoading.value = false; + } catch (error) { + ElMessage.error("加载机构树失败"); + } finally { + editLoading.value = false; + } + + editLoading.value = false; + isResouceShow.value++; +}; +export const editSubmit = async () => { + const formEl = editFormRef.value; // 获取表单实例 + if (!formEl) return; + + await formEl.validate(async (isValid) => { + if (isValid) { + ElMessageBox.confirm("确认提交吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const postData = toRaw(editForm); + postData.ModifyTime = formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"); + postData.Pid = postData.PidArr?.pop() ?? ''; + + console.log(postData); + const { success, msg } = await editPermission(postData); + if (success) { + ElMessage.success('提交成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); + + editFormVisible.value = false; + + } else { + ElMessage.error('验证失败,请检查输入项'); + } + }); +}; + +// ↑↑↑↑↑ 编辑 ↑↑↑↑↑ + +// ↓↓↓↓↓ 删除 ↓↓↓↓↓ +// 删除数据 +export const handleDel = async () => { + if (!(currentRow.value && currentRow.value?.Id)) { + ElMessage.error('请选择要删除的一行数据!'); + return; + } + ElMessageBox.confirm("确认删除该记录吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const { success, msg } = await removePermission(currentRow.value?.Id || '0'); + if (success) { + ElMessage.success('删除成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); +}; +// ↑↑↑↑↑ 删除 ↑↑↑↑↑ + +export const handleSync = async () => { + ElMessage.warning('暂不提供此功能'); +}; \ No newline at end of file diff --git a/src/views/Recursion/Menu_1/Menu_1_1/Menu_1_1_1.vue b/src/views/Recursion/Menu_1/Menu_1_1/Menu_1_1_1.vue new file mode 100644 index 0000000..49625ae --- /dev/null +++ b/src/views/Recursion/Menu_1/Menu_1_1/Menu_1_1_1.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/src/views/Recursion/Menu_1/Menu_1_1/Menu_1_1_2.vue b/src/views/Recursion/Menu_1/Menu_1_1/Menu_1_1_2.vue new file mode 100644 index 0000000..b8ef389 --- /dev/null +++ b/src/views/Recursion/Menu_1/Menu_1_1/Menu_1_1_2.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/src/views/Recursion/Menu_1/Menu_1_2.vue b/src/views/Recursion/Menu_1/Menu_1_2.vue new file mode 100644 index 0000000..034a91f --- /dev/null +++ b/src/views/Recursion/Menu_1/Menu_1_2.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/src/views/System/BasicSetting.vue b/src/views/System/BasicSetting.vue new file mode 100644 index 0000000..7f741bd --- /dev/null +++ b/src/views/System/BasicSetting.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/System/My.vue b/src/views/System/My.vue new file mode 100644 index 0000000..92b60a3 --- /dev/null +++ b/src/views/System/My.vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/src/views/Task/QuartzJob.vue b/src/views/Task/QuartzJob.vue new file mode 100644 index 0000000..bf50b08 --- /dev/null +++ b/src/views/Task/QuartzJob.vue @@ -0,0 +1,454 @@ + + + \ No newline at end of file diff --git a/src/views/Task/quartzJobFunctions.ts b/src/views/Task/quartzJobFunctions.ts new file mode 100644 index 0000000..aa9d5ef --- /dev/null +++ b/src/views/Task/quartzJobFunctions.ts @@ -0,0 +1,231 @@ +// quartzJobFunctions.ts + +import { reactive, toRaw, ref } from 'vue'; +import { getQuartzJobListApi, addQuartzJob, editQuartzJob, removeQuartzJob } from '@/api/quartzJobApi'; // 接口 +import type { QuartzJobRequest, QuartzJob } from '@/api/quartzJobApi';// 模型类 +import { ElMessage, ElForm, ElMessageBox, ElTree } from "element-plus"; +import { formatDate } from "@/utils"; +import { useUserInfoStore } from '@/stores/userInfo'; + +export const quartzJobs = ref([]);// 数据数组 +export const listLoading = ref(false);// 表格loading +export const total = ref(0);// 总数据条数 +export const page = ref(1);//当前页 +export const pageSize = ref(20);// 每页数据条数 + +export const addFormVisible = ref(false); +export const addLoading = ref(false); +export const editFormVisible = ref(false); +export const editLoading = ref(false); +export const isResouceShow = ref(0); +// 创建一个 ref 引用 el-form +export const addFormRef = ref | null>(null); +export const editFormRef = ref | null>(null); +export const currentRow = ref(null); + +// ↓↓↓↓↓ 查询 ↓↓↓↓↓ +export const handleQuery = async (filters: { name: string }) => { + currentRow.value = null; + page.value = 1; + + const para = ref({ + page: page.value, + pageSize: 20, + f: '0', + key: filters.name, + }); + + listLoading.value = true; + try { + const { response } = await getQuartzJobListApi(para.value); + quartzJobs.value = response.data ?? []; + total.value = response.dataCount; + } finally { + listLoading.value = false; + } +}; +// ↑↑↑↑↑ 查询 ↑↑↑↑↑ + + +// ↓↓↓↓↓ 新增 ↓↓↓↓↓ +export const addForm = reactive({ + Name: "", + JobGroup: "", + Cron: "", + AssemblyName: "", + ClassName: "", + Remark: "", + RunTimes: 0, + BeginTime: "", + EndTime: "", + TriggerType: 1, // 根据需要调整默认值 + TriggerTypeBl: true, // 根据需要调整默认值 + IntervalSecond: 0, // 默认间隔为0秒 + CycleRunTimes: 0, + CycleHasRunTimes: 0, + IsStart: false, // 默认为未开始状态 + JobParams: "", + IsDeleted: false, // 默认为false表示未删除 + CreateTime: "", + Triggers: [], // 初始化为空数组 + Id: "" +}); +export const handleAdd = async () => { + addFormVisible.value = true; + // 使用引用重置表单 + if (addFormRef.value) { + addFormRef.value.resetFields(); + } + addForm.TriggerTypeBl = addForm.TriggerType == 1; +}; + +export const addSubmit = async () => { + const formEl = addFormRef.value; // 获取表单实例 + if (!formEl) return; + + await formEl.validate(async (isValid) => { + if (isValid) { + addLoading.value = true; + const postData = toRaw(addForm); + + postData.TriggerType = postData.TriggerTypeBl ? 1 : 0; + postData.CreateTime = formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"); + + console.log(postData); + const { success, msg } = await addQuartzJob(postData); + if (success) { + ElMessage.success('提交成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + + addLoading.value = false; + addFormVisible.value = false; + } else { + ElMessage.error('验证失败,请检查输入项'); + } + }); +}; + +// ↑↑↑↑↑ 新增 ↑↑↑↑↑ + + +// ↓↓↓↓↓ 编辑 ↓↓↓↓↓ +export const editForm = reactive({ + Name: "", + JobGroup: "", + Cron: "", + AssemblyName: "", + ClassName: "", + Remark: "", + RunTimes: 0, + BeginTime: "", + EndTime: "", + TriggerType: 1, // 根据需要调整默认值 + TriggerTypeBl: true, // 根据需要调整默认值 + IntervalSecond: 0, // 默认间隔为0秒 + CycleRunTimes: 0, + CycleHasRunTimes: 0, + IsStart: false, // 默认为未开始状态 + JobParams: "", + IsDeleted: false, // 默认为false表示未删除 + CreateTime: "", + Triggers: [], // 初始化为空数组 + Id: "" +}); +export const handleEdit = async () => { + if (!(currentRow.value && currentRow.value?.Id)) { + ElMessage.error('请选择要编辑的一行数据!'); + return; + } + editFormVisible.value = true; + editLoading.value = true; + if (currentRow.value) { + Object.assign(editForm, currentRow.value); + } + + editForm.TriggerTypeBl = editForm.TriggerType == 1; + + editLoading.value = false; + isResouceShow.value++; +}; +export const editSubmit = async () => { + const formEl = editFormRef.value; // 获取表单实例 + if (!formEl) return; + + await formEl.validate(async (isValid) => { + if (isValid) { + ElMessageBox.confirm("确认提交吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const postData = toRaw(editForm); + + postData.TriggerType = postData.TriggerTypeBl ? 1 : 0; + + console.log(postData); + const { success, msg } = await editQuartzJob(postData); + if (success) { + ElMessage.success('提交成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); + + editFormVisible.value = false; + + } else { + ElMessage.error('验证失败,请检查输入项'); + } + }); +}; + +// ↑↑↑↑↑ 编辑 ↑↑↑↑↑ + +// ↓↓↓↓↓ 删除 ↓↓↓↓↓ +// 删除数据 +export const handleDel = async () => { + if (!(currentRow.value && currentRow.value?.Id)) { + ElMessage.error('请选择要删除的一行数据!'); + return; + } + ElMessageBox.confirm("确认删除该记录吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const { success, msg } = await removeQuartzJob(currentRow.value?.Id || '0'); + if (success) { + ElMessage.success('删除成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); +}; +// ↑↑↑↑↑ 删除 ↑↑↑↑↑ + +export const handleStartJob = async () => { + ElMessage.warning('开启-该功能未开放'); +}; +export const handleStopJob = async () => { + ElMessage.warning('停止-该功能未开放'); +}; +export const handleReCoveryJob = async () => { + ElMessage.warning('重启-该功能未开放'); +}; +export const handlePauseJob = async () => { + ElMessage.warning('暂停-该功能未开放'); +}; +export const handleResumeJob = async () => { + ElMessage.warning('恢复-该功能未开放'); +}; +export const handleLog = async () => { + ElMessage.warning('日志查询-该功能未开放'); +}; +export const handleOverview = async () => { + ElMessage.warning('任务概括-该功能未开放'); +}; \ No newline at end of file diff --git a/src/views/Tibug/Bugs.vue b/src/views/Tibug/Bugs.vue new file mode 100644 index 0000000..b86de45 --- /dev/null +++ b/src/views/Tibug/Bugs.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/User/Roles.vue b/src/views/User/Roles.vue new file mode 100644 index 0000000..521c8db --- /dev/null +++ b/src/views/User/Roles.vue @@ -0,0 +1,247 @@ + + +@/api/roleApi \ No newline at end of file diff --git a/src/views/User/Users.vue b/src/views/User/Users.vue new file mode 100644 index 0000000..78c7e87 --- /dev/null +++ b/src/views/User/Users.vue @@ -0,0 +1,260 @@ + + + \ No newline at end of file diff --git a/src/views/User/rolesFunctions.ts b/src/views/User/rolesFunctions.ts new file mode 100644 index 0000000..aa04c47 --- /dev/null +++ b/src/views/User/rolesFunctions.ts @@ -0,0 +1,245 @@ +// roleFunctions.ts + +import { reactive, toRaw, ref } from 'vue'; +import { getDepartmentTree, type DepartmentNode } from '@/api/departmentApi'; +import { getRoleListApi, addRole, editRole, removeRole } from '@/api/roleApi'; // 接口 +import type { RoleRequest, Role } from '@/api/roleApi';// 模型类 +import { ElMessage, ElForm, ElMessageBox, ElTree } from "element-plus"; +import { formatDate } from "@/utils"; +import { useUserInfoStore } from '@/stores/userInfo'; + +export const options = ref([]); +export const roles = ref([]);// 数据数组 +export const listLoading = ref(false);// 表格loading +export const total = ref(0);// 总数据条数 +export const page = ref(1);//当前页 +export const pageSize = ref(20);// 每页数据条数 + +export const addFormVisible = ref(false); +export const addLoading = ref(false); +export const editFormVisible = ref(false); +export const editLoading = ref(false); +export const isResouceShow = ref(0); +// 创建一个 ref 引用 el-form +export const addFormRef = ref | null>(null); +export const editFormRef = ref | null>(null); +export const currentRow = ref(null); +// 引用树组件 +export const treeAddRef = ref | null>(null); +export const treeEditRef = ref | null>(null); + +// ↓↓↓↓↓ 查询 ↓↓↓↓↓ +export const handleQuery = async (filters: { name: string }) => { + currentRow.value = null; + page.value = 1; + + const para = ref({ + page: page.value, + pageSize: 20, + f: '0', + key: filters.name, + }); + + listLoading.value = true; + try { + const { response } = await getRoleListApi(para.value); + roles.value = response.data ?? []; + total.value = response.dataCount; + } finally { + listLoading.value = false; + } +}; +// ↑↑↑↑↑ 查询 ↑↑↑↑↑ + + +// ↓↓↓↓↓ 新增 ↓↓↓↓↓ +export const addForm = reactive({ + IsDeleted: false, + Name: "", + Description: "", + OrderSort: 0, + Dids: null, + AuthorityScope: -1, + Enabled: false, + CreateId: "", + CreateBy: "", + CreateTime: "", + ModifyId: null, + ModifyBy: null, + ModifyTime: "", + Id: "" +}); +export const handleAdd = async () => { + options.value = []; + addFormVisible.value = true; + // 使用引用重置表单 + if (addFormRef.value) { + addFormRef.value.resetFields(); + } + + try { + const { response } = await getDepartmentTree('0'); + isResouceShow.value++; + options.value.push(response); + addLoading.value = false; + } catch (error) { + ElMessage.error("加载机构树失败"); + } finally { + addLoading.value = false; + } +}; + +export const addSubmit = async () => { + const formEl = addFormRef.value; // 获取表单实例 + if (!formEl) return; + + await formEl.validate(async (isValid) => { + if (isValid) { + addLoading.value = true; + const postData = toRaw(addForm); + postData.CreateTime = formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"); + postData.ModifyTime = postData.CreateTime; + postData.IsDeleted = false; + + const userStore = useUserInfoStore(); + postData.CreateId = userStore.user?.uID ?? ''; + postData.CreateBy = userStore.user?.uRealName ?? ''; + + if (treeAddRef.value) { + const pids = treeAddRef.value.getCheckedKeys(); + console.log('勾选的节点值:', pids); + postData.Dids = pids.join(","); + } + + console.log(postData); + const { success, msg } = await addRole(postData); + if (success) { + ElMessage.success('提交成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + + addLoading.value = false; + addFormVisible.value = false; + } else { + ElMessage.error('验证失败,请检查输入项'); + } + }); +}; + +// ↑↑↑↑↑ 新增 ↑↑↑↑↑ + + +// ↓↓↓↓↓ 编辑 ↓↓↓↓↓ +export const editForm = reactive({ + IsDeleted: false, + Name: "", + Description: "", + OrderSort: 0, + Dids: null, + AuthorityScope: -1, + Enabled: false, + CreateId: "", + CreateBy: "", + CreateTime: "", + ModifyId: null, + ModifyBy: null, + ModifyTime: "", + Id: "" +}); +export const handleEdit = async () => { + if (!(currentRow.value && currentRow.value?.Id)) { + ElMessage.error('请选择要编辑的一行数据!'); + return; + } + options.value = []; + editFormVisible.value = true; + editLoading.value = true; + if (currentRow.value) { + Object.assign(editForm, currentRow.value); + } + + try { + const { response } = await getDepartmentTree('0'); + isResouceShow.value++; + options.value.push(response); + editLoading.value = false; + + // 部门树赋值 + setTimeout(() => { + if (treeEditRef.value) { + treeEditRef.value.setCheckedKeys(editForm.Dids?.split(",") ?? []); + } + }, 100); + + } catch (error) { + ElMessage.error("加载机构树失败"); + } finally { + editLoading.value = false; + } + + editLoading.value = false; + isResouceShow.value++; +}; +export const editSubmit = async () => { + const formEl = editFormRef.value; // 获取表单实例 + if (!formEl) return; + + await formEl.validate(async (isValid) => { + if (isValid) { + ElMessageBox.confirm("确认提交吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const postData = toRaw(editForm); + postData.ModifyTime = formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"); + + if (treeEditRef.value) { + const pids = treeEditRef.value.getCheckedKeys(); + console.log('勾选的节点值:', pids); + postData.Dids = pids.join(","); + } + console.log(postData); + const { success, msg } = await editRole(postData); + if (success) { + ElMessage.success('提交成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); + + editFormVisible.value = false; + + } else { + ElMessage.error('验证失败,请检查输入项'); + } + }); +}; + +// ↑↑↑↑↑ 编辑 ↑↑↑↑↑ + +// ↓↓↓↓↓ 删除 ↓↓↓↓↓ +// 删除数据 +export const handleDel = async () => { + if (!(currentRow.value && currentRow.value?.Id)) { + ElMessage.error('请选择要删除的一行数据!'); + return; + } + ElMessageBox.confirm("确认删除该记录吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const { success, msg } = await removeRole(currentRow.value?.Id || '0'); + if (success) { + ElMessage.success('删除成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); +}; +// ↑↑↑↑↑ 删除 ↑↑↑↑↑ \ No newline at end of file diff --git a/src/views/User/usersFunctions.ts b/src/views/User/usersFunctions.ts new file mode 100644 index 0000000..9b28454 --- /dev/null +++ b/src/views/User/usersFunctions.ts @@ -0,0 +1,252 @@ +// userFunctions.ts + +import { reactive, toRaw, ref } from 'vue'; +import { getDepartmentTree, type DepartmentNode } from '@/api/departmentApi'; +import { getUserListApi, addUser, editUser, removeUser } from '@/api/userApi'; // 接口 +import type { UserRequest, User } from '@/api/userApi';// 模型类 +import { ElMessage, ElForm, ElMessageBox, ElTree } from "element-plus"; +import { formatDate } from "@/utils"; +import { useUserInfoStore } from '@/stores/userInfo'; +import { getRoleListApi, type Role, type RoleRequest } from '@/api/roleApi'; + +export const departOptions = ref([]); +export const users = ref([]);// 数据数组 +export const roleOptions = ref([]);// 数据数组 +export const listLoading = ref(false);// 表格loading +export const total = ref(0);// 总数据条数 +export const page = ref(1);//当前页 +export const pageSize = ref(20);// 每页数据条数 + +export const addFormVisible = ref(false); +export const addLoading = ref(false); +export const editFormVisible = ref(false); +export const editLoading = ref(false); +export const isResouceShow = ref(0); +// 创建一个 ref 引用 el-form +export const addFormRef = ref | null>(null); +export const editFormRef = ref | null>(null); +export const currentRow = ref(null); + +// ↓↓↓↓↓ 查询 ↓↓↓↓↓ +export const handleQuery = async (filters: { name: string }) => { + currentRow.value = null; + page.value = 1; + + const para = ref({ + page: page.value, + pageSize: 20, + f: '0', + key: filters.name, + }); + + listLoading.value = true; + try { + const { response } = await getUserListApi(para.value); + users.value = response.data ?? []; + total.value = response.dataCount; + } finally { + listLoading.value = false; + } +}; +// ↑↑↑↑↑ 查询 ↑↑↑↑↑ + + +// ↓↓↓↓↓ 新增 ↓↓↓↓↓ +export const addForm = reactive({ + uLoginName: "", // 默认登录名为空字符串 + uLoginPWD: "", // 默认密码为空字符串 + uRealName: "", // 默认真实姓名为空字符串 + uStatus: 0, // 默认状态为 0 + DepartmentId: "", // 默认部门 ID 为空字符串 + uRemark: "", // 默认备注为空字符串 + uCreateTime: null, // 默认创建时间为空字符串 + uUpdateTime: null, // 默认更新时间为空字符串 + uLastErrTime: null, // 默认上次错误时间为空字符串 + uErrorCount: 0, // 默认错误计数为 0 + name: null, // 默认名称为 null + sex: 0, // 默认性别为 0 + age: 0, // 默认年龄为 0 + birth: "", // 默认生日为空字符串 + addr: null, // 默认地址为 null + tdIsDelete: false, // 默认未删除 + RoleNames: [], // 默认角色名称为空数组 + Dids: [], // 默认部门 ID 数组为空 + DepartmentName: "", // 默认部门名称为空字符串 + uID: "", // 默认用户 ID 为空字符串 + RIDs: [] // 默认角色 ID 数组为空 +}); +export const handleAdd = async () => { + departOptions.value = []; + addFormVisible.value = true; + // 使用引用重置表单 + if (addFormRef.value) { + addFormRef.value.resetFields(); + } + + try { + const { response } = await getDepartmentTree('0'); + isResouceShow.value++; + departOptions.value.push(response); + addLoading.value = false; + } catch (error) { + ElMessage.error("加载机构树失败"); + } finally { + addLoading.value = false; + } +}; + +export const addSubmit = async () => { + const formEl = addFormRef.value; // 获取表单实例 + if (!formEl) return; + + await formEl.validate(async (isValid) => { + if (isValid) { + addLoading.value = true; + const postData = toRaw(addForm); + + postData.birth = !postData.birth || postData.birth == "" ? formatDate(new Date(), "yyyy-MM-dd") : formatDate(new Date(postData.birth), "yyyy-MM-dd"); + postData.DepartmentId = postData.Dids?.pop() ?? ''; + + postData.uCreateTime = formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"); + postData.uUpdateTime = postData.uCreateTime; + postData.uLastErrTime = postData.uCreateTime; + + console.log(postData); + const { success, msg } = await addUser(postData); + if (success) { + ElMessage.success('提交成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + + addLoading.value = false; + addFormVisible.value = false; + } else { + ElMessage.error('验证失败,请检查输入项'); + } + }); +}; + +// ↑↑↑↑↑ 新增 ↑↑↑↑↑ + + +// ↓↓↓↓↓ 编辑 ↓↓↓↓↓ +export const editForm = reactive({ + uLoginName: "", // 默认登录名为空字符串 + uLoginPWD: "", // 默认密码为空字符串 + uRealName: "", // 默认真实姓名为空字符串 + uStatus: 0, // 默认状态为 0 + DepartmentId: "", // 默认部门 ID 为空字符串 + uRemark: "", // 默认备注为空字符串 + uCreateTime: null, // 默认创建时间为空字符串 + uUpdateTime: null, // 默认更新时间为空字符串 + uLastErrTime: null, // 默认上次错误时间为空字符串 + uErrorCount: 0, // 默认错误计数为 0 + name: null, // 默认名称为 null + sex: 0, // 默认性别为 0 + age: 0, // 默认年龄为 0 + birth: "", // 默认生日为空字符串 + addr: null, // 默认地址为 null + tdIsDelete: false, // 默认未删除 + RoleNames: [], // 默认角色名称为空数组 + Dids: [], // 默认部门 ID 数组为空 + DepartmentName: "", // 默认部门名称为空字符串 + uID: "", // 默认用户 ID 为空字符串 + RIDs: [] // 默认角色 ID 数组为空 +}); +export const handleEdit = async () => { + if (!(currentRow.value && currentRow.value?.uID)) { + ElMessage.error('请选择要编辑的一行数据!'); + return; + } + departOptions.value = []; + roleOptions.value = []; + editFormVisible.value = true; + editLoading.value = true; + if (currentRow.value) { + Object.assign(editForm, currentRow.value); + } + + try { + const roleReq = ref({ + page: 0, + pageSize: 9999, + f: '0', + key: '', + }); + const roleRsp = await getRoleListApi(roleReq.value); + roleOptions.value = roleRsp.response?.data ?? []; + + const { response } = await getDepartmentTree('0'); + departOptions.value.push(response); + + isResouceShow.value++; + editLoading.value = false; + } catch (error) { + ElMessage.error("加载机构树失败"); + } finally { + editLoading.value = false; + } + + editLoading.value = false; + isResouceShow.value++; +}; +export const editSubmit = async () => { + const formEl = editFormRef.value; // 获取表单实例 + if (!formEl) return; + + await formEl.validate(async (isValid) => { + if (isValid) { + ElMessageBox.confirm("确认提交吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const postData = toRaw(editForm); + + postData.birth = !postData.birth || postData.birth == "" ? formatDate(new Date(), "yyyy-MM-dd") : formatDate(new Date(postData.birth), "yyyy-MM-dd"); + postData.DepartmentId = postData.Dids?.pop() ?? ''; + + console.log(postData); + const { success, msg } = await editUser(postData); + if (success) { + ElMessage.success('提交成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); + + editFormVisible.value = false; + + } else { + ElMessage.error('验证失败,请检查输入项'); + } + }); +}; + +// ↑↑↑↑↑ 编辑 ↑↑↑↑↑ + +// ↓↓↓↓↓ 删除 ↓↓↓↓↓ +// 删除数据 +export const handleDel = async () => { + if (!(currentRow.value && currentRow.value?.uID)) { + ElMessage.error('请选择要删除的一行数据!'); + return; + } + ElMessageBox.confirm("确认删除该记录吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const { success, msg } = await removeUser(currentRow.value?.uID || '0'); + if (success) { + ElMessage.success('删除成功'); + await handleQuery({ name: '' }); + } else { + ElMessage.error('提交失败' + msg); + } + }); +}; +// ↑↑↑↑↑ 删除 ↑↑↑↑↑ \ No newline at end of file diff --git a/src/views/home/index.vue b/src/views/home/index.vue new file mode 100644 index 0000000..f7fa6d2 --- /dev/null +++ b/src/views/home/index.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/src/views/login/components/LoginForm.vue b/src/views/login/components/LoginForm.vue new file mode 100644 index 0000000..d1f2af4 --- /dev/null +++ b/src/views/login/components/LoginForm.vue @@ -0,0 +1,121 @@ + + + + + \ No newline at end of file diff --git a/src/views/login/index.scss b/src/views/login/index.scss new file mode 100644 index 0000000..5a0986c --- /dev/null +++ b/src/views/login/index.scss @@ -0,0 +1,94 @@ +.login-container { + height: 100%; + min-height: 550px; + background-color: #eeeeee; + background-image: url("@/assets/images/login_bg.svg"); + background-size: 100% 100%; + background-size: cover; + + .login-box { + position: relative; + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-around; + width: 96.5%; + height: 97vh; + padding: 0 50px; + background-color: rgb(255 255 255 / 80%); + border-radius: 10px; + + .dark { + position: absolute; + top: 13px; + right: 18px; + } + + .login-left { + width: 800px; + margin-right: 10px; + + .login-left-img { + width: 100%; + height: 100%; + } + } + + .login-form { + width: 420px; + padding: 50px 40px 45px; + background-color: var(--el-bg-color); + border-radius: 10px; + box-shadow: rgb(0 0 0 / 10%) 0 2px 10px 2px; + + .login-logo { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 45px; + + .login-icon { + width: 60px; + height: 52px; + } + + .logo-text { + padding: 0 0 0 25px; + margin: 0; + font-size: 42px; + font-weight: bold; + color: #34495e; + white-space: nowrap; + } + } + + .el-form-item { + margin-bottom: 40px; + } + + .login-btn { + display: flex; + justify-content: space-between; + width: 100%; + margin-top: 40px; + white-space: nowrap; + + .el-button { + width: 185px; + } + } + } + } +} + +@media screen and (width <=1250px) { + .login-left { + display: none; + } +} + +@media screen and (width <=600px) { + .login-form { + width: 97% !important; + } +} \ No newline at end of file diff --git a/src/views/login/index.vue b/src/views/login/index.vue new file mode 100644 index 0000000..76b28a7 --- /dev/null +++ b/src/views/login/index.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..e14c754 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..66b5e57 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..f094063 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/node20/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "composite": true, + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..2f0fc88 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,28 @@ +import { fileURLToPath, URL } from 'node:url' +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import vueDevTools from 'vite-plugin-vue-devtools' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + vueJsx(), + vueDevTools(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + server: { + proxy: { + '/api': { + target: 'http://localhost:9291', // 请替换为你的后端服务器地址 + changeOrigin: true, // 是否改变源 + // rewrite: (path) => path.replace(/^\/api/, ''), // 重写路径 + }, + } + } +}) \ No newline at end of file