From 454615e8f4015dfea21f917fac724f5b2179539c Mon Sep 17 00:00:00 2001 From: dqz Date: Tue, 4 Mar 2025 09:11:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 21 + .editorconfig | 14 + .env | 5 + .env.development | 11 + .env.production | 16 + .env.staging | 19 + .eslintignore | 11 + .eslintrc.js | 120 + .gitignore | 24 + .husky/commit-msg | 6 + .husky/common.sh | 9 + .husky/lintstagedrc.js | 8 + .husky/pre-commit | 10 + .markdownlint.json | 11 + .npmrc | 3 + .prettierrc.js | 6 + .stylelintignore | 4 + .vscode/extensions.json | 31 + .vscode/settings.json | 37 + .vscode/vue3.0.code-snippets | 22 + .vscode/vue3.2.code-snippets | 17 + .vscode/vue3.3.code-snippets | 20 + Dockerfile | 20 + LICENSE | 21 + README.en-US.md | 36 + README.md | 145 + build/cdn.ts | 56 + build/compress.ts | 63 + build/index.ts | 37 + build/info.ts | 53 + build/optimize.ts | 32 + build/plugins.ts | 56 + commitlint.config.js | 32 + index.html | 87 + mock/asyncRoutes.ts | 49 + mock/login.ts | 36 + mock/refreshToken.ts | 27 + package.json | 142 + pnpm-lock.yaml | 8590 +++++++++++++++++ postcss.config.js | 9 + public/favicon.ico | Bin 0 -> 1270 bytes public/img/10.jpg | Bin 0 -> 6621 bytes public/img/11.jpg | Bin 0 -> 7385 bytes public/img/12.jpg | Bin 0 -> 2159 bytes public/img/13.jpg | Bin 0 -> 5849 bytes public/img/14.jpg | Bin 0 -> 5894 bytes public/img/15.jpg | Bin 0 -> 8270 bytes public/img/16.jpg | Bin 0 -> 7053 bytes public/img/17.jpg | Bin 0 -> 4925 bytes public/img/18.jpg | Bin 0 -> 8448 bytes public/img/19.jpg | Bin 0 -> 7787 bytes public/img/20.jpg | Bin 0 -> 9563 bytes public/img/21.jpg | Bin 0 -> 6255 bytes public/img/22.jpg | Bin 0 -> 6429 bytes public/img/23.jpg | Bin 0 -> 4337 bytes public/img/24.jpg | Bin 0 -> 6700 bytes public/img/25.jpg | Bin 0 -> 11786 bytes public/img/26.jpg | Bin 0 -> 7531 bytes public/img/27.jpg | Bin 0 -> 4289 bytes public/img/28.jpg | Bin 0 -> 3959 bytes public/img/29.jpg | Bin 0 -> 13260 bytes public/img/30.jpg | Bin 0 -> 9257 bytes public/img/31.jpg | Bin 0 -> 6372 bytes public/img/32.jpg | Bin 0 -> 3828 bytes public/img/33.jpg | Bin 0 -> 7756 bytes public/img/4.jpg | Bin 0 -> 4192 bytes public/img/5.jpg | Bin 0 -> 11065 bytes public/img/6.jpg | Bin 0 -> 9150 bytes public/img/7.jpg | Bin 0 -> 7787 bytes public/img/8.jpg | Bin 0 -> 9703 bytes public/img/9.jpg | Bin 0 -> 8404 bytes public/logo.svg | 1 + public/serverConfig.json | 22 + src/App.vue | 25 + src/api/common/login.ts | 108 + src/api/shop/goods.ts | 82 + src/api/system/config.ts | 76 + src/api/system/dept.ts | 83 + src/api/system/log.ts | 116 + src/api/system/menu.ts | 118 + src/api/system/monitor.ts | 137 + src/api/system/notice.ts | 64 + src/api/system/post.ts | 70 + src/api/system/role.ts | 65 + src/api/system/user.ts | 176 + src/assets/iconfont/iconfont.css | 26 + src/assets/iconfont/iconfont.js | 69 + src/assets/iconfont/iconfont.json | 30 + src/assets/iconfont/iconfont.ttf | Bin 0 -> 3904 bytes src/assets/iconfont/iconfont.woff | Bin 0 -> 2484 bytes src/assets/iconfont/iconfont.woff2 | Bin 0 -> 2016 bytes src/assets/login/avatar.svg | 1 + src/assets/login/bg.png | Bin 0 -> 17468 bytes src/assets/login/illustration.svg | 1 + src/assets/status/403.svg | 1 + src/assets/status/404.svg | 1 + src/assets/status/500.svg | 1 + src/assets/svg/FullScreenMaximize.svg | 1 + src/assets/svg/FullScreenMinimize.svg | 1 + src/assets/svg/back_top.svg | 1 + src/assets/svg/dark.svg | 1 + src/assets/svg/day.svg | 1 + src/assets/svg/enter_outlined.svg | 1 + src/assets/svg/exit_screen.svg | 1 + src/assets/svg/full_screen.svg | 1 + src/assets/svg/keyboard_esc.svg | 1 + src/assets/user.jpg | Bin 0 -> 3694 bytes src/components/ReAuth/index.ts | 5 + src/components/ReAuth/src/auth.tsx | 20 + src/components/ReCol/index.ts | 29 + src/components/ReCropper/index.ts | 7 + src/components/ReCropper/src/circled.css | 11 + src/components/ReCropper/src/index.tsx | 439 + .../ReCropper/src/svg/arrow-down.svg | 1 + src/components/ReCropper/src/svg/arrow-h.svg | 1 + .../ReCropper/src/svg/arrow-left.svg | 1 + .../ReCropper/src/svg/arrow-right.svg | 1 + src/components/ReCropper/src/svg/arrow-up.svg | 1 + src/components/ReCropper/src/svg/arrow-v.svg | 1 + src/components/ReCropper/src/svg/change.svg | 1 + src/components/ReCropper/src/svg/download.svg | 1 + src/components/ReCropper/src/svg/index.ts | 31 + src/components/ReCropper/src/svg/reload.svg | 1 + .../ReCropper/src/svg/rotate-left.svg | 1 + .../ReCropper/src/svg/rotate-right.svg | 1 + .../ReCropper/src/svg/search-minus.svg | 1 + .../ReCropper/src/svg/search-plus.svg | 1 + src/components/ReCropper/src/svg/upload.svg | 1 + src/components/ReDialog/index.ts | 64 + src/components/ReDialog/index.vue | 157 + src/components/ReDialog/type.ts | 218 + src/components/ReIcon/data.ts | 1961 ++++ src/components/ReIcon/index.ts | 12 + src/components/ReIcon/src/Select.vue | 237 + src/components/ReIcon/src/hooks.ts | 61 + src/components/ReIcon/src/iconfont.ts | 48 + .../ReIcon/src/iconifyIconOffline.ts | 30 + .../ReIcon/src/iconifyIconOnline.ts | 30 + src/components/ReIcon/src/offlineIcon.ts | 45 + src/components/ReIcon/src/types.ts | 19 + src/components/ReImageVerify/index.ts | 7 + src/components/ReImageVerify/src/hooks.ts | 86 + src/components/ReImageVerify/src/index.vue | 46 + src/components/RePureTableBar/index.ts | 5 + src/components/RePureTableBar/src/bar.tsx | 355 + .../RePureTableBar/src/svg/collapse.svg | 1 + .../RePureTableBar/src/svg/drag.svg | 1 + .../RePureTableBar/src/svg/expand.svg | 1 + .../RePureTableBar/src/svg/refresh.svg | 1 + .../RePureTableBar/src/svg/settings.svg | 1 + src/components/ReQrcode/index.ts | 7 + src/components/ReQrcode/src/index.scss | 9 + src/components/ReQrcode/src/index.tsx | 261 + src/components/ReTypeit/index.ts | 44 + src/components/VDialog/VDialog.vue | 173 + src/components/VDialog/dialog.css | 62 + src/components/VDialog/dialog.ts | 47 + src/config/index.ts | 55 + src/directives/auth/index.ts | 15 + src/directives/copy/index.ts | 33 + src/directives/index.ts | 4 + src/directives/longpress/index.ts | 63 + src/directives/optimize/index.ts | 55 + src/layout/components/appMain.vue | 148 + src/layout/components/navbar.vue | 143 + src/layout/components/notice/data.ts | 146 + src/layout/components/notice/index.vue | 88 + src/layout/components/notice/noticeItem.vue | 177 + src/layout/components/notice/noticeList.vue | 23 + src/layout/components/panel/index.vue | 158 + .../search/components/SearchFooter.vue | 62 + .../search/components/SearchModal.vue | 198 + .../search/components/SearchResult.vue | 126 + .../components/search/components/index.ts | 3 + src/layout/components/search/index.vue | 20 + src/layout/components/setting/index.vue | 529 + src/layout/components/sidebar/breadCrumb.vue | 104 + src/layout/components/sidebar/extraIcon.vue | 20 + src/layout/components/sidebar/horizontal.vue | 105 + .../components/sidebar/leftCollapse.vue | 71 + src/layout/components/sidebar/logo.vue | 71 + src/layout/components/sidebar/mixNav.vue | 138 + src/layout/components/sidebar/sidebarItem.vue | 316 + src/layout/components/sidebar/topCollapse.vue | 33 + src/layout/components/sidebar/vertical.vue | 120 + src/layout/components/tag/index.scss | 295 + src/layout/components/tag/index.vue | 611 ++ src/layout/frameView.vue | 73 + src/layout/hooks/useBoolean.ts | 26 + src/layout/hooks/useDataThemeChange.ts | 106 + src/layout/hooks/useLayout.ts | 54 + src/layout/hooks/useNav.ts | 147 + src/layout/hooks/useTag.ts | 250 + src/layout/index.vue | 227 + src/layout/redirect.vue | 24 + src/layout/theme/index.ts | 132 + src/layout/types.ts | 91 + src/main.ts | 60 + src/mockProdServer.ts | 14 + src/plugins/echarts/index.ts | 42 + src/plugins/element-plus/index.ts | 141 + src/router/index.ts | 207 + src/router/modules/error.ts | 36 + src/router/modules/global.ts | 20 + src/router/modules/home.ts | 25 + src/router/modules/remaining.ts | 46 + src/router/utils.ts | 389 + src/store/index.ts | 9 + src/store/modules/app.ts | 68 + src/store/modules/epTheme.ts | 49 + src/store/modules/multiTags.ts | 124 + src/store/modules/permission.ts | 64 + src/store/modules/settings.ts | 38 + src/store/modules/types.ts | 46 + src/store/modules/user.ts | 88 + src/style/dark.scss | 141 + src/style/element-plus.scss | 171 + src/style/index.scss | 20 + src/style/login.css | 90 + src/style/reset.scss | 258 + src/style/sidebar.scss | 689 ++ src/style/tailwind.css | 21 + src/style/transition.scss | 54 + src/utils/auth.ts | 90 + src/utils/common.ts | 141 + src/utils/crypt.ts | 53 + src/utils/globalPolyfills.ts | 7 + src/utils/http/index.ts | 311 + src/utils/http/types.d.ts | 47 + src/utils/message.ts | 85 + src/utils/mitt.ts | 13 + src/utils/print.ts | 214 + src/utils/progress/index.ts | 17 + src/utils/propTypes.ts | 39 + src/utils/responsive.ts | 37 + src/utils/rootConver.ts | 22 + src/utils/sso.ts | 59 + src/utils/tree.ts | 229 + src/views/error/403.vue | 67 + src/views/error/404.vue | 70 + src/views/error/500.vue | 70 + src/views/login/components/phone.vue | 106 + src/views/login/components/qrCode.vue | 27 + src/views/login/components/register.vue | 189 + src/views/login/components/resetPassword.vue | 154 + src/views/login/index.vue | 364 + src/views/login/utils/enums.ts | 35 + src/views/login/utils/motion.ts | 40 + src/views/login/utils/rule.ts | 127 + src/views/login/utils/static.ts | 5 + src/views/login/utils/verifyCode.ts | 50 + src/views/permission/button/index.vue | 75 + src/views/permission/page/index.vue | 66 + src/views/shop/goods/goods-form-modal.vue | 110 + src/views/shop/goods/index.vue | 158 + src/views/system/config/form.vue | 98 + src/views/system/config/index.vue | 157 + src/views/system/config/utils/hook.tsx | 185 + src/views/system/config/utils/rule.ts | 9 + src/views/system/dept/form.vue | 134 + src/views/system/dept/index.vue | 149 + src/views/system/dept/utils/hook.tsx | 206 + src/views/system/dept/utils/rule.ts | 37 + src/views/system/hooks.ts | 39 + src/views/system/log/loginLog/index.vue | 195 + src/views/system/log/loginLog/utils/hook.tsx | 234 + .../system/log/operationLog/description.vue | 93 + src/views/system/log/operationLog/index.vue | 223 + .../system/log/operationLog/utils/hook.tsx | 270 + src/views/system/menu/form.vue | 237 + src/views/system/menu/index.vue | 147 + src/views/system/menu/utils/hook.tsx | 262 + src/views/system/menu/utils/menuLogic.ts | 62 + src/views/system/menu/utils/rule.ts | 37 + src/views/system/monitor/cache/index.vue | 170 + src/views/system/monitor/hooks.ts | 39 + src/views/system/monitor/onlineUser/index.vue | 133 + .../system/monitor/onlineUser/utils/hook.tsx | 141 + src/views/system/monitor/server/index.vue | 243 + src/views/system/notice/form.vue | 86 + src/views/system/notice/index.vue | 192 + src/views/system/notice/utils/hook.tsx | 289 + src/views/system/notice/utils/rule.ts | 8 + src/views/system/notice/utils/types.ts | 17 + src/views/system/post/index.vue | 228 + src/views/system/post/post-form-modal.vue | 131 + src/views/system/post/utils/hook.tsx | 229 + src/views/system/role/index.vue | 228 + src/views/system/role/role-form-modal.vue | 158 + src/views/system/role/utils/hook.tsx | 202 + src/views/system/user/form.vue | 209 + src/views/system/user/hook.tsx | 389 + src/views/system/user/index.vue | 223 + src/views/system/user/passwordForm.vue | 48 + src/views/system/user/profile/index.vue | 99 + src/views/system/user/profile/resetPwd.vue | 88 + src/views/system/user/profile/userAvatar.vue | 136 + src/views/system/user/profile/userInfo.vue | 89 + src/views/system/user/rule.ts | 37 + src/views/system/user/svg/expand.svg | 1 + src/views/system/user/svg/unexpand.svg | 1 + src/views/system/user/tree.vue | 212 + src/views/system/user/uploadForm.vue | 83 + src/views/system/user/utils/hook.tsx | 234 + src/views/welcome/index.vue | 9 + stylelint.config.js | 84 + tailwind.config.js | 18 + tsconfig.json | 42 + types/global-components.d.ts | 124 + types/global.d.ts | 161 + types/index.d.ts | 104 + types/router.d.ts | 109 + types/shims-tsx.d.ts | 22 + types/shims-vue.d.ts | 10 + vite.config.ts | 81 + 315 files changed, 34671 insertions(+) create mode 100644 .dockerignore create mode 100644 .editorconfig create mode 100644 .env create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .env.staging create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .husky/commit-msg create mode 100644 .husky/common.sh create mode 100644 .husky/lintstagedrc.js create mode 100644 .husky/pre-commit create mode 100644 .markdownlint.json create mode 100644 .npmrc create mode 100644 .prettierrc.js create mode 100644 .stylelintignore create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/vue3.0.code-snippets create mode 100644 .vscode/vue3.2.code-snippets create mode 100644 .vscode/vue3.3.code-snippets create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.en-US.md create mode 100644 README.md create mode 100644 build/cdn.ts create mode 100644 build/compress.ts create mode 100644 build/index.ts create mode 100644 build/info.ts create mode 100644 build/optimize.ts create mode 100644 build/plugins.ts create mode 100644 commitlint.config.js create mode 100644 index.html create mode 100644 mock/asyncRoutes.ts create mode 100644 mock/login.ts create mode 100644 mock/refreshToken.ts create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 postcss.config.js create mode 100644 public/favicon.ico create mode 100644 public/img/10.jpg create mode 100644 public/img/11.jpg create mode 100644 public/img/12.jpg create mode 100644 public/img/13.jpg create mode 100644 public/img/14.jpg create mode 100644 public/img/15.jpg create mode 100644 public/img/16.jpg create mode 100644 public/img/17.jpg create mode 100644 public/img/18.jpg create mode 100644 public/img/19.jpg create mode 100644 public/img/20.jpg create mode 100644 public/img/21.jpg create mode 100644 public/img/22.jpg create mode 100644 public/img/23.jpg create mode 100644 public/img/24.jpg create mode 100644 public/img/25.jpg create mode 100644 public/img/26.jpg create mode 100644 public/img/27.jpg create mode 100644 public/img/28.jpg create mode 100644 public/img/29.jpg create mode 100644 public/img/30.jpg create mode 100644 public/img/31.jpg create mode 100644 public/img/32.jpg create mode 100644 public/img/33.jpg create mode 100644 public/img/4.jpg create mode 100644 public/img/5.jpg create mode 100644 public/img/6.jpg create mode 100644 public/img/7.jpg create mode 100644 public/img/8.jpg create mode 100644 public/img/9.jpg create mode 100644 public/logo.svg create mode 100644 public/serverConfig.json create mode 100644 src/App.vue create mode 100644 src/api/common/login.ts create mode 100644 src/api/shop/goods.ts create mode 100644 src/api/system/config.ts create mode 100644 src/api/system/dept.ts create mode 100644 src/api/system/log.ts create mode 100644 src/api/system/menu.ts create mode 100644 src/api/system/monitor.ts create mode 100644 src/api/system/notice.ts create mode 100644 src/api/system/post.ts create mode 100644 src/api/system/role.ts create mode 100644 src/api/system/user.ts create mode 100644 src/assets/iconfont/iconfont.css create mode 100644 src/assets/iconfont/iconfont.js create mode 100644 src/assets/iconfont/iconfont.json create mode 100644 src/assets/iconfont/iconfont.ttf create mode 100644 src/assets/iconfont/iconfont.woff create mode 100644 src/assets/iconfont/iconfont.woff2 create mode 100644 src/assets/login/avatar.svg create mode 100644 src/assets/login/bg.png create mode 100644 src/assets/login/illustration.svg create mode 100644 src/assets/status/403.svg create mode 100644 src/assets/status/404.svg create mode 100644 src/assets/status/500.svg create mode 100644 src/assets/svg/FullScreenMaximize.svg create mode 100644 src/assets/svg/FullScreenMinimize.svg create mode 100644 src/assets/svg/back_top.svg create mode 100644 src/assets/svg/dark.svg create mode 100644 src/assets/svg/day.svg create mode 100644 src/assets/svg/enter_outlined.svg create mode 100644 src/assets/svg/exit_screen.svg create mode 100644 src/assets/svg/full_screen.svg create mode 100644 src/assets/svg/keyboard_esc.svg create mode 100644 src/assets/user.jpg create mode 100644 src/components/ReAuth/index.ts create mode 100644 src/components/ReAuth/src/auth.tsx create mode 100644 src/components/ReCol/index.ts create mode 100644 src/components/ReCropper/index.ts create mode 100644 src/components/ReCropper/src/circled.css create mode 100644 src/components/ReCropper/src/index.tsx create mode 100644 src/components/ReCropper/src/svg/arrow-down.svg create mode 100644 src/components/ReCropper/src/svg/arrow-h.svg create mode 100644 src/components/ReCropper/src/svg/arrow-left.svg create mode 100644 src/components/ReCropper/src/svg/arrow-right.svg create mode 100644 src/components/ReCropper/src/svg/arrow-up.svg create mode 100644 src/components/ReCropper/src/svg/arrow-v.svg create mode 100644 src/components/ReCropper/src/svg/change.svg create mode 100644 src/components/ReCropper/src/svg/download.svg create mode 100644 src/components/ReCropper/src/svg/index.ts create mode 100644 src/components/ReCropper/src/svg/reload.svg create mode 100644 src/components/ReCropper/src/svg/rotate-left.svg create mode 100644 src/components/ReCropper/src/svg/rotate-right.svg create mode 100644 src/components/ReCropper/src/svg/search-minus.svg create mode 100644 src/components/ReCropper/src/svg/search-plus.svg create mode 100644 src/components/ReCropper/src/svg/upload.svg create mode 100644 src/components/ReDialog/index.ts create mode 100644 src/components/ReDialog/index.vue create mode 100644 src/components/ReDialog/type.ts create mode 100644 src/components/ReIcon/data.ts create mode 100644 src/components/ReIcon/index.ts create mode 100644 src/components/ReIcon/src/Select.vue create mode 100644 src/components/ReIcon/src/hooks.ts create mode 100644 src/components/ReIcon/src/iconfont.ts create mode 100644 src/components/ReIcon/src/iconifyIconOffline.ts create mode 100644 src/components/ReIcon/src/iconifyIconOnline.ts create mode 100644 src/components/ReIcon/src/offlineIcon.ts create mode 100644 src/components/ReIcon/src/types.ts create mode 100644 src/components/ReImageVerify/index.ts create mode 100644 src/components/ReImageVerify/src/hooks.ts create mode 100644 src/components/ReImageVerify/src/index.vue create mode 100644 src/components/RePureTableBar/index.ts create mode 100644 src/components/RePureTableBar/src/bar.tsx create mode 100644 src/components/RePureTableBar/src/svg/collapse.svg create mode 100644 src/components/RePureTableBar/src/svg/drag.svg create mode 100644 src/components/RePureTableBar/src/svg/expand.svg create mode 100644 src/components/RePureTableBar/src/svg/refresh.svg create mode 100644 src/components/RePureTableBar/src/svg/settings.svg create mode 100644 src/components/ReQrcode/index.ts create mode 100644 src/components/ReQrcode/src/index.scss create mode 100644 src/components/ReQrcode/src/index.tsx create mode 100644 src/components/ReTypeit/index.ts create mode 100644 src/components/VDialog/VDialog.vue create mode 100644 src/components/VDialog/dialog.css create mode 100644 src/components/VDialog/dialog.ts create mode 100644 src/config/index.ts create mode 100644 src/directives/auth/index.ts create mode 100644 src/directives/copy/index.ts create mode 100644 src/directives/index.ts create mode 100644 src/directives/longpress/index.ts create mode 100644 src/directives/optimize/index.ts create mode 100644 src/layout/components/appMain.vue create mode 100644 src/layout/components/navbar.vue create mode 100644 src/layout/components/notice/data.ts create mode 100644 src/layout/components/notice/index.vue create mode 100644 src/layout/components/notice/noticeItem.vue create mode 100644 src/layout/components/notice/noticeList.vue create mode 100644 src/layout/components/panel/index.vue create mode 100644 src/layout/components/search/components/SearchFooter.vue create mode 100644 src/layout/components/search/components/SearchModal.vue create mode 100644 src/layout/components/search/components/SearchResult.vue create mode 100644 src/layout/components/search/components/index.ts create mode 100644 src/layout/components/search/index.vue create mode 100644 src/layout/components/setting/index.vue create mode 100644 src/layout/components/sidebar/breadCrumb.vue create mode 100644 src/layout/components/sidebar/extraIcon.vue create mode 100644 src/layout/components/sidebar/horizontal.vue create mode 100644 src/layout/components/sidebar/leftCollapse.vue create mode 100644 src/layout/components/sidebar/logo.vue create mode 100644 src/layout/components/sidebar/mixNav.vue create mode 100644 src/layout/components/sidebar/sidebarItem.vue create mode 100644 src/layout/components/sidebar/topCollapse.vue create mode 100644 src/layout/components/sidebar/vertical.vue create mode 100644 src/layout/components/tag/index.scss create mode 100644 src/layout/components/tag/index.vue create mode 100644 src/layout/frameView.vue create mode 100644 src/layout/hooks/useBoolean.ts create mode 100644 src/layout/hooks/useDataThemeChange.ts create mode 100644 src/layout/hooks/useLayout.ts create mode 100644 src/layout/hooks/useNav.ts create mode 100644 src/layout/hooks/useTag.ts create mode 100644 src/layout/index.vue create mode 100644 src/layout/redirect.vue create mode 100644 src/layout/theme/index.ts create mode 100644 src/layout/types.ts create mode 100644 src/main.ts create mode 100644 src/mockProdServer.ts create mode 100644 src/plugins/echarts/index.ts create mode 100644 src/plugins/element-plus/index.ts create mode 100644 src/router/index.ts create mode 100644 src/router/modules/error.ts create mode 100644 src/router/modules/global.ts create mode 100644 src/router/modules/home.ts create mode 100644 src/router/modules/remaining.ts create mode 100644 src/router/utils.ts create mode 100644 src/store/index.ts create mode 100644 src/store/modules/app.ts create mode 100644 src/store/modules/epTheme.ts create mode 100644 src/store/modules/multiTags.ts create mode 100644 src/store/modules/permission.ts create mode 100644 src/store/modules/settings.ts create mode 100644 src/store/modules/types.ts create mode 100644 src/store/modules/user.ts create mode 100644 src/style/dark.scss create mode 100644 src/style/element-plus.scss create mode 100644 src/style/index.scss create mode 100644 src/style/login.css create mode 100644 src/style/reset.scss create mode 100644 src/style/sidebar.scss create mode 100644 src/style/tailwind.css create mode 100644 src/style/transition.scss create mode 100644 src/utils/auth.ts create mode 100644 src/utils/common.ts create mode 100644 src/utils/crypt.ts create mode 100644 src/utils/globalPolyfills.ts create mode 100644 src/utils/http/index.ts create mode 100644 src/utils/http/types.d.ts create mode 100644 src/utils/message.ts create mode 100644 src/utils/mitt.ts create mode 100644 src/utils/print.ts create mode 100644 src/utils/progress/index.ts create mode 100644 src/utils/propTypes.ts create mode 100644 src/utils/responsive.ts create mode 100644 src/utils/rootConver.ts create mode 100644 src/utils/sso.ts create mode 100644 src/utils/tree.ts create mode 100644 src/views/error/403.vue create mode 100644 src/views/error/404.vue create mode 100644 src/views/error/500.vue create mode 100644 src/views/login/components/phone.vue create mode 100644 src/views/login/components/qrCode.vue create mode 100644 src/views/login/components/register.vue create mode 100644 src/views/login/components/resetPassword.vue create mode 100644 src/views/login/index.vue create mode 100644 src/views/login/utils/enums.ts create mode 100644 src/views/login/utils/motion.ts create mode 100644 src/views/login/utils/rule.ts create mode 100644 src/views/login/utils/static.ts create mode 100644 src/views/login/utils/verifyCode.ts create mode 100644 src/views/permission/button/index.vue create mode 100644 src/views/permission/page/index.vue create mode 100644 src/views/shop/goods/goods-form-modal.vue create mode 100644 src/views/shop/goods/index.vue create mode 100644 src/views/system/config/form.vue create mode 100644 src/views/system/config/index.vue create mode 100644 src/views/system/config/utils/hook.tsx create mode 100644 src/views/system/config/utils/rule.ts create mode 100644 src/views/system/dept/form.vue create mode 100644 src/views/system/dept/index.vue create mode 100644 src/views/system/dept/utils/hook.tsx create mode 100644 src/views/system/dept/utils/rule.ts create mode 100644 src/views/system/hooks.ts create mode 100644 src/views/system/log/loginLog/index.vue create mode 100644 src/views/system/log/loginLog/utils/hook.tsx create mode 100644 src/views/system/log/operationLog/description.vue create mode 100644 src/views/system/log/operationLog/index.vue create mode 100644 src/views/system/log/operationLog/utils/hook.tsx create mode 100644 src/views/system/menu/form.vue create mode 100644 src/views/system/menu/index.vue create mode 100644 src/views/system/menu/utils/hook.tsx create mode 100644 src/views/system/menu/utils/menuLogic.ts create mode 100644 src/views/system/menu/utils/rule.ts create mode 100644 src/views/system/monitor/cache/index.vue create mode 100644 src/views/system/monitor/hooks.ts create mode 100644 src/views/system/monitor/onlineUser/index.vue create mode 100644 src/views/system/monitor/onlineUser/utils/hook.tsx create mode 100644 src/views/system/monitor/server/index.vue create mode 100644 src/views/system/notice/form.vue create mode 100644 src/views/system/notice/index.vue create mode 100644 src/views/system/notice/utils/hook.tsx create mode 100644 src/views/system/notice/utils/rule.ts create mode 100644 src/views/system/notice/utils/types.ts create mode 100644 src/views/system/post/index.vue create mode 100644 src/views/system/post/post-form-modal.vue create mode 100644 src/views/system/post/utils/hook.tsx create mode 100644 src/views/system/role/index.vue create mode 100644 src/views/system/role/role-form-modal.vue create mode 100644 src/views/system/role/utils/hook.tsx create mode 100644 src/views/system/user/form.vue create mode 100644 src/views/system/user/hook.tsx create mode 100644 src/views/system/user/index.vue create mode 100644 src/views/system/user/passwordForm.vue create mode 100644 src/views/system/user/profile/index.vue create mode 100644 src/views/system/user/profile/resetPwd.vue create mode 100644 src/views/system/user/profile/userAvatar.vue create mode 100644 src/views/system/user/profile/userInfo.vue create mode 100644 src/views/system/user/rule.ts create mode 100644 src/views/system/user/svg/expand.svg create mode 100644 src/views/system/user/svg/unexpand.svg create mode 100644 src/views/system/user/tree.vue create mode 100644 src/views/system/user/uploadForm.vue create mode 100644 src/views/system/user/utils/hook.tsx create mode 100644 src/views/welcome/index.vue create mode 100644 stylelint.config.js create mode 100644 tailwind.config.js create mode 100644 tsconfig.json create mode 100644 types/global-components.d.ts create mode 100644 types/global.d.ts create mode 100644 types/index.d.ts create mode 100644 types/router.d.ts create mode 100644 types/shims-tsx.d.ts create mode 100644 types/shims-vue.d.ts create mode 100644 vite.config.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0376edd --- /dev/null +++ b/.dockerignore @@ -0,0 +1,21 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local +.eslintcache +report.html + +yarn.lock +npm-debug.log* +.pnpm-error.log* +.pnpm-debug.log +tests/**/coverage/ + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +tsconfig.tsbuildinfo diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..ea6e20f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.env b/.env new file mode 100644 index 0000000..09344c1 --- /dev/null +++ b/.env @@ -0,0 +1,5 @@ +# 平台本地运行端口号 +VITE_PORT = 8848 + +# 是否隐藏首页 隐藏 true 不隐藏 false (勿删除,VITE_HIDE_HOME只需在.env文件配置) +VITE_HIDE_HOME = false diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..d68d966 --- /dev/null +++ b/.env.development @@ -0,0 +1,11 @@ +# 平台本地运行端口号 +VITE_PORT = 80 + +# 开发环境读取配置文件路径 +VITE_PUBLIC_PATH = ./ + +# 开发环境路由历史模式(Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数") +VITE_ROUTER_HISTORY = "hash" + +# 后端地址 +VITE_APP_BASE_API = '/dev-api' diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..6ecab1d --- /dev/null +++ b/.env.production @@ -0,0 +1,16 @@ +# 线上环境平台打包路径 +VITE_PUBLIC_PATH = ./ + +# 线上环境路由历史模式(Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数") +VITE_ROUTER_HISTORY = "hash" + +# 是否在打包时使用cdn替换本地库 替换 true 不替换 false +VITE_CDN = false + +# 是否启用gzip压缩或brotli压缩(分两种情况,删除原始文件和不删除原始文件) +# 压缩时不删除原始文件的配置:gzip、brotli、both(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认) +# 压缩时删除原始文件的配置:gzip-clear、brotli-clear、both-clear(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认) +VITE_COMPRESSION = "none" + +# 后端地址 +VITE_APP_BASE_API = '/prod-api' \ No newline at end of file diff --git a/.env.staging b/.env.staging new file mode 100644 index 0000000..1aed2ef --- /dev/null +++ b/.env.staging @@ -0,0 +1,19 @@ +# 预发布也需要生产环境的行为 +# https://cn.vitejs.dev/guide/env-and-mode.html#modes +# NODE_ENV = development + +VITE_PUBLIC_PATH = ./ + +# 预发布环境路由历史模式(Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数") +VITE_ROUTER_HISTORY = "hash" + +# 是否在打包时使用cdn替换本地库 替换 true 不替换 false +VITE_CDN = true + +# 是否启用gzip压缩或brotli压缩(分两种情况,删除原始文件和不删除原始文件) +# 压缩时不删除原始文件的配置:gzip、brotli、both(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认) +# 压缩时删除原始文件的配置:gzip-clear、brotli-clear、both-clear(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认) +VITE_COMPRESSION = "none" + +# 后端地址 +VITE_APP_BASE_API = '/stage-api' \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..3406365 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,11 @@ +public +dist +*.d.ts +/src/assets +package.json +.eslintrc.js +.prettierrc.js +commitlint.config.js +postcss.config.js +tailwind.config.js +stylelint.config.js \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..009f5bc --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,120 @@ +module.exports = { + root: true, + env: { + node: true + }, + globals: { + // Ref sugar (take 2) + $: "readonly", + $$: "readonly", + $ref: "readonly", + $shallowRef: "readonly", + $computed: "readonly", + + // index.d.ts + // global.d.ts + Fn: "readonly", + PromiseFn: "readonly", + RefType: "readonly", + LabelValueOptions: "readonly", + EmitType: "readonly", + TargetContext: "readonly", + ComponentElRef: "readonly", + ComponentRef: "readonly", + ElRef: "readonly", + global: "readonly", + ForDataType: "readonly", + ComponentRoutes: "readonly", + + // script setup + defineProps: "readonly", + defineEmits: "readonly", + defineExpose: "readonly", + withDefaults: "readonly" + }, + extends: [ + "plugin:vue/vue3-essential", + "eslint:recommended", + "@vue/typescript/recommended", + "@vue/prettier", + "@vue/eslint-config-typescript" + ], + parser: "vue-eslint-parser", + parserOptions: { + parser: "@typescript-eslint/parser", + ecmaVersion: 2020, + sourceType: "module", + jsxPragma: "React", + ecmaFeatures: { + jsx: true + } + }, + overrides: [ + { + files: ["*.ts", "*.vue"], + rules: { + "no-undef": "off" + } + }, + { + files: ["*.vue"], + parser: "vue-eslint-parser", + parserOptions: { + parser: "@typescript-eslint/parser", + extraFileExtensions: [".vue"], + ecmaVersion: "latest", + ecmaFeatures: { + jsx: true + } + }, + rules: { + "no-undef": "off" + } + } + ], + rules: { + "vue/no-v-html": "off", + "vue/require-default-prop": "off", + "vue/require-explicit-emits": "off", + "vue/multi-word-component-names": "off", + "@typescript-eslint/no-explicit-any": "off", // any + "no-debugger": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", // setup() + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "vue/html-self-closing": [ + "error", + { + html: { + void: "always", + normal: "always", + component: "always" + }, + svg: "always", + math: "always" + } + ], + "@typescript-eslint/no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_" + } + ], + "no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_" + } + ], + "prettier/prettier": [ + "error", + { + endOfLine: "auto" + } + ] + } +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..91361d9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local +.eslintcache +report.html + +yarn.lock +npm-debug.log* +.pnpm-error.log* +.pnpm-debug.log +tests/**/coverage/ + +# 本机调试debug配置文件 +.vscode/launch.json + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..567ff71 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,6 @@ +#!/bin/sh + +# shellcheck source=./_/husky.sh +. "$(dirname "$0")/_/husky.sh" + +npx --no-install commitlint --edit "$1" diff --git a/.husky/common.sh b/.husky/common.sh new file mode 100644 index 0000000..5f0540b --- /dev/null +++ b/.husky/common.sh @@ -0,0 +1,9 @@ +#!/bin/sh +command_exists () { + command -v "$1" >/dev/null 2>&1 +} + +# Workaround for Windows 10, Git Bash and Pnpm +if command_exists winpty && test -t 1; then + exec < /dev/tty +fi diff --git a/.husky/lintstagedrc.js b/.husky/lintstagedrc.js new file mode 100644 index 0000000..a9b439c --- /dev/null +++ b/.husky/lintstagedrc.js @@ -0,0 +1,8 @@ +module.exports = { + "*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"], + "{!(package)*.json}": ["prettier --write--parser json"], + "package.json": ["prettier --write"], + "*.vue": ["eslint --fix", "prettier --write", "stylelint --fix"], + "*.{vue,css,scss,postcss,less}": ["stylelint --fix", "prettier --write"], + "*.md": ["prettier --write"] +}; diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..c7d15f2 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,10 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" +. "$(dirname "$0")/common.sh" + +[ -n "$CI" ] && exit 0 + +# Format and submit code according to lintstagedrc.js configuration +npm run lint:lint-staged + +npm run lint:pretty diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..d628d44 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,11 @@ +{ + "default": true, + "MD003": false, + "MD033": false, + "MD013": false, + "MD001": false, + "MD025": false, + "MD024": false, + "MD007": { "indent": 4 }, + "no-hard-tabs": false +} diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..0154bc0 --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +shamefully-hoist=true +strict-peer-dependencies=false +shell-emulator=true \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..16bb32c --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,6 @@ +module.exports = { + bracketSpacing: true, + singleQuote: false, + arrowParens: "avoid", + trailingComma: "none" +}; diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 0000000..0c34e61 --- /dev/null +++ b/.stylelintignore @@ -0,0 +1,4 @@ +/dist/* +/public/* +public/* +src/style/reset.scss \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..069796d --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,31 @@ +{ + "recommendations": [ + "akamud.vscode-theme-onedark", + "antfu.iconify", + "bradlc.vscode-tailwindcss", + "christian-kohler.npm-intellisense", + "christian-kohler.path-intellisense", + "Codeium.codeium", + "csstools.postcss", + "DavidAnson.vscode-markdownlint", + "dbaeumer.vscode-eslint", + "donjayamanne.githistory", + "dsznajder.es7-react-js-snippets", + "eamodio.gitlens", + "ecmel.vscode-html-css", + "esbenp.prettier-vscode", + "genieai.chatgpt-vscode", + "hollowtree.vue-snippets", + "lokalise.i18n-ally", + "mhutchie.git-graph", + "mikestead.dotenv", + "pmneo.tsimporter", + "streetsidesoftware.code-spell-checker", + "stylelint.vscode-stylelint", + "syler.sass-indented", + "sysoev.language-stylus", + "vscode-icons-team.vscode-icons", + "Vue.volar", + "xabikos.JavaScriptSnippets" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..fb08c71 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,37 @@ +{ + "editor.formatOnType": true, + "editor.formatOnSave": true, + "[vue]": { + "editor.defaultFormatter": "Vue.volar" + }, + "editor.tabSize": 2, + "editor.formatOnPaste": true, + "editor.guides.bracketPairs": "active", + "files.autoSave": "off", + "git.confirmSync": false, + "workbench.startupEditor": "newUntitledFile", + "editor.suggestSelection": "first", + "editor.acceptSuggestionOnCommitCharacter": false, + "css.lint.propertyIgnoredDueToDisplay": "ignore", + "editor.quickSuggestions": { + "other": true, + "comments": true, + "strings": true + }, + "files.associations": { + "editor.snippetSuggestions": "top" + }, + "[css]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "iconify.excludes": [ + "el" + ], + "cSpell.words": [ + "iconify", + "Qrcode" + ] +} \ No newline at end of file diff --git a/.vscode/vue3.0.code-snippets b/.vscode/vue3.0.code-snippets new file mode 100644 index 0000000..bb43589 --- /dev/null +++ b/.vscode/vue3.0.code-snippets @@ -0,0 +1,22 @@ +{ + "Vue3.0快速生成模板": { + "scope": "vue", + "prefix": "Vue3.0", + "body": [ + "\n", + "\n", + "", + "$2" + ], + "description": "Vue3.0" + } +} diff --git a/.vscode/vue3.2.code-snippets b/.vscode/vue3.2.code-snippets new file mode 100644 index 0000000..2cebb46 --- /dev/null +++ b/.vscode/vue3.2.code-snippets @@ -0,0 +1,17 @@ +{ + "Vue3.2+快速生成模板": { + "scope": "vue", + "prefix": "Vue3.2+", + "body": [ + "\n", + "\n", + "", + "$2" + ], + "description": "Vue3.2+" + } +} diff --git a/.vscode/vue3.3.code-snippets b/.vscode/vue3.3.code-snippets new file mode 100644 index 0000000..dc7a106 --- /dev/null +++ b/.vscode/vue3.3.code-snippets @@ -0,0 +1,20 @@ +{ + "Vue3.3+defineOptions快速生成模板": { + "scope": "vue", + "prefix": "Vue3.3+", + "body": [ + "\n", + "\n", + "", + "$2" + ], + "description": "Vue3.3+defineOptions快速生成模板" + } +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5163975 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM node:16-alpine as build-stage + +WORKDIR /app +RUN corepack enable +RUN corepack prepare pnpm@7.32.1 --activate + +RUN npm config set registry https://registry.npmmirror.com + +COPY .npmrc package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile + +COPY . . +RUN pnpm build + +FROM nginx:stable-alpine as production-stage + +COPY --from=build-stage /app/dist /usr/share/nginx/html +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6d4889d --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-present, pure-admin + +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. diff --git a/README.en-US.md b/README.en-US.md new file mode 100644 index 0000000..5af5232 --- /dev/null +++ b/README.en-US.md @@ -0,0 +1,36 @@ +

vue-pure-admin Lite Edition(no i18n version)

+ +[![license](https://img.shields.io/github/license/pure-admin/vue-pure-admin.svg)](LICENSE) + +**English** | [中文](./README.md) + +## Introduce + +The simplified version is based on the shelf extracted from [vue-pure-admin](https://github.com/pure-admin/vue-pure-admin), which contains main functions and is more suitable for actual project development. The packaged size is introduced globally [element-plus](https://element-plus.org) is still below `2.3MB`, and the full version of the code will be permanently synchronized. After enabling `brotli` compression and `cdn` to replace the local library mode, the package size is less than `350kb` + +## Supporting Video + +- [Click Watch Tutorial](https://www.bilibili.com/video/BV1kg411v7QT) +- [Click Watch UI Design](https://www.bilibili.com/video/BV17g411T7rq) + +## Docs + +- [documentation site](https://yiming_chang.gitee.io/pure-admin-doc) + +## Preview + +- [Click me to view the preview station](https://pure-admin-thin.netlify.app/#/login) + +## Maintainer + +[xiaoxian521](https://github.com/xiaoxian521) + +## ⚠️ Attention + +- The Lite version does not accept any issues and prs. If you have any questions, please go to the full version [issues](https://github.com/pure-admin/vue-pure-admin/issues/new/choose) to mention, thank you! + +## License + +In principle, no fees and copyrights are charged, and it is commercially available, but if you need secondary open source (such as using this platform for secondary development and open source, the front-end code must be open source and free), please contact the author for permission! (Free, just take a record) + +[MIT © 2020-present, pure-admin](./LICENSE) diff --git a/README.md b/README.md new file mode 100644 index 0000000..d282b5e --- /dev/null +++ b/README.md @@ -0,0 +1,145 @@ +

+ Downloads + Build Status + Build Status + Downloads + + Downloads + + + Downloads + +

+

+ +logo +

+

AgileBoot v2.0.0

+ +

基于SpringBoot+Vue3前后端分离的Java快速开发框架

+

+

+ +## ⚡ 平台简介 ⚡ + +- 本仓库是 Agilboot 快速开发脚手架的配套前端项目。前端是基于优秀的开源项目[Pure-Admin](https://github.com/pure-admin/vue-pure-admin)开发而成。在此感谢 Pure-Admin 作者。 +- 本仓库前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。 +- 配套后端代码仓库地址[AgileBoot-Back-End](https://github.com/valarchie/AgileBoot-Back-End) 版本。 + +- 规范请参照该文档 [前端规范](https://gitee.com/MinJieLiu/web-standard#/MinJieLiu/web-standard) + +### 前端配套资料 + +#### 配套视频 + +- [点我查看教程](https://www.bilibili.com/video/BV1kg411v7QT) +- [点我查看 UI 设计](https://www.bilibili.com/video/BV17g411T7rq) + +#### 配套保姆级文档 + +- [查看文档](https://yiming_chang.gitee.io/pure-admin-doc) + +#### Pure-Admin 框架预览 + +- [查看预览](https://pure-admin-thin.netlify.app/#/login) + +#### Pure-Admin 维护者 + +- [xiaoxian521](https://github.com/xiaoxian521) + +## ✨ 使用 ✨ + +### 开发环境 + +Node.js 版本要求:16.0+ +pnpm 版本要求:6.0+ + +优先选择 node=16, pnpm=7.30.5的环境. + +如果您还没安装 pnpm,请执行下面命令进行安装(mac 用户遇到安装报错请在命令前加上 sudo) 如果是 windows 用户,使用 power shell 管理员权限执行 + +``` +npm install -g pnpm +``` + +安装依赖 + +``` +pnpm install +``` + +启动平台 + +``` +pnpm run dev +``` + +不管是什么源,我们都可以不用管,直接执行下面命令即可 + +npm config set registry https://registry.npmmirror.com + +上面的命令是将本地的源换成国内源 npmmirror +(opens new window),经过几轮测试,发现它的下载速度快且同步率高,同步频率 10 分钟一次,如果您之前的源是这个 http://registry.npm.taobao.org ,那您必须换成 npmmirror 啦,因为原淘宝 npm 域名即将停止解析 + +## 🙊 系统内置功能 🙊 + +🙂 大部分功能,均有通过 **单元测试** **集成测试** 保证质量。 + +| | 功能 | 描述 | +| --- | ---------- | ------------------------------------------------------------- | +| | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 | +| ⭐ | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 | +| ⭐ | 岗位管理 | 配置系统用户所属担任职务 | +| | 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能 | +| ⭐ | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 | +| | 参数管理 | 对系统动态配置常用参数 | +| | 通知公告 | 系统通知公告信息发布维护 | +| 🚀 | 操作日志 | 系统正常操作日志记录和查询;系统异常信息日志记录和查询 | +| | 登录日志 | 系统登录日志记录查询包含登录异常 | +| | 在线用户 | 当前系统中活跃用户状态监控 | +| | 系统接口 | 根据业务代码自动生成相关的 api 接口文档 | +| | 服务监控 | 监视当前系统 CPU、内存、磁盘、堆栈等相关信息 | +| | 缓存监控 | 对系统的缓存信息查询,命令统计等 | +| | 连接池监视 | 监视当前系统数据库连接池状态,可进行分析 SQL 找出系统性能瓶颈 | + +## 💥 在线体验 💥 + +演示地址: + +- +- + > 账号密码:admin/admin123 + +[项目文档](https://juejin.cn/column/7159946528827080734) + +## 🎬 AgileBoot 全栈交流群 🎬 + +QQ 群: [![加入QQ群](https://img.shields.io/badge/1398880-blue.svg)](https://qm.qq.com/cgi-bin/qm/qr?k=TR5guoXS0HssErVWefmdFRirJvfpEvp1&jump_from=webapi&authKey=VkWMmVhp/pNdWuRD8sqgM+Sv2+Vy2qCJQSeLmeXlLtfER2RJBi6zL56PdcRlCmTs) 点击按钮入群。 + +如果觉得该项目对您有帮助,可以小额捐赠支持本项目演示网站服务器等费用~ + +logo + +### 用法 + +#### 安装依赖 + +``` +pnpm install +``` + +#### 安装一个包 + +``` +pnpm add 包名 +``` + +#### 卸载一个包 + +``` +pnpm remove 包名 +``` + +### 许可证 + +原则上不收取任何费用及版权,可商用,不过如需二次开源(比如用此平台二次开发并开源,要求前端代码必须开源免费)请联系作者获取许可!(免费,走个记录而已) diff --git a/build/cdn.ts b/build/cdn.ts new file mode 100644 index 0000000..d57587b --- /dev/null +++ b/build/cdn.ts @@ -0,0 +1,56 @@ +import { Plugin as importToCDN } from "vite-plugin-cdn-import"; + +/** + * @description 打包时采用`cdn`模式,仅限外网使用(默认不采用,如果需要采用cdn模式,请在 .env.production 文件,将 VITE_CDN 设置成true) + * 平台采用国内cdn:https://www.bootcdn.cn,当然你也可以选择 https://unpkg.com 或者 https://www.jsdelivr.com + * 提醒:mockjs不能用cdn模式引入,会报错。正确的方式是,生产环境删除mockjs,使用真实的后端请求 + * 注意:上面提到的仅限外网使用也不是完全肯定的,如果你们公司内网部署的有相关js、css文件,也可以将下面配置对应改一下,整一套内网版cdn + */ +export const cdn = importToCDN({ + //(prodUrl解释: name: 对应下面modules的name,version: 自动读取本地package.json中dependencies依赖中对应包的版本号,path: 对应下面modules的path,当然也可写完整路径,会替换prodUrl) + prodUrl: "https://cdn.bootcdn.net/ajax/libs/{name}/{version}/{path}", + modules: [ + { + name: "vue", + var: "Vue", + path: "vue.global.prod.min.js" + }, + { + name: "vue-router", + var: "VueRouter", + path: "vue-router.global.min.js" + }, + // 项目中没有直接安装vue-demi,但是pinia用到了,所以需要在引入pinia前引入vue-demi(https://github.com/vuejs/pinia/blob/v2/packages/pinia/package.json#L77) + { + name: "vue-demi", + var: "VueDemi", + path: "index.iife.min.js" + }, + { + name: "pinia", + var: "Pinia", + path: "pinia.iife.min.js" + }, + { + name: "element-plus", + var: "ElementPlus", + path: "index.full.min.js", + css: "index.min.css" + }, + { + name: "axios", + var: "axios", + path: "axios.min.js" + }, + { + name: "dayjs", + var: "dayjs", + path: "dayjs.min.js" + }, + { + name: "echarts", + var: "echarts", + path: "echarts.min.js" + } + ] +}); diff --git a/build/compress.ts b/build/compress.ts new file mode 100644 index 0000000..6178986 --- /dev/null +++ b/build/compress.ts @@ -0,0 +1,63 @@ +import type { Plugin } from "vite"; +import { isArray } from "@pureadmin/utils"; +import compressPlugin from "vite-plugin-compression"; + +export const configCompressPlugin = ( + compress: ViteCompression +): Plugin | Plugin[] => { + if (compress === "none") return null; + + const gz = { + // 生成的压缩包后缀 + ext: ".gz", + // 体积大于threshold才会被压缩 + threshold: 0, + // 默认压缩.js|mjs|json|css|html后缀文件,设置成true,压缩全部文件 + filter: () => true, + // 压缩后是否删除原始文件 + deleteOriginFile: false + }; + const br = { + ext: ".br", + algorithm: "brotliCompress", + threshold: 0, + filter: () => true, + deleteOriginFile: false + }; + + const codeList = [ + { k: "gzip", v: gz }, + { k: "brotli", v: br }, + { k: "both", v: [gz, br] } + ]; + + const plugins: Plugin[] = []; + + codeList.forEach(item => { + if (compress.includes(item.k)) { + if (compress.includes("clear")) { + if (isArray(item.v)) { + item.v.forEach(vItem => { + plugins.push( + compressPlugin(Object.assign(vItem, { deleteOriginFile: true })) + ); + }); + } else { + plugins.push( + compressPlugin(Object.assign(item.v, { deleteOriginFile: true })) + ); + } + } else { + if (isArray(item.v)) { + item.v.forEach(vItem => { + plugins.push(compressPlugin(vItem)); + }); + } else { + plugins.push(compressPlugin(item.v)); + } + } + } + }); + + return plugins; +}; diff --git a/build/index.ts b/build/index.ts new file mode 100644 index 0000000..fbf08a3 --- /dev/null +++ b/build/index.ts @@ -0,0 +1,37 @@ +/** 处理环境变量 */ +const wrapperEnv = (envConfigs: Recordable): ViteEnv => { + /** 此处为默认值 */ + const defaultEnvConfigs: ViteEnv = { + VITE_PORT: 8848, + VITE_PUBLIC_PATH: "", + VITE_ROUTER_HISTORY: "", + VITE_CDN: false, + VITE_HIDE_HOME: "false", + VITE_COMPRESSION: "none", + VITE_APP_BASE_API: "" + }; + + for (const configName of Object.keys(envConfigs)) { + let realConfigValue = envConfigs[configName].replace(/\\n/g, "\n"); + realConfigValue = + realConfigValue === "true" + ? true + : realConfigValue === "false" + ? false + : realConfigValue; + + if (configName === "VITE_PORT") { + realConfigValue = Number(realConfigValue); + } + + defaultEnvConfigs[configName] = realConfigValue; + if (typeof realConfigValue === "string") { + process.env[configName] = realConfigValue; + } else if (typeof realConfigValue === "object") { + process.env[configName] = JSON.stringify(realConfigValue); + } + } + return defaultEnvConfigs; +}; + +export { wrapperEnv }; diff --git a/build/info.ts b/build/info.ts new file mode 100644 index 0000000..5d23440 --- /dev/null +++ b/build/info.ts @@ -0,0 +1,53 @@ +import type { Plugin } from "vite"; +import dayjs, { Dayjs } from "dayjs"; +import utils from "@pureadmin/utils"; +import duration from "dayjs/plugin/duration"; +import { green, blue, bold } from "picocolors"; +dayjs.extend(duration); + +export function viteBuildInfo(): Plugin { + let config: { command: string }; + let startTime: Dayjs; + let endTime: Dayjs; + let outDir: string; + return { + name: "vite:buildInfo", + configResolved(resolvedConfig) { + config = resolvedConfig; + outDir = resolvedConfig.build?.outDir ?? "dist"; + }, + buildStart() { + console.log( + bold( + green( + `👏欢迎使用${blue( + "[Agileboot全栈项目]" + )},如果您感觉不错,记得点击后面链接给个star哦💖 https://github.com/valarchie/agileboot-back-end` + ) + ) + ); + if (config.command === "build") { + startTime = dayjs(new Date()); + } + }, + closeBundle() { + if (config.command === "build") { + endTime = dayjs(new Date()); + utils.getPackageSize({ + folder: outDir, + callback: (size: string) => { + console.log( + bold( + green( + `🎉恭喜打包完成(总用时${dayjs + .duration(endTime.diff(startTime)) + .format("mm分ss秒")},打包后的大小为${size})` + ) + ) + ); + } + }); + } + } + }; +} diff --git a/build/optimize.ts b/build/optimize.ts new file mode 100644 index 0000000..cb6c1d7 --- /dev/null +++ b/build/optimize.ts @@ -0,0 +1,32 @@ +/** + * 此文件作用于 `vite.config.ts` 的 `optimizeDeps.include` 依赖预构建配置项 + * 依赖预构建,`vite` 启动时会将下面 include 里的模块,编译成 esm 格式并缓存到 node_modules/.vite 文件夹,页面加载到对应模块时如果浏览器有缓存就读取浏览器缓存,如果没有会读取本地缓存并按需加载 + * 尤其当您禁用浏览器缓存时(这种情况只应该发生在调试阶段)必须将对应模块加入到 include里,否则会遇到开发环境切换页面卡顿的问题(vite 会认为它是一个新的依赖包会重新加载并强制刷新页面),因为它既无法使用浏览器缓存,又没有在本地 node_modules/.vite 里缓存 + * 温馨提示:如果您使用的第三方库是全局引入,也就是引入到 src/main.ts 文件里,就不需要再添加到 include 里了,因为 vite 会自动将它们缓存到 node_modules/.vite + */ +const include = [ + "qs", + "mitt", + "xlsx", + "dayjs", + "axios", + "pinia", + "js-cookie", + "sortablejs", + "pinyin-pro", + "@vueuse/core", + "@pureadmin/utils", + "responsive-storage" +]; + +/** + * 在预构建中强制排除的依赖项 + * 温馨提示:所有以 `@iconify-icons/` 开头引入的的本地图标模块,都应该加入到下面的 `exclude` 里,因为平台推荐的使用方式是哪里需要哪里引入而且都是单个的引入,不需要预构建,直接让浏览器加载就好 + */ +const exclude = [ + "@iconify-icons/ep", + "@iconify-icons/ri", + "@pureadmin/theme/dist/browser-utils" +]; + +export { include, exclude }; diff --git a/build/plugins.ts b/build/plugins.ts new file mode 100644 index 0000000..6714e14 --- /dev/null +++ b/build/plugins.ts @@ -0,0 +1,56 @@ +import { cdn } from "./cdn"; +import vue from "@vitejs/plugin-vue"; +import { viteBuildInfo } from "./info"; +import svgLoader from "vite-svg-loader"; +import vueJsx from "@vitejs/plugin-vue-jsx"; +// import { viteMockServe } from "vite-plugin-mock"; +import { configCompressPlugin } from "./compress"; +// import ElementPlus from "unplugin-element-plus/vite"; +import { visualizer } from "rollup-plugin-visualizer"; +import removeConsole from "vite-plugin-remove-console"; +import { themePreprocessorPlugin } from "@pureadmin/theme"; +import { genScssMultipleScopeVars } from "../src/layout/theme"; + +export function getPluginsList( + command: string, + VITE_CDN: boolean, + VITE_COMPRESSION: ViteCompression +) { + // const prodMock = true; + const lifecycle = process.env.npm_lifecycle_event; + return [ + vue(), + // jsx、tsx语法支持 + vueJsx(), + VITE_CDN ? cdn : null, + configCompressPlugin(VITE_COMPRESSION), + // 线上环境删除console + removeConsole({ external: ["src/assets/iconfont/iconfont.js"] }), + viteBuildInfo(), + // 自定义主题 + themePreprocessorPlugin({ + scss: { + multipleScopeVars: genScssMultipleScopeVars(), + extract: true + } + }), + // svg组件化支持 + svgLoader(), + // ElementPlus({}), + // mock支持 + // viteMockServe({ + // mockPath: "mock", + // localEnabled: command === "serve", + // prodEnabled: command !== "serve" && prodMock, + // injectCode: ` + // import { setupProdMockServer } from './mockProdServer'; + // setupProdMockServer(); + // `, + // logger: false + // }), + // 打包分析 + lifecycle === "report" + ? visualizer({ open: true, brotliSize: true, filename: "report.html" }) + : null + ]; +} diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..71bc373 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,32 @@ +module.exports = { + ignores: [commit => commit.includes("init")], + extends: ["@commitlint/config-conventional"], + rules: { + "body-leading-blank": [2, "always"], + "footer-leading-blank": [1, "always"], + "header-max-length": [2, "always", 108], + "subject-empty": [2, "never"], + "type-empty": [2, "never"], + "type-enum": [ + 2, + "always", + [ + "feat", + "fix", + "perf", + "style", + "docs", + "test", + "refactor", + "build", + "ci", + "chore", + "revert", + "wip", + "workflow", + "types", + "release" + ] + ] + } +}; diff --git a/index.html b/index.html new file mode 100644 index 0000000..7aad001 --- /dev/null +++ b/index.html @@ -0,0 +1,87 @@ + + + + + + + + Agileboot管理系统 + + + + + +
+ +
+
+ + + diff --git a/mock/asyncRoutes.ts b/mock/asyncRoutes.ts new file mode 100644 index 0000000..da6a559 --- /dev/null +++ b/mock/asyncRoutes.ts @@ -0,0 +1,49 @@ +// 模拟后端动态生成路由 +import { MockMethod } from "vite-plugin-mock"; + +/** + * roles:页面级别权限,这里模拟二种 "admin"、"common" + * admin:管理员角色 + * common:普通角色 + */ + +const permissionRouter = { + path: "/permission", + meta: { + title: "权限管理", + icon: "lollipop", + rank: 10 + }, + children: [ + { + path: "/permission/page/index", + name: "PermissionPage", + meta: { + title: "页面权限", + roles: ["admin", "common"] + } + }, + { + path: "/permission/button/index", + name: "PermissionButton", + meta: { + title: "按钮权限", + roles: ["admin", "common"], + auths: ["btn_add", "btn_edit", "btn_delete"] + } + } + ] +}; + +export default [ + { + url: "/getAsyncRoutes", + method: "get", + response: () => { + return { + success: true, + data: [permissionRouter] + }; + } + } +] as MockMethod[]; diff --git a/mock/login.ts b/mock/login.ts new file mode 100644 index 0000000..cddd4e4 --- /dev/null +++ b/mock/login.ts @@ -0,0 +1,36 @@ +// 根据角色动态生成路由 +import { MockMethod } from "vite-plugin-mock"; + +export default [ + { + url: "/login", + method: "post", + response: ({ body }) => { + if (body.username === "admin") { + return { + success: true, + data: { + username: "admin", + // 一个用户可能有多个角色 + roles: ["admin"], + accessToken: "eyJhbGciOiJIUzUxMiJ9.admin", + refreshToken: "eyJhbGciOiJIUzUxMiJ9.adminRefresh", + expires: "2023/10/30 00:00:00" + } + }; + } else { + return { + success: true, + data: { + username: "common", + // 一个用户可能有多个角色 + roles: ["common"], + accessToken: "eyJhbGciOiJIUzUxMiJ9.common", + refreshToken: "eyJhbGciOiJIUzUxMiJ9.commonRefresh", + expires: "2023/10/30 00:00:00" + } + }; + } + } + } +] as MockMethod[]; diff --git a/mock/refreshToken.ts b/mock/refreshToken.ts new file mode 100644 index 0000000..87b8995 --- /dev/null +++ b/mock/refreshToken.ts @@ -0,0 +1,27 @@ +import { MockMethod } from "vite-plugin-mock"; + +// 模拟刷新token接口 +export default [ + { + url: "/refreshToken", + method: "post", + response: ({ body }) => { + if (body.refreshToken) { + return { + success: true, + data: { + accessToken: "eyJhbGciOiJIUzUxMiJ9.newAdmin", + refreshToken: "eyJhbGciOiJIUzUxMiJ9.newAdminRefresh", + // `expires`选择这种日期格式是为了方便调试,后端直接设置时间戳或许更方便(每次都应该递增)。如果后端返回的是时间戳格式,前端开发请来到这个目录`src/utils/auth.ts`,把第`38`行的代码换成expires = data.expires即可。 + expires: "2023/10/30 23:59:59" + } + }; + } else { + return { + success: false, + data: {} + }; + } + } + } +] as MockMethod[]; diff --git a/package.json b/package.json new file mode 100644 index 0000000..51d77fe --- /dev/null +++ b/package.json @@ -0,0 +1,142 @@ +{ + "name": "agileboot-front-end-pure", + "version": "1.0.0", + "private": true, + "scripts": { + "dev": "NODE_OPTIONS=--max-old-space-size=4096 vite", + "serve": "pnpm dev", + "build": "rimraf dist && NODE_OPTIONS=--max-old-space-size=8192 vite build", + "build:staging": "rimraf dist && vite build --mode staging", + "report": "rimraf dist && vite build", + "preview": "vite preview", + "preview:build": "pnpm build && vite preview", + "typecheck": "tsc --noEmit && vue-tsc --noEmit --skipLibCheck", + "svgo": "svgo -f src/assets/svg -o src/assets/svg", + "cloc": "NODE_OPTIONS=--max-old-space-size=4096 cloc . --exclude-dir=node_modules --exclude-lang=YAML", + "clean:cache": "rimraf node_modules && rimraf .eslintcache && pnpm install", + "lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock,build}/**/*.{vue,js,ts,tsx}\" --fix", + "lint:prettier": "prettier --write \"src/**/*.{js,ts,json,tsx,css,scss,vue,html,md}\"", + "lint:stylelint": "stylelint \"**/*.{html,vue,css,scss}\" --fix --cache --cache-location node_modules/.cache/stylelint/", + "lint:lint-staged": "lint-staged -c ./.husky/lintstagedrc.js", + "lint:pretty": "pretty-quick --staged", + "lint": "pnpm lint:eslint && pnpm lint:prettier && pnpm lint:stylelint", + "prepare": "husky install", + "preinstall": "npx only-allow pnpm" + }, + "browserslist": [ + "> 1%", + "not ie 11", + "not op_mini all" + ], + "dependencies": { + "@pureadmin/descriptions": "^1.1.1", + "@pureadmin/table": "^2.3.2", + "@pureadmin/utils": "^1.9.6", + "@vueuse/core": "^10.2.0", + "@vueuse/motion": "^2.0.0", + "animate.css": "^4.1.1", + "axios": "^1.4.0", + "crypto-js": "^4.1.1", + "dayjs": "^1.11.8", + "echarts": "^5.4.2", + "element-plus": "2.3.6", + "js-cookie": "^3.0.5", + "jsencrypt": "^3.3.2", + "mitt": "^3.0.0", + "mockjs": "^1.1.0", + "nprogress": "^0.2.0", + "path": "^0.12.7", + "pinia": "^2.1.4", + "pinyin-pro": "^3.15.2", + "cropperjs": "^1.5.13", + "vue-tippy": "^6.2.0", + "qrcode": "^1.5.3", + "qs": "^6.11.2", + "responsive-storage": "^2.2.0", + "sortablejs": "^1.15.0", + "typeit": "^8.7.1", + "vue": "^3.3.4", + "vue-router": "^4.2.2", + "vue-types": "^5.1.0", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@commitlint/cli": "^17.6.6", + "@commitlint/config-conventional": "^17.6.6", + "@iconify-icons/ep": "^1.2.12", + "@iconify-icons/ri": "^1.2.9", + "@iconify/vue": "^4.1.1", + "@pureadmin/theme": "^3.1.0", + "@types/js-cookie": "^3.0.3", + "@types/mockjs": "^1.0.7", + "@types/node": "^20.3.1", + "@types/nprogress": "0.2.0", + "@types/qs": "^6.9.7", + "@types/sortablejs": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^5.60.0", + "@typescript-eslint/parser": "^5.60.0", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + "@vue/eslint-config-prettier": "^7.1.0", + "@vue/eslint-config-typescript": "^11.0.3", + "autoprefixer": "^10.4.14", + "cloc": "^2.11.0", + "cssnano": "^6.0.1", + "eslint": "^8.43.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.15.1", + "husky": "^8.0.3", + "lint-staged": "^13.2.2", + "picocolors": "^1.0.0", + "postcss": "^8.4.24", + "postcss-html": "^1.5.0", + "postcss-import": "^15.1.0", + "postcss-scss": "^4.0.6", + "prettier": "^2.8.8", + "pretty-quick": "^3.1.3", + "rimraf": "^5.0.1", + "rollup-plugin-visualizer": "^5.9.2", + "sass": "^1.63.6", + "sass-loader": "^13.3.2", + "stylelint": "^15.9.0", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.2.0", + "stylelint-config-recommended": "^12.0.0", + "stylelint-config-recommended-scss": "^12.0.0", + "stylelint-config-recommended-vue": "^1.4.0", + "stylelint-config-standard": "^33.0.0", + "stylelint-config-standard-scss": "^9.0.0", + "stylelint-order": "^6.0.3", + "stylelint-prettier": "^3.0.0", + "stylelint-scss": "^5.0.1", + "svgo": "^3.0.2", + "tailwindcss": "^3.3.2", + "terser": "^5.18.1", + "typescript": "5.0.4", + "vite": "^4.3.9", + "vite-plugin-cdn-import": "^0.3.5", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-mock": "2.9.6", + "vite-plugin-remove-console": "^2.1.1", + "vite-svg-loader": "^4.0.0", + "vue-eslint-parser": "^9.3.1", + "vue-tsc": "^1.8.1" + }, + "pnpm": { + "peerDependencyRules": { + "ignoreMissing": [ + "rollup", + "webpack", + "core-js" + ] + }, + "allowedDeprecatedVersions": { + "sourcemap-codec": "*", + "w3c-hr-time": "*", + "stable": "*" + } + }, + "repository": "git@github.com:valarchie/agileboot-front-end-pure.git", + "author": "valarchie", + "license": "MIT" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..70baad4 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,8590 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@pureadmin/descriptions': + specifier: ^1.1.1 + version: 1.2.1(echarts@5.6.0)(element-plus@2.3.6(vue@3.5.13(typescript@5.0.4)))(typescript@5.0.4) + '@pureadmin/table': + specifier: ^2.3.2 + version: 2.4.7(element-plus@2.3.6(vue@3.5.13(typescript@5.0.4)))(typescript@5.0.4) + '@pureadmin/utils': + specifier: ^1.9.6 + version: 1.18.0(echarts@5.6.0)(vue@3.5.13(typescript@5.0.4)) + '@vueuse/core': + specifier: ^10.2.0 + version: 10.11.1(vue@3.5.13(typescript@5.0.4)) + '@vueuse/motion': + specifier: ^2.0.0 + version: 2.2.6(vue@3.5.13(typescript@5.0.4)) + animate.css: + specifier: ^4.1.1 + version: 4.1.1 + axios: + specifier: ^1.4.0 + version: 1.8.1 + cropperjs: + specifier: ^1.5.13 + version: 1.6.2 + crypto-js: + specifier: ^4.1.1 + version: 4.2.0 + dayjs: + specifier: ^1.11.8 + version: 1.11.13 + echarts: + specifier: ^5.4.2 + version: 5.6.0 + element-plus: + specifier: 2.3.6 + version: 2.3.6(vue@3.5.13(typescript@5.0.4)) + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 + jsencrypt: + specifier: ^3.3.2 + version: 3.3.2 + mitt: + specifier: ^3.0.0 + version: 3.0.1 + mockjs: + specifier: ^1.1.0 + version: 1.1.0 + nprogress: + specifier: ^0.2.0 + version: 0.2.0 + path: + specifier: ^0.12.7 + version: 0.12.7 + pinia: + specifier: ^2.1.4 + version: 2.3.1(typescript@5.0.4)(vue@3.5.13(typescript@5.0.4)) + pinyin-pro: + specifier: ^3.15.2 + version: 3.26.0 + qrcode: + specifier: ^1.5.3 + version: 1.5.4 + qs: + specifier: ^6.11.2 + version: 6.14.0 + responsive-storage: + specifier: ^2.2.0 + version: 2.2.0 + sortablejs: + specifier: ^1.15.0 + version: 1.15.6 + typeit: + specifier: ^8.7.1 + version: 8.8.7 + vue: + specifier: ^3.3.4 + version: 3.5.13(typescript@5.0.4) + vue-router: + specifier: ^4.2.2 + version: 4.5.0(vue@3.5.13(typescript@5.0.4)) + vue-tippy: + specifier: ^6.2.0 + version: 6.6.0(vue@3.5.13(typescript@5.0.4)) + vue-types: + specifier: ^5.1.0 + version: 5.1.3(vue@3.5.13(typescript@5.0.4)) + xlsx: + specifier: ^0.18.5 + version: 0.18.5 + devDependencies: + '@commitlint/cli': + specifier: ^17.6.6 + version: 17.8.1 + '@commitlint/config-conventional': + specifier: ^17.6.6 + version: 17.8.1 + '@iconify-icons/ep': + specifier: ^1.2.12 + version: 1.2.12 + '@iconify-icons/ri': + specifier: ^1.2.9 + version: 1.2.10 + '@iconify/vue': + specifier: ^4.1.1 + version: 4.3.0(vue@3.5.13(typescript@5.0.4)) + '@pureadmin/theme': + specifier: ^3.1.0 + version: 3.3.0 + '@types/js-cookie': + specifier: ^3.0.3 + version: 3.0.6 + '@types/mockjs': + specifier: ^1.0.7 + version: 1.0.10 + '@types/node': + specifier: ^20.3.1 + version: 20.17.22 + '@types/nprogress': + specifier: 0.2.0 + version: 0.2.0 + '@types/qs': + specifier: ^6.9.7 + version: 6.9.18 + '@types/sortablejs': + specifier: ^1.15.1 + version: 1.15.8 + '@typescript-eslint/eslint-plugin': + specifier: ^5.60.0 + version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: ^5.60.0 + version: 5.62.0(eslint@8.57.1)(typescript@5.0.4) + '@vitejs/plugin-vue': + specifier: ^4.2.3 + version: 4.6.2(vite@4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0))(vue@3.5.13(typescript@5.0.4)) + '@vitejs/plugin-vue-jsx': + specifier: ^3.0.1 + version: 3.1.0(vite@4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0))(vue@3.5.13(typescript@5.0.4)) + '@vue/eslint-config-prettier': + specifier: ^7.1.0 + version: 7.1.0(eslint@8.57.1)(prettier@2.8.8) + '@vue/eslint-config-typescript': + specifier: ^11.0.3 + version: 11.0.3(eslint-plugin-vue@9.32.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.0.4) + autoprefixer: + specifier: ^10.4.14 + version: 10.4.20(postcss@8.5.3) + cloc: + specifier: ^2.11.0 + version: 2.11.0 + cssnano: + specifier: ^6.0.1 + version: 6.1.2(postcss@8.5.3) + eslint: + specifier: ^8.43.0 + version: 8.57.1 + eslint-plugin-prettier: + specifier: ^4.2.1 + version: 4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8) + eslint-plugin-vue: + specifier: ^9.15.1 + version: 9.32.0(eslint@8.57.1) + husky: + specifier: ^8.0.3 + version: 8.0.3 + lint-staged: + specifier: ^13.2.2 + version: 13.3.0 + picocolors: + specifier: ^1.0.0 + version: 1.1.1 + postcss: + specifier: ^8.4.24 + version: 8.5.3 + postcss-html: + specifier: ^1.5.0 + version: 1.8.0 + postcss-import: + specifier: ^15.1.0 + version: 15.1.0(postcss@8.5.3) + postcss-scss: + specifier: ^4.0.6 + version: 4.0.9(postcss@8.5.3) + prettier: + specifier: ^2.8.8 + version: 2.8.8 + pretty-quick: + specifier: ^3.1.3 + version: 3.3.1(prettier@2.8.8) + rimraf: + specifier: ^5.0.1 + version: 5.0.10 + rollup-plugin-visualizer: + specifier: ^5.9.2 + version: 5.14.0(rollup@3.29.5) + sass: + specifier: ^1.63.6 + version: 1.85.1 + sass-loader: + specifier: ^13.3.2 + version: 13.3.3(sass@1.85.1)(webpack@5.98.0) + stylelint: + specifier: ^15.9.0 + version: 15.11.0(typescript@5.0.4) + stylelint-config-html: + specifier: ^1.1.0 + version: 1.1.0(postcss-html@1.8.0)(stylelint@15.11.0(typescript@5.0.4)) + stylelint-config-recess-order: + specifier: ^4.2.0 + version: 4.6.0(stylelint@15.11.0(typescript@5.0.4)) + stylelint-config-recommended: + specifier: ^12.0.0 + version: 12.0.0(stylelint@15.11.0(typescript@5.0.4)) + stylelint-config-recommended-scss: + specifier: ^12.0.0 + version: 12.0.0(postcss@8.5.3)(stylelint@15.11.0(typescript@5.0.4)) + stylelint-config-recommended-vue: + specifier: ^1.4.0 + version: 1.6.0(postcss-html@1.8.0)(stylelint@15.11.0(typescript@5.0.4)) + stylelint-config-standard: + specifier: ^33.0.0 + version: 33.0.0(stylelint@15.11.0(typescript@5.0.4)) + stylelint-config-standard-scss: + specifier: ^9.0.0 + version: 9.0.0(postcss@8.5.3)(stylelint@15.11.0(typescript@5.0.4)) + stylelint-order: + specifier: ^6.0.3 + version: 6.0.4(stylelint@15.11.0(typescript@5.0.4)) + stylelint-prettier: + specifier: ^3.0.0 + version: 3.0.0(prettier@2.8.8)(stylelint@15.11.0(typescript@5.0.4)) + stylelint-scss: + specifier: ^5.0.1 + version: 5.3.2(stylelint@15.11.0(typescript@5.0.4)) + svgo: + specifier: ^3.0.2 + version: 3.3.2 + tailwindcss: + specifier: ^3.3.2 + version: 3.4.17(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.8.2)) + terser: + specifier: ^5.18.1 + version: 5.39.0 + typescript: + specifier: 5.0.4 + version: 5.0.4 + vite: + specifier: ^4.3.9 + version: 4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0) + vite-plugin-cdn-import: + specifier: ^0.3.5 + version: 0.3.5(rollup@3.29.5) + vite-plugin-compression: + specifier: ^0.5.1 + version: 0.5.1(vite@4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0)) + vite-plugin-mock: + specifier: 2.9.6 + version: 2.9.6(mockjs@1.1.0)(rollup@3.29.5)(vite@4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0)) + vite-plugin-remove-console: + specifier: ^2.1.1 + version: 2.2.0 + vite-svg-loader: + specifier: ^4.0.0 + version: 4.0.0 + vue-eslint-parser: + specifier: ^9.3.1 + version: 9.4.3(eslint@8.57.1) + vue-tsc: + specifier: ^1.8.1 + version: 1.8.27(typescript@5.0.4) + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.9': + resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.9': + resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.26.9': + resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.26.5': + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.9': + resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.9': + resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.26.8': + resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/standalone@7.26.9': + resolution: {integrity: sha512-UTeQKy0kzJwWRe55kT1uK4G9H6D0lS6G4207hCU/bDaOhA5t2aC0qHN6GmID0Axv3OFLNXm27NdqcWp+BXcGtA==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.9': + resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + engines: {node: '>=6.9.0'} + + '@commitlint/cli@17.8.1': + resolution: {integrity: sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==} + engines: {node: '>=v14'} + hasBin: true + + '@commitlint/config-conventional@17.8.1': + resolution: {integrity: sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==} + engines: {node: '>=v14'} + + '@commitlint/config-validator@17.8.1': + resolution: {integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==} + engines: {node: '>=v14'} + + '@commitlint/ensure@17.8.1': + resolution: {integrity: sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==} + engines: {node: '>=v14'} + + '@commitlint/execute-rule@17.8.1': + resolution: {integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==} + engines: {node: '>=v14'} + + '@commitlint/format@17.8.1': + resolution: {integrity: sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==} + engines: {node: '>=v14'} + + '@commitlint/is-ignored@17.8.1': + resolution: {integrity: sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==} + engines: {node: '>=v14'} + + '@commitlint/lint@17.8.1': + resolution: {integrity: sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==} + engines: {node: '>=v14'} + + '@commitlint/load@17.8.1': + resolution: {integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==} + engines: {node: '>=v14'} + + '@commitlint/message@17.8.1': + resolution: {integrity: sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==} + engines: {node: '>=v14'} + + '@commitlint/parse@17.8.1': + resolution: {integrity: sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==} + engines: {node: '>=v14'} + + '@commitlint/read@17.8.1': + resolution: {integrity: sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==} + engines: {node: '>=v14'} + + '@commitlint/resolve-extends@17.8.1': + resolution: {integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==} + engines: {node: '>=v14'} + + '@commitlint/rules@17.8.1': + resolution: {integrity: sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==} + engines: {node: '>=v14'} + + '@commitlint/to-lines@17.8.1': + resolution: {integrity: sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==} + engines: {node: '>=v14'} + + '@commitlint/top-level@17.8.1': + resolution: {integrity: sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==} + engines: {node: '>=v14'} + + '@commitlint/types@17.8.1': + resolution: {integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==} + engines: {node: '>=v14'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@csstools/css-parser-algorithms@2.7.1': + resolution: {integrity: sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.4.1 + + '@csstools/css-tokenizer@2.4.1': + resolution: {integrity: sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==} + engines: {node: ^14 || ^16 || >=18} + + '@csstools/media-query-list-parser@2.1.13': + resolution: {integrity: sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.7.1 + '@csstools/css-tokenizer': ^2.4.1 + + '@csstools/selector-specificity@3.1.1': + resolution: {integrity: sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + + '@ctrl/tinycolor@3.6.1': + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + + '@element-plus/icons-vue@2.3.1': + resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==} + peerDependencies: + vue: ^3.2.0 + + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@iconify-icons/ep@1.2.12': + resolution: {integrity: sha512-8EJULn048sQq3fvytpQ5j40omnVOdBKpo+sXdYM35NRrqCe1BihxBesMcCOLWaocqkWia6uTQ3cnRHff4ZA11w==} + + '@iconify-icons/ri@1.2.10': + resolution: {integrity: sha512-wNaXsQYK55WDUWCbcjvnwnODV4Jtsp+VC0duPanibEVu876TUYf6kdgTGtH7/GErBCNdJuJJbncG7vbOaeQi7w==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/vue@4.3.0': + resolution: {integrity: sha512-Xq0h6zMrHBbrW8jXJ9fISi+x8oDQllg5hTDkDuxnWiskJ63rpJu9CvJshj8VniHVTbsxCg9fVoPAaNp3RQI5OQ==} + peerDependencies: + vue: '>=3' + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nuxt/kit@3.15.4': + resolution: {integrity: sha512-dr7I7eZOoRLl4uxdxeL2dQsH0OrbEiVPIyBHnBpA4co24CBnoJoF+JINuP9l3PAM3IhUzc5JIVq3/YY3lEc3Hw==} + engines: {node: '>=18.12.0'} + + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@pureadmin/descriptions@1.2.1': + resolution: {integrity: sha512-7jDJuqz8xnhcmwXdWQnBzOYeX2WK27TRFaVgs9AdiRr+DnKb9W+krHByJwQtxo5lg4qyRh4/IWQGEMfhC2ljeQ==} + peerDependencies: + element-plus: ^2.0.0 + + '@pureadmin/table@2.4.7': + resolution: {integrity: sha512-IqSP259teQMgnFbameUroWoJuoyHRRGo1jS8L7UTU+z8OCeiAo6VEBItBlfC3K+iwqid67qvhdi6ldfhGT0C7Q==} + peerDependencies: + element-plus: ^2.0.0 + + '@pureadmin/theme-utils@0.1.0': + resolution: {integrity: sha512-aeFYWS29zaLzVSK4J7AYQP0mHnzDxotNx6orkUvYy//j5LEUrWQTjqlpMZKahribctP/V5dIvXMPfzzhIN+nbA==} + engines: {node: '>= 10.13.0'} + hasBin: true + + '@pureadmin/theme@3.3.0': + resolution: {integrity: sha512-atbzbhcs3SPTuPtWkVlc4HZZrbLNi5h0NtYmfapKBEUu9UBSK2eR6dVfzg8tU89BHO6n36LNDTInUahxgX8b8A==} + + '@pureadmin/utils@1.18.0': + resolution: {integrity: sha512-0/R6JQWAkDNfc4Ba/llNQoR1lUbJvNToq0gG74eKhwTY6Y8lCt7sAIy30NYAUtiVWqAjb6N5OFHQnb4cIfbBJw==} + peerDependencies: + echarts: '*' + vue: '*' + peerDependenciesMeta: + echarts: + optional: true + vue: + optional: true + + '@pureadmin/utils@2.5.0': + resolution: {integrity: sha512-DJyHBqxQo9Uo4GDEMbLD9xDNIn+VrOMBOyS6bgArY1a1iv4ffpDf0tA1tQ2HRFMiIcERC5abLWAASpgITM5LOQ==} + peerDependencies: + echarts: '*' + vue: '*' + peerDependenciesMeta: + echarts: + optional: true + vue: + optional: true + + '@rollup/plugin-node-resolve@13.3.0': + resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^2.42.0 + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/pluginutils@4.2.1': + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@sxzz/popperjs-es@2.11.7': + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/js-cookie@3.0.6': + resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.16': + resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==} + + '@types/minimist@1.2.5': + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + + '@types/mockjs@1.0.10': + resolution: {integrity: sha512-SXgrhajHG7boLv6oU93CcmdDm0HYRiceuz6b+7z+/2lCJPTWDv0V5YiwFHT2ejE4bQqgSXQiVPQYPWv7LGsK1g==} + + '@types/node@20.17.22': + resolution: {integrity: sha512-9RV2zST+0s3EhfrMZIhrz2bhuhBwxgkbHEwP2gtGWPjBzVQjifMzJ9exw7aDZhR1wbpj8zBrfp3bo8oJcGiUUw==} + + '@types/node@20.5.1': + resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/nprogress@0.2.0': + resolution: {integrity: sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==} + + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + + '@types/resolve@1.17.1': + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/sortablejs@1.15.8': + resolution: {integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==} + + '@types/web-animations-js@2.2.16': + resolution: {integrity: sha512-ATELeWMFwj8eQiH0KmvsCl1V2lu/qx/CjOBmv4ADSZS5u8r4reMyjCXtxG7khqyiwH3IOMNdrON/Ugn94OUcRA==} + + '@types/web-bluetooth@0.0.16': + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@typescript-eslint/eslint-plugin@5.62.0': + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@5.62.0': + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/type-utils@5.62.0': + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@vitejs/plugin-vue-jsx@3.1.0': + resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 || ^5.0.0 + vue: ^3.0.0 + + '@vitejs/plugin-vue@4.6.2': + resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 || ^5.0.0 + vue: ^3.2.25 + + '@volar/language-core@1.11.1': + resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} + + '@volar/source-map@1.11.1': + resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} + + '@volar/typescript@1.11.1': + resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} + + '@vue/babel-helper-vue-transform-on@1.2.5': + resolution: {integrity: sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==} + + '@vue/babel-plugin-jsx@1.2.5': + resolution: {integrity: sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@1.2.5': + resolution: {integrity: sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/eslint-config-prettier@7.1.0': + resolution: {integrity: sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==} + peerDependencies: + eslint: '>= 7.28.0' + prettier: '>= 2.0.0' + + '@vue/eslint-config-typescript@11.0.3': + resolution: {integrity: sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + eslint-plugin-vue: ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/language-core@1.8.27': + resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + '@vueuse/core@10.11.1': + resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} + + '@vueuse/core@9.13.0': + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + + '@vueuse/metadata@10.11.1': + resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} + + '@vueuse/metadata@9.13.0': + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + + '@vueuse/motion@2.2.6': + resolution: {integrity: sha512-gKFktPtrdypSv44SaW1oBJKLBiP6kE5NcoQ6RsAU3InemESdiAutgQncfPe/rhLSLCtL4jTAhMmFfxoR6gm5LQ==} + peerDependencies: + vue: '>=3.0.0' + + '@vueuse/shared@10.11.1': + resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} + + '@vueuse/shared@9.13.0': + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + adler-32@1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + animate.css@4.1.1: + resolution: {integrity: sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==} + + ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + axios@1.8.1: + resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@2.0.0: + resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + c12@2.0.4: + resolution: {integrity: sha512-3DbbhnFt0fKJHxU4tEUPmD1ahWE4PWPMomqfYsTJdrhpmEnRKJi3qSC4rO5U6E6zN1+pjBY7+z8fUmNRMaVKLw==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + + camelcase-keys@7.0.2: + resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} + engines: {node: '>=12'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001701: + resolution: {integrity: sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==} + + cfb@1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-truncate@3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + cloc@2.11.0: + resolution: {integrity: sha512-+mxuCHo7ESOQadlsyMjmPZ4hGBtvQzmNGHfLdBNvXKbnRhtmOTslU4XF2cyFSaOCHaaF26ba2CGjU6lpeIFB0w==} + hasBin: true + + codepage@1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + connect@3.7.0: + resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} + engines: {node: '>= 0.10.0'} + + consola@3.4.0: + resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} + engines: {node: ^14.18.0 || >=16.10.0} + + conventional-changelog-angular@6.0.0: + resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==} + engines: {node: '>=14'} + + conventional-changelog-conventionalcommits@6.1.0: + resolution: {integrity: sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==} + engines: {node: '>=14'} + + conventional-commits-parser@4.0.0: + resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} + engines: {node: '>=14'} + hasBin: true + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cosmiconfig-typescript-loader@4.4.0: + resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} + engines: {node: '>=v14.21.3'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=7' + ts-node: '>=10' + typescript: '>=4' + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cropperjs@1.6.2: + resolution: {integrity: sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + + css-declaration-sorter@6.4.1: + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + + css-declaration-sorter@7.2.0: + resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.0.9 + + css-functions-list@3.2.3: + resolution: {integrity: sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==} + engines: {node: '>=12 || >=16'} + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-preset-default@5.2.14: + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano-preset-default@6.1.2: + resolution: {integrity: sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + cssnano-preset-lite@2.1.3: + resolution: {integrity: sha512-samvnCll/DUVZu0Qc+JH36nt7dlaOT7WjOgg8SbLJ78sp51JZ12s2hyerxrarjPBG4O53rErUtOY2IYLYgBGEQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano-utils@3.1.0: + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano-utils@4.0.2: + resolution: {integrity: sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + cssnano@5.1.15: + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano@6.1.2: + resolution: {integrity: sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + dargs@7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decamelize@5.0.1: + resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} + engines: {node: '>=10'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + echarts@5.6.0: + resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.109: + resolution: {integrity: sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ==} + + element-plus@2.3.6: + resolution: {integrity: sha512-GLz0pXUYI2zRfIgyI6W7SWmHk6dSEikP9yR++hsQUyy63+WjutoiGpA3SZD4cGPSXUzRFeKfVr8CnYhK5LqXZw==} + peerDependencies: + vue: ^3.2.0 + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + esbuild@0.11.3: + resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} + hasBin: true + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-config-prettier@8.10.0: + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@4.2.1: + resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: '>=7.28.0' + eslint-config-prettier: '*' + prettier: '>=2.0.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + + eslint-plugin-vue@9.32.0: + resolution: {integrity: sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@4.1.0: + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-entry-cache@7.0.2: + resolution: {integrity: sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==} + engines: {node: '>=12.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + frac@1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + framesync@6.1.2: + resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + giget@1.2.5: + resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==} + hasBin: true + + git-raw-commits@2.0.11: + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-dirs@0.1.1: + resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} + engines: {node: '>=4'} + + global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + + global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + + globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + + human-signals@1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + husky@8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.3: + resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==} + engines: {node: '>= 4'} + + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + inflight@1.0.6: + resolution: {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. + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-text-path@1.0.1: + resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} + engines: {node: '>=0.10.0'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + js-cookie@3.0.5: + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsencrypt@3.3.2: + resolution: {integrity: sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + + knitwork@1.2.0: + resolution: {integrity: sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==} + + known-css-properties@0.29.0: + resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lint-staged@13.3.0: + resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true + + listr2@6.6.1: + resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} + engines: {node: '>=16.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + local-pkg@1.1.0: + resolution: {integrity: sha512-xbZBuX6gYIWrlLmZG43aAVer4ocntYO09vPy9lxd6Ns8DnR4U7N+IIeDkubinqFOHHzoMlPxTxwo0jhE7oYjAw==} + engines: {node: '>=14'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.isfunction@3.0.9: + resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-update@5.0.1: + resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mathml-tag-names@2.1.3: + resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + meow@10.1.5: + resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + meow@8.1.2: + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + + mockjs@1.1.0: + resolution: {integrity: sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==} + hasBin: true + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-fetch-native@1.6.6: + resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nprogress@0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nypm@0.5.4: + resolution: {integrity: sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + ohash@1.1.5: + resolution: {integrity: sha512-AtXrG/lMFjPBWj3uhWYFwYVZQqutPYRsv6nnPLTipnC+gJuMFc+WFzf/jx+94Ebray1vxfQfEFDtpIpppOe4xQ==} + + ohash@2.0.9: + resolution: {integrity: sha512-ljz2sybhXrRpBW9LleuJPP9uxbMKW8qxFz9lLOHW2QEel78rJ1sUgaX2cBNDt49w+JleNSkhYkVOCx6RgkKn0Q==} + + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + + path@0.12.7: + resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@3.0.1: + resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} + engines: {node: '>=10'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pinia@2.3.1: + resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==} + peerDependencies: + typescript: '>=4.4.4' + vue: ^2.7.0 || ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + pinyin-pro@3.26.0: + resolution: {integrity: sha512-HcBZZb0pvm0/JkPhZHWA5Hqp2cWHXrrW/WrV+OtaYYM+kf35ffvZppIUuGmyuQ7gDr1JDJKMkbEE+GN0wfMoGg==} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + + popmotion@11.0.5: + resolution: {integrity: sha512-la8gPM1WYeFznb/JqF4GiTkRRPZsfaj2+kCxqQgr2MJylMmIKUwBfWW8Wa5fml/8gmtlD5yI01MP1QCZPWmppA==} + + postcss-calc@8.2.4: + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + + postcss-calc@9.0.1: + resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.2 + + postcss-colormin@5.3.1: + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-colormin@6.1.0: + resolution: {integrity: sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-convert-values@5.1.3: + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-convert-values@6.1.0: + resolution: {integrity: sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-comments@5.1.2: + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-comments@6.0.2: + resolution: {integrity: sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-duplicates@5.1.0: + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-duplicates@6.0.3: + resolution: {integrity: sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-empty@5.1.1: + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-empty@6.0.3: + resolution: {integrity: sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-overridden@5.1.0: + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-overridden@6.0.2: + resolution: {integrity: sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-html@1.8.0: + resolution: {integrity: sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ==} + engines: {node: ^12 || >=14} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + postcss-merge-longhand@5.1.7: + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-merge-longhand@6.0.5: + resolution: {integrity: sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-merge-rules@5.1.4: + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-merge-rules@6.1.1: + resolution: {integrity: sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-font-values@5.1.0: + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-font-values@6.1.0: + resolution: {integrity: sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-gradients@5.1.1: + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-gradients@6.0.3: + resolution: {integrity: sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-params@5.1.4: + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-params@6.1.0: + resolution: {integrity: sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-selectors@5.2.1: + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-selectors@6.0.4: + resolution: {integrity: sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-normalize-charset@5.1.0: + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-charset@6.0.2: + resolution: {integrity: sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-display-values@5.1.0: + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-display-values@6.0.2: + resolution: {integrity: sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-positions@5.1.1: + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-positions@6.0.2: + resolution: {integrity: sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-repeat-style@5.1.1: + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-repeat-style@6.0.2: + resolution: {integrity: sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-string@5.1.0: + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-string@6.0.2: + resolution: {integrity: sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-timing-functions@5.1.0: + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-timing-functions@6.0.2: + resolution: {integrity: sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-unicode@5.1.1: + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-unicode@6.1.0: + resolution: {integrity: sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-url@5.1.0: + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-url@6.0.2: + resolution: {integrity: sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-whitespace@5.1.1: + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-whitespace@6.0.2: + resolution: {integrity: sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-ordered-values@5.1.3: + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-ordered-values@6.0.2: + resolution: {integrity: sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-reduce-initial@5.1.2: + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-initial@6.1.0: + resolution: {integrity: sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-reduce-transforms@5.1.0: + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-transforms@6.0.2: + resolution: {integrity: sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-resolve-nested-selector@0.1.6: + resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} + + postcss-safe-parser@6.0.0: + resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.3.3 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-sorting@8.0.2: + resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==} + peerDependencies: + postcss: ^8.4.20 + + postcss-svgo@5.1.0: + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-svgo@6.0.3: + resolution: {integrity: sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==} + engines: {node: ^14 || ^16 || >= 18} + peerDependencies: + postcss: ^8.4.31 + + postcss-unique-selectors@5.1.1: + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-unique-selectors@6.0.4: + resolution: {integrity: sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + pretty-quick@3.3.1: + resolution: {integrity: sha512-3b36UXfYQ+IXXqex6mCca89jC8u0mYLqFAN5eTQKoXO6oCQYcIVYZEB/5AlBHI7JPYygReM2Vv6Vom/Gln7fBg==} + engines: {node: '>=10.13'} + hasBin: true + peerDependencies: + prettier: ^2.0.0 + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qrcode@1.5.4: + resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} + engines: {node: '>=10.13.0'} + hasBin: true + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + quansync@0.2.7: + resolution: {integrity: sha512-KZDFlN9/Si3CgKHZsIfLBsrjWKFjqu9KA0zDGJEQoQzPm5HWNDEFc2mkLeYUBBOwEJtxNBSMaNLE/GlvArIEfQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg-up@8.0.0: + resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} + engines: {node: '>=12'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + read-pkg@6.0.0: + resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} + engines: {node: '>=12'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + redent@4.0.0: + resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} + engines: {node: '>=12'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-global@1.0.0: + resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} + engines: {node: '>=8'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + responsive-storage@2.2.0: + resolution: {integrity: sha512-94W5Chr2F5kDBT6J+OCOeJguEkSTDc3jPOUQXYmzNG64DCNl5p7hoBDF7bx7u6EXAEcpUKF64OZR4b7Nn8h/Gg==} + + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + + rollup-plugin-external-globals@0.6.1: + resolution: {integrity: sha512-mlp3KNa5sE4Sp9UUR2rjBrxjG79OyZAh/QC18RHIjM+iYkbBwNXSo8DHRMZWtzJTrH8GxQ+SJvCTN3i14uMXIA==} + peerDependencies: + rollup: ^2.25.0 + + rollup-plugin-visualizer@5.14.0: + resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + rolldown: 1.x + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rolldown: + optional: true + rollup: + optional: true + + rollup@3.29.5: + resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + sass-loader@13.3.3: + resolution: {integrity: sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + + sass@1.85.1: + resolution: {integrity: sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==} + engines: {node: '>=14.0.0'} + hasBin: true + + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + sortablejs@1.15.6: + resolution: {integrity: sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + + split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + + ssf@0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + + stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-indent@4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + + style-search@0.1.0: + resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} + + style-value-types@5.1.2: + resolution: {integrity: sha512-Vs9fNreYF9j6W2VvuDTP7kepALi7sk0xtk2Tu8Yxi9UoajJdEVpNpCov0HsLTqXvNGKX+Uv09pkozVITi1jf3Q==} + + stylehacks@5.1.1: + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + stylehacks@6.1.1: + resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + + stylelint-config-html@1.1.0: + resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==} + engines: {node: ^12 || >=14} + peerDependencies: + postcss-html: ^1.0.0 + stylelint: '>=14.0.0' + + stylelint-config-recess-order@4.6.0: + resolution: {integrity: sha512-V76fhv3YtcNXh/hyAuAdSzi5FmcrG54Mp2AThJ3D/PTMTSYzUPd7GIhP6z9mTqnRhmkk6YTfcu/JWB8h+Yrcaw==} + peerDependencies: + stylelint: '>=15' + + stylelint-config-recommended-scss@11.0.0: + resolution: {integrity: sha512-EDghTDU7aOv2LTsRZvcT1w8mcjUaMhuy+t38iV5I/0Qiu6ixdkRwhLEMul3K/fnB2v9Nwqvb3xpvJfPH+HduDw==} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^15.5.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-recommended-scss@12.0.0: + resolution: {integrity: sha512-5Bb2mlGy6WLa30oNeKpZvavv2lowJUsUJO25+OA68GFTemlwd1zbFsL7q0bReKipOSU3sG47hKneZ6Nd+ctrFA==} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^15.5.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-recommended-vue@1.6.0: + resolution: {integrity: sha512-syk1adIHvbH2T1OiR/spUK4oQy35PZIDw8Zmc7E0+eVK9Z9SK3tdMpGRT/bgGnAPpMt/WaL9K1u0tlF6xM0sMQ==} + engines: {node: ^12 || >=14} + peerDependencies: + postcss-html: ^1.0.0 + stylelint: '>=14.0.0' + + stylelint-config-recommended@12.0.0: + resolution: {integrity: sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ==} + peerDependencies: + stylelint: ^15.5.0 + + stylelint-config-standard-scss@9.0.0: + resolution: {integrity: sha512-yPKpJsrZn4ybuQZx/DkEHuCjw7pJginErE/47dFhCnrvD48IJ4UYec8tSiCuJWMA3HRjbIa3nh5ZeSauDGuVAg==} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^15.5.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-standard@33.0.0: + resolution: {integrity: sha512-eyxnLWoXImUn77+ODIuW9qXBDNM+ALN68L3wT1lN2oNspZ7D9NVGlNHb2QCUn4xDug6VZLsh0tF8NyoYzkgTzg==} + peerDependencies: + stylelint: ^15.5.0 + + stylelint-order@6.0.4: + resolution: {integrity: sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==} + peerDependencies: + stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 + + stylelint-prettier@3.0.0: + resolution: {integrity: sha512-kIks1xw6np0zElokMT2kP6ar3S4MBoj6vUtPJuND1pFELMpZxVS/0uHPR4HDAVn0WAD3I5oF0IA3qBFxBpMkLg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + prettier: '>=2.0.0' + stylelint: '>=14.0.0' + + stylelint-scss@4.7.0: + resolution: {integrity: sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==} + peerDependencies: + stylelint: ^14.5.1 || ^15.0.0 + + stylelint-scss@5.3.2: + resolution: {integrity: sha512-4LzLaayFhFyneJwLo0IUa8knuIvj+zF0vBFueQs4e3tEaAMIQX8q5th8ziKkgOavr6y/y9yoBe+RXN/edwLzsQ==} + peerDependencies: + stylelint: ^14.5.1 || ^15.0.0 + + stylelint@15.11.0: + resolution: {integrity: sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + terser-webpack-plugin@5.3.12: + resolution: {integrity: sha512-jDLYqo7oF8tJIttjXO6jBY5Hk8p3A8W4ttih7cCEq64fQFWmgJ4VqAQjKr7WwIDlmXKEc6QeoRb5ecjZ+2afcg==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.39.0: + resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} + engines: {node: '>=10'} + hasBin: true + + text-extensions@1.9.0: + resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} + engines: {node: '>=0.10'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + + tippy.js@6.3.7: + resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + + trim-newlines@4.1.1: + resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} + engines: {node: '>=12'} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + + tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + 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' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + typeit@8.8.7: + resolution: {integrity: sha512-sSVpy+cjeFP6Z+fZqiHzUSShg5yYFeJEt/Qut/bX945+Axyq+Yq+GPOuuk+sofoccSv8nNX/ibOOHkbki2mEpg==} + + typescript@5.0.4: + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} + engines: {node: '>=12.20'} + hasBin: true + + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + unctx@2.4.1: + resolution: {integrity: sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unimport@4.1.2: + resolution: {integrity: sha512-oVUL7PSlyVV3QRhsdcyYEMaDX8HJyS/CnUonEJTYA3//bWO+o/4gG8F7auGWWWkrrxBQBYOO8DKe+C53ktpRXw==} + engines: {node: '>=18.12.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unplugin-utils@0.2.4: + resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} + engines: {node: '>=18.12.0'} + + unplugin@2.2.0: + resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==} + engines: {node: '>=18.12.0'} + + untyped@1.5.2: + resolution: {integrity: sha512-eL/8PlhLcMmlMDtNPKhyyz9kEBDS3Uk4yMu/ewlkT2WFbtzScjHWPJLdQLmaGPUKjXzwe9MumOtOgc4Fro96Kg==} + hasBin: true + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.10.4: + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + vite-plugin-cdn-import@0.3.5: + resolution: {integrity: sha512-e1raoalfBiIhv+hnMeSp1UNjloDDBhHpeFxkwRRdPBmTdDRqdEEn8owUmT5u8UBSVCs4xN3n/od4a91vXEhXPQ==} + + vite-plugin-compression@0.5.1: + resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-mock@2.9.6: + resolution: {integrity: sha512-/Rm59oPppe/ncbkSrUuAxIQihlI2YcBmnbR4ST1RA2VzM1C0tEQc1KlbQvnUGhXECAGTaQN2JyasiwXP6EtKgg==} + engines: {node: '>=12.0.0'} + peerDependencies: + mockjs: '>=1.1.0' + vite: '>=2.0.0' + + vite-plugin-remove-console@2.2.0: + resolution: {integrity: sha512-qgjh5pz75MdE9Kzs8J0kBwaCfifHV0ezRbB9rpGsIOxam+ilcGV7WOk91vFJXquzRmiKrFh3Hxlh0JJWAmXTbQ==} + + vite-svg-loader@4.0.0: + resolution: {integrity: sha512-0MMf1yzzSYlV4MGePsLVAOqXsbF5IVxbn4EEzqRnWxTQl8BJg/cfwIzfQNmNQxZp5XXwd4kyRKF1LytuHZTnqA==} + + vite@4.5.9: + resolution: {integrity: sha512-qK9W4xjgD3gXbC0NmdNFFnVFLMWSNiR3swj957yutwzzN16xF/E7nmtAyp1rT9hviDroQANjE4HK3H4WqWdFtw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + 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 + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-eslint-parser@9.4.3: + resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + vue-router@4.5.0: + resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==} + peerDependencies: + vue: ^3.2.0 + + vue-template-compiler@2.7.16: + resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} + + vue-tippy@6.6.0: + resolution: {integrity: sha512-ISRIUQDlcEP05K1nCbvlVcd8yuWS6S3dI91qD0A2slgtwwWjih8Fn9Aymq4SNaHQsdiP5+MLRPZVDxFjKMPgKA==} + peerDependencies: + vue: ^3.2.0 + + vue-tsc@1.8.27: + resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} + hasBin: true + peerDependencies: + typescript: '*' + + vue-types@5.1.3: + resolution: {integrity: sha512-3Wy6QcZl0VusCCHX3vYrWSILFlrOB2EQDoySnuYmASM5cUp1FivJGfkS5lp1CutDgyRb41g32r/1QCmiBj5i1Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + vue: ^2.0.0 || ^3.0.0 + peerDependenciesMeta: + vue: + optional: true + + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + webpack@5.98.0: + resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wmf@1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + word@0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + xlsx@0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zrender@5.6.1: + resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.9': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helpers': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.9': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.9 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.9': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/parser@7.26.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/standalone@7.26.9': + optional: true + + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/traverse@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.9': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@commitlint/cli@17.8.1': + dependencies: + '@commitlint/format': 17.8.1 + '@commitlint/lint': 17.8.1 + '@commitlint/load': 17.8.1 + '@commitlint/read': 17.8.1 + '@commitlint/types': 17.8.1 + execa: 5.1.1 + lodash.isfunction: 3.0.9 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + + '@commitlint/config-conventional@17.8.1': + dependencies: + conventional-changelog-conventionalcommits: 6.1.0 + + '@commitlint/config-validator@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + ajv: 8.17.1 + + '@commitlint/ensure@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@17.8.1': {} + + '@commitlint/format@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + chalk: 4.1.2 + + '@commitlint/is-ignored@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + semver: 7.5.4 + + '@commitlint/lint@17.8.1': + dependencies: + '@commitlint/is-ignored': 17.8.1 + '@commitlint/parse': 17.8.1 + '@commitlint/rules': 17.8.1 + '@commitlint/types': 17.8.1 + + '@commitlint/load@17.8.1': + dependencies: + '@commitlint/config-validator': 17.8.1 + '@commitlint/execute-rule': 17.8.1 + '@commitlint/resolve-extends': 17.8.1 + '@commitlint/types': 17.8.1 + '@types/node': 20.5.1 + chalk: 4.1.2 + cosmiconfig: 8.3.6(typescript@5.8.2) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.8.2))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.8.2))(typescript@5.8.2) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + resolve-from: 5.0.0 + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + + '@commitlint/message@17.8.1': {} + + '@commitlint/parse@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + conventional-changelog-angular: 6.0.0 + conventional-commits-parser: 4.0.0 + + '@commitlint/read@17.8.1': + dependencies: + '@commitlint/top-level': 17.8.1 + '@commitlint/types': 17.8.1 + fs-extra: 11.3.0 + git-raw-commits: 2.0.11 + minimist: 1.2.8 + + '@commitlint/resolve-extends@17.8.1': + dependencies: + '@commitlint/config-validator': 17.8.1 + '@commitlint/types': 17.8.1 + import-fresh: 3.3.1 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + + '@commitlint/rules@17.8.1': + dependencies: + '@commitlint/ensure': 17.8.1 + '@commitlint/message': 17.8.1 + '@commitlint/to-lines': 17.8.1 + '@commitlint/types': 17.8.1 + execa: 5.1.1 + + '@commitlint/to-lines@17.8.1': {} + + '@commitlint/top-level@17.8.1': + dependencies: + find-up: 5.0.0 + + '@commitlint/types@17.8.1': + dependencies: + chalk: 4.1.2 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1)': + dependencies: + '@csstools/css-tokenizer': 2.4.1 + + '@csstools/css-tokenizer@2.4.1': {} + + '@csstools/media-query-list-parser@2.1.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)': + dependencies: + '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1) + '@csstools/css-tokenizer': 2.4.1 + + '@csstools/selector-specificity@3.1.1(postcss-selector-parser@6.1.2)': + dependencies: + postcss-selector-parser: 6.1.2 + + '@ctrl/tinycolor@3.6.1': {} + + '@element-plus/icons-vue@2.3.1(vue@3.5.13(typescript@5.0.4))': + dependencies: + vue: 3.5.13(typescript@5.0.4) + + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@floating-ui/core@1.6.9': + dependencies: + '@floating-ui/utils': 0.2.9 + + '@floating-ui/dom@1.6.13': + dependencies: + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 + + '@floating-ui/utils@0.2.9': {} + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@iconify-icons/ep@1.2.12': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-icons/ri@1.2.10': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + + '@iconify/vue@4.3.0(vue@3.5.13(typescript@5.0.4))': + dependencies: + '@iconify/types': 2.0.0 + vue: 3.5.13(typescript@5.0.4) + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@nuxt/kit@3.15.4': + dependencies: + c12: 2.0.4 + consola: 3.4.0 + defu: 6.1.4 + destr: 2.0.3 + globby: 14.1.0 + ignore: 7.0.3 + jiti: 2.4.2 + klona: 2.0.6 + knitwork: 1.2.0 + mlly: 1.7.4 + ohash: 1.1.5 + pathe: 2.0.3 + pkg-types: 1.3.1 + scule: 1.3.0 + semver: 7.7.1 + std-env: 3.8.0 + ufo: 1.5.4 + unctx: 2.4.1 + unimport: 4.1.2 + untyped: 1.5.2 + transitivePeerDependencies: + - magicast + - supports-color + optional: true + + '@parcel/watcher-android-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + optional: true + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@popperjs/core@2.11.8': {} + + '@pureadmin/descriptions@1.2.1(echarts@5.6.0)(element-plus@2.3.6(vue@3.5.13(typescript@5.0.4)))(typescript@5.0.4)': + dependencies: + '@element-plus/icons-vue': 2.3.1(vue@3.5.13(typescript@5.0.4)) + '@pureadmin/utils': 2.5.0(echarts@5.6.0)(vue@3.5.13(typescript@5.0.4)) + element-plus: 2.3.6(vue@3.5.13(typescript@5.0.4)) + vue: 3.5.13(typescript@5.0.4) + transitivePeerDependencies: + - echarts + - typescript + + '@pureadmin/table@2.4.7(element-plus@2.3.6(vue@3.5.13(typescript@5.0.4)))(typescript@5.0.4)': + dependencies: + element-plus: 2.3.6(vue@3.5.13(typescript@5.0.4)) + vue: 3.5.13(typescript@5.0.4) + transitivePeerDependencies: + - typescript + + '@pureadmin/theme-utils@0.1.0': + dependencies: + cac: 6.7.14 + color: 4.2.3 + cssnano: 5.1.15(postcss@8.5.3) + cssnano-preset-lite: 2.1.3(postcss@8.5.3) + fs-extra: 10.1.0 + postcss: 8.5.3 + prettier: 2.8.8 + uuid: 8.3.2 + + '@pureadmin/theme@3.3.0': + dependencies: + '@pureadmin/theme-utils': 0.1.0 + fs-extra: 11.3.0 + string-hash: 1.1.3 + + '@pureadmin/utils@1.18.0(echarts@5.6.0)(vue@3.5.13(typescript@5.0.4))': + optionalDependencies: + echarts: 5.6.0 + vue: 3.5.13(typescript@5.0.4) + + '@pureadmin/utils@2.5.0(echarts@5.6.0)(vue@3.5.13(typescript@5.0.4))': + optionalDependencies: + echarts: 5.6.0 + vue: 3.5.13(typescript@5.0.4) + + '@rollup/plugin-node-resolve@13.3.0(rollup@3.29.5)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@3.29.5) + '@types/resolve': 1.17.1 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.10 + rollup: 3.29.5 + + '@rollup/pluginutils@3.1.0(rollup@3.29.5)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 3.29.5 + + '@rollup/pluginutils@4.2.1': + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + + '@sindresorhus/merge-streams@2.3.0': + optional: true + + '@sxzz/popperjs-es@2.11.7': {} + + '@trysound/sax@0.2.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.6 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + + '@types/estree@0.0.39': {} + + '@types/estree@1.0.6': {} + + '@types/js-cookie@3.0.6': {} + + '@types/json-schema@7.0.15': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.16 + + '@types/lodash@4.17.16': {} + + '@types/minimist@1.2.5': {} + + '@types/mockjs@1.0.10': {} + + '@types/node@20.17.22': + dependencies: + undici-types: 6.19.8 + + '@types/node@20.5.1': {} + + '@types/normalize-package-data@2.4.4': {} + + '@types/nprogress@0.2.0': {} + + '@types/qs@6.9.18': {} + + '@types/resolve@1.17.1': + dependencies: + '@types/node': 20.17.22 + + '@types/semver@7.5.8': {} + + '@types/sortablejs@1.15.8': {} + + '@types/web-animations-js@2.2.16': {} + + '@types/web-bluetooth@0.0.16': {} + + '@types/web-bluetooth@0.0.20': {} + + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.0.4) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.0.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.0.4) + debug: 4.4.0 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare-lite: 1.4.0 + semver: 7.7.1 + tsutils: 3.21.0(typescript@5.0.4) + optionalDependencies: + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.0.4)': + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) + debug: 4.4.0 + eslint: 8.57.1 + optionalDependencies: + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.0.4)': + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.0.4) + debug: 4.4.0 + eslint: 8.57.1 + tsutils: 3.21.0(typescript@5.0.4) + optionalDependencies: + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@5.62.0': {} + + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.0.4)': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.4.0 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.7.1 + tsutils: 3.21.0(typescript@5.0.4) + optionalDependencies: + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.0.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) + eslint: 8.57.1 + eslint-scope: 5.1.1 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.3.0': {} + + '@vitejs/plugin-vue-jsx@3.1.0(vite@4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0))(vue@3.5.13(typescript@5.0.4))': + dependencies: + '@babel/core': 7.26.9 + '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9) + '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.9) + vite: 4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0) + vue: 3.5.13(typescript@5.0.4) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-vue@4.6.2(vite@4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0))(vue@3.5.13(typescript@5.0.4))': + dependencies: + vite: 4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0) + vue: 3.5.13(typescript@5.0.4) + + '@volar/language-core@1.11.1': + dependencies: + '@volar/source-map': 1.11.1 + + '@volar/source-map@1.11.1': + dependencies: + muggle-string: 0.3.1 + + '@volar/typescript@1.11.1': + dependencies: + '@volar/language-core': 1.11.1 + path-browserify: 1.0.1 + + '@vue/babel-helper-vue-transform-on@1.2.5': {} + + '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.26.9)': + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + '@vue/babel-helper-vue-transform-on': 1.2.5 + '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.26.9) + html-tags: 3.3.1 + svg-tags: 1.0.0 + optionalDependencies: + '@babel/core': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.2.5(@babel/core@7.26.9)': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/parser': 7.26.9 + '@vue/compiler-sfc': 3.5.13 + transitivePeerDependencies: + - supports-color + + '@vue/compiler-core@3.5.13': + dependencies: + '@babel/parser': 7.26.9 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.13': + dependencies: + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-sfc@3.5.13': + dependencies: + '@babel/parser': 7.26.9 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.3 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.13': + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/devtools-api@6.6.4': {} + + '@vue/eslint-config-prettier@7.1.0(eslint@8.57.1)(prettier@2.8.8)': + dependencies: + eslint: 8.57.1 + eslint-config-prettier: 8.10.0(eslint@8.57.1) + eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8) + prettier: 2.8.8 + + '@vue/eslint-config-typescript@11.0.3(eslint-plugin-vue@9.32.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.0.4)': + dependencies: + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.0.4) + eslint: 8.57.1 + eslint-plugin-vue: 9.32.0(eslint@8.57.1) + vue-eslint-parser: 9.4.3(eslint@8.57.1) + optionalDependencies: + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + + '@vue/language-core@1.8.27(typescript@5.0.4)': + dependencies: + '@volar/language-core': 1.11.1 + '@volar/source-map': 1.11.1 + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + computeds: 0.0.1 + minimatch: 9.0.5 + muggle-string: 0.3.1 + path-browserify: 1.0.1 + vue-template-compiler: 2.7.16 + optionalDependencies: + typescript: 5.0.4 + + '@vue/reactivity@3.5.13': + dependencies: + '@vue/shared': 3.5.13 + + '@vue/runtime-core@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/runtime-dom@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.0.4))': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13(typescript@5.0.4) + + '@vue/shared@3.5.13': {} + + '@vueuse/core@10.11.1(vue@3.5.13(typescript@5.0.4))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.11.1 + '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.0.4)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.0.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/core@9.13.0(vue@3.5.13(typescript@5.0.4))': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.5.13(typescript@5.0.4)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.0.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@10.11.1': {} + + '@vueuse/metadata@9.13.0': {} + + '@vueuse/motion@2.2.6(vue@3.5.13(typescript@5.0.4))': + dependencies: + '@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.0.4)) + '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.0.4)) + csstype: 3.1.3 + framesync: 6.1.2 + popmotion: 11.0.5 + style-value-types: 5.1.2 + vue: 3.5.13(typescript@5.0.4) + optionalDependencies: + '@nuxt/kit': 3.15.4 + transitivePeerDependencies: + - '@vue/composition-api' + - magicast + - supports-color + + '@vueuse/shared@10.11.1(vue@3.5.13(typescript@5.0.4))': + dependencies: + vue-demi: 0.14.10(vue@3.5.13(typescript@5.0.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/shared@9.13.0(vue@3.5.13(typescript@5.0.4))': + dependencies: + vue-demi: 0.14.10(vue@3.5.13(typescript@5.0.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + adler-32@1.3.1: {} + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + animate.css@4.1.1: {} + + ansi-escapes@5.0.0: + dependencies: + type-fest: 1.4.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@4.1.3: {} + + arg@5.0.2: {} + + argparse@2.0.1: {} + + array-ify@1.0.0: {} + + array-union@2.1.0: {} + + arrify@1.0.1: {} + + astral-regex@2.0.0: {} + + async-validator@4.2.5: {} + + asynckit@0.4.0: {} + + autoprefixer@10.4.20(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + caniuse-lite: 1.0.30001701 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + axios@1.8.1: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + balanced-match@2.0.0: {} + + binary-extensions@2.3.0: {} + + boolbase@1.0.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001701 + electron-to-chromium: 1.5.109 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + buffer-from@1.1.2: {} + + builtin-modules@3.3.0: {} + + c12@2.0.4: + dependencies: + chokidar: 4.0.3 + confbox: 0.1.8 + defu: 6.1.4 + dotenv: 16.4.7 + giget: 1.2.5 + jiti: 2.4.2 + mlly: 1.7.4 + ohash: 2.0.9 + pathe: 2.0.3 + perfect-debounce: 1.0.0 + pkg-types: 1.3.1 + rc9: 2.1.2 + optional: true + + cac@6.7.14: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + camelcase-keys@6.2.2: + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + + camelcase-keys@7.0.2: + dependencies: + camelcase: 6.3.0 + map-obj: 4.3.0 + quick-lru: 5.1.1 + type-fest: 1.4.0 + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-api@3.0.0: + dependencies: + browserslist: 4.24.4 + caniuse-lite: 1.0.30001701 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + + caniuse-lite@1.0.30001701: {} + + cfb@1.2.2: + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@2.0.0: + optional: true + + chrome-trace-event@1.0.4: {} + + citty@0.1.6: + dependencies: + consola: 3.4.0 + optional: true + + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + + cli-truncate@3.1.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cloc@2.11.0: {} + + codepage@1.15.0: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + + colord@2.9.3: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@11.0.0: {} + + commander@13.1.0: {} + + commander@2.20.3: {} + + commander@4.1.1: {} + + commander@7.2.0: {} + + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + + computeds@0.0.1: {} + + concat-map@0.0.1: {} + + confbox@0.1.8: + optional: true + + connect@3.7.0: + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + + consola@3.4.0: + optional: true + + conventional-changelog-angular@6.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-conventionalcommits@6.1.0: + dependencies: + compare-func: 2.0.0 + + conventional-commits-parser@4.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 1.0.1 + meow: 8.1.2 + split2: 3.2.2 + + convert-source-map@2.0.0: {} + + cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.8.2))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.8.2))(typescript@5.8.2): + dependencies: + '@types/node': 20.5.1 + cosmiconfig: 8.3.6(typescript@5.8.2) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.8.2) + typescript: 5.8.2 + + cosmiconfig@8.3.6(typescript@5.0.4): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.0.4 + + cosmiconfig@8.3.6(typescript@5.8.2): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.8.2 + + crc-32@1.2.2: {} + + create-require@1.1.1: {} + + cropperjs@1.6.2: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-js@4.2.0: {} + + css-declaration-sorter@6.4.1(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + css-declaration-sorter@7.2.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + css-functions-list@3.2.3: {} + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-what@6.1.0: {} + + cssesc@3.0.0: {} + + cssnano-preset-default@5.2.14(postcss@8.5.3): + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.5.3) + cssnano-utils: 3.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-calc: 8.2.4(postcss@8.5.3) + postcss-colormin: 5.3.1(postcss@8.5.3) + postcss-convert-values: 5.1.3(postcss@8.5.3) + postcss-discard-comments: 5.1.2(postcss@8.5.3) + postcss-discard-duplicates: 5.1.0(postcss@8.5.3) + postcss-discard-empty: 5.1.1(postcss@8.5.3) + postcss-discard-overridden: 5.1.0(postcss@8.5.3) + postcss-merge-longhand: 5.1.7(postcss@8.5.3) + postcss-merge-rules: 5.1.4(postcss@8.5.3) + postcss-minify-font-values: 5.1.0(postcss@8.5.3) + postcss-minify-gradients: 5.1.1(postcss@8.5.3) + postcss-minify-params: 5.1.4(postcss@8.5.3) + postcss-minify-selectors: 5.2.1(postcss@8.5.3) + postcss-normalize-charset: 5.1.0(postcss@8.5.3) + postcss-normalize-display-values: 5.1.0(postcss@8.5.3) + postcss-normalize-positions: 5.1.1(postcss@8.5.3) + postcss-normalize-repeat-style: 5.1.1(postcss@8.5.3) + postcss-normalize-string: 5.1.0(postcss@8.5.3) + postcss-normalize-timing-functions: 5.1.0(postcss@8.5.3) + postcss-normalize-unicode: 5.1.1(postcss@8.5.3) + postcss-normalize-url: 5.1.0(postcss@8.5.3) + postcss-normalize-whitespace: 5.1.1(postcss@8.5.3) + postcss-ordered-values: 5.1.3(postcss@8.5.3) + postcss-reduce-initial: 5.1.2(postcss@8.5.3) + postcss-reduce-transforms: 5.1.0(postcss@8.5.3) + postcss-svgo: 5.1.0(postcss@8.5.3) + postcss-unique-selectors: 5.1.1(postcss@8.5.3) + + cssnano-preset-default@6.1.2(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + css-declaration-sorter: 7.2.0(postcss@8.5.3) + cssnano-utils: 4.0.2(postcss@8.5.3) + postcss: 8.5.3 + postcss-calc: 9.0.1(postcss@8.5.3) + postcss-colormin: 6.1.0(postcss@8.5.3) + postcss-convert-values: 6.1.0(postcss@8.5.3) + postcss-discard-comments: 6.0.2(postcss@8.5.3) + postcss-discard-duplicates: 6.0.3(postcss@8.5.3) + postcss-discard-empty: 6.0.3(postcss@8.5.3) + postcss-discard-overridden: 6.0.2(postcss@8.5.3) + postcss-merge-longhand: 6.0.5(postcss@8.5.3) + postcss-merge-rules: 6.1.1(postcss@8.5.3) + postcss-minify-font-values: 6.1.0(postcss@8.5.3) + postcss-minify-gradients: 6.0.3(postcss@8.5.3) + postcss-minify-params: 6.1.0(postcss@8.5.3) + postcss-minify-selectors: 6.0.4(postcss@8.5.3) + postcss-normalize-charset: 6.0.2(postcss@8.5.3) + postcss-normalize-display-values: 6.0.2(postcss@8.5.3) + postcss-normalize-positions: 6.0.2(postcss@8.5.3) + postcss-normalize-repeat-style: 6.0.2(postcss@8.5.3) + postcss-normalize-string: 6.0.2(postcss@8.5.3) + postcss-normalize-timing-functions: 6.0.2(postcss@8.5.3) + postcss-normalize-unicode: 6.1.0(postcss@8.5.3) + postcss-normalize-url: 6.0.2(postcss@8.5.3) + postcss-normalize-whitespace: 6.0.2(postcss@8.5.3) + postcss-ordered-values: 6.0.2(postcss@8.5.3) + postcss-reduce-initial: 6.1.0(postcss@8.5.3) + postcss-reduce-transforms: 6.0.2(postcss@8.5.3) + postcss-svgo: 6.0.3(postcss@8.5.3) + postcss-unique-selectors: 6.0.4(postcss@8.5.3) + + cssnano-preset-lite@2.1.3(postcss@8.5.3): + dependencies: + cssnano-utils: 3.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-discard-comments: 5.1.2(postcss@8.5.3) + postcss-discard-empty: 5.1.1(postcss@8.5.3) + postcss-normalize-whitespace: 5.1.1(postcss@8.5.3) + + cssnano-utils@3.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + cssnano-utils@4.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + cssnano@5.1.15(postcss@8.5.3): + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.5.3) + lilconfig: 2.1.0 + postcss: 8.5.3 + yaml: 1.10.2 + + cssnano@6.1.2(postcss@8.5.3): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.5.3) + lilconfig: 3.1.3 + postcss: 8.5.3 + + csso@4.2.0: + dependencies: + css-tree: 1.1.3 + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + csstype@3.1.3: {} + + dargs@7.0.0: {} + + dayjs@1.11.13: {} + + de-indent@1.0.2: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + decamelize-keys@1.1.1: + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + + decamelize@1.2.0: {} + + decamelize@5.0.1: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + define-lazy-prop@2.0.0: {} + + defu@6.1.4: + optional: true + + delayed-stream@1.0.0: {} + + destr@2.0.3: + optional: true + + detect-libc@1.0.3: + optional: true + + didyoumean@1.2.2: {} + + diff@4.0.2: {} + + dijkstrajs@1.0.3: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dlv@1.1.3: {} + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + dotenv@16.4.7: + optional: true + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + echarts@5.6.0: + dependencies: + tslib: 2.3.0 + zrender: 5.6.1 + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.109: {} + + element-plus@2.3.6(vue@3.5.13(typescript@5.0.4)): + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@element-plus/icons-vue': 2.3.1(vue@3.5.13(typescript@5.0.4)) + '@floating-ui/dom': 1.6.13 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.17.16 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0(vue@3.5.13(typescript@5.0.4)) + async-validator: 4.2.5 + dayjs: 1.11.13 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.5.13(typescript@5.0.4) + transitivePeerDependencies: + - '@vue/composition-api' + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encodeurl@1.0.2: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + entities@2.2.0: {} + + entities@4.5.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.6.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + esbuild@0.11.3: {} + + esbuild@0.18.20: + 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 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: + optional: true + + eslint-config-prettier@8.10.0(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8): + dependencies: + eslint: 8.57.1 + prettier: 2.8.8 + prettier-linter-helpers: 1.0.0 + optionalDependencies: + eslint-config-prettier: 8.10.0(eslint@8.57.1) + + eslint-plugin-vue@9.32.0(eslint@8.57.1): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + eslint: 8.57.1 + globals: 13.24.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.2 + semver: 7.7.1 + vue-eslint-parser: 9.4.3(eslint@8.57.1) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + 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.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + 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.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 3.4.3 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + estree-walker@1.0.1: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + optional: true + + esutils@2.0.3: {} + + eventemitter3@5.0.1: {} + + events@3.3.0: {} + + execa@4.1.0: + dependencies: + cross-spawn: 7.0.6 + get-stream: 5.2.0 + human-signals: 1.1.1 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@7.2.0: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.6: {} + + fastest-levenshtein@1.0.16: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + optional: true + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + file-entry-cache@7.0.2: + dependencies: + flat-cache: 3.2.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.1.2: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.3: {} + + follow-redirects@1.15.9: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + frac@1.1.2: {} + + fraction.js@4.3.7: {} + + framesync@6.1.2: + dependencies: + tslib: 2.4.0 + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + optional: true + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + + get-stream@6.0.1: {} + + giget@1.2.5: + dependencies: + citty: 0.1.6 + consola: 3.4.0 + defu: 6.1.4 + node-fetch-native: 1.6.6 + nypm: 0.5.4 + pathe: 2.0.3 + tar: 6.2.1 + optional: true + + git-raw-commits@2.0.11: + dependencies: + dargs: 7.0.0 + lodash: 4.17.21 + meow: 8.1.2 + split2: 3.2.2 + through2: 4.0.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + global-dirs@0.1.1: + dependencies: + ini: 1.3.8 + + global-modules@2.0.0: + dependencies: + global-prefix: 3.0.0 + + global-prefix@3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + globby@14.1.0: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.3 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + optional: true + + globjoin@0.1.4: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + hard-rejection@2.1.0: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + hey-listen@1.0.8: {} + + hosted-git-info@2.8.9: {} + + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + + html-tags@3.3.1: {} + + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + human-signals@1.1.1: {} + + human-signals@2.1.0: {} + + human-signals@4.3.1: {} + + husky@8.0.3: {} + + ignore@5.3.2: {} + + ignore@7.0.3: + optional: true + + immutable@5.0.3: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-lazy@4.0.0: {} + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + indent-string@5.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.3: {} + + inherits@2.0.4: {} + + ini@1.3.8: {} + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-docker@2.2.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-module@1.0.0: {} + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@1.1.0: {} + + is-plain-object@5.0.0: {} + + is-reference@1.2.1: + dependencies: + '@types/estree': 1.0.6 + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-text-path@1.0.1: + dependencies: + text-extensions: 1.9.0 + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jest-worker@27.5.1: + dependencies: + '@types/node': 20.17.22 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jiti@1.21.7: {} + + jiti@2.4.2: + optional: true + + js-cookie@3.0.5: {} + + js-tokens@4.0.0: {} + + js-tokens@9.0.1: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsencrypt@3.3.2: {} + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonparse@1.3.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@6.0.3: {} + + klona@2.0.6: + optional: true + + knitwork@1.2.0: + optional: true + + known-css-properties@0.29.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@2.1.0: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lint-staged@13.3.0: + dependencies: + chalk: 5.3.0 + commander: 11.0.0 + debug: 4.3.4 + execa: 7.2.0 + lilconfig: 2.1.0 + listr2: 6.6.1 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.1 + transitivePeerDependencies: + - enquirer + - supports-color + + listr2@6.6.1: + dependencies: + cli-truncate: 3.1.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 5.0.1 + rfdc: 1.4.1 + wrap-ansi: 8.1.0 + + loader-runner@4.3.0: {} + + local-pkg@1.1.0: + dependencies: + mlly: 1.7.4 + pkg-types: 1.3.1 + quansync: 0.2.7 + optional: true + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.17.21: {} + + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.21 + lodash-es: 4.17.21 + + lodash.camelcase@4.3.0: {} + + lodash.isfunction@3.0.9: {} + + lodash.isplainobject@4.0.6: {} + + lodash.kebabcase@4.1.1: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.mergewith@4.6.2: {} + + lodash.snakecase@4.1.1: {} + + lodash.startcase@4.4.0: {} + + lodash.truncate@4.4.2: {} + + lodash.uniq@4.5.0: {} + + lodash.upperfirst@4.3.1: {} + + lodash@4.17.21: {} + + log-update@5.0.1: + dependencies: + ansi-escapes: 5.0.0 + cli-cursor: 4.0.0 + slice-ansi: 5.0.0 + strip-ansi: 7.1.0 + wrap-ansi: 8.1.0 + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + make-error@1.3.6: {} + + map-obj@1.0.1: {} + + map-obj@4.3.0: {} + + math-intrinsics@1.1.0: {} + + mathml-tag-names@2.1.3: {} + + mdn-data@2.0.14: {} + + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + + memoize-one@6.0.0: {} + + meow@10.1.5: + dependencies: + '@types/minimist': 1.2.5 + camelcase-keys: 7.0.2 + decamelize: 5.0.1 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 8.0.0 + redent: 4.0.0 + trim-newlines: 4.1.1 + type-fest: 1.4.0 + yargs-parser: 20.2.9 + + meow@8.1.2: + dependencies: + '@types/minimist': 1.2.5 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.18.1 + yargs-parser: 20.2.9 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.5: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + min-indent@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist-options@4.1.0: + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + + minimist@1.2.8: {} + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + optional: true + + minipass@5.0.0: + optional: true + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + optional: true + + mitt@3.0.1: {} + + mkdirp@1.0.4: + optional: true + + mlly@1.7.4: + dependencies: + acorn: 8.14.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.5.4 + optional: true + + mockjs@1.1.0: + dependencies: + commander: 13.1.0 + + mri@1.2.0: {} + + ms@2.0.0: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + muggle-string@0.3.1: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.8: {} + + natural-compare-lite@1.4.0: {} + + natural-compare@1.4.0: {} + + neo-async@2.6.2: {} + + node-addon-api@7.1.1: + optional: true + + node-fetch-native@1.6.6: + optional: true + + node-releases@2.0.19: {} + + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.10 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + + normalize-package-data@3.0.3: + dependencies: + hosted-git-info: 4.1.0 + is-core-module: 2.16.1 + semver: 7.7.1 + validate-npm-package-license: 3.0.4 + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + normalize-url@6.1.0: {} + + normalize-wheel-es@1.2.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + nprogress@0.2.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nypm@0.5.4: + dependencies: + citty: 0.1.6 + consola: 3.4.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + tinyexec: 0.3.2 + ufo: 1.5.4 + optional: true + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.4: {} + + ohash@1.1.5: + optional: true + + ohash@2.0.9: + optional: true + + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parseurl@1.3.3: {} + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@6.3.0: {} + + path-type@4.0.0: {} + + path-type@6.0.0: + optional: true + + path@0.12.7: + dependencies: + process: 0.11.10 + util: 0.10.4 + + pathe@2.0.3: + optional: true + + perfect-debounce@1.0.0: + optional: true + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@3.0.1: {} + + picomatch@4.0.2: {} + + pidtree@0.6.0: {} + + pify@2.3.0: {} + + pinia@2.3.1(typescript@5.0.4)(vue@3.5.13(typescript@5.0.4)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.0.4) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.0.4)) + optionalDependencies: + typescript: 5.0.4 + transitivePeerDependencies: + - '@vue/composition-api' + + pinyin-pro@3.26.0: {} + + pirates@4.0.6: {} + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + optional: true + + pngjs@5.0.0: {} + + popmotion@11.0.5: + dependencies: + framesync: 6.1.2 + hey-listen: 1.0.8 + style-value-types: 5.1.2 + tslib: 2.4.0 + + postcss-calc@8.2.4(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + + postcss-calc@9.0.1(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + + postcss-colormin@5.3.1(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-colormin@6.1.0(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-convert-values@5.1.3(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-convert-values@6.1.0(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-discard-comments@5.1.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-discard-comments@6.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-discard-duplicates@5.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-discard-duplicates@6.0.3(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-discard-empty@5.1.1(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-discard-empty@6.0.3(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-discard-overridden@5.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-discard-overridden@6.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-html@1.8.0: + dependencies: + htmlparser2: 8.0.2 + js-tokens: 9.0.1 + postcss: 8.5.3 + postcss-safe-parser: 6.0.0(postcss@8.5.3) + + postcss-import@15.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.5.3): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.3 + + postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.8.2)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.7.0 + optionalDependencies: + postcss: 8.5.3 + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.8.2) + + postcss-media-query-parser@0.2.3: {} + + postcss-merge-longhand@5.1.7(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.5.3) + + postcss-merge-longhand@6.0.5(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + stylehacks: 6.1.1(postcss@8.5.3) + + postcss-merge-rules@5.1.4(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + + postcss-merge-rules@6.1.1(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + caniuse-api: 3.0.0 + cssnano-utils: 4.0.2(postcss@8.5.3) + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + + postcss-minify-font-values@5.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-minify-font-values@6.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@5.1.1(postcss@8.5.3): + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@6.0.3(postcss@8.5.3): + dependencies: + colord: 2.9.3 + cssnano-utils: 4.0.2(postcss@8.5.3) + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-minify-params@5.1.4(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + cssnano-utils: 3.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-minify-params@6.1.0(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + cssnano-utils: 4.0.2(postcss@8.5.3) + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-minify-selectors@5.2.1(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + + postcss-minify-selectors@6.0.4(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + + postcss-nested@6.2.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + + postcss-normalize-charset@5.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-normalize-charset@6.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-normalize-display-values@5.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-display-values@6.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@5.1.1(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@6.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@5.1.1(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@6.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@5.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@6.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@5.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@6.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@5.1.1(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@6.1.0(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@5.1.0(postcss@8.5.3): + dependencies: + normalize-url: 6.1.0 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@6.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@5.1.1(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@6.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-ordered-values@5.1.3(postcss@8.5.3): + dependencies: + cssnano-utils: 3.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-ordered-values@6.0.2(postcss@8.5.3): + dependencies: + cssnano-utils: 4.0.2(postcss@8.5.3) + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-reduce-initial@5.1.2(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + caniuse-api: 3.0.0 + postcss: 8.5.3 + + postcss-reduce-initial@6.1.0(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + caniuse-api: 3.0.0 + postcss: 8.5.3 + + postcss-reduce-transforms@5.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-reduce-transforms@6.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + postcss-resolve-nested-selector@0.1.6: {} + + postcss-safe-parser@6.0.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-scss@4.0.9(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-sorting@8.0.2(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-svgo@5.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + + postcss-svgo@6.0.3(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + svgo: 3.3.2 + + postcss-unique-selectors@5.1.1(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + + postcss-unique-selectors@6.0.4(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.3: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@2.8.8: {} + + pretty-quick@3.3.1(prettier@2.8.8): + dependencies: + execa: 4.1.0 + find-up: 4.1.0 + ignore: 5.3.2 + mri: 1.2.0 + picocolors: 1.1.1 + picomatch: 3.0.1 + prettier: 2.8.8 + tslib: 2.8.1 + + process@0.11.10: {} + + proxy-from-env@1.1.0: {} + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.3.1: {} + + qrcode@1.5.4: + dependencies: + dijkstrajs: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + quansync@0.2.7: + optional: true + + queue-microtask@1.2.3: {} + + quick-lru@4.0.1: {} + + quick-lru@5.1.1: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.3 + optional: true + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + read-pkg-up@7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + + read-pkg-up@8.0.0: + dependencies: + find-up: 5.0.0 + read-pkg: 6.0.0 + type-fest: 1.4.0 + + read-pkg@5.2.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + + read-pkg@6.0.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 3.0.3 + parse-json: 5.2.0 + type-fest: 1.4.0 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.1.2: {} + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + redent@4.0.0: + dependencies: + indent-string: 5.0.0 + strip-indent: 4.0.0 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + require-main-filename@2.0.0: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-global@1.0.0: + dependencies: + global-dirs: 0.1.1 + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responsive-storage@2.2.0: {} + + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rimraf@5.0.10: + dependencies: + glob: 10.4.5 + + rollup-plugin-external-globals@0.6.1(rollup@3.29.5): + dependencies: + '@rollup/pluginutils': 4.2.1 + estree-walker: 2.0.2 + is-reference: 1.2.1 + magic-string: 0.25.9 + rollup: 3.29.5 + + rollup-plugin-visualizer@5.14.0(rollup@3.29.5): + dependencies: + open: 8.4.2 + picomatch: 4.0.2 + source-map: 0.7.4 + yargs: 17.7.2 + optionalDependencies: + rollup: 3.29.5 + + rollup@3.29.5: + optionalDependencies: + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.2.1: {} + + sass-loader@13.3.3(sass@1.85.1)(webpack@5.98.0): + dependencies: + neo-async: 2.6.2 + webpack: 5.98.0 + optionalDependencies: + sass: 1.85.1 + + sass@1.85.1: + dependencies: + chokidar: 4.0.3 + immutable: 5.0.3 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 + + schema-utils@4.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + + scule@1.3.0: + optional: true + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + semver@7.7.1: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + set-blocking@2.0.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + slash@3.0.0: {} + + slash@5.1.0: + optional: true + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + sortablejs@1.15.6: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + sourcemap-codec@1.4.8: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-license-ids@3.0.21: {} + + split2@3.2.2: + dependencies: + readable-stream: 3.6.2 + + ssf@0.11.2: + dependencies: + frac: 1.1.2 + + stable@0.1.8: {} + + statuses@1.5.0: {} + + std-env@3.8.0: + optional: true + + string-argv@0.3.2: {} + + string-hash@1.1.3: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-indent@4.0.0: + dependencies: + min-indent: 1.0.1 + + strip-json-comments@3.1.1: {} + + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + optional: true + + style-search@0.1.0: {} + + style-value-types@5.1.2: + dependencies: + hey-listen: 1.0.8 + tslib: 2.4.0 + + stylehacks@5.1.1(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + + stylehacks@6.1.1(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + + stylelint-config-html@1.1.0(postcss-html@1.8.0)(stylelint@15.11.0(typescript@5.0.4)): + dependencies: + postcss-html: 1.8.0 + stylelint: 15.11.0(typescript@5.0.4) + + stylelint-config-recess-order@4.6.0(stylelint@15.11.0(typescript@5.0.4)): + dependencies: + stylelint: 15.11.0(typescript@5.0.4) + stylelint-order: 6.0.4(stylelint@15.11.0(typescript@5.0.4)) + + stylelint-config-recommended-scss@11.0.0(postcss@8.5.3)(stylelint@15.11.0(typescript@5.0.4)): + dependencies: + postcss-scss: 4.0.9(postcss@8.5.3) + stylelint: 15.11.0(typescript@5.0.4) + stylelint-config-recommended: 12.0.0(stylelint@15.11.0(typescript@5.0.4)) + stylelint-scss: 4.7.0(stylelint@15.11.0(typescript@5.0.4)) + optionalDependencies: + postcss: 8.5.3 + + stylelint-config-recommended-scss@12.0.0(postcss@8.5.3)(stylelint@15.11.0(typescript@5.0.4)): + dependencies: + postcss-scss: 4.0.9(postcss@8.5.3) + stylelint: 15.11.0(typescript@5.0.4) + stylelint-config-recommended: 12.0.0(stylelint@15.11.0(typescript@5.0.4)) + stylelint-scss: 5.3.2(stylelint@15.11.0(typescript@5.0.4)) + optionalDependencies: + postcss: 8.5.3 + + stylelint-config-recommended-vue@1.6.0(postcss-html@1.8.0)(stylelint@15.11.0(typescript@5.0.4)): + dependencies: + postcss-html: 1.8.0 + semver: 7.7.1 + stylelint: 15.11.0(typescript@5.0.4) + stylelint-config-html: 1.1.0(postcss-html@1.8.0)(stylelint@15.11.0(typescript@5.0.4)) + stylelint-config-recommended: 12.0.0(stylelint@15.11.0(typescript@5.0.4)) + + stylelint-config-recommended@12.0.0(stylelint@15.11.0(typescript@5.0.4)): + dependencies: + stylelint: 15.11.0(typescript@5.0.4) + + stylelint-config-standard-scss@9.0.0(postcss@8.5.3)(stylelint@15.11.0(typescript@5.0.4)): + dependencies: + stylelint: 15.11.0(typescript@5.0.4) + stylelint-config-recommended-scss: 11.0.0(postcss@8.5.3)(stylelint@15.11.0(typescript@5.0.4)) + stylelint-config-standard: 33.0.0(stylelint@15.11.0(typescript@5.0.4)) + optionalDependencies: + postcss: 8.5.3 + + stylelint-config-standard@33.0.0(stylelint@15.11.0(typescript@5.0.4)): + dependencies: + stylelint: 15.11.0(typescript@5.0.4) + stylelint-config-recommended: 12.0.0(stylelint@15.11.0(typescript@5.0.4)) + + stylelint-order@6.0.4(stylelint@15.11.0(typescript@5.0.4)): + dependencies: + postcss: 8.5.3 + postcss-sorting: 8.0.2(postcss@8.5.3) + stylelint: 15.11.0(typescript@5.0.4) + + stylelint-prettier@3.0.0(prettier@2.8.8)(stylelint@15.11.0(typescript@5.0.4)): + dependencies: + prettier: 2.8.8 + prettier-linter-helpers: 1.0.0 + stylelint: 15.11.0(typescript@5.0.4) + + stylelint-scss@4.7.0(stylelint@15.11.0(typescript@5.0.4)): + dependencies: + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.6 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + stylelint: 15.11.0(typescript@5.0.4) + + stylelint-scss@5.3.2(stylelint@15.11.0(typescript@5.0.4)): + dependencies: + known-css-properties: 0.29.0 + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.6 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + stylelint: 15.11.0(typescript@5.0.4) + + stylelint@15.11.0(typescript@5.0.4): + dependencies: + '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1) + '@csstools/css-tokenizer': 2.4.1 + '@csstools/media-query-list-parser': 2.1.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1) + '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2) + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 8.3.6(typescript@5.0.4) + css-functions-list: 3.2.3 + css-tree: 2.3.1 + debug: 4.4.0 + fast-glob: 3.3.3 + fastest-levenshtein: 1.0.16 + file-entry-cache: 7.0.2 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 5.3.2 + import-lazy: 4.0.0 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.29.0 + mathml-tag-names: 2.1.3 + meow: 10.1.5 + micromatch: 4.0.8 + normalize-path: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-resolve-nested-selector: 0.1.6 + postcss-safe-parser: 6.0.0(postcss@8.5.3) + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + resolve-from: 5.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + style-search: 0.1.0 + supports-hyperlinks: 3.2.0 + svg-tags: 1.0.0 + table: 6.9.0 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + - typescript + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svg-tags@1.0.0: {} + + svgo@2.8.0: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.1.1 + stable: 0.1.8 + + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.1.1 + + table@6.9.0: + dependencies: + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + tailwindcss@3.4.17(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.8.2)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-import: 15.1.0(postcss@8.5.3) + postcss-js: 4.0.1(postcss@8.5.3) + postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.8.2)) + postcss-nested: 6.2.0(postcss@8.5.3) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tapable@2.2.1: {} + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + optional: true + + terser-webpack-plugin@5.3.12(webpack@5.98.0): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 4.3.0 + serialize-javascript: 6.0.2 + terser: 5.39.0 + webpack: 5.98.0 + + terser@5.39.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + text-extensions@1.9.0: {} + + text-table@0.2.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + through2@4.0.2: + dependencies: + readable-stream: 3.6.2 + + through@2.3.8: {} + + tinyexec@0.3.2: + optional: true + + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + optional: true + + tippy.js@6.3.7: + dependencies: + '@popperjs/core': 2.11.8 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + trim-newlines@3.0.1: {} + + trim-newlines@4.1.1: {} + + ts-interface-checker@0.1.13: {} + + ts-node@10.9.2(@types/node@20.5.1)(typescript@5.8.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.5.1 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.8.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tslib@1.14.1: {} + + tslib@2.3.0: {} + + tslib@2.4.0: {} + + tslib@2.8.1: {} + + tsutils@3.21.0(typescript@5.0.4): + dependencies: + tslib: 1.14.1 + typescript: 5.0.4 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.18.1: {} + + type-fest@0.20.2: {} + + type-fest@0.6.0: {} + + type-fest@0.8.1: {} + + type-fest@1.4.0: {} + + typeit@8.8.7: + dependencies: + '@types/web-animations-js': 2.2.16 + + typescript@5.0.4: {} + + typescript@5.8.2: {} + + ufo@1.5.4: + optional: true + + unctx@2.4.1: + dependencies: + acorn: 8.14.0 + estree-walker: 3.0.3 + magic-string: 0.30.17 + unplugin: 2.2.0 + optional: true + + undici-types@6.19.8: {} + + unicorn-magic@0.3.0: + optional: true + + unimport@4.1.2: + dependencies: + acorn: 8.14.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + local-pkg: 1.1.0 + magic-string: 0.30.17 + mlly: 1.7.4 + pathe: 2.0.3 + picomatch: 4.0.2 + pkg-types: 1.3.1 + scule: 1.3.0 + strip-literal: 3.0.0 + tinyglobby: 0.2.12 + unplugin: 2.2.0 + unplugin-utils: 0.2.4 + optional: true + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + unplugin-utils@0.2.4: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.2 + optional: true + + unplugin@2.2.0: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + optional: true + + untyped@1.5.2: + dependencies: + '@babel/core': 7.26.9 + '@babel/standalone': 7.26.9 + '@babel/types': 7.26.9 + citty: 0.1.6 + defu: 6.1.4 + jiti: 2.4.2 + knitwork: 1.2.0 + scule: 1.3.0 + transitivePeerDependencies: + - supports-color + optional: true + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + util@0.10.4: + dependencies: + inherits: 2.0.3 + + utils-merge@1.0.1: {} + + uuid@8.3.2: {} + + v8-compile-cache-lib@3.0.1: {} + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + vite-plugin-cdn-import@0.3.5(rollup@3.29.5): + dependencies: + rollup-plugin-external-globals: 0.6.1(rollup@3.29.5) + transitivePeerDependencies: + - rollup + + vite-plugin-compression@0.5.1(vite@4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0)): + dependencies: + chalk: 4.1.2 + debug: 4.4.0 + fs-extra: 10.1.0 + vite: 4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0) + transitivePeerDependencies: + - supports-color + + vite-plugin-mock@2.9.6(mockjs@1.1.0)(rollup@3.29.5)(vite@4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0)): + dependencies: + '@rollup/plugin-node-resolve': 13.3.0(rollup@3.29.5) + '@types/mockjs': 1.0.10 + chalk: 4.1.2 + chokidar: 3.6.0 + connect: 3.7.0 + debug: 4.4.0 + esbuild: 0.11.3 + fast-glob: 3.3.3 + mockjs: 1.1.0 + path-to-regexp: 6.3.0 + vite: 4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0) + transitivePeerDependencies: + - rollup + - supports-color + + vite-plugin-remove-console@2.2.0: {} + + vite-svg-loader@4.0.0: + dependencies: + '@vue/compiler-sfc': 3.5.13 + svgo: 3.3.2 + + vite@4.5.9(@types/node@20.17.22)(sass@1.85.1)(terser@5.39.0): + dependencies: + esbuild: 0.18.20 + postcss: 8.5.3 + rollup: 3.29.5 + optionalDependencies: + '@types/node': 20.17.22 + fsevents: 2.3.3 + sass: 1.85.1 + terser: 5.39.0 + + vue-demi@0.14.10(vue@3.5.13(typescript@5.0.4)): + dependencies: + vue: 3.5.13(typescript@5.0.4) + + vue-eslint-parser@9.4.3(eslint@8.57.1): + dependencies: + debug: 4.4.0 + eslint: 8.57.1 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + lodash: 4.17.21 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + vue-router@4.5.0(vue@3.5.13(typescript@5.0.4)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.0.4) + + vue-template-compiler@2.7.16: + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + vue-tippy@6.6.0(vue@3.5.13(typescript@5.0.4)): + dependencies: + tippy.js: 6.3.7 + vue: 3.5.13(typescript@5.0.4) + + vue-tsc@1.8.27(typescript@5.0.4): + dependencies: + '@volar/typescript': 1.11.1 + '@vue/language-core': 1.8.27(typescript@5.0.4) + semver: 7.7.1 + typescript: 5.0.4 + + vue-types@5.1.3(vue@3.5.13(typescript@5.0.4)): + dependencies: + is-plain-object: 5.0.0 + optionalDependencies: + vue: 3.5.13(typescript@5.0.4) + + vue@3.5.13(typescript@5.0.4): + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.0.4)) + '@vue/shared': 3.5.13 + optionalDependencies: + typescript: 5.0.4 + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.6.2: + optional: true + + webpack@5.98.0: + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + browserslist: 4.24.4 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.1 + es-module-lexer: 1.6.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.12(webpack@5.98.0) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + which-module@2.0.1: {} + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wmf@1.0.2: {} + + word-wrap@1.2.5: {} + + word@0.3.0: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + xlsx@0.18.5: + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + + xml-name-validator@4.0.0: {} + + y18n@4.0.3: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml@1.10.2: {} + + yaml@2.3.1: {} + + yaml@2.7.0: {} + + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + + yargs-parser@20.2.9: {} + + yargs-parser@21.1.1: {} + + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} + + zrender@5.6.1: + dependencies: + tslib: 2.3.0 diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..f479069 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,9 @@ +module.exports = { + plugins: { + "postcss-import": {}, + "tailwindcss/nesting": {}, + tailwindcss: {}, + autoprefixer: {}, + ...(process.env.NODE_ENV === "production" ? { cssnano: {} } : {}) + } +}; diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bef93d4b01212f57cecb50658e8c9518be13e607 GIT binary patch literal 1270 zcmVPx(ut`KgR9Hu~mu*a2RT#(r=eE7z0C^Jz8!DR##z|jzZ413cjgEl9q1$4Zb4*!4 zXjK@R=~U)K+?GvQvStqBzAS3?L86&PjfvBRDVv}SWNy0Q3kb4JH)snHXnD*f0=Mn$ z3o0k+m;3ym|MR=gIX&lGh6N72)v@-pEvi*6?L;@NDA2N>7h=g4A{MmK2d#^rozi|Cv!*48t1H)C9mNv+tmC;++D_EL^x z@6DML`&inAwjP%aAoDmWjfGk^7AizYYd}|fEhcPA`8fl0Qe(!@*lvqzXzLum3B0NY zKr}HtXI86T`CkF_7H2a9)ykSOTC=xu$!dTs|HMZ)H{F?^!Ji2QB4`JETJPnWqWEm| z$u0Lrdp>6G3mWD9{~5qkO|fon>^OluT0d(XA3lu1&KHrFSAepzM?C5gQJq=K?+*qM zumc9`*a6VA)t^b^m0kGb(yue&&6}%{m8F+TLz)V|00yh$K@g7mD}Ez)3>SJnnhWzh zk8Rr;k(jttk`jC>WC4tIw8)}BbepS}9xTq9G#ii2NIEe1@cSiUC7_Fm)MBFF-h~u3t82qKn z@7hXQnv7?+H-Y20`8^Bx)T~hz$|d;#7%Yyr0c?;HFJE#NeP164wy?2jQzde8@;r15 zXfSD1jo!%~0J+wYY>pHi{wkzQ9>T>RgYPf5r)%+8Rh_R5M>-*$@0JEU0E||9DUoEq zmnaiez3A_<1$}!_5EC1R#+P36(GsZHtl_r?0;nKjZ_2jceH4A?z6c3G6z$$^LqtTR z_cZ*eB&E)vWxve^JUU>o*tY|$Nv=x#=spY%TnrhYzWxQIrrzSKpLUlBy6_KW0gN@y zGGgR&)8ROR`-eJAO#BrxK-0_naeZ`*%sOD@Lb~#ZJb=}yCL-}z^%${Xm+<>HJ3=lV z7k2}8?%XGhfr|GJ${Q5sKcz`bG-#Y?}Xx~7y$8mU}mhK7Mwdfe;TIVyb>k%twUPc zs(^E&;FR%s>CER04+@xw6S^HzZ9QG3RDwUU%Cn4H6O(gRBZR1WsWT z(pkTpFeCuE#FM@5TAH424p^PB*9En*CXnV|1Bj+4zMERj5i$VE1Y;Q>Br%|a#2-y} gnzdo?2K(3i4UB<+FiBYjEC2ui07*qoM6N<$f(X(_s{jB1 literal 0 HcmV?d00001 diff --git a/public/img/10.jpg b/public/img/10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e6994cbe2f54403969156b98f8dde3c05432f9e GIT binary patch literal 6621 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 O)#y-U{Ku=)+5ZCFbt1U{ literal 0 HcmV?d00001 diff --git a/public/img/11.jpg b/public/img/11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23b4ec25c260b3ec7a0cd2db2f08678eaccd0dd7 GIT binary patch literal 7385 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 MWIqGPx# literal 0 HcmV?d00001 diff --git a/public/img/12.jpg b/public/img/12.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ced86d965b92ebb4733c3a7ab9892d20cfccae5 GIT binary patch literal 2159 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 literal 0 HcmV?d00001 diff --git a/public/img/14.jpg b/public/img/14.jpg new file mode 100644 index 0000000000000000000000000000000000000000..208d8c4ea1079a6d01e0fcc23d6f284ae642574a GIT binary patch literal 5894 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 B4!{5a literal 0 HcmV?d00001 diff --git a/public/img/15.jpg b/public/img/15.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60ee2f168f8ee7828f6802ab382134859ee4b8b0 GIT binary patch literal 8270 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 z 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 literal 0 HcmV?d00001 diff --git a/public/img/16.jpg b/public/img/16.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a91dd47b69f5bbf31fd0f64102d27c525bf3255d GIT binary patch literal 7053 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%0AOS!0iXo{0Mq~$AP4{? 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 literal 0 HcmV?d00001 diff --git a/public/img/18.jpg b/public/img/18.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d74c3dd8d9dd618ec34e28e240ea1255123c14db GIT binary patch literal 8448 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 C>lfbu literal 0 HcmV?d00001 diff --git a/public/img/19.jpg b/public/img/19.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6275728550bb555514e03bda763a8a6c46951963 GIT binary patch literal 7787 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 I%=N;50skksE&u=k literal 0 HcmV?d00001 diff --git a/public/img/20.jpg b/public/img/20.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1873bf42ce35138f19f403a243ff8cff80c53efc GIT binary patch literal 9563 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 OjJrpfd&wZr3;zXqgz;Jc literal 0 HcmV?d00001 diff --git a/public/img/21.jpg b/public/img/21.jpg new file mode 100644 index 0000000000000000000000000000000000000000..729e13beefedba8fc90f88728f66f5ede46c3865 GIT binary patch literal 6255 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 YG~EN-ub2&pQ%qHM_F+GhH$GqeAH1)c=l}o! literal 0 HcmV?d00001 diff --git a/public/img/22.jpg b/public/img/22.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa3c07adf61afa403e6b7728f7f2063da786f3c9 GIT binary patch literal 6429 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 z zw>sffSr*;veN?{p%7hC0h<96I!}_=oeYULy`MTtGxzV_y80?w`?;2N;%3|m#l3+H6mxT@lWz!0qjOX$tkupPecD7s9{jmHbc zS;IXUInAEg@#W1o%C6gIsw$H5vrkk<+QT!+8<;RDQ}N~o_p(#!SRXD_RM$awP$vB0 zNSZs%Ck%|q2>#Mk2>Kzd+1!KpC|hj|JpPgMmUX)qe<4XtsEcYGTVSK4F`7ov?P#I`y;gsrvyaX?--@HWz=PME^JIAoMCSR z8A(xPnk`sR-A1&jKN1wAy!rH<(Kbl6q!(M-i{c(c#C4NDRI^exsf;icaO1e85{~Gy z`AI&PWEdn}22s3GS;bA3|AC=Wua-DdB1rAmO6^-dXed)`R1~9Awlp);Qzaw)evTpz&?<)Ar9P60 zqT|2>UI3aH;zi2$<=mo4G^1o=nL3{2GArl|i5&Z~o~dN$t{l&%tG-#FyHe##x_K9c zrz$q;dJsypL;Wj;#2OYvy>)x;JQyz=Zlzs4hD9QIn4oR6t! z6Vlq3e>>7%)R+)bWI;;FcZW_#ur_*pp|O-&RE6;qcngA(p$*SjJM2pXkn(bcL4PoA zm-+J^MJH3A?JXsw47g`yu9Jj>xFHD%?Twek zrz>*(J5|UK?C54VF97&Cj9dUjE&vyRMcXtBT;=)wd<0xx2&f(^lA{vf>yFEmD=eKr z!2&(Wkqw=~hn`Yk!`>Bg_E`&6&>cVTF3pLetcmLskGsx%vXN7SAHL;$xSALzl8(7G z9y3Z~TiP~oSDLC27V8dYgpi9r7wp-&vrX&Ui3#BXX34rH$ZTIf>}=pd@d83278`)j zL3UijBffrwtC-BV`^$f;mbgWM05BlC0o9*p$>lYMsw%QqK4BKlmfofRI$b6FWf6RfTs)h zb6%>;Cl!$Ra@l_t00e+IE^9nGG;!)nVHefv_w1{S`jwj|Gm?@=w{XUu@sv&k4$ zvpE7XU?z?QFs;Nndk#&)!B@>{qhw;XgwS@9h5;d1iJp+C`hswCo0f2JJ#(J>>wb|P zv|Qb$@TZ_-l1~1GH#Cd8(X3)8ugxR&)$DY(I?8jgY>lD#Z;LsLeAG)NG(1=sK`Kjq zvx~2VANc35s+E8_9>Fs%Ha3isF`r(Nf3rz! z)pwh5wk}-?mZ$Q#wc#!oLY*hmj)=U6fLEGWssYlC?{LCL6nLjQ7 znLpMte@x(7MohkT{Fz8gN6sqCmE8*fmBXQUFo%2n!@z4|V`e!@YZ=6xKeU~UNmB~B zsQ^tOto*NJ+Ra0Hh68MjXAbioryO4|ak7yjLevIbKoJNOQ8cEkyLG4w_iOiz8G{!b4%5dM~>|Sjm z%L56O`3;Mbp=nklAX)o1$iYAbk@rQ((Pvbk&E;pOTVSt#ecbm!1sQ8?{{h~jb`V+? zuq~&Uqp}k;TD(IUoBKG-X7ZbBi!k~U{<;|gCW}mnpvBRk%C1inCw0%#diz)(j zmf1#s@?}XmW3pD`@2xrT#>tq>yKUo394Z1kq=vZ+x4vqD3p>8WVveY#=eE|G?UY_` z!GD?qpM8k!EDthyHQ9UD-V1M#A_MBI?&>3Q^Vy+9gW-bF@0e(G_x`QKT!C<^GQ^T;tFBAY2e%m-22mFSsbGYYVSzX45AX3&hvcP&R9 zY_Ko8-JYS87`KJ-bq1?TE|oSSs1{zAEvP>wO#Kv8hl zgc$8bb9{_e($}I~`o1`CUo(_=Tvc<%j}GVc?el4L+EOwwx*B!O|5N3nX-&Q?r@)ak z0GqRqqO2&=qSJnB4luc~J}kUp=>}fcApB&RP6oGvXB}_TilPNHYq~{j4aR3pb2MME z5%|P~i>c>+wjbu(8cql%{9p*%8aY#WxnB2ETqV)-&Aas`mcC{_6S`Ip+1vLNi1{=G z7)muo#tdsobgoA|lq#9$_e23Nz>4Ihj+s|02ar53kzlUQR}xlL(0T$_G$`81O=0rtbh)vz&WbEgRA2*T51 z&2%~F^<}TC(WE_6mC8+rv`)sm3O&CG$5dP0kDTxXb}YzUgF zl4$yfolyrT9^KL2f`%#w2KBbv6nc|Qkmn{TS-G3`*D{PokFaQbHuc28B(BGJ>#S@v=#|k#J8qJ@;s*=VCvOl+2uGgH6 zI)O%8awcp=Gk4hyCJ=BFiDimAwrPg%MK*XnpPe)$h>Q@{Z_dC97}p`0Axcp_FPqtl zrxBzdiCMY`n>s&!_ud7Gw2Jn;Una4|0>>Wjx5)ot%Z*tE84fD{(ge{|d(u0e!1JqnJ{70nKlt+4#p9I5g zO5E%YV6c51*cs;xkHzg_zZ7upHm6%R@tVE=$xEHC$piIodegOm8v$ptW4rhArcUIH zckE7NweS5}F0c#;Vt*O%1G=)>ify0orP0@p=scBCF_jNNkiNV>$ek|5`^me?Os|4o z^uRy5eit2m((bTxbg2DVuZsT6r~T|DS>PLjSNq|sXLrtCZ8NRj3Vf4}qhGvw|Kio6 z+h_mLv#iFzamS7yuPQ~*bj`8uIkcP$O6O$CNkg8<-=N>sbM&kyo+R8{=sb%l)2k}HpKe5)RP-kZ09%T&>RC4(y42Bzj)r6q^yD3O`&E%UUSzCn-=>X p(+*W_C@ERf($dni7y6cIsuh0qSa)MW$3K5cUwXAORN-RrzW~HX7svnr literal 0 HcmV?d00001 diff --git a/public/img/23.jpg b/public/img/23.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f17d23f268a100b0b00f595f435326bde2254d0 GIT binary patch literal 4337 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 R=!Z(~k828HfH%XJ{{gN(`f>mO literal 0 HcmV?d00001 diff --git a/public/img/24.jpg b/public/img/24.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9cdd3b178f434409affd8164343b6f931742125 GIT binary patch literal 6700 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 literal 0 HcmV?d00001 diff --git a/public/img/25.jpg b/public/img/25.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8bbc4388739bd8defe050250df8cf0a759ada1d7 GIT binary patch literal 11786 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 C&oPDo literal 0 HcmV?d00001 diff --git a/public/img/26.jpg b/public/img/26.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0fbca818fd380bf650034640d7c616ae8166fb7c GIT binary patch literal 7531 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 F{SP(c3!eZ0 literal 0 HcmV?d00001 diff --git a/public/img/28.jpg b/public/img/28.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95a2e25278804e7319d6f34bcd00bc6447e8cc4a GIT binary patch literal 3959 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 literal 0 HcmV?d00001 diff --git a/public/img/29.jpg b/public/img/29.jpg new file mode 100644 index 0000000000000000000000000000000000000000..42fbe799ac9df784f10684800cc4cc5085be7fcc GIT binary patch literal 13260 zcmb8VWmFx_(gwOW8`q7yJHg%EgS)%CJA~j)a3{FCYjAgW4^D7RfLz}9oU`tCf8JVa zrfc<7*Ywotu6n9^{;vMr18hrpSz7=AGBR`kSO5S34L}2e0KgCKp9>EN^>3^3!Q=mz zH~8Rb{wo9V!J|X`zw*}MkpIemDEybCKkonN`CkhI0DOZ1Kz{Tvv$8M)6aK>kKQx3T z!T_*7`g=bvK;D04SeTiCdH>P=_b&hdk@p|%qaPxm|HJu0VczTTUJuV(<2vKjHr!L zn|+q?P0Rg#I2m7naZZRbq0@pN`yzr-_s}Ru^b!PTRQ@d^y@F$59SxtY&a9_di&sH#!I3E)&q=~*vn(6tH!Wgm zm2*~+U*Lv4$p}A+(cKjWtoH zUxUk`lFUL>MLSgpFOnP*C5SgJsXAqYPf605!u;;)GJv37jb0B0Me7&ZIxhkfmO(mh z3N(g>kf!T)Gi^dzpfYev(lp82^JtoilNvRPuA^uS!oagEr{R^iVEugXgEK~F$OcEG zDCjC|nV_k+f3Z2m#3~$tqugYSN0DRSl|=rrSn0t42p}X71cLnEdj4lqL!zRglajGukh4Nj zu!*pXfknkJDL)o4?8lM^LP2y;jF@PzQem9j2ISrD2$j008BhPZ{Lv{D<1{SzeHWNy z|5|{sevzpIBPJ-PS+#_RU9PFCE;Z#>!fRg&yuO zH#mXm`Yg}E`7L7;_@7i%>AthST8FuW+$M*9^=X%+WZROZ;zjUs4L&*miMZ`av7Vz-)$b;eo4B|Qu8FroTkD_ zREL^Y_GrG zReQ(>TFc*evaEkWeIn=M=pax-ebmcmt?1yGaq~%B9-N&iQ5-!F{zRnBc1ErrsMz%T z%e20Dm2ZA!nb(%)C7=B4@UsIhr*u3Ng@ok6 zUjR3;+kxc^pS?HQ6@7xq#_7%NsOayKv&U}pPNFj-JrY%oHv;b)*H3TdL_;Myd|kNT zP8=;5u${sX?Y_k3b{uXLj>A+0-%iCVnoTy)GVl!Bf1!LCOvs)BK=1J%WkH-tKKA@< zOfD468Z1ma;H&Y%<`FgkJJUqAW}ED*yw0{TQjvdFoB|(o2vGN%0~ zJTv*1)bn4!ZLLlcMoFnn%CwR382l$46;6r{KE1~t@Sh9#BYddgl6r-r$<79 zAiQa*dzAgbEk<2-U%XvFQmxu+B&n|7!!+KpDk~?cH45!JLnG@1mde!T09tWK*4MhTNDdeO z_C0&q+J|G_;S_7!*rGJHKsHGutAeD8Z-J6>};s~6Zv0#cmh%r1n zV-ZpuXcEK6n};HQ!+xTjf_cF5;!|DagT%Jfl9=>Gg7rh|h8dT) zqD;@hxTV&fw?x}BU#%lHi6uH0N-c;ROo(jHjWgU>@xf5HX(f#!_;L$t`{0z&6Nr?bLouUjY6|6_Nu0|@WXCX&ZEfxp+Vf-f$}DQa z_BljjZzb@8?rRX-Fw3f9ut?2ffM~@s4tTlS(wpJq*h*Amkf>2B9E%#ZHumyRL&kk{ zgMR^C3SRE^OM&KTHLSu@SbFz=0SKgH9>X9uQ6vm#G5bXI<$4Y#2Go2DbNCGnUKbYs|1)^+I+=OvK3Y_@{@L_>cFK|MUJ25c$s>{!2gzR8kNajYWin84{h0_1`H# z{4<4nb034Li(xOygh!Uh)kj@}MRt0&dHuwbXq?|$9zN8;ef)_RrZlOezRw1n{)y8U zcb4nh*P5M8-i=$)g$sRq{;d2&lRX7dxL*XdUwp4cmr}rs4r&5Y;hKf z6na+4@P!b)qk^oBH(M<-e0)@GT?q8%q!ScH3+R0OeC+D_nBM=Gn->fKf*>G4P%seC zA7A}JAErkoWdWgyD3cjGgIPttCP1Q_xa8OOsmzhHiJ7_vsW$ZQUElmSKtc;a3{0BO z$4n+*AmFZT0oS#;pVYb3ImRPH-f?j?oYv`Cb^GhZkO-j6HSXN@$3J^saLOeCOtg`4 zyQ*T>Logh*XzEKi!xts*D;bY0spxQJ!Vs@ioU08_Fmnbj6N^Z{9X~!R(Kvg&no*O z53mLH(212bUItfVIoP5&xxwpMR=CA1m`6ARN11eFo${gggiwoQ`Y~vx=Hd(dS+nbC zx-)tgSt(6T;BoVnZ>XIW_IT3WlNB6z=ZxEs9Dml`0wF~bGYL$X@6YO`IZCue!(?Y7 zc9*}(XgeccbBXS0fE^O+2CJG5@$z7=46r^4cgD^l+oQ)hoWLz*mg#^N2&H}{yx&b+ zVV)HDBvEJe#;zDb?k3eWXW}A9{(TL)&8a{7`mCM}KR*>nccgZfxjvW-VX8ycti|Z- zt}w$wJ8zXUypGSvaN?IrDV0dcvjC2yD>$0NL+esapA|BWF^Ae%NAft!t=Ci$mI;)LX<&iO+nh z_FHKT^L|6$Jz{1o0EU4AthY2_6;fBsE-NSf7s`v?<`VYaQt5l&sdCcopHIw9EUeu< zwW_B|E38(y_Sml%5_v%dZg1FK^bUI4)|V3l$hQS9BgUA?@Zh>#{PzhgsSw3aRf1ju z914RA{A8PR{qI4g+ZoKYH0;P#?)Dm5ese-3`d-);+9eHUjTHD(*FLWRh;ff#Rx@Y z@T%hb7RpV#ppfE4J(CaVY!#hX(j$r@LCRl1nc!G8XK3v0`69g!lDyh>`5&QJ6g&nS?&a0pp$pzyWm=lYGxoe| zHjb5uxqtrC|CQ2o@%-`PR(^*xlY91Z@b6<63hxM6E3U)^aNlDf9|I}!2q3DonoG3$xsUg1}BX=?%OCfjW(H=q`> z6Xw7cQIw_Iz!X=R*lQ@?&)34c&~TDW-YCYltzBpUsk0NjNH1`))&pmJzOEYe7aX5dFyC zpW=5K@f#5xuJat~{Za|;^2CnBGpMjW)k+~x3Z*kyKtKt740lw+{zGaA^R^W{zj1mRSS9QpnkzEP#J1Dx%Nkm;x%JWAYtLEG(1G;gOGU^ruRXHb5;FE?u; zWXAg_RR5iKN=1H2aSndNDP$uNQXNknSByzrYo{&&7FV8%E(cQboV!juwIyf7#nU`ysXD=eZEv2w*1B`pYUqe5=s+-OF50rm4KWOQ-K>=aTJ)FgbmFAtg> zp@%ja-8uUubQPpl4M`HvoBinx1TRbv7fJ3@&Otl{D=pq9nqG0TIM>C$#HS$K(>T`MIJ8{q>7*6m_VtT8tMw zAP!NA7n;$|WK99oZv`af`?qQ-wV47+$PFLymkRt5Z~sI81sp)YNB9*{Hg^7+@DX(P z=B{tR|4T-NNYM*LU%~DOSQByKEJH^7sE&3xp*5+QA_{#Z1L@7U97w65%V#Ctobqq| zi?(`(-eHHjr6{Pn4V4b|?J{^MuX4r#zG>q6K9Q`E8ypSpZSZlNw;><0db$QeL*5}kFzGgYl70URVEaM${!|79BC(FY zv;-yYqVq!SU)kx+5#B_M93KqsF|NSbc8u2FJP^w6dAAsoeIs@{*m#*lZm|Apvf2_v z92@yLrv0;!zXBt^QQhaUvA+QG75RnU2c`svymRYx`+i6ZklPh&W%E`m51i>hd9Q*b zixG}1&D0>xV#exvXN26nmL-tlB*ajuf6_F7bIy&)vWZrS;y6|Kiy*ql^9#yg2= z&~SvsvdS*<>JP-l%NW?efCFdsLY*H+#Ys4nM7-IomxtS9=-;K7R3c>bAlmhMR3hrH z(j#E8m@r+s$kI;2#W*a~j?)E1XUFW4OF(Rlh;3UIKvH6k^C7U=<9*BWAqA5{D%FwPz7(hyXXU%{MJhY~yS1I#eD$G6uy`_=Y*L#W&oL)Oa% zH%x}m)LGkT4RM#{Iz291x?Ud8WRTqJSMt(i?YB=>QQucd!rfA6U=BRbsOQ99#&MJe z2OONos2wS#{nR+Jh~vA9@U-vPv!+CFhN1d-M@&{f)9#Ju^ovg0tBr|Y)~*_cIGu6a zqU=!)a8ZlSD67O>zerc2py|@`gWYUgit0{6`ORV7B|#x zHW%CuLLe;%)AFnj6it)J=fEY}U6%MC#S z{OBzTO2}%zMq0_2UFv{!;%eU|XwPDZ4I~7jany>zU=Pe;)<&cy0mS#BNFe9%aHxNBO@pC;OPFj0qid z9=PK|To!w;!i-mM#bS-E{OoBYK{!99!hIu#A73Z*>mM8#8}usOQec^P)|rk9l3Ube z)*0aupi~JRTJ?Hye+au?nyRrO!a|sBvQx$*!zkgi{Ej#n!8Iw;DcC_K!M8arF9x+h zddAd~X<<%O=rQ6zm;^!gL0-M5r|Gk22GX595$)KAfCW)8UX= z@bP#4dVYRoZBF+iXPx%BaO4y8*e)sg2KV=ePhI(4M_}7#nx)Al*8Kj-*)CS!90aP7 z$#Go9b@FV2%12RC_-S?eOiWij3&%$DRA;X=<%aG}lakDX?0&gu%$Fw?%$?_HuyhS` z@9SEKT)7?57@NiD*cO5mPo!tH<+F(n2^IIH*_Go@F(1~pkzx3+y@kPx`^r-5Dvk(Q zn}|Ww50i(#2gwUk>LhebpDE?!ShkIJO*x&rWW6zU+C`yE`TK$0Pn;4-+z7DkXV`Mw ztuzHKf!9ob%sa1RI6f^*Ot^)OOq?S!32WnJLqAtks`SwMb3M_{*Uvq$&0!H3LYnsa zufL6J@Cp%3(fztUgXvIUVTpf*E#!51n=D5bJHtXYi&TNinuaw{hu0Dd%}RHYB92H< z2x&em&Zg(}`+mS&=pR6h_%mpnVUUON(3W@%=W5-bIfq=UwoIY9RVZBs_m3QTNz*<^ z=QjUyB6^rV*IM zny-*0tnz2RaoGZ$u@5bzUz+UGC~PnajZx*~V>e4@#~+ovZ9E*AgeYtbgvdmLyN?Hp z({21ouC(5%VIGJZ`Bf+hZ4rOKhRL^$?moNo-#i+Yef1*-@`_3 zRV%+w@FXw3m1~)#bhVmQK1>Q1EpHVX|7Xy~PmPzU=T(0_r$>2VyhmAy096=W%~aK| zXpAR`@eLgKtKv=U#?&R5^t({Oerp0k#!6~|x(o5<*o9&5x68NwiyH(B7KnDy6XTgN zn4R*D^7zWIClFke=_R0c+y2IFNVG(tIbWl2Uf=qnqgdK(xM zf3Cz~Pe*Xjw^<0vOrhs?$3()m-7}xkL~Y4;i8ItXgRJ1CT1M6~t#3efPj6d3jBGwP z`ds9W)!~mjn&rB0mt?`6L&)4WNF9OdOX?@f`JF1?TsbAd%QmveVpT<5`H}=r&q4m$ z_WP@s8_1WGeZ0s-7~XjF77eoxVF+(*l)eK;^(B1FTt?Dq4!74%tqT}WL|W+FMS8US zr6cg&z2unK30=ayQCUPjMOiqJCtIG}ggaOc-$o!X#i1p1#yVO_L#Lt2dkJ~+m?N5 z08#S5)W(Jz6OucWJq;pvBTO$IXYqOgd(ekS%LHEeC2=qJ4l3h|CTc+&*)oUS8YBL}UW_85@wSH3ux#p;mhhT=R5ll3!0 zLMMlem(hdh9S%_Kf$DJ$_zSn`8JgfsPOD=j2j3g0r%S(67JJY8! z9A`=o8*&hNX^bnvX?%=0e^O~#6yngBO(~vYA_tsm&F42}aic2MLT|bXb>x@lULP8f z=&Np+|JEKsAG7&CCz`+yFb@6~jptwg3&a1ZJ%Y9P@Z0e6Ve99@1c)%;hi8@I_1vi@fL0oB~d`NXG#( zYT^8as24SCgUF_i2m7~9;%waY`q*=%C!F}C4ISZ^Zfm}|Q*^ggAptn6r*TK9HR zw7qK_y)|A+yQ}jgW+|~a!z`@gf^lIfp#!)C{Ae{qxMsxv8UXk&{cD4NtDpbLM!+BG zNd9&GzXtfH@(EV-*rXuT^T7PI8a?;yAa0V)I$)P}Dri8>j-Qs=VQ00LgwXez9TL6Y zJL>rb`ibFWt7MxV0r_nH9A9uv8c)&tM?(HPU=U70&XpM-<~t< z?@w>v2)d#FsZHNXOgkK^TKVW)CnPk2-LpqBT0o%o-}E5A(DZ>P7f(bPEuzgP^WQ1H zO!2)=0!*e>iBPM|(Z%IRKP(O^R7KJB1d#xBBlN#5-`_oe(7mTYfMxoK~fud#H1Y|()$DrOpt%Fq;$9=zvgrvvHdfpv>7)HohG=nwR@$549s0%E+ z#gliA)?W3(w_lhH&;CS;h+faQ<@_|y>s(otI1Yg-OQyi>g6}CD;iefn7F{8w zYOdI;pQ-^TiOYv5Rv?#=)~SnbBor5x>Uk%o-a3Dq_ z+Rp819|qFIdC zgF98}4&2jQBN!Ub$5p4MyHwhPaTMFrL43mqdVM=5y*Cgd^_5IB);ZAI0?GnO>PzUh6ZF9sZN7|g zwwja$f49!xCIlCsB)T^jTO^}(Y@8k#fr8AC5SMu}KU^)1wiuQCb#D)_T;N4yP6BGQ za1bc@1ndunxdXEp3UdobR=84&OLFWM9M7Q=&06+}wjEc<)T1F+X$@R3qKY+ET%%f_ zB7?-y5Wg^T54Zu*#=!EUJZz0M=X_!j7R8{@0%sF3l2qJ{E*i!4h~V zs!2G(NZ5KsIkSI^lp-qvJ-crMu0!$;y%0*@wgJgcEWc{Q(Rh69q#3KspRZs&MQrMp z9H*sXS(Ot;^0 zV5mt;^3TzKr9@FkwPXlw8jn%))%1-X-fA9zV1c=*=w+AKe>@2kANm(bs_kWwP%KH{sIE&y{X^#x|nsvv)~Y= zIgkU>+=X)XijG2n06w0-069rpqnP9P7NuBeO7H=}jS5-+uw$1e$!xRCb(5dP0i0?f zz(5ZZA>U);`oIvH;?rj`n!qm|LtVYg;7S!Se}88-EjzHaSX`XnzOs3%(}}>#u-%BH zwiJFEJR@BnPvzry)|^$@UjRyBqH-o@6EYqhDaW`!F8Sq*xKu#>Cz@Z$7^E}OH^X*e z!Ek*B*Ls6^i^9JHZkD{zI#LcTzw-@b)3ZZq$#C6O9noYjp86d?<2R|H+AHkDD7uk3 zpyltN^l0VJ!!E_MMIIx4@uRBt`}W36&E5#W%sS9gcZ%obj;lZ5QrLkj-;2jtGlt_i zp3(aYnC!~0?7jlF>l4zj+uZt@%UU$+hoH9-d<%NSWBhYqD5rH1Y!@ov`*aSUwkZ{6 zjrQx0sfJ5f%vvs22vSA=Z$Z{8`v@*D+e0c-$}K6ewtT>yl=J(`NavCOiK?$qwz!J{ zoa8|90gBo9CGva6Q=E+({)}H8^J!s?VQ8;LipFocz#$Hj60Da+(CM{( zWST}LW6XXL!V!j`ieq>6JBs5&L!Kd|Eq#qA_4ES;pNAlc-|tda_%jEJVJ(TS7%;D` zDxpA8I}Vc&NT9(ve&_cdZggWud=f&5`S9#`*8B4Zjk;I@$}7j)gnhqj*3N5NP;D~F z=>mjsAUTl$^k-d9%LEZ)WeuK!RRvAX4%iweJG(>db9lnUaY8ueF{zxxcY$~jxc<2W zPLc_5&5nuta&`9KC=)&qyQ8d_uqSW**zI5+sqfAPSRZ4pG$E~E5tV$TxE;taJO69r z$psUFg)tm-m;C&&3cl`q-BU6vsVGGu=&@_!FZc;#?JdO93%9&)+`nfY`@{dsChAv5 z`E5Ax+xal5qfGk*q5bzN;M6E}Y{pC9kdnAK5%JEjET}XEp%z=uI8vm6sQlGfFZY=w z^Tlu&)ss18wqrgyS5Hzzl=0E&PVJ8o8!_yhZ4Hx0?wx{5rdG7>rST?a(kKcs5&uzG zLii`2&u_acq}|n~2fY%j#u(5^3Y@-N;eIi{d>HX0@i-p|7h>}AxLx=b?!Jiw7+kxTaT3gfbuo4y zO(Os|SegD$(>Of%ntWHMfq8yx67x*>6G5pkOk>v0jq>mSBu#!r9Bv)<*{i_0bra4Q z;h`eh=p?DFMuNAmjX zH{|BsyBn6gJTh$MVOFgIt20HsbQc=RRqF7!sus2|UO#``hapI;>V7`BX+9E(2-}UR zHVmrL^RG9t>kuhY(7)SIkzy%0ov$EK5e|zNUM&jrhi-a&{BW>EX%&;;p^U;!@4tBc zHj!Pc>*t3F5Bc)gw>`!<2(=O&3kSh-trX91-A9Arc}wy1YLdkwEg`|=^6M!uDR3*c z>(4Z=hya{Wa0_dp!_Q+!sM)(Je;iB~f^I{c`y?GrC`f;y>@A7Fab6rKOQY$^LMlcZdJ) zQ4(F3YFmS@14!cqG3;DKcaeNjF5w+!*R0T08`YZ_`>Mis*H)aTBTq@l2N?`kC9TUdAUJ)AzWzS7SxA{qZ9P3t=K2%4!E|YPpYamGe@cx3sKhMQg zoqZ4^H!%91ZQtHcOioQ%<66zrhoLqda1OrTYBS(fw@ml)u^$J|L*K>y|sg7V_Ti%SP%Qi^z&Pw)C?v49$ ziC!mENahoJ!EUM#vXuO@RXPp7uUr~6b=%=gNht8i1KNg%}B*dPGpN|n}Qw^*+Xbqq>A50{=hE0)sIh*z+7Ee zWa6Di)ED&+HyNqL%gXCulGhmu{xmtm@Gs?_U|QOEM&!0oPF4KXIxmKG6FG6baFEVu zSG;Rgtv+2Y%jZO(41}VAbA)=rPYk(_ZTUuj}Xf7tmJO8zQ;G)>Ru~rTZmDSUi^YFQDqIuY!i+D!zt= zP7SUA^=cbG+!BlHdv;EXWKydXBf3e1h>t<;>rIyT?Ci#uz3>^ZB{jhxmQy+u#oq^? zHPz>OT90Y^_7P6nd(8a8sneivk-ACcG>xR;*VdC_RzwgWX9WZ;XjfHaJK}SUCo82n zE{3o_R|2K)mUXd7u0B7Td!O~qoyTw!Dr*lT@M2JZzGFUX{FYY3wH89>L_>@+_X#kp)i;$dH)pZGz^)wT#Xj{bV!I>`fmf_pzGp;Pk zK=AHmT>uOB3_`=*P;V0F*M&J(=j4@>5%6pTRSQdRp;Tof&9p`o6&SIsElHBbNx5kk z%X|D20Tu9v-bgm8jRg5D_cA>tnH>|+^JtxT2paMqr(yP5T31&fi7;K%B5|zmXwYnC z7txmwkMiRuC#8X@f%CdW5$y8iu2pC;9Eaabi~cOEFiJp|3C*{V(!&)6m1c$_HOKNG z%CcbitIZLWg;c5Z>~vZ{GUiHz398x>fj^5eNHns;HLg5lPDo1u%4j|}C%w?DQZ6aR zmr|zW-msL1EZIO|69bM8jQ`{=;hysPnOf$7e|O}Y?SRkm7=MPe6D-t) zqJejRE&)sMn3vN{B-vay$BF?9og}rVV>jEm3mFd+!rF_oR?)75WB1FTRf05{4X!j} zn4szpHXV5~aTN9u%mc~h>MvT9Cr~Q>S8?^z)g1^N2v?}>+!nil&(x3w zxWAh3>Y>Oi+&NKgG=olOxIccuA@#~ScpD~L6P-P_6IX-Rz?1ql4Tq~nhjuZdxIt0j zEDI&Rn6}(d9*NLHB?}1dsEF$tyUY4&8W$RJZL~ZKqhIu{b)tS2Tuq#k0+oQ`82Vovp)^nRuh_wW7~=Il^&R(ueb58bV2u zeste>*O=6VpZw%Hj;)ejn5U|TzQ@|kzaA3J;7CPm7x{NzkjT-5ri^MpC*Xb0Sgcf3 e!|&ddHG%`JwXb8MCIyk}CJW=$dN);n*Zv=Xp6_%3 literal 0 HcmV?d00001 diff --git a/public/img/30.jpg b/public/img/30.jpg new file mode 100644 index 0000000000000000000000000000000000000000..872dd182e9cbbf604838f2f6b533998f870062e8 GIT binary patch literal 9257 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�nBT#`~) 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 DPlzZ; literal 0 HcmV?d00001 diff --git a/public/img/32.jpg b/public/img/32.jpg new file mode 100644 index 0000000000000000000000000000000000000000..29eea4f60f45597bec570d35c3db045611c37b1b GIT binary patch literal 3828 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 literal 0 HcmV?d00001 diff --git a/public/img/5.jpg b/public/img/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e77e71051c23c27c7d6890ee924c0ea0c8ad5a69 GIT binary patch literal 11065 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 Zh#o!QO2cPio<4*xgCN-}kNo%5{{`ilB}4!K literal 0 HcmV?d00001 diff --git a/public/img/6.jpg b/public/img/6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9270be0d0b7772e1e029f7150f6137fccca0147f GIT binary patch literal 9150 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

_87SDh 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 I%=N;50skksE&u=k literal 0 HcmV?d00001 diff --git a/public/img/8.jpg b/public/img/8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a7b57667f3d6d0870eed5449d6f6e7c35b2f667 GIT binary patch literal 9703 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 A#{d8T literal 0 HcmV?d00001 diff --git a/public/img/9.jpg b/public/img/9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1fb56d84fb88dbc6721998e46836b775c8bfe740 GIT binary patch literal 8404 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 \ No newline at end of file diff --git a/public/serverConfig.json b/public/serverConfig.json new file mode 100644 index 0000000..4aaef6f --- /dev/null +++ b/public/serverConfig.json @@ -0,0 +1,22 @@ +{ + "Version": "4.4.0", + "Title": "Agileboot", + "FixedHeader": true, + "HiddenSideBar": false, + "MultiTagsCache": false, + "KeepAlive": true, + "Layout": "vertical", + "Theme": "default", + "DarkMode": false, + "Grey": false, + "Weak": false, + "HideTabs": false, + "SidebarStatus": true, + "EpThemeColor": "#409EFF", + "ShowLogo": true, + "ShowModel": "smart", + "MenuArrowIconNoTransition": true, + "CachingAsyncRoutes": false, + "TooltipEffect": "light", + "ResponsiveStorageNameSpace": "responsive-" +} diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..77c3cf4 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,25 @@ + + + diff --git a/src/api/common/login.ts b/src/api/common/login.ts new file mode 100644 index 0000000..e5748eb --- /dev/null +++ b/src/api/common/login.ts @@ -0,0 +1,108 @@ +import { http } from "@/utils/http"; + +export type CaptchaDTO = { + /** 验证码的base64图片 */ + captchaCodeImg: string; + /** 验证码对应的缓存key */ + captchaCodeKey: string; +}; + +export type ConfigDTO = { + /** 验证码开关 */ + isCaptchaOn: boolean; + /** 系统字典配置(下拉选项之类的) */ + dictionary: Map>; +}; + +export type LoginByPasswordDTO = { + /** 用户名 */ + username: string; + /** 密码 */ + password: string; + /** 验证码 */ + captchaCode: string; + /** 验证码对应的缓存key */ + captchaCodeKey: string; +}; + +/** + * 后端token实现 + */ +export type TokenDTO = { + /** token */ + token: string; + /** 当前登录的用户 */ + currentUser: CurrentLoginUserDTO; +}; + +export type CurrentLoginUserDTO = { + userInfo: CurrentUserInfoDTO; + roleKey: string; + permissions: Set; +}; + +/** + * 当前User + */ +export interface CurrentUserInfoDTO { + avatar?: string; + createTime?: Date; + creatorId?: number; + creatorName?: string; + deptId?: number; + deptName?: string; + email?: string; + loginDate?: Date; + loginIp?: string; + nickName?: string; + phoneNumber?: string; + postId?: number; + postName?: string; + remark?: string; + roleId?: number; + roleName?: string; + sex?: number; + status?: number; + updaterId?: number; + updaterName?: string; + updateTime?: Date; + userId?: number; + username?: string; + userType?: number; +} + +export type DictionaryData = { + label: string; + value: number; + cssTag: string; +}; + +/** 获取系统配置接口 */ +export const getConfig = () => { + return http.request>("get", "/getConfig"); +}; + +/** 验证码接口 */ +export const getCaptchaCode = () => { + return http.request>("get", "/captchaImage"); +}; + +/** 登录接口 */ +export const loginByPassword = (data: LoginByPasswordDTO) => { + return http.request>("post", "/login", { data }); +}; + +/** 获取当前登录用户接口 */ +export const getLoginUserInfo = () => { + return http.request>("get", "/getLoginUserInfo"); +}; + +type Result = { + success: boolean; + data: Array; +}; + +/** 获取动态菜单 */ +export const getAsyncRoutes = () => { + return http.request("get", "/getRouters"); +}; diff --git a/src/api/shop/goods.ts b/src/api/shop/goods.ts new file mode 100644 index 0000000..7461b52 --- /dev/null +++ b/src/api/shop/goods.ts @@ -0,0 +1,82 @@ +import { http } from "@/utils/http"; + +export interface GoodsQuery extends BasePageQuery { + goodsName?: string; + categoryId?: number; + status?: number; + goodsId?: number; +} + +/** 商品DTO */ +export interface GoodsDTO { + goodsId?: number; + goodsName?: string; + categoryId?: number; + price?: number; + stock?: number; + status?: number; + coverImg?: string; + goodsDetail?: string; + creatorId?: number; + createTime?: Date; + updaterId?: number; + updateTime?: Date; + remark?: string; + deleted?: number; +} + +/** 商品请求参数 */ +export interface GoodsRequest { + goodsName: string; + categoryId: number; + price: number; + stock: number; + status: number; + coverImg?: string; + goodsDetail: string; + remark?: string; +} + +/** 获取商品列表 */ +export const getGoodsListApi = (params?: GoodsQuery) => { + return http.request>>("get", "/shop/goods/list", { + params + }); +}; + +/** 新增商品 */ +export const addGoodsApi = (data: GoodsRequest) => { + return http.request>("post", "/shop/goods", { + data + }); +}; + +/** 编辑商品 */ +export const updateGoodsApi = (goodsId: number, data: GoodsRequest) => { + return http.request>("put", `/shop/goods/${goodsId}`, { + data + }); +}; + +/** 删除商品 */ +export const deleteGoodsApi = (goodsId: number) => { + return http.request>("delete", `/shop/goods/${goodsId}`); +}; + +/** 修改商品状态 */ +export const updateGoodsStatusApi = (goodsId: number, status: number) => { + return http.request>( + "put", + `/shop/goods/${goodsId}/status`, + { + data: { status } + } + ); +}; + +/** 批量导出商品 */ +export const exportGoodsExcelApi = (params: GoodsQuery, fileName: string) => { + return http.download("/shop/goods/excel", fileName, { + params + }); +}; \ No newline at end of file diff --git a/src/api/system/config.ts b/src/api/system/config.ts new file mode 100644 index 0000000..f21e0da --- /dev/null +++ b/src/api/system/config.ts @@ -0,0 +1,76 @@ +import { http } from "@/utils/http"; + +export interface ConfigQuery extends BasePageQuery { + /** + * 配置key + */ + configKey?: string; + /** + * 配置名称 + */ + configName?: string; + /** + * 是否允许更改配置 + */ + isAllowChange?: string; +} + +/** + * ConfigDTO, 配置信息 + */ +export interface ConfigDTO { + configId?: string; + configKey?: string; + configName?: string; + configOptions?: string[]; + configValue?: string; + createTime?: Date; + isAllowChange?: string; + isAllowChangeStr?: string; + remark?: string; +} + +/** + * ConfigUpdateCommand + */ +export interface UpdateConfigRequest { + configValue: string; +} + +/** 获取配置列表 */ +export const getConfigListApi = (params?: ConfigQuery) => { + return http.request>>( + "get", + "/system/configs", + { + params + } + ); +}; + +/** 获取配置信息 */ +export const getConfigInfoApi = (configId: string) => { + return http.request>( + "get", + `/system/config/${configId}` + ); +}; + +/** 刷新配置缓存 */ +export const updateConfigApi = ( + configId: number, + data: UpdateConfigRequest +) => { + return http.request>>( + "put", + `/system/config/${configId}`, + { + data + } + ); +}; + +/** 刷新配置缓存 */ +export const refreshConfigCacheApi = () => { + return http.request>("delete", "/system/configs/cache"); +}; diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts new file mode 100644 index 0000000..a5b8dc0 --- /dev/null +++ b/src/api/system/dept.ts @@ -0,0 +1,83 @@ +import { http } from "@/utils/http"; + +export interface DeptQuery extends BaseQuery { + // TODO 目前不需要这个参数 + deptId?: number; + parentId?: number; +} + +/** + * DeptDTO + */ +export interface DeptDTO { + createTime?: Date; + id?: number; + deptName?: string; + email?: string; + leaderName?: string; + orderNum?: number; + parentId?: number; + phone?: string; + status?: number; + statusStr?: string; +} + +/** + * AddDeptCommand + */ +export interface DeptRequest { + deptName: string; + email?: string; + leaderName?: string; + orderNum: number; + parentId: number; + phone?: string; + status: number; +} + +export interface DeptTreeDTO { + id: number; + parentId: number; + label: string; + children: [DeptTreeDTO]; +} + +/** 获取部门列表 */ +export const getDeptListApi = (params?: DeptQuery) => { + return http.request>>("get", "/system/depts", { + params + }); +}; + +/** 新增部门 */ +export const addDeptApi = (data: DeptRequest) => { + console.log(data); + return http.request>("post", "/system/dept", { + data + }); +}; + +/** 部门详情 */ +export const getDeptInfoApi = (deptId: string) => { + return http.request>("get", `/system/dept/${deptId}`); +}; + +/** 修改部门 */ +export const updateDeptApi = (deptId: string, data: DeptRequest) => { + return http.request>("put", `/system/dept/${deptId}`, { + data + }); +}; + +/** 删除部门 */ +export const deleteDeptApi = (deptId: string) => { + return http.request>("delete", `/system/dept/${deptId}`); +}; + +/** 获取部门树级结构 */ +export const getDeptTree = () => { + return http.request>( + "get", + "/system/depts/dropdown" + ); +}; diff --git a/src/api/system/log.ts b/src/api/system/log.ts new file mode 100644 index 0000000..d6b00ce --- /dev/null +++ b/src/api/system/log.ts @@ -0,0 +1,116 @@ +import { http } from "@/utils/http"; + +export interface OperationLogsQuery extends BasePageQuery { + businessType?: string; + requestModule?: string; + status?: string; + username?: string; +} + +export interface OperationLogDTO { + businessType?: number; + businessTypeStr?: string; + calledMethod?: string; + deptId?: number; + deptName?: string; + errorStack?: string; + operationId?: number; + operationParam?: string; + operationResult?: string; + operationTime?: Date; + operatorIp?: string; + operatorLocation?: string; + operatorType?: number; + operatorTypeStr?: string; + requestMethod?: string; + requestModule?: string; + requestUrl?: string; + status?: number; + statusStr?: string; + userId?: number; + username?: string; +} + +/** 获取操作日志列表 */ +export const getOperationLogListApi = (params?: OperationLogsQuery) => { + return http.request>>( + "get", + "/logs/operationLogs", + { + params + } + ); +}; + +export const exportOperationLogExcelApi = ( + params: OperationLogsQuery, + fileName: string +) => { + return http.download("/logs/operationLogs/excel", fileName, { + params + }); +}; + +export const deleteOperationLogApi = (data: Array) => { + return http.request>("delete", "/logs/operationLogs", { + params: { + // 需要将数组转换为字符串 否则Axios会将参数变成 noticeIds[0]:1 noticeIds[1]:2 这种格式,后端接收参数不成功 + operationIds: data.toString() + } + }); +}; + +/** 登录日志查询类 */ +export interface LoginLogQuery extends BasePageQuery { + beginTime?: string; + endTime?: string; + ipAddress?: string; + status?: string; + username?: string; +} + +/** + * 登录日志信息 + */ +export interface LoginLogsDTO { + browser?: string; + infoId?: string; + ipAddress?: string; + loginLocation?: string; + loginTime?: Date; + msg?: string; + operationSystem?: string; + /** TODO 这个登录状态的设计很奇怪 需要重构掉 */ + status?: number; + statusStr?: string; + username?: string; +} + +/** 获取操作日志列表 */ +export const getLoginLogListApi = (params?: LoginLogQuery) => { + return http.request>>( + "get", + "/logs/loginLogs", + { + params + } + ); +}; + +export const exportLoginLogExcelApi = ( + params: LoginLogQuery, + fileName: string +) => { + return http.download("/logs/loginLogs/excel", fileName, { + params + }); +}; + +export const deleteLoginLogApi = (data: Array) => { + return http.request>("delete", "/logs/loginLogs", { + params: { + // 需要将数组转换为字符串 否则Axios会将参数变成 noticeIds[0]:1 noticeIds[1]:2 这种格式,后端接收参数不成功 + ids: data.toString() + } + }); +}; diff --git a/src/api/system/menu.ts b/src/api/system/menu.ts new file mode 100644 index 0000000..ad74096 --- /dev/null +++ b/src/api/system/menu.ts @@ -0,0 +1,118 @@ +import { http } from "@/utils/http"; +import { Tree } from "@/utils/tree"; + +export interface MenuQuery { + isButton: boolean; +} + +/** + * MenuDTO + */ +export interface MenuDTO extends Tree { + createTime?: Date; + isButton?: number; + id?: number; + menuName?: string; + parentId?: number; + menuType: number; + menuTypeStr: string; + path?: string; + permission?: string; + routerName?: string; + status?: number; + statusStr?: string; +} + +/** + * MenuDetailDTO + */ +export interface MenuDetailDTO extends MenuDTO { + meta: MetaDTO; + permission?: string; +} + +/** + * AddMenuCommand + */ +export interface MenuRequest { + id: number; + parentId: number; + menuName: string; + routerName?: string; + path?: string; + permission?: string; + status: number; + isButton: boolean; + menuType: number; + meta: MetaDTO; +} + +/** + * MetaDTO + */ +export interface MetaDTO { + auths?: string[]; + dynamicLevel?: number; + extraIcon?: ExtraIconDTO; + frameLoading?: boolean; + frameSrc?: string; + hiddenTag?: boolean; + icon?: string; + isFrameSrcInternal?: boolean; + keepAlive?: boolean; + rank?: number; + roles?: string[]; + showLink?: boolean; + showParent?: boolean; + title?: string; + transition?: TransitionDTO; +} + +/** + * ExtraIconDTO + */ +export interface ExtraIconDTO { + name?: string; + svg?: boolean; +} + +/** + * TransitionDTO + */ +export interface TransitionDTO { + enterTransition?: string; + leaveTransition?: string; + name?: string; +} + +/** 获取菜单列表 */ +export const getMenuListApi = (params: MenuQuery) => { + return http.request>>("get", "/system/menus", { + params + }); +}; + +/** 添加菜单 */ +export const addMenuApi = (data: MenuRequest) => { + return http.request>("post", "/system/menus", { data }); +}; + +/** 修改菜单 */ +export const updateMenuApi = (menuId: string, data: MenuRequest) => { + return http.request>("put", `/system/menus/${menuId}`, { + data + }); +}; + +/** 删除菜单 */ +export const deleteMenuApi = (menuId: string) => { + return http.request>("delete", `/system/menus/${menuId}`); +}; + +/** 菜单详情 */ +export const getMenuInfoApi = (menuId: string) => { + return http.request>( + "get", + `/system/menus/${menuId}` + ); +}; diff --git a/src/api/system/monitor.ts b/src/api/system/monitor.ts new file mode 100644 index 0000000..53ddfd8 --- /dev/null +++ b/src/api/system/monitor.ts @@ -0,0 +1,137 @@ +import { http } from "@/utils/http"; + +export interface OnlineUserQuery { + ipAddress: string; + username: string; +} + +export interface OnlineUserInfo { + browser?: string; + deptName?: string; + ipAddress?: string; + loginLocation?: string; + loginTime?: number; + operationSystem?: string; + tokenId?: string; + username?: string; +} + +/** 获取操作日志列表 */ +export const getOnlineUserListApi = (params?: OnlineUserQuery) => { + return http.request>>( + "get", + "/monitor/onlineUsers", + { + params + } + ); +}; + +/** 强制登出用户 */ +export const logoutOnlineUserApi = (tokenId: string) => { + return http.request>( + "delete", + `/monitor/onlineUser/${tokenId}` + ); +}; + +/** + * ServerInfo + */ +export interface ServerInfo { + cpuInfo?: CpuInfo; + diskInfos?: DiskInfo[]; + jvmInfo?: JvmInfo; + memoryInfo?: MemoryInfo; + systemInfo?: SystemInfo; +} + +/** + * CpuInfo + */ +export interface CpuInfo { + cpuNum?: number; + free?: number; + sys?: number; + total?: number; + used?: number; + wait?: number; +} + +/** + * DiskInfo + */ +export interface DiskInfo { + dirName?: string; + free?: string; + sysTypeName?: string; + total?: string; + typeName?: string; + usage?: number; + used?: string; +} + +/** + * JvmInfo + */ +export interface JvmInfo { + free?: number; + home?: string; + inputArgs?: string; + max?: number; + name?: string; + runTime?: string; + startTime?: string; + total?: number; + usage?: number; + used?: number; + version?: string; +} + +/** + * MemoryInfo + */ +export interface MemoryInfo { + free?: number; + total?: number; + usage?: number; + used?: number; +} + +/** + * SystemInfo + */ +export interface SystemInfo { + computerIp?: string; + computerName?: string; + osArch?: string; + osName?: string; + userDir?: string; +} + +/** 获取服务器信息 */ +export const getServerInfoApi = () => { + return http.request>("get", "/monitor/serverInfo"); +}; + +/** + * RedisCacheInfoDTO + */ +export interface RedisCacheInfoDTO { + commandStats?: CommandStatusDTO[]; + dbSize?: number; + info?: { [key: string]: string }; +} + +/** + * CommandStatusDTO + */ +export interface CommandStatusDTO { + name?: string; + value?: string; +} + +/** 获取Redis信息 */ +export const getCacheInfoApi = () => { + return http.request>("get", "/monitor/cacheInfo"); +}; diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts new file mode 100644 index 0000000..62931e4 --- /dev/null +++ b/src/api/system/notice.ts @@ -0,0 +1,64 @@ +import { http } from "@/utils/http"; + +export interface SystemNoticeQuery extends BasePageQuery { + noticeType: string; + noticeTitle: string; + creatorName: string; +} + +type SystemNoticeDTO = { + noticeId: string; + noticeTitle: string; + noticeType: number; + noticeContent: string; + status: number; + createTime: Date; + creatorName: string; +}; + +export type SystemNoticeRequest = { + noticeId?: number; + noticeTitle: string; + noticeType: number; + noticeContent: string; + status: number; +}; + +/** 获取系统通知列表 */ +export const getSystemNoticeListApi = (params?: SystemNoticeQuery) => { + return http.request>>( + "get", + "/system/notices", + { + params + } + ); +}; + +/** 添加系统通知 */ +export const addSystemNoticeApi = (data: SystemNoticeRequest) => { + return http.request>("post", "/system/notices", { + data + }); +}; + +/** 修改系统通知 */ +export const updateSystemNoticeApi = (data: SystemNoticeRequest) => { + return http.request>( + "put", + `/system/notices/${data.noticeId}`, + { + data + } + ); +}; + +/** 删除系统通知 */ +export const deleteSystemNoticeApi = (data: Array) => { + return http.request>("delete", "/system/notices", { + params: { + // 需要将数组转换为字符串 否则Axios会将参数变成 noticeIds[0]:1 noticeIds[1]:2 这种格式,后端接收参数不成功 + noticeIds: data.toString() + } + }); +}; diff --git a/src/api/system/post.ts b/src/api/system/post.ts new file mode 100644 index 0000000..914e55f --- /dev/null +++ b/src/api/system/post.ts @@ -0,0 +1,70 @@ +import { http } from "@/utils/http"; + +export interface PostListCommand extends BasePageQuery { + postCode?: string; + postName?: string; + status?: number; +} + +export interface PostPageResponse { + createTime: string; + postCode: string; + postId: number; + postName: string; + postSort: number; + remark: string; + status: number; + statusStr: string; +} + +export function getPostListApi(params: PostListCommand) { + return http.request>>( + "get", + "/system/post/list", + { + params + } + ); +} + +export const exportPostExcelApi = ( + params: PostListCommand, + fileName: string +) => { + return http.download("/system/post/excel", fileName, { + params + }); +}; + +export const deletePostApi = (data: Array) => { + return http.request>("delete", "/system/post", { + params: { + // 需要将数组转换为字符串 否则Axios会将参数变成 noticeIds[0]:1 noticeIds[1]:2 这种格式,后端接收参数不成功 + ids: data.toString() + } + }); +}; + +export interface AddPostCommand { + postCode: string; + postName: string; + postSort: number; + remark?: string; + status?: string; +} + +export const addPostApi = (data: AddPostCommand) => { + return http.request>("post", "/system/post", { + data + }); +}; + +export interface UpdatePostCommand extends AddPostCommand { + postId: number; +} + +export const updatePostApi = (data: UpdatePostCommand) => { + return http.request>("put", "/system/post", { + data + }); +}; diff --git a/src/api/system/role.ts b/src/api/system/role.ts new file mode 100644 index 0000000..41771a9 --- /dev/null +++ b/src/api/system/role.ts @@ -0,0 +1,65 @@ +import { http } from "@/utils/http"; + +export interface RoleQuery extends BasePageQuery { + roleKey?: string; + roleName?: string; + status?: string; + timeRangeColumn?: string; +} + +export interface RoleDTO { + createTime: Date; + dataScope: number; + remark: string; + roleId: number; + roleKey: string; + roleName: string; + roleSort: number; + selectedDeptList: number[]; + selectedMenuList: number[]; + status: number; +} + +export function getRoleListApi(params: RoleQuery) { + return http.request>>( + "get", + "/system/role/list", + { + params + } + ); +} + +export function getRoleInfoApi(roleId: number) { + return http.request>("get", "/system/role/" + roleId); +} + +export interface AddRoleCommand { + dataScope?: string; + menuIds: number[]; + remark?: string; + roleKey: string; + roleName: string; + roleSort: number; + status?: string; +} + +export function addRoleApi(data: AddRoleCommand) { + return http.request("post", "/system/role", { + data + }); +} + +export interface UpdateRoleCommand extends AddRoleCommand { + roleId: number; +} + +export function updateRoleApi(data: UpdateRoleCommand) { + return http.request("put", "/system/role", { + data + }); +} + +export function deleteRoleApi(roleId: number) { + return http.request("delete", "/system/role/" + roleId); +} diff --git a/src/api/system/user.ts b/src/api/system/user.ts new file mode 100644 index 0000000..aeaaf59 --- /dev/null +++ b/src/api/system/user.ts @@ -0,0 +1,176 @@ +import { http } from "@/utils/http"; + +export interface UserQuery extends BasePageQuery { + deptId?: number; + phoneNumber?: string; + status?: number; + userId?: number; + username?: string; +} + +/** + * UserDTO + */ +export interface UserDTO { + avatar?: string; + createTime?: Date; + creatorId?: number; + creatorName?: string; + deptId?: number; + deptName?: string; + email?: string; + loginDate?: Date; + loginIp?: string; + nickname?: string; + phoneNumber?: string; + postId?: number; + remark?: string; + roleId?: number; + roleName?: string; + sex?: number; + status?: number; + updaterId?: number; + updaterName?: string; + updateTime?: Date; + userId?: number; + username?: string; + userType?: number; +} + +/** + * AddUserCommand + */ +export interface UserRequest { + userId: number; + avatar?: string; + deptId?: number; + email?: string; + nickname?: string; + phoneNumber?: string; + password: string; + postId?: number; + remark?: string; + roleId?: number; + sex?: number; + status?: number; + username?: string; +} + +/** + * UpdateProfileCommand + */ +export interface UserProfileRequest { + email?: string; + nickName?: string; + phoneNumber?: string; + sex?: number; + userId?: number; +} + +/** + * ResetPasswordCommand + */ +export interface ResetPasswordRequest { + newPassword?: string; + oldPassword?: string; + userId?: number; +} + +/** + * 修改密码 + */ +export interface PasswordRequest { + userId: number; + password: string; +} + +/** 获取用户列表 */ +export const getUserListApi = (params?: UserQuery) => { + return http.request>>("get", "/system/users", { + params + }); +}; + +/** 新增用户 */ +export const addUserApi = (data?: UserRequest) => { + return http.request>("post", "/system/users", { + data + }); +}; + +/** 编辑用户 */ +export const updateUserApi = (userId: number, data?: UserRequest) => { + return http.request>("put", `/system/users/${userId}`, { + data + }); +}; + +/** 更改用户密码 */ +export const updateUserPasswordApi = (data?: PasswordRequest) => { + return http.request>( + "put", + `/system/users/${data.userId}/password`, + { + data + } + ); +}; + +/** 删除用户 */ +export const deleteUserApi = (userId: number) => { + return http.request>("delete", `/system/users/${userId}`); +}; + +/** 修改用户状态 */ +export const updateUserStatusApi = (userId: number, status: number) => { + return http.request>>( + "put", + `/system/users/${userId}/status`, + { + data: { + status: status + } + } + ); +}; + +/** 批量导出用户 */ +export const exportUserExcelApi = (params: UserQuery, fileName: string) => { + return http.download("/system/users/excel", fileName, { + params + }); +}; + +/** 用户头像上传 */ +export const uploadUserAvatarApi = data => { + return http.request>( + "post", + "/system/user/profile/avatar", + { + data + }, + { + headers: { + "Content-Type": "multipart/form-data" + } + } + ); +}; + +/** 更改用户资料 */ +export const updateUserProfileApi = (data?: UserProfileRequest) => { + return http.request>("put", "/system/user/profile", { + data + }); +}; + +/** 更改当前用户密码 */ +export const updateCurrentUserPasswordApi = (data?: ResetPasswordRequest) => { + return http.request>( + "put", + "/system/user/profile/password", + { + data + } + ); +}; diff --git a/src/assets/iconfont/iconfont.css b/src/assets/iconfont/iconfont.css new file mode 100644 index 0000000..3b54550 --- /dev/null +++ b/src/assets/iconfont/iconfont.css @@ -0,0 +1,26 @@ +@font-face { + font-family: "iconfont"; /* Project id 2208059 */ + src: url("iconfont.woff2?t=1671895108120") format("woff2"), + url("iconfont.woff?t=1671895108120") format("woff"), + url("iconfont.ttf?t=1671895108120") format("truetype"); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.pure-iconfont-tabs:before { + content: "\e63e"; +} + +.pure-iconfont-logo:before { + content: "\e620"; +} + +.pure-iconfont-new:before { + content: "\e615"; +} diff --git a/src/assets/iconfont/iconfont.js b/src/assets/iconfont/iconfont.js new file mode 100644 index 0000000..64d8bd8 --- /dev/null +++ b/src/assets/iconfont/iconfont.js @@ -0,0 +1,69 @@ +(window._iconfont_svg_string_2208059 = + ''), + (function (e) { + var t = (t = document.getElementsByTagName("script"))[t.length - 1], + c = t.getAttribute("data-injectcss"), + t = t.getAttribute("data-disable-injectsvg"); + if (!t) { + var n, + l, + i, + o, + a, + h = function (t, c) { + c.parentNode.insertBefore(t, c); + }; + if (c && !e.__iconfont__svg__cssinject__) { + e.__iconfont__svg__cssinject__ = !0; + try { + document.write( + "" + ); + } catch (t) { + console && console.log(t); + } + } + (n = function () { + var t, + c = document.createElement("div"); + (c.innerHTML = e._iconfont_svg_string_2208059), + (c = c.getElementsByTagName("svg")[0]) && + (c.setAttribute("aria-hidden", "true"), + (c.style.position = "absolute"), + (c.style.width = 0), + (c.style.height = 0), + (c.style.overflow = "hidden"), + (c = c), + (t = document.body).firstChild + ? h(c, t.firstChild) + : t.appendChild(c)); + }), + document.addEventListener + ? ~["complete", "loaded", "interactive"].indexOf(document.readyState) + ? setTimeout(n, 0) + : ((l = function () { + document.removeEventListener("DOMContentLoaded", l, !1), n(); + }), + document.addEventListener("DOMContentLoaded", l, !1)) + : document.attachEvent && + ((i = n), + (o = e.document), + (a = !1), + v(), + (o.onreadystatechange = function () { + "complete" == o.readyState && + ((o.onreadystatechange = null), d()); + })); + } + function d() { + a || ((a = !0), i()); + } + function v() { + try { + o.documentElement.doScroll("left"); + } catch (t) { + return void setTimeout(v, 50); + } + d(); + } + })(window); diff --git a/src/assets/iconfont/iconfont.json b/src/assets/iconfont/iconfont.json new file mode 100644 index 0000000..cec4806 --- /dev/null +++ b/src/assets/iconfont/iconfont.json @@ -0,0 +1,30 @@ +{ + "id": "2208059", + "name": "pure-admin", + "font_family": "iconfont", + "css_prefix_text": "pure-iconfont-", + "description": "pure-admin-iconfont", + "glyphs": [ + { + "icon_id": "20594647", + "name": "Tabs", + "font_class": "tabs", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "22129506", + "name": "PureLogo", + "font_class": "logo", + "unicode": "e620", + "unicode_decimal": 58912 + }, + { + "icon_id": "7795615", + "name": "New", + "font_class": "new", + "unicode": "e615", + "unicode_decimal": 58901 + } + ] +} diff --git a/src/assets/iconfont/iconfont.ttf b/src/assets/iconfont/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..82efcf8f7a34c697125264a48d96d149237662a8 GIT binary patch literal 3904 zcmd^CU2Ggz6~5=*`Q7>1UGMIUw~lw$yY)I7N4xf}cQ?(?Hi;cOKSh)@^;4_Van?>6 z+iN-7&>ut-C=w|BiJ%fitprlwfwxNKrwEWx1p-x}FAd2HDmoFt7n8hwK!Nz7DdiY@O^6=A)(Joj|eEy+Ib?@jA7y9$i zADdsETYck41DBxx1J7%VOHVEQ^+5Lp#>Dp-GyZ<2J$E|)<{zE|_Rn}4XJF9Z6JLY; z3q1FpS?)d=g8<(TFvONR^K1Fu80zI-k_v9)K@&e}jq32fSmfNwbdtYbFevL7{ zxY{}2ee5p>k1!ThFu#W(cX4s^B6~!tjA4|kx${y2i^O&6M@~lf-ey*a{nNGI{aOOU z_vW(-n4lVrODitPq;Q`_15H{ZxEb3F^l(1H##oE-sp$t!Fn4LLyTa~~Nd#Bme}_y< zXBX$dA9@mS5=pQS(|T3~>0V(f*7^;84YrrUH~o!O37(v(0@lyC9$Ywdn*Hil>Q*bL z2NQo}mjIJFd~$Ia@XiM+VxjYl?F^^rOwZ>OtkQcY-dHv43Tr?&!U`c$?pA9PwfIEB zY`7kYk*r)YkX+mU`(+0OnCO)O^}dw~A6ffbx$u#{dAC~O6Lx_(y{vo*UY7I}-{b2n ziH_9SarP)%W?l9iyUeb#pQFlNQX46xl3KpFj|y6GqOpgnzBfqHQr8MvnI>A~H~fi4 z)z=#n#k`jEs>7b|C3Tky`Qk{*1F~5!HmaVUYEiA~OOy^+qbVe7K1)UHv9-^f^r-Le=+CE}KD`#rjAgQAig-4z9sTjFMNYyYa{63~Wct!ZG+T~FGnMEg5yy#q z)60-+e&>=9&uml^`jhWW0@rm*u|^V*P?l zi+(Re*87SGHa&*TXT`U0O6A!h^q)~u*S79d(nl|=%|^3PpBO1_-Tr@u(1ditEeU)t zwqF0mgp=70=E+x~Y?NifNr>C};(#cY~UP%tc6K^N}&1`bxdVm~F7=b@877rde zUb|0RERUC}gZmB*w{{(znmszRV{~-K%+cAY$!2SKdhcMhG`G=X~92T`|IMqxgGlZfQ?xHH@qi~YM>i-<4h&cX#9VbzfDa!LIuc2&GYw@~V zEG#Zh$tuvh`TGye9QBiZG1rb5x~g*`Ju_f?1vBC&OM|<|?&ZohO?~{rwoFuipcK`0 zLAGfdgfp6iqT|iE6%mA6jTnM!pb*4OLl^*&DujYjRV+W=A04o`bkj5=0O_hBbZ%Q* z7lsWYN5!n6Dv79~*rjSZ?#C2MLjc{;xKKG4pyE1LI8^ZHq?*yblpVMFla6D6!PHb! zK|o}OQL_sNWWbo$Y-BS?4EN|g_gHyF=!r<}@Ch@f7-lk&h+={d7xaXweq3scsB5}$ zClnkUimYuqj)?(FZ+l)K3<c!|4HMaG)Q(jia}&s*t5Bim@X%B1C^o86I>8ud9}5Wpq^-b5s5CC~D_e zLG4fuSwsc33v?-K=vxE^T?<;w$&FdQp&Lq6lOTk}!7WHdYYFWlvMfW5#LRTDPjJIT z+ay(w5@@i?Fph|2QvJ5BXlMn;?++&|gEX`oOm1@D!@wrhNIYVrZ^*P?V9y+`L2|o|s&}~K2 z&YjaV#nx}gZo=)Hg`Yrq`|yj_4gD_49@4(;7}rC}>mFLXKxjFE`wKU9Tc`o4YUwwF zTyBP>fwFN8@E{dW(F}xFG@qc^}a|MOF$35XysRPq9=2vvw@y0V9)nt z1@exbtl|r*+LJZd_x0om8^zz!kkbO=s{HCzOvEX&ul8hOG4{ir%$du6){_P7zwOBi zu;$F@u}?UnZ07R~t!i`8y-A-AyBSonlX6Jj>=;hpn)MVC;TMKMwRFdx9;&bL~^J zcYDtQy~fT1CpmL$oR#r!)7_{UpjHCp-PxRH7Z9zA9J|OUhi45;%aEpf`L&VB6672j zDCZsr&pgm&b|&yzWxH7g_ttv0@a15g%km$q@RI-Eeb%L5n+lwyDpR_1r_L)&oyCq= JX@3#ee*y;q>;3=$ literal 0 HcmV?d00001 diff --git a/src/assets/iconfont/iconfont.woff b/src/assets/iconfont/iconfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..0fdaa0a4174505d3116137ed761c9534b21b05f4 GIT binary patch literal 2484 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 literal 0 HcmV?d00001 diff --git a/src/assets/login/avatar.svg b/src/assets/login/avatar.svg new file mode 100644 index 0000000..bc26056 --- /dev/null +++ b/src/assets/login/avatar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/login/bg.png b/src/assets/login/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..8cdd3001fc95b63c1d334ab7d717812f4240839e GIT binary patch literal 17468 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 \ No newline at end of file diff --git a/src/assets/status/403.svg b/src/assets/status/403.svg new file mode 100644 index 0000000..38b57a3 --- /dev/null +++ b/src/assets/status/403.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/status/404.svg b/src/assets/status/404.svg new file mode 100644 index 0000000..2189ec4 --- /dev/null +++ b/src/assets/status/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/status/500.svg b/src/assets/status/500.svg new file mode 100644 index 0000000..255d36c --- /dev/null +++ b/src/assets/status/500.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/FullScreenMaximize.svg b/src/assets/svg/FullScreenMaximize.svg new file mode 100644 index 0000000..eb519ef --- /dev/null +++ b/src/assets/svg/FullScreenMaximize.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/FullScreenMinimize.svg b/src/assets/svg/FullScreenMinimize.svg new file mode 100644 index 0000000..f059c76 --- /dev/null +++ b/src/assets/svg/FullScreenMinimize.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/back_top.svg b/src/assets/svg/back_top.svg new file mode 100644 index 0000000..19a4639 --- /dev/null +++ b/src/assets/svg/back_top.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/dark.svg b/src/assets/svg/dark.svg new file mode 100644 index 0000000..c1bdeea --- /dev/null +++ b/src/assets/svg/dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/day.svg b/src/assets/svg/day.svg new file mode 100644 index 0000000..3fe1e86 --- /dev/null +++ b/src/assets/svg/day.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/enter_outlined.svg b/src/assets/svg/enter_outlined.svg new file mode 100644 index 0000000..069bd2e --- /dev/null +++ b/src/assets/svg/enter_outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/exit_screen.svg b/src/assets/svg/exit_screen.svg new file mode 100644 index 0000000..bb01465 --- /dev/null +++ b/src/assets/svg/exit_screen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/full_screen.svg b/src/assets/svg/full_screen.svg new file mode 100644 index 0000000..d5bb5b8 --- /dev/null +++ b/src/assets/svg/full_screen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/keyboard_esc.svg b/src/assets/svg/keyboard_esc.svg new file mode 100644 index 0000000..6898751 --- /dev/null +++ b/src/assets/svg/keyboard_esc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/user.jpg b/src/assets/user.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2973ace3367cf7181b470e2814db5a9c06a4533 GIT binary patch literal 3694 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 { + if (!slots) return null; + return hasAuth(props.value) ? ( + {slots.default?.()} + ) : null; + }; + } +}); diff --git a/src/components/ReCol/index.ts b/src/components/ReCol/index.ts new file mode 100644 index 0000000..7a6c937 --- /dev/null +++ b/src/components/ReCol/index.ts @@ -0,0 +1,29 @@ +import { ElCol } from "element-plus"; +import { h, defineComponent } from "vue"; + +// 封装element-plus的el-col组件 +export default defineComponent({ + name: "ReCol", + props: { + value: { + type: Number, + default: 24 + } + }, + render() { + const attrs = this.$attrs; + const val = this.value; + return h( + ElCol, + { + xs: val, + sm: val, + md: val, + lg: val, + xl: val, + ...attrs + }, + { default: () => this.$slots.default() } + ); + } +}); diff --git a/src/components/ReCropper/index.ts b/src/components/ReCropper/index.ts new file mode 100644 index 0000000..62e2590 --- /dev/null +++ b/src/components/ReCropper/index.ts @@ -0,0 +1,7 @@ +import reCropper from "./src"; +import { withInstall } from "@pureadmin/utils"; + +/** 图片裁剪组件 */ +export const ReCropper = withInstall(reCropper); + +export default ReCropper; diff --git a/src/components/ReCropper/src/circled.css b/src/components/ReCropper/src/circled.css new file mode 100644 index 0000000..41b0d99 --- /dev/null +++ b/src/components/ReCropper/src/circled.css @@ -0,0 +1,11 @@ +@import "cropperjs/dist/cropper.css"; +@import "tippy.js/dist/tippy.css"; +@import "tippy.js/themes/light.css"; +@import "tippy.js/animations/perspective.css"; + +.re-circled { + .cropper-view-box, + .cropper-face { + border-radius: 50%; + } +} diff --git a/src/components/ReCropper/src/index.tsx b/src/components/ReCropper/src/index.tsx new file mode 100644 index 0000000..62dd2fa --- /dev/null +++ b/src/components/ReCropper/src/index.tsx @@ -0,0 +1,439 @@ +import "./circled.css"; +import Cropper from "cropperjs"; +import { ElUpload } from "element-plus"; +import type { CSSProperties } from "vue"; +import { useResizeObserver } from "@vueuse/core"; +import { longpress } from "@/directives/longpress"; +import { useTippy, directive as tippy } from "vue-tippy"; +import { delay, debounce, isArray, downloadByBase64 } from "@pureadmin/utils"; +import { + ref, + unref, + computed, + PropType, + onMounted, + onUnmounted, + defineComponent +} from "vue"; +import { + Reload, + Upload, + ArrowH, + ArrowV, + ArrowUp, + ArrowDown, + ArrowLeft, + ChangeIcon, + ArrowRight, + RotateLeft, + SearchPlus, + RotateRight, + SearchMinus, + DownloadIcon +} from "./svg"; + +type Options = Cropper.Options; + +const defaultOptions: Options = { + aspectRatio: 1, + zoomable: true, + zoomOnTouch: true, + zoomOnWheel: true, + cropBoxMovable: true, + cropBoxResizable: true, + toggleDragModeOnDblclick: true, + autoCrop: true, + background: true, + highlight: true, + center: true, + responsive: true, + restore: true, + checkCrossOrigin: true, + checkOrientation: true, + scalable: true, + modal: true, + guides: true, + movable: true, + rotatable: true +}; + +const props = { + src: { type: String, required: true }, + alt: { type: String }, + circled: { type: Boolean, default: false }, + realTimePreview: { type: Boolean, default: true }, + height: { type: [String, Number], default: "360px" }, + crossorigin: { + type: String as PropType<"" | "anonymous" | "use-credentials" | undefined>, + default: undefined + }, + imageStyle: { type: Object as PropType, default: () => ({}) }, + options: { type: Object as PropType, default: () => ({}) } +}; + +export default defineComponent({ + name: "ReCropper", + props, + setup(props, { attrs, emit }) { + const tippyElRef = ref>(); + const imgElRef = ref>(); + const cropper = ref>(); + const isReady = ref(false); + const imgBase64 = ref(); + const inCircled = ref(props.circled); + const inSrc = ref(props.src); + let scaleX = 1; + let scaleY = 1; + + const debounceRealTimeCroppered = debounce(realTimeCroppered, 80); + + const getImageStyle = computed((): CSSProperties => { + return { + height: props.height, + maxWidth: "100%", + ...props.imageStyle + }; + }); + + const getClass = computed(() => { + return [ + attrs.class, + { + ["re-circled"]: inCircled.value + } + ]; + }); + + const iconClass = computed(() => { + return [ + "p-[6px]", + "h-[30px]", + "w-[30px]", + "outline-none", + "rounded-[4px]", + "cursor-pointer", + "hover:bg-[rgba(0,0,0,0.06)]" + ]; + }); + + const getWrapperStyle = computed((): CSSProperties => { + return { height: `${props.height}`.replace(/px/, "") + "px" }; + }); + + onMounted(init); + + onUnmounted(() => { + cropper.value?.destroy(); + }); + + useResizeObserver(tippyElRef, () => { + handCropper("reset"); + }); + + async function init() { + const imgEl = unref(imgElRef); + if (!imgEl) return; + cropper.value = new Cropper(imgEl, { + ...defaultOptions, + ready: () => { + isReady.value = true; + realTimeCroppered(); + delay(400).then(() => emit("readied", cropper.value)); + }, + crop() { + debounceRealTimeCroppered(); + }, + zoom() { + debounceRealTimeCroppered(); + }, + cropmove() { + debounceRealTimeCroppered(); + }, + ...props.options + }); + } + + function realTimeCroppered() { + props.realTimePreview && croppered(); + } + + function croppered() { + if (!cropper.value) return; + const canvas = inCircled.value + ? getRoundedCanvas() + : cropper.value.getCroppedCanvas(); + // https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/toBlob + canvas.toBlob(blob => { + if (!blob) return; + const fileReader: FileReader = new FileReader(); + fileReader.readAsDataURL(blob); + fileReader.onloadend = e => { + if (!e.target?.result || !blob) return; + imgBase64.value = e.target.result; + emit("cropper", { + base64: e.target.result, + blob, + info: { size: blob.size, ...cropper.value.getData() } + }); + }; + fileReader.onerror = () => { + emit("error"); + }; + }); + } + + function getRoundedCanvas() { + const sourceCanvas = cropper.value!.getCroppedCanvas(); + const canvas = document.createElement("canvas"); + const context = canvas.getContext("2d")!; + const width = sourceCanvas.width; + const height = sourceCanvas.height; + canvas.width = width; + canvas.height = height; + context.imageSmoothingEnabled = true; + context.drawImage(sourceCanvas, 0, 0, width, height); + context.globalCompositeOperation = "destination-in"; + context.beginPath(); + context.arc( + width / 2, + height / 2, + Math.min(width, height) / 2, + 0, + 2 * Math.PI, + true + ); + context.fill(); + return canvas; + } + + function handCropper(event: string, arg?: number | Array) { + if (event === "scaleX") { + scaleX = arg = scaleX === -1 ? 1 : -1; + } + if (event === "scaleY") { + scaleY = arg = scaleY === -1 ? 1 : -1; + } + arg && isArray(arg) + ? cropper.value?.[event]?.(...arg) + : cropper.value?.[event]?.(arg); + } + + function beforeUpload(file) { + const reader = new FileReader(); + reader.readAsDataURL(file); + inSrc.value = ""; + reader.onload = e => { + inSrc.value = e.target?.result as string; + }; + reader.onloadend = () => { + init(); + }; + return false; + } + + const menuContent = defineComponent({ + directives: { + tippy, + longpress + }, + setup() { + return () => ( +

+ ); + } + }); + + function onContextmenu(event) { + event.preventDefault(); + + const { show, setProps } = useTippy(tippyElRef, { + content: menuContent, + arrow: false, + theme: "light", + trigger: "manual", + interactive: true, + appendTo: "parent", + // hideOnClick: false, + animation: "perspective", + placement: "bottom-start" + }); + + setProps({ + getReferenceClientRect: () => ({ + width: 0, + height: 0, + top: event.clientY, + bottom: event.clientY, + left: event.clientX, + right: event.clientX + }) + }); + + show(); + } + + return { + inSrc, + props, + imgElRef, + tippyElRef, + getClass, + getWrapperStyle, + getImageStyle, + isReady, + croppered, + onContextmenu + }; + }, + + render() { + const { + inSrc, + isReady, + getClass, + getImageStyle, + onContextmenu, + getWrapperStyle + } = this; + const { alt, crossorigin } = this.props; + + return inSrc ? ( +
onContextmenu(event)} + > + {alt} +
+ ) : null; + } +}); diff --git a/src/components/ReCropper/src/svg/arrow-down.svg b/src/components/ReCropper/src/svg/arrow-down.svg new file mode 100644 index 0000000..2839547 --- /dev/null +++ b/src/components/ReCropper/src/svg/arrow-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/arrow-h.svg b/src/components/ReCropper/src/svg/arrow-h.svg new file mode 100644 index 0000000..f955c41 --- /dev/null +++ b/src/components/ReCropper/src/svg/arrow-h.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/arrow-left.svg b/src/components/ReCropper/src/svg/arrow-left.svg new file mode 100644 index 0000000..66742bb --- /dev/null +++ b/src/components/ReCropper/src/svg/arrow-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/arrow-right.svg b/src/components/ReCropper/src/svg/arrow-right.svg new file mode 100644 index 0000000..45fbb4d --- /dev/null +++ b/src/components/ReCropper/src/svg/arrow-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/arrow-up.svg b/src/components/ReCropper/src/svg/arrow-up.svg new file mode 100644 index 0000000..7761be4 --- /dev/null +++ b/src/components/ReCropper/src/svg/arrow-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/arrow-v.svg b/src/components/ReCropper/src/svg/arrow-v.svg new file mode 100644 index 0000000..bbd0476 --- /dev/null +++ b/src/components/ReCropper/src/svg/arrow-v.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/change.svg b/src/components/ReCropper/src/svg/change.svg new file mode 100644 index 0000000..2edc209 --- /dev/null +++ b/src/components/ReCropper/src/svg/change.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/download.svg b/src/components/ReCropper/src/svg/download.svg new file mode 100644 index 0000000..f011250 --- /dev/null +++ b/src/components/ReCropper/src/svg/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/index.ts b/src/components/ReCropper/src/svg/index.ts new file mode 100644 index 0000000..1306ba7 --- /dev/null +++ b/src/components/ReCropper/src/svg/index.ts @@ -0,0 +1,31 @@ +import Reload from "./reload.svg?component"; +import Upload from "./upload.svg?component"; +import ArrowH from "./arrow-h.svg?component"; +import ArrowV from "./arrow-v.svg?component"; +import ArrowUp from "./arrow-up.svg?component"; +import ChangeIcon from "./change.svg?component"; +import ArrowDown from "./arrow-down.svg?component"; +import ArrowLeft from "./arrow-left.svg?component"; +import DownloadIcon from "./download.svg?component"; +import ArrowRight from "./arrow-right.svg?component"; +import RotateLeft from "./rotate-left.svg?component"; +import SearchPlus from "./search-plus.svg?component"; +import RotateRight from "./rotate-right.svg?component"; +import SearchMinus from "./search-minus.svg?component"; + +export { + Reload, + Upload, + ArrowH, + ArrowV, + ArrowUp, + ArrowDown, + ArrowLeft, + ChangeIcon, + ArrowRight, + RotateLeft, + SearchPlus, + RotateRight, + SearchMinus, + DownloadIcon +}; diff --git a/src/components/ReCropper/src/svg/reload.svg b/src/components/ReCropper/src/svg/reload.svg new file mode 100644 index 0000000..e8fab2c --- /dev/null +++ b/src/components/ReCropper/src/svg/reload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/rotate-left.svg b/src/components/ReCropper/src/svg/rotate-left.svg new file mode 100644 index 0000000..f702986 --- /dev/null +++ b/src/components/ReCropper/src/svg/rotate-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/rotate-right.svg b/src/components/ReCropper/src/svg/rotate-right.svg new file mode 100644 index 0000000..ffe6bc2 --- /dev/null +++ b/src/components/ReCropper/src/svg/rotate-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/search-minus.svg b/src/components/ReCropper/src/svg/search-minus.svg new file mode 100644 index 0000000..185924c --- /dev/null +++ b/src/components/ReCropper/src/svg/search-minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/search-plus.svg b/src/components/ReCropper/src/svg/search-plus.svg new file mode 100644 index 0000000..97447d2 --- /dev/null +++ b/src/components/ReCropper/src/svg/search-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReCropper/src/svg/upload.svg b/src/components/ReCropper/src/svg/upload.svg new file mode 100644 index 0000000..f5c9f11 --- /dev/null +++ b/src/components/ReCropper/src/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReDialog/index.ts b/src/components/ReDialog/index.ts new file mode 100644 index 0000000..cd7a8a5 --- /dev/null +++ b/src/components/ReDialog/index.ts @@ -0,0 +1,64 @@ +import { ref } from "vue"; +import reDialog from "./index.vue"; +import { useTimeoutFn } from "@vueuse/core"; +import { withInstall } from "@pureadmin/utils"; +import type { + EventType, + ArgsType, + DialogProps, + ButtonProps, + DialogOptions +} from "./type"; + +const dialogStore = ref>([]); + +/** 打开弹框 */ +const addDialog = (options: DialogOptions) => { + const open = () => + dialogStore.value.push(Object.assign(options, { visible: true })); + if (options?.openDelay) { + useTimeoutFn(() => { + open(); + }, options.openDelay); + } else { + open(); + } +}; + +/** 关闭弹框 */ +const closeDialog = (options: DialogOptions, index: number, args?: any) => { + dialogStore.value.splice(index, 1); + options.closeCallBack && options.closeCallBack({ options, index, args }); +}; + +/** + * @description 更改弹框自身属性值 + * @param value 属性值 + * @param key 属性,默认`title` + * @param index 弹框索引(默认`0`,代表只有一个弹框,对于嵌套弹框要改哪个弹框的属性值就把该弹框索引赋给`index`) + */ +const updateDialog = (value: any, key = "title", index = 0) => { + dialogStore.value[index][key] = value; +}; + +/** 关闭所有弹框 */ +const closeAllDialog = () => { + dialogStore.value = []; +}; + +/** 千万别忘了在下面这三处引入并注册下,放心注册,不使用`addDialog`调用就不会被挂载 + * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L4 + * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L13 + * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L18 + */ +const ReDialog = withInstall(reDialog); + +export type { EventType, ArgsType, DialogProps, ButtonProps, DialogOptions }; +export { + ReDialog, + dialogStore, + addDialog, + closeDialog, + updateDialog, + closeAllDialog +}; diff --git a/src/components/ReDialog/index.vue b/src/components/ReDialog/index.vue new file mode 100644 index 0000000..ee7a6be --- /dev/null +++ b/src/components/ReDialog/index.vue @@ -0,0 +1,157 @@ + + + diff --git a/src/components/ReDialog/type.ts b/src/components/ReDialog/type.ts new file mode 100644 index 0000000..2d897e6 --- /dev/null +++ b/src/components/ReDialog/type.ts @@ -0,0 +1,218 @@ +import type { CSSProperties, VNode, Component } from "vue"; + +type DoneFn = (cancel?: boolean) => void; +type EventType = "open" | "close" | "openAutoFocus" | "closeAutoFocus"; +type ArgsType = { + /** `cancel` 点击取消按钮、`sure` 点击确定按钮、`close` 点击右上角关闭按钮或者空白页 */ + command: "cancel" | "sure" | "close"; +}; + +/** https://element-plus.org/zh-CN/component/dialog.html#attributes */ +type DialogProps = { + /** `Dialog` 的显示与隐藏 */ + visible?: boolean; + /** `Dialog` 的标题 */ + title?: string; + /** `Dialog` 的宽度,默认 `50%` */ + width?: string | number; + /** 是否为全屏 `Dialog`(会一直处于全屏状态,除非弹框关闭),默认 `false`,`fullscreen` 和 `fullscreenIcon` 都传时只有 `fullscreen` 会生效 */ + fullscreen?: boolean; + /** 是否显示全屏操作图标,默认 `false`,`fullscreen` 和 `fullscreenIcon` 都传时只有 `fullscreen` 会生效 */ + fullscreenIcon?: boolean; + /** `Dialog CSS` 中的 `margin-top` 值,默认 `15vh` */ + top?: string; + /** 是否需要遮罩层,默认 `true` */ + modal?: boolean; + /** `Dialog` 自身是否插入至 `body` 元素上。嵌套的 `Dialog` 必须指定该属性并赋值为 `true`,默认 `false` */ + appendToBody?: boolean; + /** 是否在 `Dialog` 出现时将 `body` 滚动锁定,默认 `true` */ + lockScroll?: boolean; + /** `Dialog` 的自定义类名 */ + class?: string; + /** `Dialog` 的自定义样式 */ + style?: CSSProperties; + /** `Dialog` 打开的延时时间,单位毫秒,默认 `0` */ + openDelay?: number; + /** `Dialog` 关闭的延时时间,单位毫秒,默认 `0` */ + closeDelay?: number; + /** 是否可以通过点击 `modal` 关闭 `Dialog`,默认 `true` */ + closeOnClickModal?: boolean; + /** 是否可以通过按下 `ESC` 关闭 `Dialog`,默认 `true` */ + closeOnPressEscape?: boolean; + /** 是否显示关闭按钮,默认 `true` */ + showClose?: boolean; + /** 关闭前的回调,会暂停 `Dialog` 的关闭. 回调函数内执行 `done` 参数方法的时候才是真正关闭对话框的时候 */ + beforeClose?: (done: DoneFn) => void; + /** 为 `Dialog` 启用可拖拽功能,默认 `false` */ + draggable?: boolean; + /** 是否让 `Dialog` 的 `header` 和 `footer` 部分居中排列,默认 `false` */ + center?: boolean; + /** 是否水平垂直对齐对话框,默认 `false` */ + alignCenter?: boolean; + /** 当关闭 `Dialog` 时,销毁其中的元素,默认 `false` */ + destroyOnClose?: boolean; +}; + +type BtnClickDialog = { + options?: DialogOptions; + index?: number; +}; +type BtnClickButton = { + btn?: ButtonProps; + index?: number; +}; +/** https://element-plus.org/zh-CN/component/button.html#button-attributes */ +type ButtonProps = { + /** 按钮文字 */ + label: string; + /** 按钮尺寸 */ + size?: "large" | "default" | "small"; + /** 按钮类型 */ + type?: "primary" | "success" | "warning" | "danger" | "info"; + /** 是否为朴素按钮,默认 `false` */ + plain?: boolean; + /** 是否为文字按钮,默认 `false` */ + text?: boolean; + /** 是否显示文字按钮背景颜色,默认 `false` */ + bg?: boolean; + /** 是否为链接按钮,默认 `false` */ + link?: boolean; + /** 是否为圆角按钮,默认 `false` */ + round?: boolean; + /** 是否为圆形按钮,默认 `false` */ + circle?: boolean; + /** 是否为加载中状态,默认 `false` */ + loading?: boolean; + /** 自定义加载中状态图标组件 */ + loadingIcon?: string | Component; + /** 按钮是否为禁用状态,默认 `false` */ + disabled?: boolean; + /** 图标组件 */ + icon?: string | Component; + /** 是否开启原生 `autofocus` 属性,默认 `false` */ + autofocus?: boolean; + /** 原生 `type` 属性,默认 `button` */ + nativeType?: "button" | "submit" | "reset"; + /** 自动在两个中文字符之间插入空格 */ + autoInsertSpace?: boolean; + /** 自定义按钮颜色, 并自动计算 `hover` 和 `active` 触发后的颜色 */ + color?: string; + /** `dark` 模式, 意味着自动设置 `color` 为 `dark` 模式的颜色,默认 `false` */ + dark?: boolean; + /** 自定义元素标签 */ + tag?: string | Component; + /** 点击按钮后触发的回调 */ + btnClick?: ({ + dialog, + button + }: { + /** 当前 `Dialog` 信息 */ + dialog: BtnClickDialog; + /** 当前 `button` 信息 */ + button: BtnClickButton; + }) => void; +}; + +interface DialogOptions extends DialogProps { + /** 内容区组件的 `props`,可通过 `defineProps` 接收 */ + props?: any; + /** 是否隐藏 `Dialog` 按钮操作区的内容 */ + hideFooter?: boolean; + /** + * @description 自定义对话框标题的内容渲染器 + * @see {@link https://element-plus.org/zh-CN/component/dialog.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%A4%B4%E9%83%A8} + */ + headerRenderer?: ({ + close, + titleId, + titleClass + }: { + close: Function; + titleId: string; + titleClass: string; + }) => VNode | Component; + /** 自定义内容渲染器 */ + contentRenderer?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => VNode | Component; + /** 自定义按钮操作区的内容渲染器,会覆盖`footerButtons`以及默认的 `取消` 和 `确定` 按钮 */ + footerRenderer?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => VNode | Component; + /** 自定义底部按钮操作 */ + footerButtons?: Array; + /** `Dialog` 打开后的回调 */ + open?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => void; + /** `Dialog` 关闭后的回调(只有点击右上角关闭按钮或者空白页关闭页面时才会触发) */ + close?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => void; + /** `Dialog` 关闭后的回调。 `args` 返回的 `command` 值解析:`cancel` 点击取消按钮、`sure` 点击确定按钮、`close` 点击右上角关闭按钮或者空白页 */ + closeCallBack?: ({ + options, + index, + args + }: { + options: DialogOptions; + index: number; + args: any; + }) => void; + /** 输入焦点聚焦在 `Dialog` 内容时的回调 */ + openAutoFocus?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => void; + /** 输入焦点从 `Dialog` 内容失焦时的回调 */ + closeAutoFocus?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => void; + /** 点击底部取消按钮的回调,会暂停 `Dialog` 的关闭. 回调函数内执行 `done` 参数方法的时候才是真正关闭对话框的时候 */ + beforeCancel?: ( + done: Function, + { + options, + index + }: { + options: DialogOptions; + index: number; + } + ) => void; + /** 点击底部确定按钮的回调,会暂停 `Dialog` 的关闭. 回调函数内执行 `done` 参数方法的时候才是真正关闭对话框的时候 */ + beforeSure?: ( + done: Function, + { + options, + index + }: { + options: DialogOptions; + index: number; + } + ) => void; +} + +export type { EventType, ArgsType, DialogProps, ButtonProps, DialogOptions }; diff --git a/src/components/ReIcon/data.ts b/src/components/ReIcon/data.ts new file mode 100644 index 0000000..8ec5919 --- /dev/null +++ b/src/components/ReIcon/data.ts @@ -0,0 +1,1961 @@ +export const IconJson = { + "ep:": [ + "add-location", + "aim", + "alarm-clock", + "apple", + "arrow-down", + "arrow-down-bold", + "arrow-left", + "arrow-left-bold", + "arrow-right", + "arrow-right-bold", + "arrow-up", + "arrow-up-bold", + "avatar", + "back", + "baseball", + "basketball", + "bell", + "bell-filled", + "bicycle", + "bottom", + "bottom-left", + "bottom-right", + "bowl", + "box", + "briefcase", + "brush", + "brush-filled", + "burger", + "calendar", + "camera", + "camera-filled", + "caret-bottom", + "caret-left", + "caret-right", + "caret-top", + "cellphone", + "chat-dot-round", + "chat-dot-square", + "chat-line-round", + "chat-line-square", + "chat-round", + "chat-square", + "check", + "checked", + "cherry", + "chicken", + "circle-check", + "circle-check-filled", + "circle-close", + "circle-close-filled", + "circle-plus", + "circle-plus-filled", + "clock", + "close", + "close-bold", + "cloudy", + "coffee", + "coffee-cup", + "coin", + "cold-drink", + "collection", + "collection-tag", + "comment", + "compass", + "connection", + "coordinate", + "copy-document", + "cpu", + "credit-card", + "crop", + "d-arrow-left", + "d-arrow-right", + "d-caret", + "data-analysis", + "data-board", + "data-line", + "delete", + "delete-filled", + "delete-location", + "dessert", + "discount", + "dish", + "dish-dot", + "document", + "document-add", + "document-checked", + "document-copy", + "document-delete", + "document-remove", + "download", + "drizzling", + "edit", + "edit-pen", + "eleme", + "eleme-filled", + "expand", + "failed", + "female", + "files", + "film", + "filter", + "finished", + "first-aid-kit", + "flag", + "fold", + "folder", + "folder-add", + "folder-checked", + "folder-delete", + "folder-opened", + "folder-remove", + "food", + "football", + "fork-spoon", + "fries", + "full-screen", + "goblet", + "goblet-full", + "goblet-square", + "goblet-square-full", + "goods", + "goods-filled", + "grape", + "grid", + "guide", + "headset", + "help", + "help-filled", + "histogram", + "home-filled", + "hot-water", + "house", + "ice-cream", + "ice-cream-round", + "ice-cream-square", + "ice-drink", + "ice-tea", + "info-filled", + "iphone", + "key", + "knife-fork", + "lightning", + "link", + "list", + "loading", + "location", + "location-filled", + "location-information", + "lock", + "lollipop", + "magic-stick", + "magnet", + "male", + "management", + "map-location", + "medal", + "menu", + "message", + "message-box", + "mic", + "microphone", + "milk-tea", + "minus", + "money", + "monitor", + "moon", + "moon-night", + "more", + "more-filled", + "mostly-cloudy", + "mouse", + "mug", + "mute", + "mute-notification", + "no-smoking", + "notebook", + "notification", + "odometer", + "office-building", + "open", + "operation", + "opportunity", + "orange", + "paperclip", + "partly-cloudy", + "pear", + "phone", + "phone-filled", + "picture", + "picture-filled", + "picture-rounded", + "pie-chart", + "place", + "platform", + "plus", + "pointer", + "position", + "postcard", + "pouring", + "present", + "price-tag", + "printer", + "promotion", + "question-filled", + "rank", + "reading", + "reading-lamp", + "refresh", + "refresh-left", + "refresh-right", + "refrigerator", + "remove", + "remove-filled", + "right", + "scale-to-original", + "school", + "scissor", + "search", + "select", + "sell", + "semi-select", + "service", + "set-up", + "setting", + "share", + "ship", + "shop", + "shopping-bag", + "shopping-cart", + "shopping-cart-full", + "smoking", + "soccer", + "sold-out", + "sort", + "sort-down", + "sort-up", + "stamp", + "star", + "star-filled", + "stopwatch", + "success-filled", + "sugar", + "suitcase", + "sunny", + "sunrise", + "sunset", + "switch", + "switch-button", + "takeaway-box", + "ticket", + "tickets", + "timer", + "toilet-paper", + "tools", + "top", + "top-left", + "top-right", + "trend-charts", + "trophy", + "turn-off", + "umbrella", + "unlock", + "upload", + "upload-filled", + "user", + "user-filled", + "van", + "video-camera", + "video-camera-filled", + "video-pause", + "video-play", + "view", + "wallet", + "wallet-filled", + "warning", + "warning-filled", + "watch", + "watermelon", + "wind-power", + "zoom-in", + "zoom-out" + ], + "fa:": [ + "500px", + "address-book", + "address-book-o", + "address-card", + "address-card-o", + "adjust", + "adn", + "align-center", + "align-justify", + "align-left", + "amazon", + "ambulance", + "american-sign-language-interpreting", + "anchor", + "android", + "angellist", + "angle-double-left", + "angle-double-up", + "angle-down", + "angle-left", + "angle-up", + "apple", + "archive", + "area-chart", + "arrow-circle-left", + "arrow-circle-o-left", + "arrow-circle-o-up", + "arrow-circle-up", + "arrow-left", + "arrow-up", + "arrows", + "arrows-alt", + "arrows-h", + "arrows-v", + "assistive-listening-systems", + "asterisk", + "at", + "audio-description", + "automobile", + "backward", + "balance-scale", + "ban", + "bandcamp", + "bank", + "bar-chart", + "barcode", + "bars", + "bath", + "battery", + "battery-0", + "battery-1", + "battery-2", + "battery-3", + "bed", + "beer", + "behance", + "behance-square", + "bell", + "bell-o", + "bell-slash", + "bell-slash-o", + "bicycle", + "binoculars", + "birthday-cake", + "bitbucket", + "bitbucket-square", + "bitcoin", + "black-tie", + "blind", + "bluetooth", + "bluetooth-b", + "bold", + "bolt", + "bomb", + "book", + "bookmark", + "bookmark-o", + "braille", + "briefcase", + "bug", + "building", + "building-o", + "bullhorn", + "bullseye", + "bus", + "buysellads", + "cab", + "calculator", + "calendar", + "calendar-check-o", + "calendar-minus-o", + "calendar-o", + "calendar-plus-o", + "calendar-times-o", + "camera", + "camera-retro", + "caret-down", + "caret-left", + "caret-square-o-left", + "caret-square-o-up", + "caret-up", + "cart-arrow-down", + "cart-plus", + "cc", + "cc-amex", + "cc-diners-club", + "cc-discover", + "cc-jcb", + "cc-mastercard", + "cc-paypal", + "cc-stripe", + "cc-visa", + "certificate", + "chain", + "chain-broken", + "check", + "check-circle", + "check-circle-o", + "check-square", + "check-square-o", + "chevron-circle-left", + "chevron-circle-up", + "chevron-down", + "chevron-left", + "chevron-up", + "child", + "chrome", + "circle", + "circle-o", + "circle-o-notch", + "circle-thin", + "clipboard", + "clock-o", + "clone", + "close", + "cloud", + "cloud-download", + "cloud-upload", + "cny", + "code", + "code-fork", + "codepen", + "codiepie", + "coffee", + "cog", + "cogs", + "columns", + "comment", + "comment-o", + "commenting", + "commenting-o", + "comments", + "comments-o", + "compass", + "compress", + "connectdevelop", + "contao", + "copy", + "copyright", + "creative-commons", + "credit-card", + "credit-card-alt", + "crop", + "crosshairs", + "css3", + "cube", + "cubes", + "cut", + "cutlery", + "dashboard", + "dashcube", + "database", + "deaf", + "dedent", + "delicious", + "desktop", + "deviantart", + "diamond", + "digg", + "dollar", + "dot-circle-o", + "download", + "dribbble", + "drivers-license", + "drivers-license-o", + "dropbox", + "drupal", + "edge", + "edit", + "eercast", + "eject", + "ellipsis-h", + "ellipsis-v", + "empire", + "envelope", + "envelope-o", + "envelope-open", + "envelope-open-o", + "envelope-square", + "envira", + "eraser", + "etsy", + "eur", + "exchange", + "exclamation", + "exclamation-circle", + "exclamation-triangle", + "expand", + "expeditedssl", + "external-link", + "external-link-square", + "eye", + "eye-slash", + "eyedropper", + "fa", + "facebook", + "facebook-official", + "facebook-square", + "fast-backward", + "fax", + "feed", + "female", + "fighter-jet", + "file", + "file-archive-o", + "file-audio-o", + "file-code-o", + "file-excel-o", + "file-image-o", + "file-movie-o", + "file-o", + "file-pdf-o", + "file-powerpoint-o", + "file-text", + "file-text-o", + "file-word-o", + "film", + "filter", + "fire", + "fire-extinguisher", + "firefox", + "first-order", + "flag", + "flag-checkered", + "flag-o", + "flask", + "flickr", + "floppy-o", + "folder", + "folder-o", + "folder-open", + "folder-open-o", + "font", + "fonticons", + "fort-awesome", + "forumbee", + "foursquare", + "free-code-camp", + "frown-o", + "futbol-o", + "gamepad", + "gavel", + "gbp", + "genderless", + "get-pocket", + "gg", + "gg-circle", + "gift", + "git", + "git-square", + "github", + "github-alt", + "github-square", + "gitlab", + "gittip", + "glass", + "glide", + "glide-g", + "globe", + "google", + "google-plus", + "google-plus-circle", + "google-plus-square", + "google-wallet", + "graduation-cap", + "grav", + "group", + "h-square", + "hacker-news", + "hand-grab-o", + "hand-lizard-o", + "hand-o-left", + "hand-o-up", + "hand-paper-o", + "hand-peace-o", + "hand-pointer-o", + "hand-scissors-o", + "hand-spock-o", + "handshake-o", + "hashtag", + "hdd-o", + "header", + "headphones", + "heart", + "heart-o", + "heartbeat", + "history", + "home", + "hospital-o", + "hourglass", + "hourglass-1", + "hourglass-2", + "hourglass-3", + "hourglass-o", + "houzz", + "html5", + "i-cursor", + "id-badge", + "ils", + "image", + "imdb", + "inbox", + "indent", + "industry", + "info", + "info-circle", + "inr", + "instagram", + "internet-explorer", + "intersex", + "ioxhost", + "italic", + "joomla", + "jsfiddle", + "key", + "keyboard-o", + "krw", + "language", + "laptop", + "lastfm", + "lastfm-square", + "leaf", + "leanpub", + "lemon-o", + "level-up", + "life-bouy", + "lightbulb-o", + "line-chart", + "linkedin", + "linkedin-square", + "linode", + "linux", + "list", + "list-alt", + "list-ol", + "list-ul", + "location-arrow", + "lock", + "long-arrow-left", + "long-arrow-up", + "low-vision", + "magic", + "magnet", + "mail-forward", + "mail-reply", + "mail-reply-all", + "male", + "map", + "map-marker", + "map-o", + "map-pin", + "map-signs", + "mars", + "mars-double", + "mars-stroke", + "mars-stroke-h", + "mars-stroke-v", + "maxcdn", + "meanpath", + "medium", + "medkit", + "meetup", + "meh-o", + "mercury", + "microchip", + "microphone", + "microphone-slash", + "minus", + "minus-circle", + "minus-square", + "minus-square-o", + "mixcloud", + "mobile", + "modx", + "money", + "moon-o", + "motorcycle", + "mouse-pointer", + "music", + "neuter", + "newspaper-o", + "object-group", + "object-ungroup", + "odnoklassniki", + "odnoklassniki-square", + "opencart", + "openid", + "opera", + "optin-monster", + "pagelines", + "paint-brush", + "paper-plane", + "paper-plane-o", + "paperclip", + "paragraph", + "pause", + "pause-circle", + "pause-circle-o", + "paw", + "paypal", + "pencil", + "pencil-square", + "percent", + "phone", + "phone-square", + "pie-chart", + "pied-piper", + "pied-piper-alt", + "pied-piper-pp", + "pinterest", + "pinterest-p", + "pinterest-square", + "plane", + "play", + "play-circle", + "play-circle-o", + "plug", + "plus", + "plus-circle", + "plus-square", + "plus-square-o", + "podcast", + "power-off", + "print", + "product-hunt", + "puzzle-piece", + "qq", + "qrcode", + "question", + "question-circle", + "question-circle-o", + "quora", + "quote-left", + "quote-right", + "ra", + "random", + "ravelry", + "recycle", + "reddit", + "reddit-alien", + "reddit-square", + "refresh", + "registered", + "renren", + "repeat", + "retweet", + "road", + "rocket", + "rotate-left", + "rouble", + "rss-square", + "safari", + "scribd", + "search", + "search-minus", + "search-plus", + "sellsy", + "server", + "share-alt", + "share-alt-square", + "share-square", + "share-square-o", + "shield", + "ship", + "shirtsinbulk", + "shopping-bag", + "shopping-basket", + "shopping-cart", + "shower", + "sign-in", + "sign-language", + "sign-out", + "signal", + "simplybuilt", + "sitemap", + "skyatlas", + "skype", + "slack", + "sliders", + "slideshare", + "smile-o", + "snapchat", + "snapchat-ghost", + "snapchat-square", + "snowflake-o", + "sort", + "sort-alpha-asc", + "sort-alpha-desc", + "sort-amount-asc", + "sort-amount-desc", + "sort-asc", + "sort-numeric-asc", + "sort-numeric-desc", + "soundcloud", + "space-shuttle", + "spinner", + "spoon", + "spotify", + "square", + "square-o", + "stack-exchange", + "stack-overflow", + "star", + "star-half", + "star-half-empty", + "star-o", + "steam", + "steam-square", + "step-backward", + "stethoscope", + "sticky-note", + "sticky-note-o", + "stop", + "stop-circle", + "stop-circle-o", + "street-view", + "strikethrough", + "stumbleupon", + "stumbleupon-circle", + "subscript", + "subway", + "suitcase", + "sun-o", + "superpowers", + "superscript", + "table", + "tablet", + "tag", + "tags", + "tasks", + "telegram", + "television", + "tencent-weibo", + "terminal", + "text-height", + "text-width", + "th", + "th-large", + "th-list", + "themeisle", + "thermometer", + "thermometer-0", + "thermometer-1", + "thermometer-2", + "thermometer-3", + "thumb-tack", + "thumbs-down", + "thumbs-o-up", + "thumbs-up", + "ticket", + "times-circle", + "times-circle-o", + "times-rectangle", + "times-rectangle-o", + "tint", + "toggle-off", + "toggle-on", + "trademark", + "train", + "transgender-alt", + "trash", + "trash-o", + "tree", + "trello", + "tripadvisor", + "trophy", + "truck", + "try", + "tty", + "tumblr", + "tumblr-square", + "twitch", + "twitter", + "twitter-square", + "umbrella", + "underline", + "universal-access", + "unlock", + "unlock-alt", + "upload", + "usb", + "user", + "user-circle", + "user-circle-o", + "user-md", + "user-o", + "user-plus", + "user-secret", + "user-times", + "venus", + "venus-double", + "venus-mars", + "viacoin", + "viadeo", + "viadeo-square", + "video-camera", + "vimeo", + "vimeo-square", + "vine", + "vk", + "volume-control-phone", + "volume-down", + "volume-off", + "volume-up", + "wechat", + "weibo", + "whatsapp", + "wheelchair", + "wheelchair-alt", + "wifi", + "wikipedia-w", + "window-maximize", + "window-minimize", + "window-restore", + "windows", + "wordpress", + "wpbeginner", + "wpexplorer", + "wpforms", + "wrench", + "xing", + "xing-square", + "y-combinator", + "yahoo", + "yelp", + "yoast", + "youtube", + "youtube-play", + "youtube-square" + ], + "fa-solid:": [ + "abacus", + "ad", + "address-book", + "address-card", + "adjust", + "air-freshener", + "align-center", + "align-justify", + "align-left", + "align-right", + "allergies", + "ambulance", + "american-sign-language-interpreting", + "anchor", + "angle-double-down", + "angle-double-left", + "angle-double-right", + "angle-double-up", + "angle-down", + "angle-left", + "angle-right", + "angle-up", + "angry", + "ankh", + "apple-alt", + "archive", + "archway", + "arrow-alt-circle-down", + "arrow-alt-circle-left", + "arrow-alt-circle-right", + "arrow-alt-circle-up", + "arrow-circle-down", + "arrow-circle-left", + "arrow-circle-right", + "arrow-circle-up", + "arrow-down", + "arrow-left", + "arrow-right", + "arrow-up", + "arrows-alt", + "arrows-alt-h", + "arrows-alt-v", + "assistive-listening-systems", + "asterisk", + "at", + "atlas", + "atom", + "audio-description", + "award", + "baby", + "baby-carriage", + "backspace", + "backward", + "bacon", + "bacteria", + "bacterium", + "bahai", + "balance-scale", + "balance-scale-left", + "balance-scale-right", + "ban", + "band-aid", + "barcode", + "bars", + "baseball-ball", + "basketball-ball", + "bath", + "battery-empty", + "battery-full", + "battery-half", + "battery-quarter", + "battery-three-quarters", + "bed", + "beer", + "bell", + "bell-slash", + "bezier-curve", + "bible", + "bicycle", + "biking", + "binoculars", + "biohazard", + "birthday-cake", + "blender", + "blender-phone", + "blind", + "blog", + "bold", + "bolt", + "bomb", + "bone", + "bong", + "book", + "book-dead", + "book-medical", + "book-open", + "book-reader", + "bookmark", + "border-all", + "border-none", + "border-style", + "bowling-ball", + "box", + "box-open", + "box-tissue", + "boxes", + "braille", + "brain", + "bread-slice", + "briefcase", + "briefcase-medical", + "broadcast-tower", + "broom", + "brush", + "bug", + "building", + "bullhorn", + "bullseye", + "burn", + "bus", + "bus-alt", + "business-time", + "calculator", + "calculator-alt", + "calendar", + "calendar-alt", + "calendar-check", + "calendar-day", + "calendar-minus", + "calendar-plus", + "calendar-times", + "calendar-week", + "camera", + "camera-retro", + "campground", + "candy-cane", + "cannabis", + "capsules", + "car", + "car-alt", + "car-battery", + "car-crash", + "car-side", + "caravan", + "caret-down", + "caret-left", + "caret-right", + "caret-square-down", + "caret-square-left", + "caret-square-right", + "caret-square-up", + "caret-up", + "carrot", + "cart-arrow-down", + "cart-plus", + "cash-register", + "cat", + "certificate", + "chair", + "chalkboard", + "chalkboard-teacher", + "charging-station", + "chart-area", + "chart-bar", + "chart-line", + "chart-pie", + "check", + "check-circle", + "check-double", + "check-square", + "cheese", + "chess", + "chess-bishop", + "chess-board", + "chess-king", + "chess-knight", + "chess-pawn", + "chess-queen", + "chess-rook", + "chevron-circle-down", + "chevron-circle-left", + "chevron-circle-right", + "chevron-circle-up", + "chevron-down", + "chevron-left", + "chevron-right", + "chevron-up", + "child", + "church", + "circle", + "circle-notch", + "city", + "clinic-medical", + "clipboard", + "clipboard-check", + "clipboard-list", + "clock", + "clone", + "closed-captioning", + "cloud", + "cloud-download-alt", + "cloud-meatball", + "cloud-moon", + "cloud-moon-rain", + "cloud-rain", + "cloud-showers-heavy", + "cloud-sun", + "cloud-sun-rain", + "cloud-upload-alt", + "cocktail", + "code", + "code-branch", + "coffee", + "cog", + "cogs", + "coins", + "columns", + "comment", + "comment-alt", + "comment-dollar", + "comment-dots", + "comment-medical", + "comment-slash", + "comments", + "comments-dollar", + "compact-disc", + "compass", + "compress", + "compress-alt", + "compress-arrows-alt", + "concierge-bell", + "cookie", + "cookie-bite", + "copy", + "copyright", + "couch", + "credit-card", + "crop", + "crop-alt", + "cross", + "crosshairs", + "crow", + "crown", + "crutch", + "cube", + "cubes", + "cut", + "database", + "deaf", + "democrat", + "desktop", + "dharmachakra", + "diagnoses", + "dice", + "dice-d20", + "dice-d6", + "dice-five", + "dice-four", + "dice-one", + "dice-six", + "dice-three", + "dice-two", + "digital-tachograph", + "directions", + "disease", + "divide", + "dizzy", + "dna", + "dog", + "dollar-sign", + "dolly", + "dolly-flatbed", + "donate", + "door-closed", + "door-open", + "dot-circle", + "dove", + "download", + "drafting-compass", + "dragon", + "draw-polygon", + "drum", + "drum-steelpan", + "drumstick-bite", + "dumbbell", + "dumpster", + "dumpster-fire", + "dungeon", + "edit", + "egg", + "eject", + "ellipsis-h", + "ellipsis-v", + "empty-set", + "envelope", + "envelope-open", + "envelope-open-text", + "envelope-square", + "equals", + "eraser", + "ethernet", + "euro-sign", + "exchange-alt", + "exclamation", + "exclamation-circle", + "exclamation-triangle", + "expand", + "expand-alt", + "expand-arrows-alt", + "external-link-alt", + "external-link-square-alt", + "eye", + "eye-dropper", + "eye-slash", + "fan", + "fast-backward", + "fast-forward", + "faucet", + "fax", + "feather", + "feather-alt", + "female", + "fighter-jet", + "file", + "file-alt", + "file-archive", + "file-audio", + "file-code", + "file-contract", + "file-csv", + "file-download", + "file-excel", + "file-export", + "file-image", + "file-import", + "file-invoice", + "file-invoice-dollar", + "file-medical", + "file-medical-alt", + "file-pdf", + "file-powerpoint", + "file-prescription", + "file-signature", + "file-upload", + "file-video", + "file-word", + "fill", + "fill-drip", + "film", + "filter", + "fingerprint", + "fire", + "fire-alt", + "fire-extinguisher", + "first-aid", + "fish", + "fist-raised", + "flag", + "flag-checkered", + "flag-usa", + "flask", + "flushed", + "folder", + "folder-minus", + "folder-open", + "folder-plus", + "font", + "football-ball", + "forward", + "frog", + "frown", + "frown-open", + "function", + "funnel-dollar", + "futbol", + "gamepad", + "gas-pump", + "gavel", + "gem", + "genderless", + "ghost", + "gift", + "gifts", + "glass-cheers", + "glass-martini", + "glass-martini-alt", + "glass-whiskey", + "glasses", + "globe", + "globe-africa", + "globe-americas", + "globe-asia", + "globe-europe", + "golf-ball", + "gopuram", + "graduation-cap", + "greater-than", + "greater-than-equal", + "grimace", + "grin", + "grin-alt", + "grin-beam", + "grin-beam-sweat", + "grin-hearts", + "grin-squint", + "grin-squint-tears", + "grin-stars", + "grin-tears", + "grin-tongue", + "grin-tongue-squint", + "grin-tongue-wink", + "grin-wink", + "grip-horizontal", + "grip-lines", + "grip-lines-vertical", + "grip-vertical", + "guitar", + "h-square", + "hamburger", + "hammer", + "hamsa", + "hand-holding", + "hand-holding-heart", + "hand-holding-medical", + "hand-holding-usd", + "hand-holding-water", + "hand-lizard", + "hand-middle-finger", + "hand-paper", + "hand-peace", + "hand-point-down", + "hand-point-left", + "hand-point-right", + "hand-point-up", + "hand-pointer", + "hand-rock", + "hand-scissors", + "hand-sparkles", + "hand-spock", + "hands", + "hands-helping", + "hands-wash", + "handshake", + "handshake-alt-slash", + "handshake-slash", + "hanukiah", + "hard-hat", + "hashtag", + "hat-cowboy", + "hat-cowboy-side", + "hat-wizard", + "hdd", + "head-side-cough", + "head-side-cough-slash", + "head-side-mask", + "head-side-virus", + "heading", + "headphones", + "headphones-alt", + "headset", + "heart", + "heart-broken", + "heartbeat", + "helicopter", + "highlighter", + "hiking", + "hippo", + "history", + "hockey-puck", + "holly-berry", + "home", + "horse", + "horse-head", + "hospital", + "hospital-alt", + "hospital-symbol", + "hospital-user", + "hot-tub", + "hotdog", + "hotel", + "hourglass", + "hourglass-end", + "hourglass-half", + "hourglass-start", + "house-damage", + "house-user", + "hryvnia", + "i-cursor", + "ice-cream", + "icicles", + "icons", + "id-badge", + "id-card", + "id-card-alt", + "igloo", + "image", + "images", + "inbox", + "indent", + "industry", + "infinity", + "info", + "info-circle", + "integral", + "intersection", + "italic", + "jedi", + "joint", + "journal-whills", + "kaaba", + "key", + "keyboard", + "khanda", + "kiss", + "kiss-beam", + "kiss-wink-heart", + "kiwi-bird", + "lambda", + "landmark", + "language", + "laptop", + "laptop-code", + "laptop-house", + "laptop-medical", + "laugh", + "laugh-beam", + "laugh-squint", + "laugh-wink", + "layer-group", + "leaf", + "lemon", + "less-than", + "less-than-equal", + "level-down-alt", + "level-up-alt", + "life-ring", + "lightbulb", + "link", + "lira-sign", + "list", + "list-alt", + "list-ol", + "list-ul", + "location-arrow", + "lock", + "lock-open", + "long-arrow-alt-down", + "long-arrow-alt-left", + "long-arrow-alt-right", + "long-arrow-alt-up", + "low-vision", + "luggage-cart", + "lungs", + "lungs-virus", + "magic", + "magnet", + "mail-bulk", + "male", + "map", + "map-marked", + "map-marked-alt", + "map-marker", + "map-marker-alt", + "map-pin", + "map-signs", + "marker", + "mars", + "mars-double", + "mars-stroke", + "mars-stroke-h", + "mars-stroke-v", + "mask", + "medal", + "medkit", + "meh", + "meh-blank", + "meh-rolling-eyes", + "memory", + "menorah", + "mercury", + "meteor", + "microchip", + "microphone", + "microphone-alt", + "microphone-alt-slash", + "microphone-slash", + "microscope", + "minus", + "minus-circle", + "minus-square", + "mitten", + "mobile", + "mobile-alt", + "money-bill", + "money-bill-alt", + "money-bill-wave", + "money-bill-wave-alt", + "money-check", + "money-check-alt", + "monument", + "moon", + "mortar-pestle", + "mosque", + "motorcycle", + "mountain", + "mouse", + "mouse-pointer", + "mug-hot", + "music", + "network-wired", + "neuter", + "newspaper", + "not-equal", + "notes-medical", + "object-group", + "object-ungroup", + "oil-can", + "om", + "omega", + "otter", + "outdent", + "pager", + "paint-brush", + "paint-roller", + "palette", + "pallet", + "paper-plane", + "paperclip", + "parachute-box", + "paragraph", + "parking", + "passport", + "pastafarianism", + "paste", + "pause", + "pause-circle", + "paw", + "peace", + "pen", + "pen-alt", + "pen-fancy", + "pen-nib", + "pen-square", + "pencil-alt", + "pencil-ruler", + "people-arrows", + "people-carry", + "pepper-hot", + "percent", + "percentage", + "person-booth", + "phone", + "phone-alt", + "phone-slash", + "phone-square", + "phone-square-alt", + "phone-volume", + "photo-video", + "pi", + "piggy-bank", + "pills", + "pizza-slice", + "place-of-worship", + "plane", + "plane-arrival", + "plane-departure", + "plane-slash", + "play", + "play-circle", + "plug", + "plus", + "plus-circle", + "plus-square", + "podcast", + "poll", + "poll-h", + "poo", + "poo-storm", + "poop", + "portrait", + "pound-sign", + "power-off", + "pray", + "praying-hands", + "prescription", + "prescription-bottle", + "prescription-bottle-alt", + "print", + "procedures", + "project-diagram", + "pump-medical", + "pump-soap", + "puzzle-piece", + "qrcode", + "question", + "question-circle", + "quidditch", + "quote-left", + "quote-right", + "quran", + "radiation", + "radiation-alt", + "rainbow", + "random", + "receipt", + "record-vinyl", + "recycle", + "redo", + "redo-alt", + "registered", + "remove-format", + "reply", + "reply-all", + "republican", + "restroom", + "retweet", + "ribbon", + "ring", + "road", + "robot", + "rocket", + "route", + "rss", + "rss-square", + "ruble-sign", + "ruler", + "ruler-combined", + "ruler-horizontal", + "ruler-vertical", + "running", + "rupee-sign", + "sad-cry", + "sad-tear", + "satellite", + "satellite-dish", + "save", + "school", + "screwdriver", + "scroll", + "sd-card", + "search", + "search-dollar", + "search-location", + "search-minus", + "search-plus", + "seedling", + "server", + "shapes", + "share", + "share-alt", + "share-alt-square", + "share-square", + "shekel-sign", + "shield-alt", + "shield-virus", + "ship", + "shipping-fast", + "shoe-prints", + "shopping-bag", + "shopping-basket", + "shopping-cart", + "shower", + "shuttle-van", + "sigma", + "sign", + "sign-in-alt", + "sign-language", + "sign-out-alt", + "signal", + "signal-alt", + "signal-alt-slash", + "signal-slash", + "signature", + "sim-card", + "sink", + "sitemap", + "skating", + "skiing", + "skiing-nordic", + "skull", + "skull-crossbones", + "slash", + "sleigh", + "sliders-h", + "smile", + "smile-beam", + "smile-wink", + "smog", + "smoking", + "smoking-ban", + "sms", + "snowboarding", + "snowflake", + "snowman", + "snowplow", + "soap", + "socks", + "solar-panel", + "sort", + "sort-alpha-down", + "sort-alpha-down-alt", + "sort-alpha-up", + "sort-alpha-up-alt", + "sort-amount-down", + "sort-amount-down-alt", + "sort-amount-up", + "sort-amount-up-alt", + "sort-down", + "sort-numeric-down", + "sort-numeric-down-alt", + "sort-numeric-up", + "sort-numeric-up-alt", + "sort-up", + "spa", + "space-shuttle", + "spell-check", + "spider", + "spinner", + "splotch", + "spray-can", + "square", + "square-full", + "square-root", + "square-root-alt", + "stamp", + "star", + "star-and-crescent", + "star-half", + "star-half-alt", + "star-of-david", + "star-of-life", + "step-backward", + "step-forward", + "stethoscope", + "sticky-note", + "stop", + "stop-circle", + "stopwatch", + "stopwatch-20", + "store", + "store-alt", + "store-alt-slash", + "store-slash", + "stream", + "street-view", + "strikethrough", + "stroopwafel", + "subscript", + "subway", + "suitcase", + "suitcase-rolling", + "sun", + "superscript", + "surprise", + "swatchbook", + "swimmer", + "swimming-pool", + "synagogue", + "sync", + "sync-alt", + "syringe", + "table", + "table-tennis", + "tablet", + "tablet-alt", + "tablets", + "tachometer-alt", + "tag", + "tags", + "tally", + "tape", + "tasks", + "taxi", + "teeth", + "teeth-open", + "temperature-high", + "temperature-low", + "tenge", + "terminal", + "text-height", + "text-width", + "th", + "th-large", + "th-list", + "theater-masks", + "thermometer", + "thermometer-empty", + "thermometer-full", + "thermometer-half", + "thermometer-quarter", + "thermometer-three-quarters", + "theta", + "thumbs-down", + "thumbs-up", + "thumbtack", + "ticket-alt", + "tilde", + "times", + "times-circle", + "tint", + "tint-slash", + "tired", + "toggle-off", + "toggle-on", + "toilet", + "toilet-paper", + "toilet-paper-slash", + "toolbox", + "tools", + "tooth", + "torah", + "torii-gate", + "tractor", + "trademark", + "traffic-light", + "trailer", + "train", + "tram", + "transgender", + "transgender-alt", + "trash", + "trash-alt", + "trash-restore", + "trash-restore-alt", + "tree", + "trophy", + "truck", + "truck-loading", + "truck-monster", + "truck-moving", + "truck-pickup", + "tshirt", + "tty", + "tv", + "umbrella", + "umbrella-beach", + "underline", + "undo", + "undo-alt", + "union", + "universal-access", + "university", + "unlink", + "unlock", + "unlock-alt", + "upload", + "user", + "user-alt", + "user-alt-slash", + "user-astronaut", + "user-check", + "user-circle", + "user-clock", + "user-cog", + "user-edit", + "user-friends", + "user-graduate", + "user-injured", + "user-lock", + "user-md", + "user-minus", + "user-ninja", + "user-nurse", + "user-plus", + "user-secret", + "user-shield", + "user-slash", + "user-tag", + "user-tie", + "user-times", + "users", + "users-cog", + "users-slash", + "utensil-spoon", + "utensils", + "value-absolute", + "vector-square", + "venus", + "venus-double", + "venus-mars", + "vest", + "vest-patches", + "vial", + "vials", + "video", + "video-slash", + "vihara", + "virus", + "virus-slash", + "viruses", + "voicemail", + "volleyball-ball", + "volume", + "volume-down", + "volume-mute", + "volume-off", + "volume-slash", + "volume-up", + "vote-yea", + "vr-cardboard", + "walking", + "wallet", + "warehouse", + "water", + "wave-square", + "weight", + "weight-hanging", + "wheelchair", + "wifi", + "wifi-slash", + "wind", + "window-close", + "window-maximize", + "window-minimize", + "window-restore", + "wine-bottle", + "wine-glass", + "wine-glass-alt", + "won-sign", + "wrench", + "x-ray", + "yen-sign", + "yin-yang" + ] +}; diff --git a/src/components/ReIcon/index.ts b/src/components/ReIcon/index.ts new file mode 100644 index 0000000..b9f8807 --- /dev/null +++ b/src/components/ReIcon/index.ts @@ -0,0 +1,12 @@ +import iconifyIconOffline from "./src/iconifyIconOffline"; +import iconifyIconOnline from "./src/iconifyIconOnline"; +import fontIcon from "./src/iconfont"; + +/** 本地图标组件 */ +const IconifyIconOffline = iconifyIconOffline; +/** 在线图标组件 */ +const IconifyIconOnline = iconifyIconOnline; +/** iconfont组件 */ +const FontIcon = fontIcon; + +export { IconifyIconOffline, IconifyIconOnline, FontIcon }; diff --git a/src/components/ReIcon/src/Select.vue b/src/components/ReIcon/src/Select.vue new file mode 100644 index 0000000..8457266 --- /dev/null +++ b/src/components/ReIcon/src/Select.vue @@ -0,0 +1,237 @@ + + + + + diff --git a/src/components/ReIcon/src/hooks.ts b/src/components/ReIcon/src/hooks.ts new file mode 100644 index 0000000..4f430a8 --- /dev/null +++ b/src/components/ReIcon/src/hooks.ts @@ -0,0 +1,61 @@ +import { iconType } from "./types"; +import { h, defineComponent, Component } from "vue"; +import { IconifyIconOnline, IconifyIconOffline, FontIcon } from "../index"; + +/** + * 支持 `iconfont`、自定义 `svg` 以及 `iconify` 中所有的图标 + * @see 点击查看文档图标篇 {@link https://yiming_chang.gitee.io/pure-admin-doc/pages/icon/} + * @param icon 必传 图标 + * @param attrs 可选 iconType 属性 + * @returns Component + */ +export function useRenderIcon(icon: any, attrs?: iconType): Component { + // iconfont + const ifReg = /^IF-/; + // typeof icon === "function" 属于SVG + if (ifReg.test(icon)) { + // iconfont + const name = icon.split(ifReg)[1]; + const iconName = name.slice( + 0, + name.indexOf(" ") == -1 ? name.length : name.indexOf(" ") + ); + const iconType = name.slice(name.indexOf(" ") + 1, name.length); + return defineComponent({ + name: "FontIcon", + render() { + return h(FontIcon, { + icon: iconName, + iconType, + ...attrs + }); + } + }); + } else if (typeof icon === "function" || typeof icon?.render === "function") { + // svg + return icon; + } else if (typeof icon === "object") { + return defineComponent({ + name: "OfflineIcon", + render() { + return h(IconifyIconOffline, { + icon: icon, + ...attrs + }); + } + }); + } else { + // 通过是否存在 : 符号来判断是在线还是本地图标,存在即是在线图标,反之 + return defineComponent({ + name: "Icon", + render() { + const IconifyIcon = + icon && icon.includes(":") ? IconifyIconOnline : IconifyIconOffline; + return h(IconifyIcon, { + icon: icon, + ...attrs + }); + } + }); + } +} diff --git a/src/components/ReIcon/src/iconfont.ts b/src/components/ReIcon/src/iconfont.ts new file mode 100644 index 0000000..c110451 --- /dev/null +++ b/src/components/ReIcon/src/iconfont.ts @@ -0,0 +1,48 @@ +import { h, defineComponent } from "vue"; + +// 封装iconfont组件,默认`font-class`引用模式,支持`unicode`引用、`font-class`引用、`symbol`引用 (https://www.iconfont.cn/help/detail?spm=a313x.7781069.1998910419.20&helptype=code) +export default defineComponent({ + name: "FontIcon", + props: { + icon: { + type: String, + default: "" + } + }, + render() { + const attrs = this.$attrs; + if (Object.keys(attrs).includes("uni") || attrs?.iconType === "uni") { + return h( + "i", + { + class: "iconfont", + ...attrs + }, + this.icon + ); + } else if ( + Object.keys(attrs).includes("svg") || + attrs?.iconType === "svg" + ) { + return h( + "svg", + { + class: "icon-svg", + "aria-hidden": true + }, + { + default: () => [ + h("use", { + "xlink:href": `#${this.icon}` + }) + ] + } + ); + } else { + return h("i", { + class: `iconfont ${this.icon}`, + ...attrs + }); + } + } +}); diff --git a/src/components/ReIcon/src/iconifyIconOffline.ts b/src/components/ReIcon/src/iconifyIconOffline.ts new file mode 100644 index 0000000..06a2a7c --- /dev/null +++ b/src/components/ReIcon/src/iconifyIconOffline.ts @@ -0,0 +1,30 @@ +import { h, defineComponent } from "vue"; +import { Icon as IconifyIcon, addIcon } from "@iconify/vue/dist/offline"; + +// Iconify Icon在Vue里本地使用(用于内网环境)https://docs.iconify.design/icon-components/vue/offline.html +export default defineComponent({ + name: "IconifyIconOffline", + components: { IconifyIcon }, + props: { + icon: { + default: null + } + }, + render() { + if (typeof this.icon === "object") addIcon(this.icon, this.icon); + const attrs = this.$attrs; + return h( + IconifyIcon, + { + icon: this.icon, + style: attrs?.style + ? Object.assign(attrs.style, { outline: "none" }) + : { outline: "none" }, + ...attrs + }, + { + default: () => [] + } + ); + } +}); diff --git a/src/components/ReIcon/src/iconifyIconOnline.ts b/src/components/ReIcon/src/iconifyIconOnline.ts new file mode 100644 index 0000000..a5f5822 --- /dev/null +++ b/src/components/ReIcon/src/iconifyIconOnline.ts @@ -0,0 +1,30 @@ +import { h, defineComponent } from "vue"; +import { Icon as IconifyIcon } from "@iconify/vue"; + +// Iconify Icon在Vue里在线使用(用于外网环境) +export default defineComponent({ + name: "IconifyIconOnline", + components: { IconifyIcon }, + props: { + icon: { + type: String, + default: "" + } + }, + render() { + const attrs = this.$attrs; + return h( + IconifyIcon, + { + icon: `${this.icon}`, + style: attrs?.style + ? Object.assign(attrs.style, { outline: "none" }) + : { outline: "none" }, + ...attrs + }, + { + default: () => [] + } + ); + } +}); diff --git a/src/components/ReIcon/src/offlineIcon.ts b/src/components/ReIcon/src/offlineIcon.ts new file mode 100644 index 0000000..ef31833 --- /dev/null +++ b/src/components/ReIcon/src/offlineIcon.ts @@ -0,0 +1,45 @@ +import { addIcon } from "@iconify/vue/dist/offline"; + +/** + * 这里存放本地图标,在 src/layout/index.vue 文件中加载,避免在首启动加载 + */ + +// 本地菜单图标,后端在路由的icon中返回对应的图标字符串并且前端在此处使用addIcon添加即可渲染菜单图标 +import UbuntuFill from "@iconify-icons/ri/ubuntu-fill"; +import Menu from "@iconify-icons/ep/menu"; +import Edit from "@iconify-icons/ep/edit"; +import InformationLine from "@iconify-icons/ri/information-line"; +import SetUp from "@iconify-icons/ep/set-up"; +import TerminalWindowLine from "@iconify-icons/ri/terminal-window-line"; +import Guide from "@iconify-icons/ep/guide"; +import HomeFilled from "@iconify-icons/ep/home-filled"; +import Card from "@iconify-icons/ri/bank-card-line"; +import ListCheck from "@iconify-icons/ri/list-check"; +import Histogram from "@iconify-icons/ep/histogram"; +import Ppt from "@iconify-icons/ri/file-ppt-2-line"; +import CheckboxCircleLine from "@iconify-icons/ri/checkbox-circle-line"; +import FlUser from "@iconify-icons/ri/admin-line"; +import Role from "@iconify-icons/ri/admin-fill"; +import Setting from "@iconify-icons/ri/settings-3-line"; +import Dept from "@iconify-icons/ri/git-branch-line"; +import Lollipop from "@iconify-icons/ep/lollipop"; +import Monitor from "@iconify-icons/ep/monitor"; +addIcon("ubuntuFill", UbuntuFill); +addIcon("menu", Menu); +addIcon("edit", Edit); +addIcon("informationLine", InformationLine); +addIcon("setUp", SetUp); +addIcon("terminalWindowLine", TerminalWindowLine); +addIcon("guide", Guide); +addIcon("homeFilled", HomeFilled); +addIcon("card", Card); +addIcon("listCheck", ListCheck); +addIcon("histogram", Histogram); +addIcon("ppt", Ppt); +addIcon("checkboxCircleLine", CheckboxCircleLine); +addIcon("flUser", FlUser); +addIcon("role", Role); +addIcon("setting", Setting); +addIcon("dept", Dept); +addIcon("lollipop", Lollipop); +addIcon("monitor", Monitor); diff --git a/src/components/ReIcon/src/types.ts b/src/components/ReIcon/src/types.ts new file mode 100644 index 0000000..8ae8a54 --- /dev/null +++ b/src/components/ReIcon/src/types.ts @@ -0,0 +1,19 @@ +export interface iconType { + // iconify (https://docs.iconify.design/icon-components/vue/#properties) + inline?: boolean; + width?: string | number; + height?: string | number; + horizontalFlip?: boolean; + verticalFlip?: boolean; + flip?: string; + rotate?: number | string; + color?: string; + horizontalAlign?: boolean; + verticalAlign?: boolean; + align?: string; + onLoad?: Function; + includes?: Function; + + // all icon + style?: object; +} diff --git a/src/components/ReImageVerify/index.ts b/src/components/ReImageVerify/index.ts new file mode 100644 index 0000000..4215c52 --- /dev/null +++ b/src/components/ReImageVerify/index.ts @@ -0,0 +1,7 @@ +import reImageVerify from "./src/index.vue"; +import { withInstall } from "@pureadmin/utils"; + +/** 图形验证码组件 */ +export const ReImageVerify = withInstall(reImageVerify); + +export default ReImageVerify; diff --git a/src/components/ReImageVerify/src/hooks.ts b/src/components/ReImageVerify/src/hooks.ts new file mode 100644 index 0000000..ec34c82 --- /dev/null +++ b/src/components/ReImageVerify/src/hooks.ts @@ -0,0 +1,86 @@ +import { ref, onMounted } from "vue"; + +/** + * 绘制图形验证码 + * @param width - 图形宽度 + * @param height - 图形高度 + */ +export const useImageVerify = (width = 120, height = 40) => { + const domRef = ref(); + const imgCode = ref(""); + + function setImgCode(code: string) { + imgCode.value = code; + } + + function getImgCode() { + if (!domRef.value) return; + imgCode.value = draw(domRef.value, width, height); + } + + onMounted(() => { + getImgCode(); + }); + + return { + domRef, + imgCode, + setImgCode, + getImgCode + }; +}; + +/** 前端自己生成验证码 */ +function randomNum(min: number, max: number) { + const num = Math.floor(Math.random() * (max - min) + min); + return num; +} + +function randomColor(min: number, max: number) { + const r = randomNum(min, max); + const g = randomNum(min, max); + const b = randomNum(min, max); + return `rgb(${r},${g},${b})`; +} + +function draw(dom: HTMLCanvasElement, width: number, height: number) { + let imgCode = ""; + + const NUMBER_STRING = "0123456789"; + + const ctx = dom.getContext("2d"); + if (!ctx) return imgCode; + + ctx.fillStyle = randomColor(180, 230); + ctx.fillRect(0, 0, width, height); + for (let i = 0; i < 4; i += 1) { + const text = NUMBER_STRING[randomNum(0, NUMBER_STRING.length)]; + imgCode += text; + const fontSize = randomNum(18, 41); + const deg = randomNum(-30, 30); + ctx.font = `${fontSize}px Simhei`; + ctx.textBaseline = "top"; + ctx.fillStyle = randomColor(80, 150); + ctx.save(); + ctx.translate(30 * i + 15, 15); + ctx.rotate((deg * Math.PI) / 180); + ctx.fillText(text, -15 + 5, -15); + ctx.restore(); + } + for (let i = 0; i < 5; i += 1) { + ctx.beginPath(); + ctx.moveTo(randomNum(0, width), randomNum(0, height)); + ctx.lineTo(randomNum(0, width), randomNum(0, height)); + ctx.strokeStyle = randomColor(180, 230); + ctx.closePath(); + ctx.stroke(); + } + for (let i = 0; i < 41; i += 1) { + ctx.beginPath(); + ctx.arc(randomNum(0, width), randomNum(0, height), 1, 0, 2 * Math.PI); + ctx.closePath(); + ctx.fillStyle = randomColor(150, 200); + ctx.fill(); + } + return imgCode; +} diff --git a/src/components/ReImageVerify/src/index.vue b/src/components/ReImageVerify/src/index.vue new file mode 100644 index 0000000..03d0662 --- /dev/null +++ b/src/components/ReImageVerify/src/index.vue @@ -0,0 +1,46 @@ + + + diff --git a/src/components/RePureTableBar/index.ts b/src/components/RePureTableBar/index.ts new file mode 100644 index 0000000..31b8a16 --- /dev/null +++ b/src/components/RePureTableBar/index.ts @@ -0,0 +1,5 @@ +import pureTableBar from "./src/bar"; +import { withInstall } from "@pureadmin/utils"; + +/** 配合 `@pureadmin/table` 实现快速便捷的表格操作 https://github.com/pure-admin/pure-admin-table */ +export const PureTableBar = withInstall(pureTableBar); diff --git a/src/components/RePureTableBar/src/bar.tsx b/src/components/RePureTableBar/src/bar.tsx new file mode 100644 index 0000000..092f427 --- /dev/null +++ b/src/components/RePureTableBar/src/bar.tsx @@ -0,0 +1,355 @@ +import { useEpThemeStoreHook } from "@/store/modules/epTheme"; +import { defineComponent, ref, computed, type PropType, nextTick } from "vue"; +import { + delay, + cloneDeep, + isBoolean, + isFunction, + getKeyList +} from "@pureadmin/utils"; + +import Sortable from "sortablejs"; +import DragIcon from "./svg/drag.svg?component"; +import ExpandIcon from "./svg/expand.svg?component"; +import RefreshIcon from "./svg/refresh.svg?component"; +import SettingIcon from "./svg/settings.svg?component"; +import CollapseIcon from "./svg/collapse.svg?component"; + +const props = { + /** 头部最左边的标题 */ + title: { + type: String, + default: "列表" + }, + /** 对于树形表格,如果想启用展开和折叠功能,传入当前表格的ref即可 */ + tableRef: { + type: Object as PropType + }, + /** 需要展示的列 */ + columns: { + type: Array as PropType, + default: () => [] + } +}; + +export default defineComponent({ + name: "PureTableBar", + props, + emits: ["refresh"], + setup(props, { emit, slots, attrs }) { + const buttonRef = ref(); + const size = ref("default"); + const isExpandAll = ref(true); + const loading = ref(false); + const checkAll = ref(true); + const isIndeterminate = ref(false); + const filterColumns = cloneDeep(props?.columns).filter(column => + isBoolean(column?.hide) + ? !column.hide + : !(isFunction(column?.hide) && column?.hide()) + ); + let checkColumnList = getKeyList(cloneDeep(props?.columns), "label"); + const checkedColumns = ref(getKeyList(cloneDeep(filterColumns), "label")); + const dynamicColumns = ref(cloneDeep(props?.columns)); + + const getDropdownItemStyle = computed(() => { + return s => { + return { + background: + s === size.value ? useEpThemeStoreHook().epThemeColor : "", + color: s === size.value ? "#fff" : "var(--el-text-color-primary)" + }; + }; + }); + + const iconClass = computed(() => { + return [ + "text-black", + "dark:text-white", + "duration-100", + "hover:!text-primary", + "cursor-pointer", + "outline-none" + ]; + }); + + const topClass = computed(() => { + return [ + "flex", + "justify-between", + "pt-[3px]", + "px-[11px]", + "border-b-[1px]", + "border-solid", + "border-[#dcdfe6]", + "dark:border-[#303030]" + ]; + }); + + function onReFresh() { + loading.value = true; + emit("refresh"); + delay(500).then(() => (loading.value = false)); + } + + function onExpand() { + isExpandAll.value = !isExpandAll.value; + toggleRowExpansionAll(props.tableRef.data, isExpandAll.value); + } + + function toggleRowExpansionAll(data, isExpansion) { + data.forEach(item => { + props.tableRef.toggleRowExpansion(item, isExpansion); + if (item.children !== undefined && item.children !== null) { + toggleRowExpansionAll(item.children, isExpansion); + } + }); + } + + function handleCheckAllChange(val: boolean) { + checkedColumns.value = val ? checkColumnList : []; + isIndeterminate.value = false; + dynamicColumns.value.map(column => + val ? (column.hide = false) : (column.hide = true) + ); + } + + function handleCheckedColumnsChange(value: string[]) { + const checkedCount = value.length; + checkAll.value = checkedCount === checkColumnList.length; + isIndeterminate.value = + checkedCount > 0 && checkedCount < checkColumnList.length; + } + + function handleCheckColumnListChange(val: boolean, label: string) { + dynamicColumns.value.filter(item => item.label === label)[0].hide = !val; + } + + async function onReset() { + checkAll.value = true; + isIndeterminate.value = false; + dynamicColumns.value = cloneDeep(props?.columns); + checkColumnList = []; + checkColumnList = await getKeyList(cloneDeep(props?.columns), "label"); + checkedColumns.value = getKeyList(cloneDeep(filterColumns), "label"); + } + + const dropdown = { + dropdown: () => ( + + (size.value = "large")} + > + 宽松 + + (size.value = "default")} + > + 默认 + + (size.value = "small")} + > + 紧凑 + + + ) + }; + + /** 列展示拖拽排序 */ + const rowDrop = (event: { preventDefault: () => void }) => { + event.preventDefault(); + nextTick(() => { + const wrapper: HTMLElement = document.querySelector( + ".el-checkbox-group>div" + ); + Sortable.create(wrapper, { + animation: 300, + handle: ".drag-btn", + onEnd: ({ newIndex, oldIndex, item }) => { + const targetThElem = item; + const wrapperElem = targetThElem.parentNode as HTMLElement; + const oldColumn = dynamicColumns.value[oldIndex]; + const newColumn = dynamicColumns.value[newIndex]; + if (oldColumn?.fixed || newColumn?.fixed) { + // 当前列存在fixed属性 则不可拖拽 + const oldThElem = wrapperElem.children[oldIndex] as HTMLElement; + if (newIndex > oldIndex) { + wrapperElem.insertBefore(targetThElem, oldThElem); + } else { + wrapperElem.insertBefore( + targetThElem, + oldThElem ? oldThElem.nextElementSibling : oldThElem + ); + } + return; + } + const currentRow = dynamicColumns.value.splice(oldIndex, 1)[0]; + dynamicColumns.value.splice(newIndex, 0, currentRow); + } + }); + }); + }; + + const isFixedColumn = (label: string) => { + return dynamicColumns.value.filter(item => item.label === label)[0].fixed + ? true + : false; + }; + + const reference = { + reference: () => ( + (buttonRef.value = e.currentTarget)} + /> + ) + }; + + return () => ( + <> +
+
+ {slots?.title ? ( + slots.title() + ) : ( +

{props.title}

+ )} +
+ {slots?.buttons ? ( +
{slots.buttons()}
+ ) : null} + {props.tableRef?.size ? ( + <> + + onExpand()} + /> + + + + ) : null} + + onReFresh()} + /> + + + + + + + + + + +
+ handleCheckAllChange(value)} + /> + onReset()}> + 重置 + +
+ +
+ handleCheckedColumnsChange(value)} + > + + {checkColumnList.map(item => { + return ( +
+ void; + }) => rowDrop(event)} + /> + + handleCheckColumnListChange(value, item) + } + > + + {item} + + +
+ ); + })} +
+
+
+
+
+ + +
+ {slots.default({ + size: size.value, + dynamicColumns: dynamicColumns.value + })} +
+ + ); + } +}); diff --git a/src/components/RePureTableBar/src/svg/collapse.svg b/src/components/RePureTableBar/src/svg/collapse.svg new file mode 100644 index 0000000..d84f870 --- /dev/null +++ b/src/components/RePureTableBar/src/svg/collapse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/RePureTableBar/src/svg/drag.svg b/src/components/RePureTableBar/src/svg/drag.svg new file mode 100644 index 0000000..8c37370 --- /dev/null +++ b/src/components/RePureTableBar/src/svg/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/RePureTableBar/src/svg/expand.svg b/src/components/RePureTableBar/src/svg/expand.svg new file mode 100644 index 0000000..dbbd4ed --- /dev/null +++ b/src/components/RePureTableBar/src/svg/expand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/RePureTableBar/src/svg/refresh.svg b/src/components/RePureTableBar/src/svg/refresh.svg new file mode 100644 index 0000000..140288c --- /dev/null +++ b/src/components/RePureTableBar/src/svg/refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/RePureTableBar/src/svg/settings.svg b/src/components/RePureTableBar/src/svg/settings.svg new file mode 100644 index 0000000..be23a0b --- /dev/null +++ b/src/components/RePureTableBar/src/svg/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ReQrcode/index.ts b/src/components/ReQrcode/index.ts new file mode 100644 index 0000000..48037a8 --- /dev/null +++ b/src/components/ReQrcode/index.ts @@ -0,0 +1,7 @@ +import reQrcode from "./src/index"; +import { withInstall } from "@pureadmin/utils"; + +/** 二维码组件 */ +export const ReQrcode = withInstall(reQrcode); + +export default ReQrcode; diff --git a/src/components/ReQrcode/src/index.scss b/src/components/ReQrcode/src/index.scss new file mode 100644 index 0000000..66ff634 --- /dev/null +++ b/src/components/ReQrcode/src/index.scss @@ -0,0 +1,9 @@ +.qrcode { + &--disabled { + background: rgb(255 255 255 / 95%); + + & > div { + transform: translate(-50%, -50%); + } + } +} diff --git a/src/components/ReQrcode/src/index.tsx b/src/components/ReQrcode/src/index.tsx new file mode 100644 index 0000000..7374402 --- /dev/null +++ b/src/components/ReQrcode/src/index.tsx @@ -0,0 +1,261 @@ +import { + ref, + unref, + watch, + nextTick, + computed, + PropType, + defineComponent +} from "vue"; +import "./index.scss"; +import propTypes from "@/utils/propTypes"; +import { isString, cloneDeep } from "@pureadmin/utils"; +import QRCode, { QRCodeRenderersOptions } from "qrcode"; +import RefreshRight from "@iconify-icons/ep/refresh-right"; + +interface QrcodeLogo { + src?: string; + logoSize?: number; + bgColor?: string; + borderSize?: number; + crossOrigin?: string; + borderRadius?: number; + logoRadius?: number; +} + +const props = { + // img 或者 canvas,img不支持logo嵌套 + tag: propTypes.string + .validate((v: string) => ["canvas", "img"].includes(v)) + .def("canvas"), + // 二维码内容 + text: { + type: [String, Array] as PropType, + default: null + }, + // qrcode.js配置项 + options: { + type: Object as PropType, + default: (): QRCodeRenderersOptions => ({}) + }, + // 宽度 + width: propTypes.number.def(200), + // logo + logo: { + type: [String, Object] as PropType | string>, + default: (): QrcodeLogo | string => "" + }, + // 是否过期 + disabled: propTypes.bool.def(false), + // 过期提示内容 + disabledText: propTypes.string.def("") +}; + +export default defineComponent({ + name: "ReQrcode", + props, + emits: ["done", "click", "disabled-click"], + setup(props, { emit }) { + const { toCanvas, toDataURL } = QRCode; + const loading = ref(true); + const wrapRef = ref>(null); + const renderText = computed(() => String(props.text)); + const wrapStyle = computed(() => { + return { + width: props.width + "px", + height: props.width + "px" + }; + }); + const initQrcode = async () => { + await nextTick(); + const options = cloneDeep(props.options || {}); + if (props.tag === "canvas") { + // 容错率,默认对内容少的二维码采用高容错率,内容多的二维码采用低容错率 + options.errorCorrectionLevel = + options.errorCorrectionLevel || + getErrorCorrectionLevel(unref(renderText)); + const _width: number = await getOriginWidth(unref(renderText), options); + options.scale = + props.width === 0 ? undefined : (props.width / _width) * 4; + const canvasRef: any = await toCanvas( + unref(wrapRef) as HTMLCanvasElement, + unref(renderText), + options + ); + if (props.logo) { + const url = await createLogoCode(canvasRef); + emit("done", url); + loading.value = false; + } else { + emit("done", canvasRef.toDataURL()); + loading.value = false; + } + } else { + const url = await toDataURL(renderText.value, { + errorCorrectionLevel: "H", + width: props.width, + ...options + }); + (unref(wrapRef) as any).src = url; + emit("done", url); + loading.value = false; + } + }; + watch( + () => renderText.value, + val => { + if (!val) return; + initQrcode(); + }, + { + deep: true, + immediate: true + } + ); + const createLogoCode = (canvasRef: HTMLCanvasElement) => { + const canvasWidth = canvasRef.width; + const logoOptions: QrcodeLogo = Object.assign( + { + logoSize: 0.15, + bgColor: "#ffffff", + borderSize: 0.05, + crossOrigin: "anonymous", + borderRadius: 8, + logoRadius: 0 + }, + isString(props.logo) ? {} : props.logo + ); + const { + logoSize = 0.15, + bgColor = "#ffffff", + borderSize = 0.05, + crossOrigin = "anonymous", + borderRadius = 8, + logoRadius = 0 + } = logoOptions; + const logoSrc = isString(props.logo) ? props.logo : props.logo.src; + const logoWidth = canvasWidth * logoSize; + const logoXY = (canvasWidth * (1 - logoSize)) / 2; + const logoBgWidth = canvasWidth * (logoSize + borderSize); + const logoBgXY = (canvasWidth * (1 - logoSize - borderSize)) / 2; + const ctx = canvasRef.getContext("2d"); + if (!ctx) return; + // logo 底色 + canvasRoundRect(ctx)( + logoBgXY, + logoBgXY, + logoBgWidth, + logoBgWidth, + borderRadius + ); + ctx.fillStyle = bgColor; + ctx.fill(); + // logo + const image = new Image(); + if (crossOrigin || logoRadius) { + image.setAttribute("crossOrigin", crossOrigin); + } + (image as any).src = logoSrc; + // 使用image绘制可以避免某些跨域情况 + const drawLogoWithImage = (image: HTMLImageElement) => { + ctx.drawImage(image, logoXY, logoXY, logoWidth, logoWidth); + }; + // 使用canvas绘制以获得更多的功能 + const drawLogoWithCanvas = (image: HTMLImageElement) => { + const canvasImage = document.createElement("canvas"); + canvasImage.width = logoXY + logoWidth; + canvasImage.height = logoXY + logoWidth; + const imageCanvas = canvasImage.getContext("2d"); + if (!imageCanvas || !ctx) return; + imageCanvas.drawImage(image, logoXY, logoXY, logoWidth, logoWidth); + canvasRoundRect(ctx)(logoXY, logoXY, logoWidth, logoWidth, logoRadius); + if (!ctx) return; + const fillStyle = ctx.createPattern(canvasImage, "no-repeat"); + if (fillStyle) { + ctx.fillStyle = fillStyle; + ctx.fill(); + } + }; + // 将 logo绘制到 canvas上 + return new Promise((resolve: any) => { + image.onload = () => { + logoRadius ? drawLogoWithCanvas(image) : drawLogoWithImage(image); + resolve(canvasRef.toDataURL()); + }; + }); + }; + // 得到原QrCode的大小,以便缩放得到正确的QrCode大小 + const getOriginWidth = async ( + content: string, + options: QRCodeRenderersOptions + ) => { + const _canvas = document.createElement("canvas"); + await toCanvas(_canvas, content, options); + return _canvas.width; + }; + // 对于内容少的QrCode,增大容错率 + const getErrorCorrectionLevel = (content: string) => { + if (content.length > 36) { + return "M"; + } else if (content.length > 16) { + return "Q"; + } else { + return "H"; + } + }; + // 用于绘制圆角 + const canvasRoundRect = (ctx: CanvasRenderingContext2D) => { + return (x: number, y: number, w: number, h: number, r: number) => { + const minSize = Math.min(w, h); + if (r > minSize / 2) { + r = minSize / 2; + } + ctx.beginPath(); + ctx.moveTo(x + r, y); + ctx.arcTo(x + w, y, x + w, y + h, r); + ctx.arcTo(x + w, y + h, x, y + h, r); + ctx.arcTo(x, y + h, x, y, r); + ctx.arcTo(x, y, x + w, y, r); + ctx.closePath(); + return ctx; + }; + }; + const clickCode = () => { + emit("click"); + }; + const disabledClick = () => { + emit("disabled-click"); + }; + return () => ( + <> +
+ {props.tag === "canvas" ? ( + + ) : ( + + )} + {props.disabled && ( +
+
+ +
{props.disabledText}
+
+
+ )} +
+ + ); + } +}); diff --git a/src/components/ReTypeit/index.ts b/src/components/ReTypeit/index.ts new file mode 100644 index 0000000..4c34bae --- /dev/null +++ b/src/components/ReTypeit/index.ts @@ -0,0 +1,44 @@ +import { h, defineComponent } from "vue"; +import TypeIt from "typeit"; + +// 打字机效果组件(只是简单的封装下,更多配置项参考 https://www.typeitjs.com/docs/vanilla/usage#options) +export default defineComponent({ + name: "TypeIt", + props: { + /** 打字速度,以每一步之间的毫秒数为单位,默认`200` */ + speed: { + type: Number, + default: 200 + }, + values: { + type: Array, + defalut: [] + }, + className: { + type: String, + default: "type-it" + }, + cursor: { + type: Boolean, + default: true + } + }, + render() { + return h( + "span", + { + class: this.className + }, + { + default: () => [] + } + ); + }, + mounted() { + new TypeIt(`.${this.className}`, { + strings: this.values, + speed: this.speed, + cursor: this.cursor + }).go(); + } +}); diff --git a/src/components/VDialog/VDialog.vue b/src/components/VDialog/VDialog.vue new file mode 100644 index 0000000..3f1812d --- /dev/null +++ b/src/components/VDialog/VDialog.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/src/components/VDialog/dialog.css b/src/components/VDialog/dialog.css new file mode 100644 index 0000000..278ab4e --- /dev/null +++ b/src/components/VDialog/dialog.css @@ -0,0 +1,62 @@ +html.dark .v-dialog { + --header-bg-color: #171d1e; + --footer-bg-color: #171d1e; +} + +.v-dialog { + --header-bg-color: #f5f7fa; + --footer-bg-color: #f5f7fa; +} + +.v-dialog.el-dialog.hidden-footer .el-dialog__footer { + padding: 0; + border: none; +} + +.el-dialog__footer { + padding: 10px; + /*border-top: 1px solid var(--el-border-color);*/ + /*border-bottom: 1px solid var(--el-border-color);*/ + box-sizing: border-box; + background-color: var(--header-bg-color); + position: relative; /* 防止被表单覆盖底部 */ + z-index: calc(var(--el-index-normal) + 1); +} + +.v-dialog.el-dialog { + box-sizing: border-box; + margin: 15dvh auto; +} + +.v-dialog.el-dialog.is-fullscreen { + box-sizing: border-box; + margin: auto; +} + +.v-dialog.el-dialog .el-dialog__header { + padding: 10px 16px; + /*border-bottom: 1px solid var(--el-border-color);*/ + margin-right: 0; + box-sizing: border-box; + background-color: var(--header-bg-color); +} + +.v-dialog.el-dialog--center .el-dialog__body, +.el-dialog__body { + padding: 16px 20px; + box-sizing: border-box; +} + +.v-dialog.el-dialog.is-fullscreen .el-dialog__body { + height: calc(100dvh - 44px - 52px); + max-height: calc(100dvh - 44px - 52px); +} + +.v-dialog.el-dialog .el-dialog__body { + height: calc(70dvh - 44px - 52px); +} + +.v-dialog.el-dialog.flex-body:not(.is-fullscreen) .el-dialog__body { + height: initial; + max-height: calc(70dvh - 44px - 52px); +} diff --git a/src/components/VDialog/dialog.ts b/src/components/VDialog/dialog.ts new file mode 100644 index 0000000..7505c74 --- /dev/null +++ b/src/components/VDialog/dialog.ts @@ -0,0 +1,47 @@ +export interface DialogProps { + /** + * 标题 + */ + title: string; + /** + * 显隐 + */ + modelValue: boolean; + + /** + * 初始化全屏状态 + */ + initFullScreen?: boolean | undefined; + + /** + * 展示全屏按钮 + */ + showFullScreen?: boolean; + + /** + * 全屏 + */ + fullScreen?: boolean | undefined; + confirmText?: string; + cancelText?: string; + loading?: boolean; + /** + * 使用el-scrollbar包裹对话框body + */ + useBodyScrolling?: boolean; + /** + * 固定对话框body高度 + */ + fixedBodyHeight?: boolean; + + draggable?: boolean; + + hiddenFooter?: boolean; +} + +export type DialogEmits = { + "update:modelValue": [val: boolean]; + "update:fullScreen": [val: boolean]; + confirm: []; + cancel: []; +}; diff --git a/src/config/index.ts b/src/config/index.ts new file mode 100644 index 0000000..d5402ae --- /dev/null +++ b/src/config/index.ts @@ -0,0 +1,55 @@ +import { App } from "vue"; +import axios from "axios"; +import { configConver } from "@/utils/rootConver"; + +let config: object = {}; + +const setConfig = (cfg?: unknown) => { + config = Object.assign(config, cfg); +}; + +const getConfig = (key?: string): ServerConfigs => { + if (typeof key === "string") { + const arr = key.split("."); + if (arr && arr.length) { + let data = config; + arr.forEach(v => { + if (data && typeof data[v] !== "undefined") { + data = data[v]; + } else { + data = null; + } + }); + return data; + } + } + return config; +}; + +/** 获取项目动态全局配置 */ +export const getServerConfig = async (app: App): Promise => { + app.config.globalProperties.$config = getConfig(); + return axios({ + method: "get", + url: `${configConver()}serverConfig.json` + }) + .then(({ data: config }) => { + let $config = app.config.globalProperties.$config; + // 自动注入项目配置 + if (app && $config && typeof config === "object") { + $config = Object.assign($config, config); + app.config.globalProperties.$config = $config; + // 设置全局配置 + setConfig($config); + } + return $config; + }) + .catch(() => { + throw "请在public文件夹下添加serverConfig.json配置文件"; + }); +}; + +/** 本地响应式存储的命名空间 */ +const responsiveStorageNameSpace = () => getConfig().ResponsiveStorageNameSpace; + +export { getConfig, setConfig, responsiveStorageNameSpace }; diff --git a/src/directives/auth/index.ts b/src/directives/auth/index.ts new file mode 100644 index 0000000..a7a4f22 --- /dev/null +++ b/src/directives/auth/index.ts @@ -0,0 +1,15 @@ +import { hasAuth } from "@/router/utils"; +import type { Directive, DirectiveBinding } from "vue"; + +export const auth: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding) { + const { value } = binding; + if (value) { + !hasAuth(value) && el.parentNode?.removeChild(el); + } else { + throw new Error( + "[Directive: auth]: need auths! Like v-auth=\"['btn.add','btn.edit']\"" + ); + } + } +}; diff --git a/src/directives/copy/index.ts b/src/directives/copy/index.ts new file mode 100644 index 0000000..8e97833 --- /dev/null +++ b/src/directives/copy/index.ts @@ -0,0 +1,33 @@ +import { message } from "@/utils/message"; +import { useEventListener } from "@vueuse/core"; +import { copyTextToClipboard } from "@pureadmin/utils"; +import type { Directive, DirectiveBinding } from "vue"; + +interface CopyEl extends HTMLElement { + copyValue: string; +} + +/** 文本复制指令(默认双击复制) */ +export const copy: Directive = { + mounted(el: CopyEl, binding: DirectiveBinding) { + const { value } = binding; + if (value) { + el.copyValue = value; + const arg = binding.arg ?? "dblclick"; + // Register using addEventListener on mounted, and removeEventListener automatically on unmounted + useEventListener(el, arg, () => { + const success = copyTextToClipboard(el.copyValue); + success + ? message("复制成功", { type: "success" }) + : message("复制失败", { type: "error" }); + }); + } else { + throw new Error( + '[Directive: copy]: need value! Like v-copy="modelValue"' + ); + } + }, + updated(el: CopyEl, binding: DirectiveBinding) { + el.copyValue = binding.value; + } +}; diff --git a/src/directives/index.ts b/src/directives/index.ts new file mode 100644 index 0000000..f4238c9 --- /dev/null +++ b/src/directives/index.ts @@ -0,0 +1,4 @@ +export * from "./auth"; +export * from "./copy"; +export * from "./longpress"; +export * from "./optimize"; diff --git a/src/directives/longpress/index.ts b/src/directives/longpress/index.ts new file mode 100644 index 0000000..5442784 --- /dev/null +++ b/src/directives/longpress/index.ts @@ -0,0 +1,63 @@ +import { useEventListener } from "@vueuse/core"; +import type { Directive, DirectiveBinding } from "vue"; +import { subBefore, subAfter, isFunction } from "@pureadmin/utils"; + +export const longpress: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding) { + const cb = binding.value; + if (cb && isFunction(cb)) { + let timer = null; + let interTimer = null; + let num = 500; + let interNum = null; + const isInter = binding?.arg?.includes(":") ?? false; + + if (isInter) { + num = Number(subBefore(binding.arg, ":")); + interNum = Number(subAfter(binding.arg, ":")); + } else if (binding.arg) { + num = Number(binding.arg); + } + + const clear = () => { + if (timer) { + clearTimeout(timer); + timer = null; + } + if (interTimer) { + clearInterval(interTimer); + interTimer = null; + } + }; + + const onDownInter = (ev: PointerEvent) => { + ev.preventDefault(); + if (interTimer === null) { + interTimer = setInterval(() => cb(), interNum); + } + }; + + const onDown = (ev: PointerEvent) => { + clear(); + ev.preventDefault(); + if (timer === null) { + timer = isInter + ? setTimeout(() => { + cb(); + onDownInter(ev); + }, num) + : setTimeout(() => cb(), num); + } + }; + + // Register using addEventListener on mounted, and removeEventListener automatically on unmounted + useEventListener(el, "pointerdown", onDown); + useEventListener(el, "pointerup", clear); + useEventListener(el, "pointerleave", clear); + } else { + throw new Error( + '[Directive: longpress]: need callback and callback must be a function! Like v-longpress="callback"' + ); + } + } +}; diff --git a/src/directives/optimize/index.ts b/src/directives/optimize/index.ts new file mode 100644 index 0000000..5fbdd1f --- /dev/null +++ b/src/directives/optimize/index.ts @@ -0,0 +1,55 @@ +import { + isFunction, + isObject, + isArray, + debounce, + throttle +} from "@pureadmin/utils"; +import { useEventListener } from "@vueuse/core"; +import type { Directive, DirectiveBinding } from "vue"; + +/** 防抖(v-optimize或v-optimize:debounce)、节流(v-optimize:throttle)指令 */ +export const optimize: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding) { + const { value } = binding; + const optimizeType = binding.arg ?? "debounce"; + const type = ["debounce", "throttle"].find(t => t === optimizeType); + if (type) { + if (value && value.event && isFunction(value.fn)) { + let params = value?.params; + if (params) { + if (isArray(params) || isObject(params)) { + params = isObject(params) ? Array.of(params) : params; + } else { + throw new Error( + "[Directive: optimize]: `params` must be an array or object" + ); + } + } + // Register using addEventListener on mounted, and removeEventListener automatically on unmounted + useEventListener( + el, + value.event, + type === "debounce" + ? debounce( + params ? () => value.fn(...params) : value.fn, + value?.timeout ?? 200, + value?.immediate ?? false + ) + : throttle( + params ? () => value.fn(...params) : value.fn, + value?.timeout ?? 1000 + ) + ); + } else { + throw new Error( + "[Directive: optimize]: `event` and `fn` are required, and `fn` must be a function" + ); + } + } else { + throw new Error( + "[Directive: optimize]: only `debounce` and `throttle` are supported" + ); + } + } +}; diff --git a/src/layout/components/appMain.vue b/src/layout/components/appMain.vue new file mode 100644 index 0000000..3f2a244 --- /dev/null +++ b/src/layout/components/appMain.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/layout/components/navbar.vue b/src/layout/components/navbar.vue new file mode 100644 index 0000000..557d033 --- /dev/null +++ b/src/layout/components/navbar.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/src/layout/components/notice/data.ts b/src/layout/components/notice/data.ts new file mode 100644 index 0000000..14c7560 --- /dev/null +++ b/src/layout/components/notice/data.ts @@ -0,0 +1,146 @@ +export interface ListItem { + avatar: string; + title: string; + datetime: string; + type: string; + description: string; + status?: "" | "success" | "warning" | "info" | "danger"; + extra?: string; +} + +export interface TabItem { + key: string; + name: string; + list: ListItem[]; +} + +export const noticesData: TabItem[] = [ + { + key: "1", + name: "通知", + list: [ + { + avatar: + "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png", + title: "你收到了 12 份新周报", + datetime: "一年前", + description: "", + type: "1" + }, + { + avatar: + "https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png", + title: "你推荐的 前端高手 已通过第三轮面试", + datetime: "一年前", + description: "", + type: "1" + }, + { + avatar: + "https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png", + title: "这种模板可以区分多种通知类型", + datetime: "一年前", + description: "", + type: "1" + }, + { + avatar: + "https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", + title: + "展示标题内容超过一行后的处理方式,如果内容超过1行将自动截断并支持tooltip显示完整标题。", + datetime: "一年前", + description: "", + type: "1" + }, + { + avatar: + "https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", + title: "左侧图标用于区分不同的类型", + datetime: "一年前", + description: "", + type: "1" + }, + { + avatar: + "https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", + title: "左侧图标用于区分不同的类型", + datetime: "一年前", + description: "", + type: "1" + } + ] + }, + { + key: "2", + name: "消息", + list: [ + { + avatar: + "https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg", + title: "李白 评论了你", + description: "长风破浪会有时,直挂云帆济沧海", + datetime: "一年前", + type: "2" + }, + { + avatar: + "https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg", + title: "李白 回复了你", + description: "行路难,行路难,多歧路,今安在。", + datetime: "一年前", + type: "2" + }, + { + avatar: + "https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg", + title: "标题", + description: + "请将鼠标移动到此处,以便测试超长的消息在此处将如何处理。本例中设置的描述最大行数为2,超过2行的描述内容将被省略并且可以通过tooltip查看完整内容", + datetime: "一年前", + type: "2" + } + ] + }, + { + key: "3", + name: "代办", + list: [ + { + avatar: "", + title: "任务名称", + description: "任务需要在 2022-11-16 20:00 前启动", + datetime: "", + extra: "未开始", + status: "info", + type: "3" + }, + { + avatar: "", + title: "第三方紧急代码变更", + description: + "一拳提交于 2022-11-16,需在 2022-11-18 前完成代码变更任务", + datetime: "", + extra: "马上到期", + status: "danger", + type: "3" + }, + { + avatar: "", + title: "信息安全考试", + description: "指派小仙于 2022-12-12 前完成更新并发布", + datetime: "", + extra: "已耗时 8 天", + status: "warning", + type: "3" + }, + { + avatar: "", + title: "vue-pure-admin 版本发布", + description: "vue-pure-admin 版本发布", + datetime: "", + extra: "进行中", + type: "3" + } + ] + } +]; diff --git a/src/layout/components/notice/index.vue b/src/layout/components/notice/index.vue new file mode 100644 index 0000000..3a37720 --- /dev/null +++ b/src/layout/components/notice/index.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/layout/components/notice/noticeItem.vue b/src/layout/components/notice/noticeItem.vue new file mode 100644 index 0000000..b7a2b14 --- /dev/null +++ b/src/layout/components/notice/noticeItem.vue @@ -0,0 +1,177 @@ + + + + + + diff --git a/src/layout/components/notice/noticeList.vue b/src/layout/components/notice/noticeList.vue new file mode 100644 index 0000000..109cd1a --- /dev/null +++ b/src/layout/components/notice/noticeList.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/layout/components/panel/index.vue b/src/layout/components/panel/index.vue new file mode 100644 index 0000000..59001f0 --- /dev/null +++ b/src/layout/components/panel/index.vue @@ -0,0 +1,158 @@ + + + + + + + diff --git a/src/layout/components/search/components/SearchFooter.vue b/src/layout/components/search/components/SearchFooter.vue new file mode 100644 index 0000000..80165de --- /dev/null +++ b/src/layout/components/search/components/SearchFooter.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/layout/components/search/components/SearchModal.vue b/src/layout/components/search/components/SearchModal.vue new file mode 100644 index 0000000..d4f559e --- /dev/null +++ b/src/layout/components/search/components/SearchModal.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/src/layout/components/search/components/SearchResult.vue b/src/layout/components/search/components/SearchResult.vue new file mode 100644 index 0000000..7656e02 --- /dev/null +++ b/src/layout/components/search/components/SearchResult.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/src/layout/components/search/components/index.ts b/src/layout/components/search/components/index.ts new file mode 100644 index 0000000..6e895d9 --- /dev/null +++ b/src/layout/components/search/components/index.ts @@ -0,0 +1,3 @@ +import SearchModal from "./SearchModal.vue"; + +export { SearchModal }; diff --git a/src/layout/components/search/index.vue b/src/layout/components/search/index.vue new file mode 100644 index 0000000..bfd9c63 --- /dev/null +++ b/src/layout/components/search/index.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/layout/components/setting/index.vue b/src/layout/components/setting/index.vue new file mode 100644 index 0000000..6543f65 --- /dev/null +++ b/src/layout/components/setting/index.vue @@ -0,0 +1,529 @@ + + + + + diff --git a/src/layout/components/sidebar/breadCrumb.vue b/src/layout/components/sidebar/breadCrumb.vue new file mode 100644 index 0000000..d3bbf20 --- /dev/null +++ b/src/layout/components/sidebar/breadCrumb.vue @@ -0,0 +1,104 @@ + + + diff --git a/src/layout/components/sidebar/extraIcon.vue b/src/layout/components/sidebar/extraIcon.vue new file mode 100644 index 0000000..6bb82e9 --- /dev/null +++ b/src/layout/components/sidebar/extraIcon.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/layout/components/sidebar/horizontal.vue b/src/layout/components/sidebar/horizontal.vue new file mode 100644 index 0000000..1271998 --- /dev/null +++ b/src/layout/components/sidebar/horizontal.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/src/layout/components/sidebar/leftCollapse.vue b/src/layout/components/sidebar/leftCollapse.vue new file mode 100644 index 0000000..c4bd0a5 --- /dev/null +++ b/src/layout/components/sidebar/leftCollapse.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/layout/components/sidebar/logo.vue b/src/layout/components/sidebar/logo.vue new file mode 100644 index 0000000..9dec792 --- /dev/null +++ b/src/layout/components/sidebar/logo.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/layout/components/sidebar/mixNav.vue b/src/layout/components/sidebar/mixNav.vue new file mode 100644 index 0000000..31dd25f --- /dev/null +++ b/src/layout/components/sidebar/mixNav.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/src/layout/components/sidebar/sidebarItem.vue b/src/layout/components/sidebar/sidebarItem.vue new file mode 100644 index 0000000..79d7f0e --- /dev/null +++ b/src/layout/components/sidebar/sidebarItem.vue @@ -0,0 +1,316 @@ + + + diff --git a/src/layout/components/sidebar/topCollapse.vue b/src/layout/components/sidebar/topCollapse.vue new file mode 100644 index 0000000..348b71f --- /dev/null +++ b/src/layout/components/sidebar/topCollapse.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/layout/components/sidebar/vertical.vue b/src/layout/components/sidebar/vertical.vue new file mode 100644 index 0000000..b2ce4f2 --- /dev/null +++ b/src/layout/components/sidebar/vertical.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/layout/components/tag/index.scss b/src/layout/components/tag/index.scss new file mode 100644 index 0000000..e8d8795 --- /dev/null +++ b/src/layout/components/tag/index.scss @@ -0,0 +1,295 @@ +@keyframes schedule-in-width { + from { + width: 0; + } + + to { + width: 100%; + } +} + +@keyframes schedule-out-width { + from { + width: 100%; + } + + to { + width: 0; + } +} + +@keyframes rotate { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} + +@keyframes close { + from { + transform: translate(-50%, -50%); + } + + to { + transform: translate(0, -50%); + } +} + +.tags-view { + position: relative; + display: flex; + align-items: center; + width: 100%; + font-size: 14px; + color: var(--el-text-color-primary); + background: #fff; + box-shadow: 0 0 1px #888; + + .scroll-item { + position: relative; + display: inline-block; + height: 28px; + padding: 0 6px; + margin-right: 4px; + line-height: 28px; + cursor: pointer; + border-radius: 3px 3px 0 0; + box-shadow: 0 0 1px #888; + transition: all 0.4s; + + .el-icon-close { + position: absolute; + top: 50%; + font-size: 10px; + color: var(--el-color-primary); + cursor: pointer; + transition: font-size 0.2s; + transform: translate(-50%, -50%); + + &:hover { + font-size: 13px; + color: #fff; + background: #b4bccc; + border-radius: 50%; + } + } + + &.is-closable:not(:first-child) { + &:hover { + padding-right: 18px; + + &:not(.is-active) { + .el-icon-close { + animation: close 200ms ease-in forwards; + } + } + } + } + } + + a { + padding: 0 4px; + color: var(--el-text-color-primary); + text-decoration: none; + } + + .scroll-container { + position: relative; + flex: 1; + padding: 5px 0; + overflow: hidden; + white-space: nowrap; + + .tab { + position: relative; + float: left; + overflow: visible; + white-space: nowrap; + list-style: none; + transition: transform 0.5s ease-in-out; + + .scroll-item { + transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + + &:nth-child(1) { + margin-left: 5px; + } + } + } + } + + /* 右键菜单 */ + .contextmenu { + position: absolute; + padding: 5px 0; + margin: 0; + font-size: 13px; + font-weight: normal; + color: var(--el-text-color-primary); + white-space: nowrap; + list-style-type: none; + background: #fff; + border-radius: 4px; + outline: 0; + box-shadow: 0 2px 8px rgb(0 0 0 / 15%); + + li { + display: flex; + align-items: center; + width: 100%; + padding: 7px 12px; + margin: 0; + cursor: pointer; + + &:hover { + color: var(--el-color-primary); + } + + svg { + display: block; + margin-right: 0.5em; + } + } + } +} + +.el-dropdown-menu { + li { + display: flex; + align-items: center; + width: 100%; + margin: 0; + cursor: pointer; + + svg { + display: block; + margin-right: 0.5em; + } + } +} + +.el-dropdown-menu__item:not(.is-disabled):hover { + color: #606266; + background: #f0f0f0; +} + +:deep(.el-dropdown-menu__item) i { + margin-right: 10px; +} + +:deep(.el-dropdown-menu__item--divided) { + margin: 1px 0; +} + +.el-dropdown-menu__item--divided::before { + margin: 0; +} + +.el-dropdown-menu__item.is-disabled { + cursor: not-allowed; +} + +.scroll-item.is-active { + position: relative; + color: #fff; + + &:not(:first-child) { + padding-right: 18px; + } + + .el-icon-close { + transform: translate(0, -50%); + } + + a { + color: var(--el-color-primary) !important; + } +} + +.arrow-left, +.arrow-right, +.arrow-down { + position: relative; + width: 40px; + height: 38px; + color: var(--el-text-color-primary); + + svg { + position: absolute; + left: 50%; + width: 20px; + height: 20px; + transform: translate(-50%, 50%); + } +} + +.arrow-left { + box-shadow: 5px 0 5px -6px #ccc; + + &:hover { + cursor: w-resize; + } +} + +.arrow-right { + border-right: 0.5px solid #ccc; + box-shadow: -5px 0 5px -6px #ccc; + + &:hover { + cursor: e-resize; + } +} + +/* 卡片模式下鼠标移入显示蓝色边框 */ +.card-in { + color: var(--el-color-primary); + + a { + color: var(--el-color-primary); + } +} + +/* 卡片模式下鼠标移出隐藏蓝色边框 */ +.card-out { + color: #666; + border: none; + + a { + color: #666; + } +} + +/* 灵动模式 */ +.schedule-active { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 2px; + background: var(--el-color-primary); +} + +/* 灵动模式下鼠标移入显示蓝色进度条 */ +.schedule-in { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 2px; + background: var(--el-color-primary); + animation: schedule-in-width 200ms ease-in; +} + +/* 灵动模式下鼠标移出隐藏蓝色进度条 */ +.schedule-out { + position: absolute; + bottom: 0; + left: 0; + width: 0; + height: 2px; + background: var(--el-color-primary); + animation: schedule-out-width 200ms ease-in; +} diff --git a/src/layout/components/tag/index.vue b/src/layout/components/tag/index.vue new file mode 100644 index 0000000..5957f29 --- /dev/null +++ b/src/layout/components/tag/index.vue @@ -0,0 +1,611 @@ + + + + + diff --git a/src/layout/frameView.vue b/src/layout/frameView.vue new file mode 100644 index 0000000..ee7e700 --- /dev/null +++ b/src/layout/frameView.vue @@ -0,0 +1,73 @@ + + +