WanGxC 8 месяцев назад
Сommit
74c77a8898
100 измененных файлов с 21212 добавлено и 0 удалено
  1. 8 0
      .env
  2. 8 0
      .env.development
  3. 11 0
      .env.local_prod
  4. 8 0
      .env.production
  5. 18 0
      .eslintignore
  6. 77 0
      .eslintrc.js
  7. 23 0
      .gitignore
  8. 39 0
      .prettierrc.js
  9. 21 0
      LICENSE
  10. 168 0
      README.en.md
  11. 208 0
      README.md
  12. 31 0
      index.html
  13. 9618 0
      package-lock.json
  14. 100 0
      package.json
  15. 4 0
      plugins.d.ts
  16. 6 0
      postcss.config.js
  17. BIN
      public/favicon.ico
  18. 13 0
      shim.d.ts
  19. 6 0
      source.d.ts
  20. 126 0
      src/App.vue
  21. 25 0
      src/api/login/index.ts
  22. 33 0
      src/api/menu/index.ts
  23. 55 0
      src/assets/iconfont/iconfont.css
  24. 0 0
      src/assets/iconfont/iconfont.js
  25. 79 0
      src/assets/iconfont/iconfont.json
  26. BIN
      src/assets/iconfont/iconfont.ttf
  27. BIN
      src/assets/iconfont/iconfont.woff
  28. BIN
      src/assets/iconfont/iconfont.woff2
  29. BIN
      src/assets/img/headerImage.png
  30. BIN
      src/assets/img/menu-tree-head-icon.png
  31. BIN
      src/assets/img/menu-tree-hidden-icon.png
  32. BIN
      src/assets/img/menu-tree-show-icon.png
  33. 6 0
      src/assets/login-bg.svg
  34. 0 0
      src/assets/login-icon-two.svg
  35. 0 0
      src/assets/login-main.svg
  36. 2823 0
      src/assets/logo-mini.svg
  37. 9 0
      src/assets/style/reset.scss
  38. 3 0
      src/assets/style/tailwind.css
  39. 26 0
      src/components/auth/auth.vue
  40. 27 0
      src/components/auth/authAll.vue
  41. 32 0
      src/components/auth/auths.vue
  42. 196 0
      src/components/avatarSelector/index.vue
  43. 143 0
      src/components/cropper/index.vue
  44. 29 0
      src/components/dept-format/index.vue
  45. 141 0
      src/components/dvaSelect/index.vue
  46. 101 0
      src/components/editor/index.vue
  47. 60 0
      src/components/editor/toolbar.ts
  48. 41 0
      src/components/foreignKey/index.vue
  49. 241 0
      src/components/iconSelector/index.vue
  50. 84 0
      src/components/iconSelector/list.vue
  51. 146 0
      src/components/importExcel/index.vue
  52. 46 0
      src/components/manyToMany/index.vue
  53. 191 0
      src/components/noticeBar/index.vue
  54. 63 0
      src/components/svgIcon/index.vue
  55. 256 0
      src/components/table/index.vue
  56. 203 0
      src/components/tableSelector/index.vue
  57. 39 0
      src/directive/authDirective.ts
  58. 178 0
      src/directive/customDirective.ts
  59. 20 0
      src/directive/index.ts
  60. 23 0
      src/directive/sizeDirective.ts
  61. 68 0
      src/i18n/index.ts
  62. 131 0
      src/i18n/lang/en.ts
  63. 146 0
      src/i18n/lang/zh-cn.ts
  64. 192 0
      src/i18n/lang/zh-tw.ts
  65. 13 0
      src/i18n/pages/formI18n/en.ts
  66. 13 0
      src/i18n/pages/formI18n/zh-cn.ts
  67. 13 0
      src/i18n/pages/formI18n/zh-tw.ts
  68. 29 0
      src/i18n/pages/login/en.ts
  69. 28 0
      src/i18n/pages/login/zh-cn.ts
  70. 28 0
      src/i18n/pages/login/zh-tw.ts
  71. 154 0
      src/layout/component/aside.vue
  72. 272 0
      src/layout/component/columnsAside.vue
  73. 18 0
      src/layout/component/header.vue
  74. 62 0
      src/layout/component/main.vue
  75. 24 0
      src/layout/footer/index.vue
  76. 50 0
      src/layout/index.vue
  77. 352 0
      src/layout/lockScreen/index.vue
  78. 96 0
      src/layout/logo/index.vue
  79. 71 0
      src/layout/main/classic.vue
  80. 71 0
      src/layout/main/columns.vue
  81. 71 0
      src/layout/main/defaults.vue
  82. 58 0
      src/layout/main/transverse.vue
  83. 146 0
      src/layout/navBars/breadcrumb/breadcrumb.vue
  84. 53 0
      src/layout/navBars/breadcrumb/closeFull.vue
  85. 107 0
      src/layout/navBars/breadcrumb/index.vue
  86. 124 0
      src/layout/navBars/breadcrumb/search.vue
  87. 824 0
      src/layout/navBars/breadcrumb/setings.vue
  88. 325 0
      src/layout/navBars/breadcrumb/user.vue
  89. 114 0
      src/layout/navBars/breadcrumb/userNews.vue
  90. 35 0
      src/layout/navBars/index.vue
  91. 138 0
      src/layout/navBars/tagsView/contextmenu.vue
  92. 726 0
      src/layout/navBars/tagsView/tagsView.vue
  93. 159 0
      src/layout/navMenu/horizontal.vue
  94. 49 0
      src/layout/navMenu/subItem.vue
  95. 102 0
      src/layout/navMenu/vertical.vue
  96. 101 0
      src/layout/routerView/iframes.vue
  97. 93 0
      src/layout/routerView/link.vue
  98. 123 0
      src/layout/routerView/parent.vue
  99. 156 0
      src/layout/upgrade/index.vue
  100. 65 0
      src/main.ts

+ 8 - 0
.env

@@ -0,0 +1,8 @@
+# port 端口号
+VITE_PORT = 8080
+VITE_API_URL = 'http://dvadmin3api.django.icu:8001'
+# open 运行 npm run dev 时自动打开浏览器
+VITE_OPEN = false
+
+# public path 配置线上环境路径(打包)、本地通过 http-server 访问时,请置空即可
+VITE_PUBLIC_PATH = /

+ 8 - 0
.env.development

@@ -0,0 +1,8 @@
+# 本地环境
+ENV = 'development'
+
+# 本地环境接口地址
+VITE_API_URL = 'http://127.0.0.1:8000'
+
+# 是否启用按钮权限
+VITE_PM_ENABLED = true

+ 11 - 0
.env.local_prod

@@ -0,0 +1,11 @@
+# 线上环境
+ENV = 'local_prod'
+
+# 线上环境接口地址
+VITE_API_URL = '/'
+
+# 是否启用按钮权限
+VITE_PM_ENABLED = true
+VITE_PUBLIC_PATH = /web/
+# dist目录
+VITE_DIST_PATH =../backend/templates/web/

+ 8 - 0
.env.production

@@ -0,0 +1,8 @@
+# 线上环境
+ENV = 'production'
+
+# 线上环境接口地址
+VITE_API_URL = '/api' # docker-compose部署不需要修改,nginx容器自动代理了这个地址
+
+# 是否启用按钮权限
+VITE_PM_ENABLED = true

+ 18 - 0
.eslintignore

@@ -0,0 +1,18 @@
+
+*.sh
+node_modules
+lib
+*.md
+*.scss
+*.woff
+*.ttf
+.vscode
+.idea
+dist
+mock
+public
+bin
+build
+config
+index.html
+src/assets

+ 77 - 0
.eslintrc.js

@@ -0,0 +1,77 @@
+module.exports = {
+	root: true,
+	env: {
+		browser: true,
+		es2021: true,
+		node: true,
+	},
+	parser: 'vue-eslint-parser',
+	parserOptions: {
+		ecmaVersion: 12,
+		parser: '@typescript-eslint/parser',
+		sourceType: 'module',
+	},
+	extends: ['plugin:vue/vue3-essential', 'plugin:vue/essential', 'eslint:recommended'],
+	plugins: ['vue', '@typescript-eslint'],
+	overrides: [
+		{
+			files: ['*.ts', '*.tsx', '*.vue'],
+			rules: {
+				'no-undef': 'off',
+			},
+		},
+	],
+	rules: {
+		// http://eslint.cn/docs/rules/
+		// https://eslint.vuejs.org/rules/
+		// https://typescript-eslint.io/rules/no-unused-vars/
+		'@typescript-eslint/ban-ts-ignore': 'off',
+		'@typescript-eslint/explicit-function-return-type': 'off',
+		'@typescript-eslint/no-explicit-any': 'off',
+		'@typescript-eslint/no-var-requires': 'off',
+		'@typescript-eslint/no-empty-function': 'off',
+		'@typescript-eslint/no-use-before-define': 'off',
+		'@typescript-eslint/ban-ts-comment': 'off',
+		'@typescript-eslint/ban-types': 'off',
+		'@typescript-eslint/no-non-null-assertion': 'off',
+		'@typescript-eslint/explicit-module-boundary-types': 'off',
+		'@typescript-eslint/no-redeclare': 'error',
+		'@typescript-eslint/no-non-null-asserted-optional-chain': 'off',
+		'@typescript-eslint/no-unused-vars': ['off'],
+		'vue/custom-event-name-casing': 'off',
+		'vue/attributes-order': 'off',
+		'vue/one-component-per-file': 'off',
+		'vue/html-closing-bracket-newline': 'off',
+		'vue/max-attributes-per-line': 'off',
+		'vue/multiline-html-element-content-newline': 'off',
+		'vue/singleline-html-element-content-newline': 'off',
+		'vue/attribute-hyphenation': 'off',
+		'vue/html-self-closing': 'off',
+		'vue/no-multiple-template-root': 'off',
+		'vue/require-default-prop': 'off',
+		'vue/no-v-model-argument': 'off',
+		'vue/no-arrow-functions-in-watch': 'off',
+		'vue/no-template-key': 'off',
+		'vue/no-v-html': 'off',
+		'vue/comment-directive': 'off',
+		'vue/no-parsing-error': 'off',
+		'vue/no-deprecated-v-on-native-modifier': 'off',
+		'vue/multi-word-component-names': 'off',
+		'no-useless-escape': 'off',
+		'no-sparse-arrays': 'off',
+		'no-prototype-builtins': 'off',
+		'no-constant-condition': 'off',
+		'no-use-before-define': 'off',
+		'no-restricted-globals': 'off',
+		'no-restricted-syntax': 'off',
+		'generator-star-spacing': 'off',
+		'no-unreachable': 'off',
+		'no-multiple-template-root': 'off',
+		'no-unused-vars': 'warn',
+		'vue/no-unused-vars': "off",
+		'no-v-model-argument': 'off',
+		'no-case-declarations': 'off',
+		'no-console': 'error',
+		'no-redeclare': 'off',
+	},
+};

+ 23 - 0
.gitignore

@@ -0,0 +1,23 @@
+.DS_Store
+node_modules
+/dist
+yarn.lock
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 39 - 0
.prettierrc.js

@@ -0,0 +1,39 @@
+module.exports = {
+	// 一行最多多少个字符
+	printWidth: 150,
+	// 指定每个缩进级别的空格数
+	tabWidth: 2,
+	// 使用制表符而不是空格缩进行
+	useTabs: true,
+	// 在语句末尾打印分号
+	semi: true,
+	// 使用单引号而不是双引号
+	singleQuote: true,
+	// 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>"
+	quoteProps: 'as-needed',
+	// 在JSX中使用单引号而不是双引号
+	jsxSingleQuote: false,
+	// 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>",默认none
+	trailingComma: 'es5',
+	// 在对象文字中的括号之间打印空格
+	bracketSpacing: true,
+	// jsx 标签的反尖括号需要换行
+	jsxBracketSameLine: false,
+	// 在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x
+	arrowParens: 'always',
+	// 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码
+	rangeStart: 0,
+	rangeEnd: Infinity,
+	// 指定要使用的解析器,不需要写文件开头的 @prettier
+	requirePragma: false,
+	// 不需要自动在文件开头插入 @prettier
+	insertPragma: false,
+	// 使用默认的折行标准 always\never\preserve
+	proseWrap: 'preserve',
+	// 指定HTML文件的全局空格敏感度 css\strict\ignore
+	htmlWhitespaceSensitivity: 'css',
+	// Vue文件脚本和样式标签缩进
+	vueIndentScriptAndStyle: false,
+	// 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
+	endOfLine: 'lf',
+};

+ 21 - 0
LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 DVAdmin,hugedream
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 168 - 0
README.en.md

@@ -0,0 +1,168 @@
+# Django-Vue3-Admin
+
+[![img](https://img.shields.io/badge/license-MIT-blue.svg)](https://gitee.com/huge-dream/django-vue3-admin/blob/master/LICENSE)  [![img](https://img.shields.io/badge/python-%3E=3.7.x-green.svg)](https://python.org/)  [![PyPI - Django Version badge](https://img.shields.io/badge/django%20versions-3.2-blue)](https://docs.djangoproject.com/zh-hans/3.2/) [![img](https://img.shields.io/badge/node-%3E%3D%2012.0.0-brightgreen)](https://nodejs.org/zh-cn/) [![img](https://gitee.com/huge-dream/django-vue3-admin/badge/star.svg?theme=dark)](https://gitee.com/huge-dream/django-vue3-admin)
+
+[preview](https://demo.dvadmin.com) | [Official website document](https://www.django-vue-admin.com) | [qq group](https://qm.qq.com/cgi-bin/qm/qr?k=fOdnHhC8DJlRHGYSnyhoB8P5rgogA6Vs&jump_from=webapi) | [community](https://bbs.django-vue-admin.com) | [plugins market](https://bbs.django-vue-admin.com/plugMarket.html) | [Github](https://github.com/liqianglog/django-vue-admin)
+
+💡 **「About」**
+
+We are a group of young people who love Code. In this hot era, we hope to calm down and bring some of our colors and colors through code.
+
+Because of love, so embrace the future
+
+## framework introduction
+
+💡 [django-vue3-admin](https://gitee.com/huge-dream/django-vue3-admin.git) Is a set of all open source rapid development platform, no reservation for individuals and enterprises free use.
+
+* 🧑‍🤝‍🧑Front-end adoption Vue3+TS+pinia+fastcrud。
+* 👭The backend uses the Python language Django framework as well as the powerful[Django REST Framework](https://pypi.org/project/djangorestframework)。
+* 👫Permission authentication use[Django REST Framework SimpleJWT](https://pypi.org/project/djangorestframework-simplejwt),Supports the multi-terminal authentication system.
+* 👬Support loading dynamic permission menu, multi - way easy permission control.
+* 💏 Special thanks: [vue-next-admin](https://lyt-top.gitee.io/vue-next-admin-doc-preview/).
+* 💡 💏 Special thanks:[jetbrains](https://www.jetbrains.com/) To provide a free IntelliJ IDEA license for this open source project.
+
+## Online experience
+
+👩‍👧‍👦👩‍👧‍👦 demo address:[https://demo.dvadmin.com](https://demo.dvadmin.com)
+
+* demo account:superadmin
+
+* demo password:admin123456
+
+👩‍👦‍👦docs:[https://django-vue-admin.com](https://django-vue-admin.com)
+
+## communication
+
+* Communication community:[click here](https://bbs.django-vue-admin.com)👩‍👦‍👦
+
+* plugins market:[click here](https://bbs.django-vue-admin.com/plugMarket.html)👩‍👦‍👦
+
+## source code url:
+
+gitee(Main push):[https://gitee.com/huge-dream/django-vue3-admin](https://gitee.com/huge-dream/django-vue3-admin)👩‍👦‍👦
+
+github:no data
+
+## core function
+
+1. 👨‍⚕️ Menu management: Configure the system menu, operation permissions, button permissions, back-end interface permissions, etc.
+2. 🧑‍⚕️ Department management: Configure the system organization (company, department, role).
+3. 👩‍⚕️ Role management: role menu permission allocation, data permission allocation, set roles according to the department for data range permission division.
+4. 🧑‍🎓 Rights Specifies the rights of the authorization role.
+5. 👨‍🎓 User management: The user is the system operator, this function mainly completes the system user configuration.
+6. 👬 Interface whitelist: specifies the interface that does not need permission verification.
+7. 🧑‍🔧 Dictionary management: Maintenance of some fixed data frequently used in the system.
+8. 🧑‍🔧 Regional management: to manage provinces, cities, counties and regions.
+9. 📁 Attachment management: Unified management of all files and pictures on the platform.
+10. 🗓 ️operation logs: log and query the system normal operation; Log and query system exception information.
+    11.🔌 [plugins market] (<https://bbs.django-vue-admin.com/plugMarket.html>) : based on the Django framework - Vue - Admin application and plug-in development.
+
+## plugins market 🔌
+
+* Celery Asynchronous task:[dvadmin-celery](https://gitee.com/huge-dream/dvadmin-celery)
+* Upgrade center backend:[dvadmin-upgrade-center](https://gitee.com/huge-dream/dvadmin-upgrade-center)
+* Upgrade center front:[dvadmin-upgrade-center-web](https://gitee.com/huge-dream/dvadmin-upgrade-center-web)
+
+## before start project you need:
+
+~~~
+Python >= 3.8.0 
+nodejs >= 14.0
+Mysql >= 5.7.0 (Optional. The default database is sqlite3. 8.0 is recommended)
+Redis(Optional, the latest edition)
+~~~
+
+## frontend♝
+
+```bash
+# clone code
+git clone https://gitee.com/huge-dream/django-vue3-admin.git
+
+# enter code dir
+cd web
+
+# install dependence
+npm install --registry=https://registry.npm.taobao.org
+
+# Start service
+npm run dev
+# Visit http://localhost:8080 in your browser
+# Parameters such as boot port can be configured in the #.env.development file
+# Build the production environment
+# npm run build
+```
+
+## backend💈
+
+~~~bash
+1. enter code dir cd backend
+2. copy ./conf/env.example.py to ./conf dir,rename as env.py
+3. in env.py configure database information
+ mysql database recommended version: 8.0
+ mysql database character set: utf8mb4
+4. install pip dependence
+ pip3 install -r requirements.txt
+5. Execute the migration command:
+ python3 manage.py makemigrations
+ python3 manage.py migrate
+6. Initialization data
+ python3 manage.py init
+7. Initialize provincial, municipal and county data:
+ python3 manage.py init_area
+8. start backend
+ python3 manage.py runserver 0.0.0.0:8000
+or daphne :
+  daphne -b 0.0.0.0 -p 8000 application.asgi:application
+~~~
+
+### visit backend swagger
+
+* visit url:[http://localhost:8080](http://localhost:8080) (The default address is this one. If you want to change it, follow the configuration file)
+* account:`superadmin` password:`admin123456`
+
+### docker-compose
+
+~~~shell
+docker-compose up -d
+# Initialize backend data (first execution only)
+docker exec -ti dvadmin-django bash
+python manage.py makemigrations 
+python manage.py migrate
+python manage.py init_area
+python manage.py init
+exit
+
+frontend url:http://127.0.0.1:8080
+backend url:http://127.0.0.1:8080/api
+# Change 127.0.0.1 to your own public ip address on the server
+account:`superadmin` password:`admin123456`
+
+# docker-compose stop
+docker-compose down
+#  docker-compose restart
+docker-compose restart
+#  docker-compose on start build
+docker-compose up -d --build
+~~~
+
+## Demo screenshot✅
+
+![image-01](https://images.gitee.com/uploads/images/2022/0530/234137_b58c8f98_5074988.png)
+
+![image-02](https://images.gitee.com/uploads/images/2022/0530/234240_39834603_5074988.png)
+
+![image-03](https://images.gitee.com/uploads/images/2022/0530/234339_35e728a0_5074988.png)
+
+![image-04](https://images.gitee.com/uploads/images/2022/0530/234426_957036b0_5074988.png)
+
+![image-05](https://images.gitee.com/uploads/images/2022/0530/234458_898be492_5074988.png)
+
+![image-06](https://images.gitee.com/uploads/images/2022/0530/234521_35b40076_5074988.png)
+
+![image-07](https://images.gitee.com/uploads/images/2022/0530/234615_c2325639_5074988.png)
+
+![image-08](https://images.gitee.com/uploads/images/2022/0530/234639_1ed6cc93_5074988.png)
+
+![image-09](https://images.gitee.com/uploads/images/2022/0530/234815_cea2c53f_5074988.png)
+
+![image-10](https://images.gitee.com/uploads/images/2022/0530/234840_5f3e5f53_5074988.png)

+ 208 - 0
README.md

@@ -0,0 +1,208 @@
+# Django-Vue3-Admin
+
+[![img](https://img.shields.io/badge/license-MIT-blue.svg)](https://gitee.com/liqianglog/django-vue-admin/blob/master/LICENSE)  [![img](https://img.shields.io/badge/python-%3E=3.7.x-green.svg)](https://python.org/)  [![PyPI - Django Version badge](https://img.shields.io/badge/django%20versions-3.2-blue)](https://docs.djangoproject.com/zh-hans/3.2/) [![img](https://img.shields.io/badge/node-%3E%3D%2012.0.0-brightgreen)](https://nodejs.org/zh-cn/) [![img](https://gitee.com/liqianglog/django-vue-admin/badge/star.svg?theme=dark)](https://gitee.com/liqianglog/django-vue-admin)
+
+[预 览](https://demo.dvadmin.com) | [官网文档](https://www.django-vue-admin.com) | [群聊](https://qm.qq.com/cgi-bin/qm/qr?k=fOdnHhC8DJlRHGYSnyhoB8P5rgogA6Vs&jump_from=webapi) | [社区](https://bbs.django-vue-admin.com) | [插件市场](https://bbs.django-vue-admin.com/plugMarket.html) | [Github](https://github.com/liqianglog/django-vue-admin)
+
+
+
+💡 **「关于」**
+
+我们是一群热爱代码的青年,在这个炙热的时代下,我们希望静下心来通过Code带来一点我们的色彩和颜色。
+
+因为热爱,所以拥抱未来!
+
+
+## 平台简介
+
+💡 [django-vue3-admin](https://gitee.com/huge-dream/django-vue3-admin.git) 是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
+    django-vue3-admin 基于 vue3 + CompositionAPI + typescript + vite + element plus, 是一款全栈,快速,开源的后台管理系统!
+
+
+
+
+* 🧑‍🤝‍🧑前端采用 Vue3+TS+pinia+fastcrud(感谢[vue-next-admin](https://lyt-top.gitee.io/vue-next-admin-doc-preview/))
+* 👭后端采用 Python 语言 Django 框架以及强大的 [Django REST Framework](https://pypi.org/project/djangorestframework)。
+* 👫权限认证使用[Django REST Framework SimpleJWT](https://pypi.org/project/djangorestframework-simplejwt),支持多终端认证系统。
+* 👬支持加载动态权限菜单,多方式轻松权限控制。
+* 💏特别鸣谢:[vue-next-admin](https://lyt-top.gitee.io/vue-next-admin-doc-preview/)。
+* 💡 特别感谢[jetbrains](https://www.jetbrains.com/) 为本开源项目提供免费的 IntelliJ IDEA 授权。
+
+#### 🏭 环境支持
+
+| Edge      | Firefox      | Chrome      | Safari      |
+| --------- | ------------ | ----------- | ----------- |
+| Edge ≥ 79 | Firefox ≥ 78 | Chrome ≥ 64 | Safari ≥ 12 |
+
+> 由于 Vue3 不再支持 IE11,故而 ElementPlus 也不支持 IE11 及之前版本。
+
+
+
+## 在线体验
+
+👩‍👧‍👦演示地址:[https://demo.dvadmin.com](https://demo.dvadmin.com)
+
+- 账号:superadmin
+
+- 密码:admin123456
+
+👩‍👦‍👦文档地址:[coding](https://dvadmin-private.coding.net/share/km/cec69f3d-30fe-47d5-bd97-e9e851f0b776/K-2)
+
+
+
+## 交流
+
+- 交流社区:[戳我](https://bbs.django-vue-admin.com)👩‍👦‍👦
+
+- 插件市场:[戳我](https://bbs.django-vue-admin.com/plugMarket.html)👩‍👦‍👦
+
+-  django-vue-admin交流01群(已满):812482043 [点击链接加入群聊](https://qm.qq.com/cgi-bin/qm/qr?k=aJVwjDvH-Es4MPJQuoO32N0SucK22TE5&jump_from=webapi)
+-  django-vue-admin交流02群(已满):687252418  [点击链接加入群聊](https://qm.qq.com/cgi-bin/qm/qr?k=4jJN4IjWGfxJ8YJXbb_gTsuWjR34WLdc&jump_from=webapi)
+-  django-vue-admin交流03群:442108213  [点击链接加入群聊](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=wsm5oSz3K8dElBYUDtLTcQSEPhINFkl8&authKey=M6sbER0z59ZakgBr5erFeZyFZU15CI52bErNZa%2FxSvvGIuVAbY0N5866v89hm%2FK4&noverify=0&group_code=442108213)
+
+- 二维码
+
+  <img src='https://images.gitee.com/uploads/images/2022/0530/233203_5fb11883_5074988.jpeg' width='200'>
+
+## 源码地址
+
+gitee地址(主推):[https://gitee.com/huge-dream/django-vue3-admin](https://gitee.com/huge-dream/django-vue3-admin)👩‍👦‍👦
+
+github地址:暂无
+
+
+## 内置功能
+
+1.  👨‍⚕️菜单管理:配置系统菜单,操作权限,按钮权限标识、后端接口权限等。
+2.  🧑‍⚕️部门管理:配置系统组织机构(公司、部门、角色)。
+3.  👩‍⚕️角色管理:角色菜单权限分配、数据权限分配、设置角色按部门进行数据范围权限划分。
+4.  🧑‍🎓按钮权限权限:授权角色的按钮权限和接口权限,可做到每一个接口都能授权数据范围。
+5.  🧑‍🎓字段权限权限:授权页面的字段显示权限。
+5.  👨‍🎓用户管理:用户是系统操作者,该功能主要完成系统用户配置。
+6.  👬接口白名单:配置不需要进行权限校验的接口。
+7.  🧑‍🔧字典管理:对系统中经常使用的一些较为固定的数据进行维护。
+8.  🧑‍🔧地区管理:对省市县区域进行管理。
+9.  📁附件管理:对平台上所有文件、图片等进行统一管理。
+10.  🗓️操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
+11.  🔌[插件市场 ](https://bbs.django-vue-admin.com/plugMarket.html):基于Django-Vue-Admin框架开发的应用和插件。
+
+##  插件市场 🔌
+
+- Celery异步任务:[dvadmin-celery](https://gitee.com/huge-dream/dvadmin-celery)
+- 升级中心后端:[dvadmin-upgrade-center](https://gitee.com/huge-dream/dvadmin-upgrade-center)
+- 升级中心前端:[dvadmin-upgrade-center-web](https://gitee.com/huge-dream/dvadmin-upgrade-center-web)
+
+## 准备工作
+~~~
+Python >= 3.8.0 (推荐3.8+版本)
+nodejs >= 14.0 (推荐最新)
+Mysql >= 5.7.0 (可选,默认数据库sqlite3,推荐8.0版本)
+Redis(可选,最新版)
+~~~
+
+## 前端♝
+
+```bash
+# 克隆项目
+git clone https://gitee.com/huge-dream/django-vue3-admin.git
+
+# 进入项目目录
+cd web
+
+# 安装依赖
+npm install --registry=https://registry.npm.taobao.org
+
+# 启动服务
+npm run dev
+# 浏览器访问 http://localhost:8080
+# .env.development 文件中可配置启动端口等参数
+# 构建生产环境
+# npm run build
+```
+
+
+
+## 后端💈
+
+~~~bash
+1. 进入项目目录 cd backend
+2. 在项目根目录中,复制 ./conf/env.example.py 文件为一份新的到 ./conf 文件夹下,并重命名为 env.py
+3. 在 env.py 中配置数据库信息
+	mysql数据库版本建议:8.0
+	mysql数据库字符集:utf8mb4
+4. 安装依赖环境
+	pip3 install -r requirements.txt
+5. 执行迁移命令:
+	python3 manage.py makemigrations
+	python3 manage.py migrate
+6. 初始化数据
+	python3 manage.py init
+7. 初始化省市县数据:
+	python3 manage.py init_area
+8. 启动项目
+	python3 manage.py runserver 0.0.0.0:8000
+或使用 daphne :
+  daphne -b 0.0.0.0 -p 8000 application.asgi:application
+~~~
+
+### 访问项目
+
+- 访问地址:[http://localhost:8080](http://localhost:8080) (默认为此地址,如有修改请按照配置文件)
+- 账号:`superadmin` 密码:`admin123456`
+
+
+
+
+
+### docker-compose 运行
+
+~~~shell
+# 先安装docker-compose (自行百度安装),执行此命令等待安装,如有使用celery插件请打开docker-compose.yml中celery 部分注释
+docker-compose up -d
+# 初始化后端数据(第一次执行即可)
+docker exec -ti dvadmin-django bash
+python manage.py makemigrations 
+python manage.py migrate
+python manage.py init_area
+python manage.py init
+exit
+
+前端地址:http://127.0.0.1:8080
+后端地址:http://127.0.0.1:8080/api
+# 在服务器上请把127.0.0.1 换成自己公网ip
+账号:superadmin 密码:admin123456
+
+# docker-compose 停止
+docker-compose down
+#  docker-compose 重启
+docker-compose restart
+#  docker-compose 启动时重新进行 build
+docker-compose up -d --build
+~~~
+
+
+
+## 演示图✅
+
+![image-01](https://images.gitee.com/uploads/images/2022/0530/234137_b58c8f98_5074988.png)
+
+![image-02](https://images.gitee.com/uploads/images/2022/0530/234240_39834603_5074988.png)
+
+![image-03](https://images.gitee.com/uploads/images/2022/0530/234339_35e728a0_5074988.png)
+
+![image-04](https://images.gitee.com/uploads/images/2022/0530/234426_957036b0_5074988.png)
+
+![image-05](https://images.gitee.com/uploads/images/2022/0530/234458_898be492_5074988.png)
+
+![image-06](https://images.gitee.com/uploads/images/2022/0530/234521_35b40076_5074988.png)
+
+![image-07](https://images.gitee.com/uploads/images/2022/0530/234615_c2325639_5074988.png)
+
+![image-08](https://images.gitee.com/uploads/images/2022/0530/234639_1ed6cc93_5074988.png)
+
+![image-09](https://images.gitee.com/uploads/images/2022/0530/234815_cea2c53f_5074988.png)
+
+![image-10](https://images.gitee.com/uploads/images/2022/0530/234840_5f3e5f53_5074988.png)
+
+
+

+ 31 - 0
index.html

@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+	<head>
+		<meta charset="utf-8" />
+		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+		<meta
+			name="keywords"
+			content="django-vue3-admin"
+		/>
+		<meta
+			name="description"
+			content="django-vue-admin 基于RBAC模型的权限控制的一整套基础开发平台,权限粒度达到列级别,前后端分离,后端采用django + django-rest-framework,前端采用基于 vue3 + CompositionAPI + typescript + vite + element plus"
+		/>
+		<link rel="icon" href="/favicon.ico" />
+		<title>django-vue-admin</title>
+	</head>
+	<body>
+    <div id="app"></div>
+    <script>
+        var _hmt = _hmt || [];
+        (function() {
+          var hm = document.createElement("script");
+          hm.src = "https://hm.baidu.com/hm.js?9ba8fc809b5584167a2fb9b31bb3970c";
+          var s = document.getElementsByTagName("script")[0];
+          s.parentNode.insertBefore(hm, s);
+        })();
+    </script>
+    <script type="module" src="/src/main.ts"></script>
+	</body>
+</html>

+ 9618 - 0
package-lock.json

@@ -0,0 +1,9618 @@
+{
+	"name": "django-vue3-admin",
+	"version": "3.0.3",
+	"lockfileVersion": 3,
+	"requires": true,
+	"packages": {
+		"": {
+			"name": "django-vue3-admin",
+			"version": "3.0.3",
+			"license": "MIT",
+			"dependencies": {
+				"@element-plus/icons-vue": "^2.0.10",
+				"@fast-crud/fast-crud": "^1.20.1",
+				"@fast-crud/fast-extends": "^1.20.1",
+				"@fast-crud/ui-element": "^1.20.1",
+				"@fast-crud/ui-interface": "^1.20.1",
+				"@iconify/vue": "^4.1.1",
+				"@types/lodash": "^4.14.202",
+				"@vitejs/plugin-vue-jsx": "^3.0.0",
+				"@wangeditor/editor": "^5.1.23",
+				"@wangeditor/editor-for-vue": "^5.1.12",
+				"autoprefixer": "^10.4.14",
+				"axios": "^1.2.1",
+				"countup.js": "^2.3.2",
+				"cropperjs": "^1.5.13",
+				"e-icon-picker": "2.1.1",
+				"echarts": "^5.4.1",
+				"echarts-gl": "^2.0.9",
+				"echarts-wordcloud": "^2.1.0",
+				"element-plus": "^2.8.1",
+				"element-tree-line": "^0.2.1",
+				"font-awesome": "^4.7.0",
+				"js-cookie": "^3.0.1",
+				"js-table2excel": "^1.0.3",
+				"jsplumb": "^2.15.6",
+				"lodash-es": "^4.17.21",
+				"mitt": "^3.0.0",
+				"nprogress": "^0.2.0",
+				"pinia": "^2.0.28",
+				"pinia-plugin-persist": "^1.0.0",
+				"postcss": "^8.4.21",
+				"print-js": "^1.6.0",
+				"qrcodejs2-fixes": "^0.0.2",
+				"qs": "^6.11.0",
+				"screenfull": "^6.0.2",
+				"sortablejs": "^1.15.0",
+				"splitpanes": "^3.1.5",
+				"tailwindcss": "^3.2.7",
+				"ts-md5": "^1.3.1",
+				"upgrade": "^1.1.0",
+				"vue": "^3.5.0",
+				"vue-clipboard3": "^2.0.0",
+				"vue-cropper": "^1.0.8",
+				"vue-grid-layout": "^3.0.0-beta1",
+				"vue-i18n": "^9.2.2",
+				"vue-router": "^4.1.6",
+				"vxe-table": "^4.4.1",
+				"xe-utils": "^3.5.7"
+			},
+			"devDependencies": {
+				"@types/node": "^18.11.13",
+				"@types/nprogress": "^0.2.0",
+				"@types/sortablejs": "^1.15.0",
+				"@typescript-eslint/eslint-plugin": "^5.46.0",
+				"@typescript-eslint/parser": "^5.46.0",
+				"@vitejs/plugin-vue": "^4.0.0",
+				"@vue/compiler-sfc": "^3.2.45",
+				"eslint": "^8.54.0",
+				"eslint-plugin-vue": "^9.8.0",
+				"prettier": "^2.8.1",
+				"sass": "^1.56.2",
+				"typescript": "^5.6.2",
+				"vite": "^4.5.3",
+				"vite-plugin-vue-setup-extend": "^0.4.0",
+				"vue-eslint-parser": "^9.1.0"
+			},
+			"engines": {
+				"node": ">=16.0.0",
+				"npm": ">= 7.0.0"
+			}
+		},
+		"node_modules/@alloc/quick-lru": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+			"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/@ampproject/remapping": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz",
+			"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@jridgewell/gen-mapping": "^0.3.5",
+				"@jridgewell/trace-mapping": "^0.3.24"
+			},
+			"engines": {
+				"node": ">=6.0.0"
+			}
+		},
+		"node_modules/@aws-crypto/crc32": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmmirror.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz",
+			"integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-crypto/util": "^5.2.0",
+				"@aws-sdk/types": "^3.222.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-crypto/crc32c": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmmirror.com/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz",
+			"integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-crypto/util": "^5.2.0",
+				"@aws-sdk/types": "^3.222.0",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@aws-crypto/sha1-browser": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmmirror.com/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz",
+			"integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-crypto/supports-web-crypto": "^5.2.0",
+				"@aws-crypto/util": "^5.2.0",
+				"@aws-sdk/types": "^3.222.0",
+				"@aws-sdk/util-locate-window": "^3.0.0",
+				"@smithy/util-utf8": "^2.0.0",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
+			"integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
+			"integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/is-array-buffer": "^2.2.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
+			"integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/util-buffer-from": "^2.2.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/@aws-crypto/sha256-browser": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmmirror.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz",
+			"integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-crypto/sha256-js": "^5.2.0",
+				"@aws-crypto/supports-web-crypto": "^5.2.0",
+				"@aws-crypto/util": "^5.2.0",
+				"@aws-sdk/types": "^3.222.0",
+				"@aws-sdk/util-locate-window": "^3.0.0",
+				"@smithy/util-utf8": "^2.0.0",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
+			"integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
+			"integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/is-array-buffer": "^2.2.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
+			"integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/util-buffer-from": "^2.2.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/@aws-crypto/sha256-js": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmmirror.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz",
+			"integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-crypto/util": "^5.2.0",
+				"@aws-sdk/types": "^3.222.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-crypto/supports-web-crypto": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmmirror.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz",
+			"integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@aws-crypto/util": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmmirror.com/@aws-crypto/util/-/util-5.2.0.tgz",
+			"integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "^3.222.0",
+				"@smithy/util-utf8": "^2.0.0",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
+			"integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
+			"integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/is-array-buffer": "^2.2.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
+			"integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/util-buffer-from": "^2.2.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/client-s3": {
+			"version": "3.651.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/client-s3/-/client-s3-3.651.0.tgz",
+			"integrity": "sha512-37+kxxjnlOAUCb1aHpoLakW4XRG23HrkX8X3cEjxaFLQxorPUiMvfAYQEQQkYD5yggaG+5aM5GAhxkTUTqA5xw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-crypto/sha1-browser": "5.2.0",
+				"@aws-crypto/sha256-browser": "5.2.0",
+				"@aws-crypto/sha256-js": "5.2.0",
+				"@aws-sdk/client-sso-oidc": "3.650.0",
+				"@aws-sdk/client-sts": "3.650.0",
+				"@aws-sdk/core": "3.649.0",
+				"@aws-sdk/credential-provider-node": "3.650.0",
+				"@aws-sdk/middleware-bucket-endpoint": "3.649.0",
+				"@aws-sdk/middleware-expect-continue": "3.649.0",
+				"@aws-sdk/middleware-flexible-checksums": "3.651.0",
+				"@aws-sdk/middleware-host-header": "3.649.0",
+				"@aws-sdk/middleware-location-constraint": "3.649.0",
+				"@aws-sdk/middleware-logger": "3.649.0",
+				"@aws-sdk/middleware-recursion-detection": "3.649.0",
+				"@aws-sdk/middleware-sdk-s3": "3.649.0",
+				"@aws-sdk/middleware-ssec": "3.649.0",
+				"@aws-sdk/middleware-user-agent": "3.649.0",
+				"@aws-sdk/region-config-resolver": "3.649.0",
+				"@aws-sdk/signature-v4-multi-region": "3.649.0",
+				"@aws-sdk/types": "3.649.0",
+				"@aws-sdk/util-endpoints": "3.649.0",
+				"@aws-sdk/util-user-agent-browser": "3.649.0",
+				"@aws-sdk/util-user-agent-node": "3.649.0",
+				"@aws-sdk/xml-builder": "3.649.0",
+				"@smithy/config-resolver": "^3.0.6",
+				"@smithy/core": "^2.4.1",
+				"@smithy/eventstream-serde-browser": "^3.0.7",
+				"@smithy/eventstream-serde-config-resolver": "^3.0.4",
+				"@smithy/eventstream-serde-node": "^3.0.6",
+				"@smithy/fetch-http-handler": "^3.2.5",
+				"@smithy/hash-blob-browser": "^3.1.3",
+				"@smithy/hash-node": "^3.0.4",
+				"@smithy/hash-stream-node": "^3.1.3",
+				"@smithy/invalid-dependency": "^3.0.4",
+				"@smithy/md5-js": "^3.0.4",
+				"@smithy/middleware-content-length": "^3.0.6",
+				"@smithy/middleware-endpoint": "^3.1.1",
+				"@smithy/middleware-retry": "^3.0.16",
+				"@smithy/middleware-serde": "^3.0.4",
+				"@smithy/middleware-stack": "^3.0.4",
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/node-http-handler": "^3.2.0",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/smithy-client": "^3.3.0",
+				"@smithy/types": "^3.4.0",
+				"@smithy/url-parser": "^3.0.4",
+				"@smithy/util-base64": "^3.0.0",
+				"@smithy/util-body-length-browser": "^3.0.0",
+				"@smithy/util-body-length-node": "^3.0.0",
+				"@smithy/util-defaults-mode-browser": "^3.0.16",
+				"@smithy/util-defaults-mode-node": "^3.0.16",
+				"@smithy/util-endpoints": "^2.1.0",
+				"@smithy/util-middleware": "^3.0.4",
+				"@smithy/util-retry": "^3.0.4",
+				"@smithy/util-stream": "^3.1.4",
+				"@smithy/util-utf8": "^3.0.0",
+				"@smithy/util-waiter": "^3.1.3",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/client-sso": {
+			"version": "3.650.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/client-sso/-/client-sso-3.650.0.tgz",
+			"integrity": "sha512-YKm14gCMChD/jlCisFlsVqB8HJujR41bl4Fup2crHwNJxhD/9LTnzwMiVVlBqlXr41Sfa6fSxczX2AMP8NM14A==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-crypto/sha256-browser": "5.2.0",
+				"@aws-crypto/sha256-js": "5.2.0",
+				"@aws-sdk/core": "3.649.0",
+				"@aws-sdk/middleware-host-header": "3.649.0",
+				"@aws-sdk/middleware-logger": "3.649.0",
+				"@aws-sdk/middleware-recursion-detection": "3.649.0",
+				"@aws-sdk/middleware-user-agent": "3.649.0",
+				"@aws-sdk/region-config-resolver": "3.649.0",
+				"@aws-sdk/types": "3.649.0",
+				"@aws-sdk/util-endpoints": "3.649.0",
+				"@aws-sdk/util-user-agent-browser": "3.649.0",
+				"@aws-sdk/util-user-agent-node": "3.649.0",
+				"@smithy/config-resolver": "^3.0.6",
+				"@smithy/core": "^2.4.1",
+				"@smithy/fetch-http-handler": "^3.2.5",
+				"@smithy/hash-node": "^3.0.4",
+				"@smithy/invalid-dependency": "^3.0.4",
+				"@smithy/middleware-content-length": "^3.0.6",
+				"@smithy/middleware-endpoint": "^3.1.1",
+				"@smithy/middleware-retry": "^3.0.16",
+				"@smithy/middleware-serde": "^3.0.4",
+				"@smithy/middleware-stack": "^3.0.4",
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/node-http-handler": "^3.2.0",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/smithy-client": "^3.3.0",
+				"@smithy/types": "^3.4.0",
+				"@smithy/url-parser": "^3.0.4",
+				"@smithy/util-base64": "^3.0.0",
+				"@smithy/util-body-length-browser": "^3.0.0",
+				"@smithy/util-body-length-node": "^3.0.0",
+				"@smithy/util-defaults-mode-browser": "^3.0.16",
+				"@smithy/util-defaults-mode-node": "^3.0.16",
+				"@smithy/util-endpoints": "^2.1.0",
+				"@smithy/util-middleware": "^3.0.4",
+				"@smithy/util-retry": "^3.0.4",
+				"@smithy/util-utf8": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/client-sso-oidc": {
+			"version": "3.650.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.650.0.tgz",
+			"integrity": "sha512-6J7IS0f8ovhvbIAZaynOYP+jPX8344UlTjwHxjaXHgFvI8axu3+NslKtEEV5oHLhgzDvrKbinsu5lgE2n4Sqng==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-crypto/sha256-browser": "5.2.0",
+				"@aws-crypto/sha256-js": "5.2.0",
+				"@aws-sdk/core": "3.649.0",
+				"@aws-sdk/credential-provider-node": "3.650.0",
+				"@aws-sdk/middleware-host-header": "3.649.0",
+				"@aws-sdk/middleware-logger": "3.649.0",
+				"@aws-sdk/middleware-recursion-detection": "3.649.0",
+				"@aws-sdk/middleware-user-agent": "3.649.0",
+				"@aws-sdk/region-config-resolver": "3.649.0",
+				"@aws-sdk/types": "3.649.0",
+				"@aws-sdk/util-endpoints": "3.649.0",
+				"@aws-sdk/util-user-agent-browser": "3.649.0",
+				"@aws-sdk/util-user-agent-node": "3.649.0",
+				"@smithy/config-resolver": "^3.0.6",
+				"@smithy/core": "^2.4.1",
+				"@smithy/fetch-http-handler": "^3.2.5",
+				"@smithy/hash-node": "^3.0.4",
+				"@smithy/invalid-dependency": "^3.0.4",
+				"@smithy/middleware-content-length": "^3.0.6",
+				"@smithy/middleware-endpoint": "^3.1.1",
+				"@smithy/middleware-retry": "^3.0.16",
+				"@smithy/middleware-serde": "^3.0.4",
+				"@smithy/middleware-stack": "^3.0.4",
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/node-http-handler": "^3.2.0",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/smithy-client": "^3.3.0",
+				"@smithy/types": "^3.4.0",
+				"@smithy/url-parser": "^3.0.4",
+				"@smithy/util-base64": "^3.0.0",
+				"@smithy/util-body-length-browser": "^3.0.0",
+				"@smithy/util-body-length-node": "^3.0.0",
+				"@smithy/util-defaults-mode-browser": "^3.0.16",
+				"@smithy/util-defaults-mode-node": "^3.0.16",
+				"@smithy/util-endpoints": "^2.1.0",
+				"@smithy/util-middleware": "^3.0.4",
+				"@smithy/util-retry": "^3.0.4",
+				"@smithy/util-utf8": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			},
+			"peerDependencies": {
+				"@aws-sdk/client-sts": "^3.650.0"
+			}
+		},
+		"node_modules/@aws-sdk/client-sts": {
+			"version": "3.650.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/client-sts/-/client-sts-3.650.0.tgz",
+			"integrity": "sha512-ISK0ZQYA7O5/WYgslpWy956lUBudGC9d7eL0FFbiL0j50N80Gx3RUv22ezvZgxJWE0W3DqNr4CE19sPYn4Lw8g==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-crypto/sha256-browser": "5.2.0",
+				"@aws-crypto/sha256-js": "5.2.0",
+				"@aws-sdk/client-sso-oidc": "3.650.0",
+				"@aws-sdk/core": "3.649.0",
+				"@aws-sdk/credential-provider-node": "3.650.0",
+				"@aws-sdk/middleware-host-header": "3.649.0",
+				"@aws-sdk/middleware-logger": "3.649.0",
+				"@aws-sdk/middleware-recursion-detection": "3.649.0",
+				"@aws-sdk/middleware-user-agent": "3.649.0",
+				"@aws-sdk/region-config-resolver": "3.649.0",
+				"@aws-sdk/types": "3.649.0",
+				"@aws-sdk/util-endpoints": "3.649.0",
+				"@aws-sdk/util-user-agent-browser": "3.649.0",
+				"@aws-sdk/util-user-agent-node": "3.649.0",
+				"@smithy/config-resolver": "^3.0.6",
+				"@smithy/core": "^2.4.1",
+				"@smithy/fetch-http-handler": "^3.2.5",
+				"@smithy/hash-node": "^3.0.4",
+				"@smithy/invalid-dependency": "^3.0.4",
+				"@smithy/middleware-content-length": "^3.0.6",
+				"@smithy/middleware-endpoint": "^3.1.1",
+				"@smithy/middleware-retry": "^3.0.16",
+				"@smithy/middleware-serde": "^3.0.4",
+				"@smithy/middleware-stack": "^3.0.4",
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/node-http-handler": "^3.2.0",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/smithy-client": "^3.3.0",
+				"@smithy/types": "^3.4.0",
+				"@smithy/url-parser": "^3.0.4",
+				"@smithy/util-base64": "^3.0.0",
+				"@smithy/util-body-length-browser": "^3.0.0",
+				"@smithy/util-body-length-node": "^3.0.0",
+				"@smithy/util-defaults-mode-browser": "^3.0.16",
+				"@smithy/util-defaults-mode-node": "^3.0.16",
+				"@smithy/util-endpoints": "^2.1.0",
+				"@smithy/util-middleware": "^3.0.4",
+				"@smithy/util-retry": "^3.0.4",
+				"@smithy/util-utf8": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/core": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/core/-/core-3.649.0.tgz",
+			"integrity": "sha512-dheG/X2y25RHE7K+TlS32kcy7TgDg1OpWV44BQRoE0OBPAWmFR1D1qjjTZ7WWrdqRPKzcnDj1qED8ncyncOX8g==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/core": "^2.4.1",
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/signature-v4": "^4.1.1",
+				"@smithy/smithy-client": "^3.3.0",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-middleware": "^3.0.4",
+				"fast-xml-parser": "4.4.1",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/credential-provider-env": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.649.0.tgz",
+			"integrity": "sha512-tViwzM1dauksA3fdRjsg0T8mcHklDa8EfveyiQKK6pUJopkqV6FQx+X5QNda0t/LrdEVlFZvwHNdXqOEfc83TA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/credential-provider-http": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.649.0.tgz",
+			"integrity": "sha512-ODAJ+AJJq6ozbns6ejGbicpsQ0dyMOpnGlg0J9J0jITQ05DKQZ581hdB8APDOZ9N8FstShP6dLZflSj8jb5fNA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/fetch-http-handler": "^3.2.5",
+				"@smithy/node-http-handler": "^3.2.0",
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/smithy-client": "^3.3.0",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-stream": "^3.1.4",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/credential-provider-ini": {
+			"version": "3.650.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.650.0.tgz",
+			"integrity": "sha512-x2M9buZxIsKuUbuDgkGHhAKYBpn0/rYdKlwuFuOhXyyAcnhvPj0lgNF2KE4ld/GF1mKr7FF/uV3G9lM6PFaYmA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/credential-provider-env": "3.649.0",
+				"@aws-sdk/credential-provider-http": "3.649.0",
+				"@aws-sdk/credential-provider-process": "3.649.0",
+				"@aws-sdk/credential-provider-sso": "3.650.0",
+				"@aws-sdk/credential-provider-web-identity": "3.649.0",
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/credential-provider-imds": "^3.2.1",
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/shared-ini-file-loader": "^3.1.5",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			},
+			"peerDependencies": {
+				"@aws-sdk/client-sts": "^3.650.0"
+			}
+		},
+		"node_modules/@aws-sdk/credential-provider-node": {
+			"version": "3.650.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.650.0.tgz",
+			"integrity": "sha512-uBra5YjzS/gWSekAogfqJfY6c+oKQkkou7Cjc4d/cpMNvQtF1IBdekJ7NaE1RfsDEz3uH1+Myd07YWZAJo/2Qw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/credential-provider-env": "3.649.0",
+				"@aws-sdk/credential-provider-http": "3.649.0",
+				"@aws-sdk/credential-provider-ini": "3.650.0",
+				"@aws-sdk/credential-provider-process": "3.649.0",
+				"@aws-sdk/credential-provider-sso": "3.650.0",
+				"@aws-sdk/credential-provider-web-identity": "3.649.0",
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/credential-provider-imds": "^3.2.1",
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/shared-ini-file-loader": "^3.1.5",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/credential-provider-process": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.649.0.tgz",
+			"integrity": "sha512-6VYPQpEVpU+6DDS/gLoI40ppuNM5RPIEprK30qZZxnhTr5wyrGOeJ7J7wbbwPOZ5dKwta290BiJDU2ipV8Y9BQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/shared-ini-file-loader": "^3.1.5",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/credential-provider-sso": {
+			"version": "3.650.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.650.0.tgz",
+			"integrity": "sha512-069nkhcwximbvyGiAC6Fr2G+yrG/p1S3NQ5BZ2cMzB1hgUKo6TvgFK7nriYI4ljMQ+UWxqPwIdTqiUmn2iJmhg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/client-sso": "3.650.0",
+				"@aws-sdk/token-providers": "3.649.0",
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/shared-ini-file-loader": "^3.1.5",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/credential-provider-web-identity": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.649.0.tgz",
+			"integrity": "sha512-XVk3WsDa0g3kQFPmnCH/LaCtGY/0R2NDv7gscYZSXiBZcG/fixasglTprgWSp8zcA0t7tEIGu9suyjz8ZwhymQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			},
+			"peerDependencies": {
+				"@aws-sdk/client-sts": "^3.649.0"
+			}
+		},
+		"node_modules/@aws-sdk/middleware-bucket-endpoint": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.649.0.tgz",
+			"integrity": "sha512-ZdDICtUU4YZkrVllTUOH1Fj/F3WShLhkfNKJE3HJ/yj6pS8JS9P2lWzHiHkHiidjrHSxc6NuBo6vuZ+182XLbw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@aws-sdk/util-arn-parser": "3.568.0",
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-config-provider": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/middleware-expect-continue": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.649.0.tgz",
+			"integrity": "sha512-pW2id/mWNd+L0/hZKp5yL3J+8rTwsamu9E69Hc5pM3qTF4K4DTZZ+A0sQbY6duIvZvc8IbQHbSMulBOLyWNP3A==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/middleware-flexible-checksums": {
+			"version": "3.651.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.651.0.tgz",
+			"integrity": "sha512-mGAOIjhNDcBK5+JD+W+Ky5YJL98jTNFTENJV/GiQ9t3CdqK3p02MNr/T6VwzEpzsJvJD23amogiEZeiqSQiibg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-crypto/crc32": "5.2.0",
+				"@aws-crypto/crc32c": "5.2.0",
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/is-array-buffer": "^3.0.0",
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-utf8": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/middleware-host-header": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.649.0.tgz",
+			"integrity": "sha512-PjAe2FocbicHVgNNwdSZ05upxIO7AgTPFtQLpnIAmoyzMcgv/zNB5fBn3uAnQSAeEPPCD+4SYVEUD1hw1ZBvEg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/middleware-location-constraint": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.649.0.tgz",
+			"integrity": "sha512-O9AXhaFUQx34UTnp/cKCcaWW/IVk4mntlWfFjsIxvRatamKaY33b5fOiakGG+J1t0QFK0niDBSvOYUR1fdlHzw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/middleware-logger": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-logger/-/middleware-logger-3.649.0.tgz",
+			"integrity": "sha512-qdqRx6q7lYC6KL/NT9x3ShTL0TBuxdkCczGzHzY3AnOoYUjnCDH7Vlq867O6MAvb4EnGNECFzIgtkZkQ4FhY5w==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/middleware-recursion-detection": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.649.0.tgz",
+			"integrity": "sha512-IPnO4wlmaLRf6IYmJW2i8gJ2+UPXX0hDRv1it7Qf8DpBW+lGyF2rnoN7NrFX0WIxdGOlJF1RcOr/HjXb2QeXfQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/middleware-sdk-s3": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.649.0.tgz",
+			"integrity": "sha512-3H8735xTAD7IxNdreT6qv2YRk4CGOGfz8ufZo5pROJYZ4N5rfcdDMvb8szMSLvQHegqS4v1DqO9nrOPgc0I2Qg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/core": "3.649.0",
+				"@aws-sdk/types": "3.649.0",
+				"@aws-sdk/util-arn-parser": "3.568.0",
+				"@smithy/core": "^2.4.1",
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/signature-v4": "^4.1.1",
+				"@smithy/smithy-client": "^3.3.0",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-config-provider": "^3.0.0",
+				"@smithy/util-middleware": "^3.0.4",
+				"@smithy/util-stream": "^3.1.4",
+				"@smithy/util-utf8": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/middleware-ssec": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.649.0.tgz",
+			"integrity": "sha512-r/WBIpX+Kcx+AV5vJ+LbdDOuibk7spBqcFK2LytQjOZKPksZNRAM99khbFe9vr9S1+uDmCLVjAVkIfQ5seJrOw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/middleware-user-agent": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.649.0.tgz",
+			"integrity": "sha512-q6sO10dnCXoxe9thobMJxekhJumzd1j6dxcE1+qJdYKHJr6yYgWbogJqrLCpWd30w0lEvnuAHK8lN2kWLdJxJw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@aws-sdk/util-endpoints": "3.649.0",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/region-config-resolver": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.649.0.tgz",
+			"integrity": "sha512-xURBvdQXvRvca5Du8IlC5FyCj3pkw8Z75+373J3Wb+vyg8GjD14HfKk1Je1HCCQDyIE9VB/scYDcm9ri0ppePw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-config-provider": "^3.0.0",
+				"@smithy/util-middleware": "^3.0.4",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/s3-request-presigner": {
+			"version": "3.651.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.651.0.tgz",
+			"integrity": "sha512-NjxdMiGphDv69BO5KV1QSzk4P9R3rJ3NnqGXQdd7Ip/KmWFj9jx5z0psdT+xJruGTBK4jKg0r/lR0m7+t6pguQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/signature-v4-multi-region": "3.649.0",
+				"@aws-sdk/types": "3.649.0",
+				"@aws-sdk/util-format-url": "3.649.0",
+				"@smithy/middleware-endpoint": "^3.1.1",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/smithy-client": "^3.3.0",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/signature-v4-crt": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/signature-v4-crt/-/signature-v4-crt-3.649.0.tgz",
+			"integrity": "sha512-fpTF+eTBanmTdgXb5fDogosGZlPJZqlNIkwcRFMbIQlHTIPzCH7EkWeASBcckwaF4d66FgUvTmGuS3J5Wwio+w==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/signature-v4-multi-region": "3.649.0",
+				"@aws-sdk/types": "3.649.0",
+				"@aws-sdk/util-user-agent-node": "3.649.0",
+				"@smithy/querystring-parser": "^3.0.4",
+				"@smithy/signature-v4": "^4.1.1",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-middleware": "^3.0.4",
+				"aws-crt": "^1.18.3",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/signature-v4-multi-region": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.649.0.tgz",
+			"integrity": "sha512-feJfSHtCarFmTMZSE5k7/A+m4FrdCrmotljc/AmXArWy3wl8XFyxE5tFVW/PiUgbgeoVDN+ZLt3YYtItHfNUWQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/middleware-sdk-s3": "3.649.0",
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/signature-v4": "^4.1.1",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/token-providers": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/token-providers/-/token-providers-3.649.0.tgz",
+			"integrity": "sha512-ZBqr+JuXI9RiN+4DSZykMx5gxpL8Dr3exIfFhxMiwAP3DQojwl0ub8ONjMuAjq9OvmX6n+jHZL6fBnNgnNFC8w==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/shared-ini-file-loader": "^3.1.5",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			},
+			"peerDependencies": {
+				"@aws-sdk/client-sso-oidc": "^3.649.0"
+			}
+		},
+		"node_modules/@aws-sdk/types": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/types/-/types-3.649.0.tgz",
+			"integrity": "sha512-PuPw8RysbhJNlaD2d/PzOTf8sbf4Dsn2b7hwyGh7YVG3S75yTpxSAZxrnhKsz9fStgqFmnw/jUfV/G+uQAeTVw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/util-arn-parser": {
+			"version": "3.568.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz",
+			"integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/util-endpoints": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/util-endpoints/-/util-endpoints-3.649.0.tgz",
+			"integrity": "sha512-bZI1Wc3R/KibdDVWFxX/N4AoJFG4VJ92Dp4WYmOrVD6VPkb8jPz7ZeiYc7YwPl8NoDjYyPneBV0lEoK/V8OKAA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-endpoints": "^2.1.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/util-format-url": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/util-format-url/-/util-format-url-3.649.0.tgz",
+			"integrity": "sha512-I5olOLkXQRJWAaoTSTXcycNBJ26daeEpgxYD6VPpQma9StFVK7a0MbHa1QGkOy9eVTTuf6xb2U1eiCWDWn3TXA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/querystring-builder": "^3.0.4",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/util-locate-window": {
+			"version": "3.568.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz",
+			"integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@aws-sdk/util-user-agent-browser": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.649.0.tgz",
+			"integrity": "sha512-IY43r256LhKAvdEVQO/FPdUyVpcZS5EVxh/WHVdNzuN1bNLoUK2rIzuZqVA0EGguvCxoXVmQv9m50GvG7cGktg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/types": "^3.4.0",
+				"bowser": "^2.11.0",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@aws-sdk/util-user-agent-node": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.649.0.tgz",
+			"integrity": "sha512-x5DiLpZDG/AJmCIBnE3Xhpwy35QIo3WqNiOpw6ExVs1NydbM/e90zFPSfhME0FM66D/WorigvluBxxwjxDm/GA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/types": "3.649.0",
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			},
+			"peerDependencies": {
+				"aws-crt": ">=1.0.0"
+			},
+			"peerDependenciesMeta": {
+				"aws-crt": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@aws-sdk/util-utf8-browser": {
+			"version": "3.259.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz",
+			"integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.3.1"
+			}
+		},
+		"node_modules/@aws-sdk/xml-builder": {
+			"version": "3.649.0",
+			"resolved": "https://registry.npmmirror.com/@aws-sdk/xml-builder/-/xml-builder-3.649.0.tgz",
+			"integrity": "sha512-XVESKkK7m5LdCVzZ3NvAja40BEyCrfPqtaiFAAhJIvW2U1Edyugf2o3XikuQY62crGT6BZagxJFgOiLKvuTiTg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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/core/node_modules/semver": {
+			"version": "6.3.1",
+			"resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
+			"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+			"license": "ISC",
+			"bin": {
+				"semver": "bin/semver.js"
+			}
+		},
+		"node_modules/@babel/generator": {
+			"version": "7.25.6",
+			"resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.25.6.tgz",
+			"integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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-compilation-targets/node_modules/lru-cache": {
+			"version": "5.1.1",
+			"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
+			"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+			"license": "ISC",
+			"dependencies": {
+				"yallist": "^3.0.2"
+			}
+		},
+		"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+			"version": "6.3.1",
+			"resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
+			"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+			"license": "ISC",
+			"bin": {
+				"semver": "bin/semver.js"
+			}
+		},
+		"node_modules/@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==",
+			"license": "MIT",
+			"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-create-class-features-plugin/node_modules/semver": {
+			"version": "6.3.1",
+			"resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
+			"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+			"license": "ISC",
+			"bin": {
+				"semver": "bin/semver.js"
+			}
+		},
+		"node_modules/@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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/types": "^7.25.6"
+			},
+			"bin": {
+				"parser": "bin/babel-parser.js"
+			},
+			"engines": {
+				"node": ">=6.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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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/runtime": {
+			"version": "7.25.6",
+			"resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.25.6.tgz",
+			"integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
+			"license": "MIT",
+			"dependencies": {
+				"regenerator-runtime": "^0.14.0"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/@babel/runtime-corejs2": {
+			"version": "7.25.6",
+			"resolved": "https://registry.npmmirror.com/@babel/runtime-corejs2/-/runtime-corejs2-7.25.6.tgz",
+			"integrity": "sha512-24uCmOJPrsnS7HtRamCibYabHRV0bscPJNFFcyKgj7FqUA0V5XcbZUmz9PVNDW4L+euMsZtCIetU1LxTmUaIlA==",
+			"license": "MIT",
+			"dependencies": {
+				"core-js": "^2.6.12",
+				"regenerator-runtime": "^0.14.0"
+			},
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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/@ctrl/tinycolor": {
+			"version": "3.6.1",
+			"resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
+			"integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/@element-plus/icons-vue": {
+			"version": "2.3.1",
+			"resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
+			"integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
+			"license": "MIT",
+			"peerDependencies": {
+				"vue": "^3.2.0"
+			}
+		},
+		"node_modules/@esbuild/android-arm": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
+			"integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
+			"cpu": [
+				"arm"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"android"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/android-arm64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
+			"integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
+			"cpu": [
+				"arm64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"android"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/android-x64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
+			"integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
+			"cpu": [
+				"x64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"android"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/darwin-arm64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
+			"integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
+			"cpu": [
+				"arm64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"darwin"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/darwin-x64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
+			"integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
+			"cpu": [
+				"x64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"darwin"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/freebsd-arm64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
+			"integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
+			"cpu": [
+				"arm64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"freebsd"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/freebsd-x64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
+			"integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
+			"cpu": [
+				"x64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"freebsd"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-arm": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
+			"integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
+			"cpu": [
+				"arm"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-arm64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
+			"integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
+			"cpu": [
+				"arm64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-ia32": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
+			"integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
+			"cpu": [
+				"ia32"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-loong64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
+			"integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
+			"cpu": [
+				"loong64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-mips64el": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
+			"integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
+			"cpu": [
+				"mips64el"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-ppc64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
+			"integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
+			"cpu": [
+				"ppc64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-riscv64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
+			"integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
+			"cpu": [
+				"riscv64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-s390x": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
+			"integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
+			"cpu": [
+				"s390x"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/linux-x64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
+			"integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
+			"cpu": [
+				"x64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"linux"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/netbsd-x64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
+			"integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
+			"cpu": [
+				"x64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"netbsd"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/openbsd-x64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
+			"integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
+			"cpu": [
+				"x64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"openbsd"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/sunos-x64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
+			"integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
+			"cpu": [
+				"x64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"sunos"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/win32-arm64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
+			"integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
+			"cpu": [
+				"arm64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"win32"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/win32-ia32": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
+			"integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
+			"cpu": [
+				"ia32"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"win32"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@esbuild/win32-x64": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+			"integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
+			"cpu": [
+				"x64"
+			],
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"win32"
+			],
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@eslint-community/eslint-utils": {
+			"version": "4.4.0",
+			"resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+			"integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"eslint-visitor-keys": "^3.3.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"peerDependencies": {
+				"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+			}
+		},
+		"node_modules/@eslint-community/regexpp": {
+			"version": "4.11.0",
+			"resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+			"integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+			}
+		},
+		"node_modules/@eslint/eslintrc": {
+			"version": "2.1.4",
+			"resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+			"integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ajv": "^6.12.4",
+				"debug": "^4.3.2",
+				"espree": "^9.6.0",
+				"globals": "^13.19.0",
+				"ignore": "^5.2.0",
+				"import-fresh": "^3.2.1",
+				"js-yaml": "^4.1.0",
+				"minimatch": "^3.1.2",
+				"strip-json-comments": "^3.1.1"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/@eslint/eslintrc/node_modules/globals": {
+			"version": "13.24.0",
+			"resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz",
+			"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"type-fest": "^0.20.2"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/@eslint/js": {
+			"version": "8.57.0",
+			"resolved": "https://registry.npmmirror.com/@eslint/js/-/js-8.57.0.tgz",
+			"integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			}
+		},
+		"node_modules/@fast-crud/fast-crud": {
+			"version": "1.21.2",
+			"resolved": "https://registry.npmmirror.com/@fast-crud/fast-crud/-/fast-crud-1.21.2.tgz",
+			"integrity": "sha512-SEr3oUyuVlOnc+Ga35DmiPUABc4gy+lb4S7ZEg6b0rPkbjuHScWq+ecHd00xd9XIkAtSw001sEZiWUWmHAkruw==",
+			"license": "MIT",
+			"dependencies": {
+				"file-saver": "^2.0.5",
+				"lru-cache": "^10.0.0",
+				"vuedraggable-es": "^4.1.1",
+				"xlsx": "^0.18.5"
+			}
+		},
+		"node_modules/@fast-crud/fast-extends": {
+			"version": "1.21.2",
+			"resolved": "https://registry.npmmirror.com/@fast-crud/fast-extends/-/fast-extends-1.21.2.tgz",
+			"integrity": "sha512-vy1q9qzEkgpbWY+/IN/vm5o5k2yNupZmIzdfJHCNs3xgpBQtrZ5m4CP4ZOUJlOB7ECi6vDWCWznqMXjA9xmGAg==",
+			"license": "MIT",
+			"dependencies": {
+				"@aws-sdk/client-s3": "^3.383.0",
+				"@aws-sdk/s3-request-presigner": "^3.383.0",
+				"@aws-sdk/signature-v4-crt": "^3.378.0",
+				"@soerenmartius/vue3-clipboard": "^0.1.2",
+				"@wangeditor/editor": "^5.1.23",
+				"@wangeditor/editor-for-vue": "^5.1.12",
+				"ali-oss": "^6.18.0",
+				"cos-js-sdk-v5": "^1.4.19",
+				"cropperjs": "^1.5.13",
+				"dayjs": "^1.11.9",
+				"glob": "^10.3.3",
+				"humanize-duration": "^3.29.0",
+				"jsoneditor": "^9.10.2",
+				"lodash-es": "^4.17.21",
+				"object-assign": "^4.1.1",
+				"qiniu-js": "3.4.1",
+				"quill": "^1.3.7",
+				"vue-cropperjs": "^5.0.0"
+			}
+		},
+		"node_modules/@fast-crud/ui-element": {
+			"version": "1.21.2",
+			"resolved": "https://registry.npmmirror.com/@fast-crud/ui-element/-/ui-element-1.21.2.tgz",
+			"integrity": "sha512-HzxZx8iyMZ04Myi8ewUsd8+j2S/ItNBiWD86RhWY+ZzFCYm0HsSZP6a9a1UHYaMpm05DZ2BLvAhvPPyF0Sl2GQ==",
+			"license": "MIT"
+		},
+		"node_modules/@fast-crud/ui-interface": {
+			"version": "1.21.2",
+			"resolved": "https://registry.npmmirror.com/@fast-crud/ui-interface/-/ui-interface-1.21.2.tgz",
+			"integrity": "sha512-XyKq4sv9k9ku2sE4BsEJePGLeqFAiD1xTavKD+KIY52nBn7xiis7mUP35cKsnpPkAsHIl1rvS4cv+XZMAfUlSQ==",
+			"license": "MIT",
+			"dependencies": {
+				"lodash-es": "^4.17.21"
+			}
+		},
+		"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT"
+		},
+		"node_modules/@httptoolkit/websocket-stream": {
+			"version": "6.0.1",
+			"resolved": "https://registry.npmmirror.com/@httptoolkit/websocket-stream/-/websocket-stream-6.0.1.tgz",
+			"integrity": "sha512-A0NOZI+Glp3Xgcz6Na7i7o09+/+xm2m0UCU8gdtM2nIv6/cjLmhMZMqehSpTlgbx9omtLmV8LVqOskPEyWnmZQ==",
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"@types/ws": "*",
+				"duplexify": "^3.5.1",
+				"inherits": "^2.0.1",
+				"isomorphic-ws": "^4.0.1",
+				"readable-stream": "^2.3.3",
+				"safe-buffer": "^5.1.2",
+				"ws": "*",
+				"xtend": "^4.0.0"
+			}
+		},
+		"node_modules/@humanwhocodes/config-array": {
+			"version": "0.11.14",
+			"resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+			"integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+			"deprecated": "Use @eslint/config-array instead",
+			"dev": true,
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@humanwhocodes/object-schema": "^2.0.2",
+				"debug": "^4.3.1",
+				"minimatch": "^3.0.5"
+			},
+			"engines": {
+				"node": ">=10.10.0"
+			}
+		},
+		"node_modules/@humanwhocodes/module-importer": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+			"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=12.22"
+			},
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/nzakas"
+			}
+		},
+		"node_modules/@humanwhocodes/object-schema": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+			"integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+			"deprecated": "Use @eslint/object-schema instead",
+			"dev": true,
+			"license": "BSD-3-Clause"
+		},
+		"node_modules/@iconify/types": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmmirror.com/@iconify/types/-/types-2.0.0.tgz",
+			"integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
+			"license": "MIT"
+		},
+		"node_modules/@iconify/vue": {
+			"version": "4.1.2",
+			"resolved": "https://registry.npmmirror.com/@iconify/vue/-/vue-4.1.2.tgz",
+			"integrity": "sha512-CQnYqLiQD5LOAaXhBrmj1mdL2/NCJvwcC4jtW2Z8ukhThiFkLDkutarTOV2trfc9EXqUqRs0KqXOL9pZ/IyysA==",
+			"license": "MIT",
+			"dependencies": {
+				"@iconify/types": "^2.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/cyberalien"
+			},
+			"peerDependencies": {
+				"vue": ">=3"
+			}
+		},
+		"node_modules/@interactjs/actions": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/actions/-/actions-1.10.27.tgz",
+			"integrity": "sha512-FCRg5KwB+stkPcAMx/Cn0fgGP6p4LyMX9S/Upcn/W+hpYme31bPi54PCqmOebzz6myTthN6zFf9jMyLOqtI/gg==",
+			"license": "MIT",
+			"optionalDependencies": {
+				"@interactjs/interact": "1.10.27"
+			},
+			"peerDependencies": {
+				"@interactjs/core": "1.10.27",
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/auto-scroll": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/auto-scroll/-/auto-scroll-1.10.27.tgz",
+			"integrity": "sha512-zPg5TnVsZv+9Hnt4qnbxLvBMf+rIWHkoJVoSETEbLNaj90C8hIyr0pVwukSUySSgDhCgQ7np0f3pg4INLq9beQ==",
+			"license": "MIT",
+			"optionalDependencies": {
+				"@interactjs/interact": "1.10.27"
+			},
+			"peerDependencies": {
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/auto-start": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/auto-start/-/auto-start-1.10.27.tgz",
+			"integrity": "sha512-ECLBO/nxmaF1knncJKIE5F7la3KKRgEkn0Cu2JTPOYj9xy/LpfYElo3wkRHsodgOqF651nR70GK2/IzPR2lO9A==",
+			"license": "MIT",
+			"optionalDependencies": {
+				"@interactjs/interact": "1.10.27"
+			},
+			"peerDependencies": {
+				"@interactjs/core": "1.10.27",
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/core": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/core/-/core-1.10.27.tgz",
+			"integrity": "sha512-SliUr/3ZbLAdED8LokzYzWHWMdCB5Cq+UnpXuRy+BIod1j97m4IUFf/D1iIKUBBjBcucgXbz28z96WnenVCB7Q==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/dev-tools": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/dev-tools/-/dev-tools-1.10.27.tgz",
+			"integrity": "sha512-YolmBwRaKH1gWbvyLeV3m5QSwtD38lOZnCBA87PCAlcd9PQAC2gb03fEPeEyD336bE20oLB8f0WZt4Wre+afiw==",
+			"license": "MIT",
+			"optionalDependencies": {
+				"@interactjs/interact": "1.10.27",
+				"vue": "3"
+			},
+			"peerDependencies": {
+				"@interactjs/modifiers": "1.10.27",
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/inertia": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/inertia/-/inertia-1.10.27.tgz",
+			"integrity": "sha512-S/SVj/M0D+wWWPVXHcXN/YUWOK51LFJsEA+CTgVnFhlSU04+1FUvNLwilCZcHgECu1RJxZNKDwZysDATg+r8jQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@interactjs/offset": "1.10.27"
+			},
+			"optionalDependencies": {
+				"@interactjs/interact": "1.10.27"
+			},
+			"peerDependencies": {
+				"@interactjs/core": "1.10.27",
+				"@interactjs/modifiers": "1.10.27",
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/interact": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/interact/-/interact-1.10.27.tgz",
+			"integrity": "sha512-XdH3A2UUzjEFGGJgFuJlhiz99tE8jB8xNh/DmnoMuL6uOQPxNA+sWRnzEVjG0+zY2P3/dbhEpi4Cn3FLPzydwA==",
+			"license": "MIT",
+			"dependencies": {
+				"@interactjs/core": "1.10.27",
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/interactjs": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/interactjs/-/interactjs-1.10.27.tgz",
+			"integrity": "sha512-UwhfUZMZVXUY72efPABuKSBz1sUY+r+49v8t6Ku9o5Jq76AKg9mwmdGszIlOn3ppnFDDjvtzK/8TL+Sbd0EQEA==",
+			"license": "MIT",
+			"dependencies": {
+				"@interactjs/actions": "1.10.27",
+				"@interactjs/auto-scroll": "1.10.27",
+				"@interactjs/auto-start": "1.10.27",
+				"@interactjs/core": "1.10.27",
+				"@interactjs/dev-tools": "1.10.27",
+				"@interactjs/inertia": "1.10.27",
+				"@interactjs/interact": "1.10.27",
+				"@interactjs/modifiers": "1.10.27",
+				"@interactjs/offset": "1.10.27",
+				"@interactjs/pointer-events": "1.10.27",
+				"@interactjs/reflow": "1.10.27",
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/modifiers": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/modifiers/-/modifiers-1.10.27.tgz",
+			"integrity": "sha512-ei/qfoQ+9/8k6WzNzdNqHI6cWkIV576N4Ap16r5CoqOWwhA6Xzj3OMHf1g0t1O4eSq2HdJsVJn3eLNfw9HsbeQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@interactjs/snappers": "1.10.27"
+			},
+			"optionalDependencies": {
+				"@interactjs/interact": "1.10.27"
+			},
+			"peerDependencies": {
+				"@interactjs/core": "1.10.27",
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/offset": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/offset/-/offset-1.10.27.tgz",
+			"integrity": "sha512-AezsLiuK+Qv4jXdYuRa65HJ2pMFMZPlqiAep6ZRLwhP9HE7O75c0EAm+gfx+dpPrHNHs6J9LaiKSZl+B+A2qAw==",
+			"license": "MIT",
+			"optionalDependencies": {
+				"@interactjs/interact": "1.10.27"
+			},
+			"peerDependencies": {
+				"@interactjs/core": "1.10.27",
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/pointer-events": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/pointer-events/-/pointer-events-1.10.27.tgz",
+			"integrity": "sha512-Yo5SS6PhWfC93gHNxnwwW0wvebo5hSYJKGaSnAHO4f9Lh25yibecMnmPBmiEfWVcdMboK/kXrme43mHQaRegVg==",
+			"license": "MIT",
+			"optionalDependencies": {
+				"@interactjs/interact": "1.10.27"
+			},
+			"peerDependencies": {
+				"@interactjs/core": "1.10.27",
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/reflow": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/reflow/-/reflow-1.10.27.tgz",
+			"integrity": "sha512-Msm0QdYFr40oSsPFxyCR3dHN/pQx34k7QSkdN1uIsUn/drrm+YSFvrvVOu99DFOwr7gTThr5vNe06Sz4vubTSA==",
+			"license": "MIT",
+			"optionalDependencies": {
+				"@interactjs/interact": "1.10.27"
+			},
+			"peerDependencies": {
+				"@interactjs/core": "1.10.27",
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/snappers": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/snappers/-/snappers-1.10.27.tgz",
+			"integrity": "sha512-HZLZ0XSi6HI08OmTv/HKG6AltQoaKAALLQ+KDW92utj3XSgw7oren0KsWUKPhaPg3Av7R1jFQd08s+uafqIlLw==",
+			"license": "MIT",
+			"optionalDependencies": {
+				"@interactjs/interact": "1.10.27"
+			},
+			"peerDependencies": {
+				"@interactjs/utils": "1.10.27"
+			}
+		},
+		"node_modules/@interactjs/utils": {
+			"version": "1.10.27",
+			"resolved": "https://registry.npmmirror.com/@interactjs/utils/-/utils-1.10.27.tgz",
+			"integrity": "sha512-+qfLOio2OxQqg1cXSnRaCl+N8MQDQLDS9w+aOGxH8YLAhIMyt7Asxx/46//sT8orgsi16pmlBPtngPHT9s8zKw==",
+			"license": "MIT"
+		},
+		"node_modules/@intlify/core-base": {
+			"version": "9.14.0",
+			"resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.14.0.tgz",
+			"integrity": "sha512-zJn0imh9HIsZZUtt9v8T16PeVstPv6bP2YzlrYJwoF8F30gs4brZBwW2KK6EI5WYKFi3NeqX6+UU4gniz5TkGg==",
+			"license": "MIT",
+			"dependencies": {
+				"@intlify/message-compiler": "9.14.0",
+				"@intlify/shared": "9.14.0"
+			},
+			"engines": {
+				"node": ">= 16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			}
+		},
+		"node_modules/@intlify/message-compiler": {
+			"version": "9.14.0",
+			"resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.14.0.tgz",
+			"integrity": "sha512-sXNsoMI0YsipSXW8SR75drmVK56tnJHoYbPXUv2Cf9lz6FzvwsosFm6JtC1oQZI/kU+n7qx0qRrEWkeYFTgETA==",
+			"license": "MIT",
+			"dependencies": {
+				"@intlify/shared": "9.14.0",
+				"source-map-js": "^1.0.2"
+			},
+			"engines": {
+				"node": ">= 16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			}
+		},
+		"node_modules/@intlify/shared": {
+			"version": "9.14.0",
+			"resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.14.0.tgz",
+			"integrity": "sha512-r+N8KRQL7LgN1TMTs1A2svfuAU0J94Wu9wWdJVJqYsoMMLIeJxrPjazihfHpmJqfgZq0ah3Y9Q4pgWV2O90Fyg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			}
+		},
+		"node_modules/@isaacs/cliui": {
+			"version": "8.0.2",
+			"resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz",
+			"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+			"license": "ISC",
+			"dependencies": {
+				"string-width": "^5.1.2",
+				"string-width-cjs": "npm:string-width@^4.2.0",
+				"strip-ansi": "^7.0.1",
+				"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+				"wrap-ansi": "^8.1.0",
+				"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+			},
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+			"version": "6.1.0",
+			"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.1.0.tgz",
+			"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-regex?sponsor=1"
+			}
+		},
+		"node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+			"version": "7.1.0",
+			"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz",
+			"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+			"license": "MIT",
+			"dependencies": {
+				"ansi-regex": "^6.0.1"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/strip-ansi?sponsor=1"
+			}
+		},
+		"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==",
+			"license": "MIT",
+			"dependencies": {
+				"@jridgewell/set-array": "^1.2.1",
+				"@jridgewell/sourcemap-codec": "^1.4.10",
+				"@jridgewell/trace-mapping": "^0.3.24"
+			},
+			"engines": {
+				"node": ">=6.0.0"
+			}
+		},
+		"node_modules/@jridgewell/resolve-uri": {
+			"version": "3.1.2",
+			"resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+			"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=6.0.0"
+			}
+		},
+		"node_modules/@jridgewell/set-array": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+			"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=6.0.0"
+			}
+		},
+		"node_modules/@jridgewell/sourcemap-codec": {
+			"version": "1.5.0",
+			"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+			"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+			"license": "MIT"
+		},
+		"node_modules/@jridgewell/trace-mapping": {
+			"version": "0.3.25",
+			"resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+			"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@jridgewell/resolve-uri": "^3.1.0",
+				"@jridgewell/sourcemap-codec": "^1.4.14"
+			}
+		},
+		"node_modules/@nodelib/fs.scandir": {
+			"version": "2.1.5",
+			"resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+			"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+			"license": "MIT",
+			"dependencies": {
+				"@nodelib/fs.stat": "2.0.5",
+				"run-parallel": "^1.1.9"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/@nodelib/fs.stat": {
+			"version": "2.0.5",
+			"resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+			"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/@nodelib/fs.walk": {
+			"version": "1.2.8",
+			"resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+			"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+			"license": "MIT",
+			"dependencies": {
+				"@nodelib/fs.scandir": "2.1.5",
+				"fastq": "^1.6.0"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/@pkgjs/parseargs": {
+			"version": "0.11.0",
+			"resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+			"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+			"license": "MIT",
+			"optional": true,
+			"engines": {
+				"node": ">=14"
+			}
+		},
+		"node_modules/@popperjs/core": {
+			"version": "2.11.8",
+			"resolved": "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.8.tgz",
+			"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+			"license": "MIT",
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/popperjs"
+			}
+		},
+		"node_modules/@smithy/abort-controller": {
+			"version": "3.1.2",
+			"resolved": "https://registry.npmmirror.com/@smithy/abort-controller/-/abort-controller-3.1.2.tgz",
+			"integrity": "sha512-b5g+PNujlfqIib9BjkNB108NyO5aZM/RXjfOCXRCqXQ1oPnIkfvdORrztbGgCZdPe/BN/MKDlrGA7PafKPM2jw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/chunked-blob-reader": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz",
+			"integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@smithy/chunked-blob-reader-native": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz",
+			"integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/util-base64": "^3.0.0",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@smithy/config-resolver": {
+			"version": "3.0.6",
+			"resolved": "https://registry.npmmirror.com/@smithy/config-resolver/-/config-resolver-3.0.6.tgz",
+			"integrity": "sha512-j7HuVNoRd8EhcFp0MzcUb4fG40C7BcyshH+fAd3Jhd8bINNFvEQYBrZoS/SK6Pun9WPlfoI8uuU2SMz8DsEGlA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-config-provider": "^3.0.0",
+				"@smithy/util-middleware": "^3.0.4",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/core": {
+			"version": "2.4.1",
+			"resolved": "https://registry.npmmirror.com/@smithy/core/-/core-2.4.1.tgz",
+			"integrity": "sha512-7cts7/Oni7aCHebHGiBeWoz5z+vmH+Vx2Z/UW3XtXMslcxI3PEwBZxNinepwZjixS3n12fPc247PHWmjU7ndsQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/middleware-endpoint": "^3.1.1",
+				"@smithy/middleware-retry": "^3.0.16",
+				"@smithy/middleware-serde": "^3.0.4",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/smithy-client": "^3.3.0",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-body-length-browser": "^3.0.0",
+				"@smithy/util-middleware": "^3.0.4",
+				"@smithy/util-utf8": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/credential-provider-imds": {
+			"version": "3.2.1",
+			"resolved": "https://registry.npmmirror.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.1.tgz",
+			"integrity": "sha512-4z/oTWpRF2TqQI3aCM89/PWu3kim58XU4kOCTtuTJnoaS4KT95cPWMxbQfTN2vzcOe96SOKO8QouQW/+ESB1fQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/types": "^3.4.0",
+				"@smithy/url-parser": "^3.0.4",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/eventstream-codec": {
+			"version": "3.1.3",
+			"resolved": "https://registry.npmmirror.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.3.tgz",
+			"integrity": "sha512-mKBrmhg6Zd3j07G9dkKTGmrU7pdJGTNz8LbZtIOR3QoodS5yDNqEqoXU4Eg38snZcnCAh7NPBsw5ndxtJPLiCg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-crypto/crc32": "5.2.0",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-hex-encoding": "^3.0.0",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@smithy/eventstream-serde-browser": {
+			"version": "3.0.7",
+			"resolved": "https://registry.npmmirror.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.7.tgz",
+			"integrity": "sha512-UC4RQqyM8B0g5cX/xmWtsNgSBmZ13HrzCqoe5Ulcz6R462/egbIdfTXnayik7jkjvwOrCPL1N11Q9S+n68jPLA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/eventstream-serde-universal": "^3.0.6",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/eventstream-serde-config-resolver": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.4.tgz",
+			"integrity": "sha512-saIs5rtAMpifqL7u7nc5YeE/6gkenzXpSz5NwEyhIesRWtHK+zEuYn9KY8SArZEbPSHyGxvvgKk1z86VzfUGHw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/eventstream-serde-node": {
+			"version": "3.0.6",
+			"resolved": "https://registry.npmmirror.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.6.tgz",
+			"integrity": "sha512-gRKGBdZah3EjZZgWcsTpShq4cZ4Q4JTTe1OPob+jrftmbYj6CvpeydZbH0roO5SvBG8SI3aBZIet9TGN3zUxUw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/eventstream-serde-universal": "^3.0.6",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/eventstream-serde-universal": {
+			"version": "3.0.6",
+			"resolved": "https://registry.npmmirror.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.6.tgz",
+			"integrity": "sha512-1jvXd4sFG+zKaL6WqrJXpL6E+oAMafuM5GPd4qF0+ccenZTX3DZugoCCjlooQyTh+TZho2FpdVYUf5J/bB/j6Q==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/eventstream-codec": "^3.1.3",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/fetch-http-handler": {
+			"version": "3.2.5",
+			"resolved": "https://registry.npmmirror.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.5.tgz",
+			"integrity": "sha512-DjRtGmK8pKQMIo9+JlAKUt14Z448bg8nAN04yKIvlrrpmpRSG57s5d2Y83npks1r4gPtTRNbAFdQCoj9l3P2KQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/querystring-builder": "^3.0.4",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-base64": "^3.0.0",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@smithy/hash-blob-browser": {
+			"version": "3.1.3",
+			"resolved": "https://registry.npmmirror.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.3.tgz",
+			"integrity": "sha512-im9wAU9mANWW0OP0YGqwX3lw0nXG0ngyIcKQ8V/MUz1r7A6uO2lpPqKmAsH4VPGNLP2JPUhj4aW/m5UKkxX/IA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/chunked-blob-reader": "^3.0.0",
+				"@smithy/chunked-blob-reader-native": "^3.0.0",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@smithy/hash-node": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/hash-node/-/hash-node-3.0.4.tgz",
+			"integrity": "sha512-6FgTVqEfCr9z/7+Em8BwSkJKA2y3krf1em134x3yr2NHWVCo2KYI8tcA53cjeO47y41jwF84ntsEE0Pe6pNKlg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-buffer-from": "^3.0.0",
+				"@smithy/util-utf8": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/hash-stream-node": {
+			"version": "3.1.3",
+			"resolved": "https://registry.npmmirror.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.3.tgz",
+			"integrity": "sha512-Tz/eTlo1ffqYn+19VaMjDDbmEWqYe4DW1PAWaS8HvgRdO6/k9hxNPt8Wv5laXoilxE20YzKugiHvxHyO6J7kGA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-utf8": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/invalid-dependency": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.4.tgz",
+			"integrity": "sha512-MJBUrojC4SEXi9aJcnNOE3oNAuYNphgCGFXscaCj2TA/59BTcXhzHACP8jnnEU3n4yir/NSLKzxqez0T4x4tjA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@smithy/is-array-buffer": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz",
+			"integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/md5-js": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/md5-js/-/md5-js-3.0.4.tgz",
+			"integrity": "sha512-qSlqr/+hybufIJgxQW2gYzGE6ywfOxkjjJVojbbmv4MtxfdDFfzRew+NOIOXcYgazW0f8OYBTIKsmNsjxpvnng==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-utf8": "^3.0.0",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@smithy/middleware-content-length": {
+			"version": "3.0.6",
+			"resolved": "https://registry.npmmirror.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.6.tgz",
+			"integrity": "sha512-AFyHCfe8rumkJkz+hCOVJmBagNBj05KypyDwDElA4TgMSA4eYDZRjVePFZuyABrJZFDc7uVj3dpFIDCEhf59SA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/middleware-endpoint": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmmirror.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.1.tgz",
+			"integrity": "sha512-Irv+soW8NKluAtFSEsF8O3iGyLxa5oOevJb/e1yNacV9H7JP/yHyJuKST5YY2ORS1+W34VR8EuUrOF+K29Pl4g==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/middleware-serde": "^3.0.4",
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/shared-ini-file-loader": "^3.1.5",
+				"@smithy/types": "^3.4.0",
+				"@smithy/url-parser": "^3.0.4",
+				"@smithy/util-middleware": "^3.0.4",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/middleware-retry": {
+			"version": "3.0.16",
+			"resolved": "https://registry.npmmirror.com/@smithy/middleware-retry/-/middleware-retry-3.0.16.tgz",
+			"integrity": "sha512-08kI36p1yB4CWO3Qi+UQxjzobt8iQJpnruF0K5BkbZmA/N/sJ51A1JJGJ36GgcbFyPfWw2FU48S5ZoqXt0h0jw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/service-error-classification": "^3.0.4",
+				"@smithy/smithy-client": "^3.3.0",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-middleware": "^3.0.4",
+				"@smithy/util-retry": "^3.0.4",
+				"tslib": "^2.6.2",
+				"uuid": "^9.0.1"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/middleware-serde": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/middleware-serde/-/middleware-serde-3.0.4.tgz",
+			"integrity": "sha512-1lPDB2O6IJ50Ucxgn7XrvZXbbuI48HmPCcMTuSoXT1lDzuTUfIuBjgAjpD8YLVMfnrjdepi/q45556LA51Pubw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/middleware-stack": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/middleware-stack/-/middleware-stack-3.0.4.tgz",
+			"integrity": "sha512-sLMRjtMCqtVcrOqaOZ10SUnlFE25BSlmLsi4bRSGFD7dgR54eqBjfqkVkPBQyrKBortfGM0+2DJoUPcGECR+nQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/node-config-provider": {
+			"version": "3.1.5",
+			"resolved": "https://registry.npmmirror.com/@smithy/node-config-provider/-/node-config-provider-3.1.5.tgz",
+			"integrity": "sha512-dq/oR3/LxgCgizVk7in7FGTm0w9a3qM4mg3IIXLTCHeW3fV+ipssSvBZ2bvEx1+asfQJTyCnVLeYf7JKfd9v3Q==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/shared-ini-file-loader": "^3.1.5",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/node-http-handler": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/node-http-handler/-/node-http-handler-3.2.0.tgz",
+			"integrity": "sha512-5TFqaABbiY7uJMKbqR4OARjwI/l4TRoysDJ75pLpVQyO3EcmeloKYwDGyCtgB9WJniFx3BMkmGCB9+j+QiB+Ww==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/abort-controller": "^3.1.2",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/querystring-builder": "^3.0.4",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/property-provider": {
+			"version": "3.1.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/property-provider/-/property-provider-3.1.4.tgz",
+			"integrity": "sha512-BmhefQbfkSl9DeU0/e6k9N4sT5bya5etv2epvqLUz3eGyfRBhtQq60nDkc1WPp4c+KWrzK721cUc/3y0f2psPQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/protocol-http": {
+			"version": "4.1.1",
+			"resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-4.1.1.tgz",
+			"integrity": "sha512-Fm5+8LkeIus83Y8jTL1XHsBGP8sPvE1rEVyKf/87kbOPTbzEDMcgOlzcmYXat2h+nC3wwPtRy8hFqtJS71+Wow==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/querystring-builder": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/querystring-builder/-/querystring-builder-3.0.4.tgz",
+			"integrity": "sha512-NEoPAsZPdpfVbF98qm8i5k1XMaRKeEnO47CaL5ja6Y1Z2DgJdwIJuJkTJypKm/IKfp8gc0uimIFLwhml8+/pAw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-uri-escape": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/querystring-parser": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/querystring-parser/-/querystring-parser-3.0.4.tgz",
+			"integrity": "sha512-7CHPXffFcakFzhO0OZs/rn6fXlTHrSDdLhIT6/JIk1u2bvwguTL3fMCc1+CfcbXA7TOhjWXu3TcB1EGMqJQwHg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/service-error-classification": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/service-error-classification/-/service-error-classification-3.0.4.tgz",
+			"integrity": "sha512-KciDHHKFVTb9A1KlJHBt2F26PBaDtoE23uTZy5qRvPzHPqrooXFi6fmx98lJb3Jl38PuUTqIuCUmmY3pacuMBQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/shared-ini-file-loader": {
+			"version": "3.1.5",
+			"resolved": "https://registry.npmmirror.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.5.tgz",
+			"integrity": "sha512-6jxsJ4NOmY5Du4FD0enYegNJl4zTSuKLiChIMqIkh+LapxiP7lmz5lYUNLE9/4cvA65mbBmtdzZ8yxmcqM5igg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/signature-v4": {
+			"version": "4.1.1",
+			"resolved": "https://registry.npmmirror.com/@smithy/signature-v4/-/signature-v4-4.1.1.tgz",
+			"integrity": "sha512-SH9J9be81TMBNGCmjhrgMWu4YSpQ3uP1L06u/K9SDrE2YibUix1qxedPCxEQu02At0P0SrYDjvz+y91vLG0KRQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/is-array-buffer": "^3.0.0",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-hex-encoding": "^3.0.0",
+				"@smithy/util-middleware": "^3.0.4",
+				"@smithy/util-uri-escape": "^3.0.0",
+				"@smithy/util-utf8": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/smithy-client": {
+			"version": "3.3.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/smithy-client/-/smithy-client-3.3.0.tgz",
+			"integrity": "sha512-H32nVo8tIX82kB0xI2LBrIcj8jx/3/ITotNLbeG1UL0b3b440YPR/hUvqjFJiaB24pQrMjRbU8CugqH5sV0hkw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/middleware-endpoint": "^3.1.1",
+				"@smithy/middleware-stack": "^3.0.4",
+				"@smithy/protocol-http": "^4.1.1",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-stream": "^3.1.4",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/types": {
+			"version": "3.4.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/types/-/types-3.4.0.tgz",
+			"integrity": "sha512-0shOWSg/pnFXPcsSU8ZbaJ4JBHZJPPzLCJxafJvbMVFo9l1w81CqpgUqjlKGNHVrVB7fhIs+WS82JDTyzaLyLA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/url-parser": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/url-parser/-/url-parser-3.0.4.tgz",
+			"integrity": "sha512-XdXfObA8WrloavJYtDuzoDhJAYc5rOt+FirFmKBRKaihu7QtU/METAxJgSo7uMK6hUkx0vFnqxV75urtRaLkLg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/querystring-parser": "^3.0.4",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@smithy/util-base64": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-base64/-/util-base64-3.0.0.tgz",
+			"integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/util-buffer-from": "^3.0.0",
+				"@smithy/util-utf8": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/util-body-length-browser": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz",
+			"integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/@smithy/util-body-length-node": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz",
+			"integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/util-buffer-from": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz",
+			"integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/is-array-buffer": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/util-config-provider": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz",
+			"integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/util-defaults-mode-browser": {
+			"version": "3.0.16",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.16.tgz",
+			"integrity": "sha512-Os8ddfNBe7hmc5UMWZxygIHCyAqY0aWR8Wnp/aKbti3f8Df/r0J9ttMZIxeMjsFgtVjEryB0q7SGcwBsHk8WEw==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/smithy-client": "^3.3.0",
+				"@smithy/types": "^3.4.0",
+				"bowser": "^2.11.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">= 10.0.0"
+			}
+		},
+		"node_modules/@smithy/util-defaults-mode-node": {
+			"version": "3.0.16",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.16.tgz",
+			"integrity": "sha512-rNhFIYRtrOrrhRlj6RL8jWA6/dcwrbGYAmy8+OAHjjzQ6zdzUBB1P+3IuJAgwWN6Y5GxI+mVXlM/pOjaoIgHow==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/config-resolver": "^3.0.6",
+				"@smithy/credential-provider-imds": "^3.2.1",
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/property-provider": "^3.1.4",
+				"@smithy/smithy-client": "^3.3.0",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">= 10.0.0"
+			}
+		},
+		"node_modules/@smithy/util-endpoints": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-endpoints/-/util-endpoints-2.1.0.tgz",
+			"integrity": "sha512-ilS7/0jcbS2ELdg0fM/4GVvOiuk8/U3bIFXUW25xE1Vh1Ol4DP6vVHQKqM40rCMizCLmJ9UxK+NeJrKlhI3HVA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/node-config-provider": "^3.1.5",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/util-hex-encoding": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz",
+			"integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/util-middleware": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-middleware/-/util-middleware-3.0.4.tgz",
+			"integrity": "sha512-uSXHTBhstb1c4nHdmQEdkNMv9LiRNaJ/lWV2U/GO+5F236YFpdPw+hyWI9Zc0Rp9XKzwD9kVZvhZmEgp0UCVnA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/util-retry": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-retry/-/util-retry-3.0.4.tgz",
+			"integrity": "sha512-JJr6g0tO1qO2tCQyK+n3J18r34ZpvatlFN5ULcLranFIBZPxqoivb77EPyNTVwTGMEvvq2qMnyjm4jMIxjdLFg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/service-error-classification": "^3.0.4",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/util-stream": {
+			"version": "3.1.4",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-stream/-/util-stream-3.1.4.tgz",
+			"integrity": "sha512-txU3EIDLhrBZdGfon6E9V6sZz/irYnKFMblz4TLVjyq8hObNHNS2n9a2t7GIrl7d85zgEPhwLE0gANpZsvpsKg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/fetch-http-handler": "^3.2.5",
+				"@smithy/node-http-handler": "^3.2.0",
+				"@smithy/types": "^3.4.0",
+				"@smithy/util-base64": "^3.0.0",
+				"@smithy/util-buffer-from": "^3.0.0",
+				"@smithy/util-hex-encoding": "^3.0.0",
+				"@smithy/util-utf8": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/util-uri-escape": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz",
+			"integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/util-utf8": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
+			"integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/util-buffer-from": "^3.0.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@smithy/util-waiter": {
+			"version": "3.1.3",
+			"resolved": "https://registry.npmmirror.com/@smithy/util-waiter/-/util-waiter-3.1.3.tgz",
+			"integrity": "sha512-OU0YllH51/CxD8iyr3UHSMwYqTGTyuxFdCMH/0F978t+iDmJseC/ttrWPb22zmYkhkrjqtipzC1xaMuax5QKIA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@smithy/abort-controller": "^3.1.2",
+				"@smithy/types": "^3.4.0",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/@soerenmartius/vue3-clipboard": {
+			"version": "0.1.2",
+			"resolved": "https://registry.npmmirror.com/@soerenmartius/vue3-clipboard/-/vue3-clipboard-0.1.2.tgz",
+			"integrity": "sha512-a5er6cFGcFIQ/3qg6kWvU0yFqIz9iWoQGEVs9azjevyRyMAKvj1w3JuLH9y6+u0WhMNby3kn7nuR8nktSnDesg==",
+			"license": "MIT",
+			"dependencies": {
+				"clipboard": "^2.0.0"
+			}
+		},
+		"node_modules/@sphinxxxx/color-conversion": {
+			"version": "2.2.2",
+			"resolved": "https://registry.npmmirror.com/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz",
+			"integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==",
+			"license": "ISC"
+		},
+		"node_modules/@transloadit/prettier-bytes": {
+			"version": "0.0.7",
+			"resolved": "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz",
+			"integrity": "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==",
+			"license": "MIT"
+		},
+		"node_modules/@types/event-emitter": {
+			"version": "0.3.5",
+			"resolved": "https://registry.npmmirror.com/@types/event-emitter/-/event-emitter-0.3.5.tgz",
+			"integrity": "sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==",
+			"license": "MIT"
+		},
+		"node_modules/@types/json-schema": {
+			"version": "7.0.15",
+			"resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
+			"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"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==",
+			"license": "MIT"
+		},
+		"node_modules/@types/lodash-es": {
+			"version": "4.17.12",
+			"resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+			"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@types/lodash": "*"
+			}
+		},
+		"node_modules/@types/node": {
+			"version": "18.19.50",
+			"resolved": "https://registry.npmmirror.com/@types/node/-/node-18.19.50.tgz",
+			"integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==",
+			"license": "MIT",
+			"dependencies": {
+				"undici-types": "~5.26.4"
+			}
+		},
+		"node_modules/@types/nprogress": {
+			"version": "0.2.3",
+			"resolved": "https://registry.npmmirror.com/@types/nprogress/-/nprogress-0.2.3.tgz",
+			"integrity": "sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@types/readable-stream": {
+			"version": "4.0.15",
+			"resolved": "https://registry.npmmirror.com/@types/readable-stream/-/readable-stream-4.0.15.tgz",
+			"integrity": "sha512-oAZ3kw+kJFkEqyh7xORZOku1YAKvsFTogRY8kVl4vHpEKiDkfnSA/My8haRE7fvmix5Zyy+1pwzOi7yycGLBJw==",
+			"license": "MIT",
+			"dependencies": {
+				"@types/node": "*",
+				"safe-buffer": "~5.1.1"
+			}
+		},
+		"node_modules/@types/readable-stream/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+			"license": "MIT"
+		},
+		"node_modules/@types/semver": {
+			"version": "7.5.8",
+			"resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.8.tgz",
+			"integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/@types/sortablejs": {
+			"version": "1.15.8",
+			"resolved": "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.15.8.tgz",
+			"integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"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==",
+			"license": "MIT"
+		},
+		"node_modules/@types/ws": {
+			"version": "8.5.12",
+			"resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.5.12.tgz",
+			"integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@types/node": "*"
+			}
+		},
+		"node_modules/@typescript-eslint/eslint-plugin": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
+			"integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@eslint-community/regexpp": "^4.4.0",
+				"@typescript-eslint/scope-manager": "5.62.0",
+				"@typescript-eslint/type-utils": "5.62.0",
+				"@typescript-eslint/utils": "5.62.0",
+				"debug": "^4.3.4",
+				"graphemer": "^1.4.0",
+				"ignore": "^5.2.0",
+				"natural-compare-lite": "^1.4.0",
+				"semver": "^7.3.7",
+				"tsutils": "^3.21.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"@typescript-eslint/parser": "^5.0.0",
+				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@typescript-eslint/parser": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.62.0.tgz",
+			"integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"@typescript-eslint/scope-manager": "5.62.0",
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/typescript-estree": "5.62.0",
+				"debug": "^4.3.4"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@typescript-eslint/scope-manager": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
+			"integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/visitor-keys": "5.62.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@typescript-eslint/type-utils": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz",
+			"integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@typescript-eslint/typescript-estree": "5.62.0",
+				"@typescript-eslint/utils": "5.62.0",
+				"debug": "^4.3.4",
+				"tsutils": "^3.21.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "*"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@typescript-eslint/types": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.62.0.tgz",
+			"integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@typescript-eslint/typescript-estree": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
+			"integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/visitor-keys": "5.62.0",
+				"debug": "^4.3.4",
+				"globby": "^11.1.0",
+				"is-glob": "^4.0.3",
+				"semver": "^7.3.7",
+				"tsutils": "^3.21.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@typescript-eslint/utils": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.62.0.tgz",
+			"integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.2.0",
+				"@types/json-schema": "^7.0.9",
+				"@types/semver": "^7.3.12",
+				"@typescript-eslint/scope-manager": "5.62.0",
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/typescript-estree": "5.62.0",
+				"eslint-scope": "^5.1.1",
+				"semver": "^7.3.7"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+			}
+		},
+		"node_modules/@typescript-eslint/visitor-keys": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
+			"integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@typescript-eslint/types": "5.62.0",
+				"eslint-visitor-keys": "^3.3.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@ungap/structured-clone": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+			"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/@uppy/companion-client": {
+			"version": "2.2.2",
+			"resolved": "https://registry.npmmirror.com/@uppy/companion-client/-/companion-client-2.2.2.tgz",
+			"integrity": "sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==",
+			"license": "MIT",
+			"dependencies": {
+				"@uppy/utils": "^4.1.2",
+				"namespace-emitter": "^2.0.1"
+			}
+		},
+		"node_modules/@uppy/core": {
+			"version": "2.3.4",
+			"resolved": "https://registry.npmmirror.com/@uppy/core/-/core-2.3.4.tgz",
+			"integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@transloadit/prettier-bytes": "0.0.7",
+				"@uppy/store-default": "^2.1.1",
+				"@uppy/utils": "^4.1.3",
+				"lodash.throttle": "^4.1.1",
+				"mime-match": "^1.0.2",
+				"namespace-emitter": "^2.0.1",
+				"nanoid": "^3.1.25",
+				"preact": "^10.5.13"
+			}
+		},
+		"node_modules/@uppy/store-default": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmmirror.com/@uppy/store-default/-/store-default-2.1.1.tgz",
+			"integrity": "sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==",
+			"license": "MIT"
+		},
+		"node_modules/@uppy/utils": {
+			"version": "4.1.3",
+			"resolved": "https://registry.npmmirror.com/@uppy/utils/-/utils-4.1.3.tgz",
+			"integrity": "sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==",
+			"license": "MIT",
+			"dependencies": {
+				"lodash.throttle": "^4.1.1"
+			}
+		},
+		"node_modules/@uppy/xhr-upload": {
+			"version": "2.1.3",
+			"resolved": "https://registry.npmmirror.com/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz",
+			"integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@uppy/companion-client": "^2.2.2",
+				"@uppy/utils": "^4.1.2",
+				"nanoid": "^3.1.25"
+			},
+			"peerDependencies": {
+				"@uppy/core": "^2.3.3"
+			}
+		},
+		"node_modules/@vitejs/plugin-vue": {
+			"version": "4.6.2",
+			"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz",
+			"integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": "^14.18.0 || >=16.0.0"
+			},
+			"peerDependencies": {
+				"vite": "^4.0.0 || ^5.0.0",
+				"vue": "^3.2.25"
+			}
+		},
+		"node_modules/@vitejs/plugin-vue-jsx": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz",
+			"integrity": "sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/core": "^7.23.3",
+				"@babel/plugin-transform-typescript": "^7.23.3",
+				"@vue/babel-plugin-jsx": "^1.1.5"
+			},
+			"engines": {
+				"node": "^14.18.0 || >=16.0.0"
+			},
+			"peerDependencies": {
+				"vite": "^4.0.0 || ^5.0.0",
+				"vue": "^3.0.0"
+			}
+		},
+		"node_modules/@vue/babel-helper-vue-transform-on": {
+			"version": "1.2.5",
+			"resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.5.tgz",
+			"integrity": "sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==",
+			"license": "MIT"
+		},
+		"node_modules/@vue/babel-plugin-jsx": {
+			"version": "1.2.5",
+			"resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.5.tgz",
+			"integrity": "sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/helper-module-imports": "^7.24.7",
+				"@babel/helper-plugin-utils": "^7.24.8",
+				"@babel/plugin-syntax-jsx": "^7.24.7",
+				"@babel/template": "^7.25.0",
+				"@babel/traverse": "^7.25.6",
+				"@babel/types": "^7.25.6",
+				"@vue/babel-helper-vue-transform-on": "1.2.5",
+				"@vue/babel-plugin-resolve-type": "1.2.5",
+				"html-tags": "^3.3.1",
+				"svg-tags": "^1.0.0"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0-0"
+			},
+			"peerDependenciesMeta": {
+				"@babel/core": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@vue/babel-plugin-resolve-type": {
+			"version": "1.2.5",
+			"resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.5.tgz",
+			"integrity": "sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/code-frame": "^7.24.7",
+				"@babel/helper-module-imports": "^7.24.7",
+				"@babel/helper-plugin-utils": "^7.24.8",
+				"@babel/parser": "^7.25.6",
+				"@vue/compiler-sfc": "^3.5.3"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0-0"
+			}
+		},
+		"node_modules/@vue/compiler-core": {
+			"version": "3.5.4",
+			"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.4.tgz",
+			"integrity": "sha512-oNwn+BAt3n9dK9uAYvI+XGlutwuTq/wfj4xCBaZCqwwVIGtD7D6ViihEbyYZrDHIHTDE3Q6oL3/hqmAyFEy9DQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/parser": "^7.25.3",
+				"@vue/shared": "3.5.4",
+				"entities": "^4.5.0",
+				"estree-walker": "^2.0.2",
+				"source-map-js": "^1.2.0"
+			}
+		},
+		"node_modules/@vue/compiler-dom": {
+			"version": "3.5.4",
+			"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.4.tgz",
+			"integrity": "sha512-yP9RRs4BDLOLfldn6ah+AGCNovGjMbL9uHvhDHf5wan4dAHLnFGOkqtfE7PPe4HTXIqE7l/NILdYw53bo1C8jw==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/compiler-core": "3.5.4",
+				"@vue/shared": "3.5.4"
+			}
+		},
+		"node_modules/@vue/compiler-sfc": {
+			"version": "3.5.4",
+			"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.4.tgz",
+			"integrity": "sha512-P+yiPhL+NYH7m0ZgCq7AQR2q7OIE+mpAEgtkqEeH9oHSdIRvUO+4X6MPvblJIWcoe4YC5a2Gdf/RsoyP8FFiPQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/parser": "^7.25.3",
+				"@vue/compiler-core": "3.5.4",
+				"@vue/compiler-dom": "3.5.4",
+				"@vue/compiler-ssr": "3.5.4",
+				"@vue/shared": "3.5.4",
+				"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.4",
+			"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.4.tgz",
+			"integrity": "sha512-acESdTXsxPnYr2C4Blv0ggx5zIFMgOzZmYU2UgvIff9POdRGbRNBHRyzHAnizcItvpgerSKQbllUc9USp3V7eg==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/compiler-dom": "3.5.4",
+				"@vue/shared": "3.5.4"
+			}
+		},
+		"node_modules/@vue/devtools-api": {
+			"version": "6.6.4",
+			"resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+			"integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
+			"license": "MIT"
+		},
+		"node_modules/@vue/reactivity": {
+			"version": "3.5.4",
+			"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.4.tgz",
+			"integrity": "sha512-HKKbEuP7tYSGCq4e4nK6ZW6l5hyG66OUetefBp4budUyjvAYsnQDf+bgFzg2RAgnH0CInyqXwD9y47jwJEHrQw==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/shared": "3.5.4"
+			}
+		},
+		"node_modules/@vue/runtime-core": {
+			"version": "3.5.4",
+			"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.4.tgz",
+			"integrity": "sha512-f3ek2sTA0AFu0n+w+kCtz567Euqqa3eHewvo4klwS7mWfSj/A+UmYTwsnUFo35KeyAFY60JgrCGvEBsu1n/3LA==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/reactivity": "3.5.4",
+				"@vue/shared": "3.5.4"
+			}
+		},
+		"node_modules/@vue/runtime-dom": {
+			"version": "3.5.4",
+			"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.4.tgz",
+			"integrity": "sha512-ofyc0w6rbD5KtjhP1i9hGOKdxGpvmuB1jprP7Djlj0X7R5J/oLwuNuE98GJ8WW31Hu2VxQHtk/LYTAlW8xrJdw==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/reactivity": "3.5.4",
+				"@vue/runtime-core": "3.5.4",
+				"@vue/shared": "3.5.4",
+				"csstype": "^3.1.3"
+			}
+		},
+		"node_modules/@vue/server-renderer": {
+			"version": "3.5.4",
+			"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.4.tgz",
+			"integrity": "sha512-FbjV6DJLgKRetMYFBA1UXCroCiED/Ckr53/ba9wivyd7D/Xw9fpo0T6zXzCnxQwyvkyrL7y6plgYhWhNjGxY5g==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/compiler-ssr": "3.5.4",
+				"@vue/shared": "3.5.4"
+			},
+			"peerDependencies": {
+				"vue": "3.5.4"
+			}
+		},
+		"node_modules/@vue/shared": {
+			"version": "3.5.4",
+			"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.4.tgz",
+			"integrity": "sha512-L2MCDD8l7yC62Te5UUyPVpmexhL9ipVnYRw9CsWfm/BGRL5FwDX4a25bcJ/OJSD3+Hx+k/a8LDKcG2AFdJV3BA==",
+			"license": "MIT"
+		},
+		"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==",
+			"license": "MIT",
+			"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,
+			"license": "MIT",
+			"bin": {
+				"vue-demi-fix": "bin/vue-demi-fix.js",
+				"vue-demi-switch": "bin/vue-demi-switch.js"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			},
+			"peerDependencies": {
+				"@vue/composition-api": "^1.0.0-rc.1",
+				"vue": "^3.0.0-0 || ^2.6.0"
+			},
+			"peerDependenciesMeta": {
+				"@vue/composition-api": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@vueuse/metadata": {
+			"version": "9.13.0",
+			"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
+			"integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"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,
+			"license": "MIT",
+			"bin": {
+				"vue-demi-fix": "bin/vue-demi-fix.js",
+				"vue-demi-switch": "bin/vue-demi-switch.js"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			},
+			"peerDependencies": {
+				"@vue/composition-api": "^1.0.0-rc.1",
+				"vue": "^3.0.0-0 || ^2.6.0"
+			},
+			"peerDependenciesMeta": {
+				"@vue/composition-api": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@wangeditor/basic-modules": {
+			"version": "1.1.7",
+			"resolved": "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz",
+			"integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==",
+			"license": "MIT",
+			"dependencies": {
+				"is-url": "^1.2.4"
+			},
+			"peerDependencies": {
+				"@wangeditor/core": "1.x",
+				"dom7": "^3.0.0",
+				"lodash.throttle": "^4.1.1",
+				"nanoid": "^3.2.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/code-highlight": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmmirror.com/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz",
+			"integrity": "sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==",
+			"license": "MIT",
+			"dependencies": {
+				"prismjs": "^1.23.0"
+			},
+			"peerDependencies": {
+				"@wangeditor/core": "1.x",
+				"dom7": "^3.0.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/core": {
+			"version": "1.1.19",
+			"resolved": "https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz",
+			"integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==",
+			"license": "MIT",
+			"dependencies": {
+				"@types/event-emitter": "^0.3.3",
+				"event-emitter": "^0.3.5",
+				"html-void-elements": "^2.0.0",
+				"i18next": "^20.4.0",
+				"scroll-into-view-if-needed": "^2.2.28",
+				"slate-history": "^0.66.0"
+			},
+			"peerDependencies": {
+				"@uppy/core": "^2.1.1",
+				"@uppy/xhr-upload": "^2.0.3",
+				"dom7": "^3.0.0",
+				"is-hotkey": "^0.2.0",
+				"lodash.camelcase": "^4.3.0",
+				"lodash.clonedeep": "^4.5.0",
+				"lodash.debounce": "^4.0.8",
+				"lodash.foreach": "^4.5.0",
+				"lodash.isequal": "^4.5.0",
+				"lodash.throttle": "^4.1.1",
+				"lodash.toarray": "^4.4.0",
+				"nanoid": "^3.2.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/editor": {
+			"version": "5.1.23",
+			"resolved": "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz",
+			"integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@uppy/core": "^2.1.1",
+				"@uppy/xhr-upload": "^2.0.3",
+				"@wangeditor/basic-modules": "^1.1.7",
+				"@wangeditor/code-highlight": "^1.0.3",
+				"@wangeditor/core": "^1.1.19",
+				"@wangeditor/list-module": "^1.0.5",
+				"@wangeditor/table-module": "^1.1.4",
+				"@wangeditor/upload-image-module": "^1.0.2",
+				"@wangeditor/video-module": "^1.1.4",
+				"dom7": "^3.0.0",
+				"is-hotkey": "^0.2.0",
+				"lodash.camelcase": "^4.3.0",
+				"lodash.clonedeep": "^4.5.0",
+				"lodash.debounce": "^4.0.8",
+				"lodash.foreach": "^4.5.0",
+				"lodash.isequal": "^4.5.0",
+				"lodash.throttle": "^4.1.1",
+				"lodash.toarray": "^4.4.0",
+				"nanoid": "^3.2.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/editor-for-vue": {
+			"version": "5.1.12",
+			"resolved": "https://registry.npmmirror.com/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz",
+			"integrity": "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@wangeditor/editor": ">=5.1.0",
+				"vue": "^3.0.5"
+			}
+		},
+		"node_modules/@wangeditor/list-module": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz",
+			"integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@wangeditor/core": "1.x",
+				"dom7": "^3.0.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/table-module": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz",
+			"integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@wangeditor/core": "1.x",
+				"dom7": "^3.0.0",
+				"lodash.isequal": "^4.5.0",
+				"lodash.throttle": "^4.1.1",
+				"nanoid": "^3.2.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/upload-image-module": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz",
+			"integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@uppy/core": "^2.0.3",
+				"@uppy/xhr-upload": "^2.0.3",
+				"@wangeditor/basic-modules": "1.x",
+				"@wangeditor/core": "1.x",
+				"dom7": "^3.0.0",
+				"lodash.foreach": "^4.5.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/@wangeditor/video-module": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz",
+			"integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@uppy/core": "^2.1.4",
+				"@uppy/xhr-upload": "^2.0.7",
+				"@wangeditor/core": "1.x",
+				"dom7": "^3.0.0",
+				"nanoid": "^3.2.0",
+				"slate": "^0.72.0",
+				"snabbdom": "^3.1.0"
+			}
+		},
+		"node_modules/abort-controller": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz",
+			"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+			"license": "MIT",
+			"dependencies": {
+				"event-target-shim": "^5.0.0"
+			},
+			"engines": {
+				"node": ">=6.5"
+			}
+		},
+		"node_modules/ace-builds": {
+			"version": "1.36.2",
+			"resolved": "https://registry.npmmirror.com/ace-builds/-/ace-builds-1.36.2.tgz",
+			"integrity": "sha512-eqqfbGwx/GKjM/EnFu4QtQ+d2NNBu84MGgxoG8R5iyFpcVeQ4p9YlTL+ZzdEJqhdkASqoqOxCSNNGyB6lvMm+A==",
+			"license": "BSD-3-Clause"
+		},
+		"node_modules/acorn": {
+			"version": "8.12.1",
+			"resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.12.1.tgz",
+			"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+			"dev": true,
+			"license": "MIT",
+			"bin": {
+				"acorn": "bin/acorn"
+			},
+			"engines": {
+				"node": ">=0.4.0"
+			}
+		},
+		"node_modules/acorn-jsx": {
+			"version": "5.3.2",
+			"resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+			"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+			"dev": true,
+			"license": "MIT",
+			"peerDependencies": {
+				"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+			}
+		},
+		"node_modules/address": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz",
+			"integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 10.0.0"
+			}
+		},
+		"node_modules/adler-32": {
+			"version": "1.3.1",
+			"resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz",
+			"integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/agentkeepalive": {
+			"version": "3.5.3",
+			"resolved": "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-3.5.3.tgz",
+			"integrity": "sha512-yqXL+k5rr8+ZRpOAntkaaRgWgE5o8ESAj5DyRmVTCSoZxXmqemb9Dd7T4i5UzwuERdLAJUy6XzR9zFVuf0kzkw==",
+			"license": "MIT",
+			"dependencies": {
+				"humanize-ms": "^1.2.1"
+			},
+			"engines": {
+				"node": ">= 4.0.0"
+			}
+		},
+		"node_modules/ajv": {
+			"version": "6.12.6",
+			"resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
+			"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+			"license": "MIT",
+			"dependencies": {
+				"fast-deep-equal": "^3.1.1",
+				"fast-json-stable-stringify": "^2.0.0",
+				"json-schema-traverse": "^0.4.1",
+				"uri-js": "^4.2.2"
+			},
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/epoberezkin"
+			}
+		},
+		"node_modules/ali-oss": {
+			"version": "6.21.0",
+			"resolved": "https://registry.npmmirror.com/ali-oss/-/ali-oss-6.21.0.tgz",
+			"integrity": "sha512-dRvKWO/GJEa6dlsCnvmgHIbU5+yE/SmZsE4kZRGNU7Uotr9uIkQWGqv4szLTxRSxWv3YgL+BZgt+swIgitYGjA==",
+			"license": "MIT",
+			"dependencies": {
+				"address": "^1.2.2",
+				"agentkeepalive": "^3.4.1",
+				"bowser": "^1.6.0",
+				"copy-to": "^2.0.1",
+				"dateformat": "^2.0.0",
+				"debug": "^4.3.4",
+				"destroy": "^1.0.4",
+				"end-or-error": "^1.0.1",
+				"get-ready": "^1.0.0",
+				"humanize-ms": "^1.2.0",
+				"is-type-of": "^1.4.0",
+				"js-base64": "^2.5.2",
+				"jstoxml": "^2.0.0",
+				"lodash": "^4.17.21",
+				"merge-descriptors": "^1.0.1",
+				"mime": "^2.4.5",
+				"platform": "^1.3.1",
+				"pump": "^3.0.0",
+				"qs": "^6.4.0",
+				"sdk-base": "^2.0.1",
+				"stream-http": "2.8.2",
+				"stream-wormhole": "^1.0.4",
+				"urllib": "^2.44.0",
+				"utility": "^1.18.0",
+				"xml2js": "^0.6.2"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/ali-oss/node_modules/bowser": {
+			"version": "1.9.4",
+			"resolved": "https://registry.npmmirror.com/bowser/-/bowser-1.9.4.tgz",
+			"integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==",
+			"license": "MIT"
+		},
+		"node_modules/ansi-regex": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+			"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"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==",
+			"license": "MIT",
+			"dependencies": {
+				"color-convert": "^1.9.0"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/any-promise": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz",
+			"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+			"license": "MIT"
+		},
+		"node_modules/anymatch": {
+			"version": "3.1.3",
+			"resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
+			"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+			"license": "ISC",
+			"dependencies": {
+				"normalize-path": "^3.0.0",
+				"picomatch": "^2.0.4"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/arg": {
+			"version": "5.0.2",
+			"resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz",
+			"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+			"license": "MIT"
+		},
+		"node_modules/argparse": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz",
+			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+			"dev": true,
+			"license": "Python-2.0"
+		},
+		"node_modules/array-union": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz",
+			"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+			"dev": true,
+			"license": "MIT",
+			"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==",
+			"license": "MIT"
+		},
+		"node_modules/asynckit": {
+			"version": "0.4.0",
+			"resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
+			"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+			"license": "MIT"
+		},
+		"node_modules/autoprefixer": {
+			"version": "10.4.20",
+			"resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.20.tgz",
+			"integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/postcss/"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/autoprefixer"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"browserslist": "^4.23.3",
+				"caniuse-lite": "^1.0.30001646",
+				"fraction.js": "^4.3.7",
+				"normalize-range": "^0.1.2",
+				"picocolors": "^1.0.1",
+				"postcss-value-parser": "^4.2.0"
+			},
+			"bin": {
+				"autoprefixer": "bin/autoprefixer"
+			},
+			"engines": {
+				"node": "^10 || ^12 || >=14"
+			},
+			"peerDependencies": {
+				"postcss": "^8.1.0"
+			}
+		},
+		"node_modules/aws-crt": {
+			"version": "1.22.0",
+			"resolved": "https://registry.npmmirror.com/aws-crt/-/aws-crt-1.22.0.tgz",
+			"integrity": "sha512-gLyn73oBmJt/bpLHaQLbl8GNYNbKs+AcdIok8jeMFa9CwL3mcaLCrFzZu4KYacbcHRONJeGa2qYXwDT3EyQ1jw==",
+			"hasInstallScript": true,
+			"license": "Apache-2.0",
+			"dependencies": {
+				"@aws-sdk/util-utf8-browser": "^3.259.0",
+				"@httptoolkit/websocket-stream": "^6.0.1",
+				"axios": "^1.7.4",
+				"buffer": "^6.0.3",
+				"crypto-js": "^4.2.0",
+				"mqtt": "^5.9.1",
+				"process": "^0.11.10"
+			}
+		},
+		"node_modules/axios": {
+			"version": "1.7.7",
+			"resolved": "https://registry.npmmirror.com/axios/-/axios-1.7.7.tgz",
+			"integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT"
+		},
+		"node_modules/base64-js": {
+			"version": "1.5.1",
+			"resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
+			"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/feross"
+				},
+				{
+					"type": "patreon",
+					"url": "https://www.patreon.com/feross"
+				},
+				{
+					"type": "consulting",
+					"url": "https://feross.org/support"
+				}
+			],
+			"license": "MIT"
+		},
+		"node_modules/batch-processor": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/batch-processor/-/batch-processor-1.0.0.tgz",
+			"integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==",
+			"license": "MIT"
+		},
+		"node_modules/binary-extensions": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
+			"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/bl": {
+			"version": "6.0.15",
+			"resolved": "https://registry.npmmirror.com/bl/-/bl-6.0.15.tgz",
+			"integrity": "sha512-RGhjD1XCPS7ZdAH6cEJVaR3gLV4KJP2hvkQ49AH5kwScjiyd0jBM8RsP4oHKzcx+kNCON9752zPeRnuv0HHwzw==",
+			"license": "MIT",
+			"dependencies": {
+				"@types/readable-stream": "^4.0.0",
+				"buffer": "^6.0.3",
+				"inherits": "^2.0.4",
+				"readable-stream": "^4.2.0"
+			}
+		},
+		"node_modules/bl/node_modules/readable-stream": {
+			"version": "4.5.2",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-4.5.2.tgz",
+			"integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
+			"license": "MIT",
+			"dependencies": {
+				"abort-controller": "^3.0.0",
+				"buffer": "^6.0.3",
+				"events": "^3.3.0",
+				"process": "^0.11.10",
+				"string_decoder": "^1.3.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			}
+		},
+		"node_modules/bl/node_modules/string_decoder": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
+			"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+			"license": "MIT",
+			"dependencies": {
+				"safe-buffer": "~5.2.0"
+			}
+		},
+		"node_modules/boolbase": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz",
+			"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/bowser": {
+			"version": "2.11.0",
+			"resolved": "https://registry.npmmirror.com/bowser/-/bowser-2.11.0.tgz",
+			"integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
+			"license": "MIT"
+		},
+		"node_modules/brace-expansion": {
+			"version": "1.1.11",
+			"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"balanced-match": "^1.0.0",
+				"concat-map": "0.0.1"
+			}
+		},
+		"node_modules/braces": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
+			"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+			"license": "MIT",
+			"dependencies": {
+				"fill-range": "^7.1.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/browserslist": {
+			"version": "4.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"
+				}
+			],
+			"license": "MIT",
+			"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": {
+			"version": "6.0.3",
+			"resolved": "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz",
+			"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/feross"
+				},
+				{
+					"type": "patreon",
+					"url": "https://www.patreon.com/feross"
+				},
+				{
+					"type": "consulting",
+					"url": "https://feross.org/support"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"base64-js": "^1.3.1",
+				"ieee754": "^1.2.1"
+			}
+		},
+		"node_modules/buffer-from": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
+			"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+			"license": "MIT"
+		},
+		"node_modules/builtin-status-codes": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+			"integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
+			"license": "MIT"
+		},
+		"node_modules/call-bind": {
+			"version": "1.0.7",
+			"resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz",
+			"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+			"license": "MIT",
+			"dependencies": {
+				"es-define-property": "^1.0.0",
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"get-intrinsic": "^1.2.4",
+				"set-function-length": "^1.2.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/callsites": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz",
+			"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/camelcase-css": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz",
+			"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/caniuse-lite": {
+			"version": "1.0.30001660",
+			"resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz",
+			"integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==",
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/browserslist"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "CC-BY-4.0"
+		},
+		"node_modules/cfb": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz",
+			"integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"adler-32": "~1.3.0",
+				"crc-32": "~1.2.0"
+			},
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"dependencies": {
+				"anymatch": "~3.1.2",
+				"braces": "~3.0.2",
+				"glob-parent": "~5.1.2",
+				"is-binary-path": "~2.1.0",
+				"is-glob": "~4.0.1",
+				"normalize-path": "~3.0.0",
+				"readdirp": "~3.6.0"
+			},
+			"engines": {
+				"node": ">= 8.10.0"
+			},
+			"funding": {
+				"url": "https://paulmillr.com/funding/"
+			},
+			"optionalDependencies": {
+				"fsevents": "~2.3.2"
+			}
+		},
+		"node_modules/chokidar/node_modules/glob-parent": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+			"license": "ISC",
+			"dependencies": {
+				"is-glob": "^4.0.1"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/claygl": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmmirror.com/claygl/-/claygl-1.3.0.tgz",
+			"integrity": "sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ=="
+		},
+		"node_modules/clipboard": {
+			"version": "2.0.11",
+			"resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz",
+			"integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==",
+			"license": "MIT",
+			"dependencies": {
+				"good-listener": "^1.2.2",
+				"select": "^1.1.2",
+				"tiny-emitter": "^2.0.0"
+			}
+		},
+		"node_modules/clone": {
+			"version": "2.1.2",
+			"resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz",
+			"integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/codepage": {
+			"version": "1.15.0",
+			"resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz",
+			"integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==",
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT"
+		},
+		"node_modules/combined-stream": {
+			"version": "1.0.8",
+			"resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
+			"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+			"license": "MIT",
+			"dependencies": {
+				"delayed-stream": "~1.0.0"
+			},
+			"engines": {
+				"node": ">= 0.8"
+			}
+		},
+		"node_modules/commander": {
+			"version": "4.1.1",
+			"resolved": "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz",
+			"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/commist": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmmirror.com/commist/-/commist-3.2.0.tgz",
+			"integrity": "sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==",
+			"license": "MIT"
+		},
+		"node_modules/compute-scroll-into-view": {
+			"version": "1.0.20",
+			"resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz",
+			"integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==",
+			"license": "MIT"
+		},
+		"node_modules/concat-map": {
+			"version": "0.0.1",
+			"resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz",
+			"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/concat-stream": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-2.0.0.tgz",
+			"integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+			"engines": [
+				"node >= 6.0"
+			],
+			"license": "MIT",
+			"dependencies": {
+				"buffer-from": "^1.0.0",
+				"inherits": "^2.0.3",
+				"readable-stream": "^3.0.2",
+				"typedarray": "^0.0.6"
+			}
+		},
+		"node_modules/concat-stream/node_modules/readable-stream": {
+			"version": "3.6.2",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
+			"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+			"license": "MIT",
+			"dependencies": {
+				"inherits": "^2.0.3",
+				"string_decoder": "^1.1.1",
+				"util-deprecate": "^1.0.1"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/content-type": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",
+			"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.6"
+			}
+		},
+		"node_modules/convert-source-map": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",
+			"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+			"license": "MIT"
+		},
+		"node_modules/copy-to": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmmirror.com/copy-to/-/copy-to-2.0.1.tgz",
+			"integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==",
+			"license": "MIT"
+		},
+		"node_modules/core-js": {
+			"version": "2.6.12",
+			"resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
+			"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
+			"deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
+			"hasInstallScript": true,
+			"license": "MIT"
+		},
+		"node_modules/core-util-is": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz",
+			"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+			"license": "MIT"
+		},
+		"node_modules/cos-js-sdk-v5": {
+			"version": "1.8.4",
+			"resolved": "https://registry.npmmirror.com/cos-js-sdk-v5/-/cos-js-sdk-v5-1.8.4.tgz",
+			"integrity": "sha512-kCv3AwVB5n+jZRY3g+Pn7sRpj29HT8EbpHYwEAauF6VDXKyWIjzAOi7msyAx46ujlFFc1YmKOQZPJ0ZVv0hXBg==",
+			"license": "ISC",
+			"dependencies": {
+				"fast-xml-parser": "^4.4.0"
+			}
+		},
+		"node_modules/countup.js": {
+			"version": "2.8.0",
+			"resolved": "https://registry.npmmirror.com/countup.js/-/countup.js-2.8.0.tgz",
+			"integrity": "sha512-f7xEhX0awl4NOElHulrl4XRfKoNH3rB+qfNSZZyjSZhaAoUk6elvhH+MNxMmlmuUJ2/QNTWPSA7U4mNtIAKljQ==",
+			"license": "MIT"
+		},
+		"node_modules/crc-32": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz",
+			"integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+			"license": "Apache-2.0",
+			"bin": {
+				"crc32": "bin/crc32.njs"
+			},
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/cropperjs": {
+			"version": "1.6.2",
+			"resolved": "https://registry.npmmirror.com/cropperjs/-/cropperjs-1.6.2.tgz",
+			"integrity": "sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA==",
+			"license": "MIT"
+		},
+		"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==",
+			"license": "MIT",
+			"dependencies": {
+				"path-key": "^3.1.0",
+				"shebang-command": "^2.0.0",
+				"which": "^2.0.1"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/crypto-js": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz",
+			"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
+			"license": "MIT"
+		},
+		"node_modules/cssesc": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz",
+			"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+			"license": "MIT",
+			"bin": {
+				"cssesc": "bin/cssesc"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/csstype": {
+			"version": "3.1.3",
+			"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+			"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+			"license": "MIT"
+		},
+		"node_modules/d": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmmirror.com/d/-/d-1.0.2.tgz",
+			"integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
+			"license": "ISC",
+			"dependencies": {
+				"es5-ext": "^0.10.64",
+				"type": "^2.7.2"
+			},
+			"engines": {
+				"node": ">=0.12"
+			}
+		},
+		"node_modules/dateformat": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmmirror.com/dateformat/-/dateformat-2.2.0.tgz",
+			"integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==",
+			"license": "MIT",
+			"engines": {
+				"node": "*"
+			}
+		},
+		"node_modules/dayjs": {
+			"version": "1.11.13",
+			"resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
+			"integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
+			"license": "MIT"
+		},
+		"node_modules/debounce": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmmirror.com/debounce/-/debounce-1.2.1.tgz",
+			"integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==",
+			"license": "MIT"
+		},
+		"node_modules/debug": {
+			"version": "4.3.7",
+			"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.7.tgz",
+			"integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+			"license": "MIT",
+			"dependencies": {
+				"ms": "^2.1.3"
+			},
+			"engines": {
+				"node": ">=6.0"
+			},
+			"peerDependenciesMeta": {
+				"supports-color": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/deep-equal": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.2.tgz",
+			"integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==",
+			"license": "MIT",
+			"dependencies": {
+				"is-arguments": "^1.1.1",
+				"is-date-object": "^1.0.5",
+				"is-regex": "^1.1.4",
+				"object-is": "^1.1.5",
+				"object-keys": "^1.1.1",
+				"regexp.prototype.flags": "^1.5.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/deep-is": {
+			"version": "0.1.4",
+			"resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz",
+			"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/default-user-agent": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/default-user-agent/-/default-user-agent-1.0.0.tgz",
+			"integrity": "sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==",
+			"license": "MIT",
+			"dependencies": {
+				"os-name": "~1.0.3"
+			},
+			"engines": {
+				"node": ">= 0.10.0"
+			}
+		},
+		"node_modules/define-data-property": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz",
+			"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+			"license": "MIT",
+			"dependencies": {
+				"es-define-property": "^1.0.0",
+				"es-errors": "^1.3.0",
+				"gopd": "^1.0.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/define-properties": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz",
+			"integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+			"license": "MIT",
+			"dependencies": {
+				"define-data-property": "^1.0.1",
+				"has-property-descriptors": "^1.0.0",
+				"object-keys": "^1.1.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/delayed-stream": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
+			"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.4.0"
+			}
+		},
+		"node_modules/delegate": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz",
+			"integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
+			"license": "MIT"
+		},
+		"node_modules/destroy": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
+			"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.8",
+				"npm": "1.2.8000 || >= 1.4.16"
+			}
+		},
+		"node_modules/didyoumean": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz",
+			"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+			"license": "Apache-2.0"
+		},
+		"node_modules/digest-header": {
+			"version": "1.1.0",
+			"resolved": "https://registry.npmmirror.com/digest-header/-/digest-header-1.1.0.tgz",
+			"integrity": "sha512-glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 8.0.0"
+			}
+		},
+		"node_modules/dir-glob": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz",
+			"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"path-type": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/dlv": {
+			"version": "1.1.3",
+			"resolved": "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz",
+			"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+			"license": "MIT"
+		},
+		"node_modules/doctrine": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz",
+			"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"dependencies": {
+				"esutils": "^2.0.2"
+			},
+			"engines": {
+				"node": ">=6.0.0"
+			}
+		},
+		"node_modules/dom-zindex": {
+			"version": "1.0.6",
+			"resolved": "https://registry.npmmirror.com/dom-zindex/-/dom-zindex-1.0.6.tgz",
+			"integrity": "sha512-FKWIhiU96bi3xpP9ewRMgANsoVmMUBnMnmpCT6dPMZOunVYJQmJhSRruoI0XSPoHeIif3kyEuiHbFrOJwEJaEA==",
+			"license": "MIT"
+		},
+		"node_modules/dom7": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz",
+			"integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==",
+			"license": "MIT",
+			"dependencies": {
+				"ssr-window": "^3.0.0-alpha.1"
+			}
+		},
+		"node_modules/duplexify": {
+			"version": "3.7.1",
+			"resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz",
+			"integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+			"license": "MIT",
+			"dependencies": {
+				"end-of-stream": "^1.0.0",
+				"inherits": "^2.0.1",
+				"readable-stream": "^2.0.0",
+				"stream-shift": "^1.0.0"
+			}
+		},
+		"node_modules/e-icon-picker": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmmirror.com/e-icon-picker/-/e-icon-picker-2.1.1.tgz",
+			"integrity": "sha512-oj+gDuqDEQErbZctBX+DW8IcB0AYvHUJYo7/TcMPpiToITwOPcDRZYbVILb+M+j446YqG71Kkon4y1Y4BkGDww==",
+			"license": "MIT",
+			"dependencies": {
+				"@popperjs/core": "^2.11.6",
+				"@vue/shared": "^3.2.45",
+				"@vueuse/core": "^9.9.0",
+				"debounce": "^1.2.1",
+				"vue": "^3.2.45"
+			},
+			"peerDependencies": {
+				"vue": "^3.2.0"
+			}
+		},
+		"node_modules/eastasianwidth": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+			"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+			"license": "MIT"
+		},
+		"node_modules/echarts": {
+			"version": "5.5.1",
+			"resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.1.tgz",
+			"integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"tslib": "2.3.0",
+				"zrender": "5.6.0"
+			}
+		},
+		"node_modules/echarts-gl": {
+			"version": "2.0.9",
+			"resolved": "https://registry.npmmirror.com/echarts-gl/-/echarts-gl-2.0.9.tgz",
+			"integrity": "sha512-oKeMdkkkpJGWOzjgZUsF41DOh6cMsyrGGXimbjK2l6Xeq/dBQu4ShG2w2Dzrs/1bD27b2pLTGSaUzouY191gzA==",
+			"dependencies": {
+				"claygl": "^1.2.1",
+				"zrender": "^5.1.1"
+			},
+			"peerDependencies": {
+				"echarts": "^5.1.2"
+			}
+		},
+		"node_modules/echarts-wordcloud": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmmirror.com/echarts-wordcloud/-/echarts-wordcloud-2.1.0.tgz",
+			"integrity": "sha512-Kt1JmbcROgb+3IMI48KZECK2AP5lG6bSsOEs+AsuwaWJxQom31RTNd6NFYI01E/YaI1PFZeueaupjlmzSQasjQ==",
+			"license": "ISC",
+			"peerDependencies": {
+				"echarts": "^5.0.1"
+			}
+		},
+		"node_modules/echarts/node_modules/tslib": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+			"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+			"license": "0BSD"
+		},
+		"node_modules/ee-first": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
+			"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+			"license": "MIT"
+		},
+		"node_modules/electron-to-chromium": {
+			"version": "1.5.21",
+			"resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.21.tgz",
+			"integrity": "sha512-+rBAerCpQvFSPyAO677i5gJuWGO2WFsoujENdcMzsrpP7Ebcc3pmpERgU8CV4fFF10a5haP4ivnFQ/AmLICBVg==",
+			"license": "ISC"
+		},
+		"node_modules/element-plus": {
+			"version": "2.8.2",
+			"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.8.2.tgz",
+			"integrity": "sha512-pqoQlaUmzUFCjjTHyxGO7Cd0CizsQpIaad1ozV9PCaYjh2T4MIMnjfifqiYs2lWoZ/8GVwrRG1WTCfnZEjwfcg==",
+			"license": "MIT",
+			"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/element-resize-detector": {
+			"version": "1.2.4",
+			"resolved": "https://registry.npmmirror.com/element-resize-detector/-/element-resize-detector-1.2.4.tgz",
+			"integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==",
+			"license": "MIT",
+			"dependencies": {
+				"batch-processor": "1.0.0"
+			}
+		},
+		"node_modules/element-tree-line": {
+			"version": "0.2.1",
+			"resolved": "https://registry.npmmirror.com/element-tree-line/-/element-tree-line-0.2.1.tgz",
+			"integrity": "sha512-YWHftDSOFiBuw49drxJV7Yi7pCqPpwBBBeQmySjchcxU3uUOAu72FDLK5RyTGJ5qt4Ci+yoUg7zJqsFP5u7N5A==",
+			"license": "MIT",
+			"peerDependencies": {
+				"vue": "^2.6.11 || ^3.2.0"
+			}
+		},
+		"node_modules/emoji-regex": {
+			"version": "9.2.2",
+			"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz",
+			"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+			"license": "MIT"
+		},
+		"node_modules/end-of-stream": {
+			"version": "1.4.4",
+			"resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz",
+			"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+			"license": "MIT",
+			"dependencies": {
+				"once": "^1.4.0"
+			}
+		},
+		"node_modules/end-or-error": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmmirror.com/end-or-error/-/end-or-error-1.0.1.tgz",
+			"integrity": "sha512-OclLMSug+k2A0JKuf494im25ANRBVW8qsjmwbgX7lQ8P82H21PQ1PWkoYwb9y5yMBS69BPlwtzdIFClo3+7kOQ==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.11.14"
+			}
+		},
+		"node_modules/entities": {
+			"version": "4.5.0",
+			"resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+			"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+			"license": "BSD-2-Clause",
+			"engines": {
+				"node": ">=0.12"
+			},
+			"funding": {
+				"url": "https://github.com/fb55/entities?sponsor=1"
+			}
+		},
+		"node_modules/es-define-property": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.0.tgz",
+			"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+			"license": "MIT",
+			"dependencies": {
+				"get-intrinsic": "^1.2.4"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/es-errors": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+			"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/es5-ext": {
+			"version": "0.10.64",
+			"resolved": "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.64.tgz",
+			"integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
+			"hasInstallScript": true,
+			"license": "ISC",
+			"dependencies": {
+				"es6-iterator": "^2.0.3",
+				"es6-symbol": "^3.1.3",
+				"esniff": "^2.0.1",
+				"next-tick": "^1.1.0"
+			},
+			"engines": {
+				"node": ">=0.10"
+			}
+		},
+		"node_modules/es6-iterator": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz",
+			"integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+			"license": "MIT",
+			"dependencies": {
+				"d": "1",
+				"es5-ext": "^0.10.35",
+				"es6-symbol": "^3.1.1"
+			}
+		},
+		"node_modules/es6-symbol": {
+			"version": "3.1.4",
+			"resolved": "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.4.tgz",
+			"integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
+			"license": "ISC",
+			"dependencies": {
+				"d": "^1.0.2",
+				"ext": "^1.7.0"
+			},
+			"engines": {
+				"node": ">=0.12"
+			}
+		},
+		"node_modules/esbuild": {
+			"version": "0.18.20",
+			"resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz",
+			"integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
+			"hasInstallScript": true,
+			"license": "MIT",
+			"bin": {
+				"esbuild": "bin/esbuild"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"optionalDependencies": {
+				"@esbuild/android-arm": "0.18.20",
+				"@esbuild/android-arm64": "0.18.20",
+				"@esbuild/android-x64": "0.18.20",
+				"@esbuild/darwin-arm64": "0.18.20",
+				"@esbuild/darwin-x64": "0.18.20",
+				"@esbuild/freebsd-arm64": "0.18.20",
+				"@esbuild/freebsd-x64": "0.18.20",
+				"@esbuild/linux-arm": "0.18.20",
+				"@esbuild/linux-arm64": "0.18.20",
+				"@esbuild/linux-ia32": "0.18.20",
+				"@esbuild/linux-loong64": "0.18.20",
+				"@esbuild/linux-mips64el": "0.18.20",
+				"@esbuild/linux-ppc64": "0.18.20",
+				"@esbuild/linux-riscv64": "0.18.20",
+				"@esbuild/linux-s390x": "0.18.20",
+				"@esbuild/linux-x64": "0.18.20",
+				"@esbuild/netbsd-x64": "0.18.20",
+				"@esbuild/openbsd-x64": "0.18.20",
+				"@esbuild/sunos-x64": "0.18.20",
+				"@esbuild/win32-arm64": "0.18.20",
+				"@esbuild/win32-ia32": "0.18.20",
+				"@esbuild/win32-x64": "0.18.20"
+			}
+		},
+		"node_modules/escalade": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
+			"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/escape-html": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
+			"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+			"license": "MIT"
+		},
+		"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==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.8.0"
+			}
+		},
+		"node_modules/eslint": {
+			"version": "8.57.0",
+			"resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.57.0.tgz",
+			"integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.2.0",
+				"@eslint-community/regexpp": "^4.6.1",
+				"@eslint/eslintrc": "^2.1.4",
+				"@eslint/js": "8.57.0",
+				"@humanwhocodes/config-array": "^0.11.14",
+				"@humanwhocodes/module-importer": "^1.0.1",
+				"@nodelib/fs.walk": "^1.2.8",
+				"@ungap/structured-clone": "^1.2.0",
+				"ajv": "^6.12.4",
+				"chalk": "^4.0.0",
+				"cross-spawn": "^7.0.2",
+				"debug": "^4.3.2",
+				"doctrine": "^3.0.0",
+				"escape-string-regexp": "^4.0.0",
+				"eslint-scope": "^7.2.2",
+				"eslint-visitor-keys": "^3.4.3",
+				"espree": "^9.6.1",
+				"esquery": "^1.4.2",
+				"esutils": "^2.0.2",
+				"fast-deep-equal": "^3.1.3",
+				"file-entry-cache": "^6.0.1",
+				"find-up": "^5.0.0",
+				"glob-parent": "^6.0.2",
+				"globals": "^13.19.0",
+				"graphemer": "^1.4.0",
+				"ignore": "^5.2.0",
+				"imurmurhash": "^0.1.4",
+				"is-glob": "^4.0.0",
+				"is-path-inside": "^3.0.3",
+				"js-yaml": "^4.1.0",
+				"json-stable-stringify-without-jsonify": "^1.0.1",
+				"levn": "^0.4.1",
+				"lodash.merge": "^4.6.2",
+				"minimatch": "^3.1.2",
+				"natural-compare": "^1.4.0",
+				"optionator": "^0.9.3",
+				"strip-ansi": "^6.0.1",
+				"text-table": "^0.2.0"
+			},
+			"bin": {
+				"eslint": "bin/eslint.js"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint-plugin-vue": {
+			"version": "9.28.0",
+			"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.28.0.tgz",
+			"integrity": "sha512-ShrihdjIhOTxs+MfWun6oJWuk+g/LAhN+CiuOl/jjkG3l0F2AuK5NMTaWqyvBgkFtpYmyks6P4603mLmhNJW8g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.4.0",
+				"globals": "^13.24.0",
+				"natural-compare": "^1.4.0",
+				"nth-check": "^2.1.1",
+				"postcss-selector-parser": "^6.0.15",
+				"semver": "^7.6.3",
+				"vue-eslint-parser": "^9.4.3",
+				"xml-name-validator": "^4.0.0"
+			},
+			"engines": {
+				"node": "^14.17.0 || >=16.0.0"
+			},
+			"peerDependencies": {
+				"eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
+			}
+		},
+		"node_modules/eslint-plugin-vue/node_modules/globals": {
+			"version": "13.24.0",
+			"resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz",
+			"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"type-fest": "^0.20.2"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/eslint-scope": {
+			"version": "5.1.1",
+			"resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
+			"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"esrecurse": "^4.3.0",
+				"estraverse": "^4.1.1"
+			},
+			"engines": {
+				"node": ">=8.0.0"
+			}
+		},
+		"node_modules/eslint-visitor-keys": {
+			"version": "3.4.3",
+			"resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+			"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint/node_modules/ansi-styles": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+			"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"color-convert": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+			}
+		},
+		"node_modules/eslint/node_modules/chalk": {
+			"version": "4.1.2",
+			"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+			"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"ansi-styles": "^4.1.0",
+				"supports-color": "^7.1.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/chalk?sponsor=1"
+			}
+		},
+		"node_modules/eslint/node_modules/color-convert": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+			"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"color-name": "~1.1.4"
+			},
+			"engines": {
+				"node": ">=7.0.0"
+			}
+		},
+		"node_modules/eslint/node_modules/color-name": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+			"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/eslint/node_modules/escape-string-regexp": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+			"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/eslint/node_modules/eslint-scope": {
+			"version": "7.2.2",
+			"resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz",
+			"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"esrecurse": "^4.3.0",
+				"estraverse": "^5.2.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint/node_modules/estraverse": {
+			"version": "5.3.0",
+			"resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",
+			"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
+		"node_modules/eslint/node_modules/globals": {
+			"version": "13.24.0",
+			"resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz",
+			"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"type-fest": "^0.20.2"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/eslint/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,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/eslint/node_modules/supports-color": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+			"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"has-flag": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/esniff": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmmirror.com/esniff/-/esniff-2.0.1.tgz",
+			"integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+			"license": "ISC",
+			"dependencies": {
+				"d": "^1.0.1",
+				"es5-ext": "^0.10.62",
+				"event-emitter": "^0.3.5",
+				"type": "^2.7.2"
+			},
+			"engines": {
+				"node": ">=0.10"
+			}
+		},
+		"node_modules/espree": {
+			"version": "9.6.1",
+			"resolved": "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz",
+			"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"acorn": "^8.9.0",
+				"acorn-jsx": "^5.3.2",
+				"eslint-visitor-keys": "^3.4.1"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/esquery": {
+			"version": "1.6.0",
+			"resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.6.0.tgz",
+			"integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+			"dev": true,
+			"license": "BSD-3-Clause",
+			"dependencies": {
+				"estraverse": "^5.1.0"
+			},
+			"engines": {
+				"node": ">=0.10"
+			}
+		},
+		"node_modules/esquery/node_modules/estraverse": {
+			"version": "5.3.0",
+			"resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",
+			"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
+		"node_modules/esrecurse": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz",
+			"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"estraverse": "^5.2.0"
+			},
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
+		"node_modules/esrecurse/node_modules/estraverse": {
+			"version": "5.3.0",
+			"resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",
+			"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
+		"node_modules/estraverse": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz",
+			"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"engines": {
+				"node": ">=4.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==",
+			"license": "MIT"
+		},
+		"node_modules/esutils": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz",
+			"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/event-emitter": {
+			"version": "0.3.5",
+			"resolved": "https://registry.npmmirror.com/event-emitter/-/event-emitter-0.3.5.tgz",
+			"integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+			"license": "MIT",
+			"dependencies": {
+				"d": "1",
+				"es5-ext": "~0.10.14"
+			}
+		},
+		"node_modules/event-target-shim": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz",
+			"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/eventemitter3": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-2.0.3.tgz",
+			"integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==",
+			"license": "MIT"
+		},
+		"node_modules/events": {
+			"version": "3.3.0",
+			"resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
+			"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.8.x"
+			}
+		},
+		"node_modules/ext": {
+			"version": "1.7.0",
+			"resolved": "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz",
+			"integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+			"license": "ISC",
+			"dependencies": {
+				"type": "^2.7.2"
+			}
+		},
+		"node_modules/extend": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
+			"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+			"license": "MIT"
+		},
+		"node_modules/extend-shallow": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz",
+			"integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+			"license": "MIT",
+			"dependencies": {
+				"is-extendable": "^0.1.0"
+			},
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/fast-deep-equal": {
+			"version": "3.1.3",
+			"resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+			"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+			"license": "MIT"
+		},
+		"node_modules/fast-diff": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.1.2.tgz",
+			"integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==",
+			"license": "Apache-2.0"
+		},
+		"node_modules/fast-glob": {
+			"version": "3.3.2",
+			"resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz",
+			"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+			"license": "MIT",
+			"dependencies": {
+				"@nodelib/fs.stat": "^2.0.2",
+				"@nodelib/fs.walk": "^1.2.3",
+				"glob-parent": "^5.1.2",
+				"merge2": "^1.3.0",
+				"micromatch": "^4.0.4"
+			},
+			"engines": {
+				"node": ">=8.6.0"
+			}
+		},
+		"node_modules/fast-glob/node_modules/glob-parent": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+			"license": "ISC",
+			"dependencies": {
+				"is-glob": "^4.0.1"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/fast-json-stable-stringify": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+			"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+			"license": "MIT"
+		},
+		"node_modules/fast-levenshtein": {
+			"version": "2.0.6",
+			"resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+			"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/fast-unique-numbers": {
+			"version": "8.0.13",
+			"resolved": "https://registry.npmmirror.com/fast-unique-numbers/-/fast-unique-numbers-8.0.13.tgz",
+			"integrity": "sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/runtime": "^7.23.8",
+				"tslib": "^2.6.2"
+			},
+			"engines": {
+				"node": ">=16.1.0"
+			}
+		},
+		"node_modules/fast-xml-parser": {
+			"version": "4.4.1",
+			"resolved": "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz",
+			"integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/NaturalIntelligence"
+				},
+				{
+					"type": "paypal",
+					"url": "https://paypal.me/naturalintelligence"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"strnum": "^1.0.5"
+			},
+			"bin": {
+				"fxparser": "src/cli/cli.js"
+			}
+		},
+		"node_modules/fastq": {
+			"version": "1.17.1",
+			"resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz",
+			"integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+			"license": "ISC",
+			"dependencies": {
+				"reusify": "^1.0.4"
+			}
+		},
+		"node_modules/file-entry-cache": {
+			"version": "6.0.1",
+			"resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+			"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"flat-cache": "^3.0.4"
+			},
+			"engines": {
+				"node": "^10.12.0 || >=12.0.0"
+			}
+		},
+		"node_modules/file-saver": {
+			"version": "2.0.5",
+			"resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
+			"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==",
+			"license": "MIT"
+		},
+		"node_modules/fill-range": {
+			"version": "7.1.1",
+			"resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
+			"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+			"license": "MIT",
+			"dependencies": {
+				"to-regex-range": "^5.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/find-up": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz",
+			"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"locate-path": "^6.0.0",
+				"path-exists": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/flat-cache": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz",
+			"integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"flatted": "^3.2.9",
+				"keyv": "^4.5.3",
+				"rimraf": "^3.0.2"
+			},
+			"engines": {
+				"node": "^10.12.0 || >=12.0.0"
+			}
+		},
+		"node_modules/flatted": {
+			"version": "3.3.1",
+			"resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.3.1.tgz",
+			"integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/follow-redirects": {
+			"version": "1.15.9",
+			"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
+			"integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+			"funding": [
+				{
+					"type": "individual",
+					"url": "https://github.com/sponsors/RubenVerborgh"
+				}
+			],
+			"license": "MIT",
+			"engines": {
+				"node": ">=4.0"
+			},
+			"peerDependenciesMeta": {
+				"debug": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/font-awesome": {
+			"version": "4.7.0",
+			"resolved": "https://registry.npmmirror.com/font-awesome/-/font-awesome-4.7.0.tgz",
+			"integrity": "sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==",
+			"license": "(OFL-1.1 AND MIT)",
+			"engines": {
+				"node": ">=0.10.3"
+			}
+		},
+		"node_modules/foreground-child": {
+			"version": "3.3.0",
+			"resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.0.tgz",
+			"integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+			"license": "ISC",
+			"dependencies": {
+				"cross-spawn": "^7.0.0",
+				"signal-exit": "^4.0.1"
+			},
+			"engines": {
+				"node": ">=14"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"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==",
+			"license": "MIT",
+			"dependencies": {
+				"asynckit": "^0.4.0",
+				"combined-stream": "^1.0.8",
+				"mime-types": "^2.1.12"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/formstream": {
+			"version": "1.5.1",
+			"resolved": "https://registry.npmmirror.com/formstream/-/formstream-1.5.1.tgz",
+			"integrity": "sha512-q7ORzFqotpwn3Y/GBK2lK7PjtZZwJHz9QE9Phv8zb5IrL9ftGLyi2zjGURON3voK8TaZ+mqJKERYN4lrHYTkUQ==",
+			"license": "MIT",
+			"dependencies": {
+				"destroy": "^1.0.4",
+				"mime": "^2.5.2",
+				"node-hex": "^1.0.1",
+				"pause-stream": "~0.0.11"
+			}
+		},
+		"node_modules/frac": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
+			"integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/fraction.js": {
+			"version": "4.3.7",
+			"resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz",
+			"integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+			"license": "MIT",
+			"engines": {
+				"node": "*"
+			},
+			"funding": {
+				"type": "patreon",
+				"url": "https://github.com/sponsors/rawify"
+			}
+		},
+		"node_modules/fs.realpath": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",
+			"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+			"dev": true,
+			"license": "ISC"
+		},
+		"node_modules/fsevents": {
+			"version": "2.3.3",
+			"resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
+			"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+			"hasInstallScript": true,
+			"license": "MIT",
+			"optional": true,
+			"os": [
+				"darwin"
+			],
+			"engines": {
+				"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+			}
+		},
+		"node_modules/function-bind": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+			"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/functions-have-names": {
+			"version": "1.2.3",
+			"resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz",
+			"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/gensync": {
+			"version": "1.0.0-beta.2",
+			"resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
+			"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/get-intrinsic": {
+			"version": "1.2.4",
+			"resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+			"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+			"license": "MIT",
+			"dependencies": {
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"has-proto": "^1.0.1",
+				"has-symbols": "^1.0.3",
+				"hasown": "^2.0.0"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/get-ready": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/get-ready/-/get-ready-1.0.0.tgz",
+			"integrity": "sha512-mFXCZPJIlcYcth+N8267+mghfYN9h3EhsDa6JSnbA3Wrhh/XFpuowviFcsDeYZtKspQyWyJqfs4O6P8CHeTwzw==",
+			"license": "MIT"
+		},
+		"node_modules/glob": {
+			"version": "10.4.5",
+			"resolved": "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz",
+			"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+			"license": "ISC",
+			"dependencies": {
+				"foreground-child": "^3.1.0",
+				"jackspeak": "^3.1.2",
+				"minimatch": "^9.0.4",
+				"minipass": "^7.1.2",
+				"package-json-from-dist": "^1.0.0",
+				"path-scurry": "^1.11.1"
+			},
+			"bin": {
+				"glob": "dist/esm/bin.mjs"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/glob-parent": {
+			"version": "6.0.2",
+			"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz",
+			"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+			"license": "ISC",
+			"dependencies": {
+				"is-glob": "^4.0.3"
+			},
+			"engines": {
+				"node": ">=10.13.0"
+			}
+		},
+		"node_modules/glob/node_modules/brace-expansion": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+			"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+			"license": "MIT",
+			"dependencies": {
+				"balanced-match": "^1.0.0"
+			}
+		},
+		"node_modules/glob/node_modules/minimatch": {
+			"version": "9.0.5",
+			"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz",
+			"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+			"license": "ISC",
+			"dependencies": {
+				"brace-expansion": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=16 || 14 >=14.17"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/globals": {
+			"version": "11.12.0",
+			"resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz",
+			"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/globby": {
+			"version": "11.1.0",
+			"resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz",
+			"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"array-union": "^2.1.0",
+				"dir-glob": "^3.0.1",
+				"fast-glob": "^3.2.9",
+				"ignore": "^5.2.0",
+				"merge2": "^1.4.1",
+				"slash": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/good-listener": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz",
+			"integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==",
+			"license": "MIT",
+			"dependencies": {
+				"delegate": "^3.1.2"
+			}
+		},
+		"node_modules/gopd": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz",
+			"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+			"license": "MIT",
+			"dependencies": {
+				"get-intrinsic": "^1.1.3"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/graphemer": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz",
+			"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"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==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/has-property-descriptors": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+			"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+			"license": "MIT",
+			"dependencies": {
+				"es-define-property": "^1.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/has-proto": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.3.tgz",
+			"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/has-symbols": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
+			"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/has-tostringtag": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+			"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+			"license": "MIT",
+			"dependencies": {
+				"has-symbols": "^1.0.3"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/hasown": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
+			"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+			"license": "MIT",
+			"dependencies": {
+				"function-bind": "^1.1.2"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/help-me": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmmirror.com/help-me/-/help-me-5.0.0.tgz",
+			"integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+			"license": "MIT"
+		},
+		"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==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/html-void-elements": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz",
+			"integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==",
+			"license": "MIT",
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
+		"node_modules/humanize-duration": {
+			"version": "3.32.1",
+			"resolved": "https://registry.npmmirror.com/humanize-duration/-/humanize-duration-3.32.1.tgz",
+			"integrity": "sha512-inh5wue5XdfObhu/IGEMiA1nUXigSGcaKNemcbLRKa7jXYGDZXr3LoT9pTIzq2hPEbld7w/qv9h+ikWGz8fL1g==",
+			"license": "Unlicense"
+		},
+		"node_modules/humanize-ms": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz",
+			"integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+			"license": "MIT",
+			"dependencies": {
+				"ms": "^2.0.0"
+			}
+		},
+		"node_modules/i18next": {
+			"version": "20.6.1",
+			"resolved": "https://registry.npmmirror.com/i18next/-/i18next-20.6.1.tgz",
+			"integrity": "sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/runtime": "^7.12.0"
+			}
+		},
+		"node_modules/iconv-lite": {
+			"version": "0.6.3",
+			"resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz",
+			"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+			"license": "MIT",
+			"dependencies": {
+				"safer-buffer": ">= 2.1.2 < 3.0.0"
+			},
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/ieee754": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz",
+			"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/feross"
+				},
+				{
+					"type": "patreon",
+					"url": "https://www.patreon.com/feross"
+				},
+				{
+					"type": "consulting",
+					"url": "https://feross.org/support"
+				}
+			],
+			"license": "BSD-3-Clause"
+		},
+		"node_modules/ignore": {
+			"version": "5.3.2",
+			"resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz",
+			"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 4"
+			}
+		},
+		"node_modules/immer": {
+			"version": "9.0.21",
+			"resolved": "https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz",
+			"integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==",
+			"license": "MIT",
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/immer"
+			}
+		},
+		"node_modules/immutable": {
+			"version": "4.3.7",
+			"resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.7.tgz",
+			"integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
+			"devOptional": true,
+			"license": "MIT"
+		},
+		"node_modules/import-fresh": {
+			"version": "3.3.0",
+			"resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz",
+			"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"parent-module": "^1.0.0",
+				"resolve-from": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/imurmurhash": {
+			"version": "0.1.4",
+			"resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz",
+			"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.8.19"
+			}
+		},
+		"node_modules/inflight": {
+			"version": "1.0.6",
+			"resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",
+			"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+			"deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"once": "^1.3.0",
+				"wrappy": "1"
+			}
+		},
+		"node_modules/inherits": {
+			"version": "2.0.4",
+			"resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+			"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+			"license": "ISC"
+		},
+		"node_modules/is-arguments": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz",
+			"integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+			"license": "MIT",
+			"dependencies": {
+				"call-bind": "^1.0.2",
+				"has-tostringtag": "^1.0.0"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/is-binary-path": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
+			"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+			"license": "MIT",
+			"dependencies": {
+				"binary-extensions": "^2.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/is-class-hotfix": {
+			"version": "0.0.6",
+			"resolved": "https://registry.npmmirror.com/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz",
+			"integrity": "sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==",
+			"license": "MIT"
+		},
+		"node_modules/is-core-module": {
+			"version": "2.15.1",
+			"resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.15.1.tgz",
+			"integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
+			"license": "MIT",
+			"dependencies": {
+				"hasown": "^2.0.2"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/is-date-object": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz",
+			"integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+			"license": "MIT",
+			"dependencies": {
+				"has-tostringtag": "^1.0.0"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/is-extendable": {
+			"version": "0.1.1",
+			"resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz",
+			"integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/is-extglob": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+			"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/is-fullwidth-code-point": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+			"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/is-glob": {
+			"version": "4.0.3",
+			"resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+			"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+			"license": "MIT",
+			"dependencies": {
+				"is-extglob": "^2.1.1"
+			},
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/is-hotkey": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz",
+			"integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==",
+			"license": "MIT"
+		},
+		"node_modules/is-number": {
+			"version": "7.0.0",
+			"resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+			"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.12.0"
+			}
+		},
+		"node_modules/is-path-inside": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz",
+			"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/is-plain-object": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz",
+			"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/is-regex": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz",
+			"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+			"license": "MIT",
+			"dependencies": {
+				"call-bind": "^1.0.2",
+				"has-tostringtag": "^1.0.0"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/is-type-of": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmmirror.com/is-type-of/-/is-type-of-1.4.0.tgz",
+			"integrity": "sha512-EddYllaovi5ysMLMEN7yzHEKh8A850cZ7pykrY1aNRQGn/CDjRDE9qEWbIdt7xGEVJmjBXzU/fNnC4ABTm8tEQ==",
+			"license": "MIT",
+			"dependencies": {
+				"core-util-is": "^1.0.2",
+				"is-class-hotfix": "~0.0.6",
+				"isstream": "~0.1.2"
+			}
+		},
+		"node_modules/is-url": {
+			"version": "1.2.4",
+			"resolved": "https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz",
+			"integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
+			"license": "MIT"
+		},
+		"node_modules/isarray": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",
+			"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+			"license": "MIT"
+		},
+		"node_modules/isexe": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+			"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+			"license": "ISC"
+		},
+		"node_modules/isomorphic-ws": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmmirror.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz",
+			"integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==",
+			"license": "MIT",
+			"peerDependencies": {
+				"ws": "*"
+			}
+		},
+		"node_modules/isstream": {
+			"version": "0.1.2",
+			"resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz",
+			"integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
+			"license": "MIT"
+		},
+		"node_modules/jackspeak": {
+			"version": "3.4.3",
+			"resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz",
+			"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+			"license": "BlueOak-1.0.0",
+			"dependencies": {
+				"@isaacs/cliui": "^8.0.2"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			},
+			"optionalDependencies": {
+				"@pkgjs/parseargs": "^0.11.0"
+			}
+		},
+		"node_modules/javascript-natural-sort": {
+			"version": "0.7.1",
+			"resolved": "https://registry.npmmirror.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz",
+			"integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==",
+			"license": "MIT"
+		},
+		"node_modules/jiti": {
+			"version": "1.21.6",
+			"resolved": "https://registry.npmmirror.com/jiti/-/jiti-1.21.6.tgz",
+			"integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
+			"license": "MIT",
+			"bin": {
+				"jiti": "bin/jiti.js"
+			}
+		},
+		"node_modules/jmespath": {
+			"version": "0.16.0",
+			"resolved": "https://registry.npmmirror.com/jmespath/-/jmespath-0.16.0.tgz",
+			"integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==",
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">= 0.6.0"
+			}
+		},
+		"node_modules/js-base64": {
+			"version": "2.6.4",
+			"resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz",
+			"integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+			"license": "BSD-3-Clause"
+		},
+		"node_modules/js-cookie": {
+			"version": "3.0.5",
+			"resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz",
+			"integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=14"
+			}
+		},
+		"node_modules/js-sdsl": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.3.0.tgz",
+			"integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
+			"license": "MIT",
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/js-sdsl"
+			}
+		},
+		"node_modules/js-table2excel": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmmirror.com/js-table2excel/-/js-table2excel-1.1.2.tgz",
+			"integrity": "sha512-E5QcPLjlF7qcqqF+DgaPxj9b+lQsItMqkwcXKpODtZ8zo5f07huuvem3Ek1WYzOcSOalU7RwEAG/66WQ5PVfWA==",
+			"license": "MIT"
+		},
+		"node_modules/js-tokens": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
+			"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+			"license": "MIT"
+		},
+		"node_modules/js-yaml": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz",
+			"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"argparse": "^2.0.1"
+			},
+			"bin": {
+				"js-yaml": "bin/js-yaml.js"
+			}
+		},
+		"node_modules/jsesc": {
+			"version": "2.5.2",
+			"resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz",
+			"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+			"license": "MIT",
+			"bin": {
+				"jsesc": "bin/jsesc"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/json-buffer": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz",
+			"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/json-schema-traverse": {
+			"version": "0.4.1",
+			"resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+			"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+			"license": "MIT"
+		},
+		"node_modules/json-source-map": {
+			"version": "0.6.1",
+			"resolved": "https://registry.npmmirror.com/json-source-map/-/json-source-map-0.6.1.tgz",
+			"integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==",
+			"license": "MIT"
+		},
+		"node_modules/json-stable-stringify-without-jsonify": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+			"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/json5": {
+			"version": "2.2.3",
+			"resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+			"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+			"license": "MIT",
+			"bin": {
+				"json5": "lib/cli.js"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/jsoneditor": {
+			"version": "9.10.5",
+			"resolved": "https://registry.npmmirror.com/jsoneditor/-/jsoneditor-9.10.5.tgz",
+			"integrity": "sha512-fVZ0NMt+zm4rqTKBv2x7zPdLeaRyKo1EjJkaR1QjK4gEM1rMwICILYSW1OPxSc1qqyAoDaA/eeNrluKoxOocCA==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"ace-builds": "^1.31.1",
+				"ajv": "^6.12.6",
+				"javascript-natural-sort": "^0.7.1",
+				"jmespath": "^0.16.0",
+				"json-source-map": "^0.6.1",
+				"jsonrepair": "3.1.0",
+				"mobius1-selectr": "^2.4.13",
+				"picomodal": "^3.0.0",
+				"vanilla-picker": "^2.12.2"
+			}
+		},
+		"node_modules/jsonrepair": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmmirror.com/jsonrepair/-/jsonrepair-3.1.0.tgz",
+			"integrity": "sha512-idqReg23J0PVRAADmZMc5xQM3xeOX5bTB6OTyMnzq33IXJXmn9iJuWIEvGmrN80rQf4d7uLTMEDwpzujNcI0Rg==",
+			"license": "ISC",
+			"bin": {
+				"jsonrepair": "bin/cli.js"
+			}
+		},
+		"node_modules/jsplumb": {
+			"version": "2.15.6",
+			"resolved": "https://registry.npmmirror.com/jsplumb/-/jsplumb-2.15.6.tgz",
+			"integrity": "sha512-sIpbpz5eMVM+vV+MQzFCidlaa1RsknrQs6LOTKYDjYUDdTAi2AN2bFi94TxB33TifcIsRNV1jebcaxg0tCoPzg==",
+			"license": "(MIT OR GPL-2.0)"
+		},
+		"node_modules/jstoxml": {
+			"version": "2.2.9",
+			"resolved": "https://registry.npmmirror.com/jstoxml/-/jstoxml-2.2.9.tgz",
+			"integrity": "sha512-OYWlK0j+roh+eyaMROlNbS5cd5R25Y+IUpdl7cNdB8HNrkgwQzIS7L9MegxOiWNBj9dQhA/yAxiMwCC5mwNoBw==",
+			"license": "MIT"
+		},
+		"node_modules/keyv": {
+			"version": "4.5.4",
+			"resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz",
+			"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"json-buffer": "3.0.1"
+			}
+		},
+		"node_modules/levn": {
+			"version": "0.4.1",
+			"resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz",
+			"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"prelude-ls": "^1.2.1",
+				"type-check": "~0.4.0"
+			},
+			"engines": {
+				"node": ">= 0.8.0"
+			}
+		},
+		"node_modules/lilconfig": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz",
+			"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/lines-and-columns": {
+			"version": "1.2.4",
+			"resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+			"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+			"license": "MIT"
+		},
+		"node_modules/locate-path": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz",
+			"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"p-locate": "^5.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/lodash": {
+			"version": "4.17.21",
+			"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+			"license": "MIT"
+		},
+		"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==",
+			"license": "MIT"
+		},
+		"node_modules/lodash-unified": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz",
+			"integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
+			"license": "MIT",
+			"peerDependencies": {
+				"@types/lodash-es": "*",
+				"lodash": "*",
+				"lodash-es": "*"
+			}
+		},
+		"node_modules/lodash.camelcase": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+			"integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+			"license": "MIT"
+		},
+		"node_modules/lodash.clonedeep": {
+			"version": "4.5.0",
+			"resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+			"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
+			"license": "MIT"
+		},
+		"node_modules/lodash.debounce": {
+			"version": "4.0.8",
+			"resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+			"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+			"license": "MIT"
+		},
+		"node_modules/lodash.foreach": {
+			"version": "4.5.0",
+			"resolved": "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+			"integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==",
+			"license": "MIT"
+		},
+		"node_modules/lodash.isequal": {
+			"version": "4.5.0",
+			"resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+			"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
+			"license": "MIT"
+		},
+		"node_modules/lodash.merge": {
+			"version": "4.6.2",
+			"resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz",
+			"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/lodash.throttle": {
+			"version": "4.1.1",
+			"resolved": "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+			"integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==",
+			"license": "MIT"
+		},
+		"node_modules/lodash.toarray": {
+			"version": "4.4.0",
+			"resolved": "https://registry.npmmirror.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
+			"integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==",
+			"license": "MIT"
+		},
+		"node_modules/lru-cache": {
+			"version": "10.4.3",
+			"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz",
+			"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+			"license": "ISC"
+		},
+		"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT"
+		},
+		"node_modules/merge-descriptors": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+			"integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/merge2": {
+			"version": "1.4.1",
+			"resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
+			"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/micromatch": {
+			"version": "4.0.8",
+			"resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
+			"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+			"license": "MIT",
+			"dependencies": {
+				"braces": "^3.0.3",
+				"picomatch": "^2.3.1"
+			},
+			"engines": {
+				"node": ">=8.6"
+			}
+		},
+		"node_modules/mime": {
+			"version": "2.6.0",
+			"resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz",
+			"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
+			"license": "MIT",
+			"bin": {
+				"mime": "cli.js"
+			},
+			"engines": {
+				"node": ">=4.0.0"
+			}
+		},
+		"node_modules/mime-db": {
+			"version": "1.52.0",
+			"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+			"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.6"
+			}
+		},
+		"node_modules/mime-match": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmmirror.com/mime-match/-/mime-match-1.0.2.tgz",
+			"integrity": "sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==",
+			"license": "ISC",
+			"dependencies": {
+				"wildcard": "^1.1.0"
+			}
+		},
+		"node_modules/mime-types": {
+			"version": "2.1.35",
+			"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+			"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+			"license": "MIT",
+			"dependencies": {
+				"mime-db": "1.52.0"
+			},
+			"engines": {
+				"node": ">= 0.6"
+			}
+		},
+		"node_modules/minimatch": {
+			"version": "3.1.2",
+			"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"brace-expansion": "^1.1.7"
+			},
+			"engines": {
+				"node": "*"
+			}
+		},
+		"node_modules/minimist": {
+			"version": "1.2.8",
+			"resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
+			"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/minipass": {
+			"version": "7.1.2",
+			"resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz",
+			"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+			"license": "ISC",
+			"engines": {
+				"node": ">=16 || 14 >=14.17"
+			}
+		},
+		"node_modules/mitt": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
+			"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+			"license": "MIT"
+		},
+		"node_modules/mkdirp": {
+			"version": "0.5.6",
+			"resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz",
+			"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+			"license": "MIT",
+			"dependencies": {
+				"minimist": "^1.2.6"
+			},
+			"bin": {
+				"mkdirp": "bin/cmd.js"
+			}
+		},
+		"node_modules/mobius1-selectr": {
+			"version": "2.4.13",
+			"resolved": "https://registry.npmmirror.com/mobius1-selectr/-/mobius1-selectr-2.4.13.tgz",
+			"integrity": "sha512-Mk9qDrvU44UUL0EBhbAA1phfQZ7aMZPjwtL7wkpiBzGh8dETGqfsh50mWoX9EkjDlkONlErWXArHCKfoxVg0Bw==",
+			"license": "MIT"
+		},
+		"node_modules/mqtt": {
+			"version": "5.10.1",
+			"resolved": "https://registry.npmmirror.com/mqtt/-/mqtt-5.10.1.tgz",
+			"integrity": "sha512-hXCOki8sANoQ7w+2OzJzg6qMBxTtrH9RlnVNV8panLZgnl+Gh0J/t4k6r8Az8+C7y3KAcyXtn0mmLixyUom8Sw==",
+			"license": "MIT",
+			"dependencies": {
+				"@types/readable-stream": "^4.0.5",
+				"@types/ws": "^8.5.9",
+				"commist": "^3.2.0",
+				"concat-stream": "^2.0.0",
+				"debug": "^4.3.4",
+				"help-me": "^5.0.0",
+				"lru-cache": "^10.0.1",
+				"minimist": "^1.2.8",
+				"mqtt-packet": "^9.0.0",
+				"number-allocator": "^1.0.14",
+				"readable-stream": "^4.4.2",
+				"reinterval": "^1.1.0",
+				"rfdc": "^1.3.0",
+				"split2": "^4.2.0",
+				"worker-timers": "^7.1.4",
+				"ws": "^8.17.1"
+			},
+			"bin": {
+				"mqtt": "build/bin/mqtt.js",
+				"mqtt_pub": "build/bin/pub.js",
+				"mqtt_sub": "build/bin/sub.js"
+			},
+			"engines": {
+				"node": ">=16.0.0"
+			}
+		},
+		"node_modules/mqtt-packet": {
+			"version": "9.0.0",
+			"resolved": "https://registry.npmmirror.com/mqtt-packet/-/mqtt-packet-9.0.0.tgz",
+			"integrity": "sha512-8v+HkX+fwbodsWAZIZTI074XIoxVBOmPeggQuDFCGg1SqNcC+uoRMWu7J6QlJPqIUIJXmjNYYHxBBLr1Y/Df4w==",
+			"license": "MIT",
+			"dependencies": {
+				"bl": "^6.0.8",
+				"debug": "^4.3.4",
+				"process-nextick-args": "^2.0.1"
+			}
+		},
+		"node_modules/mqtt/node_modules/readable-stream": {
+			"version": "4.5.2",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-4.5.2.tgz",
+			"integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
+			"license": "MIT",
+			"dependencies": {
+				"abort-controller": "^3.0.0",
+				"buffer": "^6.0.3",
+				"events": "^3.3.0",
+				"process": "^0.11.10",
+				"string_decoder": "^1.3.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			}
+		},
+		"node_modules/mqtt/node_modules/string_decoder": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
+			"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+			"license": "MIT",
+			"dependencies": {
+				"safe-buffer": "~5.2.0"
+			}
+		},
+		"node_modules/ms": {
+			"version": "2.1.3",
+			"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+			"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+			"license": "MIT"
+		},
+		"node_modules/mz": {
+			"version": "2.7.0",
+			"resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz",
+			"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+			"license": "MIT",
+			"dependencies": {
+				"any-promise": "^1.0.0",
+				"object-assign": "^4.0.1",
+				"thenify-all": "^1.0.0"
+			}
+		},
+		"node_modules/namespace-emitter": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmmirror.com/namespace-emitter/-/namespace-emitter-2.0.1.tgz",
+			"integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==",
+			"license": "MIT"
+		},
+		"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"
+				}
+			],
+			"license": "MIT",
+			"bin": {
+				"nanoid": "bin/nanoid.cjs"
+			},
+			"engines": {
+				"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+			}
+		},
+		"node_modules/natural-compare": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz",
+			"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/natural-compare-lite": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmmirror.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+			"integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/next-tick": {
+			"version": "1.1.0",
+			"resolved": "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz",
+			"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
+			"license": "ISC"
+		},
+		"node_modules/node-hex": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmmirror.com/node-hex/-/node-hex-1.0.1.tgz",
+			"integrity": "sha512-iwpZdvW6Umz12ICmu9IYPRxg0tOLGmU3Tq2tKetejCj3oZd7b2nUXwP3a7QA5M9glWy8wlPS1G3RwM/CdsUbdQ==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=8.0.0"
+			}
+		},
+		"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==",
+			"license": "MIT"
+		},
+		"node_modules/normalize-path": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
+			"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/normalize-range": {
+			"version": "0.1.2",
+			"resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz",
+			"integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/normalize-wheel-es": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
+			"integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==",
+			"license": "BSD-3-Clause"
+		},
+		"node_modules/nprogress": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz",
+			"integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==",
+			"license": "MIT"
+		},
+		"node_modules/nth-check": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz",
+			"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"boolbase": "^1.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/fb55/nth-check?sponsor=1"
+			}
+		},
+		"node_modules/number-allocator": {
+			"version": "1.0.14",
+			"resolved": "https://registry.npmmirror.com/number-allocator/-/number-allocator-1.0.14.tgz",
+			"integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==",
+			"license": "MIT",
+			"dependencies": {
+				"debug": "^4.3.1",
+				"js-sdsl": "4.3.0"
+			}
+		},
+		"node_modules/object-assign": {
+			"version": "4.1.1",
+			"resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz",
+			"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/object-hash": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz",
+			"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/object-inspect": {
+			"version": "1.13.2",
+			"resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.2.tgz",
+			"integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/object-is": {
+			"version": "1.1.6",
+			"resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.6.tgz",
+			"integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
+			"license": "MIT",
+			"dependencies": {
+				"call-bind": "^1.0.7",
+				"define-properties": "^1.2.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/object-keys": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz",
+			"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/once": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
+			"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+			"license": "ISC",
+			"dependencies": {
+				"wrappy": "1"
+			}
+		},
+		"node_modules/optionator": {
+			"version": "0.9.4",
+			"resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz",
+			"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"deep-is": "^0.1.3",
+				"fast-levenshtein": "^2.0.6",
+				"levn": "^0.4.1",
+				"prelude-ls": "^1.2.1",
+				"type-check": "^0.4.0",
+				"word-wrap": "^1.2.5"
+			},
+			"engines": {
+				"node": ">= 0.8.0"
+			}
+		},
+		"node_modules/os-name": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmmirror.com/os-name/-/os-name-1.0.3.tgz",
+			"integrity": "sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==",
+			"license": "MIT",
+			"dependencies": {
+				"osx-release": "^1.0.0",
+				"win-release": "^1.0.0"
+			},
+			"bin": {
+				"os-name": "cli.js"
+			},
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/osx-release": {
+			"version": "1.1.0",
+			"resolved": "https://registry.npmmirror.com/osx-release/-/osx-release-1.1.0.tgz",
+			"integrity": "sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==",
+			"license": "MIT",
+			"dependencies": {
+				"minimist": "^1.1.0"
+			},
+			"bin": {
+				"osx-release": "cli.js"
+			},
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/p-limit": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz",
+			"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"yocto-queue": "^0.1.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/p-locate": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz",
+			"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"p-limit": "^3.0.2"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/package-json-from-dist": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+			"integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+			"license": "BlueOak-1.0.0"
+		},
+		"node_modules/parchment": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmmirror.com/parchment/-/parchment-1.1.4.tgz",
+			"integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==",
+			"license": "BSD-3-Clause"
+		},
+		"node_modules/parent-module": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz",
+			"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"callsites": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/path-exists": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
+			"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/path-is-absolute": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+			"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"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==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/path-parse": {
+			"version": "1.0.7",
+			"resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",
+			"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+			"license": "MIT"
+		},
+		"node_modules/path-scurry": {
+			"version": "1.11.1",
+			"resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz",
+			"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+			"license": "BlueOak-1.0.0",
+			"dependencies": {
+				"lru-cache": "^10.2.0",
+				"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+			},
+			"engines": {
+				"node": ">=16 || 14 >=14.18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/path-type": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz",
+			"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/pause-stream": {
+			"version": "0.0.11",
+			"resolved": "https://registry.npmmirror.com/pause-stream/-/pause-stream-0.0.11.tgz",
+			"integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==",
+			"license": [
+				"MIT",
+				"Apache2"
+			],
+			"dependencies": {
+				"through": "~2.3"
+			}
+		},
+		"node_modules/picocolors": {
+			"version": "1.1.0",
+			"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.0.tgz",
+			"integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
+			"license": "ISC"
+		},
+		"node_modules/picomatch": {
+			"version": "2.3.1",
+			"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+			"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=8.6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/jonschlinkert"
+			}
+		},
+		"node_modules/picomodal": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/picomodal/-/picomodal-3.0.0.tgz",
+			"integrity": "sha512-FoR3TDfuLlqUvcEeK5ifpKSVVns6B4BQvc8SDF6THVMuadya6LLtji0QgUDSStw0ZR2J7I6UGi5V2V23rnPWTw==",
+			"license": "MIT"
+		},
+		"node_modules/pify": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz",
+			"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/pinia": {
+			"version": "2.2.2",
+			"resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.2.2.tgz",
+			"integrity": "sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==",
+			"license": "MIT",
+			"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-persist": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/pinia-plugin-persist/-/pinia-plugin-persist-1.0.0.tgz",
+			"integrity": "sha512-M4hBBd8fz/GgNmUPaaUsC29y1M09lqbXrMAHcusVoU8xlQi1TqgkWnnhvMikZwr7Le/hVyMx8KUcumGGrR6GVw==",
+			"license": "MIT",
+			"dependencies": {
+				"vue-demi": "^0.12.1"
+			},
+			"peerDependencies": {
+				"@vue/composition-api": "^1.0.0",
+				"pinia": "^2.0.0",
+				"vue": "^2.0.0 || >=3.0.0"
+			},
+			"peerDependenciesMeta": {
+				"@vue/composition-api": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/pinia-plugin-persist/node_modules/vue-demi": {
+			"version": "0.12.5",
+			"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.12.5.tgz",
+			"integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==",
+			"hasInstallScript": true,
+			"license": "MIT",
+			"bin": {
+				"vue-demi-fix": "bin/vue-demi-fix.js",
+				"vue-demi-switch": "bin/vue-demi-switch.js"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			},
+			"peerDependencies": {
+				"@vue/composition-api": "^1.0.0-rc.1",
+				"vue": "^3.0.0-0 || ^2.6.0"
+			},
+			"peerDependenciesMeta": {
+				"@vue/composition-api": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/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,
+			"license": "MIT",
+			"bin": {
+				"vue-demi-fix": "bin/vue-demi-fix.js",
+				"vue-demi-switch": "bin/vue-demi-switch.js"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antfu"
+			},
+			"peerDependencies": {
+				"@vue/composition-api": "^1.0.0-rc.1",
+				"vue": "^3.0.0-0 || ^2.6.0"
+			},
+			"peerDependenciesMeta": {
+				"@vue/composition-api": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/pirates": {
+			"version": "4.0.6",
+			"resolved": "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz",
+			"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/platform": {
+			"version": "1.3.6",
+			"resolved": "https://registry.npmmirror.com/platform/-/platform-1.3.6.tgz",
+			"integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==",
+			"license": "MIT"
+		},
+		"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"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"nanoid": "^3.3.7",
+				"picocolors": "^1.0.1",
+				"source-map-js": "^1.2.0"
+			},
+			"engines": {
+				"node": "^10 || ^12 || >=14"
+			}
+		},
+		"node_modules/postcss-import": {
+			"version": "15.1.0",
+			"resolved": "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz",
+			"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+			"license": "MIT",
+			"dependencies": {
+				"postcss-value-parser": "^4.0.0",
+				"read-cache": "^1.0.0",
+				"resolve": "^1.1.7"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			},
+			"peerDependencies": {
+				"postcss": "^8.0.0"
+			}
+		},
+		"node_modules/postcss-js": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.0.1.tgz",
+			"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+			"license": "MIT",
+			"dependencies": {
+				"camelcase-css": "^2.0.1"
+			},
+			"engines": {
+				"node": "^12 || ^14 || >= 16"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/postcss/"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4.21"
+			}
+		},
+		"node_modules/postcss-load-config": {
+			"version": "4.0.2",
+			"resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+			"integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/postcss/"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"lilconfig": "^3.0.0",
+				"yaml": "^2.3.4"
+			},
+			"engines": {
+				"node": ">= 14"
+			},
+			"peerDependencies": {
+				"postcss": ">=8.0.9",
+				"ts-node": ">=9.0.0"
+			},
+			"peerDependenciesMeta": {
+				"postcss": {
+					"optional": true
+				},
+				"ts-node": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/postcss-load-config/node_modules/lilconfig": {
+			"version": "3.1.2",
+			"resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.2.tgz",
+			"integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=14"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/antonk52"
+			}
+		},
+		"node_modules/postcss-nested": {
+			"version": "6.2.0",
+			"resolved": "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.2.0.tgz",
+			"integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/postcss/"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"postcss-selector-parser": "^6.1.1"
+			},
+			"engines": {
+				"node": ">=12.0"
+			},
+			"peerDependencies": {
+				"postcss": "^8.2.14"
+			}
+		},
+		"node_modules/postcss-selector-parser": {
+			"version": "6.1.2",
+			"resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+			"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+			"license": "MIT",
+			"dependencies": {
+				"cssesc": "^3.0.0",
+				"util-deprecate": "^1.0.2"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/postcss-value-parser": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+			"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+			"license": "MIT"
+		},
+		"node_modules/preact": {
+			"version": "10.23.2",
+			"resolved": "https://registry.npmmirror.com/preact/-/preact-10.23.2.tgz",
+			"integrity": "sha512-kKYfePf9rzKnxOAKDpsWhg/ysrHPqT+yQ7UW4JjdnqjFIeNUnNcEJvhuA8fDenxAGWzUqtd51DfVg7xp/8T9NA==",
+			"license": "MIT",
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/preact"
+			}
+		},
+		"node_modules/prelude-ls": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz",
+			"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.8.0"
+			}
+		},
+		"node_modules/prettier": {
+			"version": "2.8.8",
+			"resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz",
+			"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+			"dev": true,
+			"license": "MIT",
+			"bin": {
+				"prettier": "bin-prettier.js"
+			},
+			"engines": {
+				"node": ">=10.13.0"
+			},
+			"funding": {
+				"url": "https://github.com/prettier/prettier?sponsor=1"
+			}
+		},
+		"node_modules/print-js": {
+			"version": "1.6.0",
+			"resolved": "https://registry.npmmirror.com/print-js/-/print-js-1.6.0.tgz",
+			"integrity": "sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==",
+			"license": "MIT"
+		},
+		"node_modules/prismjs": {
+			"version": "1.29.0",
+			"resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz",
+			"integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/process": {
+			"version": "0.11.10",
+			"resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz",
+			"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.6.0"
+			}
+		},
+		"node_modules/process-nextick-args": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+			"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+			"license": "MIT"
+		},
+		"node_modules/proxy-from-env": {
+			"version": "1.1.0",
+			"resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+			"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+			"license": "MIT"
+		},
+		"node_modules/pump": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz",
+			"integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
+			"license": "MIT",
+			"dependencies": {
+				"end-of-stream": "^1.1.0",
+				"once": "^1.3.1"
+			}
+		},
+		"node_modules/punycode": {
+			"version": "2.3.1",
+			"resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz",
+			"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/qiniu-js": {
+			"version": "3.4.1",
+			"resolved": "https://registry.npmmirror.com/qiniu-js/-/qiniu-js-3.4.1.tgz",
+			"integrity": "sha512-8vxrLqDPlJUk3fUAaTozh3TAT3ww9B5KqGogmGuTiFHnewXDoMxTCSY5z8Ab5UNdrCo6ZxDM07G/o++CICRUFw==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/runtime-corejs2": "^7.10.2",
+				"querystring": "^0.2.1",
+				"spark-md5": "^3.0.0"
+			}
+		},
+		"node_modules/qrcodejs2-fixes": {
+			"version": "0.0.2",
+			"resolved": "https://registry.npmmirror.com/qrcodejs2-fixes/-/qrcodejs2-fixes-0.0.2.tgz",
+			"integrity": "sha512-wMUXYMOixAEJlLnjk5MbLiFaz0gQObWYm/TIFWB5+j7sTY5gPyr09Cx1EpcLYbsgfFdN3wHjrKAhZofTuCBGhg==",
+			"license": "MIT"
+		},
+		"node_modules/qs": {
+			"version": "6.13.0",
+			"resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz",
+			"integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+			"license": "BSD-3-Clause",
+			"dependencies": {
+				"side-channel": "^1.0.6"
+			},
+			"engines": {
+				"node": ">=0.6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/querystring": {
+			"version": "0.2.1",
+			"resolved": "https://registry.npmmirror.com/querystring/-/querystring-0.2.1.tgz",
+			"integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==",
+			"deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.4.x"
+			}
+		},
+		"node_modules/queue-microtask": {
+			"version": "1.2.3",
+			"resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
+			"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/feross"
+				},
+				{
+					"type": "patreon",
+					"url": "https://www.patreon.com/feross"
+				},
+				{
+					"type": "consulting",
+					"url": "https://feross.org/support"
+				}
+			],
+			"license": "MIT"
+		},
+		"node_modules/quill": {
+			"version": "1.3.7",
+			"resolved": "https://registry.npmmirror.com/quill/-/quill-1.3.7.tgz",
+			"integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==",
+			"license": "BSD-3-Clause",
+			"dependencies": {
+				"clone": "^2.1.1",
+				"deep-equal": "^1.0.1",
+				"eventemitter3": "^2.0.3",
+				"extend": "^3.0.2",
+				"parchment": "^1.1.4",
+				"quill-delta": "^3.6.2"
+			}
+		},
+		"node_modules/quill-delta": {
+			"version": "3.6.3",
+			"resolved": "https://registry.npmmirror.com/quill-delta/-/quill-delta-3.6.3.tgz",
+			"integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==",
+			"license": "MIT",
+			"dependencies": {
+				"deep-equal": "^1.0.1",
+				"extend": "^3.0.2",
+				"fast-diff": "1.1.2"
+			},
+			"engines": {
+				"node": ">=0.10"
+			}
+		},
+		"node_modules/read-cache": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz",
+			"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+			"license": "MIT",
+			"dependencies": {
+				"pify": "^2.3.0"
+			}
+		},
+		"node_modules/readable-stream": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+			"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+			"license": "MIT",
+			"dependencies": {
+				"core-util-is": "~1.0.0",
+				"inherits": "~2.0.3",
+				"isarray": "~1.0.0",
+				"process-nextick-args": "~2.0.0",
+				"safe-buffer": "~5.1.1",
+				"string_decoder": "~1.1.1",
+				"util-deprecate": "~1.0.1"
+			}
+		},
+		"node_modules/readable-stream/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+			"license": "MIT"
+		},
+		"node_modules/readdirp": {
+			"version": "3.6.0",
+			"resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
+			"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+			"license": "MIT",
+			"dependencies": {
+				"picomatch": "^2.2.1"
+			},
+			"engines": {
+				"node": ">=8.10.0"
+			}
+		},
+		"node_modules/regenerator-runtime": {
+			"version": "0.14.1",
+			"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+			"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+			"license": "MIT"
+		},
+		"node_modules/regexp.prototype.flags": {
+			"version": "1.5.2",
+			"resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+			"integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+			"license": "MIT",
+			"dependencies": {
+				"call-bind": "^1.0.6",
+				"define-properties": "^1.2.1",
+				"es-errors": "^1.3.0",
+				"set-function-name": "^2.0.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/reinterval": {
+			"version": "1.1.0",
+			"resolved": "https://registry.npmmirror.com/reinterval/-/reinterval-1.1.0.tgz",
+			"integrity": "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==",
+			"license": "MIT"
+		},
+		"node_modules/resolve": {
+			"version": "1.22.8",
+			"resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz",
+			"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+			"license": "MIT",
+			"dependencies": {
+				"is-core-module": "^2.13.0",
+				"path-parse": "^1.0.7",
+				"supports-preserve-symlinks-flag": "^1.0.0"
+			},
+			"bin": {
+				"resolve": "bin/resolve"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/resolve-from": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz",
+			"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/reusify": {
+			"version": "1.0.4",
+			"resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
+			"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+			"license": "MIT",
+			"engines": {
+				"iojs": ">=1.0.0",
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/rfdc": {
+			"version": "1.4.1",
+			"resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
+			"integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+			"license": "MIT"
+		},
+		"node_modules/rimraf": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz",
+			"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+			"deprecated": "Rimraf versions prior to v4 are no longer supported",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"glob": "^7.1.3"
+			},
+			"bin": {
+				"rimraf": "bin.js"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/rimraf/node_modules/glob": {
+			"version": "7.2.3",
+			"resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
+			"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+			"deprecated": "Glob versions prior to v9 are no longer supported",
+			"dev": true,
+			"license": "ISC",
+			"dependencies": {
+				"fs.realpath": "^1.0.0",
+				"inflight": "^1.0.4",
+				"inherits": "2",
+				"minimatch": "^3.1.1",
+				"once": "^1.3.0",
+				"path-is-absolute": "^1.0.0"
+			},
+			"engines": {
+				"node": "*"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/rollup": {
+			"version": "3.29.4",
+			"resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.29.4.tgz",
+			"integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==",
+			"license": "MIT",
+			"bin": {
+				"rollup": "dist/bin/rollup"
+			},
+			"engines": {
+				"node": ">=14.18.0",
+				"npm": ">=8.0.0"
+			},
+			"optionalDependencies": {
+				"fsevents": "~2.3.2"
+			}
+		},
+		"node_modules/run-parallel": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
+			"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/feross"
+				},
+				{
+					"type": "patreon",
+					"url": "https://www.patreon.com/feross"
+				},
+				{
+					"type": "consulting",
+					"url": "https://feross.org/support"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"queue-microtask": "^1.2.2"
+			}
+		},
+		"node_modules/safe-buffer": {
+			"version": "5.2.1",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+			"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/feross"
+				},
+				{
+					"type": "patreon",
+					"url": "https://www.patreon.com/feross"
+				},
+				{
+					"type": "consulting",
+					"url": "https://feross.org/support"
+				}
+			],
+			"license": "MIT"
+		},
+		"node_modules/safer-buffer": {
+			"version": "2.1.2",
+			"resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+			"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+			"license": "MIT"
+		},
+		"node_modules/sass": {
+			"version": "1.78.0",
+			"resolved": "https://registry.npmmirror.com/sass/-/sass-1.78.0.tgz",
+			"integrity": "sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==",
+			"devOptional": true,
+			"license": "MIT",
+			"dependencies": {
+				"chokidar": ">=3.0.0 <4.0.0",
+				"immutable": "^4.0.0",
+				"source-map-js": ">=0.6.2 <2.0.0"
+			},
+			"bin": {
+				"sass": "sass.js"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/sax": {
+			"version": "1.4.1",
+			"resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz",
+			"integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
+			"license": "ISC"
+		},
+		"node_modules/screenfull": {
+			"version": "6.0.2",
+			"resolved": "https://registry.npmmirror.com/screenfull/-/screenfull-6.0.2.tgz",
+			"integrity": "sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==",
+			"license": "MIT",
+			"engines": {
+				"node": "^14.13.1 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/scroll-into-view-if-needed": {
+			"version": "2.2.31",
+			"resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz",
+			"integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==",
+			"license": "MIT",
+			"dependencies": {
+				"compute-scroll-into-view": "^1.0.20"
+			}
+		},
+		"node_modules/sdk-base": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmmirror.com/sdk-base/-/sdk-base-2.0.1.tgz",
+			"integrity": "sha512-eeG26wRwhtwYuKGCDM3LixCaxY27Pa/5lK4rLKhQa7HBjJ3U3Y+f81MMZQRsDw/8SC2Dao/83yJTXJ8aULuN8Q==",
+			"license": "MIT",
+			"dependencies": {
+				"get-ready": "~1.0.0"
+			}
+		},
+		"node_modules/select": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz",
+			"integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==",
+			"license": "MIT"
+		},
+		"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,
+			"license": "ISC",
+			"bin": {
+				"semver": "bin/semver.js"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/set-function-length": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz",
+			"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+			"license": "MIT",
+			"dependencies": {
+				"define-data-property": "^1.1.4",
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"get-intrinsic": "^1.2.4",
+				"gopd": "^1.0.1",
+				"has-property-descriptors": "^1.0.2"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/set-function-name": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz",
+			"integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+			"license": "MIT",
+			"dependencies": {
+				"define-data-property": "^1.1.4",
+				"es-errors": "^1.3.0",
+				"functions-have-names": "^1.2.3",
+				"has-property-descriptors": "^1.0.2"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"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==",
+			"license": "MIT",
+			"dependencies": {
+				"shebang-regex": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/shebang-regex": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+			"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/side-channel": {
+			"version": "1.0.6",
+			"resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.6.tgz",
+			"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+			"license": "MIT",
+			"dependencies": {
+				"call-bind": "^1.0.7",
+				"es-errors": "^1.3.0",
+				"get-intrinsic": "^1.2.4",
+				"object-inspect": "^1.13.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"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==",
+			"license": "ISC",
+			"engines": {
+				"node": ">=14"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/slash": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz",
+			"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/slate": {
+			"version": "0.72.8",
+			"resolved": "https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz",
+			"integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==",
+			"license": "MIT",
+			"dependencies": {
+				"immer": "^9.0.6",
+				"is-plain-object": "^5.0.0",
+				"tiny-warning": "^1.0.3"
+			}
+		},
+		"node_modules/slate-history": {
+			"version": "0.66.0",
+			"resolved": "https://registry.npmmirror.com/slate-history/-/slate-history-0.66.0.tgz",
+			"integrity": "sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==",
+			"license": "MIT",
+			"dependencies": {
+				"is-plain-object": "^5.0.0"
+			},
+			"peerDependencies": {
+				"slate": ">=0.65.3"
+			}
+		},
+		"node_modules/snabbdom": {
+			"version": "3.6.2",
+			"resolved": "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.6.2.tgz",
+			"integrity": "sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=12.17.0"
+			}
+		},
+		"node_modules/sortablejs": {
+			"version": "1.15.3",
+			"resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.3.tgz",
+			"integrity": "sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg==",
+			"license": "MIT"
+		},
+		"node_modules/source-map-js": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+			"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+			"license": "BSD-3-Clause",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/sourcemap-codec": {
+			"version": "1.4.8",
+			"resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+			"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+			"deprecated": "Please use @jridgewell/sourcemap-codec instead",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/spark-md5": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmmirror.com/spark-md5/-/spark-md5-3.0.2.tgz",
+			"integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==",
+			"license": "(WTFPL OR MIT)"
+		},
+		"node_modules/split2": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz",
+			"integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+			"license": "ISC",
+			"engines": {
+				"node": ">= 10.x"
+			}
+		},
+		"node_modules/splitpanes": {
+			"version": "3.1.5",
+			"resolved": "https://registry.npmmirror.com/splitpanes/-/splitpanes-3.1.5.tgz",
+			"integrity": "sha512-r3Mq2ITFQ5a2VXLOy4/Sb2Ptp7OfEO8YIbhVJqJXoFc9hc5nTXXkCvtVDjIGbvC0vdE7tse+xTM9BMjsszP6bw==",
+			"license": "MIT",
+			"funding": {
+				"url": "https://github.com/sponsors/antoniandre"
+			}
+		},
+		"node_modules/ssf": {
+			"version": "0.11.2",
+			"resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz",
+			"integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"frac": "~1.1.2"
+			},
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/ssr-window": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-3.0.0.tgz",
+			"integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==",
+			"license": "MIT"
+		},
+		"node_modules/statuses": {
+			"version": "1.5.0",
+			"resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz",
+			"integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.6"
+			}
+		},
+		"node_modules/stream-http": {
+			"version": "2.8.2",
+			"resolved": "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.2.tgz",
+			"integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==",
+			"license": "MIT",
+			"dependencies": {
+				"builtin-status-codes": "^3.0.0",
+				"inherits": "^2.0.1",
+				"readable-stream": "^2.3.6",
+				"to-arraybuffer": "^1.0.0",
+				"xtend": "^4.0.0"
+			}
+		},
+		"node_modules/stream-shift": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.3.tgz",
+			"integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
+			"license": "MIT"
+		},
+		"node_modules/stream-wormhole": {
+			"version": "1.1.0",
+			"resolved": "https://registry.npmmirror.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz",
+			"integrity": "sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=4.0.0"
+			}
+		},
+		"node_modules/string_decoder": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"license": "MIT",
+			"dependencies": {
+				"safe-buffer": "~5.1.0"
+			}
+		},
+		"node_modules/string_decoder/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+			"license": "MIT"
+		},
+		"node_modules/string-width": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz",
+			"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+			"license": "MIT",
+			"dependencies": {
+				"eastasianwidth": "^0.2.0",
+				"emoji-regex": "^9.2.2",
+				"strip-ansi": "^7.0.1"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/string-width-cjs": {
+			"name": "string-width",
+			"version": "4.2.3",
+			"resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+			"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+			"license": "MIT",
+			"dependencies": {
+				"emoji-regex": "^8.0.0",
+				"is-fullwidth-code-point": "^3.0.0",
+				"strip-ansi": "^6.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/string-width-cjs/node_modules/emoji-regex": {
+			"version": "8.0.0",
+			"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+			"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+			"license": "MIT"
+		},
+		"node_modules/string-width/node_modules/ansi-regex": {
+			"version": "6.1.0",
+			"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.1.0.tgz",
+			"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-regex?sponsor=1"
+			}
+		},
+		"node_modules/string-width/node_modules/strip-ansi": {
+			"version": "7.1.0",
+			"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz",
+			"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+			"license": "MIT",
+			"dependencies": {
+				"ansi-regex": "^6.0.1"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/strip-ansi?sponsor=1"
+			}
+		},
+		"node_modules/strip-ansi": {
+			"version": "6.0.1",
+			"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+			"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+			"license": "MIT",
+			"dependencies": {
+				"ansi-regex": "^5.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/strip-ansi-cjs": {
+			"name": "strip-ansi",
+			"version": "6.0.1",
+			"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+			"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+			"license": "MIT",
+			"dependencies": {
+				"ansi-regex": "^5.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/strip-json-comments": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+			"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/strnum": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz",
+			"integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
+			"license": "MIT"
+		},
+		"node_modules/sucrase": {
+			"version": "3.35.0",
+			"resolved": "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.0.tgz",
+			"integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+			"license": "MIT",
+			"dependencies": {
+				"@jridgewell/gen-mapping": "^0.3.2",
+				"commander": "^4.0.0",
+				"glob": "^10.3.10",
+				"lines-and-columns": "^1.1.6",
+				"mz": "^2.7.0",
+				"pirates": "^4.0.1",
+				"ts-interface-checker": "^0.1.9"
+			},
+			"bin": {
+				"sucrase": "bin/sucrase",
+				"sucrase-node": "bin/sucrase-node"
+			},
+			"engines": {
+				"node": ">=16 || 14 >=14.17"
+			}
+		},
+		"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==",
+			"license": "MIT",
+			"dependencies": {
+				"has-flag": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/supports-preserve-symlinks-flag": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+			"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+			"license": "MIT",
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/svg-tags": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz",
+			"integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA=="
+		},
+		"node_modules/tailwindcss": {
+			"version": "3.4.11",
+			"resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.11.tgz",
+			"integrity": "sha512-qhEuBcLemjSJk5ajccN9xJFtM/h0AVCPaA6C92jNP+M2J8kX+eMJHI7R2HFKUvvAsMpcfLILMCFYSeDwpMmlUg==",
+			"license": "MIT",
+			"dependencies": {
+				"@alloc/quick-lru": "^5.2.0",
+				"arg": "^5.0.2",
+				"chokidar": "^3.5.3",
+				"didyoumean": "^1.2.2",
+				"dlv": "^1.1.3",
+				"fast-glob": "^3.3.0",
+				"glob-parent": "^6.0.2",
+				"is-glob": "^4.0.3",
+				"jiti": "^1.21.0",
+				"lilconfig": "^2.1.0",
+				"micromatch": "^4.0.5",
+				"normalize-path": "^3.0.0",
+				"object-hash": "^3.0.0",
+				"picocolors": "^1.0.0",
+				"postcss": "^8.4.23",
+				"postcss-import": "^15.1.0",
+				"postcss-js": "^4.0.1",
+				"postcss-load-config": "^4.0.1",
+				"postcss-nested": "^6.0.1",
+				"postcss-selector-parser": "^6.0.11",
+				"resolve": "^1.22.2",
+				"sucrase": "^3.32.0"
+			},
+			"bin": {
+				"tailwind": "lib/cli.js",
+				"tailwindcss": "lib/cli.js"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			}
+		},
+		"node_modules/text-table": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz",
+			"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+			"dev": true,
+			"license": "MIT"
+		},
+		"node_modules/thenify": {
+			"version": "3.3.1",
+			"resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz",
+			"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+			"license": "MIT",
+			"dependencies": {
+				"any-promise": "^1.0.0"
+			}
+		},
+		"node_modules/thenify-all": {
+			"version": "1.6.0",
+			"resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz",
+			"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+			"license": "MIT",
+			"dependencies": {
+				"thenify": ">= 3.1.0 < 4"
+			},
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/through": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz",
+			"integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+			"license": "MIT"
+		},
+		"node_modules/tiny-emitter": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
+			"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
+			"license": "MIT"
+		},
+		"node_modules/tiny-warning": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmmirror.com/tiny-warning/-/tiny-warning-1.0.3.tgz",
+			"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
+			"license": "MIT"
+		},
+		"node_modules/to-arraybuffer": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+			"integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==",
+			"license": "MIT"
+		},
+		"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==",
+			"license": "MIT",
+			"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==",
+			"license": "MIT",
+			"dependencies": {
+				"is-number": "^7.0.0"
+			},
+			"engines": {
+				"node": ">=8.0"
+			}
+		},
+		"node_modules/ts-interface-checker": {
+			"version": "0.1.13",
+			"resolved": "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+			"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+			"license": "Apache-2.0"
+		},
+		"node_modules/ts-md5": {
+			"version": "1.3.1",
+			"resolved": "https://registry.npmmirror.com/ts-md5/-/ts-md5-1.3.1.tgz",
+			"integrity": "sha512-DiwiXfwvcTeZ5wCE0z+2A9EseZsztaiZtGrtSaY5JOD7ekPnR/GoIVD5gXZAlK9Na9Kvpo9Waz5rW64WKAWApg==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/tslib": {
+			"version": "2.7.0",
+			"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.7.0.tgz",
+			"integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
+			"license": "0BSD"
+		},
+		"node_modules/tsutils": {
+			"version": "3.21.0",
+			"resolved": "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz",
+			"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"tslib": "^1.8.1"
+			},
+			"engines": {
+				"node": ">= 6"
+			},
+			"peerDependencies": {
+				"typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+			}
+		},
+		"node_modules/tsutils/node_modules/tslib": {
+			"version": "1.14.1",
+			"resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz",
+			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+			"dev": true,
+			"license": "0BSD"
+		},
+		"node_modules/type": {
+			"version": "2.7.3",
+			"resolved": "https://registry.npmmirror.com/type/-/type-2.7.3.tgz",
+			"integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
+			"license": "ISC"
+		},
+		"node_modules/type-check": {
+			"version": "0.4.0",
+			"resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz",
+			"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"prelude-ls": "^1.2.1"
+			},
+			"engines": {
+				"node": ">= 0.8.0"
+			}
+		},
+		"node_modules/type-fest": {
+			"version": "0.20.2",
+			"resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz",
+			"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+			"dev": true,
+			"license": "(MIT OR CC0-1.0)",
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/typedarray": {
+			"version": "0.0.6",
+			"resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz",
+			"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+			"license": "MIT"
+		},
+		"node_modules/typescript": {
+			"version": "5.6.2",
+			"resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.6.2.tgz",
+			"integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
+			"devOptional": true,
+			"license": "Apache-2.0",
+			"bin": {
+				"tsc": "bin/tsc",
+				"tsserver": "bin/tsserver"
+			},
+			"engines": {
+				"node": ">=14.17"
+			}
+		},
+		"node_modules/undici-types": {
+			"version": "5.26.5",
+			"resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
+			"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+			"license": "MIT"
+		},
+		"node_modules/unescape": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmmirror.com/unescape/-/unescape-1.0.1.tgz",
+			"integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==",
+			"license": "MIT",
+			"dependencies": {
+				"extend-shallow": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"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"
+				}
+			],
+			"license": "MIT",
+			"dependencies": {
+				"escalade": "^3.1.2",
+				"picocolors": "^1.0.1"
+			},
+			"bin": {
+				"update-browserslist-db": "cli.js"
+			},
+			"peerDependencies": {
+				"browserslist": ">= 4.21.0"
+			}
+		},
+		"node_modules/upgrade": {
+			"version": "1.1.0",
+			"resolved": "https://registry.npmmirror.com/upgrade/-/upgrade-1.1.0.tgz",
+			"integrity": "sha512-NtkVvqVCqsJo5U3mYRum2Tw6uCltOxfIJ/AfTZeTmw6U39IB5X23xF+kRZ9aiPaORqeiQQ7Q209/ibhOvxzwHA==",
+			"license": "MIT"
+		},
+		"node_modules/uri-js": {
+			"version": "4.4.1",
+			"resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
+			"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"punycode": "^2.1.0"
+			}
+		},
+		"node_modules/urllib": {
+			"version": "2.44.0",
+			"resolved": "https://registry.npmmirror.com/urllib/-/urllib-2.44.0.tgz",
+			"integrity": "sha512-zRCJqdfYllRDA9bXUtx+vccyRqtJPKsw85f44zH7zPD28PIvjMqIgw9VwoTLV7xTBWZsbebUFVHU5ghQcWku2A==",
+			"license": "MIT",
+			"dependencies": {
+				"any-promise": "^1.3.0",
+				"content-type": "^1.0.2",
+				"default-user-agent": "^1.0.0",
+				"digest-header": "^1.0.0",
+				"ee-first": "~1.1.1",
+				"formstream": "^1.1.0",
+				"humanize-ms": "^1.2.0",
+				"iconv-lite": "^0.6.3",
+				"pump": "^3.0.0",
+				"qs": "^6.4.0",
+				"statuses": "^1.3.1",
+				"utility": "^1.16.1"
+			},
+			"engines": {
+				"node": ">= 0.10.0"
+			},
+			"peerDependencies": {
+				"proxy-agent": "^5.0.0"
+			},
+			"peerDependenciesMeta": {
+				"proxy-agent": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/util-deprecate": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
+			"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+			"license": "MIT"
+		},
+		"node_modules/utility": {
+			"version": "1.18.0",
+			"resolved": "https://registry.npmmirror.com/utility/-/utility-1.18.0.tgz",
+			"integrity": "sha512-PYxZDA+6QtvRvm//++aGdmKG/cI07jNwbROz0Ql+VzFV1+Z0Dy55NI4zZ7RHc9KKpBePNFwoErqIuqQv/cjiTA==",
+			"license": "MIT",
+			"dependencies": {
+				"copy-to": "^2.0.1",
+				"escape-html": "^1.0.3",
+				"mkdirp": "^0.5.1",
+				"mz": "^2.7.0",
+				"unescape": "^1.0.1"
+			},
+			"engines": {
+				"node": ">= 0.12.0"
+			}
+		},
+		"node_modules/uuid": {
+			"version": "9.0.1",
+			"resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz",
+			"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+			"funding": [
+				"https://github.com/sponsors/broofa",
+				"https://github.com/sponsors/ctavan"
+			],
+			"license": "MIT",
+			"bin": {
+				"uuid": "dist/bin/uuid"
+			}
+		},
+		"node_modules/vanilla-picker": {
+			"version": "2.12.3",
+			"resolved": "https://registry.npmmirror.com/vanilla-picker/-/vanilla-picker-2.12.3.tgz",
+			"integrity": "sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ==",
+			"license": "ISC",
+			"dependencies": {
+				"@sphinxxxx/color-conversion": "^2.2.2"
+			}
+		},
+		"node_modules/vite": {
+			"version": "4.5.3",
+			"resolved": "https://registry.npmmirror.com/vite/-/vite-4.5.3.tgz",
+			"integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==",
+			"license": "MIT",
+			"dependencies": {
+				"esbuild": "^0.18.10",
+				"postcss": "^8.4.27",
+				"rollup": "^3.27.1"
+			},
+			"bin": {
+				"vite": "bin/vite.js"
+			},
+			"engines": {
+				"node": "^14.18.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/vitejs/vite?sponsor=1"
+			},
+			"optionalDependencies": {
+				"fsevents": "~2.3.2"
+			},
+			"peerDependencies": {
+				"@types/node": ">= 14",
+				"less": "*",
+				"lightningcss": "^1.21.0",
+				"sass": "*",
+				"stylus": "*",
+				"sugarss": "*",
+				"terser": "^5.4.0"
+			},
+			"peerDependenciesMeta": {
+				"@types/node": {
+					"optional": true
+				},
+				"less": {
+					"optional": true
+				},
+				"lightningcss": {
+					"optional": true
+				},
+				"sass": {
+					"optional": true
+				},
+				"stylus": {
+					"optional": true
+				},
+				"sugarss": {
+					"optional": true
+				},
+				"terser": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/vite-plugin-vue-setup-extend": {
+			"version": "0.4.0",
+			"resolved": "https://registry.npmmirror.com/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz",
+			"integrity": "sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"@vue/compiler-sfc": "^3.2.29",
+				"magic-string": "^0.25.7"
+			},
+			"peerDependencies": {
+				"vite": ">=2.0.0"
+			}
+		},
+		"node_modules/vite-plugin-vue-setup-extend/node_modules/magic-string": {
+			"version": "0.25.9",
+			"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz",
+			"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"sourcemap-codec": "^1.4.8"
+			}
+		},
+		"node_modules/vue": {
+			"version": "3.5.4",
+			"resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.4.tgz",
+			"integrity": "sha512-3yAj2gkmiY+i7+22A1PWM+kjOVXjU74UPINcTiN7grIVPyFFI0lpGwHlV/4xydDmobaBn7/xmi+YG8HeSlCTcg==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/compiler-dom": "3.5.4",
+				"@vue/compiler-sfc": "3.5.4",
+				"@vue/runtime-dom": "3.5.4",
+				"@vue/server-renderer": "3.5.4",
+				"@vue/shared": "3.5.4"
+			},
+			"peerDependencies": {
+				"typescript": "*"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/vue-clipboard3": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmmirror.com/vue-clipboard3/-/vue-clipboard3-2.0.0.tgz",
+			"integrity": "sha512-Q9S7dzWGax7LN5iiSPcu/K1GGm2gcBBlYwmMsUc5/16N6w90cbKow3FnPmPs95sungns4yvd9/+JhbAznECS2A==",
+			"license": "MIT",
+			"dependencies": {
+				"clipboard": "^2.0.6"
+			}
+		},
+		"node_modules/vue-cropper": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmmirror.com/vue-cropper/-/vue-cropper-1.1.4.tgz",
+			"integrity": "sha512-5m98vBsCEI9rbS4JxELxXidtAui3qNyTHLHg67Qbn7g8cg+E6LcnC+hh3SM/p94x6mFh6KRxT1ttnta+wCYqWA==",
+			"license": "ISC"
+		},
+		"node_modules/vue-cropperjs": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmmirror.com/vue-cropperjs/-/vue-cropperjs-5.0.0.tgz",
+			"integrity": "sha512-RhnC8O33uRZNkn74aiHZwNHnBJOXWlS4P6gsRI0lw4cZlWjKSCywZI9oSI9POlIPI6OYv30jvnHMXGch85tw7w==",
+			"license": "MIT",
+			"dependencies": {
+				"cropperjs": "^1.5.6"
+			},
+			"peerDependencies": {
+				"vue": ">=3.0.0"
+			}
+		},
+		"node_modules/vue-eslint-parser": {
+			"version": "9.4.3",
+			"resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
+			"integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"debug": "^4.3.4",
+				"eslint-scope": "^7.1.1",
+				"eslint-visitor-keys": "^3.3.0",
+				"espree": "^9.3.1",
+				"esquery": "^1.4.0",
+				"lodash": "^4.17.21",
+				"semver": "^7.3.6"
+			},
+			"engines": {
+				"node": "^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/mysticatea"
+			},
+			"peerDependencies": {
+				"eslint": ">=6.0.0"
+			}
+		},
+		"node_modules/vue-eslint-parser/node_modules/eslint-scope": {
+			"version": "7.2.2",
+			"resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz",
+			"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"dependencies": {
+				"esrecurse": "^4.3.0",
+				"estraverse": "^5.2.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/vue-eslint-parser/node_modules/estraverse": {
+			"version": "5.3.0",
+			"resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",
+			"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+			"dev": true,
+			"license": "BSD-2-Clause",
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
+		"node_modules/vue-grid-layout": {
+			"version": "3.0.0-beta1",
+			"resolved": "https://registry.npmmirror.com/vue-grid-layout/-/vue-grid-layout-3.0.0-beta1.tgz",
+			"integrity": "sha512-MsW0yfYNtnAO/uDhfZvkP6effxSJxvhAFbIL37x6Rn3vW9xf0WHVefKaSbQMLpSq3mXnR6ut0pg2Cd5lqIIZzg==",
+			"license": "MIT",
+			"dependencies": {
+				"@interactjs/actions": "^1.10.2",
+				"@interactjs/auto-start": "^1.10.2",
+				"@interactjs/dev-tools": "^1.10.2",
+				"@interactjs/interactjs": "^1.10.2",
+				"@interactjs/modifiers": "^1.10.2",
+				"element-resize-detector": "^1.2.1",
+				"mitt": "^2.1.0"
+			}
+		},
+		"node_modules/vue-grid-layout/node_modules/mitt": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmmirror.com/mitt/-/mitt-2.1.0.tgz",
+			"integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==",
+			"license": "MIT"
+		},
+		"node_modules/vue-i18n": {
+			"version": "9.14.0",
+			"resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.14.0.tgz",
+			"integrity": "sha512-LxmpRuCt2rI8gqU+kxeflRZMQn4D5+4M3oP3PWZdowW/ePJraHqhF7p4CuaME52mUxdw3Mmy2yAUKgfZYgCRjA==",
+			"license": "MIT",
+			"dependencies": {
+				"@intlify/core-base": "9.14.0",
+				"@intlify/shared": "9.14.0",
+				"@vue/devtools-api": "^6.5.0"
+			},
+			"engines": {
+				"node": ">= 16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/kazupon"
+			},
+			"peerDependencies": {
+				"vue": "^3.0.0"
+			}
+		},
+		"node_modules/vue-router": {
+			"version": "4.4.4",
+			"resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.4.4.tgz",
+			"integrity": "sha512-3MlnDqwRwZwCQVbtVfpsU+nrNymNjnXSsQtXName5925NVC1+326VVfYH9vSrA0N13teGEo8z5x7gbRnGjCDiQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@vue/devtools-api": "^6.6.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/posva"
+			},
+			"peerDependencies": {
+				"vue": "^3.2.0"
+			}
+		},
+		"node_modules/vuedraggable-es": {
+			"version": "4.1.1",
+			"resolved": "https://registry.npmmirror.com/vuedraggable-es/-/vuedraggable-es-4.1.1.tgz",
+			"integrity": "sha512-F35pjSwC8HS/lnaOd+B59nYR4FZmwuhWAzccK9xftRuWds8SU1TZh5myKVM86j5dFOI7S26O64Kwe7LUHnXjlA==",
+			"license": "MIT",
+			"dependencies": {
+				"sortablejs": "1.14.0"
+			},
+			"peerDependencies": {
+				"vue": "^3.2.31"
+			}
+		},
+		"node_modules/vuedraggable-es/node_modules/sortablejs": {
+			"version": "1.14.0",
+			"resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz",
+			"integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==",
+			"license": "MIT"
+		},
+		"node_modules/vxe-table": {
+			"version": "4.6.19",
+			"resolved": "https://registry.npmmirror.com/vxe-table/-/vxe-table-4.6.19.tgz",
+			"integrity": "sha512-vUwcqbK0CBAWlEssAvpeWgxZLx4C9bWM94EwTZm2RE6GQQ1SSkjcdwaSqHO576LLZROWomG/7DQ8yAXB5O5CMw==",
+			"license": "MIT",
+			"dependencies": {
+				"dom-zindex": "^1.0.6",
+				"xe-utils": "^3.5.30"
+			},
+			"peerDependencies": {
+				"vue": "^3.2.28"
+			}
+		},
+		"node_modules/which": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+			"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+			"license": "ISC",
+			"dependencies": {
+				"isexe": "^2.0.0"
+			},
+			"bin": {
+				"node-which": "bin/node-which"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/wildcard": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz",
+			"integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==",
+			"license": "MIT"
+		},
+		"node_modules/win-release": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/win-release/-/win-release-1.1.1.tgz",
+			"integrity": "sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw==",
+			"license": "MIT",
+			"dependencies": {
+				"semver": "^5.0.1"
+			},
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/win-release/node_modules/semver": {
+			"version": "5.7.2",
+			"resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz",
+			"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+			"license": "ISC",
+			"bin": {
+				"semver": "bin/semver"
+			}
+		},
+		"node_modules/wmf": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz",
+			"integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==",
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/word": {
+			"version": "0.3.0",
+			"resolved": "https://registry.npmmirror.com/word/-/word-0.3.0.tgz",
+			"integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==",
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/word-wrap": {
+			"version": "1.2.5",
+			"resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz",
+			"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/worker-timers": {
+			"version": "7.1.8",
+			"resolved": "https://registry.npmmirror.com/worker-timers/-/worker-timers-7.1.8.tgz",
+			"integrity": "sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/runtime": "^7.24.5",
+				"tslib": "^2.6.2",
+				"worker-timers-broker": "^6.1.8",
+				"worker-timers-worker": "^7.0.71"
+			}
+		},
+		"node_modules/worker-timers-broker": {
+			"version": "6.1.8",
+			"resolved": "https://registry.npmmirror.com/worker-timers-broker/-/worker-timers-broker-6.1.8.tgz",
+			"integrity": "sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/runtime": "^7.24.5",
+				"fast-unique-numbers": "^8.0.13",
+				"tslib": "^2.6.2",
+				"worker-timers-worker": "^7.0.71"
+			}
+		},
+		"node_modules/worker-timers-worker": {
+			"version": "7.0.71",
+			"resolved": "https://registry.npmmirror.com/worker-timers-worker/-/worker-timers-worker-7.0.71.tgz",
+			"integrity": "sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==",
+			"license": "MIT",
+			"dependencies": {
+				"@babel/runtime": "^7.24.5",
+				"tslib": "^2.6.2"
+			}
+		},
+		"node_modules/wrap-ansi": {
+			"version": "8.1.0",
+			"resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+			"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+			"license": "MIT",
+			"dependencies": {
+				"ansi-styles": "^6.1.0",
+				"string-width": "^5.0.1",
+				"strip-ansi": "^7.0.1"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+			}
+		},
+		"node_modules/wrap-ansi-cjs": {
+			"name": "wrap-ansi",
+			"version": "7.0.0",
+			"resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+			"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+			"license": "MIT",
+			"dependencies": {
+				"ansi-styles": "^4.0.0",
+				"string-width": "^4.1.0",
+				"strip-ansi": "^6.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+			}
+		},
+		"node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+			"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+			"license": "MIT",
+			"dependencies": {
+				"color-convert": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+			}
+		},
+		"node_modules/wrap-ansi-cjs/node_modules/color-convert": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+			"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+			"license": "MIT",
+			"dependencies": {
+				"color-name": "~1.1.4"
+			},
+			"engines": {
+				"node": ">=7.0.0"
+			}
+		},
+		"node_modules/wrap-ansi-cjs/node_modules/color-name": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+			"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+			"license": "MIT"
+		},
+		"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+			"version": "8.0.0",
+			"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+			"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+			"license": "MIT"
+		},
+		"node_modules/wrap-ansi-cjs/node_modules/string-width": {
+			"version": "4.2.3",
+			"resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+			"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+			"license": "MIT",
+			"dependencies": {
+				"emoji-regex": "^8.0.0",
+				"is-fullwidth-code-point": "^3.0.0",
+				"strip-ansi": "^6.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/wrap-ansi/node_modules/ansi-regex": {
+			"version": "6.1.0",
+			"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.1.0.tgz",
+			"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-regex?sponsor=1"
+			}
+		},
+		"node_modules/wrap-ansi/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==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+			}
+		},
+		"node_modules/wrap-ansi/node_modules/strip-ansi": {
+			"version": "7.1.0",
+			"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz",
+			"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+			"license": "MIT",
+			"dependencies": {
+				"ansi-regex": "^6.0.1"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/strip-ansi?sponsor=1"
+			}
+		},
+		"node_modules/wrappy": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
+			"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+			"license": "ISC"
+		},
+		"node_modules/ws": {
+			"version": "8.18.0",
+			"resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.0.tgz",
+			"integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=10.0.0"
+			},
+			"peerDependencies": {
+				"bufferutil": "^4.0.1",
+				"utf-8-validate": ">=5.0.2"
+			},
+			"peerDependenciesMeta": {
+				"bufferutil": {
+					"optional": true
+				},
+				"utf-8-validate": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/xe-utils": {
+			"version": "3.5.30",
+			"resolved": "https://registry.npmmirror.com/xe-utils/-/xe-utils-3.5.30.tgz",
+			"integrity": "sha512-5Ez6JUANpMakduiTLxrNObzqMebnM4697KvHW5okedkUjXvYgGvkbg0tABTkvwDW/Pb09v7vT68dzBOeAuOu0g==",
+			"license": "MIT"
+		},
+		"node_modules/xlsx": {
+			"version": "0.18.5",
+			"resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz",
+			"integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
+			"license": "Apache-2.0",
+			"dependencies": {
+				"adler-32": "~1.3.0",
+				"cfb": "~1.2.1",
+				"codepage": "~1.15.0",
+				"crc-32": "~1.2.1",
+				"ssf": "~0.11.2",
+				"wmf": "~1.0.1",
+				"word": "~0.3.0"
+			},
+			"bin": {
+				"xlsx": "bin/xlsx.njs"
+			},
+			"engines": {
+				"node": ">=0.8"
+			}
+		},
+		"node_modules/xml-name-validator": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+			"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+			"dev": true,
+			"license": "Apache-2.0",
+			"engines": {
+				"node": ">=12"
+			}
+		},
+		"node_modules/xml2js": {
+			"version": "0.6.2",
+			"resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.6.2.tgz",
+			"integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==",
+			"license": "MIT",
+			"dependencies": {
+				"sax": ">=0.6.0",
+				"xmlbuilder": "~11.0.0"
+			},
+			"engines": {
+				"node": ">=4.0.0"
+			}
+		},
+		"node_modules/xmlbuilder": {
+			"version": "11.0.1",
+			"resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+			"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
+		"node_modules/xtend": {
+			"version": "4.0.2",
+			"resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz",
+			"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+			"license": "MIT",
+			"engines": {
+				"node": ">=0.4"
+			}
+		},
+		"node_modules/yallist": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",
+			"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+			"license": "ISC"
+		},
+		"node_modules/yaml": {
+			"version": "2.5.1",
+			"resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.5.1.tgz",
+			"integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==",
+			"license": "ISC",
+			"bin": {
+				"yaml": "bin.mjs"
+			},
+			"engines": {
+				"node": ">= 14"
+			}
+		},
+		"node_modules/yocto-queue": {
+			"version": "0.1.0",
+			"resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz",
+			"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+			"dev": true,
+			"license": "MIT",
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/zrender": {
+			"version": "5.6.0",
+			"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
+			"integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
+			"license": "BSD-3-Clause",
+			"dependencies": {
+				"tslib": "2.3.0"
+			}
+		},
+		"node_modules/zrender/node_modules/tslib": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+			"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+			"license": "0BSD"
+		}
+	}
+}

+ 100 - 0
package.json

@@ -0,0 +1,100 @@
+{
+	"name": "django-vue3-admin",
+	"version": "3.0.3",
+	"description": "是一套全部开源的快速开发平台,毫无保留给个人免费使用、团体授权使用。\n    django-vue3-admin 基于RBAC模型的权限控制的一整套基础开发平台,权限粒度达到列级别,前后端分离,后端采用django + django-rest-framework,前端采用基于 vue3 + CompositionAPI + typescript + vite + element plus",
+	"license": "MIT",
+	"scripts": {
+		"dev": "vite --force",
+		"build": "vite build",
+		"build:local": "vite build --mode local_prod",
+		"lint-fix": "eslint --fix --ext .js --ext .jsx --ext .vue src/"
+	},
+	"dependencies": {
+		"@element-plus/icons-vue": "^2.0.10",
+		"@fast-crud/fast-crud": "^1.20.1",
+		"@fast-crud/fast-extends": "^1.20.1",
+		"@fast-crud/ui-element": "^1.20.1",
+		"@fast-crud/ui-interface": "^1.20.1",
+		"@iconify/vue": "^4.1.1",
+		"@types/lodash": "^4.14.202",
+		"@vitejs/plugin-vue-jsx": "^3.0.0",
+		"@wangeditor/editor": "^5.1.23",
+		"@wangeditor/editor-for-vue": "^5.1.12",
+		"autoprefixer": "^10.4.14",
+		"axios": "^1.2.1",
+		"countup.js": "^2.3.2",
+		"cropperjs": "^1.5.13",
+		"e-icon-picker": "2.1.1",
+		"echarts": "^5.4.1",
+		"echarts-gl": "^2.0.9",
+		"echarts-wordcloud": "^2.1.0",
+		"element-plus": "^2.8.1",
+		"element-tree-line": "^0.2.1",
+		"font-awesome": "^4.7.0",
+		"js-cookie": "^3.0.1",
+		"js-table2excel": "^1.0.3",
+		"jsplumb": "^2.15.6",
+		"lodash-es": "^4.17.21",
+		"mitt": "^3.0.0",
+		"nprogress": "^0.2.0",
+		"pinia": "^2.0.28",
+		"pinia-plugin-persist": "^1.0.0",
+		"postcss": "^8.4.21",
+		"print-js": "^1.6.0",
+		"qrcodejs2-fixes": "^0.0.2",
+		"qs": "^6.11.0",
+		"screenfull": "^6.0.2",
+		"sortablejs": "^1.15.0",
+		"splitpanes": "^3.1.5",
+		"tailwindcss": "^3.2.7",
+		"ts-md5": "^1.3.1",
+		"upgrade": "^1.1.0",
+		"vue": "^3.5.0",
+		"vue-clipboard3": "^2.0.0",
+		"vue-cropper": "^1.0.8",
+		"vue-grid-layout": "^3.0.0-beta1",
+		"vue-i18n": "^9.2.2",
+		"vue-router": "^4.1.6",
+		"vxe-table": "^4.4.1",
+		"xe-utils": "^3.5.7"
+	},
+	"devDependencies": {
+		"@types/node": "^18.11.13",
+		"@types/nprogress": "^0.2.0",
+		"@types/sortablejs": "^1.15.0",
+		"@typescript-eslint/eslint-plugin": "^5.46.0",
+		"@typescript-eslint/parser": "^5.46.0",
+		"@vitejs/plugin-vue": "^4.0.0",
+		"@vue/compiler-sfc": "^3.2.45",
+		"eslint": "^8.54.0",
+		"eslint-plugin-vue": "^9.8.0",
+		"prettier": "^2.8.1",
+		"sass": "^1.56.2",
+		"typescript": "^5.6.2",
+		"vite": "^4.5.3",
+		"vite-plugin-vue-setup-extend": "^0.4.0",
+		"vue-eslint-parser": "^9.1.0"
+	},
+	"browserslist": [
+		"> 1%",
+		"last 2 versions",
+		"not dead"
+	],
+	"engines": {
+		"node": ">=16.0.0",
+		"npm": ">= 7.0.0"
+	},
+	"keywords": [
+		"vue",
+		"vue3",
+		"element-ui",
+		"element-plus",
+		"django-vue3-admin",
+		"django",
+		"django-restframework"
+	],
+	"repository": {
+		"type": "git",
+		"url": "https://gitee.com/huge-dream/django-vue3-admin.git"
+	}
+}

+ 4 - 0
plugins.d.ts

@@ -0,0 +1,4 @@
+declare module 'vue-grid-layout';
+declare module 'qrcodejs2-fixes';
+declare module 'splitpanes';
+declare module 'js-cookie';

+ 6 - 0
postcss.config.js

@@ -0,0 +1,6 @@
+module.exports = {
+  plugins: {
+    tailwindcss: {},
+    autoprefixer: {},
+  },
+}

BIN
public/favicon.ico


+ 13 - 0
shim.d.ts

@@ -0,0 +1,13 @@
+/* eslint-disable */
+
+// 声明文件,*.vue 后缀的文件交给 vue 模块来处理
+declare module '*.vue' {
+	import type { DefineComponent } from 'vue';
+	const component: DefineComponent<{}, {}, any>;
+	export default component;
+}
+
+// 声明文件,定义全局变量。其它 app.config.globalProperties.xxx,使用 getCurrentInstance() 来获取
+interface Window {
+	nextLoading: boolean;
+}

+ 6 - 0
source.d.ts

@@ -0,0 +1,6 @@
+declare module '*.json';
+declare module '*.png';
+declare module '*.jpg';
+declare module '*.scss';
+declare module '*.ts';
+declare module '*.js';

+ 126 - 0
src/App.vue

@@ -0,0 +1,126 @@
+<template>
+	<el-config-provider :size="getGlobalComponentSize" :locale="getGlobalI18n">
+		<!-- v-show="themeConfig.lockScreenTime > 1" -->
+		<router-view v-show="themeConfig.lockScreenTime > 1" />
+		<LockScreen v-if="themeConfig.isLockScreen" />
+		<Setings ref="setingsRef" v-show="themeConfig.lockScreenTime > 1" />
+		<CloseFull v-if="!themeConfig.isLockScreen" />
+<!--		<Upgrade v-if="getVersion" />-->
+	</el-config-provider>
+</template>
+
+<script setup lang="ts" name="app">
+import { defineAsyncComponent, computed, ref, onBeforeMount, onMounted, onUnmounted, nextTick, watch, onBeforeUnmount } from 'vue';
+import { useRoute } from 'vue-router';
+import { useI18n } from 'vue-i18n';
+import { storeToRefs } from 'pinia';
+import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import other from '/@/utils/other';
+import { Local, Session } from '/@/utils/storage';
+import mittBus from '/@/utils/mitt';
+import setIntroduction from '/@/utils/setIconfont';
+
+// 引入组件
+const LockScreen = defineAsyncComponent(() => import('/@/layout/lockScreen/index.vue'));
+const Setings = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/setings.vue'));
+const CloseFull = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/closeFull.vue'));
+const Upgrade = defineAsyncComponent(() => import('/@/layout/upgrade/index.vue'));
+
+// 定义变量内容
+const { messages, locale } = useI18n();
+const setingsRef = ref();
+const route = useRoute();
+const stores = useTagsViewRoutes();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+import websocket from '/@/utils/websocket';
+import { ElNotification } from 'element-plus';
+// 获取版本号
+const getVersion = computed(() => {
+	let isVersion = false;
+	if (route.path !== '/login') {
+		// @ts-ignore
+		if ((Local.get('version') && Local.get('version') !== __VERSION__) || !Local.get('version')) isVersion = true;
+	}
+	return isVersion;
+});
+// 获取全局组件大小
+const getGlobalComponentSize = computed(() => {
+	return other.globalComponentSize();
+});
+// 获取全局 i18n
+const getGlobalI18n = computed(() => {
+	return messages.value[locale.value];
+});
+// 设置初始化,防止刷新时恢复默认
+onBeforeMount(() => {
+	// 设置批量第三方 icon 图标
+	setIntroduction.cssCdn();
+	// 设置批量第三方 js
+	setIntroduction.jsCdn();
+});
+// 页面加载时
+onMounted(() => {
+	nextTick(() => {
+		// 监听布局配'置弹窗点击打开
+		mittBus.on('openSetingsDrawer', () => {
+			setingsRef.value.openDrawer();
+		});
+		// 获取缓存中的布局配置
+		if (Local.get('themeConfig')) {
+			storesThemeConfig.setThemeConfig({ themeConfig: Local.get('themeConfig') });
+			document.documentElement.style.cssText = Local.get('themeConfigStyle');
+		}
+		// 获取缓存中的全屏配置
+		if (Session.get('isTagsViewCurrenFull')) {
+			stores.setCurrenFullscreen(Session.get('isTagsViewCurrenFull'));
+		}
+	});
+});
+// 页面销毁时,关闭监听布局配置/i18n监听
+onUnmounted(() => {
+	mittBus.off('openSetingsDrawer', () => {});
+});
+// 监听路由的变化,设置网站标题
+watch(
+	() => route.path,
+	() => {
+		other.useTitle();
+    other.useFavicon();
+    if (!websocket.websocket) {
+      //websockt 模块
+      try {
+        websocket.init(wsReceive)
+      } catch (e) {
+        console.log('websocket错误');
+      }
+    }
+	},
+	{
+		deep: true,
+	}
+);
+
+// websocket相关代码
+import { messageCenterStore } from '/@/stores/messageCenter';
+const wsReceive = (message: any) => {
+	const data = JSON.parse(message.data);
+	const { unread } = data;
+	const messageCenter = messageCenterStore();
+	messageCenter.setUnread(unread);
+	if (data.contentType === 'SYSTEM') {
+		ElNotification({
+			title: '系统消息',
+			message: data.content,
+			type: 'success',
+			position: 'bottom-right',
+			duration: 5000,
+		});
+	}
+};
+onBeforeUnmount(() => {
+	// 关闭连接
+	websocket.close();
+});
+</script>

+ 25 - 0
src/api/login/index.ts

@@ -0,0 +1,25 @@
+import request from '/@/utils/request';
+
+/**
+ * 登录api接口集合
+ * @method signIn 用户登录
+ * @method signOut 用户退出登录
+ */
+export function useLoginApi() {
+	return {
+		signIn: (params: object) => {
+			return request({
+				url: '/user/signIn',
+				method: 'post',
+				data: params,
+			});
+		},
+		signOut: (params: object) => {
+			return request({
+				url: '/user/signOut',
+				method: 'post',
+				data: params,
+			});
+		},
+	};
+}

+ 33 - 0
src/api/menu/index.ts

@@ -0,0 +1,33 @@
+import { request } from "/@/utils/service";
+
+/**
+ * 后端控制菜单模拟json,路径在 https://gitee.com/lyt-top/vue-next-admin-images/tree/master/menu
+ * 后端控制路由,isRequestRoutes 为 true,则开启后端控制路由
+ * @method getMenuAdmin 获取后端动态路由菜单(admin)
+ * @method getMenuTest 获取后端动态路由菜单(test)
+ */
+export function useMenuApi() {
+	return {
+		getSystemMenu: (params?: object) => {
+			return request({
+				url: '/api/system/menu/web_router/',
+				method: 'get',
+				params,
+			});
+		},
+		getMenuAdmin: (params?: object) => {
+			return request({
+				url: '/gitee/lyt-top/vue-next-admin-images/raw/master/menu/adminMenu.json',
+				method: 'get',
+				params,
+			});
+		},
+		getMenuTest: (params?: object) => {
+			return request({
+				url: '/gitee/lyt-top/vue-next-admin-images/raw/master/menu/testMenu.json',
+				method: 'get',
+				params,
+			});
+		},
+	};
+}

+ 55 - 0
src/assets/iconfont/iconfont.css

@@ -0,0 +1,55 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 3882322 */
+  src: url('iconfont.woff2?t=1676892176164') format('woff2'),
+       url('iconfont.woff?t=1676892176164') format('woff'),
+       url('iconfont.ttf?t=1676892176164') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-xiaoxizhongxin:before {
+  content: "\e665";
+}
+
+.icon-xitongshezhi:before {
+  content: "\e7ba";
+}
+
+.icon-caozuorizhi:before {
+  content: "\e611";
+}
+
+.icon-guanlidenglurizhi:before {
+  content: "\ea45";
+}
+
+.icon-rizhi:before {
+  content: "\e60c";
+}
+
+.icon-system:before {
+  content: "\e684";
+}
+
+.icon-Area:before {
+  content: "\eaa2";
+}
+
+.icon-file:before {
+  content: "\e671";
+}
+
+.icon-dict:before {
+  content: "\e626";
+}
+
+.icon-configure:before {
+  content: "\e733";
+}
+

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/assets/iconfont/iconfont.js


+ 79 - 0
src/assets/iconfont/iconfont.json

@@ -0,0 +1,79 @@
+{
+  "id": "3882322",
+  "name": "dvadmin3",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon-",
+  "description": "dvadmin3前端项目icon",
+  "glyphs": [
+    {
+      "icon_id": "630252",
+      "name": "消息中心",
+      "font_class": "xiaoxizhongxin",
+      "unicode": "e665",
+      "unicode_decimal": 58981
+    },
+    {
+      "icon_id": "10465939",
+      "name": "系统设置",
+      "font_class": "xitongshezhi",
+      "unicode": "e7ba",
+      "unicode_decimal": 59322
+    },
+    {
+      "icon_id": "13952258",
+      "name": "操作日志",
+      "font_class": "caozuorizhi",
+      "unicode": "e611",
+      "unicode_decimal": 58897
+    },
+    {
+      "icon_id": "26876046",
+      "name": "管理登录日志",
+      "font_class": "guanlidenglurizhi",
+      "unicode": "ea45",
+      "unicode_decimal": 59973
+    },
+    {
+      "icon_id": "4520330",
+      "name": "日志",
+      "font_class": "rizhi",
+      "unicode": "e60c",
+      "unicode_decimal": 58892
+    },
+    {
+      "icon_id": "11686866",
+      "name": "system",
+      "font_class": "system",
+      "unicode": "e684",
+      "unicode_decimal": 59012
+    },
+    {
+      "icon_id": "12004865",
+      "name": "Area",
+      "font_class": "Area",
+      "unicode": "eaa2",
+      "unicode_decimal": 60066
+    },
+    {
+      "icon_id": "15838480",
+      "name": "file",
+      "font_class": "file",
+      "unicode": "e671",
+      "unicode_decimal": 58993
+    },
+    {
+      "icon_id": "16880980",
+      "name": "dict",
+      "font_class": "dict",
+      "unicode": "e626",
+      "unicode_decimal": 58918
+    },
+    {
+      "icon_id": "32434794",
+      "name": "configure",
+      "font_class": "configure",
+      "unicode": "e733",
+      "unicode_decimal": 59187
+    }
+  ]
+}

BIN
src/assets/iconfont/iconfont.ttf


BIN
src/assets/iconfont/iconfont.woff


BIN
src/assets/iconfont/iconfont.woff2


BIN
src/assets/img/headerImage.png


BIN
src/assets/img/menu-tree-head-icon.png


BIN
src/assets/img/menu-tree-hidden-icon.png


BIN
src/assets/img/menu-tree-show-icon.png


Разница между файлами не показана из-за своего большого размера
+ 6 - 0
src/assets/login-bg.svg


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/assets/login-icon-two.svg


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/assets/login-main.svg


+ 2823 - 0
src/assets/logo-mini.svg

@@ -0,0 +1,2823 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="872px" height="732px" viewBox="0 0 872 732" enable-background="new 0 0 872 732" xml:space="preserve">  <image id="image0" width="872" height="732" x="0" y="0"
+    xlink:href="data:image/png;base64,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
+MDC26ZTZAAAAAElFTkSuQmCC" />
+</svg>

+ 9 - 0
src/assets/style/reset.scss

@@ -0,0 +1,9 @@
+.fs-crud-container {
+	.el-table thead {
+		color: #606266;
+	}
+	.el-input__inner::placeholder {
+		color: #dcdfe6;
+		font-size: 12px;
+	}
+}

+ 3 - 0
src/assets/style/tailwind.css

@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;

+ 26 - 0
src/components/auth/auth.vue

@@ -0,0 +1,26 @@
+<template>
+	<slot v-if="getUserAuthBtnList" />
+</template>
+
+<script setup lang="ts" name="auth">
+import { computed } from 'vue';
+import { storeToRefs } from 'pinia';
+import { useUserInfo } from '/@/stores/userInfo';
+
+// 定义父组件传过来的值
+const props = defineProps({
+	value: {
+		type: String,
+		default: () => '',
+	},
+});
+
+// 定义变量内容
+const stores = useUserInfo();
+const { userInfos } = storeToRefs(stores);
+
+// 获取 pinia 中的用户权限
+const getUserAuthBtnList = computed(() => {
+	return userInfos.value.authBtnList.some((v: string) => v === props.value);
+});
+</script>

+ 27 - 0
src/components/auth/authAll.vue

@@ -0,0 +1,27 @@
+<template>
+	<slot v-if="getUserAuthBtnList" />
+</template>
+
+<script setup lang="ts" name="authAll">
+import { computed } from 'vue';
+import { storeToRefs } from 'pinia';
+import { useUserInfo } from '/@/stores/userInfo';
+import { judementSameArr } from '/@/utils/arrayOperation';
+
+// 定义父组件传过来的值
+const props = defineProps({
+	value: {
+		type: Array,
+		default: () => [],
+	},
+});
+
+// 定义变量内容
+const stores = useUserInfo();
+const { userInfos } = storeToRefs(stores);
+
+// 获取 pinia 中的用户权限
+const getUserAuthBtnList = computed(() => {
+	return judementSameArr(props.value, userInfos.value.authBtnList);
+});
+</script>

+ 32 - 0
src/components/auth/auths.vue

@@ -0,0 +1,32 @@
+<template>
+	<slot v-if="getUserAuthBtnList" />
+</template>
+
+<script setup lang="ts" name="auths">
+import { computed } from 'vue';
+import { storeToRefs } from 'pinia';
+import { useUserInfo } from '/@/stores/userInfo';
+
+// 定义父组件传过来的值
+const props = defineProps({
+	value: {
+		type: Array,
+		default: () => [],
+	},
+});
+
+// 定义变量内容
+const stores = useUserInfo();
+const { userInfos } = storeToRefs(stores);
+
+// 获取 pinia 中的用户权限
+const getUserAuthBtnList = computed(() => {
+	let flag = false;
+	userInfos.value.authBtnList.map((val: string) => {
+		props.value.map((v) => {
+			if (val === v) flag = true;
+		});
+	});
+	return flag;
+});
+</script>

+ 196 - 0
src/components/avatarSelector/index.vue

@@ -0,0 +1,196 @@
+<template>
+	<div class="user-info-head" @click="editCropper()">
+		<el-avatar :size="100" :src="options.img" />
+		<el-dialog :title="title" v-model="dialogVisiable" width="600px" append-to-body @opened="modalOpened" @close="closeDialog">
+			<el-row>
+				<el-col class="flex justify-center">
+					<vue-cropper
+						ref="cropper"
+						:img="options.img"
+						:info="true"
+						:autoCrop="options.autoCrop"
+						:autoCropWidth="options.autoCropWidth"
+						:autoCropHeight="options.autoCropHeight"
+						:fixedBox="options.fixedBox"
+						:outputType="options.outputType"
+						@realTime="realTime"
+						:centerBox="true"
+						v-if="visible"
+						class="cropper"
+					/>
+				</el-col>
+			</el-row>
+			<br />
+			<el-row class="flex justify-center">
+				<el-col :lg="2" :md="2">
+					<el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload">
+						<el-button type="success">
+							选择
+							<el-icon class="el-icon--right"><Plus /></el-icon>
+						</el-button>
+					</el-upload>
+				</el-col>
+				<el-col :lg="{ span: 1, offset: 2 }" :md="2">
+					<el-button icon="RefreshLeft" @click="rotateLeft()"></el-button>
+				</el-col>
+				<el-col :lg="{ span: 1, offset: 2 }" :md="2">
+					<el-button icon="RefreshRight" @click="rotateRight()"></el-button>
+				</el-col>
+				<el-col :lg="{ span: 2, offset: 2 }" :md="2">
+					<el-button type="primary" @click="uploadImg()">更新头像</el-button>
+				</el-col>
+			</el-row>
+		</el-dialog>
+	</div>
+</template>
+
+<script setup>
+import 'vue-cropper/dist/index.css';
+import { VueCropper } from 'vue-cropper';
+import { useUserInfo } from '/@/stores/userInfo';
+import { getCurrentInstance, nextTick, reactive, ref, computed, onMounted, defineExpose } from 'vue';
+import { base64ToFile } from '/@/utils/tools';
+const userStore = useUserInfo();
+const { proxy } = getCurrentInstance();
+
+const open = ref(false);
+const visible = ref(false);
+const title = ref('修改头像');
+const emit = defineEmits(['uploadImg']);
+const props = defineProps({
+	modelValue: {
+		type: Boolean,
+		default: false,
+		required: true,
+	},
+});
+const dialogVisiable = computed({
+	get() {
+		return props.modelValue;
+	},
+	set(newVal) {
+		emit('update:modelValue', newVal);
+	},
+});
+
+//图片裁剪数据
+const options = reactive({
+	img: userStore.userInfos.avatar, // 裁剪图片的地址
+	fileName: '',
+	autoCrop: true, // 是否默认生成截图框
+	autoCropWidth: 200, // 默认生成截图框宽度
+	autoCropHeight: 200, // 默认生成截图框高度
+	fixedBox: true, // 固定截图框大小 不允许改变
+	outputType: 'png', // 默认生成截图为PNG格式
+});
+
+/** 编辑头像 */
+function editCropper() {
+	dialogVisiable.value = true;
+}
+/** 打开弹出层结束时的回调 */
+function modalOpened() {
+	nextTick(() => {
+		visible.value = true;
+	});
+}
+/** 覆盖默认上传行为 */
+function requestUpload() {}
+/** 向左旋转 */
+function rotateLeft() {
+	proxy.$refs.cropper.rotateLeft();
+}
+/** 向右旋转 */
+function rotateRight() {
+	proxy.$refs.cropper.rotateRight();
+}
+/** 图片缩放 */
+function changeScale(num) {
+	num = num || 1;
+	proxy.$refs.cropper.changeScale(num);
+}
+/** 上传预处理 */
+function beforeUpload(file) {
+	if (file.type.indexOf('image/') == -1) {
+		proxy.$modal.msgError('文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。');
+	} else {
+		const reader = new FileReader();
+		reader.readAsDataURL(file);
+		reader.onload = () => {
+			options.img = reader.result;
+			options.fileName = file.name;
+		};
+	}
+}
+/** 上传图片 */
+function uploadImg() {
+	// 获取截图的 base64 数据
+	proxy.$refs.cropper.getCropData((data) => {
+		let img = new Image();
+		img.src = data;
+		img.onload = async () => {
+			let _data = compress(img);
+			const imgFile = base64ToFile(_data, options.fileName);
+			emit('uploadImg', imgFile);
+		};
+	});
+}
+// 压缩图片
+function compress(img) {
+	let canvas = document.createElement('canvas');
+	let ctx = canvas.getContext('2d');
+	// let initSize = img.src.length;
+	let width = img.width;
+	let height = img.height;
+	canvas.width = width;
+	canvas.height = height;
+	// 铺底色
+	ctx.fillStyle = '#fff';
+	ctx.fillRect(0, 0, canvas.width, canvas.height);
+	ctx.drawImage(img, 0, 0, width, height);
+	// 进行压缩
+	let ndata = canvas.toDataURL('image/jpeg', 0.8);
+	return ndata;
+}
+
+/** 关闭窗口 */
+function closeDialog() {
+	options.visible = false;
+	options.img = userStore.userInfos.avatar;
+}
+
+const updateAvatar = (img) => {
+	options.img = img;
+};
+
+defineExpose({
+	updateAvatar,
+});
+</script>
+
+<style lang="scss" scoped>
+.user-info-head {
+	position: relative;
+	display: inline-block;
+	height: 120px;
+}
+
+.user-info-head:hover:after {
+	content: '修改头像';
+	position: absolute;
+	text-align: center;
+	left: 0;
+	right: 0;
+	top: 0;
+	bottom: 0;
+	color: #000000;
+	font-size: 20px;
+	font-style: normal;
+	cursor: pointer;
+	line-height: 110px;
+}
+.cropper {
+	height: 400px;
+	width: 400px;
+}
+</style>

+ 143 - 0
src/components/cropper/index.vue

@@ -0,0 +1,143 @@
+<template>
+	<div>
+		<el-dialog title="更换头像" v-model="state.isShowDialog" width="769px">
+			<div class="cropper-warp">
+				<div class="cropper-warp-left">
+					<img :src="state.cropperImg" class="cropper-warp-left-img" />
+				</div>
+				<div class="cropper-warp-right">
+					<div class="cropper-warp-right-title">预览</div>
+					<div class="cropper-warp-right-item">
+						<div class="cropper-warp-right-value">
+							<img :src="state.cropperImgBase64" class="cropper-warp-right-value-img" />
+						</div>
+						<div class="cropper-warp-right-label">100 x 100</div>
+					</div>
+					<div class="cropper-warp-right-item">
+						<div class="cropper-warp-right-value">
+							<img :src="state.cropperImgBase64" class="cropper-warp-right-value-img cropper-size" />
+						</div>
+						<div class="cropper-warp-right-label">50 x 50</div>
+					</div>
+				</div>
+			</div>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="onCancel" size="default">取 消</el-button>
+					<el-button type="primary" @click="onSubmit" size="default">更 换</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script setup lang="ts" name="cropper">
+import { reactive, nextTick } from 'vue';
+import Cropper from 'cropperjs';
+import 'cropperjs/dist/cropper.css';
+
+// 定义变量内容
+const state = reactive({
+	isShowDialog: false,
+	cropperImg: '',
+	cropperImgBase64: '',
+	cropper: '' as RefType,
+});
+
+// 打开弹窗
+const openDialog = (imgs: string) => {
+	state.cropperImg = imgs;
+	state.isShowDialog = true;
+	nextTick(() => {
+		initCropper();
+	});
+};
+// 关闭弹窗
+const closeDialog = () => {
+	state.isShowDialog = false;
+};
+// 取消
+const onCancel = () => {
+	closeDialog();
+};
+// 更换
+const onSubmit = () => {
+	// state.cropperImgBase64 = state.cropper.getCroppedCanvas().toDataURL('image/jpeg');
+};
+// 初始化cropperjs图片裁剪
+const initCropper = () => {
+	const letImg = <HTMLImageElement>document.querySelector('.cropper-warp-left-img');
+	state.cropper = new Cropper(letImg, {
+		viewMode: 1,
+		dragMode: 'none',
+		initialAspectRatio: 1,
+		aspectRatio: 1,
+		preview: '.before',
+		background: false,
+		autoCropArea: 0.6,
+		zoomOnWheel: false,
+		crop: () => {
+			state.cropperImgBase64 = state.cropper.getCroppedCanvas().toDataURL('image/jpeg');
+		},
+	});
+};
+
+// 暴露变量
+defineExpose({
+	openDialog,
+});
+</script>
+
+<style scoped lang="scss">
+.cropper-warp {
+	display: flex;
+	.cropper-warp-left {
+		position: relative;
+		display: inline-block;
+		height: 350px;
+		flex: 1;
+		border: 1px solid var(--el-border-color);
+		background: var(--el-color-white);
+		overflow: hidden;
+		background-repeat: no-repeat;
+		cursor: move;
+		border-radius: var(--el-border-radius-base);
+		.cropper-warp-left-img {
+			width: 100%;
+			height: 100%;
+		}
+	}
+	.cropper-warp-right {
+		width: 150px;
+		height: 350px;
+		.cropper-warp-right-title {
+			text-align: center;
+			height: 20px;
+			line-height: 20px;
+		}
+		.cropper-warp-right-item {
+			margin: 15px 0;
+			.cropper-warp-right-value {
+				display: flex;
+				.cropper-warp-right-value-img {
+					width: 100px;
+					height: 100px;
+					border-radius: var(--el-border-radius-circle);
+					margin: auto;
+				}
+				.cropper-size {
+					width: 50px;
+					height: 50px;
+				}
+			}
+			.cropper-warp-right-label {
+				text-align: center;
+				font-size: 12px;
+				color: var(--el-text-color-primary);
+				height: 30px;
+				line-height: 30px;
+			}
+		}
+	}
+}
+</style>

+ 29 - 0
src/components/dept-format/index.vue

@@ -0,0 +1,29 @@
+<template>
+  <div>
+    {{ data }}
+  </div>
+</template>
+<script setup lang="ts">
+import {defineProps,ref,watch} from 'vue'
+import {useDeptInfoStore} from '/@/stores/modules/dept'
+const props = defineProps({
+  modelValue:{
+    type: Number || String
+  }
+})
+const data = ref()
+watch(()=>{
+  return props.modelValue
+},async (newVal)=>{
+  const deptInfoStore = useDeptInfoStore()
+  const result = await deptInfoStore.getParentDeptById(newVal)
+  if(result?.nodes){
+    let name = ""
+    console.log(result)
+    result.nodes.forEach((item:any,index:number)=>{
+      name +=  index>0?`/${item.name}`:item.name
+    })
+    data.value = name
+  }
+},{immediate: true} )
+</script>

+ 141 - 0
src/components/dvaSelect/index.vue

@@ -0,0 +1,141 @@
+<template>
+  <!--   你的自定义受控组件-->
+  <el-select-v2
+      v-model="data"
+      :options="options"
+      style="width: 100%;"
+      :clearable="true"
+      :props="selectProps"
+      @change="onDataChange"
+
+  />
+</template>
+<script lang="ts" setup>
+import {ref, defineComponent, watch, computed, toRefs, toRaw, onMounted} from 'vue'
+import {useUi} from "@fast-crud/fast-crud";
+import {request} from "/@/utils/service";
+
+const props = defineProps({
+  dict: { // 接收来自FastCrud配置中的dict数据
+    type: Array,
+    required: true,
+  },
+  modelValue: {}
+})
+const emit = defineEmits(['update:modelValue'])
+// 获取数据
+const dataList = ref([])
+
+function getData(params) {
+  request({
+    url: props.dict.url,
+    params: params
+  }).then(res => {
+    dataList.value = res.data
+  })
+
+}
+
+// template上使用data
+const data = ref()
+// const data = computed({
+//   get: () => {
+//     console.log("有默认值", props.modelValue)
+//     //getData({id:props.modelValue})
+//
+//     console.log(11, dataList)
+//     // const {data} = res
+//     // console.log("get",data[0][selectProps.value.label])
+//     if (dataList && dataList.length === 1) {
+//       return dataList[0][selectProps.value.value]
+//     } else {
+//       // console.log("aa",res.data)
+//       return props.modelValue
+//     }
+//     // return props.modelValue
+//   },
+//   set: (val) => {
+//     //data.value =  val
+//     return val
+//   }
+// })
+const options = ref([])
+const selectProps = ref({
+  label: 'label',
+  value: 'value'
+})
+watch(
+    () => {
+      return props.modelValue
+    }, // 监听modelValue的变化,
+    (value) => {
+      // data.value = value
+      request({
+        url: props.dict.url,
+        params: {
+          id: props.modelValue
+        }
+      }).then(res => {
+        const dataList = res.data
+        console.log(dataList)
+        if (dataList && dataList.length === 1) {
+          data.value = dataList[0][selectProps.value.label]
+        }else{
+          data.value = null
+        }
+      })
+    }, // 当modelValue值触发后,同步修改data.value的值
+    {immediate: true} // 立即触发一次,给data赋值初始值
+)
+//获取表单校验上下文
+const {ui} = useUi()
+const formValidator = ui.formItem.injectFormItemContext();
+// 当data需要变化时,上报给父组件
+// 父组件监听到update:modelValue事件后,会更新props.modelValue的值
+// 然后watch会被触发,修改data.value的值。
+function onDataChange(value) {
+  emit('update:modelValue', value)
+  data.value = value
+  //触发校验
+  formValidator.onChange()
+  formValidator.onBlur()
+}
+
+
+if (props.dict.url instanceof Function) {
+  request(props.dict.url).then((res) => {
+    options.value = res.data
+  })
+} else {
+  selectProps.value.label = props.dict.label
+  selectProps.value.value = props.dict.value
+  request({
+    url: props.dict.url
+  }).then((res) => {
+    options.value = res.data
+  })
+}
+
+
+// onMounted(() => {
+//   getData({id: props.modelValue})
+// })
+
+</script>
+<style scoped lang="scss">
+.el-select .el-input__wrapper .el-input__inner::placeholder {
+  //color: #a8abb2;
+  color: #0d84ff;
+}
+
+.el-select-v2 {
+  .el-select-v2__wrapper {
+    .el-select-v2__placeholder.is-transparent {
+      //color: #a8abb2;
+      color: #0d84ff;
+    }
+  }
+}
+
+
+</style>

+ 101 - 0
src/components/editor/index.vue

@@ -0,0 +1,101 @@
+<template>
+	<div class="editor-container">
+		<Toolbar :editor="editorRef" :mode="mode" />
+		<Editor
+			:mode="mode"
+			:defaultConfig="state.editorConfig"
+			:style="{ height }"
+			v-model="state.editorVal"
+			@onCreated="handleCreated"
+			@onChange="handleChange"
+		/>
+	</div>
+</template>
+
+<script setup lang="ts" name="wngEditor">
+// https://www.wangeditor.com/v5/for-frame.html#vue3
+import '@wangeditor/editor/dist/css/style.css';
+import { reactive, shallowRef, watch, onBeforeUnmount } from 'vue';
+import { IDomEditor } from '@wangeditor/editor';
+import { Toolbar, Editor } from '@wangeditor/editor-for-vue';
+
+// 定义父组件传过来的值
+const props = defineProps({
+	// 是否禁用
+	disable: {
+		type: Boolean,
+		default: () => false,
+	},
+	// 内容框默认 placeholder
+	placeholder: {
+		type: String,
+		default: () => '请输入内容...',
+	},
+	// https://www.wangeditor.com/v5/getting-started.html#mode-%E6%A8%A1%E5%BC%8F
+	// 模式,可选 <default|simple>,默认 default
+	mode: {
+		type: String,
+		default: () => 'default',
+	},
+	// 高度
+	height: {
+		type: String,
+		default: () => '310px',
+	},
+	// 双向绑定,用于获取 editor.getHtml()
+	getHtml: String,
+	// 双向绑定,用于获取 editor.getText()
+	getText: String,
+});
+
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['update:getHtml', 'update:getText']);
+
+// 定义变量内容
+const editorRef = shallowRef();
+const state = reactive({
+	editorConfig: {
+		placeholder: props.placeholder,
+	},
+	editorVal: props.getHtml,
+});
+
+// 编辑器回调函数
+const handleCreated = (editor: IDomEditor) => {
+	editorRef.value = editor;
+};
+// 编辑器内容改变时
+const handleChange = (editor: IDomEditor) => {
+	emit('update:getHtml', editor.getHtml());
+	emit('update:getText', editor.getText());
+};
+// 页面销毁时
+onBeforeUnmount(() => {
+	const editor = editorRef.value;
+	if (editor == null) return;
+	editor.destroy();
+});
+// 监听是否禁用改变
+// https://gitee.com/lyt-top/vue-next-admin/issues/I4LM7I
+watch(
+	() => props.disable,
+	(bool) => {
+		const editor = editorRef.value;
+		if (editor == null) return;
+		bool ? editor.disable() : editor.enable();
+	},
+	{
+		deep: true,
+	}
+);
+// 监听双向绑定值改变,用于回显
+watch(
+	() => props.getHtml,
+	(val) => {
+		state.editorVal = val;
+	},
+	{
+		deep: true,
+	}
+);
+</script>

+ 60 - 0
src/components/editor/toolbar.ts

@@ -0,0 +1,60 @@
+/**
+ * 工具栏配置
+ */
+export const toolbarKeys = [
+	'headerSelect',
+	'blockquote',
+	'|',
+	'bold',
+	'underline',
+	'italic',
+	{
+		key: 'group-more-style',
+		title: '更多',
+		iconSvg:
+			'<svg viewBox="0 0 1024 1024"><path d="M204.8 505.6m-76.8 0a76.8 76.8 0 1 0 153.6 0 76.8 76.8 0 1 0-153.6 0Z"></path><path d="M505.6 505.6m-76.8 0a76.8 76.8 0 1 0 153.6 0 76.8 76.8 0 1 0-153.6 0Z"></path><path d="M806.4 505.6m-76.8 0a76.8 76.8 0 1 0 153.6 0 76.8 76.8 0 1 0-153.6 0Z"></path></svg>',
+		menuKeys: ['through', 'code', 'sup', 'sub', 'clearStyle'],
+	},
+	'color',
+	'bgColor',
+	'|',
+	'fontSize',
+	'fontFamily',
+	'lineHeight',
+	'|',
+	'bulletedList',
+	'numberedList',
+	'todo',
+	{
+		key: 'group-justify',
+		title: '对齐',
+		iconSvg:
+			'<svg viewBox="0 0 1024 1024"><path d="M768 793.6v102.4H51.2v-102.4h716.8z m204.8-230.4v102.4H51.2v-102.4h921.6z m-204.8-230.4v102.4H51.2v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z"></path></svg>',
+		menuKeys: ['justifyLeft', 'justifyRight', 'justifyCenter', 'justifyJustify'],
+	},
+	{
+		key: 'group-indent',
+		title: '缩进',
+		iconSvg:
+			'<svg viewBox="0 0 1024 1024"><path d="M0 64h1024v128H0z m384 192h640v128H384z m0 192h640v128H384z m0 192h640v128H384zM0 832h1024v128H0z m0-128V320l256 192z"></path></svg>',
+		menuKeys: ['indent', 'delIndent'],
+	},
+	'|',
+	'emotion',
+	'insertLink',
+	{
+		key: 'group-image',
+		title: '图片',
+		iconSvg:
+			'<svg viewBox="0 0 1024 1024"><path d="M959.877 128l0.123 0.123v767.775l-0.123 0.122H64.102l-0.122-0.122V128.123l0.122-0.123h895.775zM960 64H64C28.795 64 0 92.795 0 128v768c0 35.205 28.795 64 64 64h896c35.205 0 64-28.795 64-64V128c0-35.205-28.795-64-64-64zM832 288.01c0 53.023-42.988 96.01-96.01 96.01s-96.01-42.987-96.01-96.01S682.967 192 735.99 192 832 234.988 832 288.01zM896 832H128V704l224.01-384 256 320h64l224.01-192z"></path></svg>',
+		menuKeys: ['uploadImage'],
+	},
+	'insertTable',
+	'codeBlock',
+	'divider',
+	'|',
+	'undo',
+	'redo',
+	'|',
+	'fullScreen',
+];

+ 41 - 0
src/components/foreignKey/index.vue

@@ -0,0 +1,41 @@
+<template>
+  <!--   你的自定义受控组件-->
+  <div>
+    <el-tag :type="randomType">{{ data }}</el-tag>
+  </div>
+</template>
+<script lang="ts" setup>
+import {watch, ref} from "vue";
+
+const props = defineProps({
+  modelValue: String || Object,
+  displayLabel: {
+    type:String,
+    default: ""
+  }
+})
+
+// template上使用data
+const data = ref()
+watch(() => {
+      return props.modelValue
+    }, // 监听modelValue的变化,
+    (value) => {
+      if (typeof value === "string") {
+        data.value = value
+      } else if (typeof value === "object") {
+        const {displayLabel} = props
+        data.value = value ? value[displayLabel] : null
+      } else {
+        data.value = null
+      }
+
+    }, // 当modelValue值触发后,同步修改data.value的值
+    {immediate: true} // 立即触发一次,给data赋值初始值
+)
+
+const tagType = ['success', 'info', 'warning', 'danger']
+const randomType = (): string => {
+  return tagType[Math.floor(Math.random() * tagType.length)];
+}
+</script>

+ 241 - 0
src/components/iconSelector/index.vue

@@ -0,0 +1,241 @@
+<template>
+	<div class="icon-selector w100 h100">
+		<el-input
+			v-model="state.fontIconSearch"
+			:placeholder="state.fontIconPlaceholder"
+			:clearable="clearable"
+			:disabled="disabled"
+			:size="size"
+			ref="inputWidthRef"
+			@clear="onClearFontIcon"
+			@focus="onIconFocus"
+			@blur="onIconBlur"
+		>
+			<template #prepend>
+				<SvgIcon
+					:name="state.fontIconPrefix === '' ? prepend : state.fontIconPrefix"
+					class="font14"
+					v-if="state.fontIconPrefix === '' ? prepend?.indexOf('ele-') > -1 : state.fontIconPrefix?.indexOf('ele-') > -1"
+				/>
+				<i v-else :class="state.fontIconPrefix === '' ? prepend : state.fontIconPrefix" class="font14"></i>
+			</template>
+		</el-input>
+		<el-popover
+			placement="bottom"
+			:width="state.fontIconWidth"
+			transition="el-zoom-in-top"
+			popper-class="icon-selector-popper"
+			trigger="click"
+			:virtual-ref="inputWidthRef"
+			virtual-triggering
+		>
+			<template #default>
+				<div class="icon-selector-warp">
+					<div class="icon-selector-warp-title">{{ title }}</div>
+					<el-tabs v-model="state.fontIconTabActive" @tab-click="onIconClick">
+						<el-tab-pane lazy label="ali" name="ali">
+							<IconList :list="fontIconSheetsFilterList" :empty="emptyDescription" :prefix="state.fontIconPrefix" @get-icon="onColClick" />
+						</el-tab-pane>
+						<el-tab-pane lazy label="ele" name="ele">
+							<IconList :list="fontIconSheetsFilterList" :empty="emptyDescription" :prefix="state.fontIconPrefix" @get-icon="onColClick" />
+						</el-tab-pane>
+						<el-tab-pane lazy label="awe" name="awe">
+							<IconList :list="fontIconSheetsFilterList" :empty="emptyDescription" :prefix="state.fontIconPrefix" @get-icon="onColClick" />
+						</el-tab-pane>
+					</el-tabs>
+				</div>
+			</template>
+		</el-popover>
+	</div>
+</template>
+
+<script setup lang="ts" name="iconSelector">
+import { defineAsyncComponent, ref, reactive, onMounted, nextTick, computed, watch } from 'vue';
+import type { TabsPaneContext } from 'element-plus';
+import initIconfont from '/@/utils/getStyleSheets';
+import '/@/theme/iconSelector.scss';
+
+// 定义父组件传过来的值
+const props = defineProps({
+	// 输入框前置内容
+	prepend: {
+		type: String,
+		default: () => 'ele-Pointer',
+	},
+	// 输入框占位文本
+	placeholder: {
+		type: String,
+		default: () => '请输入内容搜索图标或者选择图标',
+	},
+	// 输入框占位文本
+	size: {
+		type: String,
+		default: () => 'default',
+	},
+	// 弹窗标题
+	title: {
+		type: String,
+		default: () => '请选择图标',
+	},
+	// 禁用
+	disabled: {
+		type: Boolean,
+		default: () => false,
+	},
+	// 是否可清空
+	clearable: {
+		type: Boolean,
+		default: () => true,
+	},
+	// 自定义空状态描述文字
+	emptyDescription: {
+		type: String,
+		default: () => '无相关图标',
+	},
+	// 双向绑定值,默认为 modelValue,
+	// 参考:https://v3.cn.vuejs.org/guide/migration/v-model.html#%E8%BF%81%E7%A7%BB%E7%AD%96%E7%95%A5
+	// 参考:https://v3.cn.vuejs.org/guide/component-custom-events.html#%E5%A4%9A%E4%B8%AA-v-model-%E7%BB%91%E5%AE%9A
+	modelValue: String,
+});
+
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['update:modelValue', 'get', 'clear']);
+
+// 引入组件
+const IconList = defineAsyncComponent(() => import('/@/components/iconSelector/list.vue'));
+
+// 定义变量内容
+const inputWidthRef = ref();
+const state = reactive({
+	fontIconPrefix: '',
+	fontIconWidth: 0,
+	fontIconSearch: '',
+	fontIconPlaceholder: '',
+	fontIconTabActive: 'ali',
+	fontIconList: {
+		ali: [],
+		ele: [],
+		awe: [],
+	},
+});
+
+// 处理 input 获取焦点时,modelValue 有值时,改变 input 的 placeholder 值
+const onIconFocus = () => {
+	if (!props.modelValue) return false;
+	state.fontIconSearch = '';
+	state.fontIconPlaceholder = props.modelValue;
+};
+// 处理 input 失去焦点时,为空将清空 input 值,为点击选中图标时,将取原先值
+const onIconBlur = () => {
+	const list = fontIconTabNameList();
+	setTimeout(() => {
+		const icon = list.filter((icon: string) => icon === state.fontIconSearch);
+		if (icon.length <= 0) state.fontIconSearch = '';
+	}, 300);
+};
+// 图标搜索及图标数据显示
+const fontIconSheetsFilterList = computed(() => {
+	const list = fontIconTabNameList();
+	if (!state.fontIconSearch) return list;
+	let search = state.fontIconSearch.trim().toLowerCase();
+	return list.filter((item: string) => {
+		if (item.toLowerCase().indexOf(search) !== -1) return item;
+	});
+});
+// 根据 tab name 类型设置图标
+const fontIconTabNameList = () => {
+	let iconList: any = [];
+	if (state.fontIconTabActive === 'ali') iconList = state.fontIconList.ali;
+	else if (state.fontIconTabActive === 'ele') iconList = state.fontIconList.ele;
+	else if (state.fontIconTabActive === 'awe') iconList = state.fontIconList.awe;
+	return iconList;
+};
+// 处理 icon 双向绑定数值回显
+const initModeValueEcho = () => {
+	if (props.modelValue === '') return ((<string | undefined>state.fontIconPlaceholder) = props.placeholder);
+	(<string | undefined>state.fontIconPlaceholder) = props.modelValue;
+	(<string | undefined>state.fontIconPrefix) = props.modelValue;
+};
+// 处理 icon 类型,用于回显时,tab 高亮与初始化数据
+const initFontIconName = () => {
+	let name = 'ali';
+	if (props.modelValue!.indexOf('iconfont') > -1) name = 'ali';
+	else if (props.modelValue!.indexOf('ele-') > -1) name = 'ele';
+	else if (props.modelValue!.indexOf('fa') > -1) name = 'awe';
+	// 初始化 tab 高亮回显
+	state.fontIconTabActive = name;
+	return name;
+};
+// 初始化数据
+const initFontIconData = async (name: string) => {
+	if (name === 'ali') {
+		// 阿里字体图标使用 `iconfont xxx`
+		if (state.fontIconList.ali.length > 0) return;
+		await initIconfont.ali().then((res: any) => {
+			state.fontIconList.ali = res.map((i: string) => `iconfont ${i}`);
+		});
+	} else if (name === 'ele') {
+		// element plus 图标
+		if (state.fontIconList.ele.length > 0) return;
+		await initIconfont.ele().then((res: any) => {
+			state.fontIconList.ele = res;
+		});
+	} else if (name === 'awe') {
+		// fontawesome字体图标使用 `fa xxx`
+		if (state.fontIconList.awe.length > 0) return;
+		await initIconfont.awe().then((res: any) => {
+			state.fontIconList.awe = res.map((i: string) => `fa ${i}`);
+		});
+	}
+	// 初始化 input 的 placeholder
+	// 参考(单项数据流):https://cn.vuejs.org/v2/guide/components-props.html?#%E5%8D%95%E5%90%91%E6%95%B0%E6%8D%AE%E6%B5%81
+	state.fontIconPlaceholder = props.placeholder;
+	// 初始化双向绑定回显
+	initModeValueEcho();
+};
+// 图标点击切换
+const onIconClick = (pane: TabsPaneContext) => {
+	initFontIconData(pane.paneName as string);
+	inputWidthRef.value.focus();
+};
+// 获取当前点击的 icon 图标
+const onColClick = (v: string) => {
+	state.fontIconPlaceholder = v;
+	state.fontIconPrefix = v;
+	emit('get', state.fontIconPrefix);
+	emit('update:modelValue', state.fontIconPrefix);
+	inputWidthRef.value.focus();
+};
+// 清空当前点击的 icon 图标
+const onClearFontIcon = () => {
+	state.fontIconPrefix = '';
+	emit('clear', state.fontIconPrefix);
+	emit('update:modelValue', state.fontIconPrefix);
+};
+// 获取 input 的宽度
+const getInputWidth = () => {
+	nextTick(() => {
+		state.fontIconWidth = inputWidthRef.value.$el.offsetWidth;
+	});
+};
+// 监听页面宽度改变
+const initResize = () => {
+	window.addEventListener('resize', () => {
+		getInputWidth();
+	});
+};
+// 页面加载时
+onMounted(() => {
+	initFontIconData(initFontIconName());
+	initResize();
+	getInputWidth();
+});
+// 监听双向绑定 modelValue 的变化
+watch(
+	() => props.modelValue,
+	() => {
+		initModeValueEcho();
+		initFontIconName();
+	}
+);
+</script>

+ 84 - 0
src/components/iconSelector/list.vue

@@ -0,0 +1,84 @@
+<template>
+	<div class="icon-selector-warp-row">
+		<el-scrollbar ref="selectorScrollbarRef">
+			<el-row :gutter="10" v-if="props.list.length > 0">
+				<el-col :xs="6" :sm="4" :md="4" :lg="4" :xl="4" v-for="(v, k) in list" :key="k" @click="onColClick(v)">
+					<div class="icon-selector-warp-item" :class="{ 'icon-selector-active': prefix === v }">
+						<SvgIcon :name="v" />
+					</div>
+				</el-col>
+			</el-row>
+			<el-empty :image-size="100" v-if="list.length <= 0" :description="empty"></el-empty>
+		</el-scrollbar>
+	</div>
+</template>
+
+<script setup lang="ts" name="iconSelectorList">
+// 定义父组件传过来的值
+const props = defineProps({
+	// 图标列表数据
+	list: {
+		type: Array,
+		default: () => [],
+	},
+	// 自定义空状态描述文字
+	empty: {
+		type: String,
+		default: () => '无相关图标',
+	},
+	// 高亮当前选中图标
+	prefix: {
+		type: String,
+		default: () => '',
+	},
+});
+
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['get-icon']);
+
+// 当前 icon 图标点击时
+const onColClick = (v: unknown | string) => {
+	emit('get-icon', v);
+};
+</script>
+
+<style scoped lang="scss">
+.icon-selector-warp-row {
+	height: 230px;
+	overflow: hidden;
+	.el-row {
+		padding: 15px;
+	}
+	.el-scrollbar__bar.is-horizontal {
+		display: none;
+	}
+	.icon-selector-warp-item {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		border: 1px solid var(--el-border-color);
+		border-radius: 5px;
+		margin-bottom: 10px;
+		height: 30px;
+		i {
+			font-size: 20px;
+			color: var(--el-text-color-regular);
+		}
+		&:hover {
+			cursor: pointer;
+			background-color: var(--el-color-primary-light-9);
+			border: 1px solid var(--el-color-primary-light-5);
+			i {
+				color: var(--el-color-primary);
+			}
+		}
+	}
+	.icon-selector-active {
+		background-color: var(--el-color-primary-light-9);
+		border: 1px solid var(--el-color-primary-light-5);
+		i {
+			color: var(--el-color-primary);
+		}
+	}
+}
+</style>

+ 146 - 0
src/components/importExcel/index.vue

@@ -0,0 +1,146 @@
+<template>
+  <div style="display: inline-block">
+    <el-button size="default" type="success" @click="handleImport()">
+      <slot>导入</slot>
+    </el-button>
+    <el-dialog :title="props.upload.title" v-model="uploadShow" width="400px" append-to-body>
+      <div v-loading="loading">
+        <el-upload
+            ref="uploadRef"
+            :limit="1"
+            accept=".xlsx, .xls"
+            :headers="props.upload.headers"
+            :action="props.upload.url"
+            :disabled="isUploading"
+            :on-progress="handleFileUploadProgress"
+            :on-success="handleFileSuccess"
+            :auto-upload="false"
+            drag
+        >
+          <i class="el-icon-upload"/>
+          <div class="el-upload__text">
+            将文件拖到此处,或
+            <em>点击上传</em>
+          </div>
+          <template #tip>
+          <div  class="el-upload__tip" style="color:red">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+          </template>
+        </el-upload>
+        <div>
+          <el-button type="warning" style="font-size:14px;margin-top: 20px" @click="importTemplate">下载导入模板</el-button>
+          <el-button type="warning" style="font-size:14px;margin-top: 20px" @click="updateTemplate">批量更新模板</el-button>
+        </div>
+      </div>
+      <template #footer>
+      <div  class="dialog-footer">
+        <el-button type="primary" :disabled="loading" @click="submitFileForm">确 定</el-button>
+        <el-button :disabled="loading" @click="uploadShow = false">取 消</el-button>
+      </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts" setup name="importExcel">
+import { request, downloadFile } from '/@/utils/service';
+import {inject,ref} from "vue";
+import { getBaseURL } from '/@/utils/baseUrl';
+import { Session } from '/@/utils/storage';
+import {  ElMessageBox } from 'element-plus'
+import type { Action } from 'element-plus'
+const refreshView = inject('refreshView')
+
+let props = defineProps({
+  upload: {
+    type: Object,
+    default () {
+      return {
+        // 是否显示弹出层
+        open: true,
+        // 弹出层标题
+        title: '',
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: 'JWT ' + Session.get('token') },
+        // 上传的地址
+        url: getBaseURL() + 'api/system/file/'
+      }
+    }
+  },
+  api: { // 导入接口地址
+    type: String,
+    default () {
+      return undefined
+    }
+  }
+})
+
+let loading = ref(false)
+const uploadRef = ref()
+const uploadShow = ref(false)
+const isUploading = ref(false)
+/** 导入按钮操作 */
+const handleImport = function () {
+  uploadShow.value = true
+}
+
+/** 下载模板操作 */
+const importTemplate=function () {
+  downloadFile({
+    url: props.api + 'import_data/',
+    params: {},
+    method: 'get'
+  })
+}
+/***
+ * 批量更新模板
+ */
+const updateTemplate=function () {
+  downloadFile({
+    url: props.api + 'update_template/',
+    params: {},
+    method: 'get'
+  })
+}
+// 文件上传中处理
+const handleFileUploadProgress=function (event:any, file:any, fileList:any) {
+  isUploading.value = true
+}
+// 文件上传成功处理
+const handleFileSuccess=function (response:any, file:any, fileList:any) {
+  isUploading.value = false
+  loading.value = true
+  uploadRef.value.clearFiles()
+  // 是否更新已经存在的用户数据
+  return request({
+    url: props.api + 'import_data/',
+    method: 'post',
+    data: {
+      url: response.data.url
+    }
+  }).then((response:any) => {
+    loading.value = false
+    ElMessageBox.alert('导入成功', '导入完成', {
+      confirmButtonText: 'OK',
+      callback: (action: Action) => {
+        refreshView()
+      },
+    })
+  }).catch(()=>{
+    loading.value = false
+  })
+
+}
+// 提交上传文件
+const submitFileForm=function () {
+  uploadRef.value.submit()
+}
+
+</script>
+
+<style scoped>
+
+</style>

+ 46 - 0
src/components/manyToMany/index.vue

@@ -0,0 +1,46 @@
+<template>
+  <!--   你的自定义受控组件-->
+  <div>
+    <el-tag class="many-to-many-tag" :type="randomType" v-for="(item,index) in data" :key="index">{{item}}</el-tag>
+  </div>
+</template>
+<script lang="ts" setup>
+import {watch, ref} from "vue";
+
+const props = defineProps({
+  modelValue: Array,
+  bindValue: Array,
+  displayLabel: {
+    type:String,
+    default: ""
+  }
+})
+
+// template上使用data
+const data = ref()
+watch(() => {
+      return props.bindValue
+    }, // 监听modelValue的变化,
+    (value) => {
+      const {displayLabel} = props
+      const result = value ? value.map((item: any) => {
+        return item[displayLabel]
+      }) : null
+      data.value = result
+    }, // 当modelValue值触发后,同步修改data.value的值
+    {immediate: true} // 立即触发一次,给data赋值初始值
+)
+
+const tagType = ['success', 'info', 'warning', 'danger']
+const randomType = (): string => {
+  return tagType[Math.floor(Math.random() * tagType.length)];
+}
+</script>
+<style scoped>
+.many-to-many-tag{
+  margin-right: 5px;
+}
+.many-to-many-tag:last-child {
+  margin-right: 0;
+}
+</style>

+ 191 - 0
src/components/noticeBar/index.vue

@@ -0,0 +1,191 @@
+<template>
+	<div class="notice-bar" :style="{ background, height: `${height}px` }" v-show="!state.isMode">
+		<div class="notice-bar-warp" :style="{ color, fontSize: `${size}px` }">
+			<i v-if="leftIcon" class="notice-bar-warp-left-icon" :class="leftIcon"></i>
+			<div class="notice-bar-warp-text-box" ref="noticeBarWarpRef">
+				<div class="notice-bar-warp-text" ref="noticeBarTextRef" v-if="!scrollable">{{ text }}</div>
+				<div class="notice-bar-warp-slot" v-else><slot /></div>
+			</div>
+			<SvgIcon :name="rightIcon" v-if="rightIcon" class="notice-bar-warp-right-icon" @click="onRightIconClick" />
+		</div>
+	</div>
+</template>
+
+<script setup lang="ts" name="noticeBar">
+import { reactive, ref, onMounted, nextTick } from 'vue';
+
+// 定义父组件传过来的值
+const props = defineProps({
+	// 通知栏模式,可选值为 closeable link
+	mode: {
+		type: String,
+		default: () => '',
+	},
+	// 通知文本内容
+	text: {
+		type: String,
+		default: () => '',
+	},
+	// 通知文本颜色
+	color: {
+		type: String,
+		default: () => 'var(--el-color-warning)',
+	},
+	// 通知背景色
+	background: {
+		type: String,
+		default: () => 'var(--el-color-warning-light-9)',
+	},
+	// 字体大小,单位px
+	size: {
+		type: [Number, String],
+		default: () => 14,
+	},
+	// 通知栏高度,单位px
+	height: {
+		type: Number,
+		default: () => 40,
+	},
+	// 动画延迟时间 (s)
+	delay: {
+		type: Number,
+		default: () => 1,
+	},
+	// 滚动速率 (px/s)
+	speed: {
+		type: Number,
+		default: () => 100,
+	},
+	// 是否开启垂直滚动
+	scrollable: {
+		type: Boolean,
+		default: () => false,
+	},
+	// 自定义左侧图标
+	leftIcon: {
+		type: String,
+		default: () => '',
+	},
+	// 自定义右侧图标
+	rightIcon: {
+		type: String,
+		default: () => '',
+	},
+});
+
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['close', 'link']);
+
+// 定义变量内容
+const noticeBarWarpRef = ref();
+const noticeBarTextRef = ref();
+const state = reactive({
+	order: 1,
+	oneTime: 0,
+	twoTime: 0,
+	warpOWidth: 0,
+	textOWidth: 0,
+	isMode: false,
+});
+
+// 初始化 animation 各项参数
+const initAnimation = () => {
+	nextTick(() => {
+		state.warpOWidth = noticeBarWarpRef.value.offsetWidth;
+		state.textOWidth = noticeBarTextRef.value.offsetWidth;
+		document.styleSheets[0].insertRule(`@keyframes oneAnimation {0% {left: 0px;} 100% {left: -${state.textOWidth}px;}}`);
+		document.styleSheets[0].insertRule(`@keyframes twoAnimation {0% {left: ${state.warpOWidth}px;} 100% {left: -${state.textOWidth}px;}}`);
+		computeAnimationTime();
+		setTimeout(() => {
+			changeAnimation();
+		}, props.delay * 1000);
+	});
+};
+// 计算 animation 滚动时长
+const computeAnimationTime = () => {
+	state.oneTime = state.textOWidth / props.speed;
+	state.twoTime = (state.textOWidth + state.warpOWidth) / props.speed;
+};
+// 改变 animation 动画调用
+const changeAnimation = () => {
+	if (state.order === 1) {
+		noticeBarTextRef.value.style.cssText = `animation: oneAnimation ${state.oneTime}s linear; opactity: 1;}`;
+		state.order = 2;
+	} else {
+		noticeBarTextRef.value.style.cssText = `animation: twoAnimation ${state.twoTime}s linear infinite; opacity: 1;`;
+	}
+};
+// 监听 animation 动画的结束
+const listenerAnimationend = () => {
+	noticeBarTextRef.value.addEventListener(
+		'animationend',
+		() => {
+			changeAnimation();
+		},
+		false
+	);
+};
+// 右侧 icon 图标点击
+const onRightIconClick = () => {
+	if (!props.mode) return false;
+	if (props.mode === 'closeable') {
+		state.isMode = true;
+		emit('close');
+	} else if (props.mode === 'link') {
+		emit('link');
+	}
+};
+// 页面加载时
+onMounted(() => {
+	if (props.scrollable) return false;
+	initAnimation();
+	listenerAnimationend();
+});
+</script>
+
+<style scoped lang="scss">
+.notice-bar {
+	padding: 0 15px;
+	width: 100%;
+	border-radius: 4px;
+	.notice-bar-warp {
+		display: flex;
+		align-items: center;
+		width: 100%;
+		height: inherit;
+		.notice-bar-warp-text-box {
+			flex: 1;
+			height: inherit;
+			display: flex;
+			align-items: center;
+			overflow: hidden;
+			position: relative;
+			.notice-bar-warp-text {
+				white-space: nowrap;
+				position: absolute;
+				left: 0;
+			}
+			.notice-bar-warp-slot {
+				width: 100%;
+				white-space: nowrap;
+				:deep(.el-carousel__item) {
+					display: flex;
+					align-items: center;
+				}
+			}
+		}
+		.notice-bar-warp-left-icon {
+			width: 24px;
+			font-size: inherit !important;
+		}
+		.notice-bar-warp-right-icon {
+			width: 24px;
+			text-align: right;
+			font-size: inherit !important;
+			&:hover {
+				cursor: pointer;
+			}
+		}
+	}
+}
+</style>

+ 63 - 0
src/components/svgIcon/index.vue

@@ -0,0 +1,63 @@
+<template>
+	<i v-if="isShowIconSvg" class="el-icon" :style="setIconSvgStyle">
+		<component :is="getIconName" />
+	</i>
+	<div v-else-if="isShowIconImg" :style="setIconImgOutStyle">
+		<img :src="getIconName" :style="setIconSvgInsStyle" />
+	</div>
+	<i v-else :class="getIconName" :style="setIconSvgStyle" />
+</template>
+
+<script setup lang="ts" name="svgIcon">
+import { computed } from 'vue';
+
+// 定义父组件传过来的值
+const props = defineProps({
+	// svg 图标组件名字
+	name: {
+		type: String,
+	},
+	// svg 大小
+	size: {
+		type: Number,
+		default: () => 14,
+	},
+	// svg 颜色
+	color: {
+		type: String,
+	},
+});
+
+// 在线链接、本地引入地址前缀
+// https://gitee.com/lyt-top/vue-next-admin/issues/I62OVL
+const linesString = ['https', 'http', '/src', '/assets', 'data:image', import.meta.env.VITE_PUBLIC_PATH];
+
+// 获取 icon 图标名称
+const getIconName = computed(() => {
+	return props?.name;
+});
+// 用于判断 element plus 自带 svg 图标的显示、隐藏
+const isShowIconSvg = computed(() => {
+	return props?.name?.startsWith('ele-');
+});
+// 用于判断在线链接、本地引入等图标显示、隐藏
+const isShowIconImg = computed(() => {
+	return linesString.find((str) => props.name?.startsWith(str));
+});
+// 设置图标样式
+const setIconSvgStyle = computed(() => {
+	return `font-size: ${props.size}px;color: ${props.color};`;
+});
+// 设置图片样式
+const setIconImgOutStyle = computed(() => {
+	return `width: ${props.size}px;height: ${props.size}px;display: inline-block;overflow: hidden;`;
+});
+// 设置图片样式
+// https://gitee.com/lyt-top/vue-next-admin/issues/I59ND0
+const setIconSvgInsStyle = computed(() => {
+	const filterStyle: string[] = [];
+	const compatibles: string[] = ['-webkit', '-ms', '-o', '-moz'];
+	compatibles.forEach((j) => filterStyle.push(`${j}-filter: drop-shadow(${props.color} 30px 0);`));
+	return `width: ${props.size}px;height: ${props.size}px;position: relative;left: -${props.size}px;${filterStyle.join('')}`;
+});
+</script>

+ 256 - 0
src/components/table/index.vue

@@ -0,0 +1,256 @@
+<template>
+	<div class="table-container">
+		<el-table
+			:data="data"
+			:border="setBorder"
+			v-bind="$attrs"
+			row-key="id"
+			stripe
+			style="width: 100%"
+			v-loading="config.loading"
+			@selection-change="onSelectionChange"
+		>
+			<el-table-column type="selection" :reserve-selection="true" width="30" v-if="config.isSelection" />
+			<el-table-column type="index" label="序号" width="60" v-if="config.isSerialNo" />
+			<el-table-column
+				v-for="(item, index) in setHeader"
+				:key="index"
+				show-overflow-tooltip
+				:prop="item.key"
+				:width="item.colWidth"
+				:label="item.title"
+			>
+				<template v-slot="scope">
+					<template v-if="item.type === 'image'">
+						<img :src="scope.row[item.key]" :width="item.width" :height="item.height" />
+					</template>
+					<template v-else>
+						{{ scope.row[item.key] }}
+					</template>
+				</template>
+			</el-table-column>
+			<el-table-column label="操作" width="100" v-if="config.isOperate">
+				<template v-slot="scope">
+					<el-popconfirm title="确定删除吗?" @confirm="onDelRow(scope.row)">
+						<template #reference>
+							<el-button text type="primary">删除</el-button>
+						</template>
+					</el-popconfirm>
+				</template>
+			</el-table-column>
+			<template #empty>
+				<el-empty description="暂无数据" />
+			</template>
+		</el-table>
+		<div class="table-footer mt15">
+			<el-pagination
+				v-model:current-page="state.page.pageNum"
+				v-model:page-size="state.page.pageSize"
+				:pager-count="5"
+				:page-sizes="[10, 20, 30]"
+				:total="config.total"
+				layout="total, sizes, prev, pager, next, jumper"
+				background
+				@size-change="onHandleSizeChange"
+				@current-change="onHandleCurrentChange"
+			>
+			</el-pagination>
+			<div class="table-footer-tool">
+				<SvgIcon name="iconfont icon-yunxiazai_o" :size="22" title="导出" @click="onImportTable" />
+				<SvgIcon name="iconfont icon-shuaxin" :size="22" title="刷新" @click="onRefreshTable" />
+				<el-popover
+					placement="top-end"
+					trigger="click"
+					transition="el-zoom-in-top"
+					popper-class="table-tool-popper"
+					:width="300"
+					:persistent="false"
+					@show="onSetTable"
+				>
+					<template #reference>
+						<SvgIcon name="iconfont icon-quanjushezhi_o" :size="22" title="设置" />
+					</template>
+					<template #default>
+						<div class="tool-box">
+							<el-tooltip content="拖动进行排序" placement="top-start">
+								<SvgIcon name="fa fa-question-circle-o" :size="17" class="ml11" color="#909399" />
+							</el-tooltip>
+							<el-checkbox
+								v-model="state.checkListAll"
+								:indeterminate="state.checkListIndeterminate"
+								class="ml10 mr1"
+								label="列显示"
+								@change="onCheckAllChange"
+							/>
+							<el-checkbox v-model="getConfig.isSerialNo" class="ml12 mr1" label="序号" />
+							<el-checkbox v-model="getConfig.isSelection" class="ml12 mr1" label="多选" />
+						</div>
+						<el-scrollbar>
+							<div ref="toolSetRef" class="tool-sortable">
+								<div class="tool-sortable-item" v-for="v in header" :key="v.key" :data-key="v.key">
+									<i class="fa fa-arrows-alt handle cursor-pointer"></i>
+									<el-checkbox v-model="v.isCheck" size="default" class="ml12 mr8" :label="v.title" @change="onCheckChange" />
+								</div>
+							</div>
+						</el-scrollbar>
+					</template>
+				</el-popover>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script setup lang="ts" name="netxTable">
+import { reactive, computed, nextTick, ref } from 'vue';
+import { ElMessage } from 'element-plus';
+import table2excel from 'js-table2excel';
+import Sortable from 'sortablejs';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import '/@/theme/tableTool.scss';
+
+// 定义父组件传过来的值
+const props = defineProps({
+	// 列表内容
+	data: {
+		type: Array<EmptyObjectType>,
+		default: () => [],
+	},
+	// 表头内容
+	header: {
+		type: Array<EmptyObjectType>,
+		default: () => [],
+	},
+	// 配置项
+	config: {
+		type: Object,
+		default: () => {},
+	},
+});
+
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['delRow', 'pageChange', 'sortHeader']);
+
+// 定义变量内容
+const toolSetRef = ref();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const state = reactive({
+	page: {
+		pageNum: 1,
+		pageSize: 10,
+	},
+	selectlist: [] as EmptyObjectType[],
+	checkListAll: true,
+	checkListIndeterminate: false,
+});
+
+// 设置边框显示/隐藏
+const setBorder = computed(() => {
+	return props.config.isBorder ? true : false;
+});
+// 获取父组件 配置项(必传)
+const getConfig = computed(() => {
+	return props.config;
+});
+// 设置 tool header 数据
+const setHeader = computed(() => {
+	return props.header.filter((v) => v.isCheck);
+});
+// tool 列显示全选改变时
+const onCheckAllChange = <T>(val: T) => {
+	if (val) props.header.forEach((v) => (v.isCheck = true));
+	else props.header.forEach((v) => (v.isCheck = false));
+	state.checkListIndeterminate = false;
+};
+// tool 列显示当前项改变时
+const onCheckChange = () => {
+	const headers = props.header.filter((v) => v.isCheck).length;
+	state.checkListAll = headers === props.header.length;
+	state.checkListIndeterminate = headers > 0 && headers < props.header.length;
+};
+// 表格多选改变时,用于导出
+const onSelectionChange = (val: EmptyObjectType[]) => {
+	state.selectlist = val;
+};
+// 删除当前项
+const onDelRow = (row: EmptyObjectType) => {
+	emit('delRow', row);
+};
+// 分页改变
+const onHandleSizeChange = (val: number) => {
+	state.page.pageSize = val;
+	emit('pageChange', state.page);
+};
+// 分页改变
+const onHandleCurrentChange = (val: number) => {
+	state.page.pageNum = val;
+	emit('pageChange', state.page);
+};
+// 搜索时,分页还原成默认
+const pageReset = () => {
+	state.page.pageNum = 1;
+	state.page.pageSize = 10;
+	emit('pageChange', state.page);
+};
+// 导出
+const onImportTable = () => {
+	if (state.selectlist.length <= 0) return ElMessage.warning('请先选择要导出的数据');
+	table2excel(props.header, state.selectlist, `${themeConfig.value.globalTitle} ${new Date().toLocaleString()}`);
+};
+// 刷新
+const onRefreshTable = () => {
+	emit('pageChange', state.page);
+};
+// 设置
+const onSetTable = () => {
+	nextTick(() => {
+		const sortable = Sortable.create(toolSetRef.value, {
+			handle: '.handle',
+			dataIdAttr: 'data-key',
+			animation: 150,
+			onEnd: () => {
+				const headerList: EmptyObjectType[] = [];
+				sortable.toArray().forEach((val) => {
+					props.header.forEach((v) => {
+						if (v.key === val) headerList.push({ ...v });
+					});
+				});
+				emit('sortHeader', headerList);
+			},
+		});
+	});
+};
+
+// 暴露变量
+defineExpose({
+	pageReset,
+});
+</script>
+
+<style scoped lang="scss">
+.table-container {
+	display: flex;
+	flex-direction: column;
+	.el-table {
+		flex: 1;
+	}
+	.table-footer {
+		display: flex;
+		.table-footer-tool {
+			flex: 1;
+			display: flex;
+			align-items: center;
+			justify-content: flex-end;
+			i {
+				margin-right: 10px;
+				cursor: pointer;
+				color: var(--el-text-color-regular);
+				&:last-of-type {
+					margin-right: 0;
+				}
+			}
+		}
+	}
+}
+</style>

+ 203 - 0
src/components/tableSelector/index.vue

@@ -0,0 +1,203 @@
+<template>
+  <el-select popper-class="popperClass" class="tableSelector" :multiple="props.tableConfig.isMultiple"
+             @remove-tag="removeTag" v-model="data" placeholder="请选择" @visible-change="visibleChange">
+    <template #empty>
+      <div class="option">
+        <el-input style="margin-bottom: 10px" v-model="search" clearable placeholder="请输入关键词" @change="getDict"
+                  @clear="getDict">
+          <template #append>
+            <el-button type="primary" icon="Search"/>
+          </template>
+        </el-input>
+        <el-table
+            ref="tableRef"
+            :data="tableData"
+            size="mini"
+            border
+            row-key="id"
+            style="width: 400px"
+            max-height="200"
+            height="200"
+            :highlight-current-row="!props.tableConfig.isMultiple"
+            @selection-change="handleSelectionChange"
+            @current-change="handleCurrentChange"
+        >
+          <el-table-column v-if="props.tableConfig.isMultiple" fixed type="selection" width="55"/>
+          <el-table-column fixed type="index" label="#" width="50"/>
+          <el-table-column :prop="item.prop" :label="item.label" :width="item.width"
+                           v-for="(item,index) in props.tableConfig.columns" :key="index"/>
+        </el-table>
+        <el-pagination style="margin-top: 10px" background
+                       v-model:current-page="pageConfig.page"
+                       v-model:page-size="pageConfig.limit"
+                       layout="prev, pager, next"
+                       :total="pageConfig.total"
+                       @current-change="handlePageChange"
+        />
+      </div>
+    </template>
+  </el-select>
+</template>
+
+<script setup lang="ts">
+import {defineProps, onMounted, reactive, ref, toRaw, watch} from 'vue'
+import {dict} from '@fast-crud/fast-crud'
+import XEUtils from 'xe-utils'
+import {request} from '/@/utils/service'
+const props = defineProps({
+  modelValue: {},
+  tableConfig: {
+    url: null,
+    label: null, //显示值
+    value: null, //数据值
+    isTree: false,
+    data: [],//默认数据
+    isMultiple: false, //是否多选
+    columns: [], //每一项对应的列表项
+  },
+  displayLabel: {}
+} as any)
+const emit = defineEmits(['update:modelValue'])
+// tableRef
+const tableRef = ref()
+// template上使用data
+const data = ref()
+// 多选值
+const multipleSelection = ref()
+watch(multipleSelection, // 监听multipleSelection的变化,
+    (value) => {
+      const {tableConfig} = props
+      //是否多选
+      if (!tableConfig.isMultiple) {
+        data.value = value ? value[tableConfig.label] : null
+      } else {
+
+        const result = value ? value.map((item: any) => {
+          return item[tableConfig.label]
+        }) : null
+        data.value = result
+      }
+    }, // 当multipleSelection值触发后,同步修改data.value的值
+    {immediate: true} // 立即触发一次,给data赋值初始值
+)
+
+
+// 搜索值
+const search = ref(undefined)
+//表格数据
+const tableData = ref()
+// 分页的配置
+const pageConfig = reactive({
+  page: 1,
+  limit: 10,
+  total: 0
+})
+
+/**
+ * 表格多选
+ * @param val:Array
+ */
+const handleSelectionChange = (val: any) => {
+  multipleSelection.value = val
+  const {tableConfig} = props
+  const result = val.map((item: any) => {
+    return item[tableConfig.value]
+  })
+  emit('update:modelValue', result)
+}
+
+/**
+ * 表格单选
+ * @param val:Object
+ */
+const handleCurrentChange = (val: any) => {
+  multipleSelection.value = val
+  const {tableConfig} = props
+  emit('update:modelValue', val[tableConfig.value])
+}
+
+/**
+ * 获取字典值
+ */
+const getDict = async () => {
+  const url = props.tableConfig.url
+  const params = {
+    page: pageConfig.page,
+    limit: pageConfig.limit,
+    search: search.value
+  }
+  const {data, page, limit, total} = await request({
+    url:url,
+    params:params
+  })
+  pageConfig.page = page
+  pageConfig.limit = limit
+  pageConfig.total = total
+  if (props.tableConfig.data === undefined || props.tableConfig.data.length === 0) {
+    if (props.tableConfig.isTree) {
+      tableData.value = XEUtils.toArrayTree(data, {parentKey: 'parent', key: 'id', children: 'children'})
+    } else {
+      tableData.value = data
+    }
+  } else {
+    tableData.value = props.tableConfig.data
+  }
+}
+
+/**
+ * 下拉框展开/关闭
+ * @param bool
+ */
+const visibleChange = (bool: any) => {
+  if (bool) {
+    getDict()
+  }
+}
+
+/**
+ * 分页
+ * @param page
+ */
+const handlePageChange = (page: any) => {
+  pageConfig.page = page
+  getDict()
+}
+
+// 监听displayLabel的变化,更新数据
+watch(() => {
+  return props.displayLabel
+}, (value) => {
+  const {tableConfig} = props
+  const result = value ? value.map((item: any) => {
+    return item[tableConfig.label]
+  }) : null
+  data.value = result
+}, {immediate: true})
+
+
+</script>
+
+<style scoped>
+.option {
+  height: auto;
+  line-height: 1;
+  padding: 5px;
+  background-color: #fff;
+}
+
+</style>
+<style lang="scss">
+.popperClass {
+  height: 320px;
+}
+
+.el-select-dropdown__wrap {
+  max-height: 310px !important;
+}
+
+.tableSelector {
+  .el-icon, .el-tag__close {
+    display: none;
+  }
+}
+</style>

+ 39 - 0
src/directive/authDirective.ts

@@ -0,0 +1,39 @@
+import type { App } from 'vue';
+import { judementSameArr } from '/@/utils/arrayOperation';
+import {BtnPermissionStore} from "/@/stores/btnPermission";
+/**
+ * 用户权限指令
+ * @directive 单个权限验证(v-auth="xxx")
+ * @directive 多个权限验证,满足一个则显示(v-auths="[xxx,xxx]")
+ * @directive 多个权限验证,全部满足则显示(v-auth-all="[xxx,xxx]")
+ */
+export function authDirective(app: App) {
+	// 单个权限验证(v-auth="xxx")
+	app.directive('auth', {
+		mounted(el, binding) {
+			const stores = BtnPermissionStore();
+			if (!stores.data.some((v: string) => v === binding.value)) el.parentNode.removeChild(el);
+		},
+	});
+	// 多个权限验证,满足一个则显示(v-auths="[xxx,xxx]")
+	app.directive('auths', {
+		mounted(el, binding) {
+			let flag = false;
+			const stores = BtnPermissionStore();
+			stores.data.map((val: string) => {
+				binding.value.map((v: string) => {
+					if (val === v) flag = true;
+				});
+			});
+			if (!flag) el.parentNode.removeChild(el);
+		},
+	});
+	// 多个权限验证,全部满足则显示(v-auth-all="[xxx,xxx]")
+	app.directive('auth-all', {
+		mounted(el, binding) {
+			const stores = BtnPermissionStore();
+			const flag = judementSameArr(binding.value, stores.data);
+			if (!flag) el.parentNode.removeChild(el);
+		},
+	});
+}

+ 178 - 0
src/directive/customDirective.ts

@@ -0,0 +1,178 @@
+import type { App } from 'vue';
+
+/**
+ * 按钮波浪指令
+ * @directive 默认方式:v-waves,如 `<div v-waves></div>`
+ * @directive 参数方式:v-waves=" |light|red|orange|purple|green|teal",如 `<div v-waves="'light'"></div>`
+ */
+export function wavesDirective(app: App) {
+	app.directive('waves', {
+		mounted(el, binding) {
+			el.classList.add('waves-effect');
+			binding.value && el.classList.add(`waves-${binding.value}`);
+			function setConvertStyle(obj: { [key: string]: unknown }) {
+				let style: string = '';
+				for (let i in obj) {
+					if (obj.hasOwnProperty(i)) style += `${i}:${obj[i]};`;
+				}
+				return style;
+			}
+			function onCurrentClick(e: { [key: string]: unknown }) {
+				let elDiv = document.createElement('div');
+				elDiv.classList.add('waves-ripple');
+				el.appendChild(elDiv);
+				let styles = {
+					left: `${e.layerX}px`,
+					top: `${e.layerY}px`,
+					opacity: 1,
+					transform: `scale(${(el.clientWidth / 100) * 10})`,
+					'transition-duration': `750ms`,
+					'transition-timing-function': `cubic-bezier(0.250, 0.460, 0.450, 0.940)`,
+				};
+				elDiv.setAttribute('style', setConvertStyle(styles));
+				setTimeout(() => {
+					elDiv.setAttribute(
+						'style',
+						setConvertStyle({
+							opacity: 0,
+							transform: styles.transform,
+							left: styles.left,
+							top: styles.top,
+						})
+					);
+					setTimeout(() => {
+						elDiv && el.removeChild(elDiv);
+					}, 750);
+				}, 450);
+			}
+			el.addEventListener('mousedown', onCurrentClick, false);
+		},
+		unmounted(el) {
+			el.addEventListener('mousedown', () => {});
+		},
+	});
+}
+
+/**
+ * 自定义拖动指令
+ * @description  使用方式:v-drag="[dragDom,dragHeader]",如 `<div v-drag="['.drag-container .el-dialog', '.drag-container .el-dialog__header']"></div>`
+ * @description dragDom 要拖动的元素,dragHeader 要拖动的 Header 位置
+ * @link 注意:https://github.com/element-plus/element-plus/issues/522
+ * @lick 参考:https://blog.csdn.net/weixin_46391323/article/details/105228020?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-10&spm=1001.2101.3001.4242
+ */
+export function dragDirective(app: App) {
+	app.directive('drag', {
+		mounted(el, binding) {
+			if (!binding.value) return false;
+
+			const dragDom = document.querySelector(binding.value[0]) as HTMLElement;
+			const dragHeader = document.querySelector(binding.value[1]) as HTMLElement;
+
+			dragHeader.onmouseover = () => (dragHeader.style.cursor = `move`);
+
+			function down(e: any, type: string) {
+				// 鼠标按下,计算当前元素距离可视区的距离
+				const disX = type === 'pc' ? e.clientX - dragHeader.offsetLeft : e.touches[0].clientX - dragHeader.offsetLeft;
+				const disY = type === 'pc' ? e.clientY - dragHeader.offsetTop : e.touches[0].clientY - dragHeader.offsetTop;
+
+				// body当前宽度
+				const screenWidth = document.body.clientWidth;
+				// 可见区域高度(应为body高度,可某些环境下无法获取)
+				const screenHeight = document.documentElement.clientHeight;
+
+				// 对话框宽度
+				const dragDomWidth = dragDom.offsetWidth;
+				// 对话框高度
+				const dragDomheight = dragDom.offsetHeight;
+
+				const minDragDomLeft = dragDom.offsetLeft;
+				const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;
+
+				const minDragDomTop = dragDom.offsetTop;
+				const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;
+
+				// 获取到的值带px 正则匹配替换
+				let styL: any = getComputedStyle(dragDom).left;
+				let styT: any = getComputedStyle(dragDom).top;
+
+				// 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
+				if (styL.includes('%')) {
+					styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100);
+					styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100);
+				} else {
+					styL = +styL.replace(/\px/g, '');
+					styT = +styT.replace(/\px/g, '');
+				}
+
+				return {
+					disX,
+					disY,
+					minDragDomLeft,
+					maxDragDomLeft,
+					minDragDomTop,
+					maxDragDomTop,
+					styL,
+					styT,
+				};
+			}
+
+			function move(e: any, type: string, obj: any) {
+				let { disX, disY, minDragDomLeft, maxDragDomLeft, minDragDomTop, maxDragDomTop, styL, styT } = obj;
+
+				// 通过事件委托,计算移动的距离
+				let left = type === 'pc' ? e.clientX - disX : e.touches[0].clientX - disX;
+				let top = type === 'pc' ? e.clientY - disY : e.touches[0].clientY - disY;
+
+				// 边界处理
+				if (-left > minDragDomLeft) {
+					left = -minDragDomLeft;
+				} else if (left > maxDragDomLeft) {
+					left = maxDragDomLeft;
+				}
+
+				if (-top > minDragDomTop) {
+					top = -minDragDomTop;
+				} else if (top > maxDragDomTop) {
+					top = maxDragDomTop;
+				}
+
+				// 移动当前元素
+				dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`;
+			}
+
+			/**
+			 * pc端
+			 * onmousedown 鼠标按下触发事件
+			 * onmousemove 鼠标按下时持续触发事件
+			 * onmouseup 鼠标抬起触发事件
+			 */
+			dragHeader.onmousedown = (e) => {
+				const obj = down(e, 'pc');
+				document.onmousemove = (e) => {
+					move(e, 'pc', obj);
+				};
+				document.onmouseup = () => {
+					document.onmousemove = null;
+					document.onmouseup = null;
+				};
+			};
+
+			/**
+			 * 移动端
+			 * ontouchstart 当按下手指时,触发ontouchstart
+			 * ontouchmove 当移动手指时,触发ontouchmove
+			 * ontouchend 当移走手指时,触发ontouchend
+			 */
+			dragHeader.ontouchstart = (e) => {
+				const obj = down(e, 'app');
+				document.ontouchmove = (e) => {
+					move(e, 'app', obj);
+				};
+				document.ontouchend = () => {
+					document.ontouchmove = null;
+					document.ontouchend = null;
+				};
+			};
+		},
+	});
+}

+ 20 - 0
src/directive/index.ts

@@ -0,0 +1,20 @@
+import type { App } from 'vue';
+import { authDirective } from '/@/directive/authDirective';
+import { wavesDirective, dragDirective } from '/@/directive/customDirective';
+import {resizeObDirective} from '/@/directive/sizeDirective'
+/**
+ * 导出指令方法:v-xxx
+ * @methods authDirective 用户权限指令,用法:v-auth
+ * @methods wavesDirective 按钮波浪指令,用法:v-waves
+ * @methods dragDirective 自定义拖动指令,用法:v-drag
+ */
+export function directive(app: App) {
+	// 用户权限指令
+	authDirective(app);
+	// 按钮波浪指令
+	wavesDirective(app);
+	// 自定义拖动指令
+	dragDirective(app);
+	//  监听窗口大小变化
+	resizeObDirective(app)
+}

+ 23 - 0
src/directive/sizeDirective.ts

@@ -0,0 +1,23 @@
+import {App} from "vue/dist/vue";
+
+const map = new WeakMap()
+const ob = new ResizeObserver((entries) => {
+    for(const  entry of entries){
+        const handler = map.get(entry.target);
+        handler && handler({
+            width: entry.borderBoxSize[0].inlineSize,
+            height: entry.borderBoxSize[0].blockSize
+        });
+    }
+});
+export function resizeObDirective(app: App){
+    app.directive('resizeOb', {
+        mounted(el,binding) {
+            map.set(el,binding.value);
+            ob.observe(el); // 监听目标元素
+        },
+        unmounted(el) {
+            ob.unobserve(el); // 停止监听
+        },
+    })
+}

+ 68 - 0
src/i18n/index.ts

@@ -0,0 +1,68 @@
+import { createI18n } from 'vue-i18n';
+import pinia from '/@/stores/index';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+
+// 定义语言国际化内容
+
+/**
+ * 说明:
+ * 须在 pages 下新建文件夹(建议 `要国际化界面目录` 与 `i18n 目录` 相同,方便查找),
+ * 注意国际化定义的字段,不要与原有的定义字段相同。
+ * 1、/src/i18n/lang 下的 ts 为框架的国际化内容
+ * 2、/src/i18n/pages 下的 ts 为各界面的国际化内容
+ */
+
+// element plus 自带国际化
+import enLocale from 'element-plus/es/locale/lang/en';
+import zhcnLocale from 'element-plus/es/locale/lang/zh-cn';
+import zhtwLocale from 'element-plus/es/locale/lang/zh-tw';
+
+// 定义变量内容
+const messages = {};
+const element = { en: enLocale, 'zh-cn': zhcnLocale, 'zh-tw': zhtwLocale };
+const itemize = { en: [], 'zh-cn': [], 'zh-tw': [] };
+const modules: Record<string, any> = import.meta.glob('./**/*.ts', { eager: true });
+
+// 对自动引入的 modules 进行分类 en、zh-cn、zh-tw
+// https://vitejs.cn/vite3-cn/guide/features.html#glob-import
+for (const path in modules) {
+	const key = path.match(/(\S+)\/(\S+).ts/);
+	if (itemize[key![2]]) itemize[key![2]].push(modules[path].default);
+	else itemize[key![2]] = modules[path];
+}
+
+// 合并数组对象(非标准数组对象,数组中对象的每项 key、value 都不同)
+function mergeArrObj<T>(list: T, key: string) {
+	let obj = {};
+	list[key].forEach((i: EmptyObjectType) => {
+		obj = Object.assign({}, obj, i);
+	});
+	return obj;
+}
+
+// 处理最终格式
+for (const key in itemize) {
+	messages[key] = {
+		name: key,
+		el: element[key].el,
+		message: mergeArrObj(itemize, key),
+	};
+}
+
+// 读取 pinia 默认语言
+const stores = useThemeConfig(pinia);
+const { themeConfig } = storeToRefs(stores);
+
+// 导出语言国际化
+// https://vue-i18n.intlify.dev/guide/essentials/fallback.html#explicit-fallback-with-one-locale
+export const i18n = createI18n({
+	legacy: false,
+	silentTranslationWarn: true,
+	missingWarn: false,
+	silentFallbackWarn: true,
+	fallbackWarn: false,
+	locale: themeConfig.value.globalI18n,
+	fallbackLocale: zhcnLocale.name,
+	messages,
+});

+ 131 - 0
src/i18n/lang/en.ts

@@ -0,0 +1,131 @@
+// 定义内容
+export default {
+    router: {
+        home: 'home',
+        system: 'system',
+        systemMenu: 'systemMenu',
+        systemRole: 'systemRole',
+        systemUser: 'systemUser',
+        systemDept: 'systemDept',
+        systemDic: 'systemDic',
+        limits: 'limits',
+        limitsFrontEnd: 'FrontEnd',
+        limitsFrontEndPage: 'FrontEndPage',
+        limitsFrontEndBtn: 'FrontEndBtn',
+        limitsBackEnd: 'BackEnd',
+        limitsBackEndEndPage: 'BackEndEndPage',
+        personal: 'personal',
+    },
+    staticRoutes: {
+        signIn: 'signIn',
+        notFound: 'notFound',
+        noPower: 'noPower',
+    },
+    user: {
+        title0: 'Component size',
+        title1: 'Language switching',
+        title2: 'Menu search',
+        title3: 'Layout configuration',
+        title4: 'news',
+        title5: 'Full screen on',
+        title6: 'Full screen off',
+        dropdownLarge: 'large',
+        dropdownDefault: 'default',
+        dropdownSmall: 'small',
+        dropdown1: 'home page',
+        dropdown2: 'Personal Center',
+        dropdown3: '404',
+        dropdown4: '401',
+        dropdown5: 'Log out',
+        dropdown6: 'Code warehouse',
+        searchPlaceholder: 'Menu search: support Chinese, routing path',
+        newTitle: 'notice',
+        newBtn: 'All read',
+        newGo: 'Go to the notification center',
+        newDesc: 'No notice',
+        logOutTitle: 'Tips',
+        logOutMessage: 'This operation will log out. Do you want to continue?',
+        logOutConfirm: 'determine',
+        logOutCancel: 'cancel',
+        logOutExit: 'Exiting',
+    },
+    tagsView: {
+        refresh: 'refresh',
+        close: 'close',
+        closeOther: 'closeOther',
+        closeAll: 'closeAll',
+        fullscreen: 'fullscreen',
+        closeFullscreen: 'closeFullscreen',
+    },
+    notFound: {
+        foundTitle: 'Wrong address input, please re-enter the address~',
+        foundMsg: 'You can check the web address first, and then re-enter or give us feedback.',
+        foundBtn: 'Back to home page',
+    },
+    noAccess: {
+        accessTitle: 'You are not authorized to operate~',
+        accessMsg: 'Contact information: add QQ group discussion 665452019',
+        accessBtn: 'Reauthorization',
+    },
+    layout: {
+        configTitle: 'Layout configuration',
+        oneTitle: 'Global Themes',
+        twoTopTitle: 'top bar set up',
+        twoMenuTitle: 'Menu set up',
+        twoColumnsTitle: 'Columns set up',
+        twoTopBar: 'Top bar background',
+        twoTopBarColor: 'Top bar default font color',
+        twoIsTopBarColorGradual: 'Top bar gradient',
+        twoMenuBar: 'Menu background',
+        twoMenuBarColor: 'Menu default font color',
+        twoIsMenuBarColorGradual: 'Menu gradient',
+        twoColumnsMenuBar: 'Column menu background',
+        twoColumnsMenuBarColor: 'Default font color bar menu',
+        twoIsColumnsMenuBarColorGradual: 'Column gradient',
+        threeTitle: 'Interface settings',
+        threeIsCollapse: 'Menu horizontal collapse',
+        threeIsUniqueOpened: 'Menu accordion',
+        threeIsFixedHeader: 'Fixed header',
+        threeIsClassicSplitMenu: 'Classic layout split menu',
+        threeIsLockScreen: 'Open the lock screen',
+        threeLockScreenTime: 'screen locking(s/s)',
+        fourTitle: 'Interface display',
+        fourIsShowLogo: 'Sidebar logo',
+        fourIsBreadcrumb: 'Open breadcrumb',
+        fourIsBreadcrumbIcon: 'Open breadcrumb icon',
+        fourIsTagsview: 'Open tagsview',
+        fourIsTagsviewIcon: 'Open tagsview Icon',
+        fourIsCacheTagsView: 'Enable tagsview cache',
+        fourIsSortableTagsView: 'Enable tagsview drag',
+        fourIsShareTagsView: 'Enable tagsview sharing',
+        fourIsFooter: 'Open footer',
+        fourIsGrayscale: 'Grey model',
+        fourIsInvert: 'Color weak mode',
+        fourIsDark: 'Dark Mode',
+        fourIsWartermark: 'Turn on watermark',
+        fourWartermarkText: 'Watermark copy',
+        fiveTitle: 'Other settings',
+        fiveTagsStyle: 'Tagsview style',
+        fiveAnimation: 'page animation',
+        fiveColumnsAsideStyle: 'Column style',
+        fiveColumnsAsideLayout: 'Column layout',
+        sixTitle: 'Layout switch',
+        sixDefaults: 'One',
+        sixClassic: 'Two',
+        sixTransverse: 'Three',
+        sixColumns: 'Four',
+        tipText: 'Click the button below to copy the layout configuration to `/src/stores/themeConfig.ts` It has been modified in.',
+        copyText: 'replication configuration',
+        resetText: 'restore default',
+        copyTextSuccess: 'Copy succeeded!',
+        copyTextError: 'Copy failed!',
+    },
+    upgrade: {
+        title: 'New version upgrade',
+        msg: 'It\'s a new version. Update it now!Don\'t worry, update quickly oh!',
+        desc: 'Tip: The update restores the default configuration',
+        btnOne: 'Cruel refusal',
+        btnTwo: 'Update now',
+        btnTwoLoading: 'updating',
+    },
+};

+ 146 - 0
src/i18n/lang/zh-cn.ts

@@ -0,0 +1,146 @@
+// 定义内容
+export default {
+    router: {
+        home: '首页',
+        system: '系统管理',
+        config: '常规配置',
+        log: '日志管理',
+        /* 常规配置 */
+        configSystem: '系统配置',
+        configDict: '字典管理',
+        configArea: '地区管理',
+        configFile: '附件管理',
+        /* 系统管理 */
+        systemMenu: '菜单管理',
+        systemRole: '角色管理',
+        systemUser: '用户管理',
+        systemDept: '部门管理',
+        /* 日志管理 */
+        loginLog: '登录日志',
+        operationLog: '操作日志',
+        systemApiWhiteList: '接口白名单',
+        limits: '权限管理',
+        limitsFrontEnd: '前端控制',
+        limitsFrontEndPage: '页面权限',
+        limitsFrontEndBtn: '按钮权限',
+        limitsBackEnd: '后端控制',
+        limitsBackEndEndPage: '页面权限',
+        personal: '个人中心',
+    },
+    staticRoutes: {
+        signIn: '登录',
+        notFound: '找不到此页面',
+        noPower: '没有权限',
+    },
+    user: {
+        title0: '组件大小',
+        title1: '语言切换',
+        title2: '菜单搜索',
+        title3: '布局配置',
+        title4: '消息',
+        title5: '开全屏',
+        title6: '关全屏',
+        retry: '重试上线',
+        onlinePrompt: '当前离线状态,是否重试上线?',
+        dropdownLarge: '大型',
+        dropdownDefault: '默认',
+        dropdownSmall: '小型',
+        dropdown1: '首页',
+        dropdown2: '个人中心',
+        dropdown3: '404',
+        dropdown4: '401',
+        dropdown5: '退出登录',
+        dropdown6: '代码仓库',
+        searchPlaceholder: '菜单搜索:支持中文、路由路径',
+        newTitle: '通知',
+        newBtn: '全部已读',
+        newGo: '前往通知中心',
+        newDesc: '暂无通知',
+        logOutTitle: '提示',
+        logOutMessage: '此操作将退出登录, 是否继续?',
+        logOutConfirm: '确定',
+        logOutCancel: '取消',
+        logOutExit: '退出中',
+    },
+    tagsView: {
+        refresh: '刷新',
+        close: '关闭',
+        closeOther: '关闭其它',
+        closeAll: '全部关闭',
+        fullscreen: '当前页全屏',
+        closeFullscreen: '关闭全屏',
+    },
+    notFound: {
+        foundTitle: '地址输入错误,请重新输入地址~',
+        foundMsg: '您可以先检查网址,然后重新输入或给我们反馈问题。',
+        foundBtn: '返回首页',
+    },
+    noAccess: {
+        accessTitle: '您未被授权,没有操作权限~',
+        accessMsg: '请联系管理员',
+        accessBtn: '重新授权',
+    },
+    layout: {
+        configTitle: '布局配置',
+        oneTitle: '全局主题',
+        twoTopTitle: '顶栏设置',
+        twoMenuTitle: '菜单设置',
+        twoColumnsTitle: '分栏设置',
+        twoTopBar: '顶栏背景',
+        twoTopBarColor: '顶栏默认字体颜色',
+        twoIsTopBarColorGradual: '顶栏背景渐变',
+        twoMenuBar: '菜单背景',
+        twoMenuBarColor: '菜单默认字体颜色',
+        twoMenuBarActiveColor: '菜单高亮背景色',
+        twoIsMenuBarColorGradual: '菜单背景渐变',
+        twoColumnsMenuBar: '分栏菜单背景',
+        twoColumnsMenuBarColor: '分栏菜单默认字体颜色',
+        twoIsColumnsMenuBarColorGradual: '分栏菜单背景渐变',
+        twoIsColumnsMenuHoverPreload: '分栏菜单滑鼠悬停预加载',
+        threeTitle: '界面设置',
+        threeIsCollapse: '菜单水平折叠',
+        threeIsUniqueOpened: '菜单手风琴',
+        threeIsFixedHeader: '固定 Header',
+        threeIsClassicSplitMenu: '经典布局分割菜单',
+        threeIsLockScreen: '开启锁屏',
+        threeLockScreenTime: '自动锁屏(s/秒)',
+        fourTitle: '界面显示',
+        fourIsShowLogo: '侧边栏 Logo',
+        fourIsBreadcrumb: '开启 Breadcrumb',
+        fourIsBreadcrumbIcon: '开启 Breadcrumb 图标',
+        fourIsTagsview: '开启 Tagsview',
+        fourIsTagsviewIcon: '开启 Tagsview 图标',
+        fourIsCacheTagsView: '开启 TagsView 缓存',
+        fourIsSortableTagsView: '开启 TagsView 拖拽',
+        fourIsShareTagsView: '开启 TagsView 共用',
+        fourIsFooter: '开启 Footer',
+        fourIsGrayscale: '灰色模式',
+        fourIsInvert: '色弱模式',
+        fourIsDark: '深色模式',
+        fourIsWartermark: '开启水印',
+        fourWartermarkText: '水印文案',
+        fiveTitle: '其它设置',
+        fiveTagsStyle: 'Tagsview 风格',
+        fiveAnimation: '主页面切换动画',
+        fiveColumnsAsideStyle: '分栏高亮风格',
+        fiveColumnsAsideLayout: '分栏布局风格',
+        sixTitle: '布局切换',
+        sixDefaults: '默认',
+        sixClassic: '经典',
+        sixTransverse: '横向',
+        sixColumns: '分栏',
+        tipText: '点击下方按钮,复制布局配置去 `src/stores/themeConfig.ts` 中修改。',
+        copyText: '一键复制配置',
+        resetText: '一键恢复默认',
+        copyTextSuccess: '复制成功!',
+        copyTextError: '复制失败!',
+    },
+    upgrade: {
+        title: '新版本升级',
+        msg: '新版本来啦,马上更新尝鲜吧!不用担心,更新很快的哦!',
+        desc: '提示:更新会还原默认配寘',
+        btnOne: '残忍拒绝',
+        btnTwo: '马上更新',
+        btnTwoLoading: '更新中',
+    },
+};

+ 192 - 0
src/i18n/lang/zh-tw.ts

@@ -0,0 +1,192 @@
+// 定义内容
+export default {
+	router: {
+		home: '首頁',
+		system: '系統設置',
+		systemMenu: '選單管理',
+		systemRole: '角色管理',
+		systemUser: '用戶管理',
+		systemDept: '部門管理',
+		systemDic: '字典管理',
+		limits: '許可權管理',
+		limitsFrontEnd: '前端控制',
+		limitsFrontEndPage: '頁面許可權',
+		limitsFrontEndBtn: '按鈕許可權',
+		limitsBackEnd: '後端控制',
+		limitsBackEndEndPage: '頁面許可權',
+		menu: '選單嵌套',
+		menu1: '選單1',
+		menu11: '選單11',
+		menu12: '選單12',
+		menu121: '選單121',
+		menu122: '選單122',
+		menu13: '選單13',
+		menu2: '選單2',
+		funIndex: '功能',
+		funTagsView: 'tagsView 操作',
+		funCountup: '數位滾動',
+		funWangEditor: 'Editor 編輯器',
+		funCropper: '圖片裁剪',
+		funQrcode: '二維碼生成',
+		funEchartsMap: '地理座標/地圖',
+		funPrintJs: '頁面列印',
+		funClipboard: '複製剪切',
+		funGridLayout: '拖拽佈局',
+		funSplitpanes: '窗格折開器',
+		funDragVerify: '驗證器',
+		pagesIndex: '頁面',
+		pagesFiltering: '過濾篩選組件',
+		pagesFilteringDetails: '過濾篩選組件詳情',
+		pagesFilteringDetails1: '過濾篩選組件詳情111',
+		pagesIocnfont: 'ali 字體圖標',
+		pagesElement: 'ele 字體圖標',
+		pagesAwesome: 'awe 字體圖標',
+		pagesFormAdapt: '表單自我調整',
+		pagesTableRules: '表單表格驗證',
+		pagesFormI18n: '表單國際化',
+		pagesFormRules: '多表單驗證',
+		pagesDynamicForm: '動態複雜表單',
+		pagesWorkflow: '工作流',
+		pagesListAdapt: '清單自我調整',
+		pagesWaterfall: '瀑布屏',
+		pagesSteps: '步驟條',
+		pagesPreview: '大圖預覽',
+		pagesWaves: '波浪效果',
+		pagesTree: '樹形改表格',
+		pagesDrag: '拖動指令',
+		pagesLazyImg: '圖片懶加載',
+		makeIndex: '組件封裝',
+		makeSelector: '圖標選擇器',
+		makeNoticeBar: '滾動通知欄',
+		makeSvgDemo: 'svgIcon 演示',
+		makeTableDemo: '表格封裝演示',
+		paramsIndex: '路由參數',
+		paramsCommon: '普通路由',
+		paramsDynamic: '動態路由',
+		paramsCommonDetails: '普通路由詳情',
+		paramsDynamicDetails: '動態路由詳情',
+		chartIndex: '大資料圖表',
+		visualizingIndex: '數據視覺化',
+		visualizingLinkDemo1: '數據視覺化演示1',
+		visualizingLinkDemo2: '數據視覺化演示2',
+		personal: '個人中心',
+		tools: '工具類集合',
+		layoutLinkView: '外鏈',
+		layoutIframeViewOne: '内嵌 iframe1',
+		layoutIframeViewTwo: '内嵌 iframe2',
+	},
+	staticRoutes: {
+		signIn: '登入',
+		notFound: '找不到此頁面',
+		noPower: '沒有許可權',
+	},
+	user: {
+		title0: '組件大小',
+		title1: '語言切換',
+		title2: '選單蒐索',
+		title3: '佈局配寘',
+		title4: '消息',
+		title5: '開全屏',
+		title6: '關全屏',
+		dropdownLarge: '大型',
+		dropdownDefault: '默認',
+		dropdownSmall: '小型',
+		dropdown1: '首頁',
+		dropdown2: '個人中心',
+		dropdown3: '404',
+		dropdown4: '401',
+		dropdown5: '登出',
+		dropdown6: '程式碼倉庫',
+		searchPlaceholder: '選單蒐索:支援中文、路由路徑',
+		newTitle: '通知',
+		newBtn: '全部已讀',
+		newGo: '前往通知中心',
+		newDesc: '暫無通知',
+		logOutTitle: '提示',
+		logOutMessage: '此操作將登出,是否繼續?',
+		logOutConfirm: '確定',
+		logOutCancel: '取消',
+		logOutExit: '退出中',
+	},
+	tagsView: {
+		refresh: '重繪',
+		close: '關閉',
+		closeOther: '關閉其它',
+		closeAll: '全部關閉',
+		fullscreen: '當前頁全屏',
+		closeFullscreen: '關閉全屏',
+	},
+	notFound: {
+		foundTitle: '地址輸入錯誤,請重新輸入地址~',
+		foundMsg: '您可以先檢查網址,然後重新輸入或給我們迴響問題。',
+		foundBtn: '返回首頁',
+	},
+	noAccess: {
+		accessTitle: '您未被授權,沒有操作許可權~',
+		accessMsg: '請聯系管理員',
+		accessBtn: '重新授權',
+	},
+	layout: {
+		configTitle: '佈局配寘',
+		oneTitle: '全域主題',
+		twoTopTitle: '頂欄設定',
+		twoMenuTitle: '選單設定',
+		twoColumnsTitle: '分欄設定',
+		twoTopBar: '頂欄背景',
+		twoTopBarColor: '頂欄默認字體顏色',
+		twoIsTopBarColorGradual: '頂欄背景漸變',
+		twoMenuBar: '選單背景',
+		twoMenuBarColor: '選單默認字體顏色',
+		twoMenuBarActiveColor: '選單高亮背景色',
+		twoIsMenuBarColorGradual: '選單背景漸變',
+		twoColumnsMenuBar: '分欄選單背景',
+		twoColumnsMenuBarColor: '分欄選單默認字體顏色',
+		twoIsColumnsMenuBarColorGradual: '分欄選單背景漸變',
+		twoIsColumnsMenuHoverPreload: '分欄選單滑鼠懸停預加載',
+		threeTitle: '介面設定',
+		threeIsCollapse: '選單水准折疊',
+		threeIsUniqueOpened: '選單手風琴',
+		threeIsFixedHeader: '固定 Header',
+		threeIsClassicSplitMenu: '經典佈局分割選單',
+		threeIsLockScreen: '開啟鎖屏',
+		threeLockScreenTime: '自動鎖屏(s/秒)',
+		fourTitle: '介面顯示',
+		fourIsShowLogo: '側邊欄 Logo',
+		fourIsBreadcrumb: '開啟 Breadcrumb',
+		fourIsBreadcrumbIcon: '開啟 Breadcrumb 圖標',
+		fourIsTagsview: '開啟 Tagsview',
+		fourIsTagsviewIcon: '開啟 Tagsview 圖標',
+		fourIsCacheTagsView: '開啟 TagsView 緩存',
+		fourIsSortableTagsView: '開啟 TagsView 拖拽',
+		fourIsShareTagsView: '開啟 TagsView 共用',
+		fourIsFooter: '開啟 Footer',
+		fourIsGrayscale: '灰色模式',
+		fourIsInvert: '色弱模式',
+		fourIsDark: '深色模式',
+		fourIsWartermark: '開啟浮水印',
+		fourWartermarkText: '浮水印文案',
+		fiveTitle: '其它設定',
+		fiveTagsStyle: 'Tagsview 風格',
+		fiveAnimation: '主頁面切換動畫',
+		fiveColumnsAsideStyle: '分欄高亮風格',
+		fiveColumnsAsideLayout: '分欄佈局風格',
+		sixTitle: '佈局切換',
+		sixDefaults: '默認',
+		sixClassic: '經典',
+		sixTransverse: '橫向',
+		sixColumns: '分欄',
+		tipText: '點擊下方按鈕,複製佈局配寘去`src/stores/themeConfig.ts`中修改。',
+		copyText: '一鍵複製配寘',
+		resetText: '一鍵恢復默認',
+		copyTextSuccess: '複製成功!',
+		copyTextError: '複製失敗!',
+	},
+	upgrade: {
+		title: '新版本陞級',
+		msg: '新版本來啦,馬上更新嘗鮮吧! 不用擔心,更新很快的哦!',
+		desc: '提示:更新會還原默認配寘',
+		btnOne: '殘忍拒絕',
+		btnTwo: '馬上更新',
+		btnTwoLoading: '更新中',
+	},
+};

+ 13 - 0
src/i18n/pages/formI18n/en.ts

@@ -0,0 +1,13 @@
+// 定义内容
+export default {
+	formI18nLabel: {
+		name: 'name',
+		email: 'email',
+		autograph: 'autograph',
+	},
+	formI18nPlaceholder: {
+		name: 'Please enter your name',
+		email: 'Please enter the users Department',
+		autograph: 'Please enter the login account name',
+	},
+};

+ 13 - 0
src/i18n/pages/formI18n/zh-cn.ts

@@ -0,0 +1,13 @@
+// 定义内容
+export default {
+	formI18nLabel: {
+		name: '姓名',
+		email: '用户归属部门',
+		autograph: '登陆账户名',
+	},
+	formI18nPlaceholder: {
+		name: '请输入姓名',
+		email: '请输入用户归属部门',
+		autograph: '请输入登陆账户名',
+	},
+};

+ 13 - 0
src/i18n/pages/formI18n/zh-tw.ts

@@ -0,0 +1,13 @@
+// 定义内容
+export default {
+	formI18nLabel: {
+		name: '姓名',
+		email: '用戶歸屬部門',
+		autograph: '登入帳戶名',
+	},
+	formI18nPlaceholder: {
+		name: '請輸入姓名',
+		email: '請輸入用戶歸屬部門',
+		autograph: '請輸入登入帳戶名',
+	},
+};

+ 29 - 0
src/i18n/pages/login/en.ts

@@ -0,0 +1,29 @@
+// 定义内容
+export default {
+	label: {
+		one1: 'User name login',
+		two2: 'Mobile number',
+	},
+	link: {
+		one3: 'Third party login',
+		two4: 'Links',
+	},
+	account: {
+		accountPlaceholder1: 'Please enter your login account',
+		accountPlaceholder2: 'Please enter your login password',
+		accountPlaceholder3: 'Please enter the verification code',
+		accountBtnText: 'Sign in',
+	},
+	mobile: {
+		placeholder1: 'Please input mobile phone number',
+		placeholder2: 'Please enter the verification code',
+		codeText: 'Get code',
+		btnText: 'Sign in',
+		msgText:
+			'Warm tip: it is recommended to use Google, Microsoft edge, version 79.0.1072.62 and above browsers, and 360 browser, please use speed mode',
+	},
+	scan: {
+		text: 'Open the mobile phone to scan and quickly log in / register',
+	},
+	signInText: 'welcome back!',
+};

+ 28 - 0
src/i18n/pages/login/zh-cn.ts

@@ -0,0 +1,28 @@
+// 定义内容
+export default {
+	label: {
+		one1: '账号密码登录',
+		two2: '手机号登录',
+	},
+	link: {
+		one3: '第三方登录',
+		two4: '友情链接',
+	},
+	account: {
+		accountPlaceholder1: '请输入登录账号',
+		accountPlaceholder2: '请输入登录密码',
+		accountPlaceholder3: '请输入验证码',
+		accountBtnText: '登 录',
+	},
+	mobile: {
+		placeholder1: '请输入手机号',
+		placeholder2: '请输入验证码',
+		codeText: '获取验证码',
+		btnText: '登 录',
+		msgText: '* 温馨提示:建议使用谷歌、Microsoft Edge,版本 79.0.1072.62 及以上浏览器,360浏览器请使用极速模式',
+	},
+	scan: {
+		text: '打开手机扫一扫,快速登录/注册',
+	},
+	signInText: '欢迎回来!',
+};

+ 28 - 0
src/i18n/pages/login/zh-tw.ts

@@ -0,0 +1,28 @@
+// 定义内容
+export default {
+	label: {
+		one1: '用戶名登入',
+		two2: '手機號登入',
+	},
+	link: {
+		one3: '協力廠商登入',
+		two4: '友情連結',
+	},
+	account: {
+		accountPlaceholder1: '請輸入登入賬號',
+		accountPlaceholder2: '請輸入登入密碼',
+		accountPlaceholder3: '請輸入驗證碼',
+		accountBtnText: '登入',
+	},
+	mobile: {
+		placeholder1: '請輸入手機號',
+		placeholder2: '請輸入驗證碼',
+		codeText: '獲取驗證碼',
+		btnText: '登入',
+		msgText: '* 溫馨提示:建議使用穀歌、Microsoft Edge,版本79.0.1072.62及以上瀏覽器,360瀏覽器請使用極速模式',
+	},
+	scan: {
+		text: '打開手機掃一掃,快速登錄/注册',
+	},
+	signInText: '歡迎回來!',
+};

+ 154 - 0
src/layout/component/aside.vue

@@ -0,0 +1,154 @@
+<template>
+	<div class="h100" v-show="!isTagsViewCurrenFull">
+		<el-aside class="layout-aside" :class="setCollapseStyle">
+			<Logo v-if="setShowLogo" />
+			<el-scrollbar class="flex-auto" ref="layoutAsideScrollbarRef" @mouseenter="onAsideEnterLeave(true)" @mouseleave="onAsideEnterLeave(false)">
+				<Vertical :menuList="state.menuList" />
+			</el-scrollbar>
+		</el-aside>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutAside">
+import { defineAsyncComponent, reactive, computed, watch, onBeforeMount, ref } from 'vue';
+import { storeToRefs } from 'pinia';
+import pinia from '/@/stores/index';
+import { useRoutesList } from '/@/stores/routesList';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
+import mittBus from '/@/utils/mitt';
+
+// 引入组件
+const Logo = defineAsyncComponent(() => import('/@/layout/logo/index.vue'));
+const Vertical = defineAsyncComponent(() => import('/@/layout/navMenu/vertical.vue'));
+
+// 定义变量内容
+const layoutAsideScrollbarRef = ref();
+const stores = useRoutesList();
+const storesThemeConfig = useThemeConfig();
+const storesTagsViewRoutes = useTagsViewRoutes();
+const { routesList } = storeToRefs(stores);
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const { isTagsViewCurrenFull } = storeToRefs(storesTagsViewRoutes);
+const state = reactive<AsideState>({
+	menuList: [],
+	clientWidth: 0,
+});
+
+// 设置菜单展开/收起时的宽度
+const setCollapseStyle = computed(() => {
+	const { layout, isCollapse, menuBar } = themeConfig.value;
+	const asideBrTheme = ['#FFFFFF', '#FFF', '#fff', '#ffffff'];
+	const asideBrColor = asideBrTheme.includes(menuBar) ? 'layout-el-aside-br-color' : '';
+	// 判断是否是手机端
+	if (state.clientWidth <= 1000) {
+		if (isCollapse) {
+			document.body.setAttribute('class', 'el-popup-parent--hidden');
+			const asideEle = document.querySelector('.layout-container') as HTMLElement;
+			const modeDivs = document.createElement('div');
+			modeDivs.setAttribute('class', 'layout-aside-mobile-mode');
+			asideEle.appendChild(modeDivs);
+			modeDivs.addEventListener('click', closeLayoutAsideMobileMode);
+			return [asideBrColor, 'layout-aside-mobile', 'layout-aside-mobile-open'];
+		} else {
+			// 关闭弹窗
+			closeLayoutAsideMobileMode();
+			return [asideBrColor, 'layout-aside-mobile', 'layout-aside-mobile-close'];
+		}
+	} else {
+		if (layout === 'columns') {
+			// 分栏布局,菜单收起时宽度给 1px
+			if (isCollapse) return [asideBrColor, 'layout-aside-pc-1'];
+			else return [asideBrColor, 'layout-aside-pc-220'];
+		} else {
+			// 其它布局给 64px
+			if (isCollapse) return [asideBrColor, 'layout-aside-pc-64'];
+			else return [asideBrColor, 'layout-aside-pc-220'];
+		}
+	}
+});
+// 设置显示/隐藏 logo
+const setShowLogo = computed(() => {
+	let { layout, isShowLogo } = themeConfig.value;
+	return (isShowLogo && layout === 'defaults') || (isShowLogo && layout === 'columns');
+});
+// 关闭移动端蒙版
+const closeLayoutAsideMobileMode = () => {
+	const el = document.querySelector('.layout-aside-mobile-mode');
+	el?.setAttribute('style', 'animation: error-img-two 0.3s');
+	setTimeout(() => {
+		el?.parentNode?.removeChild(el);
+	}, 300);
+	const clientWidth = document.body.clientWidth;
+	if (clientWidth < 1000) themeConfig.value.isCollapse = false;
+	document.body.setAttribute('class', '');
+};
+// 设置/过滤路由(非静态路由/是否显示在菜单中)
+const setFilterRoutes = () => {
+	if (themeConfig.value.layout === 'columns') return false;
+	state.menuList = filterRoutesFun(routesList.value);
+};
+// 路由过滤递归函数
+const filterRoutesFun = <T extends RouteItem>(arr: T[]): T[] => {
+	return arr
+		.filter((item: T) => !item.meta?.isHide)
+		.map((item: T) => {
+			item = Object.assign({}, item);
+			if (item.children) item.children = filterRoutesFun(item.children);
+			return item;
+		});
+};
+// 设置菜单导航是否固定(移动端)
+const initMenuFixed = (clientWidth: number) => {
+	state.clientWidth = clientWidth;
+};
+// 鼠标移入、移出
+const onAsideEnterLeave = (bool: Boolean) => {
+	let { layout } = themeConfig.value;
+	if (layout !== 'columns') return false;
+	if (!bool) mittBus.emit('restoreDefault');
+	stores.setColumnsMenuHover(bool);
+};
+// 页面加载前
+onBeforeMount(() => {
+	initMenuFixed(document.body.clientWidth);
+	setFilterRoutes();
+	// 此界面不需要取消监听(mittBus.off('setSendColumnsChildren))
+	// 因为切换布局时有的监听需要使用,取消了监听,某些操作将不生效
+	mittBus.on('setSendColumnsChildren', (res: MittMenu) => {
+		state.menuList = res.children;
+	});
+	mittBus.on('setSendClassicChildren', (res: MittMenu) => {
+		let { layout, isClassicSplitMenu } = themeConfig.value;
+		if (layout === 'classic' && isClassicSplitMenu) {
+			state.menuList = [];
+			state.menuList = res.children;
+		}
+	});
+	mittBus.on('getBreadcrumbIndexSetFilterRoutes', () => {
+		setFilterRoutes();
+	});
+	mittBus.on('layoutMobileResize', (res: LayoutMobileResize) => {
+		initMenuFixed(res.clientWidth);
+		closeLayoutAsideMobileMode();
+	});
+});
+// 监听 themeConfig 配置文件的变化,更新菜单 el-scrollbar 的高度
+watch(themeConfig.value, (val) => {
+	if (val.isShowLogoChange !== val.isShowLogo) {
+		if (layoutAsideScrollbarRef.value) layoutAsideScrollbarRef.value.update();
+	}
+});
+// 监听 pinia 值的变化,动态赋值给菜单中
+watch(
+	pinia.state,
+	(val) => {
+		let { layout, isClassicSplitMenu } = val.themeConfig.themeConfig;
+		if (layout === 'classic' && isClassicSplitMenu) return false;
+		setFilterRoutes();
+	},
+	{
+		deep: true,
+	}
+);
+</script>

+ 272 - 0
src/layout/component/columnsAside.vue

@@ -0,0 +1,272 @@
+<template>
+	<div class="layout-columns-aside">
+		<el-scrollbar>
+			<ul @mouseleave="onColumnsAsideMenuMouseleave()">
+				<li
+					v-for="(v, k) in state.columnsAsideList"
+					:key="k"
+					@click="onColumnsAsideMenuClick(v, k)"
+					@mouseenter="onColumnsAsideMenuMouseenter(v, k)"
+					:ref="
+						(el) => {
+							if (el) columnsAsideOffsetTopRefs[k] = el;
+						}
+					"
+					:class="{ 'layout-columns-active': state.liIndex === k, 'layout-columns-hover': state.liHoverIndex === k }"
+					:title="$t(v.meta.title)"
+				>
+					<div :class="themeConfig.columnsAsideLayout" v-if="!v.meta.isLink || (v.meta.isLink && v.meta.isIframe)">
+						<SvgIcon :name="v.meta.icon" />
+						<div class="columns-vertical-title font12">
+							{{
+								$t(v.meta.title) && $t(v.meta.title).length >= 4
+									? $t(v.meta.title).substr(0, themeConfig.columnsAsideLayout === 'columns-vertical' ? 4 : 3)
+									: $t(v.meta.title)
+							}}
+						</div>
+					</div>
+					<div :class="themeConfig.columnsAsideLayout" v-else>
+						<a :href="v.meta.isLink" target="_blank">
+							<SvgIcon :name="v.meta.icon" />
+							<div class="columns-vertical-title font12">
+								{{
+									$t(v.meta.title) && $t(v.meta.title).length >= 4
+										? $t(v.meta.title).substr(0, themeConfig.columnsAsideLayout === 'columns-vertical' ? 4 : 3)
+										: $t(v.meta.title)
+								}}
+							</div>
+						</a>
+					</div>
+				</li>
+				<div ref="columnsAsideActiveRef" :class="themeConfig.columnsAsideStyle"></div>
+			</ul>
+		</el-scrollbar>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutColumnsAside">
+import { reactive, ref, onMounted, nextTick, watch, onUnmounted } from 'vue';
+import { useRoute, useRouter, onBeforeRouteUpdate, RouteRecordRaw } from 'vue-router';
+import { storeToRefs } from 'pinia';
+import pinia from '/@/stores/index';
+import { useRoutesList } from '/@/stores/routesList';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import mittBus from '/@/utils/mitt';
+
+// 定义变量内容
+const columnsAsideOffsetTopRefs = ref<RefType>([]);
+const columnsAsideActiveRef = ref();
+const stores = useRoutesList();
+const storesThemeConfig = useThemeConfig();
+const { routesList, isColumnsMenuHover, isColumnsNavHover } = storeToRefs(stores);
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const route = useRoute();
+const router = useRouter();
+const state = reactive<ColumnsAsideState>({
+	columnsAsideList: [],
+	liIndex: 0,
+	liOldIndex: null,
+	liHoverIndex: null,
+	liOldPath: null,
+	difference: 0,
+	routeSplit: [],
+});
+
+// 设置菜单高亮位置移动
+const setColumnsAsideMove = (k: number) => {
+	state.liIndex = k;
+	columnsAsideActiveRef.value.style.top = `${columnsAsideOffsetTopRefs.value[k].offsetTop + state.difference}px`;
+};
+// 菜单高亮点击事件
+const onColumnsAsideMenuClick = (v: RouteItem, k: number) => {
+	setColumnsAsideMove(k);
+	let { path, redirect } = v;
+	if (redirect) router.push(redirect);
+	else router.push(path);
+};
+// 鼠标移入时,显示当前的子级菜单
+const onColumnsAsideMenuMouseenter = (v: RouteRecordRaw, k: number) => {
+	if (!themeConfig.value.isColumnsMenuHoverPreload) return false;
+	let { path } = v;
+	state.liOldPath = path;
+	state.liOldIndex = k;
+	state.liHoverIndex = k;
+	mittBus.emit('setSendColumnsChildren', setSendChildren(path));
+	stores.setColumnsMenuHover(false);
+	stores.setColumnsNavHover(true);
+};
+// 鼠标移走时,显示原来的子级菜单
+const onColumnsAsideMenuMouseleave = async () => {
+	await stores.setColumnsNavHover(false);
+	// 添加延时器,防止拿到的 store.state.routesList 值不是最新的
+	setTimeout(() => {
+		if (!isColumnsMenuHover && !isColumnsNavHover) mittBus.emit('restoreDefault');
+	}, 100);
+};
+// 设置高亮动态位置
+const onColumnsAsideDown = (k: number) => {
+	nextTick(() => {
+		setColumnsAsideMove(k);
+	});
+};
+// 设置/过滤路由(非静态路由/是否显示在菜单中)
+const setFilterRoutes = () => {
+	state.columnsAsideList = filterRoutesFun(routesList.value);
+	const resData: MittMenu = setSendChildren(route.path);
+	if (Object.keys(resData).length <= 0) return false;
+	onColumnsAsideDown(resData.item?.k);
+	mittBus.emit('setSendColumnsChildren', resData);
+};
+// 传送当前子级数据到菜单中
+const setSendChildren = (path: string) => {
+	const currentPathSplit = path.split('/');
+	let currentData: MittMenu = { children: [] };
+	state.columnsAsideList.map((v: RouteItem, k: number) => {
+		if (v.path === `/${currentPathSplit[1]}`) {
+			v['k'] = k;
+			currentData['item'] = { ...v };
+			currentData['children'] = [{ ...v }];
+			if (v.children) currentData['children'] = v.children;
+		}
+	});
+	return currentData;
+};
+// 路由过滤递归函数
+const filterRoutesFun = <T extends RouteItem>(arr: T[]): T[] => {
+	return arr
+		.filter((item: T) => !item.meta?.isHide)
+		.map((item: T) => {
+			item = Object.assign({}, item);
+			if (item.children) item.children = filterRoutesFun(item.children);
+			return item;
+		});
+};
+// tagsView 点击时,根据路由查找下标 columnsAsideList,实现左侧菜单高亮
+const setColumnsMenuHighlight = (path: string) => {
+	state.routeSplit = path.split('/');
+	state.routeSplit.shift();
+	const routeFirst = `/${state.routeSplit[0]}`;
+	const currentSplitRoute = state.columnsAsideList.find((v: RouteItem) => v.path === routeFirst);
+	if (!currentSplitRoute) return false;
+	// 延迟拿值,防止取不到
+	setTimeout(() => {
+		onColumnsAsideDown(currentSplitRoute.k);
+	}, 0);
+};
+// 页面加载时
+onMounted(() => {
+	setFilterRoutes();
+	// 销毁变量,防止鼠标再次移入时,保留了上次的记录
+	mittBus.on('restoreDefault', () => {
+		state.liOldIndex = null;
+		state.liOldPath = null;
+	});
+});
+// 页面卸载时
+onUnmounted(() => {
+	mittBus.off('restoreDefault', () => {});
+});
+// 路由更新时
+onBeforeRouteUpdate((to) => {
+	setColumnsMenuHighlight(to.path);
+	mittBus.emit('setSendColumnsChildren', setSendChildren(to.path));
+});
+// 监听布局配置信息的变化,动态增加菜单高亮位置移动像素
+watch(
+	pinia.state,
+	(val) => {
+		val.themeConfig.themeConfig.columnsAsideStyle === 'columnsRound' ? (state.difference = 3) : (state.difference = 0);
+		if (!val.routesList.isColumnsMenuHover && !val.routesList.isColumnsNavHover) {
+			state.liHoverIndex = null;
+			mittBus.emit('setSendColumnsChildren', setSendChildren(route.path));
+		} else {
+			state.liHoverIndex = state.liOldIndex;
+			if (!state.liOldPath) return false;
+			mittBus.emit('setSendColumnsChildren', setSendChildren(state.liOldPath));
+		}
+	},
+	{
+		deep: true,
+	}
+);
+</script>
+
+<style scoped lang="scss">
+.layout-columns-aside {
+	width: 70px;
+	height: 100%;
+	background: var(--next-bg-columnsMenuBar);
+	ul {
+		position: relative;
+		.layout-columns-active {
+			color: var(--next-bg-columnsMenuBarColor) !important;
+			transition: 0.3s ease-in-out;
+		}
+		.layout-columns-hover {
+			color: var(--el-color-primary);
+			a {
+				color: var(--el-color-primary);
+			}
+		}
+		li {
+			color: var(--next-bg-columnsMenuBarColor);
+			width: 100%;
+			height: 50px;
+			text-align: center;
+			display: flex;
+			cursor: pointer;
+			position: relative;
+			z-index: 1;
+			&:hover {
+				@extend .layout-columns-hover;
+			}
+			.columns-vertical {
+				margin: auto;
+				.columns-vertical-title {
+					padding-top: 1px;
+				}
+			}
+			.columns-horizontal {
+				display: flex;
+				height: 50px;
+				width: 100%;
+				align-items: center;
+				padding: 0 5px;
+				i {
+					margin-right: 3px;
+				}
+				a {
+					display: flex;
+					.columns-horizontal-title {
+						padding-top: 1px;
+					}
+				}
+			}
+			a {
+				text-decoration: none;
+				color: var(--next-bg-columnsMenuBarColor);
+			}
+		}
+		.columns-round {
+			background: var(--el-color-primary);
+			color: var(--el-color-white);
+			position: absolute;
+			left: 50%;
+			top: 2px;
+			height: 44px;
+			width: 65px;
+			transform: translateX(-50%);
+			z-index: 0;
+			transition: 0.3s ease-in-out;
+			border-radius: 5px;
+		}
+		.columns-card {
+			@extend .columns-round;
+			top: 0;
+			height: 50px;
+			width: 100%;
+			border-radius: 0;
+		}
+	}
+}
+</style>

+ 18 - 0
src/layout/component/header.vue

@@ -0,0 +1,18 @@
+<template>
+	<el-header class="layout-header" v-show="!isTagsViewCurrenFull">
+		<NavBarsIndex />
+	</el-header>
+</template>
+
+<script setup lang="ts" name="layoutHeader">
+import { defineAsyncComponent } from 'vue';
+import { storeToRefs } from 'pinia';
+import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
+
+// 引入组件
+const NavBarsIndex = defineAsyncComponent(() => import('/@/layout/navBars/index.vue'));
+
+// 定义变量内容
+const storesTagsViewRoutes = useTagsViewRoutes();
+const { isTagsViewCurrenFull } = storeToRefs(storesTagsViewRoutes);
+</script>

+ 62 - 0
src/layout/component/main.vue

@@ -0,0 +1,62 @@
+<template>
+	<el-main class="layout-main"
+		:style="isFixedHeader ? `height: calc(100% - ${setMainHeight})` : `minHeight: calc(100% - ${setMainHeight})`">
+		<el-scrollbar ref="layoutMainScrollbarRef" class="layout-main-scroll layout-backtop-header-fixed"
+			wrap-class="layout-main-scroll" view-class="layout-main-scroll">
+			<LayoutParentView />
+      <LayoutFooter v-if="isFooter" />
+		</el-scrollbar>
+		<el-backtop :target="setBacktopClass" />
+	</el-main>
+</template>
+
+<script setup lang="ts" name="layoutMain">
+import { defineAsyncComponent, onMounted, computed, ref } from 'vue';
+import { useRoute } from 'vue-router';
+import { storeToRefs } from 'pinia';
+import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import { NextLoading } from '/@/utils/loading';
+
+// 引入组件
+const LayoutParentView = defineAsyncComponent(() => import('/@/layout/routerView/parent.vue'));
+const LayoutFooter = defineAsyncComponent(() => import('/@/layout/footer/index.vue'));
+
+// 定义变量内容
+const layoutMainScrollbarRef = ref();
+const route = useRoute();
+const storesTagsViewRoutes = useTagsViewRoutes();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const { isTagsViewCurrenFull } = storeToRefs(storesTagsViewRoutes);
+
+// 设置 footer 显示/隐藏
+const isFooter = computed(() => {
+	return themeConfig.value.isFooter && !route.meta.isIframe;
+});
+// 设置 header 固定
+const isFixedHeader = computed(() => {
+	return themeConfig.value.isFixedHeader;
+});
+// 设置 Backtop 回到顶部
+const setBacktopClass = computed(() => {
+	if (themeConfig.value.isFixedHeader) return `.layout-backtop-header-fixed .el-scrollbar__wrap`;
+	else return `.layout-backtop .el-scrollbar__wrap`;
+});
+// 设置主内容区的高度
+const setMainHeight = computed(() => {
+	if (isTagsViewCurrenFull.value) return '0px';
+	const { isTagsview, layout } = themeConfig.value;
+	if (isTagsview && layout !== 'classic') return '85px';
+	else return '51px';
+});
+// 页面加载前
+onMounted(() => {
+	NextLoading.done(600);
+});
+
+// 暴露变量
+defineExpose({
+	layoutMainScrollbarRef,
+});
+</script>

+ 24 - 0
src/layout/footer/index.vue

@@ -0,0 +1,24 @@
+<template>
+	<div class="layout-footer pb5 pt2">
+		<div class="layout-footer-warp">
+			<div>❤️ Powered by Django-Vue3-Admin Copyright © DVAdmin团队 ❤️</div>
+		</div>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutFooter">
+// 此处需有内容(注释也得),否则缓存将失败
+</script>
+
+<style scoped lang="scss">
+.layout-footer {
+	width: 100%;
+	display: flex;
+	&-warp {
+		margin: auto;
+		color: var(--el-text-color-secondary);
+		text-align: center;
+		animation: error-num 0.3s ease;
+	}
+}
+</style>

+ 50 - 0
src/layout/index.vue

@@ -0,0 +1,50 @@
+<template>
+	<component :is="layouts[themeConfig.layout]" />
+</template>
+
+<script setup lang="ts" name="layout">
+import { onBeforeMount, onUnmounted, defineAsyncComponent } from 'vue';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import { Local } from '/@/utils/storage';
+import mittBus from '/@/utils/mitt';
+
+// 引入组件
+const layouts: any = {
+	defaults: defineAsyncComponent(() => import('/@/layout/main/defaults.vue')),
+	classic: defineAsyncComponent(() => import('/@/layout/main/classic.vue')),
+	transverse: defineAsyncComponent(() => import('/@/layout/main/transverse.vue')),
+	columns: defineAsyncComponent(() => import('/@/layout/main/columns.vue')),
+};
+
+// 定义变量内容
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+
+// 窗口大小改变时(适配移动端)
+const onLayoutResize = () => {
+	if (!Local.get('oldLayout')) Local.set('oldLayout', themeConfig.value.layout);
+	const clientWidth = document.body.clientWidth;
+	if (clientWidth < 1000) {
+		themeConfig.value.isCollapse = false;
+		mittBus.emit('layoutMobileResize', {
+			layout: 'defaults',
+			clientWidth,
+		});
+	} else {
+		mittBus.emit('layoutMobileResize', {
+			layout: Local.get('oldLayout') ? Local.get('oldLayout') : themeConfig.value.layout,
+			clientWidth,
+		});
+	}
+};
+// 页面加载前
+onBeforeMount(() => {
+	onLayoutResize();
+	window.addEventListener('resize', onLayoutResize);
+});
+// 页面卸载时
+onUnmounted(() => {
+	window.removeEventListener('resize', onLayoutResize);
+});
+</script>

+ 352 - 0
src/layout/lockScreen/index.vue

@@ -0,0 +1,352 @@
+<template>
+	<div v-show="state.isShowLockScreen">
+		<div class="layout-lock-screen-mask"></div>
+		<div class="layout-lock-screen-img" :class="{ 'layout-lock-screen-filter': state.isShowLoockLogin }"></div>
+		<div class="layout-lock-screen">
+			<div
+				class="layout-lock-screen-date"
+				ref="layoutLockScreenDateRef"
+				@mousedown="onDownPc"
+				@mousemove="onMovePc"
+				@mouseup="onEnd"
+				@touchstart.stop="onDownApp"
+				@touchmove.stop="onMoveApp"
+				@touchend.stop="onEnd"
+			>
+				<div class="layout-lock-screen-date-box">
+					<div class="layout-lock-screen-date-box-time">
+						{{ state.time.hm }}<span class="layout-lock-screen-date-box-minutes">{{ state.time.s }}</span>
+					</div>
+					<div class="layout-lock-screen-date-box-info">{{ state.time.mdq }}</div>
+				</div>
+				<div class="layout-lock-screen-date-top">
+					<SvgIcon name="ele-Top" />
+					<div class="layout-lock-screen-date-top-text">上滑解锁</div>
+				</div>
+			</div>
+			<transition name="el-zoom-in-center">
+				<div v-show="state.isShowLoockLogin" class="layout-lock-screen-login">
+					<div class="layout-lock-screen-login-box">
+						<div class="layout-lock-screen-login-box-img">
+							<img src="https://img2.baidu.com/it/u=1978192862,2048448374&fm=253&fmt=auto&app=138&f=JPEG?w=504&h=500" />
+						</div>
+						<div class="layout-lock-screen-login-box-name">Administrator</div>
+						<div class="layout-lock-screen-login-box-value">
+							<el-input
+								placeholder="请输入密码"
+								ref="layoutLockScreenInputRef"
+								v-model="state.lockScreenPassword"
+								@keyup.enter.native.stop="onLockScreenSubmit()"
+							>
+								<template #append>
+									<el-button @click="onLockScreenSubmit">
+										<el-icon class="el-input__icon">
+											<ele-Right />
+										</el-icon>
+									</el-button>
+								</template>
+							</el-input>
+						</div>
+					</div>
+					<div class="layout-lock-screen-login-icon">
+						<SvgIcon name="ele-Microphone" :size="20" />
+						<SvgIcon name="ele-AlarmClock" :size="20" />
+						<SvgIcon name="ele-SwitchButton" :size="20" />
+					</div>
+				</div>
+			</transition>
+		</div>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutLockScreen">
+import { nextTick, onMounted, reactive, ref, onUnmounted } from 'vue';
+import { formatDate } from '/@/utils/formatTime';
+import { Local } from '/@/utils/storage';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+
+// 定义变量内容
+const layoutLockScreenDateRef = ref<HtmlType>();
+const layoutLockScreenInputRef = ref();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const state = reactive({
+	transparency: 1,
+	downClientY: 0,
+	moveDifference: 0,
+	isShowLoockLogin: false,
+	isFlags: false,
+	querySelectorEl: '' as HtmlType,
+	time: {
+		hm: '',
+		s: '',
+		mdq: '',
+	},
+	setIntervalTime: 0,
+	isShowLockScreen: false,
+	isShowLockScreenIntervalTime: 0,
+	lockScreenPassword: '',
+});
+
+// 鼠标按下 pc
+const onDownPc = (down: MouseEvent) => {
+	state.isFlags = true;
+	state.downClientY = down.clientY;
+};
+// 鼠标按下 app
+const onDownApp = (down: TouchEvent) => {
+	state.isFlags = true;
+	state.downClientY = down.touches[0].clientY;
+};
+// 鼠标移动 pc
+const onMovePc = (move: MouseEvent) => {
+	state.moveDifference = move.clientY - state.downClientY;
+	onMove();
+};
+// 鼠标移动 app
+const onMoveApp = (move: TouchEvent) => {
+	state.moveDifference = move.touches[0].clientY - state.downClientY;
+	onMove();
+};
+// 鼠标移动事件
+const onMove = () => {
+	if (state.isFlags) {
+		const el = <HTMLElement>state.querySelectorEl;
+		const opacitys = (state.transparency -= 1 / 200);
+		if (state.moveDifference >= 0) return false;
+		el.setAttribute('style', `top:${state.moveDifference}px;cursor:pointer;opacity:${opacitys};`);
+		if (state.moveDifference < -400) {
+			el.setAttribute('style', `top:${-el.clientHeight}px;cursor:pointer;transition:all 0.3s ease;`);
+			state.moveDifference = -el.clientHeight;
+			setTimeout(() => {
+				el && el.parentNode?.removeChild(el);
+			}, 300);
+		}
+		if (state.moveDifference === -el.clientHeight) {
+			state.isShowLoockLogin = true;
+			layoutLockScreenInputRef.value.focus();
+		}
+	}
+};
+// 鼠标松开
+const onEnd = () => {
+	state.isFlags = false;
+	state.transparency = 1;
+	if (state.moveDifference >= -400) {
+		(<HTMLElement>state.querySelectorEl).setAttribute('style', `top:0px;opacity:1;transition:all 0.3s ease;`);
+	}
+};
+// 获取要拖拽的初始元素
+const initGetElement = () => {
+	nextTick(() => {
+		state.querySelectorEl = layoutLockScreenDateRef.value;
+	});
+};
+// 时间初始化
+const initTime = () => {
+	state.time.hm = formatDate(new Date(), 'HH:MM');
+	state.time.s = formatDate(new Date(), 'SS');
+	state.time.mdq = formatDate(new Date(), 'mm月dd日,WWW');
+};
+// 时间初始化定时器
+const initSetTime = () => {
+	initTime();
+	state.setIntervalTime = window.setInterval(() => {
+		initTime();
+	}, 1000);
+};
+// 锁屏时间定时器
+const initLockScreen = () => {
+	if (themeConfig.value.isLockScreen) {
+		state.isShowLockScreenIntervalTime = window.setInterval(() => {
+			if (themeConfig.value.lockScreenTime <= 1) {
+				state.isShowLockScreen = true;
+				setLocalThemeConfig();
+				return false;
+			}
+			themeConfig.value.lockScreenTime--;
+		}, 1000);
+	} else {
+		clearInterval(state.isShowLockScreenIntervalTime);
+	}
+};
+// 存储布局配置
+const setLocalThemeConfig = () => {
+	themeConfig.value.isDrawer = false;
+	Local.set('themeConfig', themeConfig.value);
+};
+// 密码输入点击事件
+const onLockScreenSubmit = () => {
+	themeConfig.value.isLockScreen = false;
+	themeConfig.value.lockScreenTime = 30;
+	setLocalThemeConfig();
+};
+// 页面加载时
+onMounted(() => {
+	initGetElement();
+	initSetTime();
+	initLockScreen();
+});
+// 页面卸载时
+onUnmounted(() => {
+	window.clearInterval(state.setIntervalTime);
+	window.clearInterval(state.isShowLockScreenIntervalTime);
+});
+</script>
+
+<style scoped lang="scss">
+.layout-lock-screen-fixed {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.layout-lock-screen-filter {
+	filter: blur(1px);
+}
+.layout-lock-screen-mask {
+	background: var(--el-color-white);
+	@extend .layout-lock-screen-fixed;
+	z-index: 9999990;
+}
+.layout-lock-screen-img {
+	@extend .layout-lock-screen-fixed;
+	background-image: url('https://img-blog.csdnimg.cn/afa9c317667f47d5bea34b85af45979e.png#pic_center');
+	background-size: 100% 100%;
+	z-index: 9999991;
+}
+.layout-lock-screen {
+	@extend .layout-lock-screen-fixed;
+	z-index: 9999992;
+	&-date {
+		position: absolute;
+		left: 0;
+		top: 0;
+		width: 100%;
+		height: 100%;
+		color: var(--el-color-white);
+		z-index: 9999993;
+		user-select: none;
+		&-box {
+			position: absolute;
+			left: 30px;
+			bottom: 50px;
+			&-time {
+				font-size: 100px;
+				color: var(--el-color-white);
+			}
+			&-info {
+				font-size: 40px;
+				color: var(--el-color-white);
+			}
+			&-minutes {
+				font-size: 16px;
+			}
+		}
+		&-top {
+			width: 40px;
+			height: 40px;
+			line-height: 40px;
+			border-radius: 100%;
+			border: 1px solid var(--el-border-color-light, #ebeef5);
+			background: rgba(255, 255, 255, 0.1);
+			color: var(--el-color-white);
+			opacity: 0.8;
+			position: absolute;
+			right: 30px;
+			bottom: 50px;
+			text-align: center;
+			overflow: hidden;
+			transition: all 0.3s ease;
+			i {
+				transition: all 0.3s ease;
+			}
+			&-text {
+				opacity: 0;
+				position: absolute;
+				top: 150%;
+				font-size: 12px;
+				color: var(--el-color-white);
+				left: 50%;
+				line-height: 1.2;
+				transform: translate(-50%, -50%);
+				transition: all 0.3s ease;
+				width: 35px;
+			}
+			&:hover {
+				border: 1px solid rgba(255, 255, 255, 0.5);
+				background: rgba(255, 255, 255, 0.2);
+				box-shadow: 0 0 12px 0 rgba(255, 255, 255, 0.5);
+				color: var(--el-color-white);
+				opacity: 1;
+				transition: all 0.3s ease;
+				i {
+					transform: translateY(-40px);
+					transition: all 0.3s ease;
+				}
+				.layout-lock-screen-date-top-text {
+					opacity: 1;
+					top: 50%;
+					transition: all 0.3s ease;
+				}
+			}
+		}
+	}
+	&-login {
+		position: relative;
+		z-index: 9999994;
+		width: 100%;
+		height: 100%;
+		left: 0;
+		top: 0;
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		color: var(--el-color-white);
+		&-box {
+			text-align: center;
+			margin: auto;
+			&-img {
+				width: 180px;
+				height: 180px;
+				margin: auto;
+				img {
+					width: 100%;
+					height: 100%;
+					border-radius: 100%;
+				}
+			}
+			&-name {
+				font-size: 26px;
+				margin: 15px 0 30px;
+			}
+		}
+		&-icon {
+			position: absolute;
+			right: 30px;
+			bottom: 30px;
+			i {
+				font-size: 20px;
+				margin-left: 15px;
+				cursor: pointer;
+				opacity: 0.8;
+				&:hover {
+					opacity: 1;
+				}
+			}
+		}
+	}
+}
+:deep(.el-input-group__append) {
+	background: var(--el-color-white);
+	padding: 0px 15px;
+}
+:deep(.el-input__inner) {
+	border-right-color: var(--el-border-color-extra-light);
+	&:hover {
+		border-color: var(--el-border-color-extra-light);
+	}
+}
+</style>

+ 96 - 0
src/layout/logo/index.vue

@@ -0,0 +1,96 @@
+<template>
+	<div class="layout-logo" v-if="setShowLogo" @click="onThemeConfigChange">
+		<img :src="siteLogo" class="layout-logo-medium-img" />
+		<span style="font-size: x-large">{{ getSystemConfig['login.site_title'] || themeConfig.globalTitle }}</span>
+	</div>
+	<div class="layout-logo-size" v-else @click="onThemeConfigChange">
+		<img :src="siteLogo" class="layout-logo-size-img" />
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutLogo">
+import { computed } from 'vue';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import logoMini from '/@/assets/logo-mini.svg';
+import { SystemConfigStore } from "/@/stores/systemConfig";
+import _ from "lodash-es";
+// 定义变量内容
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+
+// 设置 logo 的显示。classic 经典布局默认显示 logo
+const setShowLogo = computed(() => {
+	let { isCollapse, layout } = themeConfig.value;
+	return !isCollapse || layout === 'classic' || document.body.clientWidth < 1000;
+});
+// logo 点击实现菜单展开/收起
+const onThemeConfigChange = () => {
+	if (themeConfig.value.layout === 'transverse') return false;
+	themeConfig.value.isCollapse = !themeConfig.value.isCollapse;
+};
+
+const systemConfigStore = SystemConfigStore()
+const { systemConfig } = storeToRefs(systemConfigStore)
+const getSystemConfig = computed(() => {
+	return systemConfig.value
+})
+
+const siteLogo = computed(() => {
+	if (!_.isEmpty(getSystemConfig.value['login.site_logo'])) {
+		return getSystemConfig.value['login.site_logo']
+	}
+	return logoMini
+});
+
+</script>
+
+<style scoped lang="scss">
+.layout-logo {
+	width: 220px;
+	height: 50px;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	box-shadow: rgb(0 21 41 / 2%) 0px 1px 4px;
+	color: var(--el-color-primary);
+	font-size: 16px;
+	cursor: pointer;
+	animation: logoAnimation 0.3s ease-in-out;
+
+	span {
+		white-space: nowrap;
+		display: inline-block;
+	}
+
+	&:hover {
+		span {
+			color: var(--color-primary-light-2);
+		}
+	}
+
+	&-medium-img {
+		width: 40px;
+		margin-right: 5px;
+	}
+}
+
+.layout-logo-size {
+	width: 100%;
+	height: 50px;
+	display: flex;
+	cursor: pointer;
+	animation: logoAnimation 0.3s ease-in-out;
+
+	&-img {
+		width: 40px;
+		margin: auto;
+	}
+
+	&:hover {
+		img {
+			animation: logoAnimation 0.3s ease-in-out;
+		}
+	}
+}
+</style>

+ 71 - 0
src/layout/main/classic.vue

@@ -0,0 +1,71 @@
+<template>
+	<el-container class="layout-container flex-center">
+		<LayoutHeader />
+		<el-container class="layout-mian-height-50">
+			<LayoutAside />
+			<div class="flex-center layout-backtop">
+				<LayoutTagsView v-if="isTagsview" />
+				<LayoutMain ref="layoutMainRef" />
+			</div>
+		</el-container>
+	</el-container>
+</template>
+
+<script setup lang="ts" name="layoutClassic">
+import { defineAsyncComponent, computed, ref, watch, nextTick, onMounted } from 'vue';
+import { useRoute } from 'vue-router';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+
+// 引入组件
+const LayoutAside = defineAsyncComponent(() => import('/@/layout/component/aside.vue'));
+const LayoutHeader = defineAsyncComponent(() => import('/@/layout/component/header.vue'));
+const LayoutMain = defineAsyncComponent(() => import('/@/layout/component/main.vue'));
+const LayoutTagsView = defineAsyncComponent(() => import('/@/layout/navBars/tagsView/tagsView.vue'));
+
+// 定义变量内容
+const layoutMainRef = ref<InstanceType<typeof LayoutMain>>();
+const route = useRoute();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+
+// 判断是否显示 tasgview
+const isTagsview = computed(() => {
+	return themeConfig.value.isTagsview;
+});
+// 重置滚动条高度,更新子级 scrollbar
+const updateScrollbar = () => {
+	layoutMainRef.value?.layoutMainScrollbarRef.update();
+};
+// 重置滚动条高度,由于组件是异步引入的
+const initScrollBarHeight = () => {
+	nextTick(() => {
+		setTimeout(() => {
+			updateScrollbar();
+			// '!' not null 断言操作符,不执行运行时检查
+			layoutMainRef.value!.layoutMainScrollbarRef.wrapRef.scrollTop = 0;
+		}, 500);
+	});
+};
+// 页面加载时
+onMounted(() => {
+	initScrollBarHeight();
+});
+// 监听路由的变化,切换界面时,滚动条置顶
+watch(
+	() => route.path,
+	() => {
+		initScrollBarHeight();
+	}
+);
+// 监听 themeConfig 配置文件的变化,更新菜单 el-scrollbar 的高度
+watch(
+	themeConfig,
+	() => {
+		updateScrollbar();
+	},
+	{
+		deep: true,
+	}
+);
+</script>

+ 71 - 0
src/layout/main/columns.vue

@@ -0,0 +1,71 @@
+<template>
+	<el-container class="layout-container">
+		<ColumnsAside />
+		<el-container class="layout-columns-warp layout-container-view h100">
+			<LayoutAside />
+			<el-scrollbar ref="layoutScrollbarRef" class="layout-backtop">
+				<LayoutHeader />
+				<LayoutMain ref="layoutMainRef" />
+			</el-scrollbar>
+		</el-container>
+	</el-container>
+</template>
+
+<script setup lang="ts" name="layoutColumns">
+import { defineAsyncComponent, watch, onMounted, nextTick, ref } from 'vue';
+import { useRoute } from 'vue-router';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+
+// 引入组件
+const LayoutAside = defineAsyncComponent(() => import('/@/layout/component/aside.vue'));
+const LayoutHeader = defineAsyncComponent(() => import('/@/layout/component/header.vue'));
+const LayoutMain = defineAsyncComponent(() => import('/@/layout/component/main.vue'));
+const ColumnsAside = defineAsyncComponent(() => import('/@/layout/component/columnsAside.vue'));
+
+// 定义变量内容
+const layoutScrollbarRef = ref<RefType>('');
+const layoutMainRef = ref<InstanceType<typeof LayoutMain>>();
+const route = useRoute();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+
+// 重置滚动条高度
+const updateScrollbar = () => {
+	// 更新父级 scrollbar
+	layoutScrollbarRef.value.update();
+	// 更新子级 scrollbar
+	layoutMainRef.value!.layoutMainScrollbarRef.update();
+};
+// 重置滚动条高度,由于组件是异步引入的
+const initScrollBarHeight = () => {
+	nextTick(() => {
+		setTimeout(() => {
+			updateScrollbar();
+			layoutScrollbarRef.value.wrapRef.scrollTop = 0;
+			layoutMainRef.value!.layoutMainScrollbarRef.wrapRef.scrollTop = 0;
+		}, 500);
+	});
+};
+// 页面加载时
+onMounted(() => {
+	initScrollBarHeight();
+});
+// 监听路由的变化,切换界面时,滚动条置顶
+watch(
+	() => route.path,
+	() => {
+		initScrollBarHeight();
+	}
+);
+// 监听 themeConfig 配置文件的变化,更新菜单 el-scrollbar 的高度
+watch(
+	themeConfig,
+	() => {
+		updateScrollbar();
+	},
+	{
+		deep: true,
+	}
+);
+</script>

+ 71 - 0
src/layout/main/defaults.vue

@@ -0,0 +1,71 @@
+<template>
+	<el-container class="layout-container">
+		<LayoutAside />
+		<el-container class="layout-container-view h100">
+			<el-scrollbar ref="layoutScrollbarRef" class="layout-backtop">
+				<LayoutHeader />
+				<LayoutMain ref="layoutMainRef" />
+			</el-scrollbar>
+		</el-container>
+	</el-container>
+</template>
+
+<script setup lang="ts" name="layoutDefaults">
+import { defineAsyncComponent, watch, onMounted, nextTick, ref } from 'vue';
+import { useRoute } from 'vue-router';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import { NextLoading } from '/@/utils/loading';
+
+// 引入组件
+const LayoutAside = defineAsyncComponent(() => import('/@/layout/component/aside.vue'));
+const LayoutHeader = defineAsyncComponent(() => import('/@/layout/component/header.vue'));
+const LayoutMain = defineAsyncComponent(() => import('/@/layout/component/main.vue'));
+
+// 定义变量内容
+const layoutScrollbarRef = ref<RefType>('');
+const layoutMainRef = ref<InstanceType<typeof LayoutMain>>();
+const route = useRoute();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+
+// 重置滚动条高度
+const updateScrollbar = () => {
+	// 更新父级 scrollbar
+	layoutScrollbarRef.value.update();
+	// 更新子级 scrollbar
+	layoutMainRef.value!.layoutMainScrollbarRef.update();
+};
+// 重置滚动条高度,由于组件是异步引入的
+const initScrollBarHeight = () => {
+	nextTick(() => {
+		setTimeout(() => {
+			updateScrollbar();
+			layoutScrollbarRef.value.wrapRef.scrollTop = 0;
+			layoutMainRef.value!.layoutMainScrollbarRef.wrapRef.scrollTop = 0;
+		}, 500);
+	});
+};
+// 页面加载时
+onMounted(() => {
+	initScrollBarHeight();
+	NextLoading.done(600);
+});
+// 监听路由的变化,切换界面时,滚动条置顶
+watch(
+	() => route.path,
+	() => {
+		initScrollBarHeight();
+	}
+);
+// 监听 themeConfig 配置文件的变化,更新菜单 el-scrollbar 的高度
+watch(
+	themeConfig,
+	() => {
+		updateScrollbar();
+	},
+	{
+		deep: true,
+	}
+);
+</script>

+ 58 - 0
src/layout/main/transverse.vue

@@ -0,0 +1,58 @@
+<template>
+	<el-container class="layout-container flex-center layout-backtop">
+		<LayoutHeader />
+		<LayoutMain ref="layoutMainRef" />
+	</el-container>
+</template>
+
+<script setup lang="ts" name="layoutTransverse">
+import { defineAsyncComponent, ref, watch, nextTick, onMounted } from 'vue';
+import { useRoute } from 'vue-router';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+
+// 引入组件
+const LayoutHeader = defineAsyncComponent(() => import('/@/layout/component/header.vue'));
+const LayoutMain = defineAsyncComponent(() => import('/@/layout/component/main.vue'));
+
+// 定义变量内容
+const layoutMainRef = ref<InstanceType<typeof LayoutMain>>();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const route = useRoute();
+
+// 重置滚动条高度,更新子级 scrollbar
+const updateScrollbar = () => {
+	layoutMainRef.value!.layoutMainScrollbarRef.update();
+};
+// 重置滚动条高度,由于组件是异步引入的
+const initScrollBarHeight = () => {
+	nextTick(() => {
+		setTimeout(() => {
+			updateScrollbar();
+			layoutMainRef.value!.layoutMainScrollbarRef.wrapRef.scrollTop = 0;
+		}, 500);
+	});
+};
+// 页面加载时
+onMounted(() => {
+	initScrollBarHeight();
+});
+// 监听路由的变化,切换界面时,滚动条置顶
+watch(
+	() => route.path,
+	() => {
+		initScrollBarHeight();
+	}
+);
+// 监听 themeConfig 配置文件的变化,更新菜单 el-scrollbar 的高度
+watch(
+	themeConfig,
+	() => {
+		updateScrollbar();
+	},
+	{
+		deep: true,
+	}
+);
+</script>

+ 146 - 0
src/layout/navBars/breadcrumb/breadcrumb.vue

@@ -0,0 +1,146 @@
+<template>
+	<div v-if="isShowBreadcrumb" class="layout-navbars-breadcrumb">
+		<SvgIcon
+			class="layout-navbars-breadcrumb-icon"
+			:name="themeConfig.isCollapse ? 'ele-Expand' : 'ele-Fold'"
+			:size="16"
+			@click="onThemeConfigChange"
+		/>
+		<el-breadcrumb class="layout-navbars-breadcrumb-hide">
+			<transition-group name="breadcrumb">
+				<el-breadcrumb-item v-for="(v, k) in state.breadcrumbList" :key="!v.meta.tagsViewName ? v.meta.title : v.meta.tagsViewName">
+					<span v-if="k === state.breadcrumbList.length - 1" class="layout-navbars-breadcrumb-span">
+						<SvgIcon :name="v.meta.icon" class="layout-navbars-breadcrumb-iconfont" v-if="themeConfig.isBreadcrumbIcon" />
+						<div v-if="!v.meta.tagsViewName">{{ $t(v.meta.title) }}</div>
+						<div v-else>{{ v.meta.tagsViewName }}</div>
+					</span>
+					<a v-else @click.prevent="onBreadcrumbClick(v)">
+						<SvgIcon :name="v.meta.icon" class="layout-navbars-breadcrumb-iconfont" v-if="themeConfig.isBreadcrumbIcon" />{{ $t(v.meta.title) }}
+					</a>
+				</el-breadcrumb-item>
+			</transition-group>
+		</el-breadcrumb>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutBreadcrumb">
+import { reactive, computed, onMounted } from 'vue';
+import { onBeforeRouteUpdate, useRoute, useRouter } from 'vue-router';
+import { Local } from '/@/utils/storage';
+import other from '/@/utils/other';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import { useRoutesList } from '/@/stores/routesList';
+
+// 定义变量内容
+const stores = useRoutesList();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const { routesList } = storeToRefs(stores);
+const route = useRoute();
+const router = useRouter();
+const state = reactive<BreadcrumbState>({
+	breadcrumbList: [],
+	routeSplit: [],
+	routeSplitFirst: '',
+	routeSplitIndex: 1,
+});
+
+// 动态设置经典、横向布局不显示
+const isShowBreadcrumb = computed(() => {
+	initRouteSplit(route.path);
+	const { layout, isBreadcrumb } = themeConfig.value;
+	if (layout === 'classic' || layout === 'transverse') return false;
+	else return isBreadcrumb ? true : false;
+});
+// 面包屑点击时
+const onBreadcrumbClick = (v: RouteItem) => {
+	const { redirect, path } = v;
+	if (redirect) router.push(redirect);
+	else router.push(path);
+};
+// 展开/收起左侧菜单点击
+const onThemeConfigChange = () => {
+	themeConfig.value.isCollapse = !themeConfig.value.isCollapse;
+	setLocalThemeConfig();
+};
+// 存储布局配置
+const setLocalThemeConfig = () => {
+	Local.remove('themeConfig');
+	Local.set('themeConfig', themeConfig.value);
+};
+// 处理面包屑数据
+const getBreadcrumbList = (arr: RouteItems) => {
+	arr.forEach((item: RouteItem) => {
+		state.routeSplit.forEach((v: string, k: number, arrs: string[]) => {
+			if (state.routeSplitFirst === item.path) {
+				state.routeSplitFirst += `/${arrs[state.routeSplitIndex]}`;
+				state.breadcrumbList.push(item);
+				state.routeSplitIndex++;
+				if (item.children) getBreadcrumbList(item.children);
+			}
+		});
+	});
+};
+// 当前路由字符串切割成数组,并删除第一项空内容
+const initRouteSplit = (path: string) => {
+	if (!themeConfig.value.isBreadcrumb) return false;
+	state.breadcrumbList = [routesList.value[0]];
+	state.routeSplit = path.split('/');
+	state.routeSplit.shift();
+	state.routeSplitFirst = `/${state.routeSplit[0]}`;
+	state.routeSplitIndex = 1;
+	getBreadcrumbList(routesList.value);
+	if (route.name === 'home' || (route.name === 'notFound' && state.breadcrumbList.length > 1)) state.breadcrumbList.shift();
+	if (state.breadcrumbList.length > 0)
+		state.breadcrumbList[state.breadcrumbList.length - 1].meta.tagsViewName = other.setTagsViewNameI18n(<RouteToFrom>route);
+};
+// 页面加载时
+onMounted(() => {
+	initRouteSplit(route.path);
+});
+// 路由更新时
+onBeforeRouteUpdate((to) => {
+	initRouteSplit(to.path);
+});
+</script>
+
+<style scoped lang="scss">
+.layout-navbars-breadcrumb {
+	flex: 1;
+	height: inherit;
+	display: flex;
+	align-items: center;
+	.layout-navbars-breadcrumb-icon {
+		cursor: pointer;
+		font-size: 18px;
+		color: var(--next-bg-topBarColor);
+		height: 100%;
+		width: 40px;
+		opacity: 0.8;
+		&:hover {
+			opacity: 1;
+		}
+	}
+	.layout-navbars-breadcrumb-span {
+		display: flex;
+		opacity: 0.7;
+		color: var(--next-bg-topBarColor);
+	}
+	.layout-navbars-breadcrumb-iconfont {
+		font-size: 14px;
+		margin-right: 5px;
+	}
+	:deep(.el-breadcrumb__separator) {
+		opacity: 0.7;
+		color: var(--next-bg-topBarColor);
+	}
+	:deep(.el-breadcrumb__inner a, .el-breadcrumb__inner.is-link) {
+		font-weight: unset !important;
+		color: var(--next-bg-topBarColor);
+		&:hover {
+			color: var(--el-color-primary) !important;
+		}
+	}
+}
+</style>

+ 53 - 0
src/layout/navBars/breadcrumb/closeFull.vue

@@ -0,0 +1,53 @@
+<template>
+	<div class="layout-navbars-close-full" v-if="isTagsViewCurrenFull">
+		<div class="layout-navbars-close-full-icon">
+			<SvgIcon name="ele-Close" :title="$t('message.tagsView.closeFullscreen')" @click="onCloseFullscreen" />
+		</div>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutCloseFull">
+import { storeToRefs } from 'pinia';
+import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
+
+// 定义变量内容
+const stores = useTagsViewRoutes();
+const { isTagsViewCurrenFull } = storeToRefs(stores);
+
+// 关闭当前全屏
+const onCloseFullscreen = () => {
+	stores.setCurrenFullscreen(false);
+};
+</script>
+
+<style scoped lang="scss">
+.layout-navbars-close-full {
+	position: fixed;
+	z-index: 9999999999;
+	right: -30px;
+	top: -30px;
+	.layout-navbars-close-full-icon {
+		width: 60px;
+		height: 60px;
+		border-radius: 100%;
+		cursor: pointer;
+		background: rgba(0, 0, 0, 0.1);
+		transition: all 0.3s ease;
+		position: relative;
+		:deep(i) {
+			position: absolute;
+			left: 10px;
+			top: 35px;
+			color: #333333;
+			transition: all 0.3s ease;
+		}
+	}
+	&:hover {
+		transition: all 0.3s ease;
+		:deep(i) {
+			color: var(--el-color-primary);
+			transition: all 0.3s ease;
+		}
+	}
+}
+</style>

+ 107 - 0
src/layout/navBars/breadcrumb/index.vue

@@ -0,0 +1,107 @@
+<template>
+	<div class="layout-navbars-breadcrumb-index">
+		<Logo v-if="setIsShowLogo" />
+		<Breadcrumb />
+		<Horizontal :menuList="state.menuList" v-if="isLayoutTransverse" />
+		<User />
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutBreadcrumbIndex">
+import { defineAsyncComponent, computed, reactive, onMounted, onUnmounted } from 'vue';
+import { useRoute } from 'vue-router';
+import { storeToRefs } from 'pinia';
+import { useRoutesList } from '/@/stores/routesList';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import mittBus from '/@/utils/mitt';
+
+// 引入组件
+const Breadcrumb = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/breadcrumb.vue'));
+const User = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/user.vue'));
+const Logo = defineAsyncComponent(() => import('/@/layout/logo/index.vue'));
+const Horizontal = defineAsyncComponent(() => import('/@/layout/navMenu/horizontal.vue'));
+
+// 定义变量内容
+const stores = useRoutesList();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const { routesList } = storeToRefs(stores);
+const route = useRoute();
+const state = reactive({
+	menuList: [] as RouteItems,
+});
+
+// 设置 logo 显示/隐藏
+const setIsShowLogo = computed(() => {
+	let { isShowLogo, layout } = themeConfig.value;
+	return (isShowLogo && layout === 'classic') || (isShowLogo && layout === 'transverse');
+});
+// 设置是否显示横向导航菜单
+const isLayoutTransverse = computed(() => {
+	let { layout, isClassicSplitMenu } = themeConfig.value;
+	return layout === 'transverse' || (isClassicSplitMenu && layout === 'classic');
+});
+// 设置/过滤路由(非静态路由/是否显示在菜单中)
+const setFilterRoutes = () => {
+	let { layout, isClassicSplitMenu } = themeConfig.value;
+	if (layout === 'classic' && isClassicSplitMenu) {
+		state.menuList = delClassicChildren(filterRoutesFun(routesList.value));
+		const resData = setSendClassicChildren(route.path);
+		mittBus.emit('setSendClassicChildren', resData);
+	} else {
+		state.menuList = filterRoutesFun(routesList.value);
+	}
+};
+// 设置了分割菜单时,删除底下 children
+const delClassicChildren = <T extends ChilType>(arr: T[]): T[] => {
+	arr.map((v: T) => {
+		if (v.children) delete v.children;
+	});
+	return arr;
+};
+// 路由过滤递归函数
+const filterRoutesFun = <T extends RouteItem>(arr: T[]): T[] => {
+	return arr
+		.filter((item: T) => !item.meta?.isHide)
+		.map((item: T) => {
+			item = Object.assign({}, item);
+			if (item.children) item.children = filterRoutesFun(item.children);
+			return item;
+		});
+};
+// 传送当前子级数据到菜单中
+const setSendClassicChildren = (path: string) => {
+	const currentPathSplit = path.split('/');
+	let currentData: MittMenu = { children: [] };
+	filterRoutesFun(routesList.value).map((v: RouteItem, k: number) => {
+		if (v.path === `/${currentPathSplit[1]}`) {
+			v['k'] = k;
+			currentData['item'] = { ...v };
+			currentData['children'] = [{ ...v }];
+			if (v.children) currentData['children'] = v.children;
+		}
+	});
+	return currentData;
+};
+// 页面加载时
+onMounted(() => {
+	setFilterRoutes();
+	mittBus.on('getBreadcrumbIndexSetFilterRoutes', () => {
+		setFilterRoutes();
+	});
+});
+// 页面卸载时
+onUnmounted(() => {
+	mittBus.off('getBreadcrumbIndexSetFilterRoutes', () => {});
+});
+</script>
+
+<style scoped lang="scss">
+.layout-navbars-breadcrumb-index {
+	height: 50px;
+	display: flex;
+	align-items: center;
+	background: var(--next-bg-topBar);
+	border-bottom: 1px solid var(--next-border-color-light);
+}
+</style>

+ 124 - 0
src/layout/navBars/breadcrumb/search.vue

@@ -0,0 +1,124 @@
+<template>
+	<div class="layout-search-dialog">
+		<el-dialog v-model="state.isShowSearch" destroy-on-close :show-close="false">
+			<template #footer>
+				<el-autocomplete
+					v-model="state.menuQuery"
+					:fetch-suggestions="menuSearch"
+					:placeholder="$t('message.user.searchPlaceholder')"
+					ref="layoutMenuAutocompleteRef"
+					@select="onHandleSelect"
+					:fit-input-width="true"
+				>
+					<template #prefix>
+						<el-icon class="el-input__icon">
+							<ele-Search />
+						</el-icon>
+					</template>
+					<template #default="{ item }">
+						<div>
+							<SvgIcon :name="item.meta.icon" class="mr5" />
+							{{ $t(item.meta.title) }}
+						</div>
+					</template>
+				</el-autocomplete>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutBreadcrumbSearch">
+import { reactive, ref, nextTick } from 'vue';
+import { useRouter } from 'vue-router';
+import { useI18n } from 'vue-i18n';
+import { storeToRefs } from 'pinia';
+import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
+
+// 定义变量内容
+const storesTagsViewRoutes = useTagsViewRoutes();
+const { tagsViewRoutes } = storeToRefs(storesTagsViewRoutes);
+const layoutMenuAutocompleteRef = ref();
+const { t } = useI18n();
+const router = useRouter();
+const state = reactive<SearchState>({
+	isShowSearch: false,
+	menuQuery: '',
+	tagsViewList: [],
+});
+
+// 搜索弹窗打开
+const openSearch = () => {
+	state.menuQuery = '';
+	state.isShowSearch = true;
+	initTageView();
+	nextTick(() => {
+		setTimeout(() => {
+			layoutMenuAutocompleteRef.value.focus();
+		});
+	});
+};
+// 搜索弹窗关闭
+const closeSearch = () => {
+	state.isShowSearch = false;
+};
+// 菜单搜索数据过滤
+const menuSearch = (queryString: string, cb: Function) => {
+	let results = queryString ? state.tagsViewList.filter(createFilter(queryString)) : state.tagsViewList;
+	cb(results);
+};
+// 菜单搜索过滤
+const createFilter = (queryString: string) => {
+	return (restaurant: RouteItem) => {
+		return (
+			restaurant.path.toLowerCase().indexOf(queryString.toLowerCase()) > -1 ||
+			restaurant.meta!.title!.toLowerCase().indexOf(queryString.toLowerCase()) > -1 ||
+			t(restaurant.meta!.title!).indexOf(queryString.toLowerCase()) > -1
+		);
+	};
+};
+// 初始化菜单数据
+const initTageView = () => {
+	if (state.tagsViewList.length > 0) return false;
+	tagsViewRoutes.value.map((v: RouteItem) => {
+		if (!v.meta?.isHide) state.tagsViewList.push({ ...v });
+	});
+};
+// 当前菜单选中时
+const onHandleSelect = (item: RouteItem) => {
+	let { path, redirect } = item;
+	if (item.meta?.isLink && !item.meta?.isIframe) window.open(item.meta?.isLink);
+	else if (redirect) router.push(redirect);
+	else router.push(path);
+	closeSearch();
+};
+
+// 暴露变量
+defineExpose({
+	openSearch,
+});
+</script>
+
+<style scoped lang="scss">
+.layout-search-dialog {
+	position: relative;
+	:deep(.el-dialog) {
+		.el-dialog__header,
+		.el-dialog__body {
+			display: none;
+		}
+		.el-dialog__footer {
+			position: absolute;
+			left: 50%;
+			transform: translateX(-50%);
+			top: -53vh;
+		}
+	}
+	:deep(.el-autocomplete) {
+		width: 560px;
+		position: absolute;
+		top: 150px;
+		left: 50%;
+		transform: translateX(-50%);
+	}
+}
+</style>

+ 824 - 0
src/layout/navBars/breadcrumb/setings.vue

@@ -0,0 +1,824 @@
+<template>
+	<div class="layout-breadcrumb-seting">
+		<el-drawer
+			:title="$t('message.layout.configTitle')"
+			v-model="getThemeConfig.isDrawer"
+			direction="rtl"
+			destroy-on-close
+			size="260px"
+			@close="onDrawerClose"
+		>
+			<el-scrollbar class="layout-breadcrumb-seting-bar">
+				<!-- 全局主题 -->
+				<el-divider content-position="left">{{ $t('message.layout.oneTitle') }}</el-divider>
+				<div class="layout-breadcrumb-seting-bar-flex">
+					<div class="layout-breadcrumb-seting-bar-flex-label">primary</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-color-picker v-model="getThemeConfig.primary" size="default" @change="onColorPickerChange"> </el-color-picker>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsDark') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isIsDark" size="small" @change="onAddDarkChange"></el-switch>
+					</div>
+				</div>
+
+				<!-- 顶栏设置 -->
+				<el-divider content-position="left">{{ $t('message.layout.twoTopTitle') }}</el-divider>
+				<div class="layout-breadcrumb-seting-bar-flex">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoTopBar') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-color-picker v-model="getThemeConfig.topBar" size="default" @change="onBgColorPickerChange('topBar')"> </el-color-picker>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoTopBarColor') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-color-picker v-model="getThemeConfig.topBarColor" size="default" @change="onBgColorPickerChange('topBarColor')"> </el-color-picker>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt10">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoIsTopBarColorGradual') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isTopBarColorGradual" size="small" @change="onTopBarGradualChange"></el-switch>
+					</div>
+				</div>
+
+				<!-- 菜单设置 -->
+				<el-divider content-position="left">{{ $t('message.layout.twoMenuTitle') }}</el-divider>
+				<div class="layout-breadcrumb-seting-bar-flex">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoMenuBar') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-color-picker v-model="getThemeConfig.menuBar" size="default" @change="onBgColorPickerChange('menuBar')"> </el-color-picker>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoMenuBarColor') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-color-picker v-model="getThemeConfig.menuBarColor" size="default" @change="onBgColorPickerChange('menuBarColor')"> </el-color-picker>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoMenuBarActiveColor') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-color-picker
+							v-model="getThemeConfig.menuBarActiveColor"
+							size="default"
+							show-alpha
+							@change="onBgColorPickerChange('menuBarActiveColor')"
+						/>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt14">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoIsMenuBarColorGradual') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isMenuBarColorGradual" size="small" @change="onMenuBarGradualChange"></el-switch>
+					</div>
+				</div>
+
+				<!-- 分栏设置 -->
+				<el-divider content-position="left" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">{{
+					$t('message.layout.twoColumnsTitle')
+				}}</el-divider>
+				<div class="layout-breadcrumb-seting-bar-flex" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoColumnsMenuBar') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-color-picker
+							v-model="getThemeConfig.columnsMenuBar"
+							size="default"
+							@change="onBgColorPickerChange('columnsMenuBar')"
+							:disabled="getThemeConfig.layout !== 'columns'"
+						>
+						</el-color-picker>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoColumnsMenuBarColor') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-color-picker
+							v-model="getThemeConfig.columnsMenuBarColor"
+							size="default"
+							@change="onBgColorPickerChange('columnsMenuBarColor')"
+							:disabled="getThemeConfig.layout !== 'columns'"
+						>
+						</el-color-picker>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt14" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoIsColumnsMenuBarColorGradual') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch
+							v-model="getThemeConfig.isColumnsMenuBarColorGradual"
+							size="small"
+							@change="onColumnsMenuBarGradualChange"
+							:disabled="getThemeConfig.layout !== 'columns'"
+						></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt14" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoIsColumnsMenuHoverPreload') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch
+							v-model="getThemeConfig.isColumnsMenuHoverPreload"
+							size="small"
+							@change="onColumnsMenuHoverPreloadChange"
+							:disabled="getThemeConfig.layout !== 'columns'"
+						></el-switch>
+					</div>
+				</div>
+
+				<!-- 界面设置 -->
+				<el-divider content-position="left">{{ $t('message.layout.threeTitle') }}</el-divider>
+				<div class="layout-breadcrumb-seting-bar-flex" :style="{ opacity: getThemeConfig.layout === 'transverse' ? 0.5 : 1 }">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.threeIsCollapse') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch
+							v-model="getThemeConfig.isCollapse"
+							:disabled="getThemeConfig.layout === 'transverse'"
+							size="small"
+							@change="onThemeConfigChange"
+						></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15" :style="{ opacity: getThemeConfig.layout === 'transverse' ? 0.5 : 1 }">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.threeIsUniqueOpened') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch
+							v-model="getThemeConfig.isUniqueOpened"
+							:disabled="getThemeConfig.layout === 'transverse'"
+							size="small"
+							@change="setLocalThemeConfig"
+						></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.threeIsFixedHeader') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isFixedHeader" size="small" @change="onIsFixedHeaderChange"></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15" :style="{ opacity: getThemeConfig.layout !== 'classic' ? 0.5 : 1 }">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.threeIsClassicSplitMenu') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch
+							v-model="getThemeConfig.isClassicSplitMenu"
+							:disabled="getThemeConfig.layout !== 'classic'"
+							size="small"
+							@change="onClassicSplitMenuChange"
+						>
+						</el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.threeIsLockScreen') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isLockScreen" size="small" @change="setLocalThemeConfig"></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt11">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.threeLockScreenTime') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-input-number
+							v-model="getThemeConfig.lockScreenTime"
+							controls-position="right"
+							:min="1"
+							:max="9999"
+							@change="setLocalThemeConfig"
+							size="default"
+							style="width: 90px"
+						>
+						</el-input-number>
+					</div>
+				</div>
+
+				<!-- 界面显示 -->
+				<el-divider content-position="left">{{ $t('message.layout.fourTitle') }}</el-divider>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsShowLogo') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isShowLogo" size="small" @change="onIsShowLogoChange"></el-switch>
+					</div>
+				</div>
+				<div
+					class="layout-breadcrumb-seting-bar-flex mt15"
+					:style="{ opacity: getThemeConfig.layout === 'classic' || getThemeConfig.layout === 'transverse' ? 0.5 : 1 }"
+				>
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsBreadcrumb') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch
+							v-model="getThemeConfig.isBreadcrumb"
+							:disabled="getThemeConfig.layout === 'classic' || getThemeConfig.layout === 'transverse'"
+							size="small"
+							@change="onIsBreadcrumbChange"
+						></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsBreadcrumbIcon') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isBreadcrumbIcon" size="small" @change="setLocalThemeConfig"></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsTagsview') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isTagsview" size="small" @change="setLocalThemeConfig"></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsTagsviewIcon') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isTagsviewIcon" size="small" @change="setLocalThemeConfig"></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsCacheTagsView') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isCacheTagsView" size="small" @change="setLocalThemeConfig"></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15" :style="{ opacity: state.isMobile ? 0.5 : 1 }">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsSortableTagsView') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch
+							v-model="getThemeConfig.isSortableTagsView"
+							:disabled="state.isMobile ? true : false"
+							size="small"
+							@change="onSortableTagsViewChange"
+						></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsShareTagsView') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isShareTagsView" size="small" @change="onShareTagsViewChange"></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsFooter') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isFooter" size="small" @change="setLocalThemeConfig"></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsGrayscale') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isGrayscale" size="small" @change="onAddFilterChange('grayscale')"></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsInvert') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isInvert" size="small" @change="onAddFilterChange('invert')"></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsWartermark') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-switch v-model="getThemeConfig.isWartermark" size="small" @change="onWartermarkChange"></el-switch>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt14">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourWartermarkText') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-input v-model="getThemeConfig.wartermarkText" size="default" style="width: 90px" @input="onWartermarkTextInput"></el-input>
+					</div>
+				</div>
+
+				<!-- 其它设置 -->
+				<el-divider content-position="left">{{ $t('message.layout.fiveTitle') }}</el-divider>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fiveTagsStyle') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-select v-model="getThemeConfig.tagsStyle" placeholder="请选择" size="default" style="width: 90px" @change="setLocalThemeConfig">
+							<el-option label="风格1" value="tags-style-one"></el-option>
+							<el-option label="风格4" value="tags-style-four"></el-option>
+							<el-option label="风格5" value="tags-style-five"></el-option>
+						</el-select>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fiveAnimation') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-select v-model="getThemeConfig.animation" placeholder="请选择" size="default" style="width: 90px" @change="setLocalThemeConfig">
+							<el-option label="slide-right" value="slide-right"></el-option>
+							<el-option label="slide-left" value="slide-left"></el-option>
+							<el-option label="opacitys" value="opacitys"></el-option>
+						</el-select>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fiveColumnsAsideStyle') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-select
+							v-model="getThemeConfig.columnsAsideStyle"
+							placeholder="请选择"
+							size="default"
+							style="width: 90px"
+							:disabled="getThemeConfig.layout !== 'columns' ? true : false"
+							@change="setLocalThemeConfig"
+						>
+							<el-option label="圆角" value="columns-round"></el-option>
+							<el-option label="卡片" value="columns-card"></el-option>
+						</el-select>
+					</div>
+				</div>
+				<div class="layout-breadcrumb-seting-bar-flex mt15 mb27" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">
+					<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fiveColumnsAsideLayout') }}</div>
+					<div class="layout-breadcrumb-seting-bar-flex-value">
+						<el-select
+							v-model="getThemeConfig.columnsAsideLayout"
+							placeholder="请选择"
+							size="default"
+							style="width: 90px"
+							:disabled="getThemeConfig.layout !== 'columns' ? true : false"
+							@change="setLocalThemeConfig"
+						>
+							<el-option label="水平" value="columns-horizontal"></el-option>
+							<el-option label="垂直" value="columns-vertical"></el-option>
+						</el-select>
+					</div>
+				</div>
+
+				<!-- 布局切换 -->
+				<el-divider content-position="left">{{ $t('message.layout.sixTitle') }}</el-divider>
+				<div class="layout-drawer-content-flex">
+					<!-- defaults 布局 -->
+					<div class="layout-drawer-content-item" @click="onSetLayout('defaults')">
+						<section class="el-container el-circular" :class="{ 'drawer-layout-active': getThemeConfig.layout === 'defaults' }">
+							<aside class="el-aside" style="width: 20px"></aside>
+							<section class="el-container is-vertical">
+								<header class="el-header" style="height: 10px"></header>
+								<main class="el-main"></main>
+							</section>
+						</section>
+						<div class="layout-tips-warp" :class="{ 'layout-tips-warp-active': getThemeConfig.layout === 'defaults' }">
+							<div class="layout-tips-box">
+								<p class="layout-tips-txt">{{ $t('message.layout.sixDefaults') }}</p>
+							</div>
+						</div>
+					</div>
+					<!-- classic 布局 -->
+					<div class="layout-drawer-content-item" @click="onSetLayout('classic')">
+						<section class="el-container is-vertical el-circular" :class="{ 'drawer-layout-active': getThemeConfig.layout === 'classic' }">
+							<header class="el-header" style="height: 10px"></header>
+							<section class="el-container">
+								<aside class="el-aside" style="width: 20px"></aside>
+								<section class="el-container is-vertical">
+									<main class="el-main"></main>
+								</section>
+							</section>
+						</section>
+						<div class="layout-tips-warp" :class="{ 'layout-tips-warp-active': getThemeConfig.layout === 'classic' }">
+							<div class="layout-tips-box">
+								<p class="layout-tips-txt">{{ $t('message.layout.sixClassic') }}</p>
+							</div>
+						</div>
+					</div>
+					<!-- transverse 布局 -->
+					<div class="layout-drawer-content-item" @click="onSetLayout('transverse')">
+						<section class="el-container is-vertical el-circular" :class="{ 'drawer-layout-active': getThemeConfig.layout === 'transverse' }">
+							<header class="el-header" style="height: 10px"></header>
+							<section class="el-container">
+								<section class="el-container is-vertical">
+									<main class="el-main"></main>
+								</section>
+							</section>
+						</section>
+						<div class="layout-tips-warp" :class="{ 'layout-tips-warp-active': getThemeConfig.layout === 'transverse' }">
+							<div class="layout-tips-box">
+								<p class="layout-tips-txt">{{ $t('message.layout.sixTransverse') }}</p>
+							</div>
+						</div>
+					</div>
+					<!-- columns 布局 -->
+					<div class="layout-drawer-content-item" @click="onSetLayout('columns')">
+						<section class="el-container el-circular" :class="{ 'drawer-layout-active': getThemeConfig.layout === 'columns' }">
+							<aside class="el-aside-dark" style="width: 10px"></aside>
+							<aside class="el-aside" style="width: 20px"></aside>
+							<section class="el-container is-vertical">
+								<header class="el-header" style="height: 10px"></header>
+								<main class="el-main"></main>
+							</section>
+						</section>
+						<div class="layout-tips-warp" :class="{ 'layout-tips-warp-active': getThemeConfig.layout === 'columns' }">
+							<div class="layout-tips-box">
+								<p class="layout-tips-txt">{{ $t('message.layout.sixColumns') }}</p>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="copy-config">
+					<el-alert :title="$t('message.layout.tipText')" type="warning" :closable="false"> </el-alert>
+					<el-button size="default" class="copy-config-btn" type="primary" ref="copyConfigBtnRef" @click="onCopyConfigClick">
+						<el-icon class="mr5">
+							<ele-CopyDocument />
+						</el-icon>
+						{{ $t('message.layout.copyText') }}
+					</el-button>
+					<el-button size="default" class="copy-config-btn-reset" type="info" @click="onResetConfigClick">
+						<el-icon class="mr5">
+							<ele-RefreshRight />
+						</el-icon>
+						{{ $t('message.layout.resetText') }}
+					</el-button>
+				</div>
+			</el-scrollbar>
+		</el-drawer>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutBreadcrumbSeting">
+import { nextTick, onUnmounted, onMounted, computed, reactive } from 'vue';
+import { ElMessage } from 'element-plus';
+import { useI18n } from 'vue-i18n';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import { useChangeColor } from '/@/utils/theme';
+import { verifyAndSpace } from '/@/utils/toolsValidate';
+import { Local } from '/@/utils/storage';
+import Watermark from '/@/utils/wartermark';
+import commonFunction from '/@/utils/commonFunction';
+import other from '/@/utils/other';
+import mittBus from '/@/utils/mitt';
+
+// 定义变量内容
+const { locale } = useI18n();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const { copyText } = commonFunction();
+const { getLightColor, getDarkColor } = useChangeColor();
+const state = reactive({
+	isMobile: false,
+});
+
+// 获取布局配置信息
+const getThemeConfig = computed(() => {
+	return themeConfig.value;
+});
+// 1、全局主题
+const onColorPickerChange = () => {
+	if (!getThemeConfig.value.primary) return ElMessage.warning('全局主题 primary 颜色值不能为空');
+	// 颜色加深
+	document.documentElement.style.setProperty('--el-color-primary-dark-2', `${getDarkColor(getThemeConfig.value.primary, 0.1)}`);
+	document.documentElement.style.setProperty('--el-color-primary', getThemeConfig.value.primary);
+	// 颜色变浅
+	for (let i = 1; i <= 9; i++) {
+		document.documentElement.style.setProperty(`--el-color-primary-light-${i}`, `${getLightColor(getThemeConfig.value.primary, i / 10)}`);
+	}
+	setDispatchThemeConfig();
+};
+// 2、菜单 / 顶栏
+const onBgColorPickerChange = (bg: string) => {
+	document.documentElement.style.setProperty(`--next-bg-${bg}`, themeConfig.value[bg]);
+	if (bg === 'menuBar') {
+		document.documentElement.style.setProperty(`--next-bg-menuBar-light-1`, getLightColor(getThemeConfig.value.menuBar, 0.05));
+	}
+	onTopBarGradualChange();
+	onMenuBarGradualChange();
+	onColumnsMenuBarGradualChange();
+	setDispatchThemeConfig();
+};
+// 2、菜单 / 顶栏 --> 顶栏背景渐变
+const onTopBarGradualChange = () => {
+	setGraduaFun('.layout-navbars-breadcrumb-index', getThemeConfig.value.isTopBarColorGradual, getThemeConfig.value.topBar);
+};
+// 2、菜单 / 顶栏 --> 菜单背景渐变
+const onMenuBarGradualChange = () => {
+	setGraduaFun('.layout-container .el-aside', getThemeConfig.value.isMenuBarColorGradual, getThemeConfig.value.menuBar);
+};
+// 2、菜单 / 顶栏 --> 分栏菜单背景渐变
+const onColumnsMenuBarGradualChange = () => {
+	setGraduaFun('.layout-container .layout-columns-aside', getThemeConfig.value.isColumnsMenuBarColorGradual, getThemeConfig.value.columnsMenuBar);
+};
+// 2、菜单 / 顶栏 --> 背景渐变函数
+const setGraduaFun = (el: string, bool: boolean, color: string) => {
+	setTimeout(() => {
+		let els = document.querySelector(el);
+		if (!els) return false;
+		document.documentElement.style.setProperty('--el-menu-bg-color', document.documentElement.style.getPropertyValue('--next-bg-menuBar'));
+		if (bool) els.setAttribute('style', `background:linear-gradient(to bottom left , ${color}, ${getLightColor(color, 0.6)}) !important;`);
+		else els.setAttribute('style', ``);
+		setLocalThemeConfig();
+	}, 200);
+};
+// 2、分栏设置 ->
+const onColumnsMenuHoverPreloadChange = () => {
+	setLocalThemeConfig();
+};
+// 3、界面设置 --> 菜单水平折叠
+const onThemeConfigChange = () => {
+	setDispatchThemeConfig();
+};
+// 3、界面设置 --> 固定 Header
+const onIsFixedHeaderChange = () => {
+	getThemeConfig.value.isFixedHeaderChange = getThemeConfig.value.isFixedHeader ? false : true;
+	setLocalThemeConfig();
+};
+// 3、界面设置 --> 经典布局分割菜单
+const onClassicSplitMenuChange = () => {
+	getThemeConfig.value.isBreadcrumb = false;
+	setLocalThemeConfig();
+	mittBus.emit('getBreadcrumbIndexSetFilterRoutes');
+};
+// 4、界面显示 --> 侧边栏 Logo
+const onIsShowLogoChange = () => {
+	getThemeConfig.value.isShowLogoChange = getThemeConfig.value.isShowLogo ? false : true;
+	setLocalThemeConfig();
+};
+// 4、界面显示 --> 面包屑 Breadcrumb
+const onIsBreadcrumbChange = () => {
+	if (getThemeConfig.value.layout === 'classic') {
+		getThemeConfig.value.isClassicSplitMenu = false;
+	}
+	setLocalThemeConfig();
+};
+// 4、界面显示 --> 开启 TagsView 拖拽
+const onSortableTagsViewChange = () => {
+	mittBus.emit('openOrCloseSortable');
+	setLocalThemeConfig();
+};
+// 4、界面显示 --> 开启 TagsView 共用
+const onShareTagsViewChange = () => {
+	mittBus.emit('openShareTagsView');
+	setLocalThemeConfig();
+};
+// 4、界面显示 --> 灰色模式/色弱模式
+const onAddFilterChange = (attr: string) => {
+	if (attr === 'grayscale') {
+		if (getThemeConfig.value.isGrayscale) getThemeConfig.value.isInvert = false;
+	} else {
+		if (getThemeConfig.value.isInvert) getThemeConfig.value.isGrayscale = false;
+	}
+	const cssAttr =
+		attr === 'grayscale' ? `grayscale(${getThemeConfig.value.isGrayscale ? 1 : 0})` : `invert(${getThemeConfig.value.isInvert ? '80%' : '0%'})`;
+	const appEle = document.body;
+	appEle.setAttribute('style', `filter: ${cssAttr}`);
+	setLocalThemeConfig();
+};
+// 4、界面显示 --> 深色模式
+const onAddDarkChange = () => {
+	const body = document.documentElement as HTMLElement;
+	if (getThemeConfig.value.isIsDark) body.setAttribute('data-theme', 'dark');
+	else body.setAttribute('data-theme', '');
+};
+// 4、界面显示 --> 开启水印
+const onWartermarkChange = () => {
+	getThemeConfig.value.isWartermark ? Watermark.set(getThemeConfig.value.wartermarkText) : Watermark.del();
+	setLocalThemeConfig();
+};
+// 4、界面显示 --> 水印文案
+const onWartermarkTextInput = (val: string) => {
+	getThemeConfig.value.wartermarkText = verifyAndSpace(val);
+	if (getThemeConfig.value.wartermarkText === '') return false;
+	if (getThemeConfig.value.isWartermark) Watermark.set(getThemeConfig.value.wartermarkText);
+	setLocalThemeConfig();
+};
+// 5、布局切换
+const onSetLayout = (layout: string) => {
+	Local.set('oldLayout', layout);
+	if (getThemeConfig.value.layout === layout) return false;
+	if (layout === 'transverse') getThemeConfig.value.isCollapse = false;
+	getThemeConfig.value.layout = layout;
+	getThemeConfig.value.isDrawer = false;
+	initLayoutChangeFun();
+};
+// 设置布局切换函数
+const initLayoutChangeFun = () => {
+	onBgColorPickerChange('menuBar');
+	onBgColorPickerChange('menuBarColor');
+	onBgColorPickerChange('menuBarActiveColor');
+	onBgColorPickerChange('topBar');
+	onBgColorPickerChange('topBarColor');
+	onBgColorPickerChange('columnsMenuBar');
+	onBgColorPickerChange('columnsMenuBarColor');
+};
+// 关闭弹窗时,初始化变量。变量用于处理 layoutScrollbarRef.value.update() 更新滚动条高度
+const onDrawerClose = () => {
+	getThemeConfig.value.isFixedHeaderChange = false;
+	getThemeConfig.value.isShowLogoChange = false;
+	getThemeConfig.value.isDrawer = false;
+	setLocalThemeConfig();
+};
+// 布局配置弹窗打开
+const openDrawer = () => {
+	getThemeConfig.value.isDrawer = true;
+};
+// 触发 store 布局配置更新
+const setDispatchThemeConfig = () => {
+	setLocalThemeConfig();
+	setLocalThemeConfigStyle();
+};
+// 存储布局配置
+const setLocalThemeConfig = () => {
+	Local.remove('themeConfig');
+	Local.set('themeConfig', getThemeConfig.value);
+};
+// 存储布局配置全局主题样式(html根标签)
+const setLocalThemeConfigStyle = () => {
+	Local.set('themeConfigStyle', document.documentElement.style.cssText);
+};
+// 一键复制配置
+const onCopyConfigClick = () => {
+	let copyThemeConfig = Local.get('themeConfig');
+	copyThemeConfig.isDrawer = false;
+	copyText(JSON.stringify(copyThemeConfig)).then(() => {
+		getThemeConfig.value.isDrawer = false;
+	});
+};
+// 一键恢复默认
+const onResetConfigClick = () => {
+	Local.clear();
+	window.location.reload();
+	// @ts-ignore
+	Local.set('version', __VERSION__);
+};
+// 初始化菜单样式等
+const initSetStyle = () => {
+	// 2、菜单 / 顶栏 --> 顶栏背景渐变
+	onTopBarGradualChange();
+	// 2、菜单 / 顶栏 --> 菜单背景渐变
+	onMenuBarGradualChange();
+	// 2、菜单 / 顶栏 --> 分栏菜单背景渐变
+	onColumnsMenuBarGradualChange();
+};
+onMounted(() => {
+	nextTick(() => {
+		// 判断当前布局是否不相同,不相同则初始化当前布局的样式,防止监听窗口大小改变时,布局配置logo、菜单背景等部分布局失效问题
+		if (!Local.get('frequency')) initLayoutChangeFun();
+		Local.set('frequency', 1);
+		// 监听窗口大小改变,非默认布局,设置成默认布局(适配移动端)
+		mittBus.on('layoutMobileResize', (res: LayoutMobileResize) => {
+			getThemeConfig.value.layout = res.layout;
+			getThemeConfig.value.isDrawer = false;
+			initLayoutChangeFun();
+			state.isMobile = other.isMobile();
+		});
+		setTimeout(() => {
+			// 默认样式
+			onColorPickerChange();
+			// 灰色模式
+			if (getThemeConfig.value.isGrayscale) onAddFilterChange('grayscale');
+			// 色弱模式
+			if (getThemeConfig.value.isInvert) onAddFilterChange('invert');
+			// 深色模式
+			if (getThemeConfig.value.isIsDark) onAddDarkChange();
+			// 开启水印
+			onWartermarkChange();
+			// 语言国际化
+			if (Local.get('themeConfig')) locale.value = Local.get('themeConfig').globalI18n;
+			// 初始化菜单样式等
+			initSetStyle();
+		}, 100);
+	});
+});
+onUnmounted(() => {
+	mittBus.off('layoutMobileResize', () => {});
+});
+
+// 暴露变量
+defineExpose({
+	openDrawer,
+});
+</script>
+
+<style scoped lang="scss">
+.layout-breadcrumb-seting-bar {
+	height: calc(100vh - 50px);
+	padding: 0 15px;
+	:deep(.el-scrollbar__view) {
+		overflow-x: hidden !important;
+	}
+	.layout-breadcrumb-seting-bar-flex {
+		display: flex;
+		align-items: center;
+		margin-bottom: 5px;
+		&-label {
+			flex: 1;
+			color: var(--el-text-color-primary);
+		}
+	}
+	.layout-drawer-content-flex {
+		overflow: hidden;
+		display: flex;
+		flex-wrap: wrap;
+		align-content: flex-start;
+		margin: 0 -5px;
+		.layout-drawer-content-item {
+			width: 50%;
+			height: 70px;
+			cursor: pointer;
+			border: 1px solid transparent;
+			position: relative;
+			padding: 5px;
+			.el-container {
+				height: 100%;
+				.el-aside-dark {
+					background-color: var(--next-color-seting-header);
+				}
+				.el-aside {
+					background-color: var(--next-color-seting-aside);
+				}
+				.el-header {
+					background-color: var(--next-color-seting-header);
+				}
+				.el-main {
+					background-color: var(--next-color-seting-main);
+				}
+			}
+			.el-circular {
+				border-radius: 2px;
+				overflow: hidden;
+				border: 1px solid transparent;
+				transition: all 0.3s ease-in-out;
+			}
+			.drawer-layout-active {
+				border: 1px solid;
+				border-color: var(--el-color-primary);
+			}
+			.layout-tips-warp,
+			.layout-tips-warp-active {
+				transition: all 0.3s ease-in-out;
+				position: absolute;
+				left: 50%;
+				top: 50%;
+				transform: translate(-50%, -50%);
+				border: 1px solid;
+				border-color: var(--el-color-primary-light-5);
+				border-radius: 100%;
+				padding: 4px;
+				.layout-tips-box {
+					transition: inherit;
+					width: 30px;
+					height: 30px;
+					z-index: 9;
+					border: 1px solid;
+					border-color: var(--el-color-primary-light-5);
+					border-radius: 100%;
+					.layout-tips-txt {
+						transition: inherit;
+						position: relative;
+						top: 5px;
+						font-size: 12px;
+						line-height: 1;
+						letter-spacing: 2px;
+						white-space: nowrap;
+						color: var(--el-color-primary-light-5);
+						text-align: center;
+						transform: rotate(30deg);
+						left: -1px;
+						background-color: var(--next-color-seting-main);
+						width: 32px;
+						height: 17px;
+						line-height: 17px;
+					}
+				}
+			}
+			.layout-tips-warp-active {
+				border: 1px solid;
+				border-color: var(--el-color-primary);
+				.layout-tips-box {
+					border: 1px solid;
+					border-color: var(--el-color-primary);
+					.layout-tips-txt {
+						color: var(--el-color-primary) !important;
+						background-color: var(--next-color-seting-main) !important;
+					}
+				}
+			}
+			&:hover {
+				.el-circular {
+					transition: all 0.3s ease-in-out;
+					border: 1px solid;
+					border-color: var(--el-color-primary);
+				}
+				.layout-tips-warp {
+					transition: all 0.3s ease-in-out;
+					border-color: var(--el-color-primary);
+					.layout-tips-box {
+						transition: inherit;
+						border-color: var(--el-color-primary);
+						.layout-tips-txt {
+							transition: inherit;
+							color: var(--el-color-primary) !important;
+							background-color: var(--next-color-seting-main) !important;
+						}
+					}
+				}
+			}
+		}
+	}
+	.copy-config {
+		margin: 10px 0;
+		.copy-config-btn {
+			width: 100%;
+			margin-top: 15px;
+		}
+		.copy-config-btn-reset {
+			width: 100%;
+			margin: 10px 0 0;
+		}
+	}
+}
+</style>

+ 325 - 0
src/layout/navBars/breadcrumb/user.vue

@@ -0,0 +1,325 @@
+<template>
+	<div class="layout-navbars-breadcrumb-user pr15" :style="{ flex: layoutUserFlexNum }">
+		<el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onComponentSizeChange">
+			<div class="layout-navbars-breadcrumb-user-icon">
+				<i class="iconfont icon-ziti" :title="$t('message.user.title0')"></i>
+			</div>
+			<template #dropdown>
+				<el-dropdown-menu>
+					<el-dropdown-item command="large" :disabled="state.disabledSize === 'large'">{{ $t('message.user.dropdownLarge') }}</el-dropdown-item>
+					<el-dropdown-item command="default" :disabled="state.disabledSize === 'default'">{{ $t('message.user.dropdownDefault') }}</el-dropdown-item>
+					<el-dropdown-item command="small" :disabled="state.disabledSize === 'small'">{{ $t('message.user.dropdownSmall') }}</el-dropdown-item>
+				</el-dropdown-menu>
+			</template>
+		</el-dropdown>
+		<el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onLanguageChange">
+			<div class="layout-navbars-breadcrumb-user-icon">
+				<i
+					class="iconfont"
+					:class="state.disabledI18n === 'en' ? 'icon-fuhao-yingwen' : 'icon-fuhao-zhongwen'"
+					:title="$t('message.user.title1')"
+				></i>
+			</div>
+			<template #dropdown>
+				<el-dropdown-menu>
+					<el-dropdown-item command="zh-cn" :disabled="state.disabledI18n === 'zh-cn'">简体中文</el-dropdown-item>
+					<el-dropdown-item command="en" :disabled="state.disabledI18n === 'en'">English</el-dropdown-item>
+					<el-dropdown-item command="zh-tw" :disabled="state.disabledI18n === 'zh-tw'">繁體中文</el-dropdown-item>
+				</el-dropdown-menu>
+			</template>
+		</el-dropdown>
+		<div class="layout-navbars-breadcrumb-user-icon" @click="onSearchClick">
+			<el-icon :title="$t('message.user.title2')">
+				<ele-Search />
+			</el-icon>
+		</div>
+		<div class="layout-navbars-breadcrumb-user-icon" @click="onLayoutSetingClick">
+			<i class="icon-skin iconfont" :title="$t('message.user.title3')"></i>
+		</div>
+		<div class="layout-navbars-breadcrumb-user-icon">
+			<el-popover placement="bottom" trigger="click" transition="el-zoom-in-top" :width="300" :persistent="false">
+				<template #reference>
+					<el-badge :value="messageCenter.unread" :hidden="messageCenter.unread === 0">
+						<el-icon :title="$t('message.user.title4')">
+							<ele-Bell />
+						</el-icon>
+					</el-badge>
+				</template>
+				<template #default>
+					<UserNews />
+				</template>
+			</el-popover>
+		</div>
+		<div class="layout-navbars-breadcrumb-user-icon mr10" @click="onScreenfullClick">
+			<i
+				class="iconfont"
+				:title="state.isScreenfull ? $t('message.user.title6') : $t('message.user.title5')"
+				:class="!state.isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'"
+			></i>
+		</div>
+    <div>
+      <span v-if="!isSocketOpen">
+        <el-popconfirm
+          width="250"
+          ref="onlinePopoverRef"
+          :confirm-button-text="$t('message.user.retry')"
+          :icon="InfoFilled"
+          trigger="hover"
+          icon-color="#626AEF"
+          :title="$t('message.user.onlinePrompt')"
+          @confirm="onlineConfirmEvent"
+        >
+          <template #reference>
+            <el-badge is-dot class="item" :class="{'online-status': isSocketOpen,'online-down':!isSocketOpen}">
+              <img :src="userInfos.avatar || headerImage" class="layout-navbars-breadcrumb-user-link-photo mr5" />
+            </el-badge>
+          </template>
+        </el-popconfirm>
+      </span>
+    </div>
+		<el-dropdown :show-timeout="70" :hide-timeout="50" @command="onHandleCommandClick">
+			<span class="layout-navbars-breadcrumb-user-link">
+        <span v-if="isSocketOpen">
+          <el-badge is-dot class="item" :class="{'online-status': isSocketOpen,'online-down':!isSocketOpen}">
+            <img :src="userInfos.avatar || headerImage" class="layout-navbars-breadcrumb-user-link-photo mr5" />
+          </el-badge>
+        </span>
+				{{ userInfos.username === '' ? 'common' : userInfos.username }}
+				<el-icon class="el-icon--right">
+					<ele-ArrowDown />
+				</el-icon>
+			</span>
+			<template #dropdown>
+				<el-dropdown-menu>
+					<el-dropdown-item command="/home">{{ $t('message.user.dropdown1') }}</el-dropdown-item>
+					<el-dropdown-item command="/personal">{{ $t('message.user.dropdown2') }}</el-dropdown-item>
+					<el-dropdown-item command="wareHouse">{{ $t('message.user.dropdown6') }}</el-dropdown-item>
+					<el-dropdown-item divided command="logOut">{{ $t('message.user.dropdown5') }}</el-dropdown-item>
+				</el-dropdown-menu>
+			</template>
+		</el-dropdown>
+		<Search ref="searchRef" />
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutBreadcrumbUser">
+import { defineAsyncComponent, ref, computed, reactive, onMounted, unref, watch } from 'vue';
+import { useRouter } from 'vue-router';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import screenfull from 'screenfull';
+import { useI18n } from 'vue-i18n';
+import { storeToRefs } from 'pinia';
+import { useUserInfo } from '/@/stores/userInfo';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import other from '/@/utils/other';
+import mittBus from '/@/utils/mitt';
+import { Session, Local } from '/@/utils/storage';
+import headerImage from '/@/assets/img/headerImage.png';
+import websocket from '/@/utils/websocket';
+import { InfoFilled } from '@element-plus/icons-vue'
+// 引入组件
+const UserNews = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/userNews.vue'));
+const Search = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/search.vue'));
+
+// 定义变量内容
+const { locale, t } = useI18n();
+const router = useRouter();
+const stores = useUserInfo();
+const storesThemeConfig = useThemeConfig();
+const { userInfos } = storeToRefs(stores);
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const searchRef = ref();
+const state = reactive({
+	isScreenfull: false,
+	disabledI18n: 'zh-cn',
+	disabledSize: 'large',
+});
+
+// 设置分割样式
+const layoutUserFlexNum = computed(() => {
+	let num: string | number = '';
+	const { layout, isClassicSplitMenu } = themeConfig.value;
+	const layoutArr: string[] = ['defaults', 'columns'];
+	if (layoutArr.includes(layout) || (layout === 'classic' && !isClassicSplitMenu)) num = '1';
+	else num = '';
+	return num;
+});
+
+// 定义变量内容
+const { isSocketOpen } = storeToRefs(useUserInfo());
+
+// websocket状态
+const onlinePopoverRef = ref()
+const onlineConfirmEvent = () => {
+  if (!isSocketOpen.value) {
+      websocket.is_reonnect = true
+      websocket.reconnect_current = 1
+      websocket.reconnect()
+  }
+  // 手动隐藏弹出
+  unref(onlinePopoverRef).popperRef?.delayHide?.()
+}
+// 全屏点击时
+const onScreenfullClick = () => {
+	if (!screenfull.isEnabled) {
+		ElMessage.warning('暂不不支持全屏');
+		return false;
+	}
+	screenfull.toggle();
+	screenfull.on('change', () => {
+		if (screenfull.isFullscreen) state.isScreenfull = true;
+		else state.isScreenfull = false;
+	});
+};
+// 布局配置 icon 点击时
+const onLayoutSetingClick = () => {
+	mittBus.emit('openSetingsDrawer');
+};
+// 下拉菜单点击时
+const onHandleCommandClick = (path: string) => {
+	if (path === 'logOut') {
+		ElMessageBox({
+			closeOnClickModal: false,
+			closeOnPressEscape: false,
+			title: t('message.user.logOutTitle'),
+			message: t('message.user.logOutMessage'),
+			showCancelButton: true,
+			confirmButtonText: t('message.user.logOutConfirm'),
+			cancelButtonText: t('message.user.logOutCancel'),
+			buttonSize: 'default',
+			beforeClose: (action, instance, done) => {
+				if (action === 'confirm') {
+					instance.confirmButtonLoading = true;
+					instance.confirmButtonText = t('message.user.logOutExit');
+					setTimeout(() => {
+						done();
+						setTimeout(() => {
+							instance.confirmButtonLoading = false;
+						}, 300);
+					}, 700);
+				} else {
+					done();
+				}
+			},
+		})
+			.then(async () => {
+				// 清除缓存/token等
+				Session.clear();
+				// 使用 reload 时,不需要调用 resetRoute() 重置路由
+				window.location.reload();
+			})
+			.catch(() => {});
+	} else if (path === 'wareHouse') {
+		window.open('https://gitee.com/huge-dream/django-vue3-admin');
+	} else {
+		router.push(path);
+	}
+};
+// 菜单搜索点击
+const onSearchClick = () => {
+	searchRef.value.openSearch();
+};
+// 组件大小改变
+const onComponentSizeChange = (size: string) => {
+	Local.remove('themeConfig');
+	themeConfig.value.globalComponentSize = size;
+	Local.set('themeConfig', themeConfig.value);
+	initI18nOrSize('globalComponentSize', 'disabledSize');
+	window.location.reload();
+};
+// 语言切换
+const onLanguageChange = (lang: string) => {
+	Local.remove('themeConfig');
+	themeConfig.value.globalI18n = lang;
+	Local.set('themeConfig', themeConfig.value);
+	locale.value = lang;
+	other.useTitle();
+	initI18nOrSize('globalI18n', 'disabledI18n');
+};
+// 初始化组件大小/i18n
+const initI18nOrSize = (value: string, attr: string) => {
+	state[attr] = Local.get('themeConfig')[value];
+};
+// 页面加载时
+onMounted(() => {
+	if (Local.get('themeConfig')) {
+		initI18nOrSize('globalComponentSize', 'disabledSize');
+		initI18nOrSize('globalI18n', 'disabledI18n');
+	}
+});
+
+//消息中心的未读数量
+import { messageCenterStore } from '/@/stores/messageCenter';
+const messageCenter = messageCenterStore();
+</script>
+
+<style scoped lang="scss">
+.layout-navbars-breadcrumb-user {
+	display: flex;
+	align-items: center;
+	justify-content: flex-end;
+	&-link {
+		height: 100%;
+		display: flex;
+		align-items: center;
+		white-space: nowrap;
+		&-photo {
+			width: 25px;
+			height: 25px;
+			border-radius: 100%;
+		}
+	}
+	&-icon {
+		padding: 0 10px;
+		cursor: pointer;
+		color: var(--next-bg-topBarColor);
+		height: 50px;
+		line-height: 50px;
+		display: flex;
+		align-items: center;
+		&:hover {
+			background: var(--next-color-user-hover);
+			i {
+				display: inline-block;
+				animation: logoAnimation 0.3s ease-in-out;
+			}
+		}
+	}
+	:deep(.el-dropdown) {
+		color: var(--next-bg-topBarColor);
+	}
+	:deep(.el-badge) {
+		height: 40px;
+		line-height: 40px;
+		display: flex;
+		align-items: center;
+	}
+	:deep(.el-badge__content.is-fixed) {
+		top: 12px;
+	}
+  .online-status{
+    cursor: pointer;
+    :deep(.el-badge__content.is-fixed) {
+      top: 30px;
+      font-size: 14px;
+      left: 5px;
+      height: 12px;
+      width: 12px;
+      padding: 0;
+      background-color: #18bc9c;
+    }
+  }
+  .online-down{
+    cursor: pointer;
+    :deep(.el-badge__content.is-fixed) {
+      top: 30px;
+      font-size: 14px;
+      left: 5px;
+      height: 12px;
+      width: 12px;
+      padding: 0;
+      background-color: #979b9c;
+    }
+  }
+}
+</style>

+ 114 - 0
src/layout/navBars/breadcrumb/userNews.vue

@@ -0,0 +1,114 @@
+<template>
+	<div class="layout-navbars-breadcrumb-user-news">
+		<div class="head-box">
+			<div class="head-box-title">{{ $t('message.user.newTitle') }}</div>
+<!--			<div class="head-box-btn" v-if="state.newsList.length > 0" @click="onAllReadClick">{{ $t('message.user.newBtn') }}</div>-->
+		</div>
+		<div class="content-box">
+			<template v-if="state.newsList.length > 0">
+				<div class="content-box-item" v-for="(v, k) in state.newsList" :key="k">
+					<div>{{ v.title }}</div>
+					<div class="content-box-msg">
+						<div v-html="v.content"></div>
+					</div>
+					<div class="content-box-time">{{ v.create_datetime }}</div>
+				</div>
+			</template>
+			<el-empty :description="$t('message.user.newDesc')" v-else></el-empty>
+		</div>
+		<div class="foot-box" @click="onGoToGiteeClick" v-if="state.newsList.length > 0">{{ $t('message.user.newGo') }}</div>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutBreadcrumbUserNews">
+import { reactive,onBeforeMount,ref,onMounted } from 'vue';
+
+// 定义变量内容
+const state = reactive({
+	newsList: [] as any,
+});
+
+// 全部已读点击
+const onAllReadClick = () => {
+	state.newsList = [];
+};
+// 前往通知中心点击
+import {useRouter } from "vue-router";
+const route = useRouter()
+const onGoToGiteeClick = () => {
+  route.push('/messageCenter')
+};
+//获取最新消息
+import { request } from "/@/utils/service";
+const getLastMsg= ()=>{
+  request({
+    url: '/api/system/message_center/get_newest_msg/',
+    method: 'get',
+    params: {}
+  }).then((res:any) => {
+    const { data } = res
+    state.newsList= [data]
+  })
+}
+onMounted(()=>{
+  getLastMsg()
+})
+
+</script>
+
+<style scoped lang="scss">
+.layout-navbars-breadcrumb-user-news {
+	.head-box {
+		display: flex;
+		border-bottom: 1px solid var(--el-border-color-lighter);
+		box-sizing: border-box;
+		color: var(--el-text-color-primary);
+		justify-content: space-between;
+		height: 35px;
+		align-items: center;
+		.head-box-btn {
+			color: var(--el-color-primary);
+			font-size: 13px;
+			cursor: pointer;
+			opacity: 0.8;
+			&:hover {
+				opacity: 1;
+			}
+		}
+	}
+	.content-box {
+		font-size: 13px;
+		.content-box-item {
+			padding-top: 12px;
+			&:last-of-type {
+				padding-bottom: 12px;
+			}
+			.content-box-msg {
+				color: var(--el-text-color-secondary);
+				margin-top: 5px;
+				margin-bottom: 5px;
+			}
+			.content-box-time {
+				color: var(--el-text-color-secondary);
+			}
+		}
+	}
+	.foot-box {
+		height: 35px;
+		color: var(--el-color-primary);
+		font-size: 13px;
+		cursor: pointer;
+		opacity: 0.8;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		border-top: 1px solid var(--el-border-color-lighter);
+		&:hover {
+			opacity: 1;
+		}
+	}
+	:deep(.el-empty__description p) {
+		font-size: 13px;
+	}
+}
+</style>

+ 35 - 0
src/layout/navBars/index.vue

@@ -0,0 +1,35 @@
+<template>
+	<div class="layout-navbars-container">
+		<BreadcrumbIndex />
+		<TagsView v-if="setShowTagsView" />
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutNavBars">
+import { defineAsyncComponent, computed } from 'vue';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+
+// 引入组件
+const BreadcrumbIndex = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/index.vue'));
+const TagsView = defineAsyncComponent(() => import('/@/layout/navBars/tagsView/tagsView.vue'));
+
+// 定义变量内容
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+
+// 是否显示 tagsView
+const setShowTagsView = computed(() => {
+	let { layout, isTagsview } = themeConfig.value;
+	return layout !== 'classic' && isTagsview;
+});
+</script>
+
+<style scoped lang="scss">
+.layout-navbars-container {
+	display: flex;
+	flex-direction: column;
+	width: 100%;
+	height: 100%;
+}
+</style>

+ 138 - 0
src/layout/navBars/tagsView/contextmenu.vue

@@ -0,0 +1,138 @@
+<template>
+	<transition name="el-zoom-in-center">
+		<div
+			aria-hidden="true"
+			class="el-dropdown__popper el-popper is-light is-pure custom-contextmenu"
+			role="tooltip"
+			data-popper-placement="bottom"
+			:style="`top: ${dropdowns.y + 5}px;left: ${dropdowns.x}px;`"
+			:key="Math.random()"
+			v-show="state.isShow"
+		>
+			<ul class="el-dropdown-menu">
+				<template v-for="(v, k) in state.dropdownList">
+					<li
+						class="el-dropdown-menu__item"
+						aria-disabled="false"
+						tabindex="-1"
+						:key="k"
+						v-if="!v.affix"
+						@click="onCurrentContextmenuClick(v.contextMenuClickId)"
+					>
+						<SvgIcon :name="v.icon" />
+						<span>{{ $t(v.txt) }}</span>
+					</li>
+				</template>
+			</ul>
+			<div class="el-popper__arrow" :style="{ left: `${state.arrowLeft}px` }"></div>
+		</div>
+	</transition>
+</template>
+
+<script setup lang="ts" name="layoutTagsViewContextmenu">
+import { computed, reactive, onMounted, onUnmounted, watch } from 'vue';
+
+// 定义父组件传过来的值
+const props = defineProps({
+	dropdown: {
+		type: Object,
+		default: () => {
+			return {
+				x: 0,
+				y: 0,
+			};
+		},
+	},
+});
+
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['currentContextmenuClick']);
+
+// 定义变量内容
+const state = reactive({
+	isShow: false,
+	dropdownList: [
+		{ contextMenuClickId: 0, txt: 'message.tagsView.refresh', affix: false, icon: 'ele-RefreshRight' },
+		{ contextMenuClickId: 1, txt: 'message.tagsView.close', affix: false, icon: 'ele-Close' },
+		{ contextMenuClickId: 2, txt: 'message.tagsView.closeOther', affix: false, icon: 'ele-CircleClose' },
+		{ contextMenuClickId: 3, txt: 'message.tagsView.closeAll', affix: false, icon: 'ele-FolderDelete' },
+		{
+			contextMenuClickId: 4,
+			txt: 'message.tagsView.fullscreen',
+			affix: false,
+			icon: 'iconfont icon-fullscreen',
+		},
+	],
+	item: {},
+	arrowLeft: 10,
+});
+
+// 父级传过来的坐标 x,y 值
+const dropdowns = computed(() => {
+	// 117 为 `Dropdown 下拉菜单` 的宽度
+	if (props.dropdown.x + 117 > document.documentElement.clientWidth) {
+		return {
+			x: document.documentElement.clientWidth - 117 - 5,
+			y: props.dropdown.y,
+		};
+	} else {
+		return props.dropdown;
+	}
+});
+// 当前项菜单点击
+const onCurrentContextmenuClick = (contextMenuClickId: number) => {
+	emit('currentContextmenuClick', Object.assign({}, { contextMenuClickId }, state.item));
+};
+// 打开右键菜单:判断是否固定,固定则不显示关闭按钮
+const openContextmenu = (item: RouteItem) => {
+	state.item = item;
+	item.meta?.isAffix ? (state.dropdownList[1].affix = true) : (state.dropdownList[1].affix = false);
+	closeContextmenu();
+	setTimeout(() => {
+		state.isShow = true;
+	}, 10);
+};
+// 关闭右键菜单
+const closeContextmenu = () => {
+	state.isShow = false;
+};
+// 监听页面监听进行右键菜单的关闭
+onMounted(() => {
+	document.body.addEventListener('click', closeContextmenu);
+});
+// 页面卸载时,移除右键菜单监听事件
+onUnmounted(() => {
+	document.body.removeEventListener('click', closeContextmenu);
+});
+// 监听下拉菜单位置
+watch(
+	() => props.dropdown,
+	({ x }) => {
+		if (x + 117 > document.documentElement.clientWidth) state.arrowLeft = 117 - (document.documentElement.clientWidth - x);
+		else state.arrowLeft = 10;
+	},
+	{
+		deep: true,
+	}
+);
+
+// 暴露变量
+defineExpose({
+	openContextmenu,
+});
+</script>
+
+<style scoped lang="scss">
+.custom-contextmenu {
+	transform-origin: center top;
+	z-index: 2190;
+	position: fixed;
+	.el-dropdown-menu__item {
+		font-size: 12px !important;
+		white-space: nowrap;
+		i {
+			font-size: 12px !important;
+		}
+	}
+}
+</style>

+ 726 - 0
src/layout/navBars/tagsView/tagsView.vue

@@ -0,0 +1,726 @@
+<template>
+	<div class="layout-navbars-tagsview" :class="{ 'layout-navbars-tagsview-shadow': getThemeConfig.layout === 'classic' }">
+		<el-scrollbar ref="scrollbarRef" @wheel.prevent="onHandleScroll">
+			<ul class="layout-navbars-tagsview-ul" :class="setTagsStyle" ref="tagsUlRef">
+				<li
+					v-for="(v, k) in state.tagsViewList"
+					:key="k"
+					class="layout-navbars-tagsview-ul-li"
+					:data-url="v.url"
+					:class="{ 'is-active': isActive(v) }"
+					@contextmenu.prevent="onContextmenu(v, $event)"
+					@mousedown="onMousedownMenu(v, $event)"
+					@click="onTagsClick(v, k)"
+					:ref="
+						(el) => {
+							if (el) tagsRefs[k] = el;
+						}
+					"
+				>
+					<i class="iconfont icon-webicon318 layout-navbars-tagsview-ul-li-iconfont" v-if="isActive(v)"></i>
+					<SvgIcon :name="v.meta.icon" v-if="!isActive(v) && getThemeConfig.isTagsviewIcon" class="pr5" />
+					<span>{{ setTagsViewNameI18n(v) }}</span>
+					<template v-if="isActive(v)">
+						<SvgIcon
+							name="ele-RefreshRight"
+							class="ml5 layout-navbars-tagsview-ul-li-refresh"
+							@click.stop="refreshCurrentTagsView($route.fullPath)"
+						/>
+						<SvgIcon
+							name="ele-Close"
+							class="layout-navbars-tagsview-ul-li-icon layout-icon-active"
+							v-if="!v.meta.isAffix"
+							@click.stop="closeCurrentTagsView(getThemeConfig.isShareTagsView ? v.path : v.url)"
+						/>
+					</template>
+					<SvgIcon
+						name="ele-Close"
+						class="layout-navbars-tagsview-ul-li-icon layout-icon-three"
+						v-if="!v.meta.isAffix"
+						@click.stop="closeCurrentTagsView(getThemeConfig.isShareTagsView ? v.path : v.url)"
+					/>
+				</li>
+			</ul>
+		</el-scrollbar>
+		<Contextmenu :dropdown="state.dropdown" ref="contextmenuRef" @currentContextmenuClick="onCurrentContextmenuClick" />
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutTagsView">
+import { defineAsyncComponent, reactive, onMounted, computed, ref, nextTick, onBeforeUpdate, onBeforeMount, onUnmounted, watch } from 'vue';
+import { useRoute, useRouter, onBeforeRouteUpdate } from 'vue-router';
+import Sortable from 'sortablejs';
+import { ElMessage } from 'element-plus';
+import { storeToRefs } from 'pinia';
+import pinia from '/@/stores/index';
+import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import { useKeepALiveNames } from '/@/stores/keepAliveNames';
+import { Session } from '/@/utils/storage';
+import { isObjectValueEqual } from '/@/utils/arrayOperation';
+import other from '/@/utils/other';
+import mittBus from '/@/utils/mitt';
+
+// 引入组件
+const Contextmenu = defineAsyncComponent(() => import('/@/layout/navBars/tagsView/contextmenu.vue'));
+
+// 定义变量内容
+const tagsRefs = ref<RefType>([]);
+const scrollbarRef = ref();
+const contextmenuRef = ref();
+const tagsUlRef = ref();
+const stores = useTagsViewRoutes();
+const storesThemeConfig = useThemeConfig();
+const storesTagsViewRoutes = useTagsViewRoutes();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const { tagsViewRoutes } = storeToRefs(storesTagsViewRoutes);
+const storesKeepALiveNames = useKeepALiveNames();
+const route = useRoute();
+const router = useRouter();
+const state = reactive<TagsViewState>({
+	routeActive: '',
+	routePath: route.path,
+	dropdown: { x: '', y: '' },
+	sortable: '',
+	tagsRefsIndex: 0,
+	tagsViewList: [],
+	tagsViewRoutesList: [],
+});
+
+// 动态设置 tagsView 风格样式
+const setTagsStyle = computed(() => {
+	return themeConfig.value.tagsStyle;
+});
+// 获取布局配置信息
+const getThemeConfig = computed(() => {
+	return themeConfig.value;
+});
+// 设置 自定义 tagsView 名称、 自定义 tagsView 名称国际化
+const setTagsViewNameI18n = computed(() => {
+	return (v: RouteItem) => {
+		return other.setTagsViewNameI18n(v);
+	};
+});
+// 设置 tagsView 高亮
+const isActive = (v: RouteItem) => {
+	if (getThemeConfig.value.isShareTagsView) {
+		return v.path === state.routePath;
+	} else {
+		if ((v.query && Object.keys(v.query).length) || (v.params && Object.keys(v.params).length)) {
+			// 普通传参
+			return v.url ? v.url === state.routeActive : v.path === state.routeActive;
+		} else {
+			// 通过 name 传参,params 取值,刷新页面参数消失
+			// https://gitee.com/lyt-top/vue-next-admin/issues/I51RS9
+			return v.path === state.routePath;
+		}
+	}
+};
+// 存储 tagsViewList 到浏览器临时缓存中,页面刷新时,保留记录
+const addBrowserSetSession = (tagsViewList: Array<object>) => {
+	Session.set('tagsViewList', tagsViewList);
+};
+// 获取 pinia 中的 tagsViewRoutes 列表
+const getTagsViewRoutes = async () => {
+	state.routeActive = await setTagsViewHighlight(route);
+	state.routePath = (await route.meta.isDynamic) ? route.meta.isDynamicPath : route.path;
+	state.tagsViewList = [];
+	state.tagsViewRoutesList = tagsViewRoutes.value;
+	initTagsView();
+};
+// pinia 中获取路由信息:如果是设置了固定的(isAffix),进行初始化显示
+const initTagsView = async () => {
+	if (Session.get('tagsViewList') && getThemeConfig.value.isCacheTagsView) {
+		state.tagsViewList = await Session.get('tagsViewList');
+	} else {
+		await state.tagsViewRoutesList.map((v: RouteItem) => {
+			if (v.meta?.isAffix && !v.meta.isHide) {
+				v.url = setTagsViewHighlight(v);
+				state.tagsViewList.push({ ...v });
+				storesKeepALiveNames.addCachedView(v);
+			}
+		});
+		await addTagsView(route.path, <RouteToFrom>route);
+	}
+	// 初始化当前元素(li)的下标
+	getTagsRefsIndex(getThemeConfig.value.isShareTagsView ? state.routePath : state.routeActive);
+};
+// 处理可开启多标签详情,单标签详情(动态路由(xxx/:id/:name"),普通路由处理)
+const solveAddTagsView = async (path: string, to?: RouteToFrom) => {
+	let isDynamicPath = to?.meta?.isDynamic ? to.meta.isDynamicPath : path;
+	let current = state.tagsViewList.filter(
+		(v: RouteItem) =>
+			v.path === isDynamicPath &&
+			isObjectValueEqual(
+				to?.meta?.isDynamic ? (v.params ? v.params : null) : v.query ? v.query : null,
+				to?.meta?.isDynamic ? (to?.params ? to?.params : null) : to?.query ? to?.query : null
+			)
+	);
+	if (current.length <= 0) {
+		// 防止:Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.
+		let findItem = state.tagsViewRoutesList.find((v: RouteItem) => v.path === isDynamicPath);
+		if (!findItem) return false;
+		if (findItem.meta.isAffix) return false;
+		if (findItem.meta.isLink && !findItem.meta.isIframe) return false;
+		to?.meta?.isDynamic ? (findItem.params = to.params) : (findItem.query = to?.query);
+		findItem.url = setTagsViewHighlight(findItem);
+		state.tagsViewList.push({ ...findItem });
+		await storesKeepALiveNames.addCachedView(findItem);
+		addBrowserSetSession(state.tagsViewList);
+	}
+};
+// 处理单标签时,第二次的值未覆盖第一次的 tagsViewList 值(Session Storage)
+const singleAddTagsView = (path: string, to?: RouteToFrom) => {
+	let isDynamicPath = to?.meta?.isDynamic ? to.meta.isDynamicPath : path;
+	state.tagsViewList.forEach((v) => {
+		if (
+			v.path === isDynamicPath &&
+			!isObjectValueEqual(
+				to?.meta?.isDynamic ? (v.params ? v.params : null) : v.query ? v.query : null,
+				to?.meta?.isDynamic ? (to?.params ? to?.params : null) : to?.query ? to?.query : null
+			)
+		) {
+			to?.meta?.isDynamic ? (v.params = to.params) : (v.query = to?.query);
+			v.url = setTagsViewHighlight(v);
+			addBrowserSetSession(state.tagsViewList);
+		}
+	});
+};
+// 1、添加 tagsView:未设置隐藏(isHide)也添加到在 tagsView 中(可开启多标签详情,单标签详情)
+const addTagsView = (path: string, to?: RouteToFrom) => {
+	// 防止拿取不到路由信息
+	nextTick(async () => {
+		// 修复:https://gitee.com/lyt-top/vue-next-admin/issues/I3YX6G
+		let item: RouteItem;
+		if (to?.meta?.isDynamic) {
+			// 动态路由(xxx/:id/:name"):参数不同,开启多个 tagsview
+			if (!getThemeConfig.value.isShareTagsView) await solveAddTagsView(path, to);
+			else await singleAddTagsView(path, to);
+			if (state.tagsViewList.some((v: RouteItem) => v.path === to?.meta?.isDynamicPath)) {
+				// 防止首次进入界面时(登录进入) tagsViewList 不存浏览器中
+				addBrowserSetSession(state.tagsViewList);
+				return false;
+			}
+			item = state.tagsViewRoutesList.find((v: RouteItem) => v.path === to?.meta?.isDynamicPath);
+		} else {
+			// 普通路由:参数不同,开启多个 tagsview
+			if (!getThemeConfig.value.isShareTagsView) await solveAddTagsView(path, to);
+			else await singleAddTagsView(path, to);
+			if (state.tagsViewList.some((v: RouteItem) => v.path === path)) {
+				// 防止首次进入界面时(登录进入) tagsViewList 不存浏览器中
+				addBrowserSetSession(state.tagsViewList);
+				return false;
+			}
+			item = state.tagsViewRoutesList.find((v: RouteItem) => v.path === path);
+		}
+		if (!item) return false;
+		if (item?.meta?.isLink && !item.meta.isIframe) return false;
+		if (to?.meta?.isDynamic) item.params = to?.params ? to?.params : route.params;
+		else item.query = to?.query ? to?.query : route.query;
+		item.url = setTagsViewHighlight(item);
+		await storesKeepALiveNames.addCachedView(item);
+		await state.tagsViewList.push({ ...item });
+		await addBrowserSetSession(state.tagsViewList);
+	});
+};
+// 2、刷新当前 tagsView:
+const refreshCurrentTagsView = async (fullPath: string) => {
+	const decodeURIPath = decodeURI(fullPath);
+	let item: RouteToFrom = {};
+	state.tagsViewList.forEach((v: RouteItem) => {
+		v.transUrl = transUrlParams(v);
+		if (v.transUrl) {
+			if (v.transUrl === transUrlParams(v)) item = v;
+		} else {
+			if (v.path === decodeURIPath) item = v;
+		}
+	});
+	if (!item) return false;
+	await storesKeepALiveNames.delCachedView(item);
+	mittBus.emit('onTagsViewRefreshRouterView', fullPath);
+	if (item.meta?.isKeepAlive) storesKeepALiveNames.addCachedView(item);
+};
+// 3、关闭当前 tagsView:如果是设置了固定的(isAffix),不可以关闭
+const closeCurrentTagsView = (path: string) => {
+	state.tagsViewList.map((v: RouteItem, k: number, arr: RouteItems) => {
+		if (!v.meta?.isAffix) {
+			if (getThemeConfig.value.isShareTagsView ? v.path === path : v.url === path) {
+				storesKeepALiveNames.delCachedView(v);
+				state.tagsViewList.splice(k, 1);
+				setTimeout(() => {
+					if (state.tagsViewList.length === k && getThemeConfig.value.isShareTagsView ? state.routePath === path : state.routeActive === path) {
+						// 最后一个且高亮时
+						if (arr[arr.length - 1].meta.isDynamic) {
+							// 动态路由(xxx/:id/:name")
+							if (k !== arr.length) router.push({ name: arr[k].name, params: arr[k].params });
+							else router.push({ name: arr[arr.length - 1].name, params: arr[arr.length - 1].params });
+						} else {
+							// 普通路由
+							if (k !== arr.length) router.push({ path: arr[k].path, query: arr[k].query });
+							else router.push({ path: arr[arr.length - 1].path, query: arr[arr.length - 1].query });
+						}
+					} else {
+						// 非最后一个且高亮时,跳转到下一个
+						if (state.tagsViewList.length !== k && getThemeConfig.value.isShareTagsView ? state.routePath === path : state.routeActive === path) {
+							if (arr[k].meta.isDynamic) {
+								// 动态路由(xxx/:id/:name")
+								router.push({ name: arr[k].name, params: arr[k].params });
+							} else {
+								// 普通路由
+								router.push({ path: arr[k].path, query: arr[k].query });
+							}
+						}
+					}
+				}, 0);
+			}
+		}
+	});
+	addBrowserSetSession(state.tagsViewList);
+};
+// 4、关闭其它 tagsView:如果是设置了固定的(isAffix),不进行关闭
+const closeOtherTagsView = (path: string) => {
+	if (Session.get('tagsViewList')) {
+		state.tagsViewList = [];
+		Session.get('tagsViewList').map((v: RouteItem) => {
+			if (v.meta?.isAffix && !v.meta.isHide) {
+				v.url = setTagsViewHighlight(v);
+				storesKeepALiveNames.delOthersCachedViews(v);
+				state.tagsViewList.push({ ...v });
+			}
+		});
+		addTagsView(path, <RouteToFrom>route);
+		addBrowserSetSession(state.tagsViewList);
+	}
+};
+// 5、关闭全部 tagsView:如果是设置了固定的(isAffix),不进行关闭
+const closeAllTagsView = () => {
+	if (Session.get('tagsViewList')) {
+		storesKeepALiveNames.delAllCachedViews();
+		state.tagsViewList = [];
+		Session.get('tagsViewList').map((v: RouteItem) => {
+			if (v.meta?.isAffix && !v.meta.isHide) {
+				v.url = setTagsViewHighlight(v);
+				state.tagsViewList.push({ ...v });
+				router.push({ path: state.tagsViewList[state.tagsViewList.length - 1].path });
+			}
+		});
+		addBrowserSetSession(state.tagsViewList);
+	}
+};
+// 6、开启当前页面全屏
+const openCurrenFullscreen = async (path: string) => {
+	const item = state.tagsViewList.find((v: RouteItem) => (getThemeConfig.value.isShareTagsView ? v.path === path : v.url === path));
+	if (item.meta.isDynamic) await router.push({ name: item.name, params: item.params });
+	else await router.push({ name: item.name, query: item.query });
+	stores.setCurrenFullscreen(true);
+};
+// 当前项右键菜单点击,拿 `当前点击的路由路径` 对比 `tagsView 路由数组`,取当前点击项的详细路由信息
+// 防止 tagsView 非当前页演示时,操作异常
+// https://gitee.com/lyt-top/vue-next-admin/issues/I61VS9
+const getCurrentRouteItem = (item: RouteItem): any => {
+	let resItem: RouteToFrom = {};
+	state.tagsViewList.forEach((v: RouteItem) => {
+		v.transUrl = transUrlParams(v);
+		if (v.transUrl) {
+			// 动态路由、普通路由带参数
+			if (v.transUrl === transUrlParams(v) && v.transUrl === item.commonUrl) resItem = v;
+		} else {
+			// 路由不带参数
+			if (v.path === decodeURI(item.path)) resItem = v;
+		}
+	});
+	if (!resItem) return null;
+	else return resItem;
+};
+// 当前项右键菜单点击
+const onCurrentContextmenuClick = async (item: RouteItem) => {
+	item.commonUrl = transUrlParams(item);
+	if (!getCurrentRouteItem(item)) return ElMessage({ type: 'warning', message: '请正确输入路径及完整参数(query、params)' });
+	const { path, name, params, query, meta, url } = getCurrentRouteItem(item);
+	switch (item.contextMenuClickId) {
+		case 0:
+			// 刷新当前
+			if (meta.isDynamic) await router.push({ name, params });
+			else await router.push({ path, query });
+			refreshCurrentTagsView(route.fullPath);
+			break;
+		case 1:
+			// 关闭当前
+			closeCurrentTagsView(getThemeConfig.value.isShareTagsView ? path : url);
+			break;
+		case 2:
+			// 关闭其它
+			if (meta.isDynamic) await router.push({ name, params });
+			else await router.push({ path, query });
+			closeOtherTagsView(path);
+			break;
+		case 3:
+			// 关闭全部
+			closeAllTagsView();
+			break;
+		case 4:
+			// 开启当前页面全屏
+			openCurrenFullscreen(getThemeConfig.value.isShareTagsView ? path : url);
+			break;
+	}
+};
+// 右键点击时:传 x,y 坐标值到子组件中(props)
+const onContextmenu = (v: RouteItem, e: MouseEvent) => {
+	const { clientX, clientY } = e;
+	state.dropdown.x = clientX;
+	state.dropdown.y = clientY;
+	contextmenuRef.value.openContextmenu(v);
+};
+// 鼠标按下时,判断是鼠标中键就关闭当前 tasgview
+const onMousedownMenu = (v: RouteItem, e: MouseEvent) => {
+	if (!v.meta?.isAffix && e.button === 1) {
+		const item = Object.assign({}, { contextMenuClickId: 1, ...v });
+		onCurrentContextmenuClick(item);
+	}
+};
+// 当前的 tagsView 项点击时
+const onTagsClick = (v: RouteItem, k: number) => {
+	state.tagsRefsIndex = k;
+	router.push(v);
+};
+// 处理 url,地址栏链接有参数时,tagsview 右键菜单刷新功能失效问题,感谢 @ZzZz-RIPPER、@dejavuuuuu
+// https://gitee.com/lyt-top/vue-next-admin/issues/I5K3YO
+// https://gitee.com/lyt-top/vue-next-admin/issues/I61VS9
+const transUrlParams = (v: RouteItem) => {
+	let params = v.query && Object.keys(v.query).length > 0 ? v.query : v.params;
+	if (!params) return '';
+	let path = '';
+	for (let [key, value] of Object.entries(params)) {
+		if (v.meta?.isDynamic) path += `/${value}`;
+		else path += `&${key}=${value}`;
+	}
+	// 判断是否是动态路由(xxx/:id/:name")isDynamic
+	if (v.meta?.isDynamic) {
+		/**
+		 *
+		 * isFnClick 用于判断是通过方法调用,还是直接右键菜单点击(此处只针对动态路由)
+		 * 原因:
+		 * 1、右键菜单点击时,路由的 path 还是原始定义的路由格式,如:/params/dynamic/details/:t/:id/:tagsViewName
+		 * 2、通过事件调用时,路由的 path 不是原始定义的路由格式,如:/params/dynamic/details/vue-next-admin/111/我是动态路由测试tagsViewName(非国际化)
+		 *
+		 * 所以右侧菜单点击时,需要处理路径拼接 v.path.split(':')[0],得到路径 + 参数的完整路径
+		 */
+		return v.isFnClick ? decodeURI(v.path) : `${v.path.split(':')[0]}${path.replace(/^\//, '')}`;
+	} else {
+		return `${v.path}${path.replace(/^&/, '?')}`;
+	}
+};
+// 处理 tagsView 高亮(多标签详情时使用,单标签详情未使用)
+const setTagsViewHighlight = (v: RouteToFrom) => {
+	let params = v.query && Object.keys(v.query).length > 0 ? v.query : v.params;
+	if (!params || Object.keys(params).length <= 0) return v.path;
+	let path = '';
+	for (let i in params) {
+		path += params[i];
+	}
+	// 判断是否是动态路由(xxx/:id/:name")
+	return `${v.meta?.isDynamic ? v.meta.isDynamicPath : v.path}-${path}`;
+};
+// 鼠标滚轮滚动
+const onHandleScroll = (e: WheelEventType) => {
+	scrollbarRef.value.$refs.wrapRef.scrollLeft += e.wheelDelta / 4;
+};
+// tagsView 横向滚动
+const tagsViewmoveToCurrentTag = () => {
+	nextTick(() => {
+		if (tagsRefs.value.length <= 0) return false;
+		// 当前 li 元素
+		let liDom = tagsRefs.value[state.tagsRefsIndex];
+		// 当前 li 元素下标
+		let liIndex = state.tagsRefsIndex;
+		// 当前 ul 下 li 元素总长度
+		let liLength = tagsRefs.value.length;
+		// 最前 li
+		let liFirst = tagsRefs.value[0];
+		// 最后 li
+		let liLast = tagsRefs.value[tagsRefs.value.length - 1];
+		// 当前滚动条的值
+		let scrollRefs = scrollbarRef.value.$refs.wrapRef;
+		// 当前滚动条滚动宽度
+		let scrollS = scrollRefs.scrollWidth;
+		// 当前滚动条偏移宽度
+		let offsetW = scrollRefs.offsetWidth;
+		// 当前滚动条偏移距离
+		let scrollL = scrollRefs.scrollLeft;
+		// 上一个 tags li dom
+		let liPrevTag = tagsRefs.value[state.tagsRefsIndex - 1];
+		// 下一个 tags li dom
+		let liNextTag = tagsRefs.value[state.tagsRefsIndex + 1];
+		// 上一个 tags li dom 的偏移距离
+		let beforePrevL = 0;
+		// 下一个 tags li dom 的偏移距离
+		let afterNextL = 0;
+		if (liDom === liFirst) {
+			// 头部
+			scrollRefs.scrollLeft = 0;
+		} else if (liDom === liLast) {
+			// 尾部
+			scrollRefs.scrollLeft = scrollS - offsetW;
+		} else {
+			// 非头/尾部
+			if (liIndex === 0) beforePrevL = liFirst.offsetLeft - 5;
+			else beforePrevL = liPrevTag?.offsetLeft - 5;
+			if (liIndex === liLength) afterNextL = liLast.offsetLeft + liLast.offsetWidth + 5;
+			else afterNextL = liNextTag.offsetLeft + liNextTag.offsetWidth + 5;
+			if (afterNextL > scrollL + offsetW) {
+				scrollRefs.scrollLeft = afterNextL - offsetW;
+			} else if (beforePrevL < scrollL) {
+				scrollRefs.scrollLeft = beforePrevL;
+			}
+		}
+		// 更新滚动条,防止不出现
+		scrollbarRef.value.update();
+	});
+};
+// 获取 tagsView 的下标:用于处理 tagsView 点击时的横向滚动
+const getTagsRefsIndex = (path: string | unknown) => {
+	nextTick(async () => {
+		// await 使用该写法,防止拿取不到 tagsViewList 列表数据不完整
+		let tagsViewList = await state.tagsViewList;
+		state.tagsRefsIndex = tagsViewList.findIndex((v: RouteItem) => {
+			if (getThemeConfig.value.isShareTagsView) {
+				return v.path === path;
+			} else {
+				return v.url === path;
+			}
+		});
+		// 添加初始化横向滚动条移动到对应位置
+		tagsViewmoveToCurrentTag();
+	});
+};
+// 设置 tagsView 可以进行拖拽
+const initSortable = async () => {
+	const el = <HTMLElement>document.querySelector('.layout-navbars-tagsview-ul');
+	if (!el) return false;
+	state.sortable.el && state.sortable.destroy();
+	state.sortable = Sortable.create(el, {
+		animation: 300,
+		dataIdAttr: 'data-url',
+		disabled: getThemeConfig.value.isSortableTagsView ? false : true,
+		onEnd: () => {
+			const sortEndList: RouteItem[] = [];
+			state.sortable.toArray().map((val: string) => {
+				state.tagsViewList.map((v: RouteItem) => {
+					if (v.url === val) sortEndList.push({ ...v });
+				});
+			});
+			addBrowserSetSession(sortEndList);
+		},
+	});
+};
+// 拖动问题,https://gitee.com/lyt-top/vue-next-admin/issues/I3ZRRI
+const onSortableResize = async () => {
+	await initSortable();
+	if (other.isMobile()) state.sortable.el && state.sortable.destroy();
+};
+// 页面加载前
+onBeforeMount(() => {
+	// 初始化,防止手机端直接访问时还可以拖拽
+	onSortableResize();
+	// 拖动问题,https://gitee.com/lyt-top/vue-next-admin/issues/I3ZRRI
+	window.addEventListener('resize', onSortableResize);
+	// 监听非本页面调用 0 刷新当前,1 关闭当前,2 关闭其它,3 关闭全部 4 当前页全屏
+	mittBus.on('onCurrentContextmenuClick', (data: RouteItem) => {
+		// 通过方法点击关闭 tagsView
+		data.isFnClick = true;
+		onCurrentContextmenuClick(data);
+	});
+	// 监听布局配置界面开启/关闭拖拽
+	mittBus.on('openOrCloseSortable', () => {
+		initSortable();
+	});
+	// 监听布局配置开启 TagsView 共用,为了演示还原默认值
+	mittBus.on('openShareTagsView', () => {
+		if (getThemeConfig.value.isShareTagsView) {
+			router.push('/home');
+			state.tagsViewList = [];
+			state.tagsViewRoutesList.map((v: RouteItem) => {
+				if (v.meta?.isAffix && !v.meta.isHide) {
+					v.url = setTagsViewHighlight(v);
+					state.tagsViewList.push({ ...v });
+				}
+			});
+		}
+	});
+});
+// 页面卸载时
+onUnmounted(() => {
+	// 取消非本页面调用监听
+	mittBus.off('onCurrentContextmenuClick', () => {});
+	// 取消监听布局配置界面开启/关闭拖拽
+	mittBus.off('openOrCloseSortable', () => {});
+	// 取消监听布局配置开启 TagsView 共用
+	mittBus.off('openShareTagsView', () => {});
+	// 取消窗口 resize 监听
+	window.removeEventListener('resize', onSortableResize);
+});
+// 页面更新时
+onBeforeUpdate(() => {
+	tagsRefs.value = [];
+});
+// 页面加载时
+onMounted(() => {
+	// 初始化 pinia 中的 tagsViewRoutes 列表
+	getTagsViewRoutes();
+	initSortable();
+});
+// 路由更新时(组件内生命钩子)
+onBeforeRouteUpdate(async (to) => {
+	state.routeActive = setTagsViewHighlight(to);
+	state.routePath = to.meta.isDynamic ? to.meta.isDynamicPath : to.path;
+	await addTagsView(to.path, <RouteToFrom>to);
+	getTagsRefsIndex(getThemeConfig.value.isShareTagsView ? state.routePath : state.routeActive);
+});
+// 监听路由的变化,动态赋值给 tagsView
+watch(
+	pinia.state,
+	(val) => {
+		if (val.tagsViewRoutes.tagsViewRoutes.length === state.tagsViewRoutesList.length) return false;
+		getTagsViewRoutes();
+	},
+	{
+		deep: true,
+	}
+);
+</script>
+
+<style scoped lang="scss">
+.layout-navbars-tagsview {
+	background-color: var(--el-color-white);
+	border-bottom: 1px solid var(--next-border-color-light);
+	position: relative;
+	z-index: 4;
+	:deep(.el-scrollbar__wrap) {
+		overflow-x: auto !important;
+	}
+	&-ul {
+		list-style: none;
+		margin: 0;
+		padding: 0;
+		height: 34px;
+		display: flex;
+		align-items: center;
+		color: var(--el-text-color-regular);
+		font-size: 12px;
+		white-space: nowrap;
+		padding: 0 15px;
+		&-li {
+			height: 26px;
+			line-height: 26px;
+			display: flex;
+			align-items: center;
+			border: 1px solid var(--el-border-color-lighter);
+			padding: 0 15px;
+			margin-right: 5px;
+			border-radius: 2px;
+			position: relative;
+			z-index: 0;
+			cursor: pointer;
+			justify-content: space-between;
+			&:hover {
+				background-color: var(--el-color-primary-light-9);
+				color: var(--el-color-primary);
+				border-color: var(--el-color-primary-light-5);
+			}
+			&-iconfont {
+				position: relative;
+				left: -5px;
+				font-size: 12px;
+			}
+			&-icon {
+				border-radius: 100%;
+				position: relative;
+				height: 14px;
+				width: 14px;
+				text-align: center;
+				line-height: 14px;
+				right: -5px;
+				&:hover {
+					color: var(--el-color-white);
+					background-color: var(--el-color-primary-light-3);
+				}
+			}
+			.layout-icon-active {
+				display: block;
+			}
+			.layout-icon-three {
+				display: none;
+			}
+		}
+		.is-active {
+			color: var(--el-color-white);
+			background: var(--el-color-primary);
+			border-color: var(--el-color-primary);
+			transition: border-color 3s ease;
+		}
+	}
+	// 风格4
+	.tags-style-four {
+		.layout-navbars-tagsview-ul-li {
+			margin-right: 0 !important;
+			border: none !important;
+			position: relative;
+			border-radius: 3px !important;
+			.layout-icon-active {
+				display: none;
+			}
+			.layout-icon-three {
+				display: block;
+			}
+			&:hover {
+				background: none !important;
+			}
+		}
+		.is-active {
+			background: none !important;
+			color: var(--el-color-primary) !important;
+		}
+	}
+	// 风格5
+	.tags-style-five {
+		align-items: flex-end;
+		.tags-style-five-svg {
+			-webkit-mask-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNzAiIGhlaWdodD0iNzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbD0ibm9uZSI+CgogPGc+CiAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogIDxwYXRoIHRyYW5zZm9ybT0icm90YXRlKC0wLjEzMzUwNiA1MC4xMTkyIDUwKSIgaWQ9InN2Z18xIiBkPSJtMTAwLjExOTE5LDEwMGMtNTUuMjI4LDAgLTEwMCwtNDQuNzcyIC0xMDAsLTEwMGwwLDEwMGwxMDAsMHoiIG9wYWNpdHk9InVuZGVmaW5lZCIgc3Ryb2tlPSJudWxsIiBmaWxsPSIjRjhFQUU3Ii8+CiAgPHBhdGggZD0ibS0wLjYzNzY2LDcuMzEyMjhjMC4xMTkxOSwwIDAuMjE3MzcsMC4wNTc5NiAwLjQ3Njc2LDAuMTE5MTljMC4yMzIsMC4wNTQ3NyAwLjI3MzI5LDAuMDM0OTEgMC4zNTc1NywwLjExOTE5YzAuMDg0MjgsMC4wODQyOCAwLjM1NzU3LDAgMC40NzY3NiwwbDAuMTE5MTksMGwwLjIzODM4LDAiIGlkPSJzdmdfMiIgc3Ryb2tlPSJudWxsIiBmaWxsPSJub25lIi8+CiAgPHBhdGggZD0ibTI4LjkyMTM0LDY5LjA1MjQ0YzAsMC4xMTkxOSAwLDAuMjM4MzggMCwwLjM1NzU3bDAsMC4xMTkxOWwwLDAuMTE5MTkiIGlkPSJzdmdfMyIgc3Ryb2tlPSJudWxsIiBmaWxsPSJub25lIi8+CiAgPHJlY3QgaWQ9InN2Z180IiBoZWlnaHQ9IjAiIHdpZHRoPSIxLjMxMTA4IiB5PSI2LjgzNTUyIiB4PSItMC4wNDE3MSIgc3Ryb2tlPSJudWxsIiBmaWxsPSJub25lIi8+CiAgPHJlY3QgaWQ9InN2Z181IiBoZWlnaHQ9IjEuNzg3ODQiIHdpZHRoPSIwLjExOTE5IiB5PSI2OC40NTY1IiB4PSIyOC45MjEzNCIgc3Ryb2tlPSJudWxsIiBmaWxsPSJub25lIi8+CiAgPHJlY3QgaWQ9InN2Z182IiBoZWlnaHQ9IjQuODg2NzciIHdpZHRoPSIxOS4wNzAzMiIgeT0iNTEuMjkzMjEiIHg9IjM2LjY2ODY2IiBzdHJva2U9Im51bGwiIGZpbGw9Im5vbmUiLz4KIDwvZz4KPC9zdmc+'),
+				url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNzAiIGhlaWdodD0iNzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbD0ibm9uZSI+CiA8Zz4KICA8dGl0bGU+TGF5ZXIgMTwvdGl0bGU+CiAgPHBhdGggdHJhbnNmb3JtPSJyb3RhdGUoLTg5Ljc2MjQgNy4zMzAxNCA1NS4xMjUyKSIgc3Ryb2tlPSJudWxsIiBpZD0ic3ZnXzEiIGZpbGw9IiNGOEVBRTciIGQ9Im02Mi41NzQ0OSwxMTcuNTIwODZjLTU1LjIyOCwwIC0xMDAsLTQ0Ljc3MiAtMTAwLC0xMDBsMCwxMDBsMTAwLDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPgogIDxwYXRoIGQ9Im0tMC42Mzc2Niw3LjMxMjI4YzAuMTE5MTksMCAwLjIxNzM3LDAuMDU3OTYgMC40NzY3NiwwLjExOTE5YzAuMjMyLDAuMDU0NzcgMC4yNzMyOSwwLjAzNDkxIDAuMzU3NTcsMC4xMTkxOWMwLjA4NDI4LDAuMDg0MjggMC4zNTc1NywwIDAuNDc2NzYsMGwwLjExOTE5LDBsMC4yMzgzOCwwIiBpZD0ic3ZnXzIiIHN0cm9rZT0ibnVsbCIgZmlsbD0ibm9uZSIvPgogIDxwYXRoIGQ9Im0yOC45MjEzNCw2OS4wNTI0NGMwLDAuMTE5MTkgMCwwLjIzODM4IDAsMC4zNTc1N2wwLDAuMTE5MTlsMCwwLjExOTE5IiBpZD0ic3ZnXzMiIHN0cm9rZT0ibnVsbCIgZmlsbD0ibm9uZSIvPgogIDxyZWN0IGlkPSJzdmdfNCIgaGVpZ2h0PSIwIiB3aWR0aD0iMS4zMTEwOCIgeT0iNi44MzU1MiIgeD0iLTAuMDQxNzEiIHN0cm9rZT0ibnVsbCIgZmlsbD0ibm9uZSIvPgogIDxyZWN0IGlkPSJzdmdfNSIgaGVpZ2h0PSIxLjc4Nzg0IiB3aWR0aD0iMC4xMTkxOSIgeT0iNjguNDU2NSIgeD0iMjguOTIxMzQiIHN0cm9rZT0ibnVsbCIgZmlsbD0ibm9uZSIvPgogIDxyZWN0IGlkPSJzdmdfNiIgaGVpZ2h0PSI0Ljg4Njc3IiB3aWR0aD0iMTkuMDcwMzIiIHk9IjUxLjI5MzIxIiB4PSIzNi42Njg2NiIgc3Ryb2tlPSJudWxsIiBmaWxsPSJub25lIi8+CiA8L2c+Cjwvc3ZnPg=='),
+				url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><rect rx='8' width='100%' height='100%' fill='%23F8EAE7'/></svg>");
+			-webkit-mask-size: 18px 30px, 20px 30px, calc(100% - 30px) calc(100% + 17px);
+			-webkit-mask-position: right bottom, left bottom, center top;
+			-webkit-mask-repeat: no-repeat;
+		}
+		.layout-navbars-tagsview-ul-li {
+			padding: 0 5px;
+			border-width: 15px 27px 15px;
+			border-style: solid;
+			border-color: transparent;
+			margin: 0 -15px;
+			.layout-icon-active,
+			.layout-navbars-tagsview-ul-li-iconfont,
+			.layout-navbars-tagsview-ul-li-refresh {
+				display: none;
+			}
+			.layout-icon-three {
+				display: block;
+			}
+			&:hover {
+				@extend .tags-style-five-svg;
+				background: var(--el-color-primary-light-9);
+				color: unset;
+			}
+		}
+		.is-active {
+			@extend .tags-style-five-svg;
+			background: var(--el-color-primary-light-9) !important;
+			color: var(--el-color-primary) !important;
+			z-index: 1;
+		}
+	}
+}
+.layout-navbars-tagsview-shadow {
+	box-shadow: rgb(0 21 41 / 4%) 0px 1px 4px;
+}
+</style>

+ 159 - 0
src/layout/navMenu/horizontal.vue

@@ -0,0 +1,159 @@
+<template>
+	<div class="el-menu-horizontal-warp">
+		<el-scrollbar @wheel.native.prevent="onElMenuHorizontalScroll" ref="elMenuHorizontalScrollRef">
+			<el-menu router :default-active="state.defaultActive" :ellipsis="false" background-color="transparent" mode="horizontal">
+				<template v-for="val in menuLists">
+					<el-sub-menu :index="val.path" v-if="val.children && val.children.length > 0" :key="val.path">
+						<template #title>
+							<SvgIcon :name="val.meta.icon" />
+							<span>{{ $t(val.meta.title) }}</span>
+						</template>
+						<SubItem :chil="val.children" />
+					</el-sub-menu>
+					<template v-else>
+						<el-menu-item :index="val.path" :key="val.path">
+							<template #title v-if="!val.meta.isLink || (val.meta.isLink && val.meta.isIframe)">
+								<SvgIcon :name="val.meta.icon" />
+								{{ $t(val.meta.title) }}
+							</template>
+							<template #title v-else>
+								<a class="w100" @click.prevent="onALinkClick(val)">
+									<SvgIcon :name="val.meta.icon" />
+									{{ $t(val.meta.title) }}
+								</a>
+							</template>
+						</el-menu-item>
+					</template>
+				</template>
+			</el-menu>
+		</el-scrollbar>
+	</div>
+</template>
+
+<script setup lang="ts" name="navMenuHorizontal">
+import { defineAsyncComponent, reactive, computed, onMounted, nextTick, onBeforeMount, ref } from 'vue';
+import { useRoute, onBeforeRouteUpdate, RouteRecordRaw } from 'vue-router';
+import { storeToRefs } from 'pinia';
+import { useRoutesList } from '/@/stores/routesList';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import other from '/@/utils/other';
+import mittBus from '/@/utils/mitt';
+
+// 引入组件
+const SubItem = defineAsyncComponent(() => import('/@/layout/navMenu/subItem.vue'));
+
+// 定义父组件传过来的值
+const props = defineProps({
+	// 菜单列表
+	menuList: {
+		type: Array<RouteRecordRaw>,
+		default: () => [],
+	},
+});
+
+// 定义变量内容
+const elMenuHorizontalScrollRef = ref();
+const stores = useRoutesList();
+const storesThemeConfig = useThemeConfig();
+const { routesList } = storeToRefs(stores);
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const route = useRoute();
+const state = reactive({
+	defaultActive: '' as string | undefined,
+});
+
+// 获取父级菜单数据
+const menuLists = computed(() => {
+	return <RouteItems>props.menuList;
+});
+// 设置横向滚动条可以鼠标滚轮滚动
+const onElMenuHorizontalScroll = (e: WheelEventType) => {
+	const eventDelta = e.wheelDelta || -e.deltaY * 40;
+	elMenuHorizontalScrollRef.value.$refs.wrapRef.scrollLeft = elMenuHorizontalScrollRef.value.$refs.wrapRef.scrollLeft + eventDelta / 4;
+};
+// 初始化数据,页面刷新时,滚动条滚动到对应位置
+const initElMenuOffsetLeft = () => {
+	nextTick(() => {
+		let els = <HTMLElement>document.querySelector('.el-menu.el-menu--horizontal li.is-active');
+		if (!els) return false;
+		elMenuHorizontalScrollRef.value.$refs.wrapRef.scrollLeft = els.offsetLeft;
+	});
+};
+// 路由过滤递归函数
+const filterRoutesFun = <T extends RouteItem>(arr: T[]): T[] => {
+	return arr
+		.filter((item: T) => !item.meta?.isHide)
+		.map((item: T) => {
+			item = Object.assign({}, item);
+			if (item.children) item.children = filterRoutesFun(item.children);
+			return item;
+		});
+};
+// 传送当前子级数据到菜单中
+const setSendClassicChildren = (path: string) => {
+	const currentPathSplit = path.split('/');
+	let currentData: MittMenu = { children: [] };
+	filterRoutesFun(routesList.value).map((v, k) => {
+		if (v.path === `/${currentPathSplit[1]}`) {
+			v['k'] = k;
+			currentData['item'] = { ...v };
+			currentData['children'] = [{ ...v }];
+			if (v.children) currentData['children'] = v.children;
+		}
+	});
+	return currentData;
+};
+// 设置页面当前路由高亮
+const setCurrentRouterHighlight = (currentRoute: RouteToFrom) => {
+	const { path, meta } = currentRoute;
+	if (themeConfig.value.layout === 'classic') {
+		state.defaultActive = `/${path?.split('/')[1]}`;
+	} else {
+		const pathSplit = meta?.isDynamic ? meta.isDynamicPath!.split('/') : path!.split('/');
+		if (pathSplit.length >= 4 && meta?.isHide) state.defaultActive = pathSplit.splice(0, 3).join('/');
+		else state.defaultActive = path;
+	}
+};
+// 打开外部链接
+const onALinkClick = (val: RouteItem) => {
+	other.handleOpenLink(val);
+};
+// 页面加载前
+onBeforeMount(() => {
+	setCurrentRouterHighlight(route);
+});
+// 页面加载时
+onMounted(() => {
+	initElMenuOffsetLeft();
+});
+// 路由更新时
+onBeforeRouteUpdate((to) => {
+	// 修复:https://gitee.com/lyt-top/vue-next-admin/issues/I3YX6G
+	setCurrentRouterHighlight(to);
+	// 修复经典布局开启切割菜单时,点击tagsView后左侧导航菜单数据不变的问题
+	let { layout, isClassicSplitMenu } = themeConfig.value;
+	if (layout === 'classic' && isClassicSplitMenu) {
+		mittBus.emit('setSendClassicChildren', setSendClassicChildren(to.path));
+	}
+});
+</script>
+
+<style scoped lang="scss">
+.el-menu-horizontal-warp {
+	flex: 1;
+	overflow: hidden;
+	margin-right: 30px;
+	:deep(.el-scrollbar__bar.is-vertical) {
+		display: none;
+	}
+	:deep(a) {
+		width: 100%;
+	}
+	.el-menu.el-menu--horizontal {
+		display: flex;
+		height: 100%;
+		width: 100%;
+		box-sizing: border-box;
+	}
+}
+</style>

+ 49 - 0
src/layout/navMenu/subItem.vue

@@ -0,0 +1,49 @@
+<template>
+	<template v-for="val in chils">
+		<el-sub-menu :index="val.path" :key="val.path" v-if="val.children && val.children.length > 0">
+			<template #title>
+				<SvgIcon :name="val.meta.icon" />
+				<span>{{ $t(val.meta.title) }}</span>
+			</template>
+			<sub-item :chil="val.children" />
+		</el-sub-menu>
+		<template v-else>
+			<el-menu-item :index="val.path" :key="val.path">
+				<template v-if="!val.meta.isLink || (val.meta.isLink && val.meta.isIframe)">
+					<SvgIcon :name="val.meta.icon" />
+					<span>{{ $t(val.meta.title) }}</span>
+				</template>
+				<template v-else>
+					<a class="w100" @click.prevent="onALinkClick(val)">
+						<SvgIcon :name="val.meta.icon" />
+						{{ $t(val.meta.title) }}
+					</a>
+				</template>
+			</el-menu-item>
+		</template>
+	</template>
+</template>
+
+<script setup lang="ts" name="navMenuSubItem">
+import { computed } from 'vue';
+import { RouteRecordRaw } from 'vue-router';
+import other from '/@/utils/other';
+
+// 定义父组件传过来的值
+const props = defineProps({
+	// 菜单列表
+	chil: {
+		type: Array<RouteRecordRaw>,
+		default: () => [],
+	},
+});
+
+// 获取父级菜单数据
+const chils = computed(() => {
+	return <RouteItems>props.chil;
+});
+// 打开外部链接
+const onALinkClick = (val: RouteItem) => {
+	other.handleOpenLink(val);
+};
+</script>

+ 102 - 0
src/layout/navMenu/vertical.vue

@@ -0,0 +1,102 @@
+<template>
+	<el-menu
+		router
+		:default-active="state.defaultActive"
+		background-color="transparent"
+		:collapse="state.isCollapse"
+		:unique-opened="getThemeConfig.isUniqueOpened"
+		:collapse-transition="false"
+	>
+		<template v-for="val in menuLists">
+			<el-sub-menu :index="val.path" v-if="val.children && val.children.length > 0" :key="val.path">
+				<template #title>
+					<SvgIcon :name="val.meta.icon" />
+					<span>{{ $t(val.meta.title) }}</span>
+				</template>
+				<SubItem :chil="val.children" />
+			</el-sub-menu>
+			<template v-else>
+				<el-menu-item :index="val.path" :key="val.path">
+					<SvgIcon :name="val.meta.icon" />
+					<template #title v-if="!val.meta.isLink || (val.meta.isLink && val.meta.isIframe)">
+						<span>{{ $t(val.meta.title) }}</span>
+					</template>
+					<template #title v-else>
+						<a class="w100" @click.prevent="onALinkClick(val)">{{ $t(val.meta.title) }}</a>
+					</template>
+				</el-menu-item>
+			</template>
+		</template>
+	</el-menu>
+</template>
+
+<script setup lang="ts" name="navMenuVertical">
+import { defineAsyncComponent, reactive, computed, onMounted, watch } from 'vue';
+import { useRoute, onBeforeRouteUpdate, RouteRecordRaw } from 'vue-router';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import other from '/@/utils/other';
+
+// 引入组件
+const SubItem = defineAsyncComponent(() => import('/@/layout/navMenu/subItem.vue'));
+
+// 定义父组件传过来的值
+const props = defineProps({
+	// 菜单列表
+	menuList: {
+		type: Array<RouteRecordRaw>,
+		default: () => [],
+	},
+});
+
+// 定义变量内容
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const route = useRoute();
+const state = reactive({
+	// 修复:https://gitee.com/lyt-top/vue-next-admin/issues/I3YX6G
+	defaultActive: route.meta.isDynamic ? route.meta.isDynamicPath : route.path,
+	isCollapse: false,
+});
+
+// 获取父级菜单数据
+const menuLists = computed(() => {
+	return <RouteItems>props.menuList;
+});
+// 获取布局配置信息
+const getThemeConfig = computed(() => {
+	return themeConfig.value;
+});
+// 菜单高亮(详情时,父级高亮)
+const setParentHighlight = (currentRoute: RouteToFrom) => {
+	const { path, meta } = currentRoute;
+	const pathSplit = meta?.isDynamic ? meta.isDynamicPath!.split('/') : path!.split('/');
+	if (pathSplit.length >= 4 && meta?.isHide) return pathSplit.splice(0, 3).join('/');
+	else return path;
+};
+// 打开外部链接
+const onALinkClick = (val: RouteItem) => {
+	other.handleOpenLink(val);
+};
+// 页面加载时
+onMounted(() => {
+	state.defaultActive = setParentHighlight(route);
+});
+// 路由更新时
+onBeforeRouteUpdate((to) => {
+	// 修复:https://gitee.com/lyt-top/vue-next-admin/issues/I3YX6G
+	state.defaultActive = setParentHighlight(to);
+	const clientWidth = document.body.clientWidth;
+	if (clientWidth < 1000) themeConfig.value.isCollapse = false;
+});
+// 设置菜单的收起/展开
+watch(
+	themeConfig.value,
+	() => {
+		document.body.clientWidth <= 1000 ? (state.isCollapse = false) : (state.isCollapse = themeConfig.value.isCollapse);
+	},
+	{
+		immediate: true,
+	}
+);
+</script>

+ 101 - 0
src/layout/routerView/iframes.vue

@@ -0,0 +1,101 @@
+<template>
+	<div class="layout-padding layout-padding-unset layout-iframe">
+		<div class="layout-padding-auto layout-padding-view">
+			<div class="w100" v-for="v in setIframeList" :key="v.path" v-loading="v.meta.loading" element-loading-background="white">
+				<transition-group :name="name" mode="out-in">
+					<iframe
+						:src="v.meta.isLink"
+						:key="v.path"
+						frameborder="0"
+						height="100%"
+						width="100%"
+						style="position: absolute"
+						:data-url="v.path"
+						v-show="getRoutePath === v.path"
+						ref="iframeRef"
+					/>
+				</transition-group>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutIframeView">
+import { computed, watch, ref, nextTick } from 'vue';
+import { useRoute } from 'vue-router';
+
+// 定义父组件传过来的值
+const props = defineProps({
+	// 刷新 iframe
+	refreshKey: {
+		type: String,
+		default: () => '',
+	},
+	// 过渡动画 name
+	name: {
+		type: String,
+		default: () => 'slide-right',
+	},
+	// iframe 列表
+	list: {
+		type: Array,
+		default: () => [],
+	},
+});
+
+// 定义变量内容
+const iframeRef = ref();
+const route = useRoute();
+
+// 处理 list 列表,当打开时,才进行加载
+const setIframeList = computed(() => {
+	return (<RouteItems>props.list).filter((v: RouteItem) => v.meta?.isIframeOpen);
+});
+// 获取 iframe 当前路由 path
+const getRoutePath = computed(() => {
+	return route.path;
+});
+// 关闭 iframe loading
+const closeIframeLoading = (val: string, item: RouteItem) => {
+	nextTick(() => {
+		if (!iframeRef.value) return false;
+		iframeRef.value.forEach((v: HTMLElement) => {
+			if (v.dataset.url === val) {
+				v.onload = () => {
+					if (item.meta?.isIframeOpen && item.meta.loading) item.meta.loading = false;
+				};
+			}
+		});
+	});
+};
+// 监听路由变化,初始化 iframe 数据,防止多个 iframe 时,切换不生效
+watch(
+	() => route.fullPath,
+	(val) => {
+		const item: any = props.list.find((v: any) => v.path === val);
+		if (!item) return false;
+		if (!item.meta.isIframeOpen) item.meta.isIframeOpen = true;
+		closeIframeLoading(val, item);
+	},
+	{
+		immediate: true,
+	}
+);
+// 监听 iframe refreshKey 变化,用于 tagsview 右键菜单刷新
+watch(
+	() => props.refreshKey,
+	() => {
+		const item: any = props.list.find((v: any) => v.path === route.path);
+		if (!item) return false;
+		if (item.meta.isIframeOpen) item.meta.isIframeOpen = false;
+		setTimeout(() => {
+			item.meta.isIframeOpen = true;
+			item.meta.loading = true;
+			closeIframeLoading(route.fullPath, item);
+		});
+	},
+	{
+		deep: true,
+	}
+);
+</script>

+ 93 - 0
src/layout/routerView/link.vue

@@ -0,0 +1,93 @@
+<template>
+	<div class="layout-padding layout-link-container">
+		<div class="layout-padding-auto layout-padding-view">
+			<div class="layout-link-warp">
+				<i class="layout-link-icon iconfont icon-xingqiu"></i>
+				<div class="layout-link-msg">页面 "{{ $t(state.title) }}" 已在新窗口中打开</div>
+				<el-button class="mt30" round size="default" @click="onGotoFullPage">
+					<i class="iconfont icon-lianjie"></i>
+					<span>立即前往体验</span>
+				</el-button>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutLinkView">
+import { reactive, watch } from 'vue';
+import { useRoute } from 'vue-router';
+import { verifyUrl } from '/@/utils/toolsValidate';
+
+// 定义变量内容
+const route = useRoute();
+const state = reactive<LinkViewState>({
+	title: '',
+	isLink: '',
+});
+
+// 立即前往
+const onGotoFullPage = () => {
+	const { origin, pathname } = window.location;
+	if (verifyUrl(<string>state.isLink)) window.open(state.isLink);
+	else window.open(`${origin}${pathname}#${state.isLink}`);
+};
+// 监听路由的变化,设置内容
+watch(
+	() => route.path,
+	() => {
+		state.title = <string>route.meta.title;
+		state.isLink = <string>route.meta.isLink;
+	},
+	{
+		immediate: true,
+	}
+);
+</script>
+
+<style scoped lang="scss">
+.layout-link-container {
+	.layout-link-warp {
+		margin: auto;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		i.layout-link-icon {
+			position: relative;
+			font-size: 100px;
+			color: var(--el-color-primary);
+			&::after {
+				content: '';
+				position: absolute;
+				left: 50px;
+				top: 0;
+				width: 15px;
+				height: 100px;
+				background: linear-gradient(
+					rgba(255, 255, 255, 0.01),
+					rgba(255, 255, 255, 0.01),
+					rgba(255, 255, 255, 0.01),
+					rgba(255, 255, 255, 0.05),
+					rgba(255, 255, 255, 0.05),
+					rgba(255, 255, 255, 0.05),
+					rgba(235, 255, 255, 0.5),
+					rgba(255, 255, 255, 0.05),
+					rgba(255, 255, 255, 0.05),
+					rgba(255, 255, 255, 0.05),
+					rgba(255, 255, 255, 0.01),
+					rgba(255, 255, 255, 0.01),
+					rgba(255, 255, 255, 0.01)
+				);
+				transform: rotate(-15deg);
+				animation: toRight 5s linear infinite;
+			}
+		}
+		.layout-link-msg {
+			font-size: 12px;
+			color: var(--next-bg-topBarColor);
+			opacity: 0.7;
+			margin-top: 15px;
+		}
+	}
+}
+</style>

+ 123 - 0
src/layout/routerView/parent.vue

@@ -0,0 +1,123 @@
+<template>
+	<div class="layout-parent">
+		<router-view v-slot="{ Component }">
+			<transition :name="setTransitionName" mode="out-in">
+				<keep-alive :include="getKeepAliveNames" v-if="showView">
+						<component :is="Component" :key="state.refreshRouterViewKey" class="w100" v-show="!isIframePage" />
+				</keep-alive>
+			</transition>
+		</router-view>
+		<transition :name="setTransitionName" mode="out-in">
+			<Iframes class="w100" v-show="isIframePage" :refreshKey="state.iframeRefreshKey" :name="setTransitionName"
+				:list="state.iframeList" />
+		</transition>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutParentView">
+import { defineAsyncComponent, computed, reactive, onBeforeMount, onUnmounted, nextTick, watch, onMounted, ref, provide } from 'vue';
+import { useRoute, useRouter } from 'vue-router';
+import { storeToRefs } from 'pinia';
+import { useKeepALiveNames } from '/@/stores/keepAliveNames';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import { Session } from '/@/utils/storage';
+import mittBus from '/@/utils/mitt';
+
+// 引入组件
+const Iframes = defineAsyncComponent(() => import('/@/layout/routerView/iframes.vue'));
+
+// 定义变量内容
+const route = useRoute();
+const router = useRouter();
+const storesKeepAliveNames = useKeepALiveNames();
+const storesThemeConfig = useThemeConfig();
+const { keepAliveNames, cachedViews } = storeToRefs(storesKeepAliveNames);
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const state = reactive<ParentViewState>({
+	refreshRouterViewKey: '', // 非 iframe tagsview 右键菜单刷新时
+	iframeRefreshKey: '', // iframe tagsview 右键菜单刷新时
+	keepAliveNameList: [],
+	iframeList: [],
+});
+
+//全局依赖刷新页面
+const showView = ref(true)
+/**
+ * 刷新页面
+ */
+const refreshView = function () {
+	showView.value = false // 通过v-if移除router-view节点
+	nextTick(() => {
+		showView.value = true // DOM更新后再通过v-if添加router-view节点
+	})
+}
+provide('refreshView', refreshView)
+
+// 设置主界面切换动画
+const setTransitionName = computed(() => {
+	return themeConfig.value.animation;
+});
+// 获取组件缓存列表(name值)
+const getKeepAliveNames = computed(() => {
+  console.log(cachedViews.value)
+	return themeConfig.value.isTagsview ? cachedViews.value : state.keepAliveNameList;
+});
+// 设置 iframe 显示/隐藏
+const isIframePage = computed(() => {
+	return route.meta.isIframe;
+});
+// 获取 iframe 组件列表(未进行渲染)
+const getIframeListRoutes = async () => {
+	router.getRoutes().forEach((v) => {
+		if (v.meta.isIframe) {
+			v.meta.isIframeOpen = false;
+			v.meta.loading = true;
+			state.iframeList.push({ ...v });
+		}
+	});
+};
+// 页面加载前,处理缓存,页面刷新时路由缓存处理
+onBeforeMount(() => {
+	state.keepAliveNameList = keepAliveNames.value;
+	mittBus.on('onTagsViewRefreshRouterView', (fullPath: string) => {
+		state.keepAliveNameList = keepAliveNames.value.filter((name: string) => route.name !== name);
+		state.refreshRouterViewKey = '';
+		state.iframeRefreshKey = '';
+		nextTick(() => {
+			state.refreshRouterViewKey = fullPath;
+			state.iframeRefreshKey = fullPath;
+			state.keepAliveNameList = keepAliveNames.value;
+		});
+	});
+});
+// 页面加载时
+onMounted(() => {
+	getIframeListRoutes();
+	// https://gitee.com/lyt-top/vue-next-admin/issues/I58U75
+	// https://gitee.com/lyt-top/vue-next-admin/issues/I59RXK
+	// https://gitee.com/lyt-top/vue-next-admin/pulls/40
+	nextTick(() => {
+		setTimeout(() => {
+			if (themeConfig.value.isCacheTagsView) {
+				let tagsViewArr: RouteItem[] = Session.get('tagsViewList') || [];
+				cachedViews.value = tagsViewArr.filter((item) => item.meta?.isKeepAlive).map((item) => item.name as string);
+			}
+		}, 0);
+	});
+});
+// 页面卸载时
+onUnmounted(() => {
+	mittBus.off('onTagsViewRefreshRouterView', () => { });
+});
+// 监听路由变化,防止 tagsView 多标签时,切换动画消失
+// https://toscode.gitee.com/lyt-top/vue-next-admin/pulls/38/files
+watch(
+	() => route.fullPath,
+	() => {
+		state.refreshRouterViewKey = decodeURI(route.fullPath);
+	},
+	{
+		immediate: true,
+	}
+);
+</script>

+ 156 - 0
src/layout/upgrade/index.vue

@@ -0,0 +1,156 @@
+<template>
+	<div class="upgrade-dialog">
+		<el-dialog
+			v-model="state.isUpgrade"
+			width="300px"
+			destroy-on-close
+			:show-close="false"
+			:close-on-click-modal="false"
+			:close-on-press-escape="false"
+		>
+			<div class="upgrade-title">
+				<div class="upgrade-title-warp">
+					<span class="upgrade-title-warp-txt">{{ $t('message.upgrade.title') }}</span>
+					<span class="upgrade-title-warp-version">v{{ state.version }}</span>
+				</div>
+			</div>
+			<div class="upgrade-content">
+				{{ getThemeConfig.globalTitle }} {{ $t('message.upgrade.msg') }}
+				<div class="mt5">
+					<el-link type="primary" class="font12" href="https://gitee.com/huge-dream/django-vue3-admin/blob/master/CHANGELOG.md" target="_black">
+						CHANGELOG.md
+					</el-link>
+				</div>
+				<div class="upgrade-content-desc mt5">{{ $t('message.upgrade.desc') }}</div>
+			</div>
+			<div class="upgrade-btn">
+				<el-button round size="default" type="info" text  @click="onCancel" >{{ $t('message.upgrade.btnOne') }}</el-button>
+				<el-button type="primary" round size="default" @click="onUpgrade"  :loading="state.isLoading" >{{ state.btnTxt }}</el-button>
+			</div>
+		</el-dialog>
+	</div>
+</template>
+
+<script setup lang="ts" name="layoutUpgrade">
+import { reactive, computed, onMounted } from 'vue';
+import { useI18n } from 'vue-i18n';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import { Local,Session } from '/@/utils/storage';
+
+// 定义变量内容
+const { t } = useI18n();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const state = reactive({
+	isUpgrade: false,
+	// @ts-ignore
+	version: __VERSION__,
+	isLoading: false,
+	btnTxt: '',
+});
+
+// 获取布局配置信息
+const getThemeConfig = computed(() => {
+	return themeConfig.value;
+});
+// 残忍拒绝
+const onCancel = () => {
+	state.isUpgrade = false;
+  Session.set('isUpgrade', false)
+};
+// 马上更新
+const onUpgrade = () => {
+	state.isLoading = true;
+	state.btnTxt = t('message.upgrade.btnTwoLoading');
+	setTimeout(() => {
+		Local.clear();
+		window.location.reload();
+		Local.set('version', state.version);
+    Session.set('isUpgrade', false)
+	}, 2000);
+};
+// 延迟显示,防止刷新时界面显示太快
+const delayShow = () => {
+  const isUpgrade = Session.get('isUpgrade')===false?Session.get('isUpgrade'):true
+  if(isUpgrade){
+    setTimeout(() => {
+      state.isUpgrade = true;
+    }, 2000);
+  }
+};
+// 页面加载时
+onMounted(() => {
+	delayShow();
+	setTimeout(() => {
+		state.btnTxt = t('message.upgrade.btnTwo');
+	}, 200);
+});
+</script>
+
+<style scoped lang="scss">
+.upgrade-dialog {
+	:deep(.el-dialog) {
+		.el-dialog__body {
+			padding: 0 !important;
+		}
+		.el-dialog__header {
+			display: none !important;
+		}
+		.upgrade-title {
+			text-align: center;
+			height: 130px;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			position: relative;
+			&::after {
+				content: '';
+				position: absolute;
+				background-color: var(--el-color-primary-light-1);
+				width: 130%;
+				height: 130px;
+				border-bottom-left-radius: 100%;
+				border-bottom-right-radius: 100%;
+			}
+			.upgrade-title-warp {
+				z-index: 1;
+				position: relative;
+				.upgrade-title-warp-txt {
+					color: var(--next-color-white);
+					font-size: 22px;
+					letter-spacing: 3px;
+				}
+				.upgrade-title-warp-version {
+					color: var(--next-color-white);
+					background-color: var(--el-color-primary-light-4);
+					font-size: 12px;
+					position: absolute;
+					display: flex;
+					top: -2px;
+					right: -50px;
+					padding: 2px 4px;
+					border-radius: 2px;
+				}
+			}
+		}
+		.upgrade-content {
+			padding: 20px;
+			line-height: 22px;
+			.upgrade-content-desc {
+				color: var(--el-color-info-light-5);
+				font-size: 12px;
+			}
+		}
+		.upgrade-btn {
+			border-top: 1px solid var(--el-border-color-lighter, #ebeef5);
+			display: flex;
+			justify-content: space-around;
+			padding: 15px 20px;
+			.el-button {
+				width: 100%;
+			}
+		}
+	}
+}
+</style>

+ 65 - 0
src/main.ts

@@ -0,0 +1,65 @@
+import { createApp } from 'vue';
+import App from './App.vue';
+import router from './router';
+import { directive } from '/@/directive/index';
+import { i18n } from '/@/i18n';
+import other from '/@/utils/other';
+import '/@/assets/style/tailwind.css'; // 先引入tailwind css, 以免element-plus冲突
+import ElementPlus from 'element-plus';
+import 'element-plus/dist/index.css';
+import '/@/theme/index.scss';
+import mitt from 'mitt';
+import VueGridLayout from 'vue-grid-layout';
+import piniaPersist from 'pinia-plugin-persist';
+// @ts-ignore
+import fastCrud from './settings.ts';
+import pinia from './stores';
+import {RegisterPermission} from '/@/plugin/permission/index';
+// @ts-ignore
+import eIconPicker, { iconList, analyzingIconForIconfont } from 'e-icon-picker';
+import 'e-icon-picker/icon/default-icon/symbol.js'; //基本彩色图标库
+import 'e-icon-picker/index.css'; // 基本样式,包含基本图标
+import 'font-awesome/css/font-awesome.min.css';
+import elementPlus from 'e-icon-picker/icon/ele/element-plus.js'; //element-plus的图标
+import fontAwesome470 from 'e-icon-picker/icon/fontawesome/font-awesome.v4.7.0.js'; //fontAwesome470的图标
+import eIconList from 'e-icon-picker/icon/default-icon/eIconList.js';
+import iconfont from '/@/assets/iconfont/iconfont.json'; //引入json文件
+import '/@/assets/iconfont/iconfont.css'; //引入css
+// 自动注册插件
+import { scanAndInstallPlugins } from '/@/views/plugins/index';
+import VXETable from 'vxe-table'
+import 'vxe-table/lib/style.css'
+
+import '/@/assets/style/reset.scss';
+import 'element-tree-line/dist/style.css'
+
+let forIconfont = analyzingIconForIconfont(iconfont); //解析class
+iconList.addIcon(forIconfont.list); // 添加iconfont dvadmin3的icon
+iconList.addIcon(elementPlus); // 添加element plus的图标
+iconList.addIcon(fontAwesome470); // 添加fontAwesome 470版本的图标
+
+let app = createApp(App);
+
+scanAndInstallPlugins(app);
+
+app.use(eIconPicker, {
+	addIconList: eIconList, //全局添加图标
+	removeIconList: [], //全局删除图标
+	zIndex: 3100, //选择器弹层的最低层,全局配置
+});
+
+pinia.use(piniaPersist);
+directive(app);
+other.elSvg(app);
+
+
+app.use(VXETable)
+app.use(pinia)
+	.use(router)
+	.use(ElementPlus, { i18n: i18n.global.t })
+	.use(i18n)
+	.use(VueGridLayout)
+	.use(fastCrud)
+	.mount('#app');
+
+app.config.globalProperties.mittBus = mitt();

Некоторые файлы не были показаны из-за большого количества измененных файлов