From aa18bfc33202f3ec2dfdef2292bdce9a44619f99 Mon Sep 17 00:00:00 2001 From: skyle1995 Date: Mon, 25 May 2026 02:16:09 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20monorepo=20=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 12 +- CHANGELOG.md | 7 + frontend/.browserslistrc | 4 + frontend/.dockerignore | 21 + frontend/.editorconfig | 14 + frontend/.env | 5 + frontend/.env.development | 8 + frontend/.env.production | 13 + frontend/.env.staging | 16 + frontend/.gitignore | 22 + frontend/.husky/commit-msg | 8 + frontend/.husky/common.sh | 9 + frontend/.husky/pre-commit | 10 + frontend/.lintstagedrc | 20 + frontend/.markdownlint.json | 11 + frontend/.npmrc | 4 + frontend/.nvmrc | 1 + frontend/.prettierrc.js | 9 + frontend/.stylelintignore | 4 + frontend/Dockerfile | 20 + frontend/LICENSE | 21 + frontend/README.md | 52 + frontend/build/cdn.ts | 55 + frontend/build/compress.ts | 63 + frontend/build/info.ts | 57 + frontend/build/optimize.ts | 29 + frontend/build/plugins.ts | 58 + frontend/build/utils.ts | 110 + frontend/commitlint.config.js | 35 + frontend/eslint.config.js | 173 + frontend/index.html | 84 + frontend/logo.ico | Bin 0 -> 99678 bytes frontend/package.json | 164 + frontend/pnpm-lock.yaml | 7106 +++++++++++++++++ frontend/postcss.config.js | 8 + frontend/public/favicon.ico | Bin 0 -> 99678 bytes frontend/public/logo.png | Bin 0 -> 210978 bytes frontend/public/logo.svg | 1 + frontend/src/App.vue | 57 + frontend/src/api/admin/api.ts | 36 + frontend/src/api/admin/app.ts | 95 + frontend/src/api/admin/dashboard.ts | 48 + frontend/src/api/admin/function.ts | 30 + frontend/src/api/admin/logs.ts | 30 + frontend/src/api/admin/portalNavigation.ts | 94 + frontend/src/api/admin/profile.ts | 26 + frontend/src/api/admin/routes.ts | 14 + frontend/src/api/admin/settings.ts | 24 + frontend/src/api/admin/user.ts | 85 + frontend/src/api/admin/variable.ts | 30 + frontend/src/api/install/index.ts | 11 + frontend/src/assets/iconfont/iconfont.css | 27 + frontend/src/assets/iconfont/iconfont.js | 68 + frontend/src/assets/iconfont/iconfont.json | 30 + frontend/src/assets/iconfont/iconfont.ttf | Bin 0 -> 3904 bytes frontend/src/assets/iconfont/iconfont.woff | Bin 0 -> 2484 bytes frontend/src/assets/iconfont/iconfont.woff2 | Bin 0 -> 2016 bytes frontend/src/assets/login/avatar.svg | 1 + frontend/src/assets/login/bg.png | Bin 0 -> 17468 bytes frontend/src/assets/login/illustration.svg | 1 + frontend/src/assets/status/403.svg | 1 + frontend/src/assets/status/404.svg | 1 + frontend/src/assets/status/500.svg | 1 + frontend/src/assets/svg/back_top.svg | 1 + frontend/src/assets/svg/dark.svg | 1 + frontend/src/assets/svg/day.svg | 1 + frontend/src/assets/svg/enter_outlined.svg | 1 + frontend/src/assets/svg/exit_screen.svg | 1 + frontend/src/assets/svg/full_screen.svg | 1 + frontend/src/assets/svg/keyboard_esc.svg | 1 + frontend/src/assets/svg/system.svg | 1 + frontend/src/assets/table-bar/collapse.svg | 1 + frontend/src/assets/table-bar/drag.svg | 1 + frontend/src/assets/table-bar/expand.svg | 1 + frontend/src/assets/table-bar/refresh.svg | 1 + frontend/src/assets/table-bar/settings.svg | 1 + frontend/src/assets/user.jpg | Bin 0 -> 3694 bytes frontend/src/components/ReAuth/index.ts | 5 + frontend/src/components/ReAuth/src/auth.tsx | 20 + frontend/src/components/ReCol/index.ts | 29 + frontend/src/components/ReDialog/index.ts | 69 + frontend/src/components/ReDialog/index.vue | 210 + frontend/src/components/ReDialog/type.ts | 275 + frontend/src/components/ReIcon/index.ts | 12 + frontend/src/components/ReIcon/src/hooks.ts | 63 + .../src/components/ReIcon/src/iconfont.ts | 47 + .../ReIcon/src/iconifyIconOffline.ts | 47 + .../ReIcon/src/iconifyIconOnline.ts | 31 + .../src/components/ReIcon/src/offlineIcon.ts | 29 + frontend/src/components/ReIcon/src/types.ts | 20 + frontend/src/components/RePerms/index.ts | 5 + frontend/src/components/RePerms/src/perms.tsx | 20 + .../src/components/RePureTableBar/index.ts | 5 + .../src/components/RePureTableBar/src/bar.tsx | 408 + frontend/src/components/ReSegmented/index.ts | 8 + .../src/components/ReSegmented/src/index.css | 156 + .../src/components/ReSegmented/src/index.tsx | 216 + .../src/components/ReSegmented/src/type.ts | 20 + frontend/src/components/ReText/index.ts | 7 + frontend/src/components/ReText/src/index.vue | 69 + frontend/src/config/index.ts | 116 + frontend/src/directives/auth/index.ts | 15 + frontend/src/directives/copy/index.ts | 33 + frontend/src/directives/index.ts | 6 + frontend/src/directives/longpress/index.ts | 63 + frontend/src/directives/optimize/index.ts | 68 + frontend/src/directives/perms/index.ts | 15 + frontend/src/directives/ripple/index.scss | 48 + frontend/src/directives/ripple/index.ts | 229 + .../layout/components/lay-content/index.vue | 221 + .../layout/components/lay-footer/index.vue | 25 + .../src/layout/components/lay-frame/index.vue | 79 + .../layout/components/lay-navbar/index.vue | 150 + .../src/layout/components/lay-panel/index.vue | 148 + .../lay-search/components/SearchFooter.vue | 61 + .../lay-search/components/SearchHistory.vue | 198 + .../components/SearchHistoryItem.vue | 52 + .../lay-search/components/SearchModal.vue | 340 + .../lay-search/components/SearchResult.vue | 113 + .../layout/components/lay-search/index.vue | 21 + .../src/layout/components/lay-search/types.ts | 20 + .../layout/components/lay-setting/index.vue | 631 ++ .../components/lay-sidebar/NavHorizontal.vue | 144 + .../layout/components/lay-sidebar/NavMix.vue | 167 + .../components/lay-sidebar/NavVertical.vue | 146 + .../components/SidebarBreadCrumb.vue | 120 + .../components/SidebarCenterCollapse.vue | 70 + .../components/SidebarExtraIcon.vue | 20 + .../components/SidebarFullScreen.vue | 30 + .../lay-sidebar/components/SidebarItem.vue | 228 + .../components/SidebarLeftCollapse.vue | 69 + .../components/SidebarLinkItem.vue | 32 + .../lay-sidebar/components/SidebarLogo.vue | 69 + .../components/SidebarTopCollapse.vue | 33 + .../lay-tag/components/TagChrome.vue | 33 + .../src/layout/components/lay-tag/index.scss | 371 + .../src/layout/components/lay-tag/index.vue | 694 ++ frontend/src/layout/frame.vue | 110 + frontend/src/layout/hooks/useBoolean.ts | 26 + .../src/layout/hooks/useDataThemeChange.ts | 138 + frontend/src/layout/hooks/useLayout.ts | 58 + frontend/src/layout/hooks/useMultiFrame.ts | 25 + frontend/src/layout/hooks/useNav.ts | 154 + frontend/src/layout/hooks/useTag.ts | 252 + frontend/src/layout/index.vue | 239 + frontend/src/layout/redirect.vue | 24 + frontend/src/layout/types.ts | 93 + frontend/src/logo.ico | Bin 0 -> 99678 bytes frontend/src/main.ts | 64 + frontend/src/plugins/echarts.ts | 44 + frontend/src/plugins/elementPlus.ts | 248 + frontend/src/router/index.ts | 254 + frontend/src/router/modules/admin/apps.ts | 55 + frontend/src/router/modules/admin/base.ts | 19 + frontend/src/router/modules/admin/home.ts | 25 + frontend/src/router/modules/admin/logs.ts | 33 + frontend/src/router/modules/admin/system.ts | 42 + frontend/src/router/modules/error.ts | 44 + frontend/src/router/modules/home/base.ts | 20 + frontend/src/router/modules/install/base.ts | 9 + frontend/src/router/modules/remaining.ts | 35 + frontend/src/router/utils.ts | 482 ++ frontend/src/store/index.ts | 9 + frontend/src/store/modules/app.ts | 85 + frontend/src/store/modules/epTheme.ts | 49 + frontend/src/store/modules/multiTags.ts | 138 + frontend/src/store/modules/permission.ts | 75 + frontend/src/store/modules/settings.ts | 35 + frontend/src/store/modules/user.ts | 109 + frontend/src/store/types.ts | 47 + frontend/src/store/utils.ts | 28 + frontend/src/style/dark.scss | 182 + frontend/src/style/element-plus.scss | 189 + frontend/src/style/index.scss | 37 + frontend/src/style/login.css | 96 + frontend/src/style/reset.scss | 250 + frontend/src/style/sidebar.scss | 704 ++ frontend/src/style/tailwind.css | 46 + frontend/src/style/theme.scss | 95 + frontend/src/style/transition.scss | 54 + frontend/src/utils/auth.ts | 118 + frontend/src/utils/globalPolyfills.ts | 7 + frontend/src/utils/http/index.ts | 231 + frontend/src/utils/http/types.d.ts | 47 + frontend/src/utils/localforage/index.ts | 109 + frontend/src/utils/localforage/types.d.ts | 166 + frontend/src/utils/message.ts | 89 + frontend/src/utils/mitt.ts | 14 + frontend/src/utils/preventDefault.ts | 28 + frontend/src/utils/print.ts | 223 + frontend/src/utils/progress/index.ts | 17 + frontend/src/utils/propTypes.ts | 39 + frontend/src/utils/responsive.ts | 42 + frontend/src/utils/sso.ts | 59 + frontend/src/utils/tree.ts | 188 + .../src/views/admin/application/apis/form.vue | 224 + .../src/views/admin/application/apis/hook.tsx | 330 + .../views/admin/application/apis/index.vue | 152 + .../src/views/admin/application/apis/rule.ts | 11 + .../admin/application/apps/bind-config.vue | 112 + .../src/views/admin/application/apps/form.vue | 96 + .../src/views/admin/application/apps/hook.tsx | 205 + .../views/admin/application/apps/index.vue | 557 ++ .../admin/application/apps/multi-config.vue | 61 + .../application/apps/register-config.vue | 81 + .../admin/application/apps/text-config.vue | 37 + .../admin/application/functions/form.vue | 167 + .../admin/application/functions/hook.tsx | 271 + .../admin/application/functions/index.vue | 212 + .../views/admin/application/functions/rule.ts | 19 + .../admin/application/variables/form.vue | 103 + .../admin/application/variables/hook.tsx | 269 + .../admin/application/variables/index.vue | 216 + .../views/admin/application/variables/rule.ts | 13 + frontend/src/views/admin/dashboard/index.vue | 301 + frontend/src/views/admin/login/index.vue | 246 + .../src/views/admin/login/utils/motion.ts | 40 + frontend/src/views/admin/login/utils/rule.ts | 28 + .../src/views/admin/login/utils/static.ts | 5 + .../admin/system/portal-navigation/index.vue | 632 ++ .../src/views/admin/system/profile/index.vue | 294 + .../src/views/admin/system/settings/index.vue | 831 ++ frontend/src/views/error/403.vue | 79 + frontend/src/views/error/404.vue | 79 + frontend/src/views/error/500.vue | 79 + frontend/src/views/error/503.vue | 61 + frontend/src/views/home/index.vue | 235 + frontend/src/views/home/layout.vue | 686 ++ frontend/src/views/install/index.vue | 309 + frontend/stylelint.config.js | 87 + frontend/tsconfig.json | 55 + frontend/types/directives.d.ts | 28 + frontend/types/global-components.d.ts | 135 + frontend/types/global.d.ts | 201 + frontend/types/index.d.ts | 80 + frontend/types/router.d.ts | 111 + frontend/types/shims-tsx.d.ts | 24 + frontend/types/shims-vue.d.ts | 11 + frontend/vite.config.ts | 67 + 239 files changed, 29542 insertions(+), 2 deletions(-) create mode 100644 frontend/.browserslistrc create mode 100644 frontend/.dockerignore create mode 100644 frontend/.editorconfig create mode 100644 frontend/.env create mode 100644 frontend/.env.development create mode 100644 frontend/.env.production create mode 100644 frontend/.env.staging create mode 100644 frontend/.gitignore create mode 100755 frontend/.husky/commit-msg create mode 100644 frontend/.husky/common.sh create mode 100755 frontend/.husky/pre-commit create mode 100644 frontend/.lintstagedrc create mode 100644 frontend/.markdownlint.json create mode 100644 frontend/.npmrc create mode 100644 frontend/.nvmrc create mode 100755 frontend/.prettierrc.js create mode 100644 frontend/.stylelintignore create mode 100644 frontend/Dockerfile create mode 100644 frontend/LICENSE create mode 100644 frontend/README.md create mode 100644 frontend/build/cdn.ts create mode 100644 frontend/build/compress.ts create mode 100644 frontend/build/info.ts create mode 100644 frontend/build/optimize.ts create mode 100644 frontend/build/plugins.ts create mode 100644 frontend/build/utils.ts create mode 100755 frontend/commitlint.config.js create mode 100755 frontend/eslint.config.js create mode 100644 frontend/index.html create mode 100644 frontend/logo.ico create mode 100644 frontend/package.json create mode 100644 frontend/pnpm-lock.yaml create mode 100755 frontend/postcss.config.js create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/public/logo.png create mode 100644 frontend/public/logo.svg create mode 100644 frontend/src/App.vue create mode 100644 frontend/src/api/admin/api.ts create mode 100644 frontend/src/api/admin/app.ts create mode 100644 frontend/src/api/admin/dashboard.ts create mode 100644 frontend/src/api/admin/function.ts create mode 100644 frontend/src/api/admin/logs.ts create mode 100644 frontend/src/api/admin/portalNavigation.ts create mode 100644 frontend/src/api/admin/profile.ts create mode 100644 frontend/src/api/admin/routes.ts create mode 100644 frontend/src/api/admin/settings.ts create mode 100644 frontend/src/api/admin/user.ts create mode 100644 frontend/src/api/admin/variable.ts create mode 100644 frontend/src/api/install/index.ts create mode 100644 frontend/src/assets/iconfont/iconfont.css create mode 100755 frontend/src/assets/iconfont/iconfont.js create mode 100644 frontend/src/assets/iconfont/iconfont.json create mode 100644 frontend/src/assets/iconfont/iconfont.ttf create mode 100644 frontend/src/assets/iconfont/iconfont.woff create mode 100644 frontend/src/assets/iconfont/iconfont.woff2 create mode 100644 frontend/src/assets/login/avatar.svg create mode 100644 frontend/src/assets/login/bg.png create mode 100644 frontend/src/assets/login/illustration.svg create mode 100644 frontend/src/assets/status/403.svg create mode 100644 frontend/src/assets/status/404.svg create mode 100644 frontend/src/assets/status/500.svg create mode 100644 frontend/src/assets/svg/back_top.svg create mode 100644 frontend/src/assets/svg/dark.svg create mode 100644 frontend/src/assets/svg/day.svg create mode 100644 frontend/src/assets/svg/enter_outlined.svg create mode 100644 frontend/src/assets/svg/exit_screen.svg create mode 100644 frontend/src/assets/svg/full_screen.svg create mode 100644 frontend/src/assets/svg/keyboard_esc.svg create mode 100644 frontend/src/assets/svg/system.svg create mode 100644 frontend/src/assets/table-bar/collapse.svg create mode 100644 frontend/src/assets/table-bar/drag.svg create mode 100644 frontend/src/assets/table-bar/expand.svg create mode 100644 frontend/src/assets/table-bar/refresh.svg create mode 100644 frontend/src/assets/table-bar/settings.svg create mode 100644 frontend/src/assets/user.jpg create mode 100644 frontend/src/components/ReAuth/index.ts create mode 100644 frontend/src/components/ReAuth/src/auth.tsx create mode 100644 frontend/src/components/ReCol/index.ts create mode 100644 frontend/src/components/ReDialog/index.ts create mode 100644 frontend/src/components/ReDialog/index.vue create mode 100644 frontend/src/components/ReDialog/type.ts create mode 100644 frontend/src/components/ReIcon/index.ts create mode 100644 frontend/src/components/ReIcon/src/hooks.ts create mode 100644 frontend/src/components/ReIcon/src/iconfont.ts create mode 100644 frontend/src/components/ReIcon/src/iconifyIconOffline.ts create mode 100644 frontend/src/components/ReIcon/src/iconifyIconOnline.ts create mode 100644 frontend/src/components/ReIcon/src/offlineIcon.ts create mode 100644 frontend/src/components/ReIcon/src/types.ts create mode 100644 frontend/src/components/RePerms/index.ts create mode 100644 frontend/src/components/RePerms/src/perms.tsx create mode 100644 frontend/src/components/RePureTableBar/index.ts create mode 100644 frontend/src/components/RePureTableBar/src/bar.tsx create mode 100644 frontend/src/components/ReSegmented/index.ts create mode 100644 frontend/src/components/ReSegmented/src/index.css create mode 100644 frontend/src/components/ReSegmented/src/index.tsx create mode 100644 frontend/src/components/ReSegmented/src/type.ts create mode 100644 frontend/src/components/ReText/index.ts create mode 100644 frontend/src/components/ReText/src/index.vue create mode 100644 frontend/src/config/index.ts create mode 100644 frontend/src/directives/auth/index.ts create mode 100644 frontend/src/directives/copy/index.ts create mode 100644 frontend/src/directives/index.ts create mode 100644 frontend/src/directives/longpress/index.ts create mode 100644 frontend/src/directives/optimize/index.ts create mode 100644 frontend/src/directives/perms/index.ts create mode 100644 frontend/src/directives/ripple/index.scss create mode 100644 frontend/src/directives/ripple/index.ts create mode 100644 frontend/src/layout/components/lay-content/index.vue create mode 100644 frontend/src/layout/components/lay-footer/index.vue create mode 100644 frontend/src/layout/components/lay-frame/index.vue create mode 100644 frontend/src/layout/components/lay-navbar/index.vue create mode 100644 frontend/src/layout/components/lay-panel/index.vue create mode 100644 frontend/src/layout/components/lay-search/components/SearchFooter.vue create mode 100644 frontend/src/layout/components/lay-search/components/SearchHistory.vue create mode 100644 frontend/src/layout/components/lay-search/components/SearchHistoryItem.vue create mode 100644 frontend/src/layout/components/lay-search/components/SearchModal.vue create mode 100644 frontend/src/layout/components/lay-search/components/SearchResult.vue create mode 100644 frontend/src/layout/components/lay-search/index.vue create mode 100644 frontend/src/layout/components/lay-search/types.ts create mode 100644 frontend/src/layout/components/lay-setting/index.vue create mode 100644 frontend/src/layout/components/lay-sidebar/NavHorizontal.vue create mode 100644 frontend/src/layout/components/lay-sidebar/NavMix.vue create mode 100644 frontend/src/layout/components/lay-sidebar/NavVertical.vue create mode 100644 frontend/src/layout/components/lay-sidebar/components/SidebarBreadCrumb.vue create mode 100644 frontend/src/layout/components/lay-sidebar/components/SidebarCenterCollapse.vue create mode 100644 frontend/src/layout/components/lay-sidebar/components/SidebarExtraIcon.vue create mode 100644 frontend/src/layout/components/lay-sidebar/components/SidebarFullScreen.vue create mode 100644 frontend/src/layout/components/lay-sidebar/components/SidebarItem.vue create mode 100644 frontend/src/layout/components/lay-sidebar/components/SidebarLeftCollapse.vue create mode 100644 frontend/src/layout/components/lay-sidebar/components/SidebarLinkItem.vue create mode 100644 frontend/src/layout/components/lay-sidebar/components/SidebarLogo.vue create mode 100644 frontend/src/layout/components/lay-sidebar/components/SidebarTopCollapse.vue create mode 100644 frontend/src/layout/components/lay-tag/components/TagChrome.vue create mode 100644 frontend/src/layout/components/lay-tag/index.scss create mode 100644 frontend/src/layout/components/lay-tag/index.vue create mode 100644 frontend/src/layout/frame.vue create mode 100644 frontend/src/layout/hooks/useBoolean.ts create mode 100644 frontend/src/layout/hooks/useDataThemeChange.ts create mode 100644 frontend/src/layout/hooks/useLayout.ts create mode 100644 frontend/src/layout/hooks/useMultiFrame.ts create mode 100644 frontend/src/layout/hooks/useNav.ts create mode 100644 frontend/src/layout/hooks/useTag.ts create mode 100644 frontend/src/layout/index.vue create mode 100644 frontend/src/layout/redirect.vue create mode 100644 frontend/src/layout/types.ts create mode 100644 frontend/src/logo.ico create mode 100644 frontend/src/main.ts create mode 100644 frontend/src/plugins/echarts.ts create mode 100644 frontend/src/plugins/elementPlus.ts create mode 100644 frontend/src/router/index.ts create mode 100644 frontend/src/router/modules/admin/apps.ts create mode 100644 frontend/src/router/modules/admin/base.ts create mode 100644 frontend/src/router/modules/admin/home.ts create mode 100644 frontend/src/router/modules/admin/logs.ts create mode 100644 frontend/src/router/modules/admin/system.ts create mode 100644 frontend/src/router/modules/error.ts create mode 100644 frontend/src/router/modules/home/base.ts create mode 100644 frontend/src/router/modules/install/base.ts create mode 100644 frontend/src/router/modules/remaining.ts create mode 100644 frontend/src/router/utils.ts create mode 100644 frontend/src/store/index.ts create mode 100644 frontend/src/store/modules/app.ts create mode 100644 frontend/src/store/modules/epTheme.ts create mode 100644 frontend/src/store/modules/multiTags.ts create mode 100644 frontend/src/store/modules/permission.ts create mode 100644 frontend/src/store/modules/settings.ts create mode 100644 frontend/src/store/modules/user.ts create mode 100644 frontend/src/store/types.ts create mode 100644 frontend/src/store/utils.ts create mode 100644 frontend/src/style/dark.scss create mode 100644 frontend/src/style/element-plus.scss create mode 100644 frontend/src/style/index.scss create mode 100644 frontend/src/style/login.css create mode 100644 frontend/src/style/reset.scss create mode 100644 frontend/src/style/sidebar.scss create mode 100644 frontend/src/style/tailwind.css create mode 100644 frontend/src/style/theme.scss create mode 100644 frontend/src/style/transition.scss create mode 100644 frontend/src/utils/auth.ts create mode 100644 frontend/src/utils/globalPolyfills.ts create mode 100644 frontend/src/utils/http/index.ts create mode 100644 frontend/src/utils/http/types.d.ts create mode 100644 frontend/src/utils/localforage/index.ts create mode 100644 frontend/src/utils/localforage/types.d.ts create mode 100644 frontend/src/utils/message.ts create mode 100644 frontend/src/utils/mitt.ts create mode 100644 frontend/src/utils/preventDefault.ts create mode 100644 frontend/src/utils/print.ts create mode 100644 frontend/src/utils/progress/index.ts create mode 100644 frontend/src/utils/propTypes.ts create mode 100644 frontend/src/utils/responsive.ts create mode 100644 frontend/src/utils/sso.ts create mode 100644 frontend/src/utils/tree.ts create mode 100644 frontend/src/views/admin/application/apis/form.vue create mode 100644 frontend/src/views/admin/application/apis/hook.tsx create mode 100644 frontend/src/views/admin/application/apis/index.vue create mode 100644 frontend/src/views/admin/application/apis/rule.ts create mode 100644 frontend/src/views/admin/application/apps/bind-config.vue create mode 100644 frontend/src/views/admin/application/apps/form.vue create mode 100644 frontend/src/views/admin/application/apps/hook.tsx create mode 100644 frontend/src/views/admin/application/apps/index.vue create mode 100644 frontend/src/views/admin/application/apps/multi-config.vue create mode 100644 frontend/src/views/admin/application/apps/register-config.vue create mode 100644 frontend/src/views/admin/application/apps/text-config.vue create mode 100644 frontend/src/views/admin/application/functions/form.vue create mode 100644 frontend/src/views/admin/application/functions/hook.tsx create mode 100644 frontend/src/views/admin/application/functions/index.vue create mode 100644 frontend/src/views/admin/application/functions/rule.ts create mode 100644 frontend/src/views/admin/application/variables/form.vue create mode 100644 frontend/src/views/admin/application/variables/hook.tsx create mode 100644 frontend/src/views/admin/application/variables/index.vue create mode 100644 frontend/src/views/admin/application/variables/rule.ts create mode 100644 frontend/src/views/admin/dashboard/index.vue create mode 100644 frontend/src/views/admin/login/index.vue create mode 100644 frontend/src/views/admin/login/utils/motion.ts create mode 100644 frontend/src/views/admin/login/utils/rule.ts create mode 100644 frontend/src/views/admin/login/utils/static.ts create mode 100644 frontend/src/views/admin/system/portal-navigation/index.vue create mode 100644 frontend/src/views/admin/system/profile/index.vue create mode 100644 frontend/src/views/admin/system/settings/index.vue create mode 100644 frontend/src/views/error/403.vue create mode 100644 frontend/src/views/error/404.vue create mode 100644 frontend/src/views/error/500.vue create mode 100644 frontend/src/views/error/503.vue create mode 100644 frontend/src/views/home/index.vue create mode 100644 frontend/src/views/home/layout.vue create mode 100644 frontend/src/views/install/index.vue create mode 100755 frontend/stylelint.config.js create mode 100644 frontend/tsconfig.json create mode 100644 frontend/types/directives.d.ts create mode 100644 frontend/types/global-components.d.ts create mode 100644 frontend/types/global.d.ts create mode 100644 frontend/types/index.d.ts create mode 100644 frontend/types/router.d.ts create mode 100644 frontend/types/shims-tsx.d.ts create mode 100644 frontend/types/shims-vue.d.ts create mode 100644 frontend/vite.config.ts diff --git a/.gitignore b/.gitignore index dd1aeb8..95f04ca 100644 --- a/.gitignore +++ b/.gitignore @@ -14,8 +14,16 @@ config.json logs/ *.log -# 前端工程源码 (独立维护) -frontend/ +# 前端工程源码已纳入同仓维护(仅忽略依赖/环境/产物) +frontend/node_modules/ +frontend/dist/ +frontend/.vite/ +frontend/.turbo/ +frontend/coverage/ +frontend/.pnpm-store/ +frontend/.eslintcache +frontend/.env.local +frontend/.env.*.local # 升级/迁移临时缓存目录 更新内容/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 76cd53c..93c310a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # 更新日志 +## 2026-05-25 + +### 仓库维护 + +- [2026-05-25] [调整] 前后端改为同仓维护:取消忽略 frontend 源码,仅忽略前端依赖/环境/产物,并移除 frontend 内嵌 Git 仓库关联。 +- [2026-05-25] [调整] 放行前端 .env/.env.development/.env.production/.env.staging 推送,改为仅忽略 .env.local 与 .env.*.local。 + ## 2026-05-24 ### 登录 diff --git a/frontend/.browserslistrc b/frontend/.browserslistrc new file mode 100644 index 0000000..40bd99c --- /dev/null +++ b/frontend/.browserslistrc @@ -0,0 +1,4 @@ +> 1% +last 2 versions +not dead +not ie 11 \ No newline at end of file diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 0000000..0376edd --- /dev/null +++ b/frontend/.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/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 0000000..ea6e20f --- /dev/null +++ b/frontend/.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/frontend/.env b/frontend/.env new file mode 100644 index 0000000..09344c1 --- /dev/null +++ b/frontend/.env @@ -0,0 +1,5 @@ +# 平台本地运行端口号 +VITE_PORT = 8848 + +# 是否隐藏首页 隐藏 true 不隐藏 false (勿删除,VITE_HIDE_HOME只需在.env文件配置) +VITE_HIDE_HOME = false diff --git a/frontend/.env.development b/frontend/.env.development new file mode 100644 index 0000000..90d1146 --- /dev/null +++ b/frontend/.env.development @@ -0,0 +1,8 @@ +# 平台本地运行端口号 +VITE_PORT = 8848 + +# 开发环境读取配置文件路径 +VITE_PUBLIC_PATH = / + +# 开发环境路由历史模式(Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数") +VITE_ROUTER_HISTORY = "hash" diff --git a/frontend/.env.production b/frontend/.env.production new file mode 100644 index 0000000..84e6086 --- /dev/null +++ b/frontend/.env.production @@ -0,0 +1,13 @@ +# 线上环境平台打包路径 +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" \ No newline at end of file diff --git a/frontend/.env.staging b/frontend/.env.staging new file mode 100644 index 0000000..65b57e3 --- /dev/null +++ b/frontend/.env.staging @@ -0,0 +1,16 @@ +# 预发布也需要生产环境的行为 +# 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" diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..423ed2b --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,22 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local +.eslintcache +report.html +vite.config.*.timestamp* + +yarn.lock +npm-debug.log* +.pnpm-error.log* +.pnpm-debug.log +tests/**/coverage/ + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/frontend/.husky/commit-msg b/frontend/.husky/commit-msg new file mode 100755 index 0000000..5ee2d16 --- /dev/null +++ b/frontend/.husky/commit-msg @@ -0,0 +1,8 @@ +#!/bin/sh + +# shellcheck source=./_/husky.sh +. "$(dirname "$0")/_/husky.sh" + +PATH="/usr/local/bin:$PATH" + +npx --no-install commitlint --edit "$1" \ No newline at end of file diff --git a/frontend/.husky/common.sh b/frontend/.husky/common.sh new file mode 100644 index 0000000..5f0540b --- /dev/null +++ b/frontend/.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/frontend/.husky/pre-commit b/frontend/.husky/pre-commit new file mode 100755 index 0000000..6e229ea --- /dev/null +++ b/frontend/.husky/pre-commit @@ -0,0 +1,10 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" +. "$(dirname "$0")/common.sh" + +[ -n "$CI" ] && exit 0 + +PATH="/usr/local/bin:$PATH" + +# Perform lint check on files in the staging area through .lintstagedrc configuration +pnpm exec lint-staged \ No newline at end of file diff --git a/frontend/.lintstagedrc b/frontend/.lintstagedrc new file mode 100644 index 0000000..ebf359a --- /dev/null +++ b/frontend/.lintstagedrc @@ -0,0 +1,20 @@ +{ + "*.{js,jsx,ts,tsx}": [ + "prettier --cache --ignore-unknown --write", + "eslint --cache --fix" + ], + "{!(package)*.json,*.code-snippets,.!({browserslist,npm,nvm})*rc}": [ + "prettier --cache --write--parser json" + ], + "package.json": ["prettier --cache --write"], + "*.vue": [ + "prettier --write", + "eslint --cache --fix", + "stylelint --fix --allow-empty-input" + ], + "*.{css,scss,html}": [ + "prettier --cache --ignore-unknown --write", + "stylelint --fix --allow-empty-input" + ], + "*.md": ["prettier --cache --ignore-unknown --write"] +} diff --git a/frontend/.markdownlint.json b/frontend/.markdownlint.json new file mode 100644 index 0000000..d628d44 --- /dev/null +++ b/frontend/.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/frontend/.npmrc b/frontend/.npmrc new file mode 100644 index 0000000..dddf8bc --- /dev/null +++ b/frontend/.npmrc @@ -0,0 +1,4 @@ +shell-emulator=true +shamefully-hoist=true +enable-pre-post-scripts=false +strict-peer-dependencies=false \ No newline at end of file diff --git a/frontend/.nvmrc b/frontend/.nvmrc new file mode 100644 index 0000000..c07f712 --- /dev/null +++ b/frontend/.nvmrc @@ -0,0 +1 @@ +v22.20.0 \ No newline at end of file diff --git a/frontend/.prettierrc.js b/frontend/.prettierrc.js new file mode 100755 index 0000000..775d970 --- /dev/null +++ b/frontend/.prettierrc.js @@ -0,0 +1,9 @@ +// @ts-check + +/** @type {import("prettier").Config} */ +export default { + bracketSpacing: true, + singleQuote: false, + arrowParens: "avoid", + trailingComma: "none" +}; diff --git a/frontend/.stylelintignore b/frontend/.stylelintignore new file mode 100644 index 0000000..0c34e61 --- /dev/null +++ b/frontend/.stylelintignore @@ -0,0 +1,4 @@ +/dist/* +/public/* +public/* +src/style/reset.scss \ No newline at end of file diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..cd6d51a --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,20 @@ +FROM node:20-alpine as build-stage + +WORKDIR /app +RUN corepack enable +RUN corepack prepare pnpm@latest --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/frontend/LICENSE b/frontend/LICENSE new file mode 100644 index 0000000..6f9eb8b --- /dev/null +++ b/frontend/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 skyle1995 (https://github.com/skyle1995) + +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. \ No newline at end of file diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..cee0521 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,52 @@ +# NetworkAuth-Web + +本项目是基于 [vue-pure-admin](https://github.com/pure-admin/vue-pure-admin) 开发的前端管理系统模版。 + +## 相关项目 + +- **前端框架**:[vue-pure-admin](https://github.com/pure-admin/vue-pure-admin) +- **后端项目**:[NetworkAuth](https://github.com/skyle1995/NetworkAuth) + +## 简介 + +NetworkAuth-Web 是一款中后台管理系统模版,配套 NetworkAuth 后端服务使用,提供应用程序管理、API接口管理、变量管理、用户认证等功能的可视化操作。 + +## 目录结构 (Views 页面归类) + +当前前端页面的主要视图均存放在 `src/views` 目录下,并按照功能模块进行了如下分组归类: + +- **`admin/`**:后台管理模块(需要登录授权) + - `dashboard/`:控制台仪表盘 + - `application/`:应用相关模块分组 + - `apps/`:应用管理模块(应用列表、各类配置等) + - `apis/`:API 接口管理模块 + - `functions/`:函数代码管理模块 + - `variables/`:变量配置管理模块 + - `system/`:系统相关模块分组 + - `settings/`:系统基础设置 + - `profile/`:个人中心 + - `logs/`:系统日志(包含登录日志、操作日志等) + - `login/`:后台登录页面 +- **`home/`**:前台首页(面向普通用户的展示页) +- **`install/`**:系统安装向导(初次部署时的配置指引) +- **`error/`**:系统错误页(403、404、500、503等) + +## 快速开始 + +### 安装依赖 + +```bash +pnpm install +``` + +### 启动项目 + +```bash +pnpm dev +``` + +### 项目打包 + +```bash +pnpm build +``` diff --git a/frontend/build/cdn.ts b/frontend/build/cdn.ts new file mode 100644 index 0000000..c56e4ad --- /dev/null +++ b/frontend/build/cdn.ts @@ -0,0 +1,55 @@ +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 + * 注意:上面提到的仅限外网使用也不是完全肯定的,如果你们公司内网部署的有相关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/frontend/build/compress.ts b/frontend/build/compress.ts new file mode 100644 index 0000000..6178986 --- /dev/null +++ b/frontend/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/frontend/build/info.ts b/frontend/build/info.ts new file mode 100644 index 0000000..ac5a34a --- /dev/null +++ b/frontend/build/info.ts @@ -0,0 +1,57 @@ +import type { Plugin } from "vite"; +import gradient from "gradient-string"; +import { getPackageSize } from "./utils"; +import dayjs, { type Dayjs } from "dayjs"; +import duration from "dayjs/plugin/duration"; +import boxen, { type Options as BoxenOptions } from "boxen"; +dayjs.extend(duration); + +const welcomeMessage = gradient(["cyan", "magenta"]).multiline( + `您好! 欢迎使用 NetworkAuth-Vue 项目\n基于 Vue3 + Element Plus 构建` +); + +const boxenOptions: BoxenOptions = { + padding: 0.5, + borderColor: "cyan", + borderStyle: "round" +}; + +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(boxen(welcomeMessage, boxenOptions)); + if (config.command === "build") { + startTime = dayjs(new Date()); + } + }, + closeBundle() { + if (config.command === "build") { + endTime = dayjs(new Date()); + getPackageSize({ + folder: outDir, + callback: (size: string) => { + console.log( + boxen( + gradient(["cyan", "magenta"]).multiline( + `🎉 恭喜打包完成(总用时${dayjs + .duration(endTime.diff(startTime)) + .format("mm分ss秒")},打包后的大小为${size})` + ), + boxenOptions + ) + ); + } + }); + } + } + }; +} diff --git a/frontend/build/optimize.ts b/frontend/build/optimize.ts new file mode 100644 index 0000000..3fad18f --- /dev/null +++ b/frontend/build/optimize.ts @@ -0,0 +1,29 @@ +/** + * 此文件作用于 `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", + "dayjs", + "axios", + "pinia", + "vue-types", + "js-cookie", + "vue-tippy", + "pinyin-pro", + "sortablejs", + "@vueuse/core", + "@pureadmin/utils", + "responsive-storage" +]; + +/** + * 在预构建中强制排除的依赖项 + * 温馨提示:平台推荐的使用方式是哪里需要哪里引入而且都是单个的引入,不需要预构建,直接让浏览器加载就好 + */ +const exclude = ["@iconify/json"]; + +export { include, exclude }; diff --git a/frontend/build/plugins.ts b/frontend/build/plugins.ts new file mode 100644 index 0000000..a069cf3 --- /dev/null +++ b/frontend/build/plugins.ts @@ -0,0 +1,58 @@ +import { cdn } from "./cdn"; +import vue from "@vitejs/plugin-vue"; +import { viteBuildInfo } from "./info"; +import svgLoader from "vite-svg-loader"; +import Icons from "unplugin-icons/vite"; +import type { PluginOption } from "vite"; +import vueJsx from "@vitejs/plugin-vue-jsx"; +import tailwindcss from "@tailwindcss/vite"; +import { configCompressPlugin } from "./compress"; +import removeNoMatch from "vite-plugin-router-warn"; +import { visualizer } from "rollup-plugin-visualizer"; +import removeConsole from "vite-plugin-remove-console"; +import { codeInspectorPlugin } from "code-inspector-plugin"; + +export function getPluginsList( + VITE_CDN: boolean, + VITE_COMPRESSION: ViteCompression +): PluginOption[] { + const lifecycle = process.env.npm_lifecycle_event; + return [ + tailwindcss(), + vue(), + // jsx、tsx语法支持 + vueJsx(), + /** + * 在页面上按住组合键时,鼠标在页面移动即会在 DOM 上出现遮罩层并显示相关信息,点击一下将自动打开 IDE 并将光标定位到元素对应的代码位置 + * Mac 默认组合键 Option + Shift + * Windows 默认组合键 Alt + Shift + * 更多用法看 https://inspector.fe-dev.cn/guide/start.html + */ + codeInspectorPlugin({ + bundler: "vite", + hideConsole: true + }), + viteBuildInfo(), + /** + * 开发环境下移除非必要的vue-router动态路由警告No match found for location with path + * 非必要具体看 https://github.com/vuejs/router/issues/521 和 https://github.com/vuejs/router/issues/359 + * vite-plugin-router-warn只在开发环境下启用,只处理vue-router文件并且只在服务启动或重启时运行一次,性能消耗可忽略不计 + */ + removeNoMatch(), + // svg组件化支持 + svgLoader(), + // 自动按需加载图标 + Icons({ + compiler: "vue3", + scale: 1 + }), + VITE_CDN ? cdn : null, + configCompressPlugin(VITE_COMPRESSION), + // 线上环境删除console + removeConsole({ external: ["src/assets/iconfont/iconfont.js"] }), + // 打包分析 + lifecycle === "report" + ? visualizer({ open: true, brotliSize: true, filename: "report.html" }) + : (null as any) + ]; +} diff --git a/frontend/build/utils.ts b/frontend/build/utils.ts new file mode 100644 index 0000000..3d778fe --- /dev/null +++ b/frontend/build/utils.ts @@ -0,0 +1,110 @@ +import dayjs from "dayjs"; +import { readdir, stat } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { dirname, resolve } from "node:path"; +import { sum, formatBytes } from "@pureadmin/utils"; +import { + name, + version, + engines, + dependencies, + devDependencies +} from "../package.json"; + +/** 启动`node`进程时所在工作目录的绝对路径 */ +const root: string = process.cwd(); + +/** + * @description 根据可选的路径片段生成一个新的绝对路径 + * @param dir 路径片段,默认`build` + * @param metaUrl 模块的完整`url`,如果在`build`目录外调用必传`import.meta.url` + */ +const pathResolve = (dir = ".", metaUrl = import.meta.url) => { + // 当前文件目录的绝对路径 + const currentFileDir = dirname(fileURLToPath(metaUrl)); + // build 目录的绝对路径 + const buildDir = resolve(currentFileDir, "build"); + // 解析的绝对路径 + const resolvedPath = resolve(currentFileDir, dir); + // 检查解析的绝对路径是否在 build 目录内 + if (resolvedPath.startsWith(buildDir)) { + // 在 build 目录内,返回当前文件路径 + return fileURLToPath(metaUrl); + } + // 不在 build 目录内,返回解析后的绝对路径 + return resolvedPath; +}; + +/** 设置别名 */ +const alias: Record = { + "@": pathResolve("../src"), + "@build": pathResolve() +}; + +/** 平台的名称、版本、运行所需的`node`和`pnpm`版本、依赖、最后构建时间的类型提示 */ +const __APP_INFO__ = { + pkg: { name, version, engines, dependencies, devDependencies }, + lastBuildTime: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss") +}; + +/** 处理环境变量 */ +const wrapperEnv = (envConf: Recordable): ViteEnv => { + // 默认值 + const ret: ViteEnv = { + VITE_PORT: 8848, + VITE_PUBLIC_PATH: "", + VITE_ROUTER_HISTORY: "", + VITE_CDN: false, + VITE_HIDE_HOME: "false", + VITE_COMPRESSION: "none" + }; + + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, "\n"); + realName = + realName === "true" ? true : realName === "false" ? false : realName; + + if (envName === "VITE_PORT") { + realName = Number(realName); + } + ret[envName] = realName; + if (typeof realName === "string") { + process.env[envName] = realName; + } else if (typeof realName === "object") { + process.env[envName] = JSON.stringify(realName); + } + } + return ret; +}; + +const fileListTotal: number[] = []; + +/** 获取指定文件夹中所有文件的总大小 */ +const getPackageSize = options => { + const { folder = "dist", callback, format = true } = options; + readdir(folder, (err, files: string[]) => { + if (err) throw err; + let count = 0; + const checkEnd = () => { + ++count == files.length && + callback(format ? formatBytes(sum(fileListTotal)) : sum(fileListTotal)); + }; + files.forEach((item: string) => { + stat(`${folder}/${item}`, async (err, stats) => { + if (err) throw err; + if (stats.isFile()) { + fileListTotal.push(stats.size); + checkEnd(); + } else if (stats.isDirectory()) { + getPackageSize({ + folder: `${folder}/${item}/`, + callback: checkEnd + }); + } + }); + }); + files.length === 0 && callback(0); + }); +}; + +export { root, pathResolve, alias, __APP_INFO__, wrapperEnv, getPackageSize }; diff --git a/frontend/commitlint.config.js b/frontend/commitlint.config.js new file mode 100755 index 0000000..eea755d --- /dev/null +++ b/frontend/commitlint.config.js @@ -0,0 +1,35 @@ +// @ts-check + +/** @type {import("@commitlint/types").UserConfig} */ +export default { + 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/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100755 index 0000000..a5be0cd --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,173 @@ +import js from "@eslint/js"; +import tseslint from "typescript-eslint"; +import pluginVue from "eslint-plugin-vue"; +import * as parserVue from "vue-eslint-parser"; +import configPrettier from "eslint-config-prettier"; +import pluginPrettier from "eslint-plugin-prettier"; +import { defineConfig, globalIgnores } from "eslint/config"; + +export default defineConfig([ + globalIgnores([ + "**/.*", + "dist/*", + "*.d.ts", + "public/*", + "src/assets/**", + "src/**/iconfont/**" + ]), + { + ...js.configs.recommended, + languageOptions: { + globals: { + // types/index.d.ts + RefType: "readonly", + EmitType: "readonly", + TargetContext: "readonly", + ComponentRef: "readonly", + ElRef: "readonly", + ForDataType: "readonly", + AnyFunction: "readonly", + PropType: "readonly", + Writable: "readonly", + Nullable: "readonly", + NonNullable: "readonly", + Recordable: "readonly", + ReadonlyRecordable: "readonly", + Indexable: "readonly", + DeepPartial: "readonly", + Without: "readonly", + Exclusive: "readonly", + TimeoutHandle: "readonly", + IntervalHandle: "readonly", + Effect: "readonly", + ChangeEvent: "readonly", + WheelEvent: "readonly", + ImportMetaEnv: "readonly", + Fn: "readonly", + PromiseFn: "readonly", + ComponentElRef: "readonly", + parseInt: "readonly", + parseFloat: "readonly" + } + }, + plugins: { + prettier: pluginPrettier + }, + rules: { + ...configPrettier.rules, + ...pluginPrettier.configs.recommended.rules, + "no-debugger": "off", + "no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_" + } + ], + "prettier/prettier": [ + "error", + { + endOfLine: "auto" + } + ] + } + }, + ...tseslint.config({ + extends: [...tseslint.configs.recommended], + files: ["**/*.?([cm])ts", "**/*.?([cm])tsx"], + rules: { + "@typescript-eslint/no-redeclare": "error", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/prefer-as-const": "warn", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-unused-expressions": "off", + "@typescript-eslint/no-unsafe-function-type": "off", + "@typescript-eslint/no-import-type-side-effects": "error", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/consistent-type-imports": [ + "error", + { disallowTypeAnnotations: false, fixStyle: "inline-type-imports" } + ], + "@typescript-eslint/prefer-literal-enum-member": [ + "error", + { allowBitwiseExpressions: true } + ], + "@typescript-eslint/no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_" + } + ] + } + }), + { + files: ["**/*.d.ts"], + rules: { + "eslint-comments/no-unlimited-disable": "off", + "import/no-duplicates": "off", + "no-restricted-syntax": "off", + "unused-imports/no-unused-vars": "off" + } + }, + { + files: ["**/*.?([cm])js"], + rules: { + "@typescript-eslint/no-require-imports": "off" + } + }, + { + files: ["**/*.vue"], + languageOptions: { + globals: { + $: "readonly", + $$: "readonly", + $computed: "readonly", + $customRef: "readonly", + $ref: "readonly", + $shallowRef: "readonly", + $toRef: "readonly" + }, + parser: parserVue, + parserOptions: { + ecmaFeatures: { + jsx: true + }, + extraFileExtensions: [".vue"], + parser: tseslint.parser, + sourceType: "module" + } + }, + plugins: { + "@typescript-eslint": tseslint.plugin, + vue: pluginVue + }, + processor: pluginVue.processors[".vue"], + rules: { + ...pluginVue.configs.base.rules, + ...pluginVue.configs.essential.rules, + ...pluginVue.configs.recommended.rules, + "no-undef": "off", + "no-unused-vars": "off", + "vue/no-v-html": "off", + "vue/require-default-prop": "off", + "vue/require-explicit-emits": "off", + "vue/multi-word-component-names": "off", + "vue/no-setup-props-reactivity-loss": "off", + "vue/html-self-closing": [ + "error", + { + html: { + void: "always", + normal: "always", + component: "always" + }, + svg: "always", + math: "always" + } + ] + } + } +]); diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..aa2a637 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,84 @@ + + + + + + + + 加载中... + + + + +
+ +
+
+ + + diff --git a/frontend/logo.ico b/frontend/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..7100dc6c73789504fca1e2183c0de227b8d465fe GIT binary patch literal 99678 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 I_x|Jg54jX%d;kCd literal 0 HcmV?d00001 diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..306846c --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,164 @@ +{ + "name": "network-auth-web", + "version": "1.0.3", + "description": "基于 vue-pure-admin 开发的 NetworkAuth 前端管理控制台", + "private": true, + "type": "module", + "scripts": { + "dev": "BROWSERSLIST_IGNORE_OLD_DATA=true NODE_OPTIONS=--max-old-space-size=4096 vite", + "serve": "pnpm dev", + "build": "rimraf dist && BROWSERSLIST_IGNORE_OLD_DATA=true 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 . -r", + "clean:cache": "rimraf .eslintcache && rimraf pnpm-lock.yaml && rimraf node_modules && pnpm store prune && 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 --cache --fix \"**/*.{html,vue,css,scss}\" --cache-location node_modules/.cache/stylelint/", + "lint": "pnpm lint:eslint && pnpm lint:prettier && pnpm lint:stylelint", + "prepare": "husky", + "preinstall": "npx only-allow pnpm" + }, + "keywords": [ + "network-auth", + "vue-pure-admin", + "element-plus", + "tailwindcss", + "pure-admin", + "typescript", + "pinia", + "vue3", + "vite", + "esm" + ], + "homepage": "https://github.com/skyle1995/NetworkAuth-Web", + "repository": { + "type": "git", + "url": "git+https://github.com/skyle1995/NetworkAuth-Web.git" + }, + "bugs": { + "url": "https://github.com/skyle1995/NetworkAuth-Web/issues" + }, + "license": "MIT", + "author": { + "name": "skyle1995", + "email": "skyle1995@163.com", + "url": "https://github.com/skyle1995" + }, + "dependencies": { + "@pureadmin/descriptions": "^1.2.1", + "@pureadmin/table": "^3.3.0", + "@pureadmin/utils": "^2.6.2", + "@vueuse/core": "^14.0.0", + "@vueuse/motion": "^3.0.3", + "animate.css": "^4.1.1", + "axios": "^1.12.2", + "codemirror": "^5.65.21", + "codemirror-editor-vue3": "^2.8.0", + "dayjs": "^1.11.18", + "echarts": "^6.0.0", + "element-plus": "^2.11.5", + "js-cookie": "^3.0.5", + "localforage": "^1.10.0", + "mitt": "^3.0.1", + "nprogress": "^0.2.0", + "path-browserify": "^1.0.1", + "pinia": "^3.0.3", + "pinyin-pro": "^3.27.0", + "qs": "^6.14.0", + "responsive-storage": "^2.2.0", + "sortablejs": "^1.15.6", + "vue": "^3.5.22", + "vue-router": "^4.6.3", + "vue-tippy": "^6.7.1", + "vue-types": "^6.0.0" + }, + "devDependencies": { + "@commitlint/cli": "^20.1.0", + "@commitlint/config-conventional": "^20.0.0", + "@commitlint/types": "^20.0.0", + "@eslint/js": "^9.38.0", + "@iconify/json": "^2.2.400", + "@iconify/vue": "4.2.0", + "@tailwindcss/vite": "^4.1.16", + "@types/js-cookie": "^3.0.6", + "@types/node": "^20.19.23", + "@types/nprogress": "^0.2.3", + "@types/path-browserify": "^1.0.3", + "@types/qs": "^6.14.0", + "@types/sortablejs": "^1.15.9", + "@vitejs/plugin-vue": "^6.0.1", + "@vitejs/plugin-vue-jsx": "^5.1.1", + "baseline-browser-mapping": "^2.10.11", + "boxen": "^8.0.1", + "code-inspector-plugin": "^1.2.10", + "cssnano": "^7.1.1", + "eslint": "^9.38.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-vue": "^10.5.1", + "gradient-string": "^3.0.0", + "husky": "^9.1.7", + "lint-staged": "^16.2.6", + "postcss": "^8.5.6", + "postcss-html": "^1.8.0", + "postcss-load-config": "^6.0.1", + "postcss-scss": "^4.0.9", + "prettier": "^3.6.2", + "rimraf": "^6.0.1", + "rollup-plugin-visualizer": "^6.0.5", + "sass": "^1.93.2", + "stylelint": "^16.25.0", + "stylelint-config-recess-order": "^7.4.0", + "stylelint-config-recommended-vue": "^1.6.1", + "stylelint-config-standard-scss": "^14.0.0", + "stylelint-prettier": "^5.0.3", + "svgo": "^4.0.0", + "tailwindcss": "^4.1.16", + "typescript": "^5.9.3", + "typescript-eslint": "^8.46.2", + "unplugin-icons": "^22.5.0", + "vite": "^7.1.12", + "vite-plugin-cdn-import": "^1.0.1", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-remove-console": "^2.2.0", + "vite-plugin-router-warn": "^1.0.0", + "vite-svg-loader": "^5.1.0", + "vue-eslint-parser": "^10.2.0", + "vue-tsc": "^3.1.2" + }, + "engines": { + "node": "^20.19.0 || >=22.13.0", + "pnpm": ">=9" + }, + "pnpm": { + "allowedDeprecatedVersions": { + "are-we-there-yet": "*", + "sourcemap-codec": "*", + "lodash.isequal": "*", + "domexception": "*", + "w3c-hr-time": "*", + "inflight": "*", + "npmlog": "*", + "rimraf": "*", + "stable": "*", + "gauge": "*", + "abab": "*", + "glob": "*" + }, + "onlyBuiltDependencies": [ + "@parcel/watcher", + "core-js", + "es5-ext", + "esbuild", + "typeit", + "vue-demi" + ], + "ignoredBuiltDependencies": [ + "@tailwindcss/oxide" + ] + } +} \ No newline at end of file diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml new file mode 100644 index 0000000..15e67d8 --- /dev/null +++ b/frontend/pnpm-lock.yaml @@ -0,0 +1,7106 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@pureadmin/descriptions': + specifier: ^1.2.1 + version: 1.2.1(echarts@6.0.0)(element-plus@2.11.5(vue@3.5.22(typescript@5.9.3)))(typescript@5.9.3) + '@pureadmin/table': + specifier: ^3.3.0 + version: 3.3.0(element-plus@2.11.5(vue@3.5.22(typescript@5.9.3)))(typescript@5.9.3) + '@pureadmin/utils': + specifier: ^2.6.2 + version: 2.6.2(echarts@6.0.0)(vue@3.5.22(typescript@5.9.3)) + '@vueuse/core': + specifier: ^14.0.0 + version: 14.0.0(vue@3.5.22(typescript@5.9.3)) + '@vueuse/motion': + specifier: ^3.0.3 + version: 3.0.3(vue@3.5.22(typescript@5.9.3)) + animate.css: + specifier: ^4.1.1 + version: 4.1.1 + axios: + specifier: ^1.12.2 + version: 1.12.2 + codemirror: + specifier: ^5.65.21 + version: 5.65.21 + codemirror-editor-vue3: + specifier: ^2.8.0 + version: 2.8.0(codemirror@5.65.21)(diff-match-patch@1.0.5)(vue@3.5.22(typescript@5.9.3)) + dayjs: + specifier: ^1.11.18 + version: 1.11.18 + echarts: + specifier: ^6.0.0 + version: 6.0.0 + element-plus: + specifier: ^2.11.5 + version: 2.11.5(vue@3.5.22(typescript@5.9.3)) + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 + localforage: + specifier: ^1.10.0 + version: 1.10.0 + mitt: + specifier: ^3.0.1 + version: 3.0.1 + nprogress: + specifier: ^0.2.0 + version: 0.2.0 + path-browserify: + specifier: ^1.0.1 + version: 1.0.1 + pinia: + specifier: ^3.0.3 + version: 3.0.3(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)) + pinyin-pro: + specifier: ^3.27.0 + version: 3.27.0 + qs: + specifier: ^6.14.0 + version: 6.14.0 + responsive-storage: + specifier: ^2.2.0 + version: 2.2.0 + sortablejs: + specifier: ^1.15.6 + version: 1.15.6 + vue: + specifier: ^3.5.22 + version: 3.5.22(typescript@5.9.3) + vue-router: + specifier: ^4.6.3 + version: 4.6.3(vue@3.5.22(typescript@5.9.3)) + vue-tippy: + specifier: ^6.7.1 + version: 6.7.1(vue@3.5.22(typescript@5.9.3)) + vue-types: + specifier: ^6.0.0 + version: 6.0.0(vue@3.5.22(typescript@5.9.3)) + devDependencies: + '@commitlint/cli': + specifier: ^20.1.0 + version: 20.1.0(@types/node@20.19.23)(typescript@5.9.3) + '@commitlint/config-conventional': + specifier: ^20.0.0 + version: 20.0.0 + '@commitlint/types': + specifier: ^20.0.0 + version: 20.0.0 + '@eslint/js': + specifier: ^9.38.0 + version: 9.38.0 + '@iconify/json': + specifier: ^2.2.400 + version: 2.2.400 + '@iconify/vue': + specifier: 4.2.0 + version: 4.2.0(vue@3.5.22(typescript@5.9.3)) + '@tailwindcss/vite': + specifier: ^4.1.16 + version: 4.1.16(vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1)) + '@types/js-cookie': + specifier: ^3.0.6 + version: 3.0.6 + '@types/node': + specifier: ^20.19.23 + version: 20.19.23 + '@types/nprogress': + specifier: ^0.2.3 + version: 0.2.3 + '@types/path-browserify': + specifier: ^1.0.3 + version: 1.0.3 + '@types/qs': + specifier: ^6.14.0 + version: 6.14.0 + '@types/sortablejs': + specifier: ^1.15.9 + version: 1.15.9 + '@vitejs/plugin-vue': + specifier: ^6.0.1 + version: 6.0.1(vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': + specifier: ^5.1.1 + version: 5.1.1(vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) + baseline-browser-mapping: + specifier: ^2.10.11 + version: 2.10.11 + boxen: + specifier: ^8.0.1 + version: 8.0.1 + code-inspector-plugin: + specifier: ^1.2.10 + version: 1.2.10 + cssnano: + specifier: ^7.1.1 + version: 7.1.1(postcss@8.5.6) + eslint: + specifier: ^9.38.0 + version: 9.38.0(jiti@2.6.1) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-prettier: + specifier: ^5.5.4 + version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(prettier@3.6.2) + eslint-plugin-vue: + specifier: ^10.5.1 + version: 10.5.1(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.38.0(jiti@2.6.1))) + gradient-string: + specifier: ^3.0.0 + version: 3.0.0 + husky: + specifier: ^9.1.7 + version: 9.1.7 + lint-staged: + specifier: ^16.2.6 + version: 16.2.6 + postcss: + specifier: ^8.5.6 + version: 8.5.6 + postcss-html: + specifier: ^1.8.0 + version: 1.8.0 + postcss-load-config: + specifier: ^6.0.1 + version: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1) + postcss-scss: + specifier: ^4.0.9 + version: 4.0.9(postcss@8.5.6) + prettier: + specifier: ^3.6.2 + version: 3.6.2 + rimraf: + specifier: ^6.0.1 + version: 6.0.1 + rollup-plugin-visualizer: + specifier: ^6.0.5 + version: 6.0.5(rollup@4.52.5) + sass: + specifier: ^1.93.2 + version: 1.93.2 + stylelint: + specifier: ^16.25.0 + version: 16.25.0(typescript@5.9.3) + stylelint-config-recess-order: + specifier: ^7.4.0 + version: 7.4.0(stylelint-order@7.0.0(stylelint@16.25.0(typescript@5.9.3)))(stylelint@16.25.0(typescript@5.9.3)) + stylelint-config-recommended-vue: + specifier: ^1.6.1 + version: 1.6.1(postcss-html@1.8.0)(stylelint@16.25.0(typescript@5.9.3)) + stylelint-config-standard-scss: + specifier: ^14.0.0 + version: 14.0.0(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)) + stylelint-prettier: + specifier: ^5.0.3 + version: 5.0.3(prettier@3.6.2)(stylelint@16.25.0(typescript@5.9.3)) + svgo: + specifier: ^4.0.0 + version: 4.0.0 + tailwindcss: + specifier: ^4.1.16 + version: 4.1.16 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + typescript-eslint: + specifier: ^8.46.2 + version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + unplugin-icons: + specifier: ^22.5.0 + version: 22.5.0(@vue/compiler-sfc@3.5.22) + vite: + specifier: ^7.1.12 + version: 7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1) + vite-plugin-cdn-import: + specifier: ^1.0.1 + version: 1.0.1(rollup@4.52.5)(vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1)) + vite-plugin-compression: + specifier: ^0.5.1 + version: 0.5.1(vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1)) + vite-plugin-remove-console: + specifier: ^2.2.0 + version: 2.2.0 + vite-plugin-router-warn: + specifier: ^1.0.0 + version: 1.0.0 + vite-svg-loader: + specifier: ^5.1.0 + version: 5.1.0(vue@3.5.22(typescript@5.9.3)) + vue-eslint-parser: + specifier: ^10.2.0 + version: 10.2.0(eslint@9.38.0(jiti@2.6.1)) + vue-tsc: + specifier: ^3.1.2 + version: 3.1.2(typescript@5.9.3) + +packages: + + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + + '@antfu/utils@9.3.0': + resolution: {integrity: sha512-9hFT4RauhcUzqOE4f1+frMKLZrgNog5b06I7VmZQV1BkvwvqrbC8EBZf3L1eEL2AKb6rNKjER0sEvJiSP1FXEA==} + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.28.5': + resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.28.5': + resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + + '@cacheable/memoize@2.0.3': + resolution: {integrity: sha512-hl9wfQgpiydhQEIv7fkjEzTGE+tcosCXLKFDO707wYJ/78FVOlowb36djex5GdbSyeHnG62pomYLMuV/OT8Pbw==} + + '@cacheable/memory@2.0.3': + resolution: {integrity: sha512-R3UKy/CKOyb1LZG/VRCTMcpiMDyLH7SH3JrraRdK6kf3GweWCOU3sgvE13W3TiDRbxnDKylzKJvhUAvWl9LQOA==} + + '@cacheable/utils@2.1.0': + resolution: {integrity: sha512-ZdxfOiaarMqMj+H7qwlt5EBKWaeGihSYVHdQv5lUsbn8MJJOTW82OIwirQ39U5tMZkNvy3bQE+ryzC+xTAb9/g==} + + '@code-inspector/core@1.2.10': + resolution: {integrity: sha512-xTkR4oBrTlRA/S2cXTuZLttCX6+wQgUpBpEK4Ad/e9KBIUIDRne5yoxuvrdy3xkTMkURS2V4SnCTzjFcu4OELQ==} + + '@code-inspector/esbuild@1.2.10': + resolution: {integrity: sha512-+Y7tJTGrqpOgj4ENiq2pE9lE88pFGIumAFJr3K4jZxCT/JD/8bsQvOnNBEBS8BzwWZP6jK/XlaR/YFmw9p3r1A==} + + '@code-inspector/mako@1.2.10': + resolution: {integrity: sha512-IqQt6bdAF1emG47NJntxE+v4m+GUVOmyXjveP/bCUJ0L7yab48H9qsAPyEUtwBSbXGDopvCX0PgQeaubWpS1LQ==} + + '@code-inspector/turbopack@1.2.10': + resolution: {integrity: sha512-6oMeQjaDorIcAiy1IEPzrtozqfgzE2xq6AMc1/gVU44XqYnFZgUTyz5chkpPE1SQ+ZQ+EtgYGJyL6oYAQ0oyZQ==} + + '@code-inspector/vite@1.2.10': + resolution: {integrity: sha512-HsmEa0kIfJUhJf4zjipDFgySKAD/O/f+K2L49xUnAelO6bkhNGmg1QLur9Mzn+5vrKcCGLwa0LGwKVnuBE4Vng==} + + '@code-inspector/webpack@1.2.10': + resolution: {integrity: sha512-7TaYwAiz+ZlckVyKsU24HXghTuYV04mtwtJCIenkLfUSyrEIjUC/rhoYnQ/nUVwWuk0LvWJHUaLlYc65oQsggQ==} + + '@commitlint/cli@20.1.0': + resolution: {integrity: sha512-pW5ujjrOovhq5RcYv5xCpb4GkZxkO2+GtOdBW2/qrr0Ll9tl3PX0aBBobGQl3mdZUbOBgwAexEQLeH6uxL0VYg==} + engines: {node: '>=v18'} + hasBin: true + + '@commitlint/config-conventional@20.0.0': + resolution: {integrity: sha512-q7JroPIkDBtyOkVe9Bca0p7kAUYxZMxkrBArCfuD3yN4KjRAenP9PmYwnn7rsw8Q+hHq1QB2BRmBh0/Z19ZoJw==} + engines: {node: '>=v18'} + + '@commitlint/config-validator@20.0.0': + resolution: {integrity: sha512-BeyLMaRIJDdroJuYM2EGhDMGwVBMZna9UiIqV9hxj+J551Ctc6yoGuGSmghOy/qPhBSuhA6oMtbEiTmxECafsg==} + engines: {node: '>=v18'} + + '@commitlint/ensure@20.0.0': + resolution: {integrity: sha512-WBV47Fffvabe68n+13HJNFBqiMH5U1Ryls4W3ieGwPC0C7kJqp3OVQQzG2GXqOALmzrgAB+7GXmyy8N9ct8/Fg==} + engines: {node: '>=v18'} + + '@commitlint/execute-rule@20.0.0': + resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==} + engines: {node: '>=v18'} + + '@commitlint/format@20.0.0': + resolution: {integrity: sha512-zrZQXUcSDmQ4eGGrd+gFESiX0Rw+WFJk7nW4VFOmxub4mAATNKBQ4vNw5FgMCVehLUKG2OT2LjOqD0Hk8HvcRg==} + engines: {node: '>=v18'} + + '@commitlint/is-ignored@20.0.0': + resolution: {integrity: sha512-ayPLicsqqGAphYIQwh9LdAYOVAQ9Oe5QCgTNTj+BfxZb9b/JW222V5taPoIBzYnAP0z9EfUtljgBk+0BN4T4Cw==} + engines: {node: '>=v18'} + + '@commitlint/lint@20.0.0': + resolution: {integrity: sha512-kWrX8SfWk4+4nCexfLaQT3f3EcNjJwJBsSZ5rMBw6JCd6OzXufFHgel2Curos4LKIxwec9WSvs2YUD87rXlxNQ==} + engines: {node: '>=v18'} + + '@commitlint/load@20.1.0': + resolution: {integrity: sha512-qo9ER0XiAimATQR5QhvvzePfeDfApi/AFlC1G+YN+ZAY8/Ua6IRrDrxRvQAr+YXUKAxUsTDSp9KXeXLBPsNRWg==} + engines: {node: '>=v18'} + + '@commitlint/message@20.0.0': + resolution: {integrity: sha512-gLX4YmKnZqSwkmSB9OckQUrI5VyXEYiv3J5JKZRxIp8jOQsWjZgHSG/OgEfMQBK9ibdclEdAyIPYggwXoFGXjQ==} + engines: {node: '>=v18'} + + '@commitlint/parse@20.0.0': + resolution: {integrity: sha512-j/PHCDX2bGM5xGcWObOvpOc54cXjn9g6xScXzAeOLwTsScaL4Y+qd0pFC6HBwTtrH92NvJQc+2Lx9HFkVi48cg==} + engines: {node: '>=v18'} + + '@commitlint/read@20.0.0': + resolution: {integrity: sha512-Ti7Y7aEgxsM1nkwA4ZIJczkTFRX/+USMjNrL9NXwWQHqNqrBX2iMi+zfuzZXqfZ327WXBjdkRaytJ+z5vNqTOA==} + engines: {node: '>=v18'} + + '@commitlint/resolve-extends@20.1.0': + resolution: {integrity: sha512-cxKXQrqHjZT3o+XPdqDCwOWVFQiae++uwd9dUBC7f2MdV58ons3uUvASdW7m55eat5sRiQ6xUHyMWMRm6atZWw==} + engines: {node: '>=v18'} + + '@commitlint/rules@20.0.0': + resolution: {integrity: sha512-gvg2k10I/RfvHn5I5sxvVZKM1fl72Sqrv2YY/BnM7lMHcYqO0E2jnRWoYguvBfEcZ39t+rbATlciggVe77E4zA==} + engines: {node: '>=v18'} + + '@commitlint/to-lines@20.0.0': + resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==} + engines: {node: '>=v18'} + + '@commitlint/top-level@20.0.0': + resolution: {integrity: sha512-drXaPSP2EcopukrUXvUXmsQMu3Ey/FuJDc/5oiW4heoCfoE5BdLQyuc7veGeE3aoQaTVqZnh4D5WTWe2vefYKg==} + engines: {node: '>=v18'} + + '@commitlint/types@20.0.0': + resolution: {integrity: sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA==} + engines: {node: '>=v18'} + + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} + + '@csstools/media-query-list-parser@4.0.3': + resolution: {integrity: sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/selector-specificity@5.0.0': + resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@ctrl/tinycolor@3.6.1': + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + + '@dual-bundle/import-meta-resolve@4.2.1': + resolution: {integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==} + + '@element-plus/icons-vue@2.3.2': + resolution: {integrity: sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==} + peerDependencies: + vue: ^3.2.0 + + '@esbuild/aix-ppc64@0.25.11': + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.11': + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.11': + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.11': + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.11': + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.11': + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.11': + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.11': + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.11': + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.11': + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.11': + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.11': + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.11': + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.11': + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.11': + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.11': + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.11': + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.11': + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.11': + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.11': + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.11': + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.11': + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.11': + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.11': + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.11': + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.11': + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + 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.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.1': + resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.16.0': + resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.38.0': + resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.0': + resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@iconify/json@2.2.400': + resolution: {integrity: sha512-L8cy1YE/H0LFO4Pu7hfyylkrQmawL8sTOCH2PcBDydWA1FpoKijeIzweRJ6e9grvn2li9Yu+Pe32Jq9x4MKpaw==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.0.2': + resolution: {integrity: sha512-EfJS0rLfVuRuJRn4psJHtK2A9TqVnkxPpHY6lYHiB9+8eSuudsxbwMiavocG45ujOo6FJ+CIRlRnlOGinzkaGQ==} + + '@iconify/vue@4.2.0': + resolution: {integrity: sha512-CMynoz9BDWugDO2B7LU/s8L99dHCiqDGCjCki6bhVx5etZhw9x0BTV7wWRdj82jtl1yQTc+QQRcHQmSvUY6R+g==} + peerDependencies: + vue: '>=3' + + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@keyv/bigmap@1.1.0': + resolution: {integrity: sha512-MX7XIUNwVRK+hjZcAbNJ0Z8DREo+Weu9vinBOjGU1thEi9F6vPhICzBbk4CCf3eEefKRz7n6TfZXwUFZTSgj8Q==} + engines: {node: '>= 18'} + peerDependencies: + keyv: ^5.5.3 + + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + + '@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.19.3': + resolution: {integrity: sha512-ze46EW5xW+UxDvinvPkYt2MzR355Az1lA3bpX8KDialgnCwr+IbkBij/udbUEC6ZFbidPkfK1eKl4ESN7gMY+w==} + 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] + libc: [glibc] + + '@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] + libc: [musl] + + '@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] + libc: [glibc] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@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'} + + '@pkgr/core@0.2.9': + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@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@3.3.0': + resolution: {integrity: sha512-06vp/IWUOsvt1zpPXMbVvGfrBWKBv5O1q3nZIlbSFJejJNWHG1HU+EWGuCzJD6KCsQdwNettv1wUuAleH4+YQQ==} + peerDependencies: + element-plus: ^2.0.0 + + '@pureadmin/utils@2.6.2': + resolution: {integrity: sha512-Dqk7R9Dm9YAzAvMlOO3uudu/eCb5B2eZSPexKlaedTngO/A+OtcFH0870T69nXsUqrwd3LJI6ETL19C9ihofIw==} + peerDependencies: + echarts: '*' + vue: '*' + peerDependenciesMeta: + echarts: + optional: true + vue: + optional: true + + '@rolldown/pluginutils@1.0.0-beta.29': + resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==} + + '@rolldown/pluginutils@1.0.0-beta.45': + resolution: {integrity: sha512-Le9ulGCrD8ggInzWw/k2J8QcbPz7eGIOWqfJ2L+1R0Opm7n6J37s2hiDWlh6LJN0Lk9L5sUzMvRHKW7UxBZsQA==} + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.52.5': + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.52.5': + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.52.5': + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.52.5': + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.52.5': + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.52.5': + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.52.5': + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.52.5': + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.52.5': + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.52.5': + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.52.5': + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.52.5': + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.52.5': + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openharmony-arm64@4.52.5': + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.52.5': + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.52.5': + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.52.5': + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.52.5': + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} + cpu: [x64] + os: [win32] + + '@sxzz/popperjs-es@2.11.7': + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + + '@tailwindcss/node@4.1.16': + resolution: {integrity: sha512-BX5iaSsloNuvKNHRN3k2RcCuTEgASTo77mofW0vmeHkfrDWaoFAFvNHpEgtu0eqyypcyiBkDWzSMxJhp3AUVcw==} + + '@tailwindcss/oxide-android-arm64@4.1.16': + resolution: {integrity: sha512-8+ctzkjHgwDJ5caq9IqRSgsP70xhdhJvm+oueS/yhD5ixLhqTw9fSL1OurzMUhBwE5zK26FXLCz2f/RtkISqHA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.16': + resolution: {integrity: sha512-C3oZy5042v2FOALBZtY0JTDnGNdS6w7DxL/odvSny17ORUnaRKhyTse8xYi3yKGyfnTUOdavRCdmc8QqJYwFKA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.16': + resolution: {integrity: sha512-vjrl/1Ub9+JwU6BP0emgipGjowzYZMjbWCDqwA2Z4vCa+HBSpP4v6U2ddejcHsolsYxwL5r4bPNoamlV0xDdLg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.16': + resolution: {integrity: sha512-TSMpPYpQLm+aR1wW5rKuUuEruc/oOX3C7H0BTnPDn7W/eMw8W+MRMpiypKMkXZfwH8wqPIRKppuZoedTtNj2tg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.16': + resolution: {integrity: sha512-p0GGfRg/w0sdsFKBjMYvvKIiKy/LNWLWgV/plR4lUgrsxFAoQBFrXkZ4C0w8IOXfslB9vHK/JGASWD2IefIpvw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.16': + resolution: {integrity: sha512-DoixyMmTNO19rwRPdqviTrG1rYzpxgyYJl8RgQvdAQUzxC1ToLRqtNJpU/ATURSKgIg6uerPw2feW0aS8SNr/w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.16': + resolution: {integrity: sha512-H81UXMa9hJhWhaAUca6bU2wm5RRFpuHImrwXBUvPbYb+3jo32I9VIwpOX6hms0fPmA6f2pGVlybO6qU8pF4fzQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.16': + resolution: {integrity: sha512-ZGHQxDtFC2/ruo7t99Qo2TTIvOERULPl5l0K1g0oK6b5PGqjYMga+FcY1wIUnrUxY56h28FxybtDEla+ICOyew==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.1.16': + resolution: {integrity: sha512-Oi1tAaa0rcKf1Og9MzKeINZzMLPbhxvm7rno5/zuP1WYmpiG0bEHq4AcRUiG2165/WUzvxkW4XDYCscZWbTLZw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.1.16': + resolution: {integrity: sha512-B01u/b8LteGRwucIBmCQ07FVXLzImWESAIMcUU6nvFt/tYsQ6IHz8DmZ5KtvmwxD+iTYBtM1xwoGXswnlu9v0Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.16': + resolution: {integrity: sha512-zX+Q8sSkGj6HKRTMJXuPvOcP8XfYON24zJBRPlszcH1Np7xuHXhWn8qfFjIujVzvH3BHU+16jBXwgpl20i+v9A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.16': + resolution: {integrity: sha512-m5dDFJUEejbFqP+UXVstd4W/wnxA4F61q8SoL+mqTypId2T2ZpuxosNSgowiCnLp2+Z+rivdU0AqpfgiD7yCBg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.16': + resolution: {integrity: sha512-2OSv52FRuhdlgyOQqgtQHuCgXnS8nFSYRp2tJ+4WZXKgTxqPy7SMSls8c3mPT5pkZ17SBToGM5LHEJBO7miEdg==} + engines: {node: '>= 10'} + + '@tailwindcss/vite@4.1.16': + resolution: {integrity: sha512-bbguNBcDxsRmi9nnlWJxhfDWamY3lmcyACHcdO1crxfzuLpOhHLLtEIN/nCbbAtj5rchUgQD17QVAKi1f7IsKg==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@types/conventional-commits-parser@5.0.2': + resolution: {integrity: sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@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.20': + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + + '@types/node@20.19.23': + resolution: {integrity: sha512-yIdlVVVHXpmqRhtyovZAcSy0MiPcYWGkoO4CGe/+jpP0hmNuihm4XhHbADpK++MsiLHP5MVlv+bcgdF99kSiFQ==} + + '@types/nprogress@0.2.3': + resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} + + '@types/path-browserify@1.0.3': + resolution: {integrity: sha512-ZmHivEbNCBtAfcrFeBCiTjdIc2dey0l7oCGNGpSuRTy8jP6UVND7oUowlvDujBy8r2Hoa8bfFUOCiPWfmtkfxw==} + + '@types/qs@6.14.0': + resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} + + '@types/sortablejs@1.15.9': + resolution: {integrity: sha512-7HP+rZGE2p886PKV9c9OJzLBI6BBJu1O7lJGYnPyG3fS4/duUCcngkNCjsLwIMV+WMqANe3tt4irrXHSIe68OQ==} + + '@types/tinycolor2@1.4.6': + resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + + '@types/web-bluetooth@0.0.16': + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@typescript-eslint/eslint-plugin@8.46.2': + resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.46.2 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.46.2': + resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.46.2': + resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.46.2': + resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.46.2': + resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.46.2': + resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.46.2': + resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.46.2': + resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.46.2': + resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.46.2': + resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitejs/plugin-vue-jsx@5.1.1': + resolution: {integrity: sha512-uQkfxzlF8SGHJJVH966lFTdjM/lGcwJGzwAHpVqAPDD/QcsqoUGa+q31ox1BrUfi+FLP2ChVp7uLXE3DkHyDdQ==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + vue: ^3.0.0 + + '@vitejs/plugin-vue@6.0.1': + resolution: {integrity: sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + vue: ^3.2.25 + + '@volar/language-core@2.4.23': + resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==} + + '@volar/source-map@2.4.23': + resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==} + + '@volar/typescript@2.4.23': + resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==} + + '@vue/babel-helper-vue-transform-on@1.5.0': + resolution: {integrity: sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==} + + '@vue/babel-plugin-jsx@1.5.0': + resolution: {integrity: sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@1.5.0': + resolution: {integrity: sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@vue/compiler-core@3.5.22': + resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==} + + '@vue/compiler-dom@3.5.22': + resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==} + + '@vue/compiler-sfc@3.5.22': + resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==} + + '@vue/compiler-ssr@3.5.22': + resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/devtools-api@7.7.7': + resolution: {integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==} + + '@vue/devtools-kit@7.7.7': + resolution: {integrity: sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==} + + '@vue/devtools-shared@7.7.7': + resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==} + + '@vue/language-core@3.1.2': + resolution: {integrity: sha512-PyFDCqpdfYUT+oMLqcc61oHfJlC6yjhybaefwQjRdkchIihToOEpJ2Wu/Ebq2yrnJdd1EsaAvZaXVAqcxtnDxQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/reactivity@3.5.22': + resolution: {integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==} + + '@vue/runtime-core@3.5.22': + resolution: {integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==} + + '@vue/runtime-dom@3.5.22': + resolution: {integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==} + + '@vue/server-renderer@3.5.22': + resolution: {integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==} + peerDependencies: + vue: 3.5.22 + + '@vue/shared@3.5.22': + resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==} + + '@vueuse/core@13.9.0': + resolution: {integrity: sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/core@14.0.0': + resolution: {integrity: sha512-d6tKRWkZE8IQElX2aHBxXOMD478fHIYV+Dzm2y9Ag122ICBpNKtGICiXKOhWU3L1kKdttDD9dCMS4bGP3jhCTQ==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/core@9.13.0': + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + + '@vueuse/metadata@13.9.0': + resolution: {integrity: sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==} + + '@vueuse/metadata@14.0.0': + resolution: {integrity: sha512-6yoGqbJcMldVCevkFiHDBTB1V5Hq+G/haPlGIuaFZHpXC0HADB0EN1ryQAAceiW+ryS3niUwvdFbGiqHqBrfVA==} + + '@vueuse/metadata@9.13.0': + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + + '@vueuse/motion@3.0.3': + resolution: {integrity: sha512-4B+ITsxCI9cojikvrpaJcLXyq0spj3sdlzXjzesWdMRd99hhtFI6OJ/1JsqwtF73YooLe0hUn/xDR6qCtmn5GQ==} + peerDependencies: + vue: '>=3.0.0' + + '@vueuse/shared@13.9.0': + resolution: {integrity: sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/shared@14.0.0': + resolution: {integrity: sha512-mTCA0uczBgurRlwVaQHfG0Ja7UdGe4g9mwffiJmvLiTtp1G4AQyIjej6si/k8c8pUwTfVpNufck+23gXptPAkw==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/shared@9.13.0': + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + + 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@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + alien-signals@3.0.3: + resolution: {integrity: sha512-2JXjom6R7ZwrISpUphLhf4htUq1aKRCennTJ6u9kFfr3sLmC9+I4CxxVi+McoFnIg+p1HnVrfLT/iCt4Dlz//Q==} + + animate.css@4.1.1: + resolution: {integrity: sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-escapes@7.1.1: + resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + 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'} + + 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==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.12.2: + resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@2.0.0: + resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + + baseline-browser-mapping@2.10.11: + resolution: {integrity: sha512-DAKrHphkJyiGuau/cFieRYhcTFeK/lBuD++C7cZ6KZHbMhBrisoi+EvhQ5RZrIfV5qwsW8kgQ07JIC+MDJRAhg==} + engines: {node: '>=6.0.0'} + hasBin: true + + birpc@2.6.1: + resolution: {integrity: sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.27.0: + resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + c12@3.3.1: + resolution: {integrity: sha512-LcWQ01LT9tkoUINHgpIOv3mMs+Abv7oVCrtpMRi1PaapVEpWoMga5WuT7/DqFTu7URP9ftbOmimNw1KNIGh9DQ==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + + cacheable@2.1.1: + resolution: {integrity: sha512-LmF4AXiSNdiRbI2UjH8pAp9NIXxeQsTotpEaegPiDcnN0YPygDJDV3l/Urc0mL72JWdATEorKqIHEx55nDlONg==} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001751: + resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} + + chalk@4.1.1: + resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} + engines: {node: '>=10'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-truncate@5.1.1: + resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} + engines: {node: '>=20'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + code-inspector-plugin@1.2.10: + resolution: {integrity: sha512-XF8U0egv6g19lU4QZcrPu40HmooyHjcIqaKb6fvIPSv8WUeg+qSlyrl7Bm05OBzMmJt/Y/mOdFx8MMuBqbC8Sg==} + + codemirror-editor-vue3@2.8.0: + resolution: {integrity: sha512-ebYGNhBpLmQNLguXzNyMMkn6K8v3lcS5/Ncvdn6YS4bLGEHE67MfsJIS/WV0L7I6WavUuFlY/Rs/AJKChIwSwg==} + peerDependencies: + codemirror: ^5 + diff-match-patch: ^1.0.5 + vue: ^3.x + + codemirror@5.65.21: + resolution: {integrity: sha512-6teYk0bA0nR3QP0ihGMoxuKzpl5W80FpnHpBJpgy66NK3cZv5b/d/HY8PnRvfSsCG1MTfr92u2WUl+wT0E40mQ==} + + 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==} + + 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.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} + engines: {node: '>=20'} + + 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==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + copy-anything@4.0.5: + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} + engines: {node: '>=18'} + + cosmiconfig-typescript-loader@6.2.0: + resolution: {integrity: sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-declaration-sorter@7.3.0: + resolution: {integrity: sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==} + 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@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + 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-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-preset-default@7.0.9: + resolution: {integrity: sha512-tCD6AAFgYBOVpMBX41KjbvRh9c2uUjLXRyV7KHSIrwHiq5Z9o0TFfUCoM3TwVrRsRteN3sVXGNvjVNxYzkpTsA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + cssnano-utils@5.0.1: + resolution: {integrity: sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + cssnano@7.1.1: + resolution: {integrity: sha512-fm4D8ti0dQmFPeF8DXSAA//btEmqCOgAc/9Oa3C1LW94h5usNrJEfrON7b4FkPZgnDEn6OUs5NdxiJZmAtGOpQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + 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@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} + + dayjs@1.11.18: + resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + 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.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + diff-match-patch@1.0.5: + resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + 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.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dotenv@17.2.3: + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} + 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@6.0.0: + resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==} + + electron-to-chromium@1.5.240: + resolution: {integrity: sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==} + + element-plus@2.11.5: + resolution: {integrity: sha512-O+bIVHQCjUDm4GiIznDXRoS8ar2TpWLwfOGnN/Aam0VXf5kbuc4SxdKKJdovWNxmxeqbcwjsSZPKgtXNcqys4A==} + peerDependencies: + vue: ^3.2.0 + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + errx@0.1.0: + resolution: {integrity: sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==} + + 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@0.4.1: + resolution: {integrity: sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==} + + 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.25.11: + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + 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@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.5.4: + resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-vue@10.5.1: + resolution: {integrity: sha512-SbR9ZBUFKgvWAbq3RrdCtWaW0IKm6wwUiApxf3BVTNfqUIo4IQQmreMg2iHFJJ6C/0wss3LXURBJ1OwS/MhFcQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + '@typescript-eslint/parser': ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 + vue-eslint-parser: ^10.0.0 + peerDependenciesMeta: + '@stylistic/eslint-plugin': + optional: true + '@typescript-eslint/parser': + optional: true + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.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-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.38.0: + resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.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@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + 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==} + + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + + 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.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + 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.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@10.1.4: + resolution: {integrity: sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flat-cache@6.1.18: + resolution: {integrity: sha512-JUPnFgHMuAVmLmoH9/zoZ6RHOt5n9NlUw/sDXsTbROJ2SFoS2DS4s+swAV6UTeTbGH/CAsZIE6M8TaG/3jVxgQ==} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + 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.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + 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'} + + 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-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + + 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'} + + giget@2.0.0: + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} + hasBin: true + + git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + 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@11.0.3: + resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} + engines: {node: 20 || >=22} + hasBin: true + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + 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@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + 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==} + + gradient-string@3.0.0: + resolution: {integrity: sha512-frdKI4Qi8Ihp4C6wZNB565de/THpIaw3DjP5ku87M+N9rNSGmPTjfkq61SdRXB7eCaL8O1hkKDvf6CDMtOzIAg==} + engines: {node: '>=14'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + 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'} + + hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + hookified@1.12.2: + resolution: {integrity: sha512-aokUX1VdTpI0DUsndvW+OiwmBpKCu/NgRsSSkuSY0zq8PY6Q6a+lmOfAFDXAAOtBqJELvcWY9L1EVtzjbQcMdg==} + + 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==} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + immutable@5.1.4: + resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + 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@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + 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-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + + is-what@5.5.0: + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} + engines: {node: '>=18'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + 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 + + 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.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + 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==} + + keyv@5.5.3: + resolution: {integrity: sha512-h0Un1ieD+HUrzBH6dJXhod3ifSghk5Hw/2Y4/KHBziPlZecrFyE9YOTPU6eOs0V9pYl8gOs86fkr/KN8lUX39A==} + + 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.36.0: + resolution: {integrity: sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==} + + known-css-properties@0.37.0: + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + launch-ide@1.2.0: + resolution: {integrity: sha512-7nXSPQOt3b2JT52Ge8jp4miFcY+nrUEZxNLWBzrEfjmByDTb9b5ytqMSwGhsNwY6Cntwop+6n7rWIFN0+S8PTw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lie@3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + engines: {node: '>= 12.0.0'} + + 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@16.2.6: + resolution: {integrity: sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==} + engines: {node: '>=20.17'} + hasBin: true + + listr2@9.0.5: + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} + engines: {node: '>=20.0.0'} + + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + + localforage@1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + 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.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@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + lru-cache@11.2.2: + resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + 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.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + + mdn-data@2.24.0: + resolution: {integrity: sha512-i97fklrJl03tL1tdRVw0ZfLLvuDsdb6wxL+TrJ+PKkCbLrp2PCu2+OYdCKychIUm19nSM/35S6qz7pJpnXttoA==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + 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-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + engines: {node: 20 || >=22} + + 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@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + nano-spawn@2.0.0: + resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} + engines: {node: '>=20.17'} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-releases@2.0.26: + resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + + 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.6.2: + resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + 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@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-manager-detector@1.5.0: + resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==} + + 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'} + + 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-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + perfect-debounce@2.0.0: + resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} + + 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@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pinia@3.0.3: + resolution: {integrity: sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==} + peerDependencies: + typescript: '>=4.4.4' + vue: ^2.7.0 || ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + pinyin-pro@3.27.0: + resolution: {integrity: sha512-Osdgjwe7Rm17N2paDMM47yW+jUIUH3+0RGo8QP39ZTLpTaJVDK0T58hOLaMQJbcMmAebVuK2ePunTEVEx1clNQ==} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + + popmotion@11.0.5: + resolution: {integrity: sha512-la8gPM1WYeFznb/JqF4GiTkRRPZsfaj2+kCxqQgr2MJylMmIKUwBfWW8Wa5fml/8gmtlD5yI01MP1QCZPWmppA==} + + portfinder@1.0.38: + resolution: {integrity: sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==} + engines: {node: '>= 10.12'} + + postcss-calc@10.1.1: + resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==} + engines: {node: ^18.12 || ^20.9 || >=22.0} + peerDependencies: + postcss: ^8.4.38 + + postcss-colormin@7.0.4: + resolution: {integrity: sha512-ziQuVzQZBROpKpfeDwmrG+Vvlr0YWmY/ZAk99XD+mGEBuEojoFekL41NCsdhyNUtZI7DPOoIWIR7vQQK9xwluw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-convert-values@7.0.7: + resolution: {integrity: sha512-HR9DZLN04Xbe6xugRH6lS4ZQH2zm/bFh/ZyRkpedZozhvh+awAfbA0P36InO4fZfDhvYfNJeNvlTf1sjwGbw/A==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-discard-comments@7.0.4: + resolution: {integrity: sha512-6tCUoql/ipWwKtVP/xYiFf1U9QgJ0PUvxN7pTcsQ8Ns3Fnwq1pU5D5s1MhT/XySeLq6GXNvn37U46Ded0TckWg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-discard-duplicates@7.0.2: + resolution: {integrity: sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-discard-empty@7.0.1: + resolution: {integrity: sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-discard-overridden@7.0.1: + resolution: {integrity: sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-html@1.8.0: + resolution: {integrity: sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ==} + engines: {node: ^12 || >=14} + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + postcss-merge-longhand@7.0.5: + resolution: {integrity: sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-merge-rules@7.0.6: + resolution: {integrity: sha512-2jIPT4Tzs8K87tvgCpSukRQ2jjd+hH6Bb8rEEOUDmmhOeTcqDg5fEFK8uKIu+Pvc3//sm3Uu6FRqfyv7YF7+BQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-font-values@7.0.1: + resolution: {integrity: sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-gradients@7.0.1: + resolution: {integrity: sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-params@7.0.4: + resolution: {integrity: sha512-3OqqUddfH8c2e7M35W6zIwv7jssM/3miF9cbCSb1iJiWvtguQjlxZGIHK9JRmc8XAKmE2PFGtHSM7g/VcW97sw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-selectors@7.0.5: + resolution: {integrity: sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-charset@7.0.1: + resolution: {integrity: sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-display-values@7.0.1: + resolution: {integrity: sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-positions@7.0.1: + resolution: {integrity: sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-repeat-style@7.0.1: + resolution: {integrity: sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-string@7.0.1: + resolution: {integrity: sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-timing-functions@7.0.1: + resolution: {integrity: sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-unicode@7.0.4: + resolution: {integrity: sha512-LvIURTi1sQoZqj8mEIE8R15yvM+OhbR1avynMtI9bUzj5gGKR/gfZFd8O7VMj0QgJaIFzxDwxGl/ASMYAkqO8g==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-url@7.0.1: + resolution: {integrity: sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-whitespace@7.0.1: + resolution: {integrity: sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-ordered-values@7.0.2: + resolution: {integrity: sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-reduce-initial@7.0.4: + resolution: {integrity: sha512-rdIC9IlMBn7zJo6puim58Xd++0HdbvHeHaPgXsimMfG1ijC5A9ULvNLSE0rUKVJOvNMcwewW4Ga21ngyJjY/+Q==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-reduce-transforms@7.0.1: + resolution: {integrity: sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + 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-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + + 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-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss-sorting@9.1.0: + resolution: {integrity: sha512-Mn8KJ45HNNG6JBpBizXcyf6LqY/qyqetGcou/nprDnFwBFBLGj0j/sNKV2lj2KMOVOwdXu14aEzqJv8CIV6e8g==} + peerDependencies: + postcss: ^8.4.20 + + postcss-svgo@7.1.0: + resolution: {integrity: sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==} + engines: {node: ^18.12.0 || ^20.9.0 || >= 18} + peerDependencies: + postcss: ^8.4.32 + + postcss-unique-selectors@7.0.4: + resolution: {integrity: sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + 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@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qified@0.5.1: + resolution: {integrity: sha512-+BtFN3dCP+IaFA6IYNOu/f/uK1B8xD2QWyOeCse0rjtAebBmkzgd2d1OAXi3ikAzJMIBSdzZDNZ3wZKEUDQs5w==} + engines: {node: '>=20'} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + 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'} + + 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'} + + responsive-storage@2.2.0: + resolution: {integrity: sha512-94W5Chr2F5kDBT6J+OCOeJguEkSTDc3jPOUQXYmzNG64DCNl5p7hoBDF7bx7u6EXAEcpUKF64OZR4b7Nn8h/Gg==} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + 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@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + + rollup-plugin-external-globals@0.10.0: + resolution: {integrity: sha512-RXlupZrmn97AaaS5dWnktkjM+Iy+od0E+8L0mUkMIs3iuoUXNJebueQocQKV7Ircd54fSGGmkBaXwNzY05J1yQ==} + peerDependencies: + rollup: ^2.25.0 || ^3.3.0 || ^4.1.4 + + rollup-plugin-visualizer@6.0.5: + resolution: {integrity: sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + rolldown: 1.x || ^1.0.0-beta + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rolldown: + optional: true + rollup: + optional: true + + rollup@4.52.5: + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + sass@1.93.2: + resolution: {integrity: sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==} + engines: {node: '>=14.0.0'} + hasBin: true + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + 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@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + + 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@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + 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-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string-width@8.1.0: + resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} + engines: {node: '>=20'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + + style-value-types@5.1.2: + resolution: {integrity: sha512-Vs9fNreYF9j6W2VvuDTP7kepALi7sk0xtk2Tu8Yxi9UoajJdEVpNpCov0HsLTqXvNGKX+Uv09pkozVITi1jf3Q==} + + stylehacks@7.0.6: + resolution: {integrity: sha512-iitguKivmsueOmTO0wmxURXBP8uqOO+zikLGZ7Mm9e/94R4w5T999Js2taS/KBOnQ/wdC3jN3vNSrkGDrlnqQg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + 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@7.4.0: + resolution: {integrity: sha512-W3G517cBaMDYRX5Fzhro4fhRkkLafLgVSPfQnhxbiLyMnbLq47RMF/NRaOJ4OQsKWYhsIHOIc2Q3VL0X3Q7oPg==} + peerDependencies: + stylelint: '>=16.18' + stylelint-order: '>=7' + + stylelint-config-recommended-scss@14.1.0: + resolution: {integrity: sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==} + engines: {node: '>=18.12.0'} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^16.6.1 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-recommended-vue@1.6.1: + resolution: {integrity: sha512-lLW7hTIMBiTfjenGuDq2kyHA6fBWd/+Df7MO4/AWOxiFeXP9clbpKgg27kHfwA3H7UNMGC7aeP3mNlZB5LMmEQ==} + engines: {node: ^12 || >=14} + peerDependencies: + postcss-html: ^1.0.0 + stylelint: '>=14.0.0' + + stylelint-config-recommended@14.0.1: + resolution: {integrity: sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.1.0 + + stylelint-config-recommended@17.0.0: + resolution: {integrity: sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.23.0 + + stylelint-config-standard-scss@14.0.0: + resolution: {integrity: sha512-6Pa26D9mHyi4LauJ83ls3ELqCglU6VfCXchovbEqQUiEkezvKdv6VgsIoMy58i00c854wVmOw0k8W5FTpuaVqg==} + engines: {node: '>=18.12.0'} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^16.11.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-standard@36.0.1: + resolution: {integrity: sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.1.0 + + stylelint-order@7.0.0: + resolution: {integrity: sha512-rSWxx0KscYfxU02wEskKXES9lkRzuuONMMNkZ7SUc6uiF3tDKm7e+sE0Ax/SBlG4TUf1sp1R6f3/SlsPGmzthg==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^16.18.0 + + stylelint-prettier@5.0.3: + resolution: {integrity: sha512-B6V0oa35ekRrKZlf+6+jA+i50C4GXJ7X1PPmoCqSUoXN6BrNF6NhqqhanvkLjqw2qgvrS0wjdpeC+Tn06KN3jw==} + engines: {node: '>=18.12.0'} + peerDependencies: + prettier: '>=3.0.0' + stylelint: '>=16.0.0' + + stylelint-scss@6.12.1: + resolution: {integrity: sha512-UJUfBFIvXfly8WKIgmqfmkGKPilKB4L5j38JfsDd+OCg2GBdU0vGUV08Uw82tsRZzd4TbsUURVVNGeOhJVF7pA==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.0.2 + + stylelint@16.25.0: + resolution: {integrity: sha512-Li0avYWV4nfv1zPbdnxLYBGq4z8DVZxbRgx4Kn6V+Uftz1rMoF1qiEI3oL4kgWqyYgCgs7gT5maHNZ82Gk03vQ==} + engines: {node: '>=18.12.0'} + hasBin: true + + superjson@2.2.3: + resolution: {integrity: sha512-ay3d+LW/S6yppKoTz3Bq4mG0xrS5bFwfWEBmQfbC7lt5wmtk+Obq0TxVuA9eYRirBTQb1K3eEpBRHMQEo0WyVw==} + engines: {node: '>=16'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + svgo@4.0.0: + resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==} + engines: {node: '>=16'} + hasBin: true + + synckit@0.11.11: + resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} + engines: {node: ^14.18.0 || >=16.0.0} + + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + + tailwindcss@4.1.16: + resolution: {integrity: sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==} + + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinygradient@1.1.5: + resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} + + 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'} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + + tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + typescript-eslint@8.46.2: + resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + unctx@2.4.1: + resolution: {integrity: sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unimport@5.5.0: + resolution: {integrity: sha512-/JpWMG9s1nBSlXJAQ8EREFTFy3oy6USFd8T6AoBaw1q2GGcF4R9yp3ofg32UODZlYEO5VD0EWE1RpI9XDWyPYg==} + engines: {node: '>=18.12.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin-icons@22.5.0: + resolution: {integrity: sha512-MBlMtT5RuMYZy4TZgqUL2OTtOdTUVsS1Mhj6G1pEzMlFJlEnq6mhUfoIt45gBWxHcsOdXJDWLg3pRZ+YmvAVWQ==} + peerDependencies: + '@svgr/core': '>=7.0.0' + '@svgx/core': ^1.0.1 + '@vue/compiler-sfc': ^3.0.2 || ^2.7.0 + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0 + vue-template-compiler: ^2.6.12 + vue-template-es2015-compiler: ^1.9.0 + peerDependenciesMeta: + '@svgr/core': + optional: true + '@svgx/core': + optional: true + '@vue/compiler-sfc': + optional: true + svelte: + optional: true + vue-template-compiler: + optional: true + vue-template-es2015-compiler: + optional: true + + unplugin-utils@0.3.1: + resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} + engines: {node: '>=20.19.0'} + + unplugin@2.3.10: + resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==} + engines: {node: '>=18.12.0'} + + untyped@2.0.0: + resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==} + hasBin: true + + update-browserslist-db@1.1.4: + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} + 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==} + + vite-plugin-cdn-import@1.0.1: + resolution: {integrity: sha512-lgjLxgwFSKvJLbqjVBirUZ0rQo00GpUGJzRpgQu8RyBw9LA7jaqG6fUMQzBC9qWmTGabPC3iOzwCcoi7PseRAQ==} + + vite-plugin-compression@0.5.1: + resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-externals@0.6.2: + resolution: {integrity: sha512-R5oVY8xDJjLXLTs2XDYzvYbc/RTZuIwOx2xcFbYf+/VXB6eJuatDgt8jzQ7kZ+IrgwQhe6tU8U2fTyy72C25CQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-remove-console@2.2.0: + resolution: {integrity: sha512-qgjh5pz75MdE9Kzs8J0kBwaCfifHV0ezRbB9rpGsIOxam+ilcGV7WOk91vFJXquzRmiKrFh3Hxlh0JJWAmXTbQ==} + + vite-plugin-router-warn@1.0.0: + resolution: {integrity: sha512-jnr7faHJPkKxukBXVpg7Ui1UDqhmxD7xU6JGidq8ivSHTsNAPqzSpPpwW8O1PBP/0+Owq4bLfNNk11drOkz4xA==} + + vite-svg-loader@5.1.0: + resolution: {integrity: sha512-M/wqwtOEjgb956/+m5ZrYT/Iq6Hax0OakWbokj8+9PXOnB7b/4AxESHieEtnNEy7ZpjsjYW1/5nK8fATQMmRxw==} + peerDependencies: + vue: '>=3.2.13' + + vite@7.1.12: + resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + 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@10.2.0: + resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + vue-router@4.6.3: + resolution: {integrity: sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg==} + peerDependencies: + vue: ^3.5.0 + + vue-tippy@6.7.1: + resolution: {integrity: sha512-gdHbBV5/Vc8gH87hQHLA7TN1K4BlLco3MAPrTb70ZYGXxx+55rAU4a4mt0fIoP+gB3etu1khUZ6c29Br1n0CiA==} + peerDependencies: + vue: ^3.2.0 + + vue-tsc@3.1.2: + resolution: {integrity: sha512-3fd4DY0rFczs5f+VB3OhcLU83V6+3Puj2yLBe0Ak65k7ERk+STVNKaOAi0EBo6Lc15UiJB6LzU6Mxy4+h/pKew==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue-types@6.0.0: + resolution: {integrity: sha512-fBgCA4nrBrB8SCU/AN40tFq8HUxLGBvU2ds7a5+SEDse6dYc+TJyvy8mWiwwL8oWIC/aGS/8nTqmhwxApgU5eA==} + engines: {node: '>=14.0.0'} + peerDependencies: + vue: ^3.0.0 + peerDependenciesMeta: + vue: + optional: true + + vue@3.5.22: + resolution: {integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + 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 + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + 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'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + engines: {node: '>=12.20'} + + zrender@6.0.0: + resolution: {integrity: sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==} + +snapshots: + + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.5.0 + tinyexec: 1.0.1 + + '@antfu/utils@9.3.0': {} + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.5': {} + + '@babel/core@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.28.5 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.5 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.27.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.5 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.28.5 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + + '@babel/parser@7.28.5': + dependencies: + '@babel/types': 7.28.5 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + + '@babel/traverse@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.5': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@cacheable/memoize@2.0.3': + dependencies: + '@cacheable/utils': 2.1.0 + + '@cacheable/memory@2.0.3': + dependencies: + '@cacheable/memoize': 2.0.3 + '@cacheable/utils': 2.1.0 + '@keyv/bigmap': 1.1.0(keyv@5.5.3) + hookified: 1.12.2 + keyv: 5.5.3 + + '@cacheable/utils@2.1.0': + dependencies: + keyv: 5.5.3 + + '@code-inspector/core@1.2.10': + dependencies: + '@vue/compiler-dom': 3.5.22 + chalk: 4.1.1 + dotenv: 16.6.1 + launch-ide: 1.2.0 + portfinder: 1.0.38 + transitivePeerDependencies: + - supports-color + + '@code-inspector/esbuild@1.2.10': + dependencies: + '@code-inspector/core': 1.2.10 + transitivePeerDependencies: + - supports-color + + '@code-inspector/mako@1.2.10': + dependencies: + '@code-inspector/core': 1.2.10 + transitivePeerDependencies: + - supports-color + + '@code-inspector/turbopack@1.2.10': + dependencies: + '@code-inspector/core': 1.2.10 + '@code-inspector/webpack': 1.2.10 + transitivePeerDependencies: + - supports-color + + '@code-inspector/vite@1.2.10': + dependencies: + '@code-inspector/core': 1.2.10 + chalk: 4.1.1 + transitivePeerDependencies: + - supports-color + + '@code-inspector/webpack@1.2.10': + dependencies: + '@code-inspector/core': 1.2.10 + transitivePeerDependencies: + - supports-color + + '@commitlint/cli@20.1.0(@types/node@20.19.23)(typescript@5.9.3)': + dependencies: + '@commitlint/format': 20.0.0 + '@commitlint/lint': 20.0.0 + '@commitlint/load': 20.1.0(@types/node@20.19.23)(typescript@5.9.3) + '@commitlint/read': 20.0.0 + '@commitlint/types': 20.0.0 + tinyexec: 1.0.1 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-conventional@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 + conventional-changelog-conventionalcommits: 7.0.2 + + '@commitlint/config-validator@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 + ajv: 8.17.1 + + '@commitlint/ensure@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 + 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@20.0.0': {} + + '@commitlint/format@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 + chalk: 5.6.2 + + '@commitlint/is-ignored@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 + semver: 7.7.3 + + '@commitlint/lint@20.0.0': + dependencies: + '@commitlint/is-ignored': 20.0.0 + '@commitlint/parse': 20.0.0 + '@commitlint/rules': 20.0.0 + '@commitlint/types': 20.0.0 + + '@commitlint/load@20.1.0(@types/node@20.19.23)(typescript@5.9.3)': + dependencies: + '@commitlint/config-validator': 20.0.0 + '@commitlint/execute-rule': 20.0.0 + '@commitlint/resolve-extends': 20.1.0 + '@commitlint/types': 20.0.0 + chalk: 5.6.2 + cosmiconfig: 9.0.0(typescript@5.9.3) + cosmiconfig-typescript-loader: 6.2.0(@types/node@20.19.23)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@20.0.0': {} + + '@commitlint/parse@20.0.0': + dependencies: + '@commitlint/types': 20.0.0 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@20.0.0': + dependencies: + '@commitlint/top-level': 20.0.0 + '@commitlint/types': 20.0.0 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 1.0.1 + + '@commitlint/resolve-extends@20.1.0': + dependencies: + '@commitlint/config-validator': 20.0.0 + '@commitlint/types': 20.0.0 + global-directory: 4.0.1 + import-meta-resolve: 4.2.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/rules@20.0.0': + dependencies: + '@commitlint/ensure': 20.0.0 + '@commitlint/message': 20.0.0 + '@commitlint/to-lines': 20.0.0 + '@commitlint/types': 20.0.0 + + '@commitlint/to-lines@20.0.0': {} + + '@commitlint/top-level@20.0.0': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@20.0.0': + dependencies: + '@types/conventional-commits-parser': 5.0.2 + chalk: 5.6.2 + + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-tokenizer@3.0.4': {} + + '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': + dependencies: + postcss-selector-parser: 7.1.0 + + '@ctrl/tinycolor@3.6.1': {} + + '@dual-bundle/import-meta-resolve@4.2.1': {} + + '@element-plus/icons-vue@2.3.2(vue@3.5.22(typescript@5.9.3))': + dependencies: + vue: 3.5.22(typescript@5.9.3) + + '@esbuild/aix-ppc64@0.25.11': + optional: true + + '@esbuild/android-arm64@0.25.11': + optional: true + + '@esbuild/android-arm@0.25.11': + optional: true + + '@esbuild/android-x64@0.25.11': + optional: true + + '@esbuild/darwin-arm64@0.25.11': + optional: true + + '@esbuild/darwin-x64@0.25.11': + optional: true + + '@esbuild/freebsd-arm64@0.25.11': + optional: true + + '@esbuild/freebsd-x64@0.25.11': + optional: true + + '@esbuild/linux-arm64@0.25.11': + optional: true + + '@esbuild/linux-arm@0.25.11': + optional: true + + '@esbuild/linux-ia32@0.25.11': + optional: true + + '@esbuild/linux-loong64@0.25.11': + optional: true + + '@esbuild/linux-mips64el@0.25.11': + optional: true + + '@esbuild/linux-ppc64@0.25.11': + optional: true + + '@esbuild/linux-riscv64@0.25.11': + optional: true + + '@esbuild/linux-s390x@0.25.11': + optional: true + + '@esbuild/linux-x64@0.25.11': + optional: true + + '@esbuild/netbsd-arm64@0.25.11': + optional: true + + '@esbuild/netbsd-x64@0.25.11': + optional: true + + '@esbuild/openbsd-arm64@0.25.11': + optional: true + + '@esbuild/openbsd-x64@0.25.11': + optional: true + + '@esbuild/openharmony-arm64@0.25.11': + optional: true + + '@esbuild/sunos-x64@0.25.11': + optional: true + + '@esbuild/win32-arm64@0.25.11': + optional: true + + '@esbuild/win32-ia32@0.25.11': + optional: true + + '@esbuild/win32-x64@0.25.11': + optional: true + + '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))': + dependencies: + eslint: 9.38.0(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.1': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.1': + dependencies: + '@eslint/core': 0.16.0 + + '@eslint/core@0.16.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.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@9.38.0': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.0': + dependencies: + '@eslint/core': 0.16.0 + levn: 0.4.1 + + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.4': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/utils@0.2.10': {} + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@iconify/json@2.2.400': + dependencies: + '@iconify/types': 2.0.0 + pathe: 2.0.3 + + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.0.2': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@antfu/utils': 9.3.0 + '@iconify/types': 2.0.0 + debug: 4.4.3 + globals: 15.15.0 + kolorist: 1.8.0 + local-pkg: 1.1.2 + mlly: 1.8.0 + transitivePeerDependencies: + - supports-color + + '@iconify/vue@4.2.0(vue@3.5.22(typescript@5.9.3))': + dependencies: + '@iconify/types': 2.0.0 + vue: 3.5.22(typescript@5.9.3) + + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.2 + 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.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@keyv/bigmap@1.1.0(keyv@5.5.3)': + dependencies: + hookified: 1.12.2 + keyv: 5.5.3 + + '@keyv/serialize@1.1.1': {} + + '@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.19.3': + dependencies: + c12: 3.3.1 + consola: 3.4.2 + defu: 6.1.4 + destr: 2.0.5 + errx: 0.1.0 + exsolve: 1.0.7 + ignore: 7.0.5 + jiti: 2.6.1 + klona: 2.0.6 + knitwork: 1.2.0 + mlly: 1.8.0 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.0 + rc9: 2.1.2 + scule: 1.3.0 + semver: 7.7.3 + std-env: 3.10.0 + tinyglobby: 0.2.15 + ufo: 1.6.1 + unctx: 2.4.1 + unimport: 5.5.0 + untyped: 2.0.0 + transitivePeerDependencies: + - magicast + 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 + + '@pkgr/core@0.2.9': {} + + '@popperjs/core@2.11.8': {} + + '@pureadmin/descriptions@1.2.1(echarts@6.0.0)(element-plus@2.11.5(vue@3.5.22(typescript@5.9.3)))(typescript@5.9.3)': + dependencies: + '@element-plus/icons-vue': 2.3.2(vue@3.5.22(typescript@5.9.3)) + '@pureadmin/utils': 2.6.2(echarts@6.0.0)(vue@3.5.22(typescript@5.9.3)) + element-plus: 2.11.5(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) + transitivePeerDependencies: + - echarts + - typescript + + '@pureadmin/table@3.3.0(element-plus@2.11.5(vue@3.5.22(typescript@5.9.3)))(typescript@5.9.3)': + dependencies: + element-plus: 2.11.5(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) + transitivePeerDependencies: + - typescript + + '@pureadmin/utils@2.6.2(echarts@6.0.0)(vue@3.5.22(typescript@5.9.3))': + optionalDependencies: + echarts: 6.0.0 + vue: 3.5.22(typescript@5.9.3) + + '@rolldown/pluginutils@1.0.0-beta.29': {} + + '@rolldown/pluginutils@1.0.0-beta.45': {} + + '@rollup/pluginutils@5.3.0(rollup@4.52.5)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.52.5 + + '@rollup/rollup-android-arm-eabi@4.52.5': + optional: true + + '@rollup/rollup-android-arm64@4.52.5': + optional: true + + '@rollup/rollup-darwin-arm64@4.52.5': + optional: true + + '@rollup/rollup-darwin-x64@4.52.5': + optional: true + + '@rollup/rollup-freebsd-arm64@4.52.5': + optional: true + + '@rollup/rollup-freebsd-x64@4.52.5': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.52.5': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.52.5': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-x64-musl@4.52.5': + optional: true + + '@rollup/rollup-openharmony-arm64@4.52.5': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.52.5': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.52.5': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.52.5': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.52.5': + optional: true + + '@sxzz/popperjs-es@2.11.7': {} + + '@tailwindcss/node@4.1.16': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.16 + + '@tailwindcss/oxide-android-arm64@4.1.16': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.16': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.16': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.16': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.16': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.16': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.16': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.16': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.16': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.16': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.16': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.16': + optional: true + + '@tailwindcss/oxide@4.1.16': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.16 + '@tailwindcss/oxide-darwin-arm64': 4.1.16 + '@tailwindcss/oxide-darwin-x64': 4.1.16 + '@tailwindcss/oxide-freebsd-x64': 4.1.16 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.16 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.16 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.16 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.16 + '@tailwindcss/oxide-linux-x64-musl': 4.1.16 + '@tailwindcss/oxide-wasm32-wasi': 4.1.16 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.16 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.16 + + '@tailwindcss/vite@4.1.16(vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1))': + dependencies: + '@tailwindcss/node': 4.1.16 + '@tailwindcss/oxide': 4.1.16 + tailwindcss: 4.1.16 + vite: 7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1) + + '@trysound/sax@0.2.0': {} + + '@types/conventional-commits-parser@5.0.2': + dependencies: + '@types/node': 20.19.23 + + '@types/estree@1.0.8': {} + + '@types/js-cookie@3.0.6': {} + + '@types/json-schema@7.0.15': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.20 + + '@types/lodash@4.17.20': {} + + '@types/node@20.19.23': + dependencies: + undici-types: 6.21.0 + + '@types/nprogress@0.2.3': {} + + '@types/path-browserify@1.0.3': {} + + '@types/qs@6.14.0': {} + + '@types/sortablejs@1.15.9': {} + + '@types/tinycolor2@1.4.6': {} + + '@types/web-bluetooth@0.0.16': {} + + '@types/web-bluetooth@0.0.21': {} + + '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/type-utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.2 + eslint: 9.38.0(jiti@2.6.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.2 + debug: 4.4.3 + eslint: 9.38.0(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.46.2': + dependencies: + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 + + '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.38.0(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.46.2': {} + + '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.46.2': + dependencies: + '@typescript-eslint/types': 8.46.2 + eslint-visitor-keys: 4.2.1 + + '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) + '@rolldown/pluginutils': 1.0.0-beta.45 + '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.5) + vite: 7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1) + vue: 3.5.22(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-vue@6.0.1(vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-beta.29 + vite: 7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1) + vue: 3.5.22(typescript@5.9.3) + + '@volar/language-core@2.4.23': + dependencies: + '@volar/source-map': 2.4.23 + + '@volar/source-map@2.4.23': {} + + '@volar/typescript@2.4.23': + dependencies: + '@volar/language-core': 2.4.23 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vue/babel-helper-vue-transform-on@1.5.0': {} + + '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.28.5)': + dependencies: + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@vue/babel-helper-vue-transform-on': 1.5.0 + '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.28.5) + '@vue/shared': 3.5.22 + optionalDependencies: + '@babel/core': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.28.5)': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/parser': 7.28.5 + '@vue/compiler-sfc': 3.5.22 + transitivePeerDependencies: + - supports-color + + '@vue/compiler-core@3.5.22': + dependencies: + '@babel/parser': 7.28.5 + '@vue/shared': 3.5.22 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.22': + dependencies: + '@vue/compiler-core': 3.5.22 + '@vue/shared': 3.5.22 + + '@vue/compiler-sfc@3.5.22': + dependencies: + '@babel/parser': 7.28.5 + '@vue/compiler-core': 3.5.22 + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-ssr': 3.5.22 + '@vue/shared': 3.5.22 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.22': + dependencies: + '@vue/compiler-dom': 3.5.22 + '@vue/shared': 3.5.22 + + '@vue/devtools-api@6.6.4': {} + + '@vue/devtools-api@7.7.7': + dependencies: + '@vue/devtools-kit': 7.7.7 + + '@vue/devtools-kit@7.7.7': + dependencies: + '@vue/devtools-shared': 7.7.7 + birpc: 2.6.1 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.3 + + '@vue/devtools-shared@7.7.7': + dependencies: + rfdc: 1.4.1 + + '@vue/language-core@3.1.2(typescript@5.9.3)': + dependencies: + '@volar/language-core': 2.4.23 + '@vue/compiler-dom': 3.5.22 + '@vue/shared': 3.5.22 + alien-signals: 3.0.3 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + picomatch: 4.0.3 + optionalDependencies: + typescript: 5.9.3 + + '@vue/reactivity@3.5.22': + dependencies: + '@vue/shared': 3.5.22 + + '@vue/runtime-core@3.5.22': + dependencies: + '@vue/reactivity': 3.5.22 + '@vue/shared': 3.5.22 + + '@vue/runtime-dom@3.5.22': + dependencies: + '@vue/reactivity': 3.5.22 + '@vue/runtime-core': 3.5.22 + '@vue/shared': 3.5.22 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.9.3))': + dependencies: + '@vue/compiler-ssr': 3.5.22 + '@vue/shared': 3.5.22 + vue: 3.5.22(typescript@5.9.3) + + '@vue/shared@3.5.22': {} + + '@vueuse/core@13.9.0(vue@3.5.22(typescript@5.9.3))': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 13.9.0 + '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) + + '@vueuse/core@14.0.0(vue@3.5.22(typescript@5.9.3))': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 14.0.0 + '@vueuse/shared': 14.0.0(vue@3.5.22(typescript@5.9.3)) + vue: 3.5.22(typescript@5.9.3) + + '@vueuse/core@9.13.0(vue@3.5.22(typescript@5.9.3))': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.5.22(typescript@5.9.3)) + vue-demi: 0.14.10(vue@3.5.22(typescript@5.9.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@13.9.0': {} + + '@vueuse/metadata@14.0.0': {} + + '@vueuse/metadata@9.13.0': {} + + '@vueuse/motion@3.0.3(vue@3.5.22(typescript@5.9.3))': + dependencies: + '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.9.3)) + '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.9.3)) + defu: 6.1.4 + framesync: 6.1.2 + popmotion: 11.0.5 + style-value-types: 5.1.2 + vue: 3.5.22(typescript@5.9.3) + optionalDependencies: + '@nuxt/kit': 3.19.3 + transitivePeerDependencies: + - magicast + + '@vueuse/shared@13.9.0(vue@3.5.22(typescript@5.9.3))': + dependencies: + vue: 3.5.22(typescript@5.9.3) + + '@vueuse/shared@14.0.0(vue@3.5.22(typescript@5.9.3))': + dependencies: + vue: 3.5.22(typescript@5.9.3) + + '@vueuse/shared@9.13.0(vue@3.5.22(typescript@5.9.3))': + dependencies: + vue-demi: 0.14.10(vue@3.5.22(typescript@5.9.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + 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.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + alien-signals@3.0.3: {} + + animate.css@4.1.1: {} + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-escapes@7.1.1: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + argparse@2.0.1: {} + + array-ify@1.0.0: {} + + array-union@2.1.0: {} + + astral-regex@2.0.0: {} + + async-validator@4.2.5: {} + + async@3.2.6: {} + + asynckit@0.4.0: {} + + axios@1.12.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + balanced-match@2.0.0: {} + + baseline-browser-mapping@2.10.11: {} + + birpc@2.6.1: {} + + boolbase@1.0.0: {} + + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.27.0: + dependencies: + baseline-browser-mapping: 2.10.11 + caniuse-lite: 1.0.30001751 + electron-to-chromium: 1.5.240 + node-releases: 2.0.26 + update-browserslist-db: 1.1.4(browserslist@4.27.0) + + c12@3.3.1: + dependencies: + chokidar: 4.0.3 + confbox: 0.2.2 + defu: 6.1.4 + dotenv: 17.2.3 + exsolve: 1.0.7 + giget: 2.0.0 + jiti: 2.6.1 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.0.0 + pkg-types: 2.3.0 + rc9: 2.1.2 + optional: true + + cacheable@2.1.1: + dependencies: + '@cacheable/memoize': 2.0.3 + '@cacheable/memory': 2.0.3 + '@cacheable/utils': 2.1.0 + hookified: 1.12.2 + keyv: 5.5.3 + qified: 0.5.1 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase@8.0.0: {} + + caniuse-api@3.0.0: + dependencies: + browserslist: 4.27.0 + caniuse-lite: 1.0.30001751 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + + caniuse-lite@1.0.30001751: {} + + chalk@4.1.1: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + citty@0.1.6: + dependencies: + consola: 3.4.2 + optional: true + + cli-boxes@3.0.0: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-truncate@5.1.1: + dependencies: + slice-ansi: 7.1.2 + string-width: 8.1.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + code-inspector-plugin@1.2.10: + dependencies: + '@code-inspector/core': 1.2.10 + '@code-inspector/esbuild': 1.2.10 + '@code-inspector/mako': 1.2.10 + '@code-inspector/turbopack': 1.2.10 + '@code-inspector/vite': 1.2.10 + '@code-inspector/webpack': 1.2.10 + chalk: 4.1.1 + transitivePeerDependencies: + - supports-color + + codemirror-editor-vue3@2.8.0(codemirror@5.65.21)(diff-match-patch@1.0.5)(vue@3.5.22(typescript@5.9.3)): + dependencies: + codemirror: 5.65.21 + diff-match-patch: 1.0.5 + vue: 3.5.22(typescript@5.9.3) + + codemirror@5.65.21: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colord@2.9.3: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@11.1.0: {} + + commander@14.0.2: {} + + commander@7.2.0: {} + + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + + concat-map@0.0.1: {} + + confbox@0.1.8: {} + + confbox@0.2.2: {} + + consola@3.4.2: + optional: true + + conventional-changelog-angular@7.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-conventionalcommits@7.0.2: + dependencies: + compare-func: 2.0.0 + + conventional-commits-parser@5.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + + convert-source-map@2.0.0: {} + + copy-anything@4.0.5: + dependencies: + is-what: 5.5.0 + + cosmiconfig-typescript-loader@6.2.0(@types/node@20.19.23)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): + dependencies: + '@types/node': 20.19.23 + cosmiconfig: 9.0.0(typescript@5.9.3) + jiti: 2.6.1 + typescript: 5.9.3 + + cosmiconfig@9.0.0(typescript@5.9.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-declaration-sorter@7.3.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + css-functions-list@3.2.3: {} + + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.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-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + css-what@6.2.2: {} + + cssesc@3.0.0: {} + + cssnano-preset-default@7.0.9(postcss@8.5.6): + dependencies: + browserslist: 4.27.0 + css-declaration-sorter: 7.3.0(postcss@8.5.6) + cssnano-utils: 5.0.1(postcss@8.5.6) + postcss: 8.5.6 + postcss-calc: 10.1.1(postcss@8.5.6) + postcss-colormin: 7.0.4(postcss@8.5.6) + postcss-convert-values: 7.0.7(postcss@8.5.6) + postcss-discard-comments: 7.0.4(postcss@8.5.6) + postcss-discard-duplicates: 7.0.2(postcss@8.5.6) + postcss-discard-empty: 7.0.1(postcss@8.5.6) + postcss-discard-overridden: 7.0.1(postcss@8.5.6) + postcss-merge-longhand: 7.0.5(postcss@8.5.6) + postcss-merge-rules: 7.0.6(postcss@8.5.6) + postcss-minify-font-values: 7.0.1(postcss@8.5.6) + postcss-minify-gradients: 7.0.1(postcss@8.5.6) + postcss-minify-params: 7.0.4(postcss@8.5.6) + postcss-minify-selectors: 7.0.5(postcss@8.5.6) + postcss-normalize-charset: 7.0.1(postcss@8.5.6) + postcss-normalize-display-values: 7.0.1(postcss@8.5.6) + postcss-normalize-positions: 7.0.1(postcss@8.5.6) + postcss-normalize-repeat-style: 7.0.1(postcss@8.5.6) + postcss-normalize-string: 7.0.1(postcss@8.5.6) + postcss-normalize-timing-functions: 7.0.1(postcss@8.5.6) + postcss-normalize-unicode: 7.0.4(postcss@8.5.6) + postcss-normalize-url: 7.0.1(postcss@8.5.6) + postcss-normalize-whitespace: 7.0.1(postcss@8.5.6) + postcss-ordered-values: 7.0.2(postcss@8.5.6) + postcss-reduce-initial: 7.0.4(postcss@8.5.6) + postcss-reduce-transforms: 7.0.1(postcss@8.5.6) + postcss-svgo: 7.1.0(postcss@8.5.6) + postcss-unique-selectors: 7.0.4(postcss@8.5.6) + + cssnano-utils@5.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + cssnano@7.1.1(postcss@8.5.6): + dependencies: + cssnano-preset-default: 7.0.9(postcss@8.5.6) + lilconfig: 3.1.3 + postcss: 8.5.6 + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + csstype@3.1.3: {} + + dargs@8.1.0: {} + + dayjs@1.11.18: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + define-lazy-prop@2.0.0: {} + + defu@6.1.4: {} + + delayed-stream@1.0.0: {} + + destr@2.0.5: + optional: true + + detect-libc@1.0.3: + optional: true + + detect-libc@2.1.2: {} + + diff-match-patch@1.0.5: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + 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.6.1: {} + + dotenv@17.2.3: + 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@6.0.0: + dependencies: + tslib: 2.3.0 + zrender: 6.0.0 + + electron-to-chromium@1.5.240: {} + + element-plus@2.11.5(vue@3.5.22(typescript@5.9.3)): + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@element-plus/icons-vue': 2.3.2(vue@3.5.22(typescript@5.9.3)) + '@floating-ui/dom': 1.7.4 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.17.20 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0(vue@3.5.22(typescript@5.9.3)) + async-validator: 4.2.5 + dayjs: 1.11.18 + 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.22(typescript@5.9.3) + transitivePeerDependencies: + - '@vue/composition-api' + + emoji-regex@10.6.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + entities@4.5.0: {} + + env-paths@2.2.1: {} + + environment@1.1.0: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + errx@0.1.0: + optional: true + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@0.4.1: {} + + 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.25.11: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.11 + '@esbuild/android-arm': 0.25.11 + '@esbuild/android-arm64': 0.25.11 + '@esbuild/android-x64': 0.25.11 + '@esbuild/darwin-arm64': 0.25.11 + '@esbuild/darwin-x64': 0.25.11 + '@esbuild/freebsd-arm64': 0.25.11 + '@esbuild/freebsd-x64': 0.25.11 + '@esbuild/linux-arm': 0.25.11 + '@esbuild/linux-arm64': 0.25.11 + '@esbuild/linux-ia32': 0.25.11 + '@esbuild/linux-loong64': 0.25.11 + '@esbuild/linux-mips64el': 0.25.11 + '@esbuild/linux-ppc64': 0.25.11 + '@esbuild/linux-riscv64': 0.25.11 + '@esbuild/linux-s390x': 0.25.11 + '@esbuild/linux-x64': 0.25.11 + '@esbuild/netbsd-arm64': 0.25.11 + '@esbuild/netbsd-x64': 0.25.11 + '@esbuild/openbsd-arm64': 0.25.11 + '@esbuild/openbsd-x64': 0.25.11 + '@esbuild/openharmony-arm64': 0.25.11 + '@esbuild/sunos-x64': 0.25.11 + '@esbuild/win32-arm64': 0.25.11 + '@esbuild/win32-ia32': 0.25.11 + '@esbuild/win32-x64': 0.25.11 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: + optional: true + + eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)): + dependencies: + eslint: 9.38.0(jiti@2.6.1) + + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(prettier@3.6.2): + dependencies: + eslint: 9.38.0(jiti@2.6.1) + prettier: 3.6.2 + prettier-linter-helpers: 1.0.0 + synckit: 0.11.11 + optionalDependencies: + eslint-config-prettier: 10.1.8(eslint@9.38.0(jiti@2.6.1)) + + eslint-plugin-vue@10.5.1(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.38.0(jiti@2.6.1))): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + eslint: 9.38.0(jiti@2.6.1) + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.2 + semver: 7.7.3 + vue-eslint-parser: 10.2.0(eslint@9.38.0(jiti@2.6.1)) + xml-name-validator: 4.0.0 + optionalDependencies: + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.38.0(jiti@2.6.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.1 + '@eslint/core': 0.16.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.38.0 + '@eslint/plugin-kit': 0.4.0 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + esutils@2.0.3: {} + + eventemitter3@5.0.1: {} + + exsolve@1.0.7: {} + + 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.1.0: {} + + fastest-levenshtein@1.0.16: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + file-entry-cache@10.1.4: + dependencies: + flat-cache: 6.1.18 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flat-cache@6.1.18: + dependencies: + cacheable: 2.1.1 + flatted: 3.3.3 + hookified: 1.12.2 + + flatted@3.3.3: {} + + follow-redirects@1.15.11: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + framesync@6.1.2: + dependencies: + tslib: 2.4.0 + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.4.0: {} + + 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 + + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.7 + nypm: 0.6.2 + pathe: 2.0.3 + optional: true + + git-raw-commits@4.0.0: + dependencies: + dargs: 8.1.0 + meow: 12.1.1 + split2: 4.2.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@11.0.3: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.0.3 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + 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@14.0.0: {} + + globals@15.15.0: {} + + 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 + + globjoin@0.1.4: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + gradient-string@3.0.0: + dependencies: + chalk: 5.6.2 + tinygradient: 1.1.5 + + graphemer@1.4.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 + + hey-listen@1.0.8: {} + + hookable@5.5.3: {} + + hookified@1.12.2: {} + + 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 + + husky@9.1.7: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + immediate@3.0.6: {} + + immutable@5.1.4: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-meta-resolve@4.2.0: {} + + imurmurhash@0.1.4: {} + + ini@1.3.8: {} + + ini@4.1.1: {} + + is-arrayish@0.2.1: {} + + is-docker@2.2.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.4.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-plain-object@5.0.0: {} + + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + is-text-path@2.0.0: + dependencies: + text-extensions: 2.4.0 + + is-what@5.5.0: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isexe@2.0.0: {} + + jackspeak@4.1.1: + dependencies: + '@isaacs/cliui': 8.0.2 + + jiti@2.6.1: {} + + 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 + + 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.2.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 + + keyv@5.5.3: + dependencies: + '@keyv/serialize': 1.1.1 + + kind-of@6.0.3: {} + + klona@2.0.6: + optional: true + + knitwork@1.2.0: + optional: true + + known-css-properties@0.36.0: {} + + known-css-properties@0.37.0: {} + + kolorist@1.8.0: {} + + launch-ide@1.2.0: + dependencies: + chalk: 4.1.1 + dotenv: 16.6.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lie@3.1.1: + dependencies: + immediate: 3.0.6 + + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.30.2: + optional: true + + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + + lightningcss-linux-arm64-musl@1.30.2: + optional: true + + lightningcss-linux-x64-gnu@1.30.2: + optional: true + + lightningcss-linux-x64-musl@1.30.2: + optional: true + + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + + lightningcss-win32-x64-msvc@1.30.2: + optional: true + + lightningcss@1.30.2: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lint-staged@16.2.6: + dependencies: + commander: 14.0.2 + listr2: 9.0.5 + micromatch: 4.0.8 + nano-spawn: 2.0.0 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.8.1 + + listr2@9.0.5: + dependencies: + cli-truncate: 5.1.1 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.2 + + local-pkg@1.1.2: + dependencies: + mlly: 1.8.0 + pkg-types: 2.3.0 + quansync: 0.2.11 + + localforage@1.10.0: + dependencies: + lie: 3.1.1 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + locate-path@7.2.0: + dependencies: + p-locate: 6.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.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@6.1.0: + dependencies: + ansi-escapes: 7.1.1 + cli-cursor: 5.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.1.2 + wrap-ansi: 9.0.2 + + lru-cache@11.2.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + math-intrinsics@1.1.0: {} + + mathml-tag-names@2.1.3: {} + + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + + mdn-data@2.12.2: {} + + mdn-data@2.24.0: {} + + memoize-one@6.0.0: {} + + meow@12.1.1: {} + + meow@13.2.0: {} + + merge2@1.4.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-function@5.0.1: {} + + minimatch@10.0.3: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + mitt@3.0.1: {} + + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + ms@2.1.3: {} + + muggle-string@0.4.1: {} + + nano-spawn@2.0.0: {} + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + node-addon-api@7.1.1: + optional: true + + node-fetch-native@1.6.7: + optional: true + + node-releases@2.0.26: {} + + normalize-path@3.0.0: {} + + normalize-wheel-es@1.2.0: {} + + nprogress@0.2.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nypm@0.6.2: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.3.0 + tinyexec: 1.0.1 + optional: true + + object-inspect@1.13.4: {} + + ohash@2.0.11: + optional: true + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + 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@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.1 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + package-json-from-dist@1.0.1: {} + + package-manager-detector@1.5.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-exists@5.0.0: {} + + path-key@3.1.1: {} + + path-scurry@2.0.0: + dependencies: + lru-cache: 11.2.2 + minipass: 7.1.2 + + path-type@4.0.0: {} + + pathe@2.0.3: {} + + perfect-debounce@1.0.0: {} + + perfect-debounce@2.0.0: + optional: true + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pidtree@0.6.0: {} + + pinia@3.0.3(typescript@5.9.3)(vue@3.5.22(typescript@5.9.3)): + dependencies: + '@vue/devtools-api': 7.7.7 + vue: 3.5.22(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + + pinyin-pro@3.27.0: {} + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + + popmotion@11.0.5: + dependencies: + framesync: 6.1.2 + hey-listen: 1.0.8 + style-value-types: 5.1.2 + tslib: 2.4.0 + + portfinder@1.0.38: + dependencies: + async: 3.2.6 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + postcss-calc@10.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + + postcss-colormin@7.0.4(postcss@8.5.6): + dependencies: + browserslist: 4.27.0 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-convert-values@7.0.7(postcss@8.5.6): + dependencies: + browserslist: 4.27.0 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-discard-comments@7.0.4(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + + postcss-discard-duplicates@7.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-discard-empty@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-discard-overridden@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-html@1.8.0: + dependencies: + htmlparser2: 8.0.2 + js-tokens: 9.0.1 + postcss: 8.5.6 + postcss-safe-parser: 6.0.0(postcss@8.5.6) + + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.6.1 + postcss: 8.5.6 + yaml: 2.8.1 + + postcss-media-query-parser@0.2.3: {} + + postcss-merge-longhand@7.0.5(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + stylehacks: 7.0.6(postcss@8.5.6) + + postcss-merge-rules@7.0.6(postcss@8.5.6): + dependencies: + browserslist: 4.27.0 + caniuse-api: 3.0.0 + cssnano-utils: 5.0.1(postcss@8.5.6) + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + + postcss-minify-font-values@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@7.0.1(postcss@8.5.6): + dependencies: + colord: 2.9.3 + cssnano-utils: 5.0.1(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-minify-params@7.0.4(postcss@8.5.6): + dependencies: + browserslist: 4.27.0 + cssnano-utils: 5.0.1(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-minify-selectors@7.0.5(postcss@8.5.6): + dependencies: + cssesc: 3.0.0 + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + + postcss-normalize-charset@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-normalize-display-values@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@7.0.4(postcss@8.5.6): + dependencies: + browserslist: 4.27.0 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-ordered-values@7.0.2(postcss@8.5.6): + dependencies: + cssnano-utils: 5.0.1(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-reduce-initial@7.0.4(postcss@8.5.6): + dependencies: + browserslist: 4.27.0 + caniuse-api: 3.0.0 + postcss: 8.5.6 + + postcss-reduce-transforms@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-resolve-nested-selector@0.1.6: {} + + postcss-safe-parser@6.0.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-safe-parser@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-scss@4.0.9(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-sorting@9.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-svgo@7.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + svgo: 4.0.0 + + postcss-unique-selectors@7.0.4(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + 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@3.6.2: {} + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + qified@0.5.1: + dependencies: + hookified: 1.12.2 + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + quansync@0.2.11: {} + + queue-microtask@1.2.3: {} + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.5 + optional: true + + readdirp@4.1.2: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + responsive-storage@2.2.0: {} + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rimraf@6.0.1: + dependencies: + glob: 11.0.3 + package-json-from-dist: 1.0.1 + + rollup-plugin-external-globals@0.10.0(rollup@4.52.5): + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.52.5) + estree-walker: 3.0.3 + is-reference: 3.0.3 + magic-string: 0.30.21 + rollup: 4.52.5 + + rollup-plugin-visualizer@6.0.5(rollup@4.52.5): + dependencies: + open: 8.4.2 + picomatch: 4.0.3 + source-map: 0.7.6 + yargs: 17.7.2 + optionalDependencies: + rollup: 4.52.5 + + rollup@4.52.5: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.52.5 + '@rollup/rollup-android-arm64': 4.52.5 + '@rollup/rollup-darwin-arm64': 4.52.5 + '@rollup/rollup-darwin-x64': 4.52.5 + '@rollup/rollup-freebsd-arm64': 4.52.5 + '@rollup/rollup-freebsd-x64': 4.52.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 + '@rollup/rollup-linux-arm64-musl': 4.52.5 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 + '@rollup/rollup-linux-x64-gnu': 4.52.5 + '@rollup/rollup-linux-x64-musl': 4.52.5 + '@rollup/rollup-openharmony-arm64': 4.52.5 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 + '@rollup/rollup-win32-x64-gnu': 4.52.5 + '@rollup/rollup-win32-x64-msvc': 4.52.5 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + sass@1.93.2: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.4 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 + + sax@1.4.1: {} + + scule@1.3.0: + optional: true + + semver@6.3.1: {} + + semver@7.7.3: {} + + 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.4 + 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.4 + 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@4.1.0: {} + + slash@3.0.0: {} + + 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@7.1.2: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + sortablejs@1.15.6: {} + + source-map-js@1.2.1: {} + + source-map@0.7.6: {} + + sourcemap-codec@1.4.8: {} + + speakingurl@14.0.1: {} + + split2@4.2.0: {} + + std-env@3.10.0: + optional: true + + string-argv@0.3.2: {} + + 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.2 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + string-width@8.1.0: + dependencies: + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + strip-json-comments@3.1.1: {} + + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + optional: true + + style-value-types@5.1.2: + dependencies: + hey-listen: 1.0.8 + tslib: 2.4.0 + + stylehacks@7.0.6(postcss@8.5.6): + dependencies: + browserslist: 4.27.0 + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + + stylelint-config-html@1.1.0(postcss-html@1.8.0)(stylelint@16.25.0(typescript@5.9.3)): + dependencies: + postcss-html: 1.8.0 + stylelint: 16.25.0(typescript@5.9.3) + + stylelint-config-recess-order@7.4.0(stylelint-order@7.0.0(stylelint@16.25.0(typescript@5.9.3)))(stylelint@16.25.0(typescript@5.9.3)): + dependencies: + stylelint: 16.25.0(typescript@5.9.3) + stylelint-order: 7.0.0(stylelint@16.25.0(typescript@5.9.3)) + + stylelint-config-recommended-scss@14.1.0(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)): + dependencies: + postcss-scss: 4.0.9(postcss@8.5.6) + stylelint: 16.25.0(typescript@5.9.3) + stylelint-config-recommended: 14.0.1(stylelint@16.25.0(typescript@5.9.3)) + stylelint-scss: 6.12.1(stylelint@16.25.0(typescript@5.9.3)) + optionalDependencies: + postcss: 8.5.6 + + stylelint-config-recommended-vue@1.6.1(postcss-html@1.8.0)(stylelint@16.25.0(typescript@5.9.3)): + dependencies: + postcss-html: 1.8.0 + semver: 7.7.3 + stylelint: 16.25.0(typescript@5.9.3) + stylelint-config-html: 1.1.0(postcss-html@1.8.0)(stylelint@16.25.0(typescript@5.9.3)) + stylelint-config-recommended: 17.0.0(stylelint@16.25.0(typescript@5.9.3)) + + stylelint-config-recommended@14.0.1(stylelint@16.25.0(typescript@5.9.3)): + dependencies: + stylelint: 16.25.0(typescript@5.9.3) + + stylelint-config-recommended@17.0.0(stylelint@16.25.0(typescript@5.9.3)): + dependencies: + stylelint: 16.25.0(typescript@5.9.3) + + stylelint-config-standard-scss@14.0.0(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)): + dependencies: + stylelint: 16.25.0(typescript@5.9.3) + stylelint-config-recommended-scss: 14.1.0(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)) + stylelint-config-standard: 36.0.1(stylelint@16.25.0(typescript@5.9.3)) + optionalDependencies: + postcss: 8.5.6 + + stylelint-config-standard@36.0.1(stylelint@16.25.0(typescript@5.9.3)): + dependencies: + stylelint: 16.25.0(typescript@5.9.3) + stylelint-config-recommended: 14.0.1(stylelint@16.25.0(typescript@5.9.3)) + + stylelint-order@7.0.0(stylelint@16.25.0(typescript@5.9.3)): + dependencies: + postcss: 8.5.6 + postcss-sorting: 9.1.0(postcss@8.5.6) + stylelint: 16.25.0(typescript@5.9.3) + + stylelint-prettier@5.0.3(prettier@3.6.2)(stylelint@16.25.0(typescript@5.9.3)): + dependencies: + prettier: 3.6.2 + prettier-linter-helpers: 1.0.0 + stylelint: 16.25.0(typescript@5.9.3) + + stylelint-scss@6.12.1(stylelint@16.25.0(typescript@5.9.3)): + dependencies: + css-tree: 3.1.0 + is-plain-object: 5.0.0 + known-css-properties: 0.36.0 + mdn-data: 2.24.0 + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.6 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + stylelint: 16.25.0(typescript@5.9.3) + + stylelint@16.25.0(typescript@5.9.3): + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + '@dual-bundle/import-meta-resolve': 4.2.1 + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 9.0.0(typescript@5.9.3) + css-functions-list: 3.2.3 + css-tree: 3.1.0 + debug: 4.4.3 + fast-glob: 3.3.3 + fastest-levenshtein: 1.0.16 + file-entry-cache: 10.1.4 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 7.0.5 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.37.0 + mathml-tag-names: 2.1.3 + meow: 13.2.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-resolve-nested-selector: 0.1.6 + postcss-safe-parser: 7.0.1(postcss@8.5.6) + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + resolve-from: 5.0.0 + string-width: 4.2.3 + supports-hyperlinks: 3.2.0 + svg-tags: 1.0.0 + table: 6.9.0 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + - typescript + + superjson@2.2.3: + dependencies: + copy-anything: 4.0.5 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + svg-tags@1.0.0: {} + + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.2.2 + css-tree: 2.3.1 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + + svgo@4.0.0: + dependencies: + commander: 11.1.0 + css-select: 5.2.2 + css-tree: 3.1.0 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.4.1 + + synckit@0.11.11: + dependencies: + '@pkgr/core': 0.2.9 + + 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@4.1.16: {} + + tapable@2.3.0: {} + + text-extensions@2.4.0: {} + + through@2.3.8: {} + + tinycolor2@1.6.0: {} + + tinyexec@1.0.1: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinygradient@1.1.5: + dependencies: + '@types/tinycolor2': 1.4.6 + tinycolor2: 1.6.0 + + tippy.js@6.3.7: + dependencies: + '@popperjs/core': 2.11.8 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@2.1.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + tslib@2.3.0: {} + + tslib@2.4.0: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@4.41.0: {} + + typescript-eslint@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + typescript@5.9.3: {} + + ufo@1.6.1: {} + + unctx@2.4.1: + dependencies: + acorn: 8.15.0 + estree-walker: 3.0.3 + magic-string: 0.30.21 + unplugin: 2.3.10 + optional: true + + undici-types@6.21.0: {} + + unicorn-magic@0.1.0: {} + + unimport@5.5.0: + dependencies: + acorn: 8.15.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + local-pkg: 1.1.2 + magic-string: 0.30.21 + mlly: 1.8.0 + pathe: 2.0.3 + picomatch: 4.0.3 + pkg-types: 2.3.0 + scule: 1.3.0 + strip-literal: 3.1.0 + tinyglobby: 0.2.15 + unplugin: 2.3.10 + unplugin-utils: 0.3.1 + optional: true + + universalify@2.0.1: {} + + unplugin-icons@22.5.0(@vue/compiler-sfc@3.5.22): + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/utils': 3.0.2 + debug: 4.4.3 + local-pkg: 1.1.2 + unplugin: 2.3.10 + optionalDependencies: + '@vue/compiler-sfc': 3.5.22 + transitivePeerDependencies: + - supports-color + + unplugin-utils@0.3.1: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.3 + optional: true + + unplugin@2.3.10: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.15.0 + picomatch: 4.0.3 + webpack-virtual-modules: 0.6.2 + + untyped@2.0.0: + dependencies: + citty: 0.1.6 + defu: 6.1.4 + jiti: 2.6.1 + knitwork: 1.2.0 + scule: 1.3.0 + optional: true + + update-browserslist-db@1.1.4(browserslist@4.27.0): + dependencies: + browserslist: 4.27.0 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + vite-plugin-cdn-import@1.0.1(rollup@4.52.5)(vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1)): + dependencies: + rollup-plugin-external-globals: 0.10.0(rollup@4.52.5) + vite-plugin-externals: 0.6.2(vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1)) + transitivePeerDependencies: + - rollup + - vite + + vite-plugin-compression@0.5.1(vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1)): + dependencies: + chalk: 4.1.2 + debug: 4.4.3 + fs-extra: 10.1.0 + vite: 7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1) + transitivePeerDependencies: + - supports-color + + vite-plugin-externals@0.6.2(vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1)): + dependencies: + acorn: 8.15.0 + es-module-lexer: 0.4.1 + fs-extra: 10.1.0 + magic-string: 0.25.9 + vite: 7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1) + + vite-plugin-remove-console@2.2.0: {} + + vite-plugin-router-warn@1.0.0: {} + + vite-svg-loader@5.1.0(vue@3.5.22(typescript@5.9.3)): + dependencies: + svgo: 3.3.2 + vue: 3.5.22(typescript@5.9.3) + + vite@7.1.12(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.93.2)(yaml@2.8.1): + dependencies: + esbuild: 0.25.11 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.52.5 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 20.19.23 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + sass: 1.93.2 + yaml: 2.8.1 + + vscode-uri@3.1.0: {} + + vue-demi@0.14.10(vue@3.5.22(typescript@5.9.3)): + dependencies: + vue: 3.5.22(typescript@5.9.3) + + vue-eslint-parser@10.2.0(eslint@9.38.0(jiti@2.6.1)): + dependencies: + debug: 4.4.3 + eslint: 9.38.0(jiti@2.6.1) + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + vue-router@4.6.3(vue@3.5.22(typescript@5.9.3)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.22(typescript@5.9.3) + + vue-tippy@6.7.1(vue@3.5.22(typescript@5.9.3)): + dependencies: + tippy.js: 6.3.7 + vue: 3.5.22(typescript@5.9.3) + + vue-tsc@3.1.2(typescript@5.9.3): + dependencies: + '@volar/typescript': 2.4.23 + '@vue/language-core': 3.1.2(typescript@5.9.3) + typescript: 5.9.3 + + vue-types@6.0.0(vue@3.5.22(typescript@5.9.3)): + optionalDependencies: + vue: 3.5.22(typescript@5.9.3) + + vue@3.5.22(typescript@5.9.3): + dependencies: + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-sfc': 3.5.22 + '@vue/runtime-dom': 3.5.22 + '@vue/server-renderer': 3.5.22(vue@3.5.22(typescript@5.9.3)) + '@vue/shared': 3.5.22 + optionalDependencies: + typescript: 5.9.3 + + webpack-virtual-modules@0.6.2: {} + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + word-wrap@1.2.5: {} + + 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.3 + string-width: 5.1.2 + strip-ansi: 7.1.2 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 + + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + xml-name-validator@4.0.0: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yaml@2.8.1: {} + + yargs-parser@21.1.1: {} + + 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 + + yocto-queue@0.1.0: {} + + yocto-queue@1.2.1: {} + + zrender@6.0.0: + dependencies: + tslib: 2.3.0 diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100755 index 0000000..cdc3694 --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,8 @@ +// @ts-check + +/** @type {import('postcss-load-config').Config} */ +export default { + plugins: { + ...(process.env.NODE_ENV === "production" ? { cssnano: {} } : {}) + } +}; diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7100dc6c73789504fca1e2183c0de227b8d465fe GIT binary patch literal 99678 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 I_x|Jg54jX%d;kCd literal 0 HcmV?d00001 diff --git a/frontend/public/logo.png b/frontend/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cf6604da76f266c18ba14d8966f246c48e8a6ed8 GIT binary patch literal 210978 zcmeFYWm6?h&@GC)yUXD2?l8bG_~7m^xU+G0ch|w)-DPka+}&*h8`r~g;=cFZpKv~$ z4;>wy5mnK(Dl2Q%%B%<_1!-gi0t7HHFl3n@-+zIDf#3c2z`=Z3CYH7%zh2(QOeYaN(BK_gt6* z7)e%Z2ahzapp8<{Kj;~)+*C@<>p4l36>h!M>lJ>{VlH~Ou?`4Y{BkbRDvD)&z}Lqh zMALA#<1qf%)9e29QuR#kTGve-vP>xlVn~)ppO5193P>eOSIgGX%(as~fFh}hzpKj7 z`PZ}jj!_b9I^?wwY|S~bi?>=k!Z_nhq>!4jkK6KIO`Lx7dsv>|d2jbi<^*$RmDw@u zNZ0S$Tb#NtS8w%KUYBUW(LBa+fSYyTD%v;koIe)21(Z|{O<|Si-KS)^_GEX@!#`&8 z89!Xho9PpS_wZNzoG7e7;PyD?rea=&+A+@#vPAVA=UaBfcGuuL_D`ck1*>t|F%228 zznf80gMZGiimX+YeEzV1+qsn`as6NcLis!8tao*HFF}YbeIf9viP>!bo5^8RvoFVK zoX*nk+3lSs@BIK-Czjtg$$3%kFrJEr5Ov#Sp=3X{?Ol1gKO$u!PA<{3hQ5*y){a|d zBRR|z0Sqr6{1@!B1TS*;yX-SEjsT6fUTBU3h4-GXLmwOE9LJmEgS;~4ZYi$ zJde+?8L#=qmR3>U(aEU?Df>WZZP8wMDXZ-{?VX+0K5oBpy0pjRqZh*5`x9JZ{dT9M z+BYeO!%%&GpB3Ubk!L)IMfjZx3ZXXn>F1a&8fO&4@t||aHWXtv!%9HPypkd~}~CmL4DPq;E3-KjU?1mQ}(y_v<)0FW72m zJ7&Zte_v;<1|bFO0G(xstE$H7Gm_rZ0B6*m?F?y&Op**<-YWV{bQ)s6xbr|HsTCOwG4G`yLXBV`NeL z2G{Sm6$IEGjvmTtz~_a-G~Xv4{nsZwruglSq$;6T+x4&6*=`vr?e18D;6k+7?BH7M z7Rd5ifXwrFi)aozb(%qaq=V<_&hWss?@jS#rcr{cB#1a8SZN%ggZqZQ!fI^3OkYvo)=6_Mia(ffXPVbU$7#Eh*mWUDfe%#E6DaWDNqEJ&nbmEvS0TWgM|7me zew+jJI;Ny#7HqG8!{aMpDsX(0hc+Aagsj`o;zf!zDEg(+LaYvMc80Y2UYkkn~h1(^MEN7BflbCv22FaW;m2|f+x$iAR-rNOyig+uR@ zq`Qa?X`Y1m(_P?6oDZZ9LfVOM-`BN*YYxue3n@!Mcq$*P3>poJtbz8q|a19$(y>ofY%dxIfE&Byn4|CXkd@tQ&;$xS^ zOY}VHW4>?iC)DvctRnT|W6vwl;3Ed)_fFnQn=kU%K6ANoS>&wPHGc`b&!@Z;n(aIg z+Zw!7$+L5ar}U>XKuAx4cWl(JexO3P!X#O)>+lC$o~k|Q&bV54<8j!%^4KnXJK0t$ zTGsOJVib~svIn<;&s`S3?+*xXzi+6BWX#jmIda%-t$khV%zI0mueA(#i}%ylf!vV8 z`3?SV&Ti_JuCon+H{Ao;_q~5AjBDGRPmC4872Lqb*4I+^Wy8$ATi2RA3To04xr4`X%Rfxc}C@-T9yc ze2((-c?PU;SMxmD*u(+KbiTGu2_G1uw?|-0_wztZslCte>2$wJS6E{=K$@(BuWWp* z=;?wotLx++&6MxExpAQH`I7CtqSvkccK3RgFC5mj?9R@@P_d3+5nV=O@=|e&Y1DXc zrt7NIcO22C8jLtm8~xVj>tRf}XDhYr)0Lm68O98U1M<^Zpmmt8YHi=@4KJqPnRaLO z1;Td$ZsWtWiElH0)FIkFs<6pS8y&l!m{BRu^s;{7TV6d$y74bkuwxv;@;JTwKFw{?b=t5Yb)j{;Ykl-M$Yg?)JhF z1{{`3Au=FJCg2p$_$a$XI#~&-;cWh4^pxb|$!72x)Mx87YgwspDs0=iMT{RqT<+y6 z(eavIf`Co?8n;N>@VQdA_G2Q?*Amvqb-A*%{PmtG`&QWX7^Z@zLu+c7sMgFf6WQv$ zi<#$n-f}ExwXJB#3UQ;NDD*n?n)i~<;iD$FA?B1BG`)*5H?-t@E`gcO(cOov6$m#~ zX9puj$3xM_iQoioY(8Dj$Oyr1Cs9&h^Igksq=L_-`qI2qR9J1-qKzbHA558v^rdn+ zvvVQq?~1pVF4;gV%(l0J`mP@~&G05BRV7@|-wCh9_u>=*8fSL?o zt`!x#MCLtu1Hhz3vC#GWo9QQR!zQ8_YF}S0L_h(yGhP=v)OZ1+Z(FFmpeF;tdw5jW z6oGlZ&nS{aiX2cxrC?kB_v2yOhk*LNQbqwcy`=00xIvrW-fBtM;KqV!xrJ^donta5 z!zH*B@_OH?YR!x{j+*VjJGRzB>4w1*T5DVtp&t9o<8xWZXJt2ppg&XMtE>99D*d23 z{oJt+7$ASJz5#_Og~5S>MO$Kff|SewP)}a4pU+U9GO!&zkU5+ooHAth@ZD*HL@qFQ z2;*}al7~h}(@gvh0=m03HRF4Jk$<{w$Db=({9GUXfPo4f3v@>DFH8(9U3Vc#dEdmH zF-sI)Qa28; zXCfM@xE}}AGk$x1AH4T>_!c&@K)3Cr*q34h!Q<#5+_(UGzD)_wXbEM)q#d{_?p|W! z{menTidm}O>Pz($8J!S*A;*C_wTznl+P-p|%`1zN?rF&U5leAn0Y{i{v2};`9{D-YyRF zqQeV?Vf$8`f!hQU*W}wIgkuYYy=8lP!ewVJgIgw0;uL!GJ$_xc+j%`#jT(UbR(rFX%x7G` z-KoOVG14YkX|G-CfhB^%=Dup{FS_+M!LxZ7Zomtw*Li*4;^=$zf@~J$QZ@m1fOY}0 z>gm|dfX?JKyl>_J-4~~EtG!F|U$nZ}3pnowEW%XmdfnH{$VN7EGJriLx;iBum?$`) zX9t3vgCVuGhi;l$uwNpSHD6f~@@$PQ0Gtb;sqetFDF$=|+$v5r2qjLEp)@6y#jm!r7Xy z4c^0oLwZ)v`+|-yOobL5!(c!@B(WRyC)i4}#1}Ssv9*Eyb1wGZ^ykOYz+(+VLX709DSbfC^w7pLu~q4>u|qW+t%nP zlc%=AD*gDnynpZZ{Nv$m#HT%%Wjj;wwM&`=@Chrjd$Tz`xv!g&y;tc%VYQ3y4S~p2 zaLpz8oBP;Sv}sAId5JSr?XW^sBmWT3zs?z-kfEyb@N8fq6LVUU!))pDMrTXyLr~a1@<B zsrR`%!sFC-!=%=3gFid`7I zsTz=2{2l3K|Gc;Nxd=1pdI_9h!E4#^&C<0;X^*l3e~%};)j1BG;XjA&9_igPL*1w| zn?UT6B{}kL7;CJG`Iu>5N+94UlRa5zXP*HvXut$%_#R34eI_8b2m$?M=UU$FHQ$Gj zAG@|GNcnl150|}96`<2dcKZtTWBt8cYi~;EH{W{HWina29BjuMg2JoOnU}9D6WPo1 zdV6?0;K*ewm*S6YrBDgzUkUc@k`v3frb%@8+GF`et~;O^j{fp($A%c0DT`+uvgR5D zh7d3J-^LPy4Wh>()6dG}T$K^Y4<2fVmRw}@3l=*yDgY=PTilqEae^b6CwSBEm{-U}($xZ4}6&*Nsb-f(Z@?e>BXD-;U8;%YB6 z5(yuHkRl^pED%jRvmHyV>(_#X{?M+-)z*W!!}fMh7&#cwX-`^LP2-o^ zgUxFg?K`ZT=YQ`x5+X2%I6VhzvCWidwV@A+)B#Gyr&{`ATy%zXaa1`V|ih>9NxX?ogvfCrYteq4DpdX<~By4Jr|J} zeGuC%vBbG+$+zRW>4XoWKfG@dC#>~6Xghij>7~ncg1OXaY=BX{T-=%s9qg+tNj2{? z*a-pQ&-eFb?{hEG&F0yM>RxD^l!tiOCeex6^)W|Ttv;d0DO_Tom%-dyYni>=OK(pM zThd74#dJ3r=G0QdGNw{H)2{EhlFbwhY#w5;+D!Z`_MIGc-hi-$DC`D79Sm-E_Q}@`AQBGL84E3i za7@IWxngzIuOJ6xJ0HPa)786s$8;=~?-xynoq%JFP>`Bug@Pk+M;OXIvh*(Ddrqb- z6XWrfL~B$F8z>edOs)~JP8hozxbT(<)rJNXDddU7LUdN7x7idpECQ&Nd@m{vtwmff zo7Zc3j~hTrs>??k_T`HuLd*h1)x=-g(FTrtf6Jp?+j$16h}Zr_$+iOjDINBca2TVk zGG60A)Q{LuedtlDNqxE7TY={ycMrY`AM+;mE*&oBTs=8{3v4Yx_Q;{{~e;RaHusE)r*I&bJQWV(t; z`si@GO!UEMF$EF-w+%e%$QSYN;y}9KVGqWE!{xKPsY%W=H({JOnYa8{HHxsBk@@;2 zBY@f)VLBDfcNXe8cOxLei;6&>|O4O~!v?*;zF=K-{a{%sH< zb1xXQ>!rq*g0=ad0(n6#C=P{1f@sF~u#|z9lj=mz=15-<7WW<&`4xT~fS0W$% z$0r=60&hFh?l*@ryeN~#p-e)q6ZEzi-YLe9jlWERfr$ds^dlYj<_My)L~j<*V|?S@4q)|XJ!<*>TyO2zrh5h ztmJt0j}8gKxIh(Gg3xTa-$ljqd={wUM9#M{_tNWC!Ri`n;~6Z68X3*6`^s9IM#>rkYAjXZ(+lQ2y3q$A1N&lKK&RE zswSU6&d_X`S#zVFIPx#mwWN#!Oh8?emKy8vGTMUj8}3Iz`uglf?(WCc0HEhOilEQZt8J&Zu68ji_%Y zG^eh?1Qu(8AwJ$Y;2wI-KF6>0^G7vpJ18F0qPe5N3F0YVeMDCPCC@?#43~-X_T#?i z$#kEK9-*x<2l{&P^eEmK-SuT{*UjvBxbfErS@3K%hdH3Xl7?J@xHIxv&a|(D_YaBx zNP!z6zv6(8K%Y7HQ_Aa~N$+}Ax(Rzm#ZX)pELqa$5yalQZnMkFj+c4uFKI7t$?5WV zqf*#yiWo(}bAr^>=U8UC)Hwp290GQ**%&_4)?hr!U8I^UC%JBa?T@y$Tmd6n6rtKa zzl_?&lBrR^d)7uHlPkimfg~Y@IX-pyvzHhgv^}<~rDnFHnA0bgdaS$&R-4&ojqMdi zdR9MTBo-})eUJYB&W(@fMP}2_V7rY>?6N{aJ0opIRKvp;Lc`}!LNJ&zO=&4+qnlZ) z6p4d?VjWhVcBjqfXdc~NCKb*|bnI7{Nveujq}EDe8!pIgOv1oQbjJ9sYcGyRTda?J z)^6lh9ayoE>Ff!YFD}I8E2>FEsDRMD{868JmJlMw3DF$yP4Rb-A44_Ou(YEBPppN4 zq0vu27wO}Jg2(&)7FYjez_D}kD_1DN(CqDzXW*2gy7#!%ZNytnp-(Vh442uWCDwNl?rWc3llzVWb`jsY?FB>{umgXKo`H z)<;};7OF}_EmgbGjBx~s6M(JTI93>K&F23t8z1Cjd#v3xMNSH<>j(xBlIcZJ6R|c; zYgA{&;mu2e?Wzg`T|!0Z<8i6_ih^w{;Zs}f!)~sGcBnCbI3Q~NW7;{QnH=JpWG--p zu$)W*0ckzwrPvUTo@CZ|B`?B(h-52ZoZ~6ye|di1KYg4Th;{plhB7CRm>m%y&yGeA z1HoG4Lu+?k!Ch`5&o&Q?!)f$?3WenJ=vn7gn&{!4E^}TUTvv;o^Bps%4#9BCD4Q`G zoak5^{!cAH?!jVOs8SbT*#TJm*nX1GsT1<1*z}#a!QKx19gXNENpWkASGFC0^261O}*h45oBYW@( zM3f4m0NwFbxzfhwj*jv|Lz)`f9b-vzF7L9%#APuJeBo}=&t;{Vu#-Teh?6b{t&CN= z>iYa;yf$UaMkY>9+kw-7dY*w6aH95$=-UIh6ID-j(UfDQ3j<0r(#v&Nnb_sf>68UO zud8+iJ|}3GYBt>Ztjn=!{~9yvHKfou>4yshpF6@Od(_7T`YJ2q0;cl@ba>aH#JRGOOgN{&( zy2-a5DaSw%4c5|<_aB!*Lb%;8-M}~B&dYPfI&I=Wd)qJA2=6#@+p9l^a6hkPeYCSX zK`(^9uZyUi>!tRQ@VPgMJd@eCMcbZEt^1!tG&xDU&f|z_5XOep7%xk6O`7TvL#SO4>!>K)UYkMib%HfSKvT1w_HC%dB|kSZaNStI@D|)qAW)L+aSuT zxz5hN_^QxA?Ae%nX4-l)<&krl=zRHk#6Mby`6W9g+qU@HP{M;}gybs(>9jIKiH%C0 z>T~)BhlX(bLY+qLgUqxr3_BB=%<8q^wZ|hA`RiYYj&y5SUS=JYU0ny$fu$05G$Wh) zN4V&v=YQ;?F(THD*n!SEoEEN|1(BdMyF-6}W}b>^ z!kj-J+Du{F(RYYt%b^`ts8Hy79Dj;1Wv%fdDQl^j4e)Rmsmh)0Klkmsu6noLLZWnB z-^iOnKihP^JaI(px6j*V4xpa~=zTn|;OE>6oTbZ_gLS$bBveb%HQ&5qkIr2K z$pUNw1QtYvs`NsjseNr)#(|h#u^8kq_Q#lFV-qWHb-Q`$w>wj)G-OnAuT}&uxV9QP z!-!u~Z0M+1l~HSKaK-k${vAhGIwC+fh37E8c}oC-ch~czULV4g4{Krq>R`3UhtdT^ z=@M1oLNAu|1Jd4iU{a9Vr@p`q{PCIu+zG57W9N%;(+;q!#hsA6*l)eBQE`cLK{U-zxgTama>-K5o?o_2_qY?_PxPNR& z0hO$Oz6Dzk17ik_K27yw9}QKIUd-L7=?&DADl~~wpQY!9y7vLSZ#18-{fB8y0=?BB zuJ>WPTIf4h!6#Z@uNQ%>hv1A=Wcv%3j*-&oe#!~oHo)V9w7u7;%(fnAsnt$i|D{P| z>v*&<&d-+RQW&cbkbZM*EY29;_Z?ScOcK$7{2Cj&&mG$N5G4{GVGC;3X608p+Hq&d z>gXS$@pScWgPMRon#kg+Cq`a`CiTk9?p@aO&AH?$Hbahhl@;ye3-u?Qi4~;L5bHE^ zj?e&WjduR)^Y>d=^r7-gfyfQoCVg;IQK2PJh)4Rx8sy(SLEej#61jwhqe)4=q3OWE zd_$Uk9i$wFy8TyI6KrphMkhz4?>eNiZ+o;0uOsXAi2{xOHPQOxovZ&;cA5}A@H~|B zW5_m>qeh&>d=;}5xz-a4@xgIQ^`?}QX#s=YGcUQWjmWeinJVULheEwC64hsj^SgIbSwaxXOKYqL_et^EDsb|OXCfBZ8 z;*Qp(uR1y6*L{*E*Ryte_w_~|`?YIn;Zvfql+Ac#>7=yoC)^i%?MkGh`k77c_dbj4 z&!^Z&zXh3200^7;FEtNSi?N|$Q?;$;FFxAgSk31j1Ls`olz9dz6w3|u4sUP-M)fqM zWXwyIcr7_&m8xgI<`sYuQ(6uINRuszg6+X8StG~WCdfWj#j$cM5c1vz$VyluP+;(V zj_53Cqq1OC#ccC2a9uH-Vt;t&< zj>b(n)zz$J0p^@#>G3c>q`w=e&@j9)89ys*OzxHKltJHuf%W=&f zfL=RZ|88TP?DJKAldXsrMdun^Ng0@}l&CP> z7iEX=XaTVFIl#fQi)&wJ6@X2;B!|ocUp%_hS*HDi=Ov=nwE_Il@~b&9 z7c*Hg*Fv}FT+)ACwp5@6AS*v`1JXOkG8V$NOqec>V@Wm3MJ=2KtxbDsl6EGV8F}n* zg8b&5nP@G&{a@O#`cHGCNyvl|hW~N?qixW-`!NW@(G5HbWsCUP2^cQ;! z1$qemXX4RRs`!w6ky~J(PNRQZQRT>fYbFF_NY;5qqDDe?{*3yfs&bWkdg7_K&Op3t_)G7R&zVY^(WR@(k^{0#T|#U@}ZbwCSvs>2an zqXqzJN=`p-P*GJ|4t;U258n;{riR-mp(~-9Q}kR&{xgVa7kMf@RB$9z@D->4$NVVa_mDgde(o?Q@dfRA=$Y;oaa!Sw^z-4 zlsgrN2GlhY%akajANVtc#Q^RXmDg24I?kn|whs3t>qGg`4StH-Bln&stWeGXANr{d zRf8gV1)(nKE~M2dr7R-D_I0RRLMf#lV6WZNTBpHd!K3dZdmE#Hg{;1p0BklxwIzxb zqM*@wNY)kLVQD)r=d6qD{uC)CZ8!1In>+Ks@A(w)amm2!Q)x-l?rMD-NYi@@E=}aT zk(F2k>VpFGmxQdc#%d#KY)hGPgIUOrRYlnvp4_ZNa*%)TguyI{ z%R=iwK@&jsuJR<*kbxex5ac8EHiWisl0}FG+hiv(d%iyjxDcx$o`b@7O{mTh0E^-k zG*80%Rc+$uiiHklK z$v8vMh@f*;*aNr*rvF6z?o1b`wIAsizk<15hIoDvJA@Dty^1v6yRB^a)3zfk(EIin z_jc{EUR<@8uMb>{GO!IuEvQY>a=aqk_IuLvd#?9uD%kc>7ofc5ia1qBL^Tn-4)b}4!gyODu_gmA_ovj+AjWvd+za|eVmct!V8orQ8=%$F(ODl zi*axTb2KXXjzuxZoM2{Bh!5e|j0`LpRuH`qBB{}X3BT$ea^w2;=Rs|!!N?*L{+gpgmvD2NAw$1Qvi*dbzd(Ct?H0GH3tU3vS~+|{~Kz0|DZz}kl`n1|QP^Vjw)_(XS> z^T)d@iLAUX9(Oe!vOHer z(hnyJ9Up^%$5g6hp3Y)`OoS8cN`644yOJ7An1Wn+swO(pE6qB4Pz&v}9>C;Z1rdlY zU+iDtN+yc>7-loWoQe$AIzpW`dhqe=T$OI2jzif0dlf%q$+?EKHZ_erFE7l>5_*FY zGAzoSBs!$G*-`3uVAtAT17}2tJyMk{Z9+8 zf5Cz5Ce*88`Ua~!E56D^ux)U0y&7ZjkMBVN(rVn*djnu4!+cdCoiP{jIpomFMk7{& zPNI$i8e8}%t-kV!$*q3H+wHoF_=2x;821V5YUxM2u?k^J1@ouY%20o8eMt7ut@8DC zETUEF&D%4zhfZ)Z5nCpU9W)~_>dKMItjBcR#|j*3vY#&2WYpd^%|zaAy>hQ_KsDCC ztx@*WZf3jhQVU4COn|v}9gjIKz%aqx8PE5veHDMZZ=E^HCmYXJ$%kL%27_vfuOe~6 z&(iK$GoB-Uq+Ubtt$sSK^By*V6WOat**wz9EwoYv1eTM7>PlEB)P+#gLCM@ImJPak zJKv(P!M+?kpe*%i!MP@(ej$|ty+sm6#TlmQu+k3Q~e|K=kobg)oWsLUCBwn?EVy3W7+7pe!$~5Q~qHA+Ed_x$mzdrjE z(e*^w~lf_oM=GW^cK$wR!*&$$7I=g+R2@!ps3>pvfMpo2pR0S?=vqBYD z^z9C&DP5QU+U)NjkJ(s#?Bw>Kf2<+i3k9+E^+Ze%qBc2JXAM~~LZ!bSaCgy# z`XjISgomBj^RZIFUH0lKfiDlsHDuS{IeU|W=ASGOTE7IE>yDbIFovt3bckIMK)8n6 zaZTg9#ARs-$HsP=Cr2nDx0mOt)5)LIH71o3)i5Z}{1*TT*%1qHX$jJ9;?{4z2Jhwb z?{Kxhlfw(Gt%#U;jP<$cSJZvX==C0_VtLL>ttQP5pJTrZvftPMeV%3k1TI$Adp#=F zz0zURtUOYgFWScAs8_vep7z4@?|N`Q{A7Dy00v#lyCd0m8XPL`^WC7WP+NSwZyQzg@$rOD|W`f8y)P@vM+0drQ6QPpftEOo7r|0T#CIg+`&8{?1 zGch(@gvsahrcu!hoFQz{Az*RS8n`DnhfXd7?9Rh_rt=$%$PJ0w^{G)HFhtoMX%qAP zC!ROsB8n2-BPy)6Da!S!5L(`jkNh6%dOpXH`yfJtX5tWQmuLn4*J=+p znTjtZJ}teG$>^6VD;>hE=3Qs+nqi zPrf+g?7e%sZ8hhFsQr@WE~d(W1M|GTTmd4+{2uZlEK%g9+q!tQT@Qs`EUzaZ=G7&) zEP>JM0_eLS>%NUBVc$)k5*{1x3DwfiD0tC8LYLpu*`kXAqqi4?9tlE+Yj<86_HDav zao57njS8iH4bq&rFtu6H!P)hUb8x~dH&80Ae^&-g7ed(2%^XZXZu9&SRGFu_6rPepb%RQOtszSz7 z5SWm9qIY1I!5zGhRNmlK6hoJ#9u;ulL&DghBb9p~vhBC6MtuJRAL2bw;RZpC6tQ1& zRHnpI=TZ%2fTcU2et5@oMyE*bRb6f&;h2#LpJ2VBIna|VfwErw$B;2($b>ngcfa{h z_#_o=j|tC!de1!HP`nr&xiazJ2r}Ku{sewc?;N5N3mWvOV+Y?uNtAuTFvrxv{86KL z3sz>?(H~j<7fZax6%qNb$39!DH@gdwfr5O(+9`&?4lfQXCzBP@TcdAk)ium<4?`np zK5@YSqJlpRO@~edj&lpKMZawHOgT)9Lh{ePOYIiu7Sqi{M>XGg61q>B`NNcFk=gMx zueDlkb>C9CWo3~TFN*lQ!RGmF@_jz+kv7@9?|?^qiNb&CJ$Fk18}=9Fr-AWyQ?*KETEjNgrUlCHY$Px`n!i_8Ccrz4D5cx2S;sm?$7RUeK!{C@@hL z4H1cxrKQ311`gBtzrxOo0G#kX&SJ`6T6PS4on?Rn9H2dDdIc0e?`yaiA9a&K#EMXkLR! zhMpD+cZ|C=0tcg@1p1EFlQo@j%JD+R=0tRu_fd&k9Kkf6yWPMG+85a82 zSAnk*5@y@>^TD*2{FGd8W8TA+G`KQ27=*bNI$E3t^{NQ9*-hB$_&BJ7-pB5+vr+7V zx_gn+=Hl7|}mgt~(+@j10>^#D`)>$8XYG+TrHxAyf^1@e0U;@e}*oofTy9pA_L8 z4ZqPp$Srquv;J`Q`In)zRHYo~*{RfJ4@J~r2TjE&CyJJbMOjff%m>axe@IuAhd5do z6d-a8COo+2_C^#|OvfH@e}(bKEuG}wCzL595L>EaX>i7#E94y92CuBWv)5Z@Vd#Uv z$oW1Q9`6RXwVTxcAt$gjsx#-bcdqLP zc(pJCuGUhstS6oSVEEf+Yz%*5)BW;CZGYhC%v-%68+m3&8*9$3=dC2i@ zKPZbkt;S}?e>gabv5JOpb2vkRP_VS(GXJ6}h5NL%w16KK6oi`f!3Ywbr%g42*3?mF zq?A;LjpHVs=X(yuG*VVGeC8nILx}h=vBqU7CZybA@;AXxTm@aA+7h%XSE51Zsl{Bp zbU=Ej(Z=!W1yS+$;yx=0!{fa*!PNDGm^ceyL8(h~EnlYB9 zze#HFe+Y!E4sM2a)vJL<;yDb0(N2e_^^VB%#WZDsQ$aE~=s0){U9jU*6;uQCCTfZI z#bKcSH|;*WOiEs>Y(E417$aZa(3CMK_Uzg<@VJH>ehuEU{#~2sD%Dv>6wm2KP4*`& z0*d7lR-VKW9GYPMzQ1v7N>S)Pk|TDmR1l^(+IafbYq*TaPz15mc?oh?9e%mtaJK#O zJA?QmZLYA~JuF(DrVQzF@BajYXmB85;A?4FcPB8?^IGt^8M zsScXbn<0wM=*TfZP0~F{mo{BeIYUqVk3&qqz{mcz&sVkIp4m$c$Y;+F`;K;q?+%cTe*yu@_(RMyO2p%AnAD%1TRvWK@{ST+! z;R;Q9M=0IjAj6-~YzKrO$ZkDA4*#5}n=KaJW1>P}Bbr2!zW@3cKYzdBcZ^NGza0f7 zPM$=1_T^l(=R%2J8KylWqWX99{x?xkJ4@T^Z<&pyyWcr;CE)4HaQoFU&?YMr2W}CA z*cfA^SSJxqfkBU9myb^a>4c4Uv5&2Q*&DDGZ}JkW1^lE7l{S=&Piiki);4qL^Rr#A z>s8gG*ggJGK>OzobOa>E*=eD~zajk`lPRcRIk0_h9$XHAt*QRG?J49XRWFzY$D=2V zP}UwhO;eW7+t}KV!PT@(oVnH;t~;fUE}U8W&caJy(Dvh|3AOz8KcK?qcG4umU}e|I zISdY?-TvQvyci=RGdVF+C|@5`hS6ei?mEsZko;cjhH`i}z2{CHDC_%;%O$*(r50_7 zG<>iWm3y{a=<3==CpNleMZTMy8N;8u8l`p=N>7s%4i@pQy2vN_p8bKCGkeo56+KuL zJybnt`*Dj22&-PgBcj;K5!?hdq{DNc@mr?h-M^{0eh|N*u6LmfLq4en12q9~^_YM6 z6&&9PjunFVbARqcqAAdDD*#nsnM3CwUr_|S@n7K*P`=R-7Gt+XdBz$i{ZB1Gbe0}_ zL*-b;$hCuWhNkr@t3P?Mv7jcbwz0YZ@;&-oKq8^CIf2(R+^7a?rfHo$Yw&YF+_2U# zIt>E8$#*GFs2|9}A2I0y{1MarO^>sXipb%d+%+HpM&y32#NPBXSjedUegxs@Nh+)b za_130RWZYhndwmZ-KtBf#oF?lT*II5{coE^bm}aw2v5VSa6!!eHKd8Zdg~{KGn`4^ z(kg{P4bCDToy%KpX)_X_@vn=+wy~XFTcv<4uL_a(8oKRI=;@?N2kF5}-Ik$fuzMXU zMn*=+RK$9O^aRz`QBx%i&HY&>Zq_k&RLLb+QS+K-4ZRJ{qLq_$9PmxXesI>O+Ixo= zE1aS#3Wz_p$P?|eJqyX!<%#lJiN7||W@U-)yiiIyW1Y4vF+yZ?Em#r)>S(3KO=`vd zq!G!W(U-&`ZN{;?V!%cIA&?B!%;K8N*Cq+j$@C{Rk2j3fSyEl%`2nZd7d#z62Z5YJ z@jATm{1w3}HYh+XX1ao@3AN=848F$!g@7?7X(~^lPXn4rZY(>Ja4F{Qk1{+*HP$r( zvT9Kx|A7vLsW3&@F`^NEsE2FtpuHT!-@d%LeLcHq4{a$Ap^Ze+pQ(C%vbc{SRSd-nOagE z$*qp`{}%vjK$O4B5x6miZbf(&(AQcJ<=E754%vE9t|aBx7st!LeY*>P<%{h`FSi{K zX#xGVGZw)Ye%`ASM65wY4o*RhJLN0r94+aAm4KryhBCR#4zF8Ta z9A0{jV>ma@9c0-wxUwI`ZwGMxLmjs)D!jPi|23~3QhKs<$Ifi3g{rT|u?IT-o$eFw z5lhir2|WythI2`-*jLa=OXznHz%d7ojX<5ztnrDufe8jyZD}=inv3}k2ZsW z=C5TO!wziXR0ZG@hst82euNfeK2F%i({#{V#ipZoqeqA|);>2z{T^P{xbXoQx&V8) zPDMZKd98K2)p__hWu=!sHdX=@)gibKU|~3b3HAU$P)Fu28w@e1OI3q}<#EnUCmyB| zc&Y3!IvK&iGr~139VDQ&UXomtJf>md@oeHg{mk6CV;!pH^;rr&P|yPK-vXfPLB;WG zCJW-w$TfxL^G(pVfNv(unn417UW0xj!4Q15V_cQ5`oQ-teeZdfZCk$WEv1Lv6}5nV z8yoXye(-zC^^V3T!sQjD++GO0K)J+^WiX0gG*EUzN%sm34 zy&ucw!<4UKX9G}!duda&ns3#7gPy@Ct!vMd=38v3lz>x{{YT`xktcEuFQvBCip*Pe zCIlie=e|4|!`{IP<=nB^4Lt|kV1U%zr2u_MfnYU-cLeM+NeW%cgvTEAHGn-p`_{;% zZN5XFgqSnOCP7#N*Tv0c!~v&gNJ~0{a}=M;7)mniIXr;Igt8AqEkI(06gBW}MjpiJ zGN+ZijI0n9jQnIUapgr9UwP@Pf8(-k*blz_x)m+Z0{X3J{N|}2^|}w-{!R~i%-{CA z{fBvgL|L&iR}CTKVnWJwQQa;tFF~H=wLGyh3*l?BX_pG%aQ|`vbCK()GMd4V!P*jz zxC}*QIu|h6+FMl@>tdw=Vs#E;n^gr}ZWO|u-muIFRmok4>T@6_j{j<5bUmM8-Abak z?P**n^_oNeJQ55ty{(Op_aXUitN|ZpP%e!qobJaZBq&f*2TL6i&2MXHzxG{HB3NFA zAU?^+5ugS#=&X<N4xwP7a-iHjDBF|L7K%M54r9r08{s( z3Hs5;v%qfvpt+KS31t6Z*mam(HLv0TPh;cYwO>scodq5fnvRuOjvCtRTUmj9E6XsR zOrXG?bq+;!yo(wY&FQ8m(hLXt9Q1txb7>0GE`?5LN2FkCo!x{t?puDUB1_wS0ia*l3te{KYWY%+lr zWQ{h=8`zr+FGUrxNl6ZQoJle4voUHk40Ay68^Lwc8xDqc}&jLG? z5<6Wwtm8mxV8Dhg4!Wp5PD_~Sc<3VwPjFW(StvJi z=r}r2+UnFahG~R&?R%p;#h}fNZMbutwsPf;cJe!qqSR;`Yc^MhKsnc7$_?DEyHz?+ z4W_>8Gx|t08GYj+ZPv2KVO;ezQ%pl21G+W#c8aoq#lZmft}MY4?o*E)07((g%w6;B ziia#*M5ogcW1me^=ppC^L7RFo<^fPJ4iAGoOyUeOo@ysOwo#1632VoYd}s@_mK}cF z0@grfx)v*jYg9foLA~ZAnE?xj<@r)3MK$!JZ|@u~{J}+EdHcuPMl?TeTyB}aw}5`j z*!3qm>cd|4?!#{X@F%=+!_?H%edVySCe+a?E4R#9^XJ$s8`*i8V~fxjb`HxTH5U;z zdx;x@I4JX3a02EEDzucygC5U)69Bz&oeJ8dK$n)Z3>9*1Qrg8G?ohohAl~&bodR@7 z&=y;_a_u``n-#ZN0M~1`uSI3L!iw&7&a^OsAD4txqYR405wUSM$|VdgRRSjEVYfcz zsEI7V)U8Z}O$CbEG7hWjPHWh@m28FQ=bSBlky9X9RnxLIbn^@P02Mb13)h@~6IYu} zN$7NTL6>vW*hFWEY{D(=81%7)t;1HfDJ6ZdzCyG3{9fZpg+W)(uZdpv_a-1oEn00A zve&!T@)W!ZHQ}1i8jAt>^RdKQMqUp~6@nEE#uM1Hya0=X6_^yl+7Z@Gemyu`czWp( z(DxqZ(hkg|9RXdrlyGjI7xYzc4j?Z|W86UWHN&od=HId1Y*%-N3&O}XnE5J8SXtH>$qU?`K3*)=`kO!ON4JdU%^ZVV6N++ zpLonI#HfRUzm$51?sDoF$c0hqo&uW;L38hNIximM0ujd#U@Gwh>{CffJGPOd#uHE^i0niuUK*bw3f`JG zLnknMx1+v>76=b8_W8=F3;+Lx-@N2i z=U=uBw{E^E-p5V7i}rmtVu2RWZ^h|x#`E7cd+g(${<2Ney%%+SI?bTUUcGJ_5}3I( ziBZr(VcXKuB2)+!@F#TJtCri~>1zz%YftxPm!Z zWWrI^Zuc6OHoUY;8v_lgv*|l;y~?li_Y!x1!~d|S0B*}FVlU1E3qz%jX$;K-1GIBn z+(ZU{=1oXYgoxic{7yT;$=ss9Bdm*d12=Y|*JyV(1oaernu1GG@QHxEqdPVGz}ccJ zv-BKrxi{OO5eTjEu+~x?Td{3n*Z0Pi0HthFh*N{>bNyu%S#mLJ5bYyS{=AoeDN~aZ?NJ z(iR1Cv1v-w2H>%*Go#RCS-HMP#bbK@ASRYY+J-;J3Y+<415#=4tcpmaz>m>m^IsnKVsSK-= zhRtEpv4LXz~r`!0v@X>d#(LJbUTeB92)M$R`pO?93dBLn7fGdQUCu79naTJci~ z_qm^Z4*QpvVE@tr3~|4EWb7oA6L8n>v_m0-J)%42=kXtEKsNSzu(>+}(``=YzP@2tyPvD_^WHZ7pv@-|*|hT|Tzb?UU2yzvEF4m<1*JHE5QvgMd7 zXLdw8cQr(D$jX-%7NF9wt}fE_ylI{kS-FF%oCROa#ZY(vVSZ?>D!c~hHswZQod!!+ zahZ7T0Zi$rJgsndvbnT^O+61i?2{fgl9A48Vj2CccD-XK!Ir1R4QRAh*XGHUq1efc zrDo-D4EeqR6iXv!MJu-uA0t-1b!J)9QE0%2ht=?H6vQowq1_+!R2iCDwd<;V2|GH5MzJ^VI65JRCo2aDF?RKG;bfDYmK`-q=lJ+6-4DyaZ zo(nYj%Yun*ORDqAgi#cc*IdQS1l4;rc*HN64;pk2TfWNG;C8R`gJsyaI1j_gh{Ep} z3BfkAp=nKE?6R$Gh0as~<6;73nZs6{@rsfR71@xQ1Bs zn5Oqs*N%;Gl9Wo{8ubh}fgs0u6viQh3mShj>5(u5bS-g%7;*u?^HAUEth0KjJm>#DcW(1xf0`zpO`&|tFhmabGLz-< zG+{+@tphB%8ID4TI6?q#`AN$G?&FO)bC}~s76HilAQqtG!*4*l1|q99J)wkd4Hkib zHJy~OrO&N3G4P7ddcCAfmHUw~5*X62M%7O_W$Auq(gVDF2%}ff#B0GC`{fbj^D9s- zPaw%8vLOH-cV`p9lIH$}9rISP1(cHslEo)O67 z>ohJZz7yb6(Pfx3s#OqGzQh!G1SBQ_ zUS|qA=@g_%4_tx(uVH${_a^8DDqVkan|MSw5hENrvxR_%oVxWP^nivV)86bnBbl+! zFE7Eqg?TD@qj`d5Zy1u7vXW zI>G65$ zt06!CF)|Pr7s<^FxnWLKFMI2_5;pY#Hl)~TtG;fklR{u8i$DPRkn2|PHu-3|=)lTV z+$P6IW)I^MvgH-X=CSchPGR-f_dbF;-7Dof`P$eq;T5sUGZMEUBgdZXloOYKZ0p!J zAAi<}Lo6*6?j6{96fg!5ma)+M`D)}i zFH6XZ0!H}+hQ*lj#K_(WoH2)vId!cDkn+fI&aioo#v6Ek;u(UXn^?LuVN+R|qymZp zqXrq|Rfg;h($qu0*N55OEKK!gV5&O{-Odc8NuSs|&tI7U z!!SCJ!cx%$c%5Yt)KwHnkDRYykW3aPuKcSDuKcGr{J|$*zwmQhdJmaXwSfNf8tOC7 zNYDM9_iUZnxap0~_l_kdC>us_s8{lm#8R2nDVWpW(b28|key@hoY|r_1QAgcE+!@B z%xA&FMv`AyW*#4D=|!$Aw-MS?hu&zd*(s2R+17e9rZf1@bt>50bJXq4Zt-fJ2m*Bz z?F_;*Q3Kl?FV(l}CNqJZGxC!of+m<`k{=%cj74ECIc)|)Tf-mQ)M_pmcc(!Xo{bR1 z(GkEcOQRT$!Cp7T(NH}*1;osSVQZ9w8M$HIA>__?hWwNFERXG64KxRVQw``fj4y(; z0JZ|`Y>z0ui$8G`gT90@g&2&4=80pL1#NJ$l8s`2o7xD|{W<8S zGvIN5v?{s`fqdH)Yz=T0S%3X0H<+(JX?Q~&ANe$PA9$%7N1z^0MzD8&FDx!E0*2-B zuIT=>IgPS*(;gW^^~m(G!3}n>L(5?fd~<&aHuq*=Hj!Mrro6&EapaB1GWIOsynWqi zquIS0Uf44WJQSfSj%Q6vJoba5yY|JGM+QMhmB?9L}CAV^~Nhj~w19py8}tB&b5H%p>mJzOIQ#By(z}cHR%38e@L<-c9pG>wX4SF2 z2lL@2EbQM0B{nRPU7A98kk(3kxN-5@EW3usO+u87GFZ#9ZXV`ZE`6*wl3}mqsObY>*Mv>(NorT(hoE5;|AfZc5Z_c$=0AO^uFn$QD*0TNqFmHwIQ~ zPj&{>iHUi0JOm2d3dkupj-_U}`x$;79UacKD>K(nH%Aqs>RZ7qq)a60K+RgTFTIA+ zMQEn)jexFD&Z>7}!MeGMe3tJ?OWC;ON;9O?Y^M>P4|7Y>5dj0jlg^*PP%?u(?@UG_ zN>s@g1%>2S#@GXW8AjQJt^|R$lXQ4~suDg#3Svvtpt#nE3)3|5DP+PCdsR6YipWY5 z?;+3)iy{3R7h~{A0@M8|n3k@ts&UX~Mp;I#|au^pFt-$$<4!nbzP6syk zXJJ!!8oE@_C~gt5e+jik>&54XF+HpXth_gus%wh^dtHZNBk0yp`g5S=9LX}^ZU%tQ zNhN`DW~))4eI4{E`iT0ecJH6)dU9F5LU7k7*}KP$S}K8Fw@@vn`RG#*=YuMQfP$E zF$zp_Plma&2cf`pBgoR8=v5Wx?^d!BR1(3e&gVc+~d7~}jZxrSZ4&sney z)oa+opekWhjES+c4OlbMO^~(E!eQMRn8FGH7AwfLh)zaRDglEPYHd^`E^u11iqAUr zj`t~-DC%3xari`Q0D5r68jejck7+!##vG&>-~lE{o{zibzg_g55B=78AAe1|4eQN> zLoJ}+OolwrVNUt8f7p29y&m?)4gLPFB`)biVO7jIYLk@EJVu08C~jf!z>seV`}gmM zGDk6vtR_*=4pr5G)Ey4a_32VVO|{LRvkP6@SVdPW_Tc3%Ohio?LTK2bz1Mw3Kt78t zTAS@%6%6G#fhEhyG?Y)TOPgATuNV^NP&YCtW8|t@mol>O zd8zF$F*H9xAkQP{>vpELWX+VJg(yV8J&B@(w1I}sHN_x6EA`sE>5YxLFtE`$hnzP9 zb3Ftf886j~n_bdE?p)ZpYQJcnP^zY>Tvv9i4uWA%^kb0x$DE1+y(!DW)~KV&2ms7 z`T2eHFE26*!-wARn&Y-2HetM&ept!JFrm=Bwgm=?(9QMwa0I3xI(-(H%GKD4miTH! zXSHO2foQbgy08XIxIMh^FH~?Yi{AC_>ee!3+T7tFk^Yzsekx4ubA%lf4Ad0J_bB1$N?aN^v! z91GRmlQHC)9~TB+3*!rmQwDFtA+Nf4mQmm0h>1-0lf}x2aK#;7`d`^ycgrB#v3;*G&~T}|Gg%_ zQ=n@unK2r`m0N79(P#*J_wIz1jcW*v8}+sc`XDh?1p(Vhp7!SG4_NQJKIirc(RI&s}; z1_GVd5nL(6u7ECJi1nltZWrGdz4GP7c^HodB*xOkiimpY!TZC(d(+Z2K0cauW3XIH z?QWm_0ICADjc_|Qh{0Srv2y7|sw|f7&oFXg071DPoe0Z%`7u|gg$F_>BpxeY9>H+; zBETSnG%)8FQjf>CDFn1F0{H~8@enHNbB~{q+_(*;)B3Ah$7=mJo(P$^r+n!A$|8Z+ zT(=8bW@f47CR&HOrXeep#wwwsnl6%(H|Mbx0bCHnMcEpIcEnc#H5q#rvM~r?Z8u+6 z6zs8Bt8T-%l*TLK&^}$Qg!}o5v;rdTb8VIbRX_^!)GQt$9Bu_`1uQMk!~Q+H zAk)S)!C8*pg*vlj9cdJV&dN$Qrba=54^uT;3B4p`N=I=303ZNKL_t)6!>2aD=H9HR z<0Tqjqu5cSpq@dSn0h*97!`-STZ%xQFODEBSm+k?1zK`O zZApbdN?HOJyCR!FHX2e-bymXC zjy?+Rb?hBUeT-nPVP)!!rtm0v$eQ}Rrec>oy1d5WXDQDU*3J0^WTxy;@V^2oX={gF z*}~tAQ=+!hG)52&io}j}RFVq7&3Y;Zb_6>Q9THFCo!Fp1BS>_;LW-Kh6f&Kp{R-_P zjvWaL7>-w9@8W(K4976lnTBbsF~^p$)J9fw{+e2;SJBgN2EVobo31|mNu58lY+*jO z%wTc62=l{57{C|+H%#eof+IH_0~@9>a)q%ZaUW$q^O!fk)>sa$?oJilCY)bS-+@?64!yl?5ypV;JTWYWo|wu2d+XGkI8V1`h9U zgucg3T}_Z(qbh-EtLq%x138bef!qu}AIjKiuF9~-cSaTSbJn1N1uRDh@&pf}huEoWvCvs$PC3XRX; zwPUxpO+A2F%CoI*2OIBAmdrKs>9kNa*}7SzX%gaMk{2-CyGY@6YzTwfs`4VGC4GjS z27uk}>2hT^<E?k&nr6>U@&+$78DK%WLJW6L&$lX)e7jyZzkqCpjcL?x!UnzJ5e+*q~ zwLL21Bc`m*+lZa3yo7N+f_+Q-U~#YnUEhPb9!55Ja~D$c<9T)NoAN4}ha9VC2bDHX zStE)g6N=p;j__rIY*CIln3lzs8El z*Rc8z1{!P20ljYDPGRo?R#p~Z-|n4|O|Xru?7J?kIzEpImZFEKO41E1=3^M+7O(2O z>ZUR!N1hPakC@s3)7YGc4q-O$2^S=6S}{7{vPLfyw-CcHj@4{`wEk9eMIEzJGdZ z_R&}yqzZL5v@k*05|MK1VNNr6b#XDK=Si4lRl(BYJWP;vQqO4RwSDL&M}ZUep^gHc zg}7B+yd3k>2DI&GB132N#p|9y1v}Q23y`x@U{eS3vqlCqENTUImPN}tr+Hsqz=3+A zPZozT+_eBOD(ZQ16}uUc9F~?T^M*2q$xu}5l<(FOvkKVt4cU}!$x@IeeVS)AAU4+ORm~wc8~S-DfE1Y9IjYrud5f27xz`C z=Ag2v3RZe^2@`|1E^P5T%?(=g^)&+s(rZBCB@$^7cwtW{2q!Vspm<0jZ~T{d>Q2^4 zvB3xff82D1^#=&@3iRX%D9Be`018`Udsb=Ds&S6Mycl@H0#CMfP!*i--nX&`7M2&G zTct4DpM|dP)I;$aL6DAh1`PtJ%cB!8GGKl)FDniJ+GJD=Vb5?sEaZz&xQe>b9k%&c z*u3FbNPUl;G3=%&(JOU)8c1vs?=ksYaMa8un8FQmbXwWLkvmdswgGdkG|)?@ z`>eQpmYi6Y&dCi~C^wAV%msD0^z>?~I9V+Celrd+=FRW;+PA)PdTQpS-ls`uGpf6A2{=*MR&_}N7`VV7yF##tU=9F94*U1* zCNUDVbtQ(;g>HHzI6uV;QUkm-bSLY5Jx{IgHR1X2z{w97_TMOV<(RuxywUU2LiT32 zG8K7g8J<4dA#xx&VTL2ldso982D=s@Um8JDAlM+|P~ltb%*OY``EkCE67p;edR0I@g`qBh ze&;4ISZ0Q*<}~rp?Ir~F_%o(?@TS=!!tfF3OU<=+z*X3T90g}6dc&|i#cTj7n$a;IV=tqVBf-C=t2i(`!m#YTp4@F_S5qrW5QlejT`H>r_sLQE&N0HOtjel zWA9C%EX%Iy!2RBTe~vjKGcqGGv$AHXN&}*V3`hc50vTh(U|S1Tw+$F%A<&WlBTqD# zvfFLrZj9C4w!1Mlf)-K>3M>R@1c6$@Mn(e?l1inTbIy#6jOoW8-_+|&_uls-vPwg# zTdJziN<~z}|L?zd@4086VV`qG#R%KOYuFp@fm+wZ%?6ehPhe?g4UJk`o7EhEo+`dq zYOnRRVYEWF@enIoUh6$}mH9GfBYk`G3UaPm5dxg!)K|`?H}dFe)Maiv8(_#~ad!5N zlM``GKk1LF^;}7lZZ~gGeU;nlTpFkD;q`%bDfc}JS@!j!v{mzg6 z-BzRd#;De4xqPaI$UGoX)s6SJLdJDnM~WKQkylBcd5^;FI;OEG6EtcoNaA^4ej5V1 zvb@6(o^uw0lgFO+A-ms-sjeL8Xn0xxFDRo4bf~;tL)#$`1BY<8{KJor|fb-X`;(;p{ac=V} zb_RX2hkRk2daC4g+;n6GFTLXqoSt7nLe39)`5L~EQbK_l@_4oVxhP-vjN&m#4{q_) zZPCOq2pqi-gBbYj^$K6E`=2LHhCn?H?j~0v##(o;O@}1X63SW#^76UD;{fVOjAk?8 zfAll`PKb`WkL=MJ9gxf?0d&g2qmZ1u0KA6jl}%=3GA7aGC3gFJ*xubmqpYFZ>c}t= z8{EV7>}FC}^BZrlR!CM(sHcQD1a%87MYp!6Jq_re?@B$+>%QYR z&%L10YQ3Z0=o~Y@g1#GQN~pS!R+_BfeYjonyD}|F>eS^h(#!UDw=o{{Ib>WE5o*a2 z>dA_OxWmHcwy74zI{@ekGERMQPP4>JQev@ADq0A3>SQrLtHM}!A@)GoyEdTSt`GC( z0z?wZ&w4}juMm4ZM~$JulvgmtEC5U%fy%3qvsX@F9%ng+$a#1u&15Nao?(6N+7&#! zaS0ckC7 z5;$|XoyTm7*UtR%ns2xnvihYo%X{tm@va=&a-r2jYUCpCxp}~sI{A6hvTap_NFZ8kwzLEoiK)i{{teadZG4AcVIbE2ow)ahMITHN1+QbPp+c z?DZCoES|*D>>3)0dhD)0x<@B5$_$pPf%=eKz%M&Qt5yMBUqCa~^AtN<8|V?~wV**{ zTE${y$teSxR>scth{n671B{BiT0^fmO#S3Djb0t;%;0Eejy-nT6OJRPch1tQhuy<@ z)$b1VjN0oA==FdRU*#G2YJtGkag+rXQYS|iTrtfl=P#}0#RS>=fBDnD{hFWrlb?V1 z2~yQh>dQP0=ug1*zU1z=FD!h`i+-!oY`@IPkU~#N#8f)Jaj4yS)D~KfSZQ)j-2|OA zUy0q#4HW4_y1B)(Xf}?ajK~|(L!hT61Z}g5UFbOokMX^z?lZeMp@Ay(2s6~WRU*cs zqtxLHnd%kRdf-JE%i0}D=e^oWlqe@TMjLzF>8+L#3`kzvh;QBi@>~M}SSgdrMnmM| zk$B`(V~z~l!ye9TT*8Bw&*S3GHU`v(+(i}@XhYpZ-UVv7{n!d#a>t!G)|o?{2Ho(S zcJXMf)Xc)|63w;V>)tb`QZk!lmSq|8oD_1&14k${DZK=2(20fOMUhpF9gAiJo|)_Q zKP{j>%j}$u`_&`ZZ!1&=}NaBSE{Jpw(3Vfa85=xnL-R zQj9GC&-LI;ToBKlNp?XFHjl7B7-4sJghtumT6Sty6Y;vqiu?PvQxxVO0`=t(CwS6| zc2h{@j8=(ZKEU>16FccHCS+*WJ6K*khNby+G?N);oLF}`J5zEv!aeb2a8(Gb?wj>9 zaMc6u-ejQ5u(yltjf>2PXA4>npRIs24U#=_hB_ItD6o@_u%D;Mbx)l^q34%uS_;+I zBj8A9mdSI(Vz-orbeohsz3h+bA$^2ERQPYAKFqL_F}X|<4F(3O7IDjEk857OCyaWd z$r+#gE72%pu9;pJu;54qiPC=wBkB(>T;y|L%YK*=}p*AI4FQ z(oC-4M~z@1RmBmrwnLA|7N5Ky?h408MTUdWkCc1d*}Otcwh={5G@5IOwG-U+0o{9W zP6Zy4V>f@bRV%U7h|sbSyQJWJnB94Nrc87ohn`FWa4|*{sLZ=i1~c9NWOsrL(xWwTVGGCSS`H?btdp zz&Y(EWW$Aa3opFo7CiUF4NP*A0XQ~$UCIRwN>s17@H=-dD`X5N^*c|ql&5MDn6{ES zI;|$x2>WrW-i!9-bC&K6KwL?8judAlKOuGnC{hJy*`O+*o2vF9WHa8T>;6sgPG6Ii zxbCNXbip!8pia-(YSn}s$RtF|ry3CWS}&L9WzSu}-Nhx?XcZ5>-ydUtH$wv*v>I(R zXh;b$<2gm+OXw`Jb+D`3)Iko&Srr5hkcB{OkoK`Tyoz1+*bCHYwCTbLEX|%ktJV>& zfV=c`4ZE(A%9zCnDqe2In7p346|X#-46t?O0w#TFMq?=*GsrAm-GiV)XvaKf*;HcvtvDQ~-=CRo6qM^|hi*#|5o3Qr1vaIsF?)s`5?70&f*=ojE z)h6&(WzaI$qrI9-N|2Q26|0wwx=B4R#!2>j|KT&g^W$&$qyOp5m#DIz)Ng+p(7&|p zjlSbI&wY2JGxMe>Zq7@+G`A$t%(AzEDV!cQLh*;RWacq(h{ZdXP%Qz`u;0gEZyRM< zL$kGtT5aCffIB7XAArGCS?F@e)RsO#wi1;})6o_Z39&O5Pn-qknVUCYhJh#&KNZeD zgMZEtFvvH}Cld@ddYEiWO*wnz>LL2?)@Z~xjo}mn%{CuTFqzO4uzj4nb^#AvI)n4q zHZ+`W(BSAq3Pbh~691(8Zp01Tc5DSNy6sl1w&!&QxENYo{$+jA8DNCPPO6KBm5>sg zq$$RvFpHeAgxz>8v@242-muO)I?M4R)k-8XEwVch+L(Io%ciEdjkEz*0$ffXej=^LP zn}ciE%lDDRG3w1OmgkQ%d9Fp>=NR~GWe#a4>s`+S4t(W=y88<5K_gwfRw;$xFJrL1 zg^1eR2D8ztZIUh0XZu}ZQkJ-ujxi{ueXQ)Q3WGDAz+8q&k)vI&;rPq~7MdM!6}tjI z--ml1?QB=6#}776e>7qpog?ZI&kl;UxIJXKf|U#mrckntcO(0rCTTvdmv8^&PyEi` z`>78;-TVD|u=O;ce+hv8ynpeVN7kSD&A-=ZbpDdm*J?<;qEw}MjD!$FuS~&_>dtEf zed3*yM`|Mx_qMNLJQ|}>UqrKUG+?y`Vf)~0RRP@;wGWLMz*C5Qz7EV1`N`fdwuA?B zHx|?z*H*&ikDVw~W`hR-JpMZ=jh!L-n|r{paJh0B0^@V#Y=f(pE>!^%BFM88d&7NP z-nxVbEDS1xc5aT#GjcXAMbtWk%kG65dy$8w}SgBRR=Ud2-nL*rriU7k0@i;#?G;-j6^C6EMZLNrt6|X3FzLr=#j|K79VAgrW(Xe& z>=ifokQ03v@Q3z*q$_BAD|MdR9ACwtq(FR(MvH)bjdScx^4N=-cFPM9&L1MT1MXLW zimiZo5GttLF{PI>^!K*VyLuUAHs&+oSOxkvwZ%lIxaof2^Rb<$*vl#25W2~p2``+J zg4@fI!8+e+V0~s0vvuMS1f!T){DRJRhoD8(lqUX&1j{+UPEHJm=7To|23fdkW}8*> z@Tz;1&oWN(bdun0|L3RP_7DES2mY7KUxMm>(!TX+K>s4Q_Vi1Buyxz3f9~gI<`#b{ zijul@RPv-LIcV1O!vIfon&r+V)Xo#D*a(nuj7+G?3+!IoL{T=;ZLf13FdcxfS(o`J z;@PWLHVyC=;M684^{C*XD$HUx5LPgkiET!z5~b}z>4Ep}Dui4v*uYg3XFd|IJlh?i zR>&X~dOptDxh5&ThF#{0i}J|J2{$FV|NMja+_{Iaxx2+y?wOePp*8GA20(laNoe9T4_t=5sb1+2`_ zw67)>XM~|`3d^(AIXs|Ceq0Tx1HfwrRn;Yu!(AQ5 z;}xd;RRzYSNz`Dd+{5%C5!n_(oZXB>r&`Sfvz<2D%|x2qXbrWzF0dZ;Kiw6=KXFtg zMxI9)^$TR9I@*{)J!v715>G%lcw5150_1qyGwy_*J=2ux=f|7a9`9lj<=mjA*_y%1 z!U-&P*HMp}lF3$&mM0(TLYQM~5tm9ySm=Oyq1B({9%LuQxStI6uzUF;^6@|nT|2J^ z>Ta%q%7uljBcM+q_%y|Ybcy9eTu56g+Zot%ssNy_iUp3&%wV;%h$b0Nc0TL@7}yUJ zir~!IljvU3+2A(TN-GV)<^Y)M*|6A>7^fe1d^vXgUh5xZr$wLjja6d-+)Y=R>uD2dzrL z-@mc*Lx9onT3%qhJwX5J9-=ho5-`fKGLWh=VsNwG_0B^rk!2HH*uISW&U_9JU3?h( zRAy$Dy(2swMnLkQVm>M`X`mutt)c(v5=GXt0l`nn z39=S}LFF3qh@v&9_1=$Hf8H=u!z2js8rjk1;tfPy2wsHUKHq-k&vgB9EO+T60ru%m z=5*ieqbst=;p37c7@aN|qYVzv`!0pmRwk9>XU)d>1GQYOjFF`=#`{F7Y@!*@qF!%E zUOmi{+j|&^3>2>mAycP5%wNgp(&dN|e|5Bh{j7(aH#$bUy@2I~8!_8mK^-)gT`iLe zLYeJi#^;ok9e#S{eFlzZ?Gz{`1MFVDgb9yLmP6|Gj5T@k&q+U-F*!zoYv}|7u31+i zo?%$ z<)c_^H89t02{`FKTJD?IO_h!qMQXq}K=%xaqT7$2i*;Z4c~# znD2io1kcwH<}#;6RP#zcS^--DDZGx8Gs8s{FOxYoKAnLX?2WZ?wdaWnZXMd~G%?$4 zaswOj*v0hn9{VAwaCg~=db+a5o=qZ*`_v-1jaJe{lGI(BSOL~B46ZltfL=k;q{|-0 zJW$)e;APZLp2F~ZlWlB{HZdtvYW@h+5_D#cU}gRW%r+MgGkZULBORL%WTz!Ll-j^t zQvQK|bS;HUC+JZKTIht&`(EeZY4wcEIJ{TS{zvWDe$7c-O}rVz4uH$mEffzbBFfwh6F z2Q8md_C}Iphx5zqS>-)qTm-68bD0_}Rs2$5rbv(D14!LG^8%dQgn4)Md{wEs^0_by z;=K674~H`x)EMwrpXPSxb3_H2NsR8S06PyPa_~rHxJ9PA7Z#vme?BF_$Y=eyDw7gZ(YTJs$TL`y>$=ZQad2`E305U4auYJ z7lp9kd179;Vsp9dk(P+)Od-h#=XRTG`Vo8xA~f9zU8mI%drQ)Kz;sXd->CV{sr#n z3xDaOFPdAu@i&@DbIrib1&*u)tCZZh5#db5n2O-4TmpQGxofAhvdo3mo#n`=oH?Hb z(DLP)N<=ct+IdUvRC(|d&sv(rEF{1j)t6gzpa2u$(wt|ZFcFLml8{^zmXet_YI#B( ztU)I^9gtVvL(v~2$~9LWX`>he1&d}zIray8ICJS?JaFzo2J{hGEmN2+#`<-DoS*Bk zzfFlTD^{sAFa>X&-{jI3x|C0n_LtP!wT@>VJB~Zo*Re`KUZ;>TF?M}uGtwEc-b=UO zxn9?lnf4Ko{nC&Ef0q&^R@piZlXIB>8#UuR!?-BWr<{J8Vwk4rQ>6g?qwabcMHfmQ ztC#~I)%6cokoH#5%-#P%rzUBYc=`%Y@?2DQb&{8y&88xm8fT?TL(K2kKr*f zK=AVD*k zMZ=irF1e$NGc7J=NH}}x@#INH#`5k)1$x;YHv3mF#E9$V5!Fzycd$6Oj>Xw^)Tte_ z^@tDaxepjH?%@wWy4;%Gpnhi^0GG`G03ZNKL_t*RGs9?i3%x6sfNbnuMJsN@Zp;|; zlCOOn5MfB;fb$7PL9X5}gBg#+%OxY2=H3%Qbb^^ig0F-UKNolQwqNqaaj)X(PyuWwtncgH~+OidpvXL3sm)Al`nr9 z(7%9fJN?~1v2e@Z`p0kTG&|oJN5prw@Tz)M8uDXSyMllv76N*AkUfBF)CQeC;A0KKCFlTseo{V2``Hxi5e6J$f9b zV?%}LvUbx)-;1*k{fXBie+l!ec83w_afuTP3%Kj#4LC8gqzv{3+6}5H*Jy=#HLin~ zC??Kivo~hd3HqI@6*Tg~-Q!B6B@HYo7^HjSF?yphc1I)ZjmGFrQVhm9hIxjRQZ8iN z84<}00Q*FCu?#p>viJd|CR}x%OAWBcPVHTZw3ft}Yb01`HE?vMjU(L_|66J|Ffj2tvrR;G z$_>*1n;II;Su8EwfVs|59!=}=#WEW4;Foha`Ay%z^iQvh)OKyzv>Ag$mQBFo4 z)LA5yTpFyWOY7+FO;BQ|NHGA7Kyts(@V<|f1l)#z5J$Q7G|QNIztryH*z5{gMw+wn z#6gQ)`53)3-`Y-`;6p__m8TR;6& z2lb}`{lGDMW$muJ9*#fuv5!#^X!sR<%Ws@}RjV`i##)qgLTh1OkhpqyD@f#L+nk)=ufCAO#vF)N*;DN z=ejCw60SBw#Q0wo@S7qXJFkp?2=cT}FKSmf{vc@+Yd}9!uVJa(z_FP&ZdmBz#M}&4 zT5YtcrdR=jRlcPw9H3th%oU_6prydh&qX}|N+!+C&$l=vAA*a#`|y1Yd0iCdE{hoB zaf!*Gjz%<(CY4_i=v2I1Z&XyHJVErtJ&Jk7;f{n%b}9X%-1^1AS@IN7OPajmwYZK> zdl^d$H=^B`52yka;)h3U_60PIF=fc|e;PJwBHIYC`Jjj0%jZ#yhtyAvZ`25yej=Le zv4=u=9-_$g$_)FYchpET$HV*SKCncQ!;}ooEMtT3_}n6s=B!tPHW*>NxO zpTatk%SNria#(t4mW?+EjQ_z)!}+3^TEv!vX!IxVd*q{k=lkCM`ls}Sw$DcsK8BWk z^8M)*|NalYzOlTz^xNP29LmeMujkzT>nGNq_wDbfC(W<5&?FPff^r{vG3U*7RR!<~ z6jiw@K#=Yd#;29237}_bi8Aj3Q77=uO|@B0R1`oM=ne0)4(i7)U@ina@ytoRQOoBv z6-GM|!MH3Ib6PHxv#rG!}_D3UZ4f;F)W@j`)Z=7P7Wk~aq4JaP=O7*?L zy~@Z@^K^x@7OsydVSP=oB>bbUhbTk;Y);7qt0=Dzkl&R^+FA>-g7f(#FQsrT+DVLs zCNZ8nxOr&~rx&PYXbUZ}0H`}2mzITwnXhDUDFwR^!?M7z(A2aHy-7+e%(XZaZ)KA5 zkdL9BrbLMDCogL3t(TKFI*obMh%_fG4qYT`Yw8wJe(yk4U*_;*3SmR>)V%XJ8{k6! zEcS|h)SE3(w=`Psq}Im#{0S`19Yc)<5ObG2y+H72X5>oL;h;YCZwbvCt(zb9v3unl z%3W>_Y?G{eX zEu$ILHKU~WcVO6yUt-x!+f)BJyc|X>4$5i$dRPJ?(0b;5FsMh!;B>*trS0(I__qII4we{OknBYau7wJb31jnLm1p&ZJr@)#1Y=TLK0 zV84G2kDmV=9zFjc_IlgMa_K!Ux-!fL2Fl`q@;XGDRk5l9c-3tS#aO+osq<@BrxL?c zi;MWW8*jvVcah6!Xc!3(nQ){*n_W)WMa*9U?lF7YTYc&Q-p4k1+#@31Wyo?;kX9*7 zAFSggEzE2i80?#r5lw@ZH`EN!eM#B0BBa;)UgxwAa=E}WH}zRL<)K+2H|Aw+`p(5Q zr*-MX5tiEx+_F4}XRIvX#Oy5Q5*p1ZpDVS_D(~(&ZPlwII*kEN{boG)0Ig1p<;5;H zr%{%H+?#yB6xvn+P$J|6nl+>&V#C+atSzF^=x9Tl089@fZip44X_-)X!c8;T((k%( zRNlBXyoyW1E2y>VXf&E2Iis@6R%;&1i#MQMr>GmpI{b~hj}$bY;w8Gf^!AuvPdQvA z^2rc;m(HOW?lZYo%oiKrLNgEKS)75$d!&T62pE+Gb}6jxf=|9noUcZZrJ?dRBA8O+ zCE|KCV_(uv;E3ZOKtHZcigAK_-tnn- zz2@(H;O?EL283T<6FwE6zw*qdU-FXH%YOErH(eQ(*M9$3U;E>@=N>j*pY`{D_2%_& z`1ap#G&;|a10&M!j<=R7B{k{$Z2!E;t=>zeR87j%sDTVIu`_bz%6Y^^Q$40C6WII= zzV-p^Bd@B&vW-0zz3x483bWJLW%3pk%&nugyRP-*4qKp(GxV?oB_2$=Z?qJ zNo|Bn8|U!gqxWKS^E@W$fV)H)j8}iE-f##YRiS$fPsxr`s1o`gN6^_Vgd!r$?hkfkQM6l5i`=c?2Y0hDC-X>Ox)VWMa zjl5=lz`c0Q5&^NV19v%nyZXYa{K$*Ka_cHr!dm7kkOtSNm1s^|97QDiM zl8;s9XpE;Y>X%w|+_F4_XRR*b#)WyzPzs4>r<<`TASI6W6rgjIL_k_(*{1tZ=o*+` zAoh5R`|4NS)=)m=+SBHVG`oqVjckvuJBtp5ha>XV)g(6HK2)a65}g81#rgvqs)R?9 zpWbK>7x&JgXyj;iXLx!XwONhhCgx|?Fh94BT1?*h6!U)CkOcciA%G&2#FYqX1Vbm1wk8XKC?q)OqCH|Nl{$`$)-t9cxt{hAtxlyu+-{c zZGm#@G)h@RC>LP!JsuEk#9S+pT>98LCySF^};eYh{cfX#P zgHNfi>!_8d)Ec;lz3V6b&GB1a@dNMO97Z2`|F6CJ)dc8NrgrRme&JuWXBJ);MKuaI zx-lRQ(k+zEf7Q~Rz%(Thmy$5*fo)z4b%WD>mzrAd_)De*(Z=%6tYLeF&o-DC3<%l$C%^&r4=smln>D8Vzf`aOx7ShvD3gl+vJTvHZHRMn| z?IEz60VAhK)Y>7OkgBCC5vvH;Pe#Km%ir)Lzx>8ux(DKvJypJ*2J~R3zv+K}?@L$i z{D$A%8b!bJfp7oU-%la;uleb>e9ijvzvZ1#y}hQ{Dc3lJ-+HKb9)!<=14>>rH723* z6Arg?nOeb}usGDtV^V}{XNG~joqiuy*~({2+t}qsDLHeE8Za-W|~u|obR5&nuoON z1=KKe;~)*V1pzI0Ef6lAxx%`(^{p}-9Iz@&+H&LaVS(pVS*L)D;Q&(m9aNSe$X)B* zi}&S=|K#)iI(ef?*Io?}Z%F9-!?G*O_uDg@@ayN00ojU6oSJXpt`kS_tRqX9t5HZ^ zyz{UWF~lfitb2Ex8p+7#*J=e87u%ShBV$*p2c%RkTmT=A4*|kO9EuoeRztrRqZu!v z)tr@bv*}?gm5_TF8JHr?P1~Fm*_1!#MUJa`7jbED4xRZ~wA!lJgEQxfDLjIn$1EQ-Bd=XCf*ox3URQAAnLSD` z8Lc2_0>o>s&n}}@jZ0E6u=C7=NsjqW3#S$(w=Q!js>eF0un#n&$cMc2Fx_X3yQ=9V zXPCLS$?NFBMi_2x_4mI2>`;K>B{g+9%^M<`a{*FKT z_Fw!PFZxHf&d+|$3;%u6p8MW1lHsS`5A!j1t|@0Fp`MO;(t038ZI-Ar8IJxdXE3K+ zcA8P>o#rpMMZJgJzW6kF4=?Zm`S-*wUv5O`YP8otpK|8(Gl6+VBsii|^8g1eVXF*N z(a+3F47Z0EZx4C?dX(qr?{DJahd+h0=kCX7v?l~N4UZlY_rK0L@F)5U7q);^e(2S! zD%`)sK1mv^@GNy_ym$hTc$r!c8=QI1ROiTBlWl z$a0-3JPA1{d=mEo6+=?IXfGRL8mKa?3W}3UevQS@-D?lOhMF3BBjP?*_fNb#udr3w zDubP>ES__G0pD<94Xf=AYBrl&nj~m1cq38;AH%?^55O{8qT8)ud3nb5ZO}NrK9@s3 z?|BE&42c5NP!=`xi7=OS(QPjvu5lb;8g2By&7-uaK;S((J62t4Z`W3GVFXWmgKeDK zc@UUsU}knfnop6xm=j-M5eq9fA*ppaRl(29WW(^5^fL^w4jiBm1hq^uPqB0142s?! zYCKe!N@&f?4dgRuPURd30_mtkzbLU!`FU={WcOepbP2l~pcmw=GhvQOVGEv0NKAnf zOXRK3@?0Jv{(1T2|I%l1#vLzt`0!>u$ctGb0t5Tt-l-h(3rQi;GYlWv9qoVLsW-p; zqt{VRPr6@!;X3w7w*>M)cmCurF5UFW>8Z_N&;<9AJaFjIkd4<83!7;1GdW#Q>RG>9Jxq!(umCW_<7Sq%L= zT|-k4^lmGeG4;rRE-!HOB2ROZu%7+RRWTS*(wTj}dtj)KLle!I?($*gY1<0PE4{%G zIP+onaSFzqt_)T2XxAr=@LO^~CfRkjaRxh!*+{SFXiJE)A?fqefT>uCwLqtj&4r5G)Ep*$9 zND=~dYukE=Vl$bsyl@3?0?*x{l0CSsc!}Y-k2Bj3VNe@mad{aHV&0R1O$JU}$NbVM zbULe2rb^y=_*sVTkHIXP4vq7F7a6wCKML&aqAoQSsAZ}j#(-ZUXJnj=F#6-RUmrO{~p-YBWJ zFdqGv`k?oHqb&Uu)EB;$LUh$x#QwmN-_HHoP4ikUwjLZS2_oWd!iAewcTVAUvdXD} zjCuO z<>d_lfB)KNzw-H0B+eUyE-Du%%A_usw7W}w?mI5{>xMTDd*aB8lJ7oS?g zGZvT8p)U~d~qnMr3#*P2iC2&d&NQsaiK z_|Kt^a{CH(q-SX)Q?hNNr4od$|EO-jRQ_cD~O*x8qVtxrn+ViMU>7H79yf4gg z@q1X=&oJHN_EjQk;n_0d(U!wbiKNA1}~wu9dCWb17Daf`RaT1tg_$J50&UC2! zOih&Bkb&~i+~Sp|sTC+QYDO_5d}vdGETi($Syac82#-eMhL{1E*E@OcacH-}bZ~l+92R@N~b|oI86p3jXBf^Tn8f zEM^z4Q4qGTdZVgT6*aW?06fd zc@n04EkLD9?em{@uLeSXFZgkY^HBoF=MsG5iB&xN$O>kn#Fg8L9E6}QAj13RNNN$9 zjS?%1U36Lvl|WD0I#gb!fS#Jsq-l)({TkZ!Wi*>}h_rs($)bFy@2=wHGWealr{H(t zMsmu{!qYh}?q0&B{sqi0&SP$NhChnVC=H*fH)b)vd=nbAd7!Adl!Oam7{FD)&8LqX z+=_w{kj+!})Z@J!)Qg+}ok87nO>iKjjMeKf{y8c^H1R%F$q2PUy>#I-&}A6TIj|zn zN&lmob!kSEW0a;y(+u;iCQdINLANHU#py4XTQ~3DWY5W;ifkR#=2RP=YV zjkG-zB{Y;nJoHNaBhUAimYTAN{&YC7W5p+RymdZExd1xVEoW51O}X=GF3;z)rT|^N zznP@OQsQ&@MrLC;DFn==L5-5&w7Cq2@QL_B4Ptio(7(Ea%V+MxL!bLNdi&Q9l^N&4 z#A2To3q2;4!&LPm508dVyG&Jhwen)0rg-8Hk^4l=?b?3}4l9%g40XX#-BB0b)6o|! z2eLi_;Npc(M{k@D5wvIZ#)3lzQAYu#+~mkDvoOXSb3;^`OC~spvxXtIdez+vuTkBP z>b*S{&QFtcg5bNn&lJ3@$w9+H=p_0-2KEwbvvs`W)HSkA$y9w3^Ptp>3kYB^F>Qd7ZJu>=T(3@5B}^3J=W;>=>!>za8G zUYlOmsg*d=sP=27*Kmu{65RfBJSkCTVmnLTTx)!@66s)wohuu-@W7|>@Mk}UVSk6) zMtXIj_fI7?Dj5erMj!C{p>$KMp@Mx3W$W>+aw47x!K{30aPS3^&09T~mlL23!CH2Y zdrk+x7Z2GRSF&G03rhwm^WxQe7YSiLgs4!zUKIMTl$QlND6^* z9aX;UcLM0T=X_sUv0vGHAFkJBsfM`~)CEh-qqcB!_PY`-)v59ZKVGXy< zFQ8dUnVMP)dRbkg1N4*22t=1A^ z8ldPcD$VOp1AA~IE~y+yTX2qTf7ydoFLt-LgR`4wk+e&!99=^igHt(CI4$EGN*4<6oAFS$7#y(b^1xO)B!%0Un9e1bNCdPVlkFtgKcp>?mA$U`3# z5hnKNk+9rNcW?(q3(524C>kmG^^7JmW*J6Vit%KExkdx0kFH|AK7)v!*`CYg=5-&H zAbgNQ;MY2g_VLewM=$5t8;7GPolK(QSKj*B-~H(y`;(vF{>p&hC-yF$2)+5l-qHW} zSF3&Zdv^bIz0vt`%DMCh0}OXIQI848>k8=FL?pc`)&~{pdk$&=x9)lW^6Vr zwOY)meI`v)tIPXCOEfsM{5L@!E(szquZMrPGBxV4o|YJm3Ct;kN6`cIG^y5ol41Ai z7S4Y5<9PVfAHkrv$(}gnz2q>7x9P%OPU}f1*Ip$#WMOuf<>Y`LuU3uj;9-t$Pj@HPH$c@6E#p@I(HzPs9%MNp0y2hCjmFMH=i*LE%6i#$znJFz2sZ!~!P7m@r6o=aNQV4#gTX*NhBrQxEm|(fP z?M2KloIssI)MVs@W%6dYgpm+$^T@h!i#T72lTAjrbn!gO z!7e&kiW%yVc*y(x3AJ_ioDAaf4XJY?_nK2OoL+;+#<&r`-XJiKKGzusW8&>hCfrT( zhQ$?}oL`X=H%+Vf)XLO`>+)KYA}_z*)II2AsI%l`FTyAq_lFVw&99vK?Vtbq@B0O+ z(0fvSJ&}6zt8!s(|Dk_1d;9nP=!Y7O&T~mo_WON|b~aIq6Vz%1=ylGoambyePT-A5 zIntO#>PJOi>i^r&7J|x{%GEU7&O=xzzeI<$qafftAjSUxPDSC-!CP&T((~S+omD!w zc~)XDppJ7TqFnOk96Km-jCOi>^wXcj=RWaa40bmVK|<>WnF6NXqa%`zm;>Z5=FHCL z)-!Q}Mtc!Qj<2J?w}G9jXDi*NLPc;;5JE*ih4+smHIFTz{yDDqnTKGTzBJ5A$MlNbA(*THcpLLcwWQs=HsZT;0&Vb{rMDz_b>vl!-eX_m=Xg={;u|2)gTC% z>D3&tf_d=avfoo)y)z~%NEFDSeYPrj*EmN?ndIJl%TRZpde0%S9~O>R+BARb)FXWD z`VwBewuYmPj+hl3j1IGJ001BWNkl)F{7;!;qmh`)L2z+g1M*(;A= z81-;u?I>Dp$uCnmD}~_WS_^ZF>u5EX0c#uUJasj7_#>Vh_XXmx_Aa< ze;=JZ!(1&wU8{C{<-y^GxJ3$zh{muIdz@1Lk%G8Wr^#d=NPAm)}RAw3(@E-(pdqwaUz8!N)yi^XN$<8ECf96L%{J;J3 zJ@?)-`Kko2>)iBH9?<{tFMsT=g&Uvwp}5v;lNuNjpl@$7n8yU@wT8|;)*L!_g_F8- zTRiz5vR%FB&a<=$b-7fH!tGRZO3Zd`A~Wrw8{8;X5wsqmF{rK!oHx7~%yXbWAg`bP zLwYyUb7Z3lEaPi*HAl=?W zd;SRKR!(DK`8ap*`qY1WJ0^Yd@~iCaAbA*w+Z31|g6-EkP>&Dh_Rhmzsb0~6&of1< zp0$zUIP4(cM1XCIK)#blZh3U8hYiB-ftMfp3-n2jG4J6xG|PfD3~SgmChfdwPkO67 zsiK`r@l^7Op<+J7C7@W6d4DX7A5o9A6bD@T(*Sz;mB2qg}>u)2Yt z)}Ir2th8f%)9E!l@5mb3WZ+Pf5^Zk7KN%>SBd5>a=_FWL?x0yGAK!!CVKQcSB+pKt zQA2-7gwif%I!6`M>AY6&-HyBW&h6Qa9A~Wf>G!EjvR@!SkH;gNyK)A5#SWHM7co0G zC(47G9#PGD)WFQ#F|<2J5k<|QZLAqlf!>+!cdvW|4FmFejQRsyq~>O7G!%Q2j!=%-`kS&Fr} zIo!0ohECj4P#503bsY53!@wle7$ zAoGL^4yTb7PSeyB^h1R?rFE#reWeb}2Dy40w!qoh0vHT)OvchimisuyD_SOtrNit`Wz|B^sGJlfNr=2eoj=pW;=B*$hWPRysKUj>y56)+ES z=1P?Gp12x#y0#_@&ggUD{pvlNF&L>kBHsWuAn_dRXHg$8c82_E?E+G1$>*N9^&DXW{8XYrELCvj7Ip2z<( z{feta4tY%dUA+!0FLf}}X$nW6!j$&+IeqUOelKbmji`GgHJ~9-r{ONTn+%vbJ&?gh zuQgq#Zr;1GSR5Hm)*yMoT#8e#@K znRsUrfXZ3~hM7|3ef~;~i2dFkE?+(eOonI{6D&kA+9h#w{O*hKl*orZZI5 zM&WlFOk@N($9`9$oTW^}2$TOJPoBHW(U{>Z#b`3YI2)rG$GCB2700_PsF%d_w{Ao} z-*E6ahk5hh2)Hz+H?jTBN3?`xKbt(T(c60Ut@nKUhcw1=nBDhP^}DAupr8K1yIarw z?|<@rNxl1GDIF^@-tS?uv!&j7otr-xDNYm+HEHnPwRq-g(CTVhc#0VC1peHffdQR{ z7tEq0VRhEyR1V$AWQn;1SkeCQ%5MqUH4>w}z-U08zm(7w!yz8}^N-^GkA4ut-D{O# zx?I*D2UFE0>Zs4GVD)QXfD_NZ3!TL|L^UxCE_`eQ*b#$-pF7I2vvEJpe&#)hi%fFq zdR>0>!@$$Keuw}4agNL30{U1MLGX?s?04A5Snp>^P1Rp@DclEj(ca*c&0KQzMPw_+enS)rh0o2r{PlL0`9eGqTp$v{Unnp?*Tmw2vfwoxCPElW)iiS?MnvIv>U^Be zpxatePd#M7nF1onsb<4SVOJWXN|+m_W2E^6EA1|BU0K6o zLM?MS-=bo4sQEap+9cfM6bKjbba)k5#=_t&Wj1=y zOa|ng7hShJe0=zQR*K}qt~0e9%SnyNLF^e-JbIdIUSOZVJf}c;iQeVQ_{96)gDVez z7G;qhP+QZAj13qnlR0$@PW|PVV*bX{LI7lTe1SMCapljiq3p?j(*dqW1ui`FVQf75 zUlG%&#$W(TXxl&L{#O`kk8e*-zv6&bRas5{$rVD@b#BN!bcIPDpmQTgm9xMev8l4q z!(OX808hn16l0ZAA^JQ|!t)Qnz-R^qYiGJg zZFr+ZyjoOa8LijqsMi{(*QoT8{u#(Cc`sD-Q{`~e;9u36mN)mgeOZ-h#j9t;-M*Ak z3b83zM|~*yR`u2yrKn7e8kEd6@zT?$aQplscZ-uedAJ|?LHa9tMY9!SWx0!1g9xYw zboStf8-{$3?5Wc^>!90S6;IvTJ1d~MxWBsxZ`?bNJY>P^Syxsm-z*y^M3h5`G)-~g z>KSYfH&LHyVD;EhG@CR~MnOHJz8780EUY1^QysfZHGyLfHD7)y?Z)U~}^_ zcDAn~N+)O(DHfv$9quVF>#gR1TVq=-(MR%M6hIi3krL%RU^7WhWmVYlVmKM7bNHPz z3k6SZqr5t^;L{10xRFjfy>JAl7gy0F^02L=zpKiruIywbMdHg)eF3PPWqQgyD$9N` z{%;??@`=}c+wZ^TFTUDA{qZ&GR|`6S5%>9Bf7JW2M$-7VWl3XGsE%6zeMEqsG^N=D zfj4_R;+Z8>tLhYxS%L!WmI{<$nF2Z;RyuT?Z0Z7~Fxy$AI7ey<$rGhoQI6Fl=F$?& zZ(8#hdM}aR`ooO#=0t+Kc<-n1@%O(A!)+qHY0k^-td?N8k0DDwMx4yx*mLf}>A&() z)E5@KbzkHR*72mo#wWH>4l*Xj(QVd?3GV;oJJH+xoE-QtTw8H`rWEDjdh_$zvBv`R zgMZWCnBqL}3DtK9pzB`vaD$_viNPf=U=M{n;<$k%>F|(`R%?#`wVShOHfOl&7&RJ9 z;wDFNVyct~8_SrQM8PqhQy4KWkXCReN57Q3`ctyjdm~|?O{CbAx--{5QjjY zJWsi8gIrdxfzN5?i79yP6iB4TS{==#fo9T_d(*mbzjZQs&&Zt~U{$pT%csEvAC`5@ zYl8vHUz-}Q`o$J~I5a=aA8bOSMiYTn5u;lJo_~A^FFthxX36MQun;3!6txlJ48N$` z>cT=Bvoj6GWM3xgfjx*e%Py5N4t6*qPo2W=M^K~L>fC@PFd{6hZb|(hV#n7ZFWn3e z7bd6A)iy0Et5(vMF{q!%)&2%3x_*597&_gqr2WWKPe~oM1k@XI(piqn-OM}?yHxfx z+}VKoO6Qq5vnj4zzJUJTE~0FLdO5*T476QNJv_J}z+3c23@Qr0Q$wzCDLHj6SF_x@ zLb(yyskGghsfg8G}0wPnzUoEHvA=ePta-+6&y2s2TwZJ#l^FL(aZ8 zKlQAKv4$u@9_7U-pZu5Kc=!*0^wod-PpC!gm!PpeFSYh%d(l%D(C@xG{_8LLiMK?} zneXFpH8r~^N{sgQFy7lioDdm~Lhf1{Ou5v!#)?|DJ7~{n^^&Uj=^&9qPkAsdXeY_d zDfcDJ_QL?(gpP){97}+Xvg$)1w-oqrOnLJh>1c%e{_6+vz@L5q`J}HYGpnKYkwpU~ zE)hb4dV2{czV1c1@g?7gyxZj4v#Ctkga$g4D2F*VKe>%)EJQl8$fNNdKJ(FgkPXOi zaNz}cB2#jvMMIG_z4C+{lgGJ8Kn(Ho!fMbEpIYKL~<161X(u5c(RYt zco)6>4fOUequ<}eXt;wk9f)T?HQ>c-bPJJ-%!yG#vKb>u60~Y9wCXL?DXnDP3Mr~o z8N?#%?ZF{fE62vSiE5fQ;FsugsPXIlGkbRXgTG#|L7K@jW5CZ(r?W>*X->_z@vXPq zfScMhic~&JR$l7Ik}x~f~Ca{8VT)LI0(f;(N#TbIrZT%N1D%~+gU|Y$*Eh& zJqW>@^=E4k0=@ye%cq;kBnN~NH1tK`_w!fJ;>!MIMD-l&C)O}Kzu-W`OGsXPsx#KvTW61b%uQ+NRqOLhxNT`2vk65x>380lGF2qI zF4l}UWqexD79xxeGU1Ky%FJ6LT2LG<$(isj_Ga-)ZNXa{w zR+S#mt;SP+LqNJzFEOukeZ@octzAh;PO_50e7M)c$KUsEocq*AfP4~kTk<)h@KyzI z5_FeNo197Vk4$c#6zg}QzCC28Z45Tpfy$shrvxC}%t|x##*g22Sef+l& z)L-RKG*@R-odn(8&HI~P)d)~(P|LWcnymSH(+l57~1V6 zG?Ff2E*iA4s`lL8P%w`*R2trNtKPF28oo|FxDNm5qcu)eI7&jmnX$J{-h6+sg(n7o5MuYhwzSKue0l%NT&-P^Y zT>3qb0ftr9`e6x@eWtE}p@Mn$26Tbo2+u%2(LPSxK+H8FeDkR_yx{0DG%La$D0IDF z2`G`A1B;6-%ygS>*imSl9+X@uY1wFP2ofXs?RMJMB+$_ZI<;W3GrvaTV?7a0b z*Y4NQHD-w@{65Ax3cvTRqNq)9{N!;gF0LS=R=Jcv&!}W9MtklkTCHV74C)4EfxLxw zYyj=1h-jb2<3283IE!L5ViIkF3`e2}Z3+hIrOXI5dxbAG)q{XcD)Q7P)I*&gQP}O$ zbVeG_Sp7Puo;2C$$Z|9chCn?}*-Ibi(u`)5XGpV@n+M%?j8(O+NQt3G7`{ja_4{%3ZMo%&cA z*W02f#q#enp!e8Ar?8~t&B#lyp-%K!i?@dd)}&h%69IGLCaaOaH8pqcJIhtZq^dHa z9_>pyJQP;)nXUyA1O8220f^u=_BxKuC6JHpFnWg`M67?Cd;(z1?$2 zN4r4e%WR$JN;@Bns}%F3QgBuFpH?wzz=zH?<3FTddi9HEf7=A|n;@514dAEy25%!s$%qz-e; zTd+;CPqXj(tOV)<+OH*a+C*5R+_u$C3qV^_6bpa*(7XZulmQUdvD=+1Ig;|~qwxUe zH_qVN@EX!`h_zGeSYBFXy~OL!qnBf}W>(PZ979w#re=^^+u87ZdW2?CR(am~t-9sL;sbKZ_Zm^9x@p^hfi^N1Ibgno; z6=9s@*|?71``t(1^SU4S{hzt;<%QoT{_0OzK>x1yZvI%SGyiXklA9^BjFK1H-`T;q zzb{?ltYnSC?KKUzn;`QUl`vmO&f#!7wF!+0WJz(-p{Fvnrpt6XFI^i#&_$>d+|h)Z z$Y>}wAiPMOETC)$nIV#a;VeQTrWA(OgK=b50=GK~= zw_-MXqeOSDhGsYBQLE=4$Wb3f7+)A+_mN#BWC<4qYDI>JKJ#vDU;Ya=e5L_Cz^vf7 zJn;f6S2T}s`uZW5yPa__;)Bn#;Ry&jn43R^Sj7PuWs}>3it-E6 zB`%L0-ow=2tNnAsC96bwEbATS#zT)kxT=0wb!NHEK@->9U482i{CT*3C%L)hAU z2!sA6igM%#SRUMMISn`kq=;14skhK=w$Y+!l_X*U5~o+!q!A`qz4#I~>zYc=B}HmRo zox|>a5C+LOnPgc5Z~xB^y#KX7^zNU&`sLDMUykcORRKNv>wmcYt4VYA`w4J`B`T#_ z``bGh4+h*Rj)yf+Xf29SuQ!4bsVaf00K_skc5cZ|J$bYwU=gSp1bGfbLJDxug{!26 z>}mqEEU#){?$gvvfV+C`96t1$zmC027uc()5P^c7G?u+krDw4A>~F%6+x`-2^Ia_7 z*aj8!Msb0tQDSy2L48I(xR{i2Q-iKKs$PVbZ^-^{N7x ztcZQ8Ru#Mc?TeDwgQkJMOrS*EM;sL4@Hgf~a%8TI&}huz$dTKzdi2?tX&*x^YI<*# z+2xu;c3t8;{meq)zKkqnL2=1u4;G2eJe7LV|KbuI8p%rDdP8&TW~5uL*LkEdiZn)VKm?g3bUVvvaQIz4bwedH zJ}lhNAg%zfx!TGF^bADO+`MoO`@LQ5n~|bX=2(quXcAR}WzqIR+4bIb z(_<=s&*KQgB1TGe>O84Ue03>V(^>`%#k&BCi}}cGbprLQ%$P7YF33|?Z#|_kt?A^% z+R-_TKsFjbM6Cw?}vZ) zANIZ|RrdeGo1T(@e#a~CZan+Pe(EoZTKjgkQw`7y0`zT6hC|Jt3(K9za0#`5H3b`Z z3kK#^ZbOHJ!hkWgd169x2W3f?ystfH>zEajTyZ%mvB2Y11MfU=f=Rfqox6lTddsh& zzj2WXQ_kj8YP|@mr+e^Ot<7Nlxi7=w>E|KpG;#EnImDd^WvxIhDbQN0p*0^%{WGym z$H1lg3e<-&c0Rj<$<7e9vc?TP`a9=w|Ht13q?A9G&r&Vr#MTQ_pn$(1p?0Qn^<84R z2fuqPvGodv-^EUA4b9dvj;-B^qet#Qv#|&i+DG5T(IuX)Q@ULq*;ds(u^IUW{^q$< za=2y$1TU^QNxnyZHLMGq@1U1YwI+$yA&~W2M>2DHN^-Wi7zpCwE%>Wd3-qev-pl%ZpAzeTA_33Di}1!9NHG@u_yJCYu0CH zn;c#9LhV0MmLbAqT;jsD6z#?_EYBZBvrWxswAqWvs@W1|j7;U*d7as#)E2Vpu{z0i z#)R}P*xbE>i(8klH|n96_i^Inaon(eT0uQR$x~AzB&~V0XO4k7wR88BfFNf4AKokP z4Y;s7t!_3+arxXMNJj$!^(;dj1yc zIa*bgKnsM#5^*s5ydR)}m znPNTdqYIL;5y3mCp@OnM-2@uul10%k{`$E;yZiO;emzZ+{fhs3N&@=#yz~5Rt=Z*| zr)YFd2-!m~O7yn2kPgQZZs!`88fuBQfejBUA8sqnQ3Xc1W-{IxATuVaM9~aNDphk+ zxkQv$tjY*8wGv0`G>uJu=jzSXpr=diUE9KY|I;sF?;?4};&F&|T@_66snl_1Fn=i) zPv3>CR>P5-=g?WIqpX!ElLGBy5gJQ0hSG-%$Abu0@5_f69BW-HCDp;YQ!l^$=ADwA^xcly8;W# zfg!mXbdK@Pzt^ad{Y?c=?nr9jhr?}Ly?Q^cUbz>8-bIuV=`ER*CHl}9<8nQ#Pwv#4 zm~YOYnY7dwmLRbl3w~#{^vrAQY8|>mcE8DC0~&E6r$Ag)ve*T_rrmj^1+dmm@Hg+g z4ae)+oFw>sIrAn%6rq!!=`6H6F?;K+ru1asyVCL!UJEXti_qK6@ZoctSYNpTHy^nP zt!9@Av=;5FgyEfs?sWzOpY%*savjIt9ng3QCqOTdmnkk?yND~h8`zojv6t@R^bPB{ z>BOx_;)WQmnM_)&HM?lfts{<_Qq~qY2lA-ZrWRg2LABp zGA`0${Of;u`9nYU3xDzE!9RH656!&cmLK@5t*G|eMy>vhNfakyV3>L6G;iezY|&{v zwmp-X1d+OWTXbYR+n5E`$|q%`I-*#(xvw>1G*%~l+{j+WMo2_iIXjQ5*1i$(2zv=3QN>X zYSO^~@A?n_0oNXW@F1Al;Z*Td9S%fo9DCMFv2xQ3fLel?<892JY=elfls9iKmuRhX z7=aB4$@7=kzgA-RL7=u(VDr8$4z!|0mypy^VYM_3lA}WAXV3(se-FUGtE? zANrPHF@t-sXbIs;Qk%uGwddjZvF9L3W;w6u_du!^WIqC6=U>RM9sW!3P~LM=@7ft? zVYP1%WeHs7AZYJCQ&JToOqIMOy+SpxU0D>avfP7S^DHl#Y-eESe|GOe=9EXW?sD>c z5|#4#M4r4?Owb=}VB^YtxO(NY7!I$ZjHv&=@soAigBdn;*TuGK}m?l~e}(Hp4i zp>bf(4>{%CO##JJURjn!uH(pfPBwfyR(Xkp)aPr!cR%wsJY#OjHA1n7hI7M0exZr^`8J$laxv2A#Qe z$*EK1B0RV1om)JHn_tjGIpzurUhr1LRQpk`OYOXa%hm)e5{N$V8 z^WI;wp6qwu_3F;wd*ET>BsYe`K@|hr8KLzvB_a4ZYIP35(RXtg;jgc z35Zu(^nMAqOEZ}$A~0`>g~&rdJeihcWjO&Bgooi~nmfONIUYIw_}AZzM?UsZ&V`2U zLqt;>AlO6DyBj!q+lz4YwihC=HPKmaVfm&m%7%p6oAU)aH`aI}qeKJ5lcoE;b|FQ2 zEc^7AuJ1VP>`mPe+ro^e?ExXcJK~f_b`-IFO3yv zf~A$)aPq|0qt!U7rDm2ZRBu_m;c&Q&v3R}T=0C?g82{a_BLHcJf$Xslv$FvxaX#&; zXNF$DxzLV#0c}S?*z)sLBF|xlp@mZAyN&Ht!BQh7yho|pQ2Hj5y42+0(Vhi^JF(?2 zU;Z>UHy=b%>`Tj9*T-B#nQrF`?nXD;>|&NkCRnuG-^3>O4t~y^*WQigT#^tju zbOC1(S`N2woP89N{XUnHr>D?5-W7L_37`G1}}8Mt|$nTfg;vx{F_tSoqWf z^tiuQC{St0!YGn=-L$4t~y8ahLRJP{5h!! z%AZpsnt3->%|Oo-GKJcYP^euTD*o;w0Gf;X$h+Qyzj)ufm|Uj=A*;aY09`Lq#+X~X z6F1!T3Y1A3wN8Yiw=GeZ8g2>Qm@6=ION_i>DKyEu@xK(fbpHtT%_jCA?4iFgpWG!6=C`UsIt}Q`md#_d+ABD9>KiaW zebmh~ybm@~A zj%Ypr$$$WnnKGh$8JSRzYnW|z_+J&+tDswHwi84oEXO%5KjOLi@H>l3;L)D=`8QoR3x zGkB!e!%VG-Z+q@HV}0oaH|t@UU=D{0yD{92=NIT67k<}Ng@L*sgf1;&$q3l)U&F&! zX_!kNd!s&vlM(JXc?)j6@fk=ObQaU&x2+WiMov@_5C)Dne$(+j zu0HYza>`dzKD!{#c!Jq7!|^!QYM1L6>SmD#2R@5p?1!MPId!@p?!6TNst0tH1oh&j zrk(QYltU-t95Buc^as5^eQ^KmcfI~Y2U+PadC5zX-(LUc&#%?vS2dFQUr(ZVAu5Z= z#$Jbe@1;~t9M-XNw)V5(xydN~zV)}g>`%W^LH#KQ=+F7vZ|L6f!~f%bMXhmyg5(0| zsw|2Ey(=3is5_B1m7&rUVY>TpyD2;o1heua+#ai!Lx2*;vr@~fGH)JUow~u*BWAS| zmJ*md2E5ifKl10Fz#qN&O^7DM6Ab{zq|YgKGl^r=yKA`d1>cSO+%aadFW%8O%d7J(TA7gnvR@~DRu?JI z&ts)6BtOf`O9U}od@}+9+suTNJxmdLdX6j`VdL6^IDg^K(HmSuiHRRPVo?Z3V#|?4 zF?;N@t*!#Qw*2HJu^hd{Ijd`KCY=X0GmzAWQm}9yv&xKolWRMJfSRx{sOEUy>LOlo z+cVHDCD(0TNW>ftYuvpt%IZ8WvAoj4!dzQw)&rlJhpg}oo9r{!WzsqeZAx@zo49{!I&dOrVFsA2~esVd^@0`Wi?Mv97jIcW%Ax%fP z>*hOf!}?8#>vfcQs^NDaZqA|EU1d+5O(NdofEX9rbk1`Tx!K>^!0x3>%sQtWcAgi= zvJ4Alila4kNTv;U1M>q%xkQTCdFnX>xw7B6RjjZu*fgBd1GZcSxUvfJej@n~vr&;| zlb`?R@A##k`v5+mo<|_p0A7h#)_&wWUw-FZtGB_jceR9!I4+!hpfQV30|p};0Nc>Euw~?cEi0EosZ^y><(I>af1cj^ zoPEx@w@R{mY;23_r&W6I-FNRF&VSDN_P6)9_tq{(-)q9-R)=;{a8%QyYH+~Vkg8oA zq~xqyIdcYo`#Zmhc)c~y(oil|7Nl%KWa0W@1G5KThmlQ}1Emtiw%1YLQdibOHN)sG zAK{cE`qb;0sC$^F=$tFC{B(iRf{&%cOYjmPpg2``1y4Qr=SaHCYI>X4s|7L_*aw%8 zSr3Ch7-QrDpFGd9zt9o&gUdaXOB*n|?Iw(k?F47>4}heGFFBv|G*>=w4VMbg#a(UT zU0j}Khf^VHt(dlPZxss{;TFfVC0oISBHVbquyPkfEzA!15uAIG>vBbN{2Bwj26+dt z)#k55J<{scY4|b_8gRV&0;ZB*&5v8+{W-;FV=OKm!!xJ9iuK+(P;qe{3$A@GF;E4T z1W3%-t4)kltE`eY#aAR2E(KY5Ar5axT46pEPiJuciM%P=`n!Q=#04b(=om$T?ANj*ID^f^4SxQdlH zLO<@|rppfE#k*h3rFGe;67icsCLO{P->&()7#h;4%|%5q-l?Km4~OTEV6L-@P7-51 z>Y!41xNg@$Y~HdBUL{1HCMXhW0t5u*F;uvxIt9`smqTv?%qC>gTK1vlT8^a?C%CON zx!zOC1J9`SX^g2N!89{<=efCI4Qm%!0}JE~^w2I;N*j%FM(uE2^}BRxb3olX$<;wk zH#c30E-5m!)Bc(lXK%XYZ{GIV=h`*&>)xl|@ZN0)rgwkeNKk)E;CWYtgB4v*mi>9^9PvRehoJ7dlmAqfyz`Blb4NffjTct zQQPjLu`NKx{(ZS$1Ch~z|!*0XEyGa$@zES`Q8Cl7zpy4!j4a~P1U zkmqo(TYLBXCFZil3*xxhsI(s=V!F!f4cOBv| zZfE;G3*q*f4RO_TMva^rPbN4lva`iHT+$szqQ z+mw>Hof>I`n1bN!U+2tcRaprM!`pZfb%EO^K zlxCbV9p2OaL-UGk#`V(9v!34Pf$FDY&M`gpoXoP)mSXhq9-V&Q45 z_PeC`MyuDwbaNC}ZND578)rbp4jI&`qFhSu_fZY%I!|3DsWw!VyIsvu=>SJvCbNEo zr4!F`H#kz43$PbyjA>+;^r`rii{8#2bKbI7W>OzY{Z2LDB}d()v$?(0^~Rul6Lvct z&cYx@pX52({q~m*ubuebAHV147rzFm^PfpT_m0co@al=m=nt2R`YXcR8~11f*9=ab zUVE#wb(?!R84rinqV*r$^Bo527ayR1;>@p<#y0&DH7esI5wi(V)ujxrxj9ye5}=0_ zVz?@QTo$`Z*%m8Wftqf|DXE~mu6X9;c;Ih7 zjz|9CZunGC-8kaq{1*ar4`FQ*m)!U!1XTX9T*lOa351g&im*U=BEiW15>Rq$c&p2z zlor}#!ZtAXK#ZVO!ph-Qq$@EzYRj6$IP&mcqqFjqQ%uBNCd0AwA>efup!=!knsm?U zZI?gL2Z?R?4Q$+aC8nk?=hPg9$!d49>48Ih&#+L5SL^p1U7K|q7(jDl#X47C9aU}S zu8__2A2*sf@c_60K4dgF0IsY?H@?j;sJZ7bXg&`=JSUgkIfXfby&dabRVT5)?I_(9 zS5lc8Y7ZlE95sj`m2<+aURh~HS`!Z-Z&XMv3X&d9&Oe2@#b=RbeGOWQPpQYI08e7< z)gZ)Zm5S6<5D+Xn>|5cRHVDjwvBslXcG`$?U8DT7drpU4>-&;~Y{k?I>>R1F0)B?u zkUHYE!Rc)j*)k^zq+AQ0m^z#5TE{{ocWhx5pFd7+a23~WB|Tg+u>rST{c23sC*YHi zg)db?MH-}K50cxE{B*u90eC$QvKjH_kzu}l3QsLOi&hk&okWPD9`e3fs<7F>J>Q~X+Jc7~P4HT6eMK#65fe_xfj^FC1Z4CW9K#&#aol4Mo!h^q3 zVE*t5{HTDR<>;-P#F2+SLNfOOqed2lbvw&6dOkpR|7NG%z$ef9xbp(9Z6DRjB(w5n zb30h7?}E7oXTv%Lz#NN=0Z+i+fG8uRS?4C^tf0-f)WxbB5S+<-#5bTHsJOe$QF$KN zyET7zR^UJoz*LyCAgpQ+46tTv}ou~{GesEuB0o9`lF(h`7@a6HQzua8tM-66$#LJaXK-k_g(Rg2UV(lbV`j98H(dW} zY^=?24!bER;{v(0Ni2wq_rL{pcXE@_RYW+pbOa~X=h2QMbbEc2yb`XSy&R2N6=T~r zs+u=x1`al-Kv)_>sYal#3QbE`#iTtl!0Q22IL6+O)l;Vsw>n6;?Jv3BQ!c~mClpVo zrc(SQtpjfWIUTE0`>|<;(9Y5)P&egnRV6u=J(x$PKC22GS@pYKo%%H~9D#P;YsGQ& z)|)?e2PxA3N58yx-}LV`-f`eHZ=9};zs1YL>--E8e&Koi?2J>FybE~|dFjI|aqEBG z^C#aKG4+cI&=1^kNBOFM`~C;Auy(lubnPb8laK(tb?zJ+>^`-}r1-fJwP+hms#h46 zuH5k?hGVyR;h_|cq0n`~1w3mWu(3i(WrMDE-v2!y?R4;|_uh%cV@Ean8w5$sn^diC z&9msWQhft+BmhL=bGI+o)`@tw(q+bZ|d0R$KBOkxIoUY z3;?#eb94Ul7`pv{`m8>Wcv|%Vg@r5QL?2P7tjRe=ye_eFr4m=ni_+4l$9lWFjP=$6 z*4y)3U?zz>+@GE2m~5U#d8{0x41Ai@mAU+7?5+x#_PE4#cMz;opYb_9GmMEylLMa zY^#nb!%Z`P{rHVI%iSpXTwacei3+AB8_GB*H#MbxwtD#7GpDf_QJk3!hk|R6Pt>Y- z!ws*)OmhYSu|C7X^_&ytu4_UlX0F}s#)II591Q5@=%+0_KKD45x@~6a-KdZ4le5@8 zwHHOXhsmv*Si3_-XQ-lFk$EVU#<;2+XrE$@g&tfvE>At3I;aXBAnkRqeBu=HguFJ2 zsZ)+R#nrtu!sY;=GCpd^hYk24Yh90X<^!$VL!^}nw&uIk+;RG+J51fiAtlAls6RNZ zElS#7d}!&J+rM7d`-M>dmv8yu>T5UNdflGMOWuUQe_fD!d;BC1eY$88R>DUbqUibY zBWwNDpV~i!!fX<#Em`*C()CRFjWFZsj!RQa3opcm9oJ#w-dCassu++#~fy9DML`s;Ie`k@aai&w3FK;j2ti91fT^B08mEIg-)JiuDT zO**h^^JoRAVRCverl!cnPD*3tgSM$!7ADQc;f^ zTgCeNIjpXpLAx`LIO(9ssf@5r$1?GK*_LeUQZdXpPR;X)nu3se!$XBSvjx-}UX7h{ z-K+7kK&$3C|K|Waoqibsh(br>ALw$IdR`!E?*#WdM~g zC90XEIU3apzURhUv9+;LaX-ASjQL&_)@lO8scd!tz5@Ist|FRCsF< zo%v-B!O%GrQ&*MSN?D9qs2FTGsx~?OiNq^cmF`4s2mxr*FPshOx_mV53Jp8yL{_ z($pa{CGrR&VDX^>)wvManF#YoR^ev_N=1SbkKco()AyM)9UD8AbuqNdU0}I9AEZm3 z?*Ka&?}s^shcIkn^X41S9NDfa?iu20UC-txt@s|il;KKn^h^X42U&zVwrbMDkIFD; z3)YJL4@9DMB{uzV^^7sssg87>;7sjk5+k?lUhkXg7WDbu)H6AnEheL1(dspwoyYS! zM~YswisjXlSXq4*o%Ry4tnWy7#Yp8XQD3RPcirvFZoYQz$!t1vJv&hy`mxf5h) zz$6Aunwi-~fH&{oi`nXgZfqjP$k6u8_$)#?4}PH3@8e^21k||E16utA_dfM3&hnhpoJv3?DA3FIi9jn(gIf@T(D3ssXF*dCOHDZnmvk{HPJd!JI|;Bi`;JWmnH z*>pCou#ji(SPG_Fn;4}z(9PoI_3rxHZvDhN?*2y5-2Ln=J8!A}!nN3Tc_~L}bB2)v0g|%h zb&AhcO|u|ZMIpMUa%tY zn|C`?&pvFA#b4*g6`beEiR^*u!22Hr6*GU{H4g#$rJULNTZdpwlh7v3`fvdj&e_Iu4yagq41qQ`x#{ z4+pnjg`K0jvA#Nw+O{S}#>W((Ck3abGN@NZ;e~Zw9aDoZ*D+8x$YZNPoqmtk+gLey z4g~J3crS>p)4v>95@Uket_GA2J81N)TIu>V{Y~aOi{wC{PJJr1pU0zky0l-lEZivE zox_`1s;`-Z>RFDWoA$r(z~Ym4{M≠oLV1)MZNi$Cv-q)HO5LzWm_C6}KY~UzX*` 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%0A2(p>YRAp{@`D}o6iW+WEioAlkDf&W! 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

cLkl`<$gB@dNL%Y#`u*4 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 OFIh \ No newline at end of file diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..f63459a --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,57 @@ + + + diff --git a/frontend/src/api/admin/api.ts b/frontend/src/api/admin/api.ts new file mode 100644 index 0000000..b3d1d2b --- /dev/null +++ b/frontend/src/api/admin/api.ts @@ -0,0 +1,36 @@ +import { http } from "@/utils/http"; + +export type ApiResult = { + code: number; + msg: string; + data?: any; +}; + +/** 获取接口列表 */ +export const getApiList = (params?: object) => { + return http.request("get", "/api/admin/apis/list", { params }); +}; + +/** 获取接口类型 */ +export const getApiTypes = () => { + return http.request("get", "/api/admin/apis/types"); +}; + +/** 更新接口配置 */ +export const updateApi = (data?: object) => { + return http.request("post", "/api/admin/apis/update", { data }); +}; + +/** 更新接口状态 */ +export const updateApiStatus = (data?: object) => { + return http.request("post", "/api/admin/apis/update_status", { + data + }); +}; + +/** 生成密钥 */ +export const generateApiKeys = (data?: object) => { + return http.request("post", "/api/admin/apis/generate_keys", { + data + }); +}; diff --git a/frontend/src/api/admin/app.ts b/frontend/src/api/admin/app.ts new file mode 100644 index 0000000..a94ba9d --- /dev/null +++ b/frontend/src/api/admin/app.ts @@ -0,0 +1,95 @@ +import { http } from "@/utils/http"; + +export const getAppsList = (params?: object) => { + return http.request("get", "/api/admin/apps/list", { params }); +}; + +export const getAppsSimple = (params?: object) => { + return http.request("get", "/api/admin/apps/simple", { params }); +}; + +export const createApp = (data?: object) => { + return http.request("post", "/api/admin/apps/create", { data }); +}; + +export const updateApp = (data?: object) => { + return http.request("post", "/api/admin/apps/update", { data }); +}; + +export const deleteApp = (data?: object) => { + return http.request("post", "/api/admin/apps/delete", { data }); +}; + +export const batchDeleteApps = (data?: object) => { + return http.request("post", "/api/admin/apps/batch_delete", { data }); +}; + +export const updateAppStatus = (data?: object) => { + return http.request("post", "/api/admin/apps/update_status", { data }); +}; + +export const batchUpdateAppStatus = (data?: object) => { + return http.request("post", "/api/admin/apps/batch_update_status", { + data + }); +}; + +export const resetAppSecret = (data?: object) => { + return http.request("post", "/api/admin/apps/reset_secret", { data }); +}; + +export const getAppData = (params?: object) => { + return http.request("get", "/api/admin/apps/get_app_data", { params }); +}; + +export const updateAppData = (data?: object) => { + return http.request("post", "/api/admin/apps/update_app_data", { data }); +}; + +export const getAppAnnouncement = (params?: object) => { + return http.request("get", "/api/admin/apps/get_announcement", { + params + }); +}; + +export const updateAppAnnouncement = (data?: object) => { + return http.request("post", "/api/admin/apps/update_announcement", { + data + }); +}; + +export const getAppMultiConfig = (params?: object) => { + return http.request("get", "/api/admin/apps/get_multi_config", { + params + }); +}; + +export const updateAppMultiConfig = (data?: object) => { + return http.request("post", "/api/admin/apps/update_multi_config", { + data + }); +}; + +export const getAppBindConfig = (params?: object) => { + return http.request("get", "/api/admin/apps/get_bind_config", { + params + }); +}; + +export const updateAppBindConfig = (data?: object) => { + return http.request("post", "/api/admin/apps/update_bind_config", { + data + }); +}; + +export const getAppRegisterConfig = (params?: object) => { + return http.request("get", "/api/admin/apps/get_register_config", { + params + }); +}; + +export const updateAppRegisterConfig = (data?: object) => { + return http.request("post", "/api/admin/apps/update_register_config", { + data + }); +}; diff --git a/frontend/src/api/admin/dashboard.ts b/frontend/src/api/admin/dashboard.ts new file mode 100644 index 0000000..41a3472 --- /dev/null +++ b/frontend/src/api/admin/dashboard.ts @@ -0,0 +1,48 @@ +import { http } from "@/utils/http"; + +export type SystemInfoResult = { + code: number; + msg: string; + data: { + version: string; + mode: boolean; + db_type: string; + uptime: string; + uptime_seconds: number; + }; +}; + +export type SystemStatsResult = { + code: number; + msg: string; + data: { + total_apps: number; + total_functions: number; + total_variables: number; + }; +}; + +export type LoginLogsResult = { + code: number; + msg: string; + data: { + total: number; + list: Array; + }; +}; + +export const getSystemInfo = () => { + return http.request("get", "/api/admin/system/info"); +}; + +export const getSystemStats = () => { + return http.request("get", "/api/admin/dashboard/stats"); +}; + +export const getLoginLogs = (params?: object) => { + return http.request( + "get", + "/api/admin/dashboard/login-logs", + { params } + ); +}; diff --git a/frontend/src/api/admin/function.ts b/frontend/src/api/admin/function.ts new file mode 100644 index 0000000..78ff79b --- /dev/null +++ b/frontend/src/api/admin/function.ts @@ -0,0 +1,30 @@ +import { http } from "@/utils/http"; + +type Result = { + code: number; + msg: string; + count?: number; + data?: any; +}; + +export const getFunctions = (params?: object) => { + return http.request("get", "/api/admin/function/list", { params }); +}; + +export const createFunction = (data?: object) => { + return http.request("post", "/api/admin/function/create", { data }); +}; + +export const updateFunction = (data?: object) => { + return http.request("post", "/api/admin/function/update", { data }); +}; + +export const deleteFunction = (data?: object) => { + return http.request("post", "/api/admin/function/delete", { data }); +}; + +export const batchDeleteFunctions = (data?: object) => { + return http.request("post", "/api/admin/function/batch_delete", { + data + }); +}; diff --git a/frontend/src/api/admin/logs.ts b/frontend/src/api/admin/logs.ts new file mode 100644 index 0000000..fd44221 --- /dev/null +++ b/frontend/src/api/admin/logs.ts @@ -0,0 +1,30 @@ +import { http } from "@/utils/http"; + +export type LogsResult = { + code: number; + message: string; + data: { + list: Array; + total: number; + }; +}; + +/** 获取登录日志列表 */ +export const getLoginLogsList = (params?: object) => { + return http.request("get", "/api/admin/login_logs", { params }); +}; + +/** 清空登录日志 */ +export const clearLoginLogs = () => { + return http.request("post", "/api/admin/login_logs/clear"); +}; + +/** 获取操作日志列表 */ +export const getOperationLogsList = (params?: object) => { + return http.request("get", "/api/admin/logs", { params }); +}; + +/** 清空操作日志 */ +export const clearOperationLogs = () => { + return http.request("post", "/api/admin/logs/clear"); +}; diff --git a/frontend/src/api/admin/portalNavigation.ts b/frontend/src/api/admin/portalNavigation.ts new file mode 100644 index 0000000..08b16be --- /dev/null +++ b/frontend/src/api/admin/portalNavigation.ts @@ -0,0 +1,94 @@ +import { http } from "@/utils/http"; + +export type PortalNavigationItem = { + id: number; + name: string; + type: "link" | "group"; + parent_id: number; + path: string; + sort: number; + is_home: boolean; + is_hidden: boolean; + is_external: boolean; + created_at?: string; + updated_at?: string; +}; + +export type PortalNavigationResult = { + code: number; + msg: string; + data: PortalNavigationItem[]; +}; + +export type PortalNavigationSavePayload = { + id?: number; + name: string; + type: "link" | "group"; + parent_id: number; + path: string; + sort: number; + is_home: boolean; + is_hidden: boolean; + is_external: boolean; +}; + +/** + * 获取门户导航列表 + * 返回后台导航设置页面使用的完整数据 + */ +export const getPortalNavigationList = () => { + return http.request("get", "/api/admin/portal-navigation"); +}; + +/** + * 获取公开门户导航列表 + * 返回门户首页用于展示的可见导航数据 + */ +export const getPublicPortalNavigationList = () => { + return http.request( + "get", + "/api/admin/portal-navigation/public" + ); +}; + +/** + * 创建门户导航 + * 提交新建导航数据到后台 + */ +export const createPortalNavigation = (data: PortalNavigationSavePayload) => { + return http.request( + "post", + "/api/admin/portal-navigation/create", + { + data + } + ); +}; + +/** + * 更新门户导航 + * 按ID提交编辑后的导航数据 + */ +export const updatePortalNavigation = (data: PortalNavigationSavePayload) => { + return http.request( + "post", + "/api/admin/portal-navigation/update", + { + data + } + ); +}; + +/** + * 删除门户导航 + * 按ID删除指定导航记录 + */ +export const deletePortalNavigation = (id: number) => { + return http.request( + "post", + "/api/admin/portal-navigation/delete", + { + data: { id } + } + ); +}; diff --git a/frontend/src/api/admin/profile.ts b/frontend/src/api/admin/profile.ts new file mode 100644 index 0000000..c6073cc --- /dev/null +++ b/frontend/src/api/admin/profile.ts @@ -0,0 +1,26 @@ +import { http } from "@/utils/http"; + +export type ProfileResult = { + code: number; + msg: string; + data: { + username: string; + [key: string]: any; + }; +}; + +export const getProfile = () => { + return http.request("get", "/api/admin/profile"); +}; + +export const updateProfile = (data: object) => { + return http.request("post", "/api/admin/profile/update", { + data + }); +}; + +export const updatePassword = (data: object) => { + return http.request("post", "/api/admin/profile/password", { + data + }); +}; diff --git a/frontend/src/api/admin/routes.ts b/frontend/src/api/admin/routes.ts new file mode 100644 index 0000000..ff02713 --- /dev/null +++ b/frontend/src/api/admin/routes.ts @@ -0,0 +1,14 @@ +// import { http } from "@/utils/http"; + +type Result = { + success: boolean; + data: Array; +}; + +export const getAsyncRoutes = () => { + // 模拟后端动态生成路由 (对接时可以替换为真实的后端 API) + return Promise.resolve({ + success: true, + data: [] + } as Result); +}; diff --git a/frontend/src/api/admin/settings.ts b/frontend/src/api/admin/settings.ts new file mode 100644 index 0000000..b3c1014 --- /dev/null +++ b/frontend/src/api/admin/settings.ts @@ -0,0 +1,24 @@ +import { http } from "@/utils/http"; + +export type SettingsResult = { + code: number; + msg: string; + data: Record; +}; + +export const getSettings = () => { + return http.request("get", "/api/admin/settings"); +}; + +export const updateSettings = (data: object) => { + return http.request("post", "/api/admin/settings/update", { + data + }); +}; + +export const generateKey = (type: string) => { + return http.request( + "post", + `/api/admin/settings/generate-key?type=${type}` + ); +}; diff --git a/frontend/src/api/admin/user.ts b/frontend/src/api/admin/user.ts new file mode 100644 index 0000000..daaa8ea --- /dev/null +++ b/frontend/src/api/admin/user.ts @@ -0,0 +1,85 @@ +import { http } from "@/utils/http"; + +export type UserResult = { + success: boolean; + data: { + /** 头像 */ + avatar: string; + /** 用户名 */ + username: string; + /** 昵称 */ + nickname: string; + /** 当前登录用户的角色 */ + roles: Array; + /** 按钮级别权限 */ + permissions: Array; + /** `token` */ + accessToken: string; + /** 用于调用刷新`accessToken`的接口时所需的`token` */ + refreshToken: string; + /** `accessToken`的过期时间(格式'xxxx/xx/xx xx:xx:xx') */ + expires: Date; + }; +}; + +export type RefreshTokenResult = { + success: boolean; + data: { + /** `token` */ + accessToken: string; + /** 用于调用刷新`accessToken`的接口时所需的`token` */ + refreshToken: string; + /** `accessToken`的过期时间(格式'xxxx/xx/xx xx:xx:xx') */ + expires: Date; + }; +}; + +/** 获取 CSRF Token */ +export const getCsrfToken = () => { + return http.request("get", "/api/admin/csrf"); +}; + +/** 登录 */ +export const getLogin = async (data: any) => { + try { + const res = await http.request("post", "/api/admin/login", { data }); + if (res.success || res.code === 0 || res.code === 200) { + return { + success: true, + data: { + avatar: res.data?.avatar || "", + username: res.data?.username || data.username, + nickname: res.data?.nickname || "管理员", + roles: res.data?.role === 0 ? ["super_admin"] : ["admin"], + permissions: ["*:*:*"], + accessToken: res.data?.accessToken || res.data?.token || "", + refreshToken: res.data?.refreshToken || "", + expires: res.data?.expires + ? new Date(res.data.expires) + : new Date(new Date().getTime() + 2 * 60 * 60 * 1000) + } + } as UserResult; + } else { + throw new Error(res.msg || res.message || "登录失败"); + } + } catch (error: any) { + if (error.response && error.response.data) { + throw new Error( + error.response.data.msg || error.response.data.message || "登录失败" + ); + } + throw error; + } +}; + +/** 获取验证码 */ +export const getCaptcha = () => { + return http.request("get", "/api/admin/captcha"); +}; + +/** 刷新`token` */ +export const refreshTokenApi = (data?: object) => { + return http.request("post", "/api/admin/refresh-token", { + data + }); +}; diff --git a/frontend/src/api/admin/variable.ts b/frontend/src/api/admin/variable.ts new file mode 100644 index 0000000..bf4d42d --- /dev/null +++ b/frontend/src/api/admin/variable.ts @@ -0,0 +1,30 @@ +import { http } from "@/utils/http"; + +type Result = { + code: number; + msg: string; + count?: number; + data?: any; +}; + +export const getVariables = (params?: object) => { + return http.request("get", "/api/admin/variable/list", { params }); +}; + +export const createVariable = (data?: object) => { + return http.request("post", "/api/admin/variable/create", { data }); +}; + +export const updateVariable = (data?: object) => { + return http.request("post", "/api/admin/variable/update", { data }); +}; + +export const deleteVariable = (data?: object) => { + return http.request("post", "/api/admin/variable/delete", { data }); +}; + +export const batchDeleteVariables = (data?: object) => { + return http.request("post", "/api/admin/variable/batch_delete", { + data + }); +}; diff --git a/frontend/src/api/install/index.ts b/frontend/src/api/install/index.ts new file mode 100644 index 0000000..e745688 --- /dev/null +++ b/frontend/src/api/install/index.ts @@ -0,0 +1,11 @@ +import { http } from "@/utils/http"; + +export type InstallResult = { + code: number; + msg: string; + data?: any; +}; + +export const submitInstall = (data: any) => { + return http.request("post", "/api/install", { data }); +}; diff --git a/frontend/src/assets/iconfont/iconfont.css b/frontend/src/assets/iconfont/iconfont.css new file mode 100644 index 0000000..9a153df --- /dev/null +++ b/frontend/src/assets/iconfont/iconfont.css @@ -0,0 +1,27 @@ +@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/frontend/src/assets/iconfont/iconfont.js b/frontend/src/assets/iconfont/iconfont.js new file mode 100755 index 0000000..b750f9d --- /dev/null +++ b/frontend/src/assets/iconfont/iconfont.js @@ -0,0 +1,68 @@ +((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.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/frontend/src/assets/iconfont/iconfont.json b/frontend/src/assets/iconfont/iconfont.json new file mode 100644 index 0000000..cec4806 --- /dev/null +++ b/frontend/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/frontend/src/assets/iconfont/iconfont.ttf b/frontend/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/frontend/src/assets/iconfont/iconfont.woff b/frontend/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/frontend/src/assets/login/avatar.svg b/frontend/src/assets/login/avatar.svg new file mode 100644 index 0000000..f4d2594 --- /dev/null +++ b/frontend/src/assets/login/avatar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/login/bg.png b/frontend/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/frontend/src/assets/status/403.svg b/frontend/src/assets/status/403.svg new file mode 100644 index 0000000..ba3ce29 --- /dev/null +++ b/frontend/src/assets/status/403.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/status/404.svg b/frontend/src/assets/status/404.svg new file mode 100644 index 0000000..aacb740 --- /dev/null +++ b/frontend/src/assets/status/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/status/500.svg b/frontend/src/assets/status/500.svg new file mode 100644 index 0000000..ea23a37 --- /dev/null +++ b/frontend/src/assets/status/500.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg/back_top.svg b/frontend/src/assets/svg/back_top.svg new file mode 100644 index 0000000..f8e6aa0 --- /dev/null +++ b/frontend/src/assets/svg/back_top.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg/dark.svg b/frontend/src/assets/svg/dark.svg new file mode 100644 index 0000000..b5c4d2d --- /dev/null +++ b/frontend/src/assets/svg/dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg/day.svg b/frontend/src/assets/svg/day.svg new file mode 100644 index 0000000..b760034 --- /dev/null +++ b/frontend/src/assets/svg/day.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg/enter_outlined.svg b/frontend/src/assets/svg/enter_outlined.svg new file mode 100644 index 0000000..ab4f9b6 --- /dev/null +++ b/frontend/src/assets/svg/enter_outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg/exit_screen.svg b/frontend/src/assets/svg/exit_screen.svg new file mode 100644 index 0000000..c431a05 --- /dev/null +++ b/frontend/src/assets/svg/exit_screen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg/full_screen.svg b/frontend/src/assets/svg/full_screen.svg new file mode 100644 index 0000000..b7452e4 --- /dev/null +++ b/frontend/src/assets/svg/full_screen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg/keyboard_esc.svg b/frontend/src/assets/svg/keyboard_esc.svg new file mode 100644 index 0000000..e128594 --- /dev/null +++ b/frontend/src/assets/svg/keyboard_esc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg/system.svg b/frontend/src/assets/svg/system.svg new file mode 100644 index 0000000..9ad39a5 --- /dev/null +++ b/frontend/src/assets/svg/system.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/table-bar/collapse.svg b/frontend/src/assets/table-bar/collapse.svg new file mode 100644 index 0000000..0823ae6 --- /dev/null +++ b/frontend/src/assets/table-bar/collapse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/table-bar/drag.svg b/frontend/src/assets/table-bar/drag.svg new file mode 100644 index 0000000..f477f16 --- /dev/null +++ b/frontend/src/assets/table-bar/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/table-bar/expand.svg b/frontend/src/assets/table-bar/expand.svg new file mode 100644 index 0000000..bb41c35 --- /dev/null +++ b/frontend/src/assets/table-bar/expand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/table-bar/refresh.svg b/frontend/src/assets/table-bar/refresh.svg new file mode 100644 index 0000000..140288c --- /dev/null +++ b/frontend/src/assets/table-bar/refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/table-bar/settings.svg b/frontend/src/assets/table-bar/settings.svg new file mode 100644 index 0000000..4ecd077 --- /dev/null +++ b/frontend/src/assets/table-bar/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/user.jpg b/frontend/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/frontend/src/components/ReCol/index.ts b/frontend/src/components/ReCol/index.ts new file mode 100644 index 0000000..7a6c937 --- /dev/null +++ b/frontend/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/frontend/src/components/ReDialog/index.ts b/frontend/src/components/ReDialog/index.ts new file mode 100644 index 0000000..b471764 --- /dev/null +++ b/frontend/src/components/ReDialog/index.ts @@ -0,0 +1,69 @@ +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[index].visible = false; + options.closeCallBack && options.closeCallBack({ options, index, args }); + + const closeDelay = options?.closeDelay ?? 200; + useTimeoutFn(() => { + dialogStore.value.splice(index, 1); + }, closeDelay); +}; + +/** + * @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#L12 + * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L22 + */ +const ReDialog = withInstall(reDialog); + +export type { EventType, ArgsType, DialogProps, ButtonProps, DialogOptions }; +export { + ReDialog, + dialogStore, + addDialog, + closeDialog, + updateDialog, + closeAllDialog +}; diff --git a/frontend/src/components/ReDialog/index.vue b/frontend/src/components/ReDialog/index.vue new file mode 100644 index 0000000..63cbbee --- /dev/null +++ b/frontend/src/components/ReDialog/index.vue @@ -0,0 +1,210 @@ + + + diff --git a/frontend/src/components/ReDialog/type.ts b/frontend/src/components/ReDialog/type.ts new file mode 100644 index 0000000..7efbe20 --- /dev/null +++ b/frontend/src/components/ReDialog/type.ts @@ -0,0 +1,275 @@ +import type { CSSProperties, VNode, Component } from "vue"; + +type DoneFn = (cancel?: boolean) => void; +type EventType = + | "open" + | "close" + | "openAutoFocus" + | "closeAutoFocus" + | "fullscreenCallBack"; +type ArgsType = { + /** `cancel` 点击取消按钮、`sure` 点击确定按钮、`close` 点击右上角关闭按钮或空白页或按下了esc键 */ + command: "cancel" | "sure" | "close"; +}; +type ButtonType = + | "primary" + | "success" + | "warning" + | "danger" + | "info" + | "text"; + +/** 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; +}; + +//element-plus.org/zh-CN/component/popconfirm.html#attributes +type Popconfirm = { + /** 标题 */ + title?: string; + /** 确定按钮文字 */ + confirmButtonText?: string; + /** 取消按钮文字 */ + cancelButtonText?: string; + /** 确定按钮类型,默认 `primary` */ + confirmButtonType?: ButtonType; + /** 取消按钮类型,默认 `text` */ + cancelButtonType?: ButtonType; + /** 自定义图标,默认 `QuestionFilled` */ + icon?: string | Component; + /** `Icon` 颜色,默认 `#f90` */ + iconColor?: string; + /** 是否隐藏 `Icon`,默认 `false` */ + hideIcon?: boolean; + /** 关闭时的延迟,默认 `200` */ + hideAfter?: number; + /** 是否将 `popover` 的下拉列表插入至 `body` 元素,默认 `true` */ + teleported?: boolean; + /** 当 `popover` 组件长时间不触发且 `persistent` 属性设置为 `false` 时, `popover` 将会被删除,默认 `false` */ + persistent?: boolean; + /** 弹层宽度,最小宽度 `150px`,默认 `150` */ + width?: string | number; +}; + +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; + /** 确定按钮的 `Popconfirm` 气泡确认框相关配置 */ + popconfirm?: Popconfirm; + /** 是否为加载中状态,默认 `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; + /** 确定按钮的 `Popconfirm` 气泡确认框相关配置 */ + popconfirm?: Popconfirm; + /** 点击确定按钮后是否开启 `loading` 加载动画 */ + sureBtnLoading?: 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` 关闭后的回调(只有点击右上角关闭按钮或空白页或按下了esc键关闭页面时才会触发) */ + close?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => void; + /** `Dialog` 关闭后的回调。 `args` 返回的 `command` 值解析:`cancel` 点击取消按钮、`sure` 点击确定按钮、`close` 点击右上角关闭按钮或空白页或按下了esc键 */ + closeCallBack?: ({ + options, + index, + args + }: { + options: DialogOptions; + index: number; + args: any; + }) => void; + /** 点击全屏按钮时的回调 */ + fullscreenCallBack?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => 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, + closeLoading + }: { + options: DialogOptions; + index: number; + /** 关闭确定按钮的 `loading` 加载动画 */ + closeLoading: Function; + } + ) => void; +} + +export type { EventType, ArgsType, DialogProps, ButtonProps, DialogOptions }; diff --git a/frontend/src/components/ReIcon/index.ts b/frontend/src/components/ReIcon/index.ts new file mode 100644 index 0000000..86efe72 --- /dev/null +++ b/frontend/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/frontend/src/components/ReIcon/src/hooks.ts b/frontend/src/components/ReIcon/src/hooks.ts new file mode 100644 index 0000000..57ef18d --- /dev/null +++ b/frontend/src/components/ReIcon/src/hooks.ts @@ -0,0 +1,63 @@ +import type { iconType } from "./types"; +import { h, defineComponent, type Component } from "vue"; +import { FontIcon, IconifyIconOnline, IconifyIconOffline } from "../index"; + +/** + * 支持 `iconfont`、自定义 `svg` 以及 `iconify` 中所有的图标 + * @see 点击查看文档图标篇 {@link https://pure-admin.cn/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 attrs ? h(icon, { ...attrs }) : icon; + } else if (typeof icon === "object") { + return defineComponent({ + name: "OfflineIcon", + render() { + return h(IconifyIconOffline, { + icon: icon, + ...attrs + }); + } + }); + } else { + // 通过是否存在 : 符号来判断是在线还是本地图标,存在即是在线图标,反之 + return defineComponent({ + name: "Icon", + render() { + if (!icon) return; + const IconifyIcon = icon.includes(":") + ? IconifyIconOnline + : IconifyIconOffline; + return h(IconifyIcon, { + icon, + ...attrs + }); + } + }); + } +} diff --git a/frontend/src/components/ReIcon/src/iconfont.ts b/frontend/src/components/ReIcon/src/iconfont.ts new file mode 100644 index 0000000..df60f25 --- /dev/null +++ b/frontend/src/components/ReIcon/src/iconfont.ts @@ -0,0 +1,47 @@ +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" + }, + { + default: () => [ + h("use", { + "xlink:href": `#${this.icon}` + }) + ] + } + ); + } else { + return h("i", { + class: `iconfont ${this.icon}`, + ...attrs + }); + } + } +}); diff --git a/frontend/src/components/ReIcon/src/iconifyIconOffline.ts b/frontend/src/components/ReIcon/src/iconifyIconOffline.ts new file mode 100644 index 0000000..e5782b2 --- /dev/null +++ b/frontend/src/components/ReIcon/src/iconifyIconOffline.ts @@ -0,0 +1,47 @@ +import { h, defineComponent } from "vue"; +import { Icon as IconifyIcon, addIcon } from "@iconify/vue/dist/offline"; + +// Iconify Icon在Vue里本地使用(用于内网环境) +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; + if (typeof this.icon === "string") { + return h( + IconifyIcon, + { + icon: this.icon, + "aria-hidden": false, + style: attrs?.style + ? Object.assign(attrs.style, { outline: "none" }) + : { outline: "none" }, + ...attrs + }, + { + default: () => [] + } + ); + } else { + return h( + this.icon, + { + "aria-hidden": false, + style: attrs?.style + ? Object.assign(attrs.style, { outline: "none" }) + : { outline: "none" }, + ...attrs + }, + { + default: () => [] + } + ); + } + } +}); diff --git a/frontend/src/components/ReIcon/src/iconifyIconOnline.ts b/frontend/src/components/ReIcon/src/iconifyIconOnline.ts new file mode 100644 index 0000000..8467e07 --- /dev/null +++ b/frontend/src/components/ReIcon/src/iconifyIconOnline.ts @@ -0,0 +1,31 @@ +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}`, + "aria-hidden": false, + style: attrs?.style + ? Object.assign(attrs.style, { outline: "none" }) + : { outline: "none" }, + ...attrs + }, + { + default: () => [] + } + ); + } +}); diff --git a/frontend/src/components/ReIcon/src/offlineIcon.ts b/frontend/src/components/ReIcon/src/offlineIcon.ts new file mode 100644 index 0000000..e5194d8 --- /dev/null +++ b/frontend/src/components/ReIcon/src/offlineIcon.ts @@ -0,0 +1,29 @@ +// 这里存放本地图标,在 src/layout/index.vue 文件中加载,避免在首启动加载 +import { getSvgInfo } from "@pureadmin/utils"; +import { addIcon } from "@iconify/vue/dist/offline"; + +// https://icon-sets.iconify.design/ep/?keyword=ep +import EpHomeFilled from "~icons/ep/home-filled?raw"; +import EpMonitor from "~icons/ep/monitor?raw"; +import EpSetting from "~icons/ep/setting?raw"; +import EpUser from "~icons/ep/user?raw"; + +// https://icon-sets.iconify.design/ri/?keyword=ri +import RiSearchLine from "~icons/ri/search-line?raw"; +import RiInformationLine from "~icons/ri/information-line?raw"; + +const icons = [ + // Element Plus Icon: https://github.com/element-plus/element-plus-icons + ["ep/home-filled", EpHomeFilled], + ["ep/monitor", EpMonitor], + ["ep/setting", EpSetting], + ["ep/user", EpUser], + // Remix Icon: https://github.com/Remix-Design/RemixIcon + ["ri/search-line", RiSearchLine], + ["ri/information-line", RiInformationLine] +]; + +// 本地菜单图标,后端在路由的 icon 中返回对应的图标字符串并且前端在此处使用 addIcon 添加即可渲染菜单图标 +icons.forEach(([name, icon]) => { + addIcon(name as string, getSvgInfo(icon as string)); +}); diff --git a/frontend/src/components/ReIcon/src/types.ts b/frontend/src/components/ReIcon/src/types.ts new file mode 100644 index 0000000..000bdc5 --- /dev/null +++ b/frontend/src/components/ReIcon/src/types.ts @@ -0,0 +1,20 @@ +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; + // svg 需要什么SVG属性自行添加 + fill?: string; + // all icon + style?: object; +} diff --git a/frontend/src/components/RePerms/index.ts b/frontend/src/components/RePerms/index.ts new file mode 100644 index 0000000..3701c3c --- /dev/null +++ b/frontend/src/components/RePerms/index.ts @@ -0,0 +1,5 @@ +import perms from "./src/perms"; + +const Perms = perms; + +export { Perms }; diff --git a/frontend/src/components/RePerms/src/perms.tsx b/frontend/src/components/RePerms/src/perms.tsx new file mode 100644 index 0000000..da01bc1 --- /dev/null +++ b/frontend/src/components/RePerms/src/perms.tsx @@ -0,0 +1,20 @@ +import { defineComponent, Fragment } from "vue"; +import { hasPerms } from "@/utils/auth"; + +export default defineComponent({ + name: "Perms", + props: { + value: { + type: undefined, + default: [] + } + }, + setup(props, { slots }) { + return () => { + if (!slots) return null; + return hasPerms(props.value) ? ( + {slots.default?.()} + ) : null; + }; + } +}); diff --git a/frontend/src/components/RePureTableBar/index.ts b/frontend/src/components/RePureTableBar/index.ts new file mode 100644 index 0000000..31b8a16 --- /dev/null +++ b/frontend/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/frontend/src/components/RePureTableBar/src/bar.tsx b/frontend/src/components/RePureTableBar/src/bar.tsx new file mode 100644 index 0000000..dbb2923 --- /dev/null +++ b/frontend/src/components/RePureTableBar/src/bar.tsx @@ -0,0 +1,408 @@ +import Sortable from "sortablejs"; +import { useEpThemeStoreHook } from "@/store/modules/epTheme"; +import { + type PropType, + ref, + unref, + computed, + nextTick, + defineComponent, + getCurrentInstance +} from "vue"; +import { + delay, + cloneDeep, + isBoolean, + isFunction, + getKeyList +} from "@pureadmin/utils"; + +import Fullscreen from "~icons/ri/fullscreen-fill"; +import ExitFullscreen from "~icons/ri/fullscreen-exit-fill"; +import DragIcon from "@/assets/table-bar/drag.svg?component"; +import ExpandIcon from "@/assets/table-bar/expand.svg?component"; +import RefreshIcon from "@/assets/table-bar/refresh.svg?component"; +import SettingIcon from "@/assets/table-bar/settings.svg?component"; +import CollapseIcon from "@/assets/table-bar/collapse.svg?component"; + +const props = { + /** 头部最左边的标题 */ + title: { + type: String, + default: "列表" + }, + /** 对于树形表格,如果想启用展开和折叠功能,传入当前表格的ref即可 */ + tableRef: { + type: Object as PropType + }, + /** 需要展示的列 */ + columns: { + type: Array as PropType, + default: () => [] + }, + isExpandAll: { + type: Boolean, + default: true + }, + tableKey: { + type: [String, Number] as PropType, + default: "0" + } +}; + +export default defineComponent({ + name: "PureTableBar", + props, + emits: ["refresh", "fullscreen"], + setup(props, { emit, slots, attrs }) { + const size = ref("default"); + const loading = ref(false); + const checkAll = ref(true); + const isFullscreen = ref(false); + const isIndeterminate = ref(false); + const instance = getCurrentInstance()!; + const isExpandAll = ref(props.isExpandAll); + 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 withEmptyFormatter = (columns: any[]) => { + return columns.map(col => { + if (col.type === "selection" || col.type === "index" || col.type === "expand") return col; + if (col.slot || col.cellRenderer) return col; + + const originalFormatter = col.formatter; + col.formatter = (row: any, column: any, cellValue: any, index: number) => { + let val = originalFormatter ? originalFormatter(row, column, cellValue, index) : cellValue; + return (val === "" || val === null || val === undefined) ? "-" : val; + }; + return col; + }); + }; + + const dynamicColumns = ref(withEmptyFormatter(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-hidden" + ]; + }); + + 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 onFullscreen() { + isFullscreen.value = !isFullscreen.value; + emit("fullscreen", isFullscreen.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[]) { + checkedColumns.value = value; + 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 = withEmptyFormatter(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 = ( + instance?.proxy?.$refs[`GroupRef${unref(props.tableKey)}`] as any + ).$el.firstElementChild; + 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 rendTippyProps = (content: string) => { + // https://vue-tippy.netlify.app/props + return { + content, + offset: [0, 18], + duration: [300, 0], + followCursor: true, + hideOnClick: "toggle" + }; + }; + + const reference = { + reference: () => ( + + ) + }; + + 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, index) => { + return ( +
+ void; + }) => rowDrop(event)} + /> + + handleCheckColumnListChange(value, item) + } + > + + {item} + + +
+ ); + })} +
+
+
+
+
+ + + onFullscreen()} + /> +
+
+ {slots.default({ + size: size.value, + dynamicColumns: dynamicColumns.value + })} +
+ + ); + } +}); diff --git a/frontend/src/components/ReSegmented/index.ts b/frontend/src/components/ReSegmented/index.ts new file mode 100644 index 0000000..de4253c --- /dev/null +++ b/frontend/src/components/ReSegmented/index.ts @@ -0,0 +1,8 @@ +import reSegmented from "./src/index"; +import { withInstall } from "@pureadmin/utils"; + +/** 分段控制器组件 */ +export const ReSegmented = withInstall(reSegmented); + +export default ReSegmented; +export type { OptionsType } from "./src/type"; diff --git a/frontend/src/components/ReSegmented/src/index.css b/frontend/src/components/ReSegmented/src/index.css new file mode 100644 index 0000000..4fe79ef --- /dev/null +++ b/frontend/src/components/ReSegmented/src/index.css @@ -0,0 +1,156 @@ +.pure-segmented { + --pure-control-padding-horizontal: 12px; + --pure-control-padding-horizontal-sm: 8px; + --pure-segmented-track-padding: 2px; + --pure-segmented-line-width: 1px; + + --pure-segmented-border-radius-small: 4px; + --pure-segmented-border-radius-base: 6px; + --pure-segmented-border-radius-large: 8px; + + box-sizing: border-box; + display: inline-block; + padding: var(--pure-segmented-track-padding); + font-size: var(--el-font-size-base); + color: rgba(0, 0, 0, 0.65); + background-color: rgb(0 0 0 / 4%); + border-radius: var(--pure-segmented-border-radius-base); +} + +.pure-segmented-block { + display: flex; +} + +.pure-segmented-block .pure-segmented-item { + flex: 1; + min-width: 0; +} + +.pure-segmented-block .pure-segmented-item > .pure-segmented-item-label > span { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +/* small */ +.pure-segmented.pure-segmented--small { + border-radius: var(--pure-segmented-border-radius-small); +} +.pure-segmented.pure-segmented--small .pure-segmented-item { + border-radius: var(--el-border-radius-small); +} +.pure-segmented.pure-segmented--small .pure-segmented-item > div { + min-height: calc( + var(--el-component-size-small) - var(--pure-segmented-track-padding) * 2 + ); + line-height: calc( + var(--el-component-size-small) - var(--pure-segmented-track-padding) * 2 + ); + padding: 0 + calc( + var(--pure-control-padding-horizontal-sm) - + var(--pure-segmented-line-width) + ); +} + +/* large */ +.pure-segmented.pure-segmented--large { + border-radius: var(--pure-segmented-border-radius-large); +} +.pure-segmented.pure-segmented--large .pure-segmented-item { + border-radius: calc( + var(--el-border-radius-base) + var(--el-border-radius-small) + ); +} +.pure-segmented.pure-segmented--large .pure-segmented-item > div { + min-height: calc( + var(--el-component-size-large) - var(--pure-segmented-track-padding) * 2 + ); + line-height: calc( + var(--el-component-size-large) - var(--pure-segmented-track-padding) * 2 + ); + padding: 0 + calc( + var(--pure-control-padding-horizontal) - var(--pure-segmented-line-width) + ); + font-size: var(--el-font-size-medium); +} + +/* default */ +.pure-segmented-item { + position: relative; + text-align: center; + cursor: pointer; + border-radius: var(--el-border-radius-base); + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); +} +.pure-segmented .pure-segmented-item > div { + min-height: calc( + var(--el-component-size) - var(--pure-segmented-track-padding) * 2 + ); + line-height: calc( + var(--el-component-size) - var(--pure-segmented-track-padding) * 2 + ); + padding: 0 + calc( + var(--pure-control-padding-horizontal) - var(--pure-segmented-line-width) + ); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.pure-segmented-group { + position: relative; + display: flex; + align-items: stretch; + justify-items: flex-start; + width: 100%; +} + +.pure-segmented-item-selected { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + display: none; + width: 0; + height: 100%; + padding: 4px 0; + background-color: #fff; + border-radius: 4px; + box-shadow: + 0 2px 8px -2px rgb(0 0 0 / 5%), + 0 1px 4px -1px rgb(0 0 0 / 7%), + 0 0 1px rgb(0 0 0 / 7%); + transition: + transform 0.5s cubic-bezier(0.645, 0.045, 0.355, 1), + width 0.5s cubic-bezier(0.645, 0.045, 0.355, 1); + will-change: transform, width; +} + +.pure-segmented-item > input { + position: absolute; + inset-block-start: 0; + inset-inline-start: 0; + width: 0; + height: 0; + opacity: 0; + pointer-events: none; +} + +.pure-segmented-item-label { + display: flex; + align-items: center; + justify-content: center; +} + +.pure-segmented-item-icon svg { + width: 16px; + height: 16px; +} + +.pure-segmented-item-disabled { + color: rgba(0, 0, 0, 0.25); + cursor: not-allowed; +} diff --git a/frontend/src/components/ReSegmented/src/index.tsx b/frontend/src/components/ReSegmented/src/index.tsx new file mode 100644 index 0000000..39580ed --- /dev/null +++ b/frontend/src/components/ReSegmented/src/index.tsx @@ -0,0 +1,216 @@ +import "./index.css"; +import type { OptionsType } from "./type"; +import { useRenderIcon } from "@/components/ReIcon/src/hooks"; +import { + useDark, + isNumber, + isFunction, + useResizeObserver +} from "@pureadmin/utils"; +import { + type PropType, + h, + ref, + toRef, + watch, + nextTick, + defineComponent, + getCurrentInstance +} from "vue"; + +const props = { + options: { + type: Array, + default: () => [] + }, + /** 默认选中,按照第一个索引为 `0` 的模式,可选(`modelValue`只有传`number`类型时才为响应式) */ + modelValue: { + type: undefined, + require: false, + default: "0" + }, + /** 将宽度调整为父元素宽度 */ + block: { + type: Boolean, + default: false + }, + /** 控件尺寸 */ + size: { + type: String as PropType<"small" | "default" | "large"> + }, + /** 是否全局禁用,默认 `false` */ + disabled: { + type: Boolean, + default: false + }, + /** 当内容发生变化时,设置 `resize` 可使其自适应容器位置 */ + resize: { + type: Boolean, + default: false + } +}; + +export default defineComponent({ + name: "ReSegmented", + props, + emits: ["change", "update:modelValue"], + setup(props, { emit }) { + const width = ref(0); + const translateX = ref(0); + const { isDark } = useDark(); + const initStatus = ref(false); + const curMouseActive = ref(-1); + const segmentedItembg = ref(""); + const instance = getCurrentInstance()!; + const curIndex = isNumber(props.modelValue) + ? toRef(props, "modelValue") + : ref(0); + + function handleChange({ option, index }, event: Event) { + if (props.disabled || option.disabled) return; + event.preventDefault(); + isNumber(props.modelValue) + ? emit("update:modelValue", index) + : (curIndex.value = index); + segmentedItembg.value = ""; + emit("change", { index, option }); + } + + function handleMouseenter({ option, index }, event: Event) { + if (props.disabled) return; + event.preventDefault(); + curMouseActive.value = index; + if (option.disabled || curIndex.value === index) { + segmentedItembg.value = ""; + } else { + segmentedItembg.value = isDark.value + ? "#1f1f1f" + : "rgba(0, 0, 0, 0.06)"; + } + } + + function handleMouseleave(_, event: Event) { + if (props.disabled) return; + event.preventDefault(); + curMouseActive.value = -1; + } + + function handleInit(index = curIndex.value) { + nextTick(() => { + const curLabelRef = instance?.proxy?.$refs[`labelRef${index}`] as ElRef; + if (!curLabelRef) return; + width.value = curLabelRef.clientWidth; + translateX.value = curLabelRef.offsetLeft; + initStatus.value = true; + }); + } + + function handleResizeInit() { + useResizeObserver(".pure-segmented", () => { + nextTick(() => { + handleInit(curIndex.value); + }); + }); + } + + (props.block || props.resize) && handleResizeInit(); + + watch( + () => curIndex.value, + index => { + nextTick(() => { + handleInit(index); + }); + }, + { + immediate: true + } + ); + + watch(() => props.size, handleResizeInit, { + immediate: true + }); + + const rendLabel = () => { + return props.options.map((option, index) => { + return ( + + ); + }); + }; + + return () => ( +
+
+
+ {rendLabel()} +
+
+ ); + } +}); diff --git a/frontend/src/components/ReSegmented/src/type.ts b/frontend/src/components/ReSegmented/src/type.ts new file mode 100644 index 0000000..6c29889 --- /dev/null +++ b/frontend/src/components/ReSegmented/src/type.ts @@ -0,0 +1,20 @@ +import type { VNode, Component } from "vue"; +import type { iconType } from "@/components/ReIcon/src/types.ts"; + +export interface OptionsType { + /** 文字 */ + label?: string | (() => VNode | Component); + /** + * @description 图标,采用平台内置的 `useRenderIcon` 函数渲染 + * @see {@link 用法参考 https://pure-admin.cn/pages/icon/#%E9%80%9A%E7%94%A8%E5%9B%BE%E6%A0%87-userendericon-hooks } + */ + icon?: string | Component; + /** 图标属性、样式配置 */ + iconAttrs?: iconType; + /** 值 */ + value?: any; + /** 是否禁用 */ + disabled?: boolean; + /** `tooltip` 提示 */ + tip?: string; +} diff --git a/frontend/src/components/ReText/index.ts b/frontend/src/components/ReText/index.ts new file mode 100644 index 0000000..6213566 --- /dev/null +++ b/frontend/src/components/ReText/index.ts @@ -0,0 +1,7 @@ +import reText from "./src/index.vue"; +import { withInstall } from "@pureadmin/utils"; + +/** 支持`Tooltip`提示的文本省略组件 */ +export const ReText = withInstall(reText); + +export default ReText; diff --git a/frontend/src/components/ReText/src/index.vue b/frontend/src/components/ReText/src/index.vue new file mode 100644 index 0000000..4c4a232 --- /dev/null +++ b/frontend/src/components/ReText/src/index.vue @@ -0,0 +1,69 @@ + + + diff --git a/frontend/src/config/index.ts b/frontend/src/config/index.ts new file mode 100644 index 0000000..0b347f2 --- /dev/null +++ b/frontend/src/config/index.ts @@ -0,0 +1,116 @@ +import axios from "axios"; +import type { App } from "vue"; + +let config: object = {}; +const setConfig = (cfg?: unknown) => { + config = Object.assign(config, cfg); +}; + +const getConfig = (key?: string): PlatformConfigs => { + 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 getPlatformConfig = async (app: App): Promise => { + app.config.globalProperties.$config = getConfig(); + return axios({ + method: "get", + url: `/api/admin/settings/public` + }) + .then(({ data: res }) => { + let $config = app.config.globalProperties.$config; + // 自动注入系统配置 + if (app && $config && res && res.code === 0 && res.data) { + const backendConfig = res.data; + const formattedConfig: any = {}; + + // 将后端的下划线命名(platform_xxx)转换为前端需要的帕斯卡命名(PascalCase) + for (const key in backendConfig) { + if (key.startsWith("platform_")) { + const camelKey = key + .replace("platform_", "") + .split("_") + .map(word => word.charAt(0).toUpperCase() + word.slice(1)) + .join(""); + + let val = backendConfig[key]; + // 转换布尔值 0/1 到 true/false + if (val === "1") val = true; + if (val === "0") val = false; + // 转换数字类型 + if ( + camelKey === "MenuSearchHistory" || + camelKey === "MaxTagsLevel" + ) { + val = Number(val); + } + + formattedConfig[camelKey] = val; + } else if (key === "site_title") { + // 将后端的 site_title 映射为前端全局配置中的 Title + formattedConfig["Title"] = backendConfig[key]; + } else if (key === "site_description") { + formattedConfig["Description"] = backendConfig[key]; + } else if (key === "site_keywords") { + formattedConfig["Keywords"] = backendConfig[key]; + } else if (key === "site_logo") { + formattedConfig["Logo"] = backendConfig[key]; + } else if (key === "contact_email") { + formattedConfig["ContactEmail"] = backendConfig[key]; + } else if (key === "maintenance_mode") { + formattedConfig["MaintenanceMode"] = backendConfig[key] === "1"; + } else if (key === "footer_text") { + formattedConfig["FooterText"] = backendConfig[key]; + } else if (key === "icp_record") { + formattedConfig["IcpRecord"] = backendConfig[key]; + } else if (key === "icp_record_link") { + formattedConfig["IcpRecordLink"] = backendConfig[key]; + } else if (key === "psb_record") { + formattedConfig["PsbRecord"] = backendConfig[key]; + } else if (key === "psb_record_link") { + formattedConfig["PsbRecordLink"] = backendConfig[key]; + } + } + + $config = Object.assign($config, formattedConfig); + app.config.globalProperties.$config = $config; + // 设置全局配置 + setConfig($config); + } + return $config; + }) + .catch(error => { + // 检查是否是因为未初始化导致的403 + if ( + error.response && + error.response.status === 403 && + error.response.data?.msg?.includes("未初始化") + ) { + // 重定向到安装页面 + if (!window.location.hash.includes("/install")) { + window.location.hash = "/install"; + } + return app.config.globalProperties.$config; + } + throw "获取全局配置失败,请检查后端接口或数据库配置"; + }); +}; + +/** 本地响应式存储的命名空间 */ +const responsiveStorageNameSpace = () => getConfig().ResponsiveStorageNameSpace; + +export { getConfig, setConfig, responsiveStorageNameSpace }; diff --git a/frontend/src/directives/auth/index.ts b/frontend/src/directives/auth/index.ts new file mode 100644 index 0000000..2fc6490 --- /dev/null +++ b/frontend/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/frontend/src/directives/copy/index.ts b/frontend/src/directives/copy/index.ts new file mode 100644 index 0000000..b71fa19 --- /dev/null +++ b/frontend/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"; + +export 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/frontend/src/directives/index.ts b/frontend/src/directives/index.ts new file mode 100644 index 0000000..d01fe71 --- /dev/null +++ b/frontend/src/directives/index.ts @@ -0,0 +1,6 @@ +export * from "./auth"; +export * from "./copy"; +export * from "./longpress"; +export * from "./optimize"; +export * from "./perms"; +export * from "./ripple"; diff --git a/frontend/src/directives/longpress/index.ts b/frontend/src/directives/longpress/index.ts new file mode 100644 index 0000000..4eec6a2 --- /dev/null +++ b/frontend/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/frontend/src/directives/optimize/index.ts b/frontend/src/directives/optimize/index.ts new file mode 100644 index 0000000..7b92538 --- /dev/null +++ b/frontend/src/directives/optimize/index.ts @@ -0,0 +1,68 @@ +import { + isArray, + throttle, + debounce, + isObject, + isFunction +} from "@pureadmin/utils"; +import { useEventListener } from "@vueuse/core"; +import type { Directive, DirectiveBinding } from "vue"; + +export interface OptimizeOptions { + /** 事件名 */ + event: string; + /** 事件触发的方法 */ + fn: (...params: any) => any; + /** 是否立即执行 */ + immediate?: boolean; + /** 防抖或节流的延迟时间(防抖默认:`200`毫秒、节流默认:`1000`毫秒) */ + timeout?: number; + /** 传递的参数 */ + params?: any; +} + +/** 防抖(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/frontend/src/directives/perms/index.ts b/frontend/src/directives/perms/index.ts new file mode 100644 index 0000000..073c918 --- /dev/null +++ b/frontend/src/directives/perms/index.ts @@ -0,0 +1,15 @@ +import { hasPerms } from "@/utils/auth"; +import type { Directive, DirectiveBinding } from "vue"; + +export const perms: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding>) { + const { value } = binding; + if (value) { + !hasPerms(value) && el.parentNode?.removeChild(el); + } else { + throw new Error( + "[Directive: perms]: need perms! Like v-perms=\"['btn.add','btn.edit']\"" + ); + } + } +}; diff --git a/frontend/src/directives/ripple/index.scss b/frontend/src/directives/ripple/index.scss new file mode 100644 index 0000000..2958920 --- /dev/null +++ b/frontend/src/directives/ripple/index.scss @@ -0,0 +1,48 @@ +/* stylelint-disable-next-line scss/dollar-variable-colon-space-after */ +$ripple-animation-transition-in: + transform 0.4s cubic-bezier(0, 0, 0.2, 1), + opacity 0.2s cubic-bezier(0, 0, 0.2, 1) !default; +$ripple-animation-transition-out: opacity 0.5s cubic-bezier(0, 0, 0.2, 1) !default; +$ripple-animation-visible-opacity: 0.25 !default; + +.v-ripple { + &__container { + position: absolute; + top: 0; + left: 0; + z-index: 0; + width: 100%; + height: 100%; + contain: strict; + overflow: hidden; + pointer-events: none; + border-radius: inherit; + } + + &__animation { + position: absolute; + top: 0; + left: 0; + overflow: hidden; + pointer-events: none; + background: currentcolor; + border-radius: 50%; + opacity: 0; + will-change: transform, opacity; + + &--enter { + opacity: 0; + transition: none; + } + + &--in { + opacity: $ripple-animation-visible-opacity; + transition: $ripple-animation-transition-in; + } + + &--out { + opacity: 0; + transition: $ripple-animation-transition-out; + } + } +} diff --git a/frontend/src/directives/ripple/index.ts b/frontend/src/directives/ripple/index.ts new file mode 100644 index 0000000..8aef2d1 --- /dev/null +++ b/frontend/src/directives/ripple/index.ts @@ -0,0 +1,229 @@ +import "./index.scss"; +import { isObject } from "@pureadmin/utils"; +import type { Directive, DirectiveBinding } from "vue"; + +export interface RippleOptions { + /** 自定义`ripple`颜色,支持`tailwindcss` */ + class?: string; + /** 是否从中心扩散 */ + center?: boolean; + circle?: boolean; +} + +export interface RippleDirectiveBinding + extends Omit { + value?: boolean | { class: string }; + modifiers: { + center?: boolean; + circle?: boolean; + }; +} + +function transform(el: HTMLElement, value: string) { + el.style.transform = value; + el.style.webkitTransform = value; +} + +const calculate = ( + e: PointerEvent, + el: HTMLElement, + value: RippleOptions = {} +) => { + const offset = el.getBoundingClientRect(); + + // 获取点击位置距离 el 的垂直和水平距离 + const localX = e.clientX - offset.left; + const localY = e.clientY - offset.top; + + let radius = 0; + let scale = 0.3; + // 计算点击位置到 el 顶点最远距离,即为圆的最大半径(勾股定理) + if (el._ripple?.circle) { + scale = 0.15; + radius = el.clientWidth / 2; + radius = value.center + ? radius + : radius + Math.sqrt((localX - radius) ** 2 + (localY - radius) ** 2) / 4; + } else { + radius = Math.sqrt(el.clientWidth ** 2 + el.clientHeight ** 2) / 2; + } + + // 中心点坐标 + const centerX = `${(el.clientWidth - radius * 2) / 2}px`; + const centerY = `${(el.clientHeight - radius * 2) / 2}px`; + + // 点击位置坐标 + const x = value.center ? centerX : `${localX - radius}px`; + const y = value.center ? centerY : `${localY - radius}px`; + + return { radius, scale, x, y, centerX, centerY }; +}; + +const ripples = { + show(e: PointerEvent, el: HTMLElement, value: RippleOptions = {}) { + if (!el?._ripple?.enabled) { + return; + } + + // 创建 ripple 元素和 ripple 父元素 + const container = document.createElement("span"); + const animation = document.createElement("span"); + + container.appendChild(animation); + container.className = "v-ripple__container"; + + if (value.class) { + container.className += ` ${value.class}`; + } + + const { radius, scale, x, y, centerX, centerY } = calculate(e, el, value); + + // ripple 圆大小 + const size = `${radius * 2}px`; + + animation.className = "v-ripple__animation"; + animation.style.width = size; + animation.style.height = size; + + el.appendChild(container); + + // 获取目标元素样式表 + const computed = window.getComputedStyle(el); + // 防止 position 被覆盖导致 ripple 位置有问题 + if (computed && computed.position === "static") { + el.style.position = "relative"; + el.dataset.previousPosition = "static"; + } + + animation.classList.add("v-ripple__animation--enter"); + animation.classList.add("v-ripple__animation--visible"); + transform( + animation, + `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})` + ); + animation.dataset.activated = String(performance.now()); + + setTimeout(() => { + animation.classList.remove("v-ripple__animation--enter"); + animation.classList.add("v-ripple__animation--in"); + transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`); + }, 0); + }, + + hide(el: HTMLElement | null) { + if (!el?._ripple?.enabled) return; + + const ripples = el.getElementsByClassName("v-ripple__animation"); + + if (ripples.length === 0) return; + const animation = ripples[ripples.length - 1] as HTMLElement; + + if (animation.dataset.isHiding) return; + else animation.dataset.isHiding = "true"; + + const diff = performance.now() - Number(animation.dataset.activated); + const delay = Math.max(250 - diff, 0); + + setTimeout(() => { + animation.classList.remove("v-ripple__animation--in"); + animation.classList.add("v-ripple__animation--out"); + + setTimeout(() => { + const ripples = el.getElementsByClassName("v-ripple__animation"); + if (ripples.length === 1 && el.dataset.previousPosition) { + el.style.position = el.dataset.previousPosition; + delete el.dataset.previousPosition; + } + + if (animation.parentNode?.parentNode === el) + el.removeChild(animation.parentNode); + }, 300); + }, delay); + } +}; + +function isRippleEnabled(value: any): value is true { + return typeof value === "undefined" || !!value; +} + +function rippleShow(e: PointerEvent) { + const value: RippleOptions = {}; + const element = e.currentTarget as HTMLElement | undefined; + + if (!element?._ripple || element._ripple.touched) return; + + value.center = element._ripple.centered; + if (element._ripple.class) { + value.class = element._ripple.class; + } + + ripples.show(e, element, value); +} + +function rippleHide(e: Event) { + const element = e.currentTarget as HTMLElement | null; + if (!element?._ripple) return; + + window.setTimeout(() => { + if (element._ripple) { + element._ripple.touched = false; + } + }); + ripples.hide(element); +} + +function updateRipple( + el: HTMLElement, + binding: RippleDirectiveBinding, + wasEnabled: boolean +) { + const { value, modifiers } = binding; + const enabled = isRippleEnabled(value); + if (!enabled) { + ripples.hide(el); + } + + el._ripple = el._ripple ?? {}; + el._ripple.enabled = enabled; + el._ripple.centered = modifiers.center; + el._ripple.circle = modifiers.circle; + if (isObject(value) && value.class) { + el._ripple.class = value.class; + } + + if (enabled && !wasEnabled) { + el.addEventListener("pointerdown", rippleShow); + el.addEventListener("pointerup", rippleHide); + } else if (!enabled && wasEnabled) { + removeListeners(el); + } +} + +function removeListeners(el: HTMLElement) { + el.removeEventListener("pointerdown", rippleShow); + el.removeEventListener("pointerup", rippleHide); +} + +function mounted(el: HTMLElement, binding: RippleDirectiveBinding) { + updateRipple(el, binding, false); +} + +function unmounted(el: HTMLElement) { + delete el._ripple; + removeListeners(el); +} + +function updated(el: HTMLElement, binding: RippleDirectiveBinding) { + if (binding.value === binding.oldValue) { + return; + } + + const wasEnabled = isRippleEnabled(binding.oldValue); + updateRipple(el, binding, wasEnabled); +} + +export const Ripple: Directive = { + mounted, + unmounted, + updated +}; diff --git a/frontend/src/layout/components/lay-content/index.vue b/frontend/src/layout/components/lay-content/index.vue new file mode 100644 index 0000000..d6f8694 --- /dev/null +++ b/frontend/src/layout/components/lay-content/index.vue @@ -0,0 +1,221 @@ + + + + + diff --git a/frontend/src/layout/components/lay-footer/index.vue b/frontend/src/layout/components/lay-footer/index.vue new file mode 100644 index 0000000..7a56e4f --- /dev/null +++ b/frontend/src/layout/components/lay-footer/index.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/frontend/src/layout/components/lay-frame/index.vue b/frontend/src/layout/components/lay-frame/index.vue new file mode 100644 index 0000000..b2bb9d5 --- /dev/null +++ b/frontend/src/layout/components/lay-frame/index.vue @@ -0,0 +1,79 @@ + + diff --git a/frontend/src/layout/components/lay-navbar/index.vue b/frontend/src/layout/components/lay-navbar/index.vue new file mode 100644 index 0000000..59102c9 --- /dev/null +++ b/frontend/src/layout/components/lay-navbar/index.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/frontend/src/layout/components/lay-panel/index.vue b/frontend/src/layout/components/lay-panel/index.vue new file mode 100644 index 0000000..7c3e2b4 --- /dev/null +++ b/frontend/src/layout/components/lay-panel/index.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/frontend/src/layout/components/lay-search/components/SearchFooter.vue b/frontend/src/layout/components/lay-search/components/SearchFooter.vue new file mode 100644 index 0000000..ebac0e7 --- /dev/null +++ b/frontend/src/layout/components/lay-search/components/SearchFooter.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/frontend/src/layout/components/lay-search/components/SearchHistory.vue b/frontend/src/layout/components/lay-search/components/SearchHistory.vue new file mode 100644 index 0000000..dd5875a --- /dev/null +++ b/frontend/src/layout/components/lay-search/components/SearchHistory.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/frontend/src/layout/components/lay-search/components/SearchHistoryItem.vue b/frontend/src/layout/components/lay-search/components/SearchHistoryItem.vue new file mode 100644 index 0000000..b94ccde --- /dev/null +++ b/frontend/src/layout/components/lay-search/components/SearchHistoryItem.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/frontend/src/layout/components/lay-search/components/SearchModal.vue b/frontend/src/layout/components/lay-search/components/SearchModal.vue new file mode 100644 index 0000000..a5f4a09 --- /dev/null +++ b/frontend/src/layout/components/lay-search/components/SearchModal.vue @@ -0,0 +1,340 @@ + + + + + diff --git a/frontend/src/layout/components/lay-search/components/SearchResult.vue b/frontend/src/layout/components/lay-search/components/SearchResult.vue new file mode 100644 index 0000000..1dc7841 --- /dev/null +++ b/frontend/src/layout/components/lay-search/components/SearchResult.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/frontend/src/layout/components/lay-search/index.vue b/frontend/src/layout/components/lay-search/index.vue new file mode 100644 index 0000000..b9bf15c --- /dev/null +++ b/frontend/src/layout/components/lay-search/index.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/src/layout/components/lay-search/types.ts b/frontend/src/layout/components/lay-search/types.ts new file mode 100644 index 0000000..a39adbd --- /dev/null +++ b/frontend/src/layout/components/lay-search/types.ts @@ -0,0 +1,20 @@ +interface optionsItem { + path: string; + type: "history" | "collect"; + meta: { + icon?: string; + title?: string; + }; +} + +interface dragItem { + oldIndex: number; + newIndex: number; +} + +interface Props { + value: string; + options: Array; +} + +export type { optionsItem, dragItem, Props }; diff --git a/frontend/src/layout/components/lay-setting/index.vue b/frontend/src/layout/components/lay-setting/index.vue new file mode 100644 index 0000000..2294667 --- /dev/null +++ b/frontend/src/layout/components/lay-setting/index.vue @@ -0,0 +1,631 @@ + + + + + diff --git a/frontend/src/layout/components/lay-sidebar/NavHorizontal.vue b/frontend/src/layout/components/lay-sidebar/NavHorizontal.vue new file mode 100644 index 0000000..ac88e8b --- /dev/null +++ b/frontend/src/layout/components/lay-sidebar/NavHorizontal.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/frontend/src/layout/components/lay-sidebar/NavMix.vue b/frontend/src/layout/components/lay-sidebar/NavMix.vue new file mode 100644 index 0000000..b0a18b7 --- /dev/null +++ b/frontend/src/layout/components/lay-sidebar/NavMix.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/frontend/src/layout/components/lay-sidebar/NavVertical.vue b/frontend/src/layout/components/lay-sidebar/NavVertical.vue new file mode 100644 index 0000000..3cb0548 --- /dev/null +++ b/frontend/src/layout/components/lay-sidebar/NavVertical.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/frontend/src/layout/components/lay-sidebar/components/SidebarBreadCrumb.vue b/frontend/src/layout/components/lay-sidebar/components/SidebarBreadCrumb.vue new file mode 100644 index 0000000..c73d5b9 --- /dev/null +++ b/frontend/src/layout/components/lay-sidebar/components/SidebarBreadCrumb.vue @@ -0,0 +1,120 @@ + + + diff --git a/frontend/src/layout/components/lay-sidebar/components/SidebarCenterCollapse.vue b/frontend/src/layout/components/lay-sidebar/components/SidebarCenterCollapse.vue new file mode 100644 index 0000000..945a37a --- /dev/null +++ b/frontend/src/layout/components/lay-sidebar/components/SidebarCenterCollapse.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/frontend/src/layout/components/lay-sidebar/components/SidebarExtraIcon.vue b/frontend/src/layout/components/lay-sidebar/components/SidebarExtraIcon.vue new file mode 100644 index 0000000..7cad16e --- /dev/null +++ b/frontend/src/layout/components/lay-sidebar/components/SidebarExtraIcon.vue @@ -0,0 +1,20 @@ + + + diff --git a/frontend/src/layout/components/lay-sidebar/components/SidebarFullScreen.vue b/frontend/src/layout/components/lay-sidebar/components/SidebarFullScreen.vue new file mode 100644 index 0000000..4d38bd0 --- /dev/null +++ b/frontend/src/layout/components/lay-sidebar/components/SidebarFullScreen.vue @@ -0,0 +1,30 @@ + + + diff --git a/frontend/src/layout/components/lay-sidebar/components/SidebarItem.vue b/frontend/src/layout/components/lay-sidebar/components/SidebarItem.vue new file mode 100644 index 0000000..fccd130 --- /dev/null +++ b/frontend/src/layout/components/lay-sidebar/components/SidebarItem.vue @@ -0,0 +1,228 @@ + + + diff --git a/frontend/src/layout/components/lay-sidebar/components/SidebarLeftCollapse.vue b/frontend/src/layout/components/lay-sidebar/components/SidebarLeftCollapse.vue new file mode 100644 index 0000000..50e5125 --- /dev/null +++ b/frontend/src/layout/components/lay-sidebar/components/SidebarLeftCollapse.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/frontend/src/layout/components/lay-sidebar/components/SidebarLinkItem.vue b/frontend/src/layout/components/lay-sidebar/components/SidebarLinkItem.vue new file mode 100644 index 0000000..8911c12 --- /dev/null +++ b/frontend/src/layout/components/lay-sidebar/components/SidebarLinkItem.vue @@ -0,0 +1,32 @@ + + + diff --git a/frontend/src/layout/components/lay-sidebar/components/SidebarLogo.vue b/frontend/src/layout/components/lay-sidebar/components/SidebarLogo.vue new file mode 100644 index 0000000..9f9a82e --- /dev/null +++ b/frontend/src/layout/components/lay-sidebar/components/SidebarLogo.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/frontend/src/layout/components/lay-sidebar/components/SidebarTopCollapse.vue b/frontend/src/layout/components/lay-sidebar/components/SidebarTopCollapse.vue new file mode 100644 index 0000000..350df33 --- /dev/null +++ b/frontend/src/layout/components/lay-sidebar/components/SidebarTopCollapse.vue @@ -0,0 +1,33 @@ + + + diff --git a/frontend/src/layout/components/lay-tag/components/TagChrome.vue b/frontend/src/layout/components/lay-tag/components/TagChrome.vue new file mode 100644 index 0000000..137365b --- /dev/null +++ b/frontend/src/layout/components/lay-tag/components/TagChrome.vue @@ -0,0 +1,33 @@ + diff --git a/frontend/src/layout/components/lay-tag/index.scss b/frontend/src/layout/components/lay-tag/index.scss new file mode 100644 index 0000000..e399680 --- /dev/null +++ b/frontend/src/layout/components/lay-tag/index.scss @@ -0,0 +1,371 @@ +@keyframes schedule-in-width { + from { + width: 0; + } + + to { + width: 100%; + } +} + +@keyframes schedule-out-width { + from { + width: 100%; + } + + to { + width: 0; + } +} + +.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: 34px; + padding-left: 6px; + line-height: 34px; + cursor: pointer; + transition: all 0.4s; + + &:not(:first-child) { + padding-right: 24px; + } + + &.chrome-item { + padding-right: 0; + padding-left: 0; + margin-right: -18px; + box-shadow: none; + } + + .el-icon-close { + position: absolute; + top: 50%; + display: inline-flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + color: var(--el-color-primary); + cursor: pointer; + border-radius: 4px; + transform: translate(0, -50%); + transition: + background-color 0.12s, + color 0.12s; + + &:hover { + color: rgb(0 0 0 / 88%) !important; + background-color: rgb(0 0 0 / 6%); + } + } + } + + .tag-title { + padding: 0 4px; + color: var(--el-text-color-primary); + text-decoration: none; + } + + .scroll-container { + position: relative; + flex: 1; + overflow: hidden; + white-space: nowrap; + + &.chrome-scroll-container { + padding-top: 4px; + + .fixed-tag { + padding: 0 !important; + } + } + + .tab { + position: relative; + float: left; + overflow: visible; + white-space: nowrap; + list-style: none; + + .scroll-item { + transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + + &:nth-child(1) { + padding: 0 12px; + } + + &.chrome-item { + &:nth-child(1) { + padding: 0; + } + } + } + + .fixed-tag { + padding: 0 12px; + } + } + } + + /* 右键菜单 */ + .contextmenu { + position: absolute; + padding: 5px 0; + margin: 0; + font-size: 13px; + font-weight: normal; + color: var(--el-text-color-primary); + white-space: nowrap; + outline: 0; + list-style-type: none; + background: #fff; + border-radius: 4px; + 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; + box-shadow: 0 0 0.7px #888; + + .chrome-tab { + z-index: 10; + } + + .chrome-tab__bg { + color: var(--el-color-primary-light-9) !important; + } + + .tag-title { + color: var(--el-color-primary) !important; + } + + .chrome-close-btn { + color: var(--el-color-primary); + + &:hover { + background-color: var(--el-color-primary); + } + } + + .chrome-tab-divider { + opacity: 0; + } +} + +.arrow-left, +.arrow-right, +.arrow-down { + position: relative; + display: flex; + align-items: center; + justify-content: center; + width: 40px; + height: 34px; + color: var(--el-text-color-primary); + + svg { + width: 20px; + height: 20px; + } +} + +.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); + + .tag-title { + color: var(--el-color-primary); + } +} + +/* 卡片模式下鼠标移出隐藏蓝色边框 */ +.card-out { + color: #666; + border: none; + + .tag-title { + 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; +} + +/* 谷歌风格的页签 */ +.chrome-tab { + position: relative; + display: inline-flex; + gap: 16px; + align-items: center; + justify-content: center; + padding: 0 24px; + white-space: nowrap; + cursor: pointer; + + .tag-title { + padding: 0; + } + + .chrome-tab-divider { + position: absolute; + right: 7px; + width: 1px; + height: 14px; + background-color: #2b2d2f; + } + + &:hover { + z-index: 10; + + .chrome-tab__bg { + color: #dee1e6; + } + + .tag-title { + color: #1f1f1f; + } + + .chrome-tab-divider { + opacity: 0; + } + } + + .chrome-tab__bg { + position: absolute; + top: 0; + left: 0; + z-index: -10; + width: 100%; + height: 100%; + color: transparent; + pointer-events: none; + } + + .chrome-close-btn { + display: inline-flex; + align-items: center; + justify-content: center; + width: 16px; + height: 16px; + color: #666; + border-radius: 50%; + + &:hover { + color: white; + background-color: #b1b3b8; + } + } +} diff --git a/frontend/src/layout/components/lay-tag/index.vue b/frontend/src/layout/components/lay-tag/index.vue new file mode 100644 index 0000000..ed5cfad --- /dev/null +++ b/frontend/src/layout/components/lay-tag/index.vue @@ -0,0 +1,694 @@ + + + + + diff --git a/frontend/src/layout/frame.vue b/frontend/src/layout/frame.vue new file mode 100644 index 0000000..ea2b993 --- /dev/null +++ b/frontend/src/layout/frame.vue @@ -0,0 +1,110 @@ + + +