From b8a3fce607baa9ef3ee2d8338b92c980ba7e4f97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A6=86=E9=92=B1=E8=90=BD=E5=B0=BD=E6=A7=BF=E8=8A=B1?= =?UTF-8?q?=E7=A8=80?= <2675540038@qq.com> Date: Sun, 27 Apr 2025 15:09:45 +0800 Subject: [PATCH] 1 --- .editorconfig | 11 + .env | 56 + .env.prod | 7 + .env.test | 7 + .gitattributes | 13 + .gitignore | 35 + .npmrc | 4 + CHANGELOG.md | 2880 ++++++ CHANGELOG.zh_CN.md | 634 ++ LICENSE | 21 + README.en_US.md | 184 + README.md | 211 + build/config/index.ts | 2 + build/config/proxy.ts | 55 + build/config/time.ts | 12 + build/plugins/html.ts | 13 + build/plugins/index.ts | 24 + build/plugins/router.ts | 41 + build/plugins/unocss.ts | 32 + build/plugins/unplugin.ts | 47 + eslint.config.js | 24 + index.html | 14 + package.json | 114 + packages/alova/package.json | 20 + packages/alova/src/client.ts | 1 + packages/alova/src/constant.ts | 2 + packages/alova/src/fetch.ts | 2 + packages/alova/src/index.ts | 77 + packages/alova/src/mock.ts | 1 + packages/alova/src/type.ts | 52 + packages/alova/tsconfig.json | 20 + packages/axios/package.json | 21 + packages/axios/src/constant.ts | 5 + packages/axios/src/index.ts | 183 + packages/axios/src/options.ts | 48 + packages/axios/src/shared.ts | 28 + packages/axios/src/type.ts | 115 + packages/axios/tsconfig.json | 20 + packages/color/package.json | 16 + packages/color/src/constant/index.ts | 2 + packages/color/src/constant/name.ts | 1579 +++ packages/color/src/constant/palette.ts | 356 + packages/color/src/index.ts | 7 + packages/color/src/palette/antd.ts | 176 + packages/color/src/palette/index.ts | 45 + packages/color/src/palette/recommend.ts | 152 + packages/color/src/shared/colord.ts | 93 + packages/color/src/shared/index.ts | 2 + packages/color/src/shared/name.ts | 49 + packages/color/src/types/index.ts | 58 + packages/color/tsconfig.json | 20 + packages/hooks/package.json | 16 + packages/hooks/src/index.ts | 11 + packages/hooks/src/use-boolean.ts | 31 + packages/hooks/src/use-context.ts | 96 + packages/hooks/src/use-count-down.ts | 49 + packages/hooks/src/use-loading.ts | 16 + packages/hooks/src/use-request.ts | 79 + packages/hooks/src/use-signal.ts | 144 + packages/hooks/src/use-svg-icon-render.ts | 50 + packages/hooks/src/use-table.ts | 154 + packages/hooks/tsconfig.json | 20 + packages/materials/package.json | 19 + packages/materials/src/index.ts | 6 + .../src/libs/admin-layout/index.module.css | 63 + .../libs/admin-layout/index.module.css.d.ts | 18 + .../materials/src/libs/admin-layout/index.ts | 5 + .../materials/src/libs/admin-layout/index.vue | 237 + .../materials/src/libs/admin-layout/shared.ts | 68 + .../src/libs/page-tab/button-tab.vue | 53 + .../src/libs/page-tab/chrome-tab-bg.vue | 31 + .../src/libs/page-tab/chrome-tab.vue | 58 + .../src/libs/page-tab/index.module.css | 97 + .../src/libs/page-tab/index.module.css.d.ts | 15 + packages/materials/src/libs/page-tab/index.ts | 3 + .../materials/src/libs/page-tab/index.vue | 72 + .../materials/src/libs/page-tab/shared.ts | 31 + .../materials/src/libs/page-tab/svg-close.vue | 18 + .../src/libs/simple-scrollbar/index.ts | 3 + .../src/libs/simple-scrollbar/index.vue | 18 + packages/materials/src/types/index.ts | 294 + packages/materials/tsconfig.json | 20 + packages/ofetch/package.json | 15 + packages/ofetch/src/index.ts | 10 + packages/ofetch/tsconfig.json | 20 + packages/scripts/bin.ts | 3 + packages/scripts/package.json | 27 + packages/scripts/src/commands/changelog.ts | 10 + packages/scripts/src/commands/cleanup.ts | 5 + packages/scripts/src/commands/git-commit.ts | 84 + packages/scripts/src/commands/index.ts | 6 + packages/scripts/src/commands/release.ts | 12 + packages/scripts/src/commands/router.ts | 90 + packages/scripts/src/commands/update-pkg.ts | 5 + packages/scripts/src/config/index.ts | 39 + packages/scripts/src/index.ts | 109 + packages/scripts/src/locales/index.ts | 82 + packages/scripts/src/shared/index.ts | 7 + packages/scripts/src/types/index.ts | 31 + packages/scripts/tsconfig.json | 20 + packages/uno-preset/package.json | 12 + packages/uno-preset/src/index.ts | 55 + packages/uno-preset/tsconfig.json | 20 + packages/utils/package.json | 22 + packages/utils/src/crypto.ts | 27 + packages/utils/src/index.ts | 4 + packages/utils/src/klona.ts | 3 + packages/utils/src/nanoid.ts | 3 + packages/utils/src/storage.ts | 76 + packages/utils/tsconfig.json | 20 + pnpm-lock.yaml | 8472 +++++++++++++++++ pnpm-workspace.yaml | 2 + public/favicon.svg | 1 + src/App.vue | 58 + src/assets/imgs/soybean.jpg | Bin 0 -> 114241 bytes src/assets/svg-icon/activity.svg | 1 + src/assets/svg-icon/at-sign.svg | 1 + src/assets/svg-icon/avatar.svg | 1 + src/assets/svg-icon/banner.svg | 1 + src/assets/svg-icon/cast.svg | 1 + src/assets/svg-icon/chrome.svg | 1 + src/assets/svg-icon/copy.svg | 1 + src/assets/svg-icon/custom-icon.svg | 1 + src/assets/svg-icon/empty-data.svg | 1 + src/assets/svg-icon/expectation.svg | 1 + src/assets/svg-icon/heart.svg | 1 + src/assets/svg-icon/logo.svg | 1 + src/assets/svg-icon/network-error.svg | 1 + src/assets/svg-icon/no-icon.svg | 1 + src/assets/svg-icon/no-permission.svg | 1 + src/assets/svg-icon/not-found.svg | 1 + src/assets/svg-icon/service-error.svg | 1 + src/assets/svg-icon/wind.svg | 1 + .../advanced/table-column-setting.vue | 38 + .../advanced/table-header-operation.vue | 74 + src/components/common/app-provider.vue | 39 + src/components/common/dark-mode-container.vue | 17 + src/components/common/exception-base.vue | 43 + src/components/common/full-screen.vue | 22 + src/components/common/lang-switch.vue | 49 + src/components/common/menu-toggler.vue | 53 + src/components/common/pin-toggler.vue | 26 + src/components/common/reload-button.vue | 21 + src/components/common/system-logo.vue | 9 + src/components/common/theme-schema-switch.vue | 56 + src/components/custom/better-scroll.vue | 53 + src/components/custom/button-icon.vue | 48 + src/components/custom/count-to.vue | 88 + src/components/custom/look-forward.vue | 20 + src/components/custom/soybean-avatar.vue | 13 + src/components/custom/svg-icon.vue | 54 + src/components/custom/wave-bg.vue | 61 + src/constants/app.ts | 65 + src/constants/common.ts | 8 + src/constants/reg.ts | 25 + src/enum/index.ts | 7 + src/hooks/business/auth.ts | 21 + src/hooks/business/captcha.ts | 71 + src/hooks/common/echarts.ts | 235 + src/hooks/common/form.ts | 97 + src/hooks/common/icon.ts | 10 + src/hooks/common/router.ts | 115 + src/hooks/common/table.ts | 274 + src/layouts/base-layout/index.vue | 148 + src/layouts/blank-layout/index.vue | 13 + src/layouts/context/index.ts | 83 + .../modules/global-breadcrumb/index.vue | 47 + src/layouts/modules/global-content/index.vue | 58 + src/layouts/modules/global-footer/index.vue | 15 + .../global-header/components/theme-button.vue | 20 + .../global-header/components/user-avatar.vue | 82 + src/layouts/modules/global-header/index.vue | 60 + src/layouts/modules/global-logo/index.vue | 27 + .../components/first-level-menu.vue | 108 + src/layouts/modules/global-menu/index.vue | 37 + .../global-menu/modules/horizontal-menu.vue | 29 + .../modules/horizontal-mix-menu.vue | 52 + .../modules/reversed-horizontal-mix-menu.vue | 86 + .../global-menu/modules/vertical-menu.vue | 63 + .../global-menu/modules/vertical-mix-menu.vue | 128 + .../components/search-footer.vue | 36 + .../global-search/components/search-modal.vue | 123 + .../components/search-result.vue | 56 + src/layouts/modules/global-search/index.vue | 18 + src/layouts/modules/global-sider/index.vue | 33 + .../modules/global-tab/context-menu.vue | 123 + src/layouts/modules/global-tab/index.vue | 214 + .../components/layout-mode-card.vue | 94 + .../theme-drawer/components/setting-item.vue | 24 + src/layouts/modules/theme-drawer/index.vue | 31 + .../theme-drawer/modules/config-operation.vue | 58 + .../theme-drawer/modules/dark-mode.vue | 76 + .../theme-drawer/modules/layout-mode.vue | 81 + .../modules/theme-drawer/modules/page-fun.vue | 151 + .../theme-drawer/modules/theme-color.vue | 78 + src/locales/dayjs.ts | 20 + src/locales/index.ts | 26 + src/locales/langs/en-us.ts | 295 + src/locales/langs/zh-cn.ts | 295 + src/locales/locale.ts | 9 + src/locales/naive.ts | 12 + src/main.ts | 31 + src/plugins/app.ts | 103 + src/plugins/assets.ts | 3 + src/plugins/dayjs.ts | 9 + src/plugins/iconify.ts | 12 + src/plugins/index.ts | 5 + src/plugins/loading.ts | 51 + src/plugins/nprogress.ts | 9 + src/router/elegant/imports.ts | 25 + src/router/elegant/routes.ts | 98 + src/router/elegant/transform.ts | 194 + src/router/guard/index.ts | 15 + src/router/guard/progress.ts | 11 + src/router/guard/route.ts | 193 + src/router/guard/title.ts | 13 + src/router/index.ts | 30 + src/router/routes/builtin.ts | 31 + src/router/routes/index.ts | 42 + src/service/api/auth.ts | 48 + src/service/api/index.ts | 2 + src/service/api/route.ts | 20 + src/service/request/index.ts | 168 + src/service/request/shared.ts | 64 + src/service/request/type.ts | 6 + src/store/index.ts | 12 + src/store/modules/app/index.ts | 169 + src/store/modules/auth/index.ts | 120 + src/store/modules/auth/shared.ts | 12 + src/store/modules/route/index.ts | 373 + src/store/modules/route/shared.ts | 335 + src/store/modules/tab/index.ts | 307 + src/store/modules/tab/shared.ts | 251 + src/store/modules/theme/index.ts | 221 + src/store/modules/theme/shared.ts | 259 + src/store/plugins/index.ts | 22 + src/styles/css/global.css | 13 + src/styles/css/nprogress.css | 83 + src/styles/css/reset.css | 378 + src/styles/css/transition.css | 82 + src/styles/scss/global.scss | 1 + src/styles/scss/scrollbar.scss | 21 + src/theme/settings.ts | 89 + src/theme/vars.ts | 35 + src/typings/api.d.ts | 87 + src/typings/app.d.ts | 588 ++ src/typings/common.d.ts | 25 + src/typings/components.d.ts | 89 + src/typings/elegant-router.d.ts | 244 + src/typings/global.d.ts | 19 + src/typings/naive-ui.d.ts | 54 + src/typings/router.d.ts | 72 + src/typings/storage.d.ts | 41 + src/typings/union-key.d.ts | 157 + src/typings/vite-env.d.ts | 116 + src/utils/agent.ts | 7 + src/utils/common.ts | 58 + src/utils/icon.ts | 9 + src/utils/service.ts | 75 + src/utils/storage.ts | 9 + src/views/_builtin/403/index.vue | 7 + src/views/_builtin/404/index.vue | 7 + src/views/_builtin/500/index.vue | 7 + src/views/_builtin/iframe-page/[url].vue | 25 + src/views/_builtin/login/index.vue | 75 + .../_builtin/login/modules/pwd-login.vue | 64 + src/views/home/index.vue | 46 + src/views/home/modules/card-data.vue | 109 + src/views/home/modules/creativity-banner.vue | 17 + src/views/home/modules/header-banner.vue | 66 + src/views/home/modules/line-chart.vue | 151 + src/views/home/modules/pie-chart.vue | 109 + src/views/home/modules/project-news.vue | 40 + src/views/system/menu/index.vue | 217 + tsconfig.json | 26 + uno.config.ts | 30 + vite.config.ts | 51 + 277 files changed, 30038 insertions(+) create mode 100644 .editorconfig create mode 100644 .env create mode 100644 .env.prod create mode 100644 .env.test create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 CHANGELOG.md create mode 100644 CHANGELOG.zh_CN.md create mode 100644 LICENSE create mode 100644 README.en_US.md create mode 100644 README.md create mode 100644 build/config/index.ts create mode 100644 build/config/proxy.ts create mode 100644 build/config/time.ts create mode 100644 build/plugins/html.ts create mode 100644 build/plugins/index.ts create mode 100644 build/plugins/router.ts create mode 100644 build/plugins/unocss.ts create mode 100644 build/plugins/unplugin.ts create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 package.json create mode 100644 packages/alova/package.json create mode 100644 packages/alova/src/client.ts create mode 100644 packages/alova/src/constant.ts create mode 100644 packages/alova/src/fetch.ts create mode 100644 packages/alova/src/index.ts create mode 100644 packages/alova/src/mock.ts create mode 100644 packages/alova/src/type.ts create mode 100644 packages/alova/tsconfig.json create mode 100644 packages/axios/package.json create mode 100644 packages/axios/src/constant.ts create mode 100644 packages/axios/src/index.ts create mode 100644 packages/axios/src/options.ts create mode 100644 packages/axios/src/shared.ts create mode 100644 packages/axios/src/type.ts create mode 100644 packages/axios/tsconfig.json create mode 100644 packages/color/package.json create mode 100644 packages/color/src/constant/index.ts create mode 100644 packages/color/src/constant/name.ts create mode 100644 packages/color/src/constant/palette.ts create mode 100644 packages/color/src/index.ts create mode 100644 packages/color/src/palette/antd.ts create mode 100644 packages/color/src/palette/index.ts create mode 100644 packages/color/src/palette/recommend.ts create mode 100644 packages/color/src/shared/colord.ts create mode 100644 packages/color/src/shared/index.ts create mode 100644 packages/color/src/shared/name.ts create mode 100644 packages/color/src/types/index.ts create mode 100644 packages/color/tsconfig.json create mode 100644 packages/hooks/package.json create mode 100644 packages/hooks/src/index.ts create mode 100644 packages/hooks/src/use-boolean.ts create mode 100644 packages/hooks/src/use-context.ts create mode 100644 packages/hooks/src/use-count-down.ts create mode 100644 packages/hooks/src/use-loading.ts create mode 100644 packages/hooks/src/use-request.ts create mode 100644 packages/hooks/src/use-signal.ts create mode 100644 packages/hooks/src/use-svg-icon-render.ts create mode 100644 packages/hooks/src/use-table.ts create mode 100644 packages/hooks/tsconfig.json create mode 100644 packages/materials/package.json create mode 100644 packages/materials/src/index.ts create mode 100644 packages/materials/src/libs/admin-layout/index.module.css create mode 100644 packages/materials/src/libs/admin-layout/index.module.css.d.ts create mode 100644 packages/materials/src/libs/admin-layout/index.ts create mode 100644 packages/materials/src/libs/admin-layout/index.vue create mode 100644 packages/materials/src/libs/admin-layout/shared.ts create mode 100644 packages/materials/src/libs/page-tab/button-tab.vue create mode 100644 packages/materials/src/libs/page-tab/chrome-tab-bg.vue create mode 100644 packages/materials/src/libs/page-tab/chrome-tab.vue create mode 100644 packages/materials/src/libs/page-tab/index.module.css create mode 100644 packages/materials/src/libs/page-tab/index.module.css.d.ts create mode 100644 packages/materials/src/libs/page-tab/index.ts create mode 100644 packages/materials/src/libs/page-tab/index.vue create mode 100644 packages/materials/src/libs/page-tab/shared.ts create mode 100644 packages/materials/src/libs/page-tab/svg-close.vue create mode 100644 packages/materials/src/libs/simple-scrollbar/index.ts create mode 100644 packages/materials/src/libs/simple-scrollbar/index.vue create mode 100644 packages/materials/src/types/index.ts create mode 100644 packages/materials/tsconfig.json create mode 100644 packages/ofetch/package.json create mode 100644 packages/ofetch/src/index.ts create mode 100644 packages/ofetch/tsconfig.json create mode 100644 packages/scripts/bin.ts create mode 100644 packages/scripts/package.json create mode 100644 packages/scripts/src/commands/changelog.ts create mode 100644 packages/scripts/src/commands/cleanup.ts create mode 100644 packages/scripts/src/commands/git-commit.ts create mode 100644 packages/scripts/src/commands/index.ts create mode 100644 packages/scripts/src/commands/release.ts create mode 100644 packages/scripts/src/commands/router.ts create mode 100644 packages/scripts/src/commands/update-pkg.ts create mode 100644 packages/scripts/src/config/index.ts create mode 100644 packages/scripts/src/index.ts create mode 100644 packages/scripts/src/locales/index.ts create mode 100644 packages/scripts/src/shared/index.ts create mode 100644 packages/scripts/src/types/index.ts create mode 100644 packages/scripts/tsconfig.json create mode 100644 packages/uno-preset/package.json create mode 100644 packages/uno-preset/src/index.ts create mode 100644 packages/uno-preset/tsconfig.json create mode 100644 packages/utils/package.json create mode 100644 packages/utils/src/crypto.ts create mode 100644 packages/utils/src/index.ts create mode 100644 packages/utils/src/klona.ts create mode 100644 packages/utils/src/nanoid.ts create mode 100644 packages/utils/src/storage.ts create mode 100644 packages/utils/tsconfig.json create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 public/favicon.svg create mode 100644 src/App.vue create mode 100644 src/assets/imgs/soybean.jpg create mode 100644 src/assets/svg-icon/activity.svg create mode 100644 src/assets/svg-icon/at-sign.svg create mode 100644 src/assets/svg-icon/avatar.svg create mode 100644 src/assets/svg-icon/banner.svg create mode 100644 src/assets/svg-icon/cast.svg create mode 100644 src/assets/svg-icon/chrome.svg create mode 100644 src/assets/svg-icon/copy.svg create mode 100644 src/assets/svg-icon/custom-icon.svg create mode 100644 src/assets/svg-icon/empty-data.svg create mode 100644 src/assets/svg-icon/expectation.svg create mode 100644 src/assets/svg-icon/heart.svg create mode 100644 src/assets/svg-icon/logo.svg create mode 100644 src/assets/svg-icon/network-error.svg create mode 100644 src/assets/svg-icon/no-icon.svg create mode 100644 src/assets/svg-icon/no-permission.svg create mode 100644 src/assets/svg-icon/not-found.svg create mode 100644 src/assets/svg-icon/service-error.svg create mode 100644 src/assets/svg-icon/wind.svg create mode 100644 src/components/advanced/table-column-setting.vue create mode 100644 src/components/advanced/table-header-operation.vue create mode 100644 src/components/common/app-provider.vue create mode 100644 src/components/common/dark-mode-container.vue create mode 100644 src/components/common/exception-base.vue create mode 100644 src/components/common/full-screen.vue create mode 100644 src/components/common/lang-switch.vue create mode 100644 src/components/common/menu-toggler.vue create mode 100644 src/components/common/pin-toggler.vue create mode 100644 src/components/common/reload-button.vue create mode 100644 src/components/common/system-logo.vue create mode 100644 src/components/common/theme-schema-switch.vue create mode 100644 src/components/custom/better-scroll.vue create mode 100644 src/components/custom/button-icon.vue create mode 100644 src/components/custom/count-to.vue create mode 100644 src/components/custom/look-forward.vue create mode 100644 src/components/custom/soybean-avatar.vue create mode 100644 src/components/custom/svg-icon.vue create mode 100644 src/components/custom/wave-bg.vue create mode 100644 src/constants/app.ts create mode 100644 src/constants/common.ts create mode 100644 src/constants/reg.ts create mode 100644 src/enum/index.ts create mode 100644 src/hooks/business/auth.ts create mode 100644 src/hooks/business/captcha.ts create mode 100644 src/hooks/common/echarts.ts create mode 100644 src/hooks/common/form.ts create mode 100644 src/hooks/common/icon.ts create mode 100644 src/hooks/common/router.ts create mode 100644 src/hooks/common/table.ts create mode 100644 src/layouts/base-layout/index.vue create mode 100644 src/layouts/blank-layout/index.vue create mode 100644 src/layouts/context/index.ts create mode 100644 src/layouts/modules/global-breadcrumb/index.vue create mode 100644 src/layouts/modules/global-content/index.vue create mode 100644 src/layouts/modules/global-footer/index.vue create mode 100644 src/layouts/modules/global-header/components/theme-button.vue create mode 100644 src/layouts/modules/global-header/components/user-avatar.vue create mode 100644 src/layouts/modules/global-header/index.vue create mode 100644 src/layouts/modules/global-logo/index.vue create mode 100644 src/layouts/modules/global-menu/components/first-level-menu.vue create mode 100644 src/layouts/modules/global-menu/index.vue create mode 100644 src/layouts/modules/global-menu/modules/horizontal-menu.vue create mode 100644 src/layouts/modules/global-menu/modules/horizontal-mix-menu.vue create mode 100644 src/layouts/modules/global-menu/modules/reversed-horizontal-mix-menu.vue create mode 100644 src/layouts/modules/global-menu/modules/vertical-menu.vue create mode 100644 src/layouts/modules/global-menu/modules/vertical-mix-menu.vue create mode 100644 src/layouts/modules/global-search/components/search-footer.vue create mode 100644 src/layouts/modules/global-search/components/search-modal.vue create mode 100644 src/layouts/modules/global-search/components/search-result.vue create mode 100644 src/layouts/modules/global-search/index.vue create mode 100644 src/layouts/modules/global-sider/index.vue create mode 100644 src/layouts/modules/global-tab/context-menu.vue create mode 100644 src/layouts/modules/global-tab/index.vue create mode 100644 src/layouts/modules/theme-drawer/components/layout-mode-card.vue create mode 100644 src/layouts/modules/theme-drawer/components/setting-item.vue create mode 100644 src/layouts/modules/theme-drawer/index.vue create mode 100644 src/layouts/modules/theme-drawer/modules/config-operation.vue create mode 100644 src/layouts/modules/theme-drawer/modules/dark-mode.vue create mode 100644 src/layouts/modules/theme-drawer/modules/layout-mode.vue create mode 100644 src/layouts/modules/theme-drawer/modules/page-fun.vue create mode 100644 src/layouts/modules/theme-drawer/modules/theme-color.vue create mode 100644 src/locales/dayjs.ts create mode 100644 src/locales/index.ts create mode 100644 src/locales/langs/en-us.ts create mode 100644 src/locales/langs/zh-cn.ts create mode 100644 src/locales/locale.ts create mode 100644 src/locales/naive.ts create mode 100644 src/main.ts create mode 100644 src/plugins/app.ts create mode 100644 src/plugins/assets.ts create mode 100644 src/plugins/dayjs.ts create mode 100644 src/plugins/iconify.ts create mode 100644 src/plugins/index.ts create mode 100644 src/plugins/loading.ts create mode 100644 src/plugins/nprogress.ts create mode 100644 src/router/elegant/imports.ts create mode 100644 src/router/elegant/routes.ts create mode 100644 src/router/elegant/transform.ts create mode 100644 src/router/guard/index.ts create mode 100644 src/router/guard/progress.ts create mode 100644 src/router/guard/route.ts create mode 100644 src/router/guard/title.ts create mode 100644 src/router/index.ts create mode 100644 src/router/routes/builtin.ts create mode 100644 src/router/routes/index.ts create mode 100644 src/service/api/auth.ts create mode 100644 src/service/api/index.ts create mode 100644 src/service/api/route.ts create mode 100644 src/service/request/index.ts create mode 100644 src/service/request/shared.ts create mode 100644 src/service/request/type.ts create mode 100644 src/store/index.ts create mode 100644 src/store/modules/app/index.ts create mode 100644 src/store/modules/auth/index.ts create mode 100644 src/store/modules/auth/shared.ts create mode 100644 src/store/modules/route/index.ts create mode 100644 src/store/modules/route/shared.ts create mode 100644 src/store/modules/tab/index.ts create mode 100644 src/store/modules/tab/shared.ts create mode 100644 src/store/modules/theme/index.ts create mode 100644 src/store/modules/theme/shared.ts create mode 100644 src/store/plugins/index.ts create mode 100644 src/styles/css/global.css create mode 100644 src/styles/css/nprogress.css create mode 100644 src/styles/css/reset.css create mode 100644 src/styles/css/transition.css create mode 100644 src/styles/scss/global.scss create mode 100644 src/styles/scss/scrollbar.scss create mode 100644 src/theme/settings.ts create mode 100644 src/theme/vars.ts create mode 100644 src/typings/api.d.ts create mode 100644 src/typings/app.d.ts create mode 100644 src/typings/common.d.ts create mode 100644 src/typings/components.d.ts create mode 100644 src/typings/elegant-router.d.ts create mode 100644 src/typings/global.d.ts create mode 100644 src/typings/naive-ui.d.ts create mode 100644 src/typings/router.d.ts create mode 100644 src/typings/storage.d.ts create mode 100644 src/typings/union-key.d.ts create mode 100644 src/typings/vite-env.d.ts create mode 100644 src/utils/agent.ts create mode 100644 src/utils/common.ts create mode 100644 src/utils/icon.ts create mode 100644 src/utils/service.ts create mode 100644 src/utils/storage.ts create mode 100644 src/views/_builtin/403/index.vue create mode 100644 src/views/_builtin/404/index.vue create mode 100644 src/views/_builtin/500/index.vue create mode 100644 src/views/_builtin/iframe-page/[url].vue create mode 100644 src/views/_builtin/login/index.vue create mode 100644 src/views/_builtin/login/modules/pwd-login.vue create mode 100644 src/views/home/index.vue create mode 100644 src/views/home/modules/card-data.vue create mode 100644 src/views/home/modules/creativity-banner.vue create mode 100644 src/views/home/modules/header-banner.vue create mode 100644 src/views/home/modules/line-chart.vue create mode 100644 src/views/home/modules/pie-chart.vue create mode 100644 src/views/home/modules/project-news.vue create mode 100644 src/views/system/menu/index.vue create mode 100644 tsconfig.json create mode 100644 uno.config.ts create mode 100644 vite.config.ts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..0552777 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +# Editor configuration, see http://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.env b/.env new file mode 100644 index 0000000..97a8236 --- /dev/null +++ b/.env @@ -0,0 +1,56 @@ +# the base url of the application, the default is "/" +# if use a sub directory, it must be end with "/", like "/admin/" but not "/admin" +VITE_BASE_URL=/ + +VITE_APP_TITLE=SoybeanAdmin + +VITE_APP_DESC=SoybeanAdmin is a fresh and elegant admin template + +# the prefix of the icon name +VITE_ICON_PREFIX=icon + +# the prefix of the local svg icon component, must include VITE_ICON_PREFIX +# format {VITE_ICON_PREFIX}-{local icon name} +VITE_ICON_LOCAL_PREFIX=icon-local + +# auth route mode: static ๏ฝœ dynamic +VITE_AUTH_ROUTE_MODE=dynamic + +# static auth route home +VITE_ROUTE_HOME=home + +# default menu icon +VITE_MENU_ICON=mdi:menu + +# whether to enable http proxy when is dev mode +VITE_HTTP_PROXY=Y + +# vue-router mode: hash | history | memory +VITE_ROUTER_HISTORY_MODE=history + +# success code of backend service, when the code is received, the request is successful +VITE_SERVICE_SUCCESS_CODE=1 + +# logout codes of backend service, when the code is received, the user will be logged out and redirected to login page +VITE_SERVICE_LOGOUT_CODES=8888,8889 + +# modal logout codes of backend service, when the code is received, the user will be logged out by displaying a modal +VITE_SERVICE_MODAL_LOGOUT_CODES=7777,7778 + +# token expired codes of backend service, when the code is received, it will refresh the token and resend the request +VITE_SERVICE_EXPIRED_TOKEN_CODES=9999,9998,3333 + +# when the route mode is static, the defined super role +VITE_STATIC_SUPER_ROLE=R_SUPER + +# sourcemap +VITE_SOURCE_MAP=N + +# Used to differentiate storage across different domains +VITE_STORAGE_PREFIX=SOY_ + +# used to control whether the program automatically detects updates +VITE_AUTOMATICALLY_DETECT_UPDATE=Y + +# show proxy url log in terminal +VITE_PROXY_LOG=Y diff --git a/.env.prod b/.env.prod new file mode 100644 index 0000000..f567764 --- /dev/null +++ b/.env.prod @@ -0,0 +1,7 @@ +# backend service base url, prod environment +VITE_SERVICE_BASE_URL=https://mock.apifox.cn/m1/3109515-0-default + +# other backend service base url, prod environment +VITE_OTHER_SERVICE_BASE_URL= `{ + "demo": "http://localhost:9529" +}` diff --git a/.env.test b/.env.test new file mode 100644 index 0000000..899345a --- /dev/null +++ b/.env.test @@ -0,0 +1,7 @@ +# backend service base url, test environment +VITE_SERVICE_BASE_URL=http://192.168.10.137:8080/ + +# other backend service base url, test environment +VITE_OTHER_SERVICE_BASE_URL= `{ + "demo": "http://localhost:9528" +}` diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9553ccb --- /dev/null +++ b/.gitattributes @@ -0,0 +1,13 @@ +"*.vue" eol=lf +"*.js" eol=lf +"*.ts" eol=lf +"*.jsx" eol=lf +"*.tsx" eol=lf +"*.mjs" eol=lf +"*.json" eol=lf +"*.html" eol=lf +"*.css" eol=lf +"*.scss" eol=lf +"*.md" eol=lf +"*.yaml" eol=lf +"*.yml" eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fdd159a --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +!.vscode/settings.json +!.vscode/launch.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +package-lock.json +yarn.lock + +.VSCodeCounter diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..dfc2d68 --- /dev/null +++ b/.npmrc @@ -0,0 +1,4 @@ +registry=https://registry.npmmirror.com/ +shamefully-hoist=true +ignore-workspace-root-check=true +link-workspace-packages=true diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..8afde18 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,2880 @@ +# Changelog + + +## [v1.3.13](https://github.com/soybeanjs/soybean-admin/compare/v1.3.12...v1.3.13) (2025-03-19) + +###    ๐Ÿž Bug Fixes + +- **projects**: fix active tab switch issue after removal  -  by @me-o in https://github.com/soybeanjs/soybean-admin/issues/723 [(a7c59)](https://github.com/soybeanjs/soybean-admin/commit/a7c59ada) + +###    ๐Ÿ“– Documentation + +- **projects**: update README  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/718 [(3febb)](https://github.com/soybeanjs/soybean-admin/commit/3febb65d) + +###    ๐Ÿ“ฆ Build + +- **deps**: Restrict the minimum Node.js version.  -  by **ไธ€ๅฏธ็ฐ** in https://github.com/soybeanjs/soybean-admin/issues/720 [(a6ecd)](https://github.com/soybeanjs/soybean-admin/commit/a6ecd3e0) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @soybeanjs [(5d8b7)](https://github.com/soybeanjs/soybean-admin/commit/5d8b782d) + - update deps  -  by @soybeanjs [(2e8cb)](https://github.com/soybeanjs/soybean-admin/commit/2e8cb35c) +- **projects**: + - update vscode settings and launch  -  by @soybeanjs [(8b12e)](https://github.com/soybeanjs/soybean-admin/commit/8b12ef9f) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![me-o](https://github.com/me-o.png?size=48)](https://github.com/me-o)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)   +[ไธ€ๅฏธ็ฐ](mailto:webzhangfei@163.com),  + +## [v1.3.12](https://github.com/soybeanjs/soybean-admin/compare/v1.3.11...v1.3.12) (2025-03-12) + +###    ๐Ÿš€ Features + +- **projects**: + - support loading page dark mode adaptation.  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/702 [(9b945)](https://github.com/soybeanjs/soybean-admin/commit/9b9455d9) + - tab support touch event  -  by @soybeanjs [(a03be)](https://github.com/soybeanjs/soybean-admin/commit/a03becda) + - support proxy log in terminal  -  by @soybeanjs [(4cc14)](https://github.com/soybeanjs/soybean-admin/commit/4cc1487f) +- **projects): feat(projects**: + - TableColumnCheck title support VNode  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/716 [(a1a5c)](https://github.com/soybeanjs/soybean-admin/commit/a1a5c74c) +- **utils**: + - support replaceTab.  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/713 [(be608)](https://github.com/soybeanjs/soybean-admin/commit/be6080ba) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - hidden multi-language button in login page. fix #694  -  by **Azir** in https://github.com/soybeanjs/soybean-admin/issues/694 [(54e7d)](https://github.com/soybeanjs/soybean-admin/commit/54e7d6d0) + - fix multiple calls to the login API when clicking quickly. fixed #697  -  by @zsdycs in https://github.com/soybeanjs/soybean-admin/issues/698 and https://github.com/soybeanjs/soybean-admin/issues/697 [(86da7)](https://github.com/soybeanjs/soybean-admin/commit/86da767e) + - fix multiple calls to the login API when clicking quickly. fixed #697 "  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/698 and https://github.com/soybeanjs/soybean-admin/issues/697 [(15163)](https://github.com/soybeanjs/soybean-admin/commit/15163d70) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @soybeanjs [(132e1)](https://github.com/soybeanjs/soybean-admin/commit/132e1012) + - update deps  -  by **Azir** [(52c33)](https://github.com/soybeanjs/soybean-admin/commit/52c336d7) + - update deps  -  by @soybeanjs [(b8112)](https://github.com/soybeanjs/soybean-admin/commit/b8112613) +- **projects**: + - update unocss preset  -  by @Wangijun in https://github.com/soybeanjs/soybean-admin/issues/712 [(3e007)](https://github.com/soybeanjs/soybean-admin/commit/3e0076d4) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)  [![Wangijun](https://github.com/Wangijun.png?size=48)](https://github.com/Wangijun)  [![zsdycs](https://github.com/zsdycs.png?size=48)](https://github.com/zsdycs)   +[Azir](mailto:2075125282@qq.com),  + +## [v1.3.11](https://github.com/soybeanjs/soybean-admin/compare/v1.3.10...v1.3.11) (2025-01-19) + +###    ๐Ÿš€ Features + +- **projects**: multi language buttons support hiding.  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/683 [(d7aeb)](https://github.com/soybeanjs/soybean-admin/commit/d7aebb7) + +###    ๐Ÿž Bug Fixes + +- **hooks**: + - The total number before assigning a value to the table is incorrect.  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/687 [(56760)](https://github.com/soybeanjs/soybean-admin/commit/5676024) +- **projects**: + - fix login success notification. fixed #688  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/688 [(60dd2)](https://github.com/soybeanjs/soybean-admin/commit/60dd226) + - fix update notifications. fixed #691, fixed #692  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/691 and https://github.com/soybeanjs/soybean-admin/issues/692 [(ac862)](https://github.com/soybeanjs/soybean-admin/commit/ac86247) + +###    ๐Ÿ›  Optimizations + +- **projects**: optimize code  -  by @soybeanjs [(6489e)](https://github.com/soybeanjs/soybean-admin/commit/6489ec4) + +###    ๐Ÿ“– Documentation + +- **projects**: update README  -  by @soybeanjs [(21434)](https://github.com/soybeanjs/soybean-admin/commit/214341e) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @soybeanjs [(c9433)](https://github.com/soybeanjs/soybean-admin/commit/c9433e1) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)   + +## [v1.3.10](https://github.com/honghuangdc/soybean-admin/compare/v1.3.9...v1.3.10) (2024-12-16) + +###    ๐Ÿš€ Features + +- **projects**: support show tab when not loggedIn  -  by @soybeanjs [(ba381)](https://github.com/honghuangdc/soybean-admin/commit/ba38119) + +###    ๐Ÿž Bug Fixes + +- **deps**: + - reduced eslint version to 9.14.0  -  by @soybeanjs [(af417)](https://github.com/honghuangdc/soybean-admin/commit/af4177e) +- **projects**: + - fix route guard hook `onRouteSwitchWhenLoggedIn`. fixed #680  -  by @soybeanjs in https://github.com/honghuangdc/soybean-admin/issues/680 [(ab985)](https://github.com/honghuangdc/soybean-admin/commit/ab9858c) + - check if init userInfo when initAuthRoute. fixed #680  -  by @soybeanjs in https://github.com/honghuangdc/soybean-admin/issues/680 [(9f4fb)](https://github.com/honghuangdc/soybean-admin/commit/9f4fb8c) + +###    ๐Ÿ›  Optimizations + +- **projects**: + - optimize router guard  -  by @soybeanjs [(0dfcf)](https://github.com/honghuangdc/soybean-admin/commit/0dfcf18) + - use `defu` to fill added theme config  -  by @soybeanjs [(101b6)](https://github.com/honghuangdc/soybean-admin/commit/101b6f9) + +###    ๐Ÿ“– Documentation + +- **projects**: โœ๏ธ add element-plus version link  -  by **ไธ€ๅฏธ็ฐ** in https://github.com/honghuangdc/soybean-admin/issues/679 [(5c6ab)](https://github.com/honghuangdc/soybean-admin/commit/5c6ab0b) + +###    ๐Ÿก Chore + +- rename env.d.ts to vite-env.d.ts  -  by @wzc520pyfm in https://github.com/honghuangdc/soybean-admin/issues/675 [(b93c2)](https://github.com/honghuangdc/soybean-admin/commit/b93c203) +- **projects**: update deps & fix vite config  -  by @soybeanjs [(3e0eb)](https://github.com/honghuangdc/soybean-admin/commit/3e0eb72) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![wzc520pyfm](https://github.com/wzc520pyfm.png?size=48)](https://github.com/wzc520pyfm)   +[ไธ€ๅฏธ็ฐ](mailto:webzhangfei@163.com),  + +## [v1.3.9](https://github.com/soybeanjs/soybean-admin/compare/v1.3.8...v1.3.9) (2024-11-17) + +###    ๐Ÿš€ Features + +- **projects**: + - support scheduled detection and update system. close #657  -  by **้’่œ็™ฝ็މๆฑค** in https://github.com/soybeanjs/soybean-admin/issues/669 and https://github.com/soybeanjs/soybean-admin/issues/657 [(d088f)](https://github.com/soybeanjs/soybean-admin/commit/d088f81) + - app version notification plugin support sub deploy path. close #668  -  by **Soybean** in https://github.com/soybeanjs/soybean-admin/issues/668 [(a53eb)](https://github.com/soybeanjs/soybean-admin/commit/a53eb10) + +###    ๐Ÿ›  Optimizations + +- **projects**: optimize code  -  by **Soybean** [(9ad5d)](https://github.com/soybeanjs/soybean-admin/commit/9ad5d71) + +###    ๐Ÿ’… Refactors + +- **projects**: refactor router guard. fix #655  -  by **Soybean** in https://github.com/soybeanjs/soybean-admin/issues/667 and https://github.com/soybeanjs/soybean-admin/issues/655 [(09144)](https://github.com/soybeanjs/soybean-admin/commit/09144df) + +###    ๐Ÿ“– Documentation + +- **projects**: set the Chinese version of README as default  -  by **Soybean** [(9d28b)](https://github.com/soybeanjs/soybean-admin/commit/9d28b31) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by **Soybean** [(91de4)](https://github.com/soybeanjs/soybean-admin/commit/91de4a8) + - update deps  -  by **Soybean** [(0c809)](https://github.com/soybeanjs/soybean-admin/commit/0c809de) +- **projects**: + - add desc for base url of app  -  by **Soybean** [(17d7e)](https://github.com/soybeanjs/soybean-admin/commit/17d7e52) + +###    โค๏ธ Contributors + + +[Soybean](mailto:soybeanjs@outlook.com), [้’่œ็™ฝ็މๆฑค](mailto:79054161+Azir-11@users.noreply.github.com) + +## [v1.3.8](https://github.com/soybeanjs/soybean-admin/compare/v1.3.7...v1.3.8) (2024-10-25) + +###    ๐Ÿšจ Breaking Changes + +- **projects**: refactor route cache & support reset route cache strategy  -  by @soybeanjs [(b667e)](https://github.com/soybeanjs/soybean-admin/commit/b667eab) + +###    ๐Ÿš€ Features + +- **packages**: + - add subpackage `@sa/alova`  -  by @JOU-amjs in https://github.com/soybeanjs/soybean-admin/issues/640 [(2072f)](https://github.com/soybeanjs/soybean-admin/commit/2072f58) + - optimistic subpackage `@sa/alova`  -  by @JOU-amjs in https://github.com/soybeanjs/soybean-admin/issues/646 [(4b3ac)](https://github.com/soybeanjs/soybean-admin/commit/4b3ac11) +- **projects**: + - login supports accessible operation.  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/637 [(cfaab)](https://github.com/soybeanjs/soybean-admin/commit/cfaab85) + +###    ๐Ÿž Bug Fixes + +- **utils**: fix `isPC`. fixed #644  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/644 [(47264)](https://github.com/soybeanjs/soybean-admin/commit/4726498) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @soybeanjs [(8dcda)](https://github.com/soybeanjs/soybean-admin/commit/8dcda38) +- **projects**: + - update vscode extensions  -  by @soybeanjs [(24bb6)](https://github.com/soybeanjs/soybean-admin/commit/24bb6d9) + - update deps & fix sass usage  -  by @soybeanjs [(71e63)](https://github.com/soybeanjs/soybean-admin/commit/71e6307) +- **types**: + - remove type declaration for document.startViewTransition (TypeScript 5.6 includes it)  -  by @NHZEX in https://github.com/soybeanjs/soybean-admin/issues/633 [(83ba7)](https://github.com/soybeanjs/soybean-admin/commit/83ba798) + +###    ๐ŸŽจ Styles + +- **projects**: reduce ambiguity in theme configuration instructions.  -  by @Azir-11 [(75cbf)](https://github.com/soybeanjs/soybean-admin/commit/75cbfbb) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![JOU-amjs](https://github.com/JOU-amjs.png?size=48)](https://github.com/JOU-amjs)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)  [![NHZEX](https://github.com/NHZEX.png?size=48)](https://github.com/NHZEX)   + +## [v1.3.7](https://github.com/soybeanjs/soybean-admin/compare/v1.3.6...v1.3.7) (2024-09-21) + +###    ๐Ÿšจ Breaking Changes + +- **projects**: update scss config  -  by @soybeanjs [(24e9e)](https://github.com/soybeanjs/soybean-admin/commit/24e9e57) + +###    ๐Ÿž Bug Fixes + +- **projects**: fix global-tab click conflict with contextmenu  -  by @soybeanjs [(3e72c)](https://github.com/soybeanjs/soybean-admin/commit/3e72c3b) + +###    ๐Ÿ’… Refactors + +- **packages**: @sa/materials: remove tab close shortcut by mouse  -  by @soybeanjs [(4da58)](https://github.com/soybeanjs/soybean-admin/commit/4da588c) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @soybeanjs [(baefd)](https://github.com/soybeanjs/soybean-admin/commit/baefdfd) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v1.3.6](https://github.com/soybeanjs/soybean-admin/compare/v1.3.5...v1.3.6) (2024-09-20) + +###    ๐Ÿž Bug Fixes + +- **components**: + - fix VerticalMixMenu name  -  by @soybeanjs [(20f8e)](https://github.com/soybeanjs/soybean-admin/commit/20f8ed3) +- **projects**: + - fix click global-tab in iPad. fixed #624  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/624 [(04d05)](https://github.com/soybeanjs/soybean-admin/commit/04d0564) + - when the roles filter submenu is empty, the parent menu is not excluded. fixed #621.  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/626 and https://github.com/soybeanjs/soybean-admin/issues/621 [(0ac95)](https://github.com/soybeanjs/soybean-admin/commit/0ac95bd) + +###    ๐Ÿ›  Optimizations + +- **projects**: + - optimize code  -  by @soybeanjs [(6561f)](https://github.com/soybeanjs/soybean-admin/commit/6561f0b) + - optimize code  -  by @soybeanjs [(38eeb)](https://github.com/soybeanjs/soybean-admin/commit/38eeb67) + - remove defineModel setting๏ผŒenabled by default  -  by @yanbowe in https://github.com/soybeanjs/soybean-admin/issues/620 [(60bbd)](https://github.com/soybeanjs/soybean-admin/commit/60bbd2d) + +###    ๐Ÿ“– Documentation + +- **projects**: update CHANGELOG  -  by @soybeanjs [(5baf1)](https://github.com/soybeanjs/soybean-admin/commit/5baf19d) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @soybeanjs [(207d6)](https://github.com/soybeanjs/soybean-admin/commit/207d6eb) + - update deps  -  by @soybeanjs [(f3562)](https://github.com/soybeanjs/soybean-admin/commit/f35627e) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)   + +## [v1.3.5](https://github.com/soybeanjs/soybean-admin/compare/v1.3.4...v1.3.5) (2024-09-07) + +###    ๐Ÿš€ Features + +- **packages**: + - @sa/axios: add response to flatRequest when success  -  by @soybeanjs [(c4e16)](https://github.com/soybeanjs/soybean-admin/commit/c4e1610) +- **projects**: + - README.zh_CN.md ๆทปๅŠ ๅˆไฝœๆŽจๅนฟ  -  by @PZ-18664918826 in https://github.com/soybeanjs/soybean-admin/issues/601 [(2fa40)](https://github.com/soybeanjs/soybean-admin/commit/2fa400b) + - Add more commit types according to Apache specifications  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/610 [(878d9)](https://github.com/soybeanjs/soybean-admin/commit/878d9c3) + - does the configuration support automatic updates. close#612  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/617 and https://github.com/soybeanjs/soybean-admin/issues/612 [(4c9f4)](https://github.com/soybeanjs/soybean-admin/commit/4c9f4e0) + - add app error handler. close #587  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/587 [(be855)](https://github.com/soybeanjs/soybean-admin/commit/be8556c) + +###    ๐Ÿž Bug Fixes + +- **deps**: + - move json5 from devDependencies to dependencies to support production usage  -  by @mufeng889 in https://github.com/soybeanjs/soybean-admin/issues/618 [(7cb43)](https://github.com/soybeanjs/soybean-admin/commit/7cb43fc) +- **projects**: + - avoid retrieving cached HTML  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/605 [(ef6cf)](https://github.com/soybeanjs/soybean-admin/commit/ef6cf93) + - fix login redirect  -  by @soybeanjs [(3830e)](https://github.com/soybeanjs/soybean-admin/commit/3830ec7) + - fix vertical-mix-menu when sider collapse. fixed #608  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/608 [(c3f1f)](https://github.com/soybeanjs/soybean-admin/commit/c3f1f69) + - fix breadcrumb when activeMenu is parent menu. fixed #589  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/589 [(79b2a)](https://github.com/soybeanjs/soybean-admin/commit/79b2a28) + - fix refresh token when meet multi requests. fixed #581  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/581 [(27b52)](https://github.com/soybeanjs/soybean-admin/commit/27b5222) +- **types**: + - fix the type of TableApiFn  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/599 [(26c93)](https://github.com/soybeanjs/soybean-admin/commit/26c93df) + +###    ๐Ÿ›  Optimizations + +- **projects**: optimize menu selectedKey  -  by @soybeanjs [(531bf)](https://github.com/soybeanjs/soybean-admin/commit/531bfaf) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README  -  by @mufeng889 in https://github.com/soybeanjs/soybean-admin/issues/594 [(a8f92)](https://github.com/soybeanjs/soybean-admin/commit/a8f923e) + - update README  -  by @soybeanjs [(e9a2e)](https://github.com/soybeanjs/soybean-admin/commit/e9a2ee4) + - update README  -  by @soybeanjs [(73e91)](https://github.com/soybeanjs/soybean-admin/commit/73e917a) + - update the location of important information in the document  -  by **Azir** [(9c012)](https://github.com/soybeanjs/soybean-admin/commit/9c012c7) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @soybeanjs [(a1c14)](https://github.com/soybeanjs/soybean-admin/commit/a1c14a1) + - update deps  -  by @soybeanjs [(7fa55)](https://github.com/soybeanjs/soybean-admin/commit/7fa5590) + - update deps  -  by @soybeanjs [(a44ea)](https://github.com/soybeanjs/soybean-admin/commit/a44ea62) +- **projects**: + - use json5 resolve env `VITE_OTHER_SERVICE_BASE_URL` & fix proxy enable  -  by @soybeanjs [(b16a9)](https://github.com/soybeanjs/soybean-admin/commit/b16a963) + +###    ๐ŸŽจ Styles + +- **projects**: rename script czh to commit:zh  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/597 [(5094f)](https://github.com/soybeanjs/soybean-admin/commit/5094f0e) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![mufeng889](https://github.com/mufeng889.png?size=48)](https://github.com/mufeng889)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)  [![PZ-18664918826](https://github.com/PZ-18664918826.png?size=48)](https://github.com/PZ-18664918826)   +[Azir](mailto:2075125282@qq.com),  + +## [v1.3.4](https://github.com/honghuangdc/soybean-admin/compare/v1.3.3...v1.3.4) (2024-08-01) + +###    ๐Ÿšจ Breaking Changes + +- **projects**: don't reset active menu of vertical-mix layout when it is mixSiderFixed  -  by @honghuangdc [(939c5)](https://github.com/honghuangdc/soybean-admin/commit/939c512) + +###    ๐Ÿ›  Optimizations + +- **projects**: optimize code  -  by @honghuangdc [(cb1d4)](https://github.com/honghuangdc/soybean-admin/commit/cb1d445) + +###    ๐Ÿก Chore + +- **projects**: update deps & fix vue-router type  -  by @honghuangdc [(96837)](https://github.com/honghuangdc/soybean-admin/commit/968370b) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.3.3](https://github.com/honghuangdc/soybean-admin/compare/v1.3.2...v1.3.3) (2024-07-30) + +###    ๐Ÿž Bug Fixes + +- **projects**: fix watermark settings  -  by @honghuangdc [(5646a)](https://github.com/honghuangdc/soybean-admin/commit/5646a50) + +###    ๐Ÿ“– Documentation + +- **projects**: update CHANGELOG  -  by @honghuangdc [(ebc83)](https://github.com/honghuangdc/soybean-admin/commit/ebc838c) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.3.2](https://github.com/honghuangdc/soybean-admin/compare/v1.3.1...v1.3.2) (2024-07-30) + +###    ๐Ÿš€ Features + +- **projects**: + - add color fading mode.close #567  -  by @Azir-11 in https://github.com/honghuangdc/soybean-admin/issues/569 and https://github.com/honghuangdc/soybean-admin/issues/567 [(4dde4)](https://github.com/honghuangdc/soybean-admin/commit/4dde4c2) + - add full screen watermark. close#571  -  by @paynezhuang in https://github.com/honghuangdc/soybean-admin/issues/573 and https://github.com/honghuangdc/soybean-admin/issues/571 [(ea8aa)](https://github.com/honghuangdc/soybean-admin/commit/ea8aa6c) + +###    ๐Ÿž Bug Fixes + +- **projects**: fix vertical-mix menu selected  -  by @honghuangdc [(59f07)](https://github.com/honghuangdc/soybean-admin/commit/59f07d8) + +###    ๐Ÿ›  Optimizations + +- **projects**: + - add type WatermarkProps  -  by @honghuangdc [(f26d0)](https://github.com/honghuangdc/soybean-admin/commit/f26d0a6) + - remove home NAlert closable  -  by @honghuangdc [(98b75)](https://github.com/honghuangdc/soybean-admin/commit/98b75c2) + - optimize response code comparison  -  by @honghuangdc [(cf67d)](https://github.com/honghuangdc/soybean-admin/commit/cf67d55) +- **types**: + - remove useless types.  -  by **Azir** [(eed61)](https://github.com/honghuangdc/soybean-admin/commit/eed617f) + +###    ๐Ÿ“– Documentation + +- **projects**: update CHANGELOG  -  by @honghuangdc [(d3759)](https://github.com/honghuangdc/soybean-admin/commit/d37591d) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @honghuangdc [(993e9)](https://github.com/honghuangdc/soybean-admin/commit/993e9ca) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![paynezhuang](https://github.com/paynezhuang.png?size=48)](https://github.com/paynezhuang)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)   +[Azir](mailto:2075125282@qq.com),  + +## [v1.3.1](https://github.com/honghuangdc/soybean-admin/compare/v1.3.0...v1.3.1) (2024-07-22) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - fix the issue of abnormal width of the sidebar in the top menu mix and reverse mode  -  by @Azir-11 in https://github.com/honghuangdc/soybean-admin/issues/562 [(c4695)](https://github.com/honghuangdc/soybean-admin/commit/c469512) + - fix HorizontalMixMenu inverted. fixed #563  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/563 [(4e55b)](https://github.com/honghuangdc/soybean-admin/commit/4e55b0e) + - fix vertical-menu will not render when the layout is from mobile  -  by @honghuangdc [(84027)](https://github.com/honghuangdc/soybean-admin/commit/8402734) + +###    ๐Ÿ“– Documentation + +- **projects**: update CHANGELOG  -  by @honghuangdc [(613c8)](https://github.com/honghuangdc/soybean-admin/commit/613c836) + +###    ๐ŸŽจ Styles + +- **other**: modify the Chinese name of the grayscale mode  -  by **Azir** [(53770)](https://github.com/honghuangdc/soybean-admin/commit/5377002) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)   +[Azir](mailto:2075125282@qq.com),  + +## [v1.3.0](https://github.com/soybeanjs/soybean-admin/compare/v1.2.8...v1.3.0) (2024-07-22) + +###    ๐Ÿšจ Breaking Changes + +- **projects**: refactor global menu & support `reversed-horizontal-mix-menu`. close #365  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/365 [(087e5)](https://github.com/soybeanjs/soybean-admin/commit/087e532) + +###    ๐Ÿš€ Features + +- **packages**: + - `@sa/scripts`: command `gitCommit` support chinese  -  by @mmdapl in https://github.com/soybeanjs/soybean-admin/issues/548 [(06971)](https://github.com/soybeanjs/soybean-admin/commit/06971f3) + - @sa/axios: replace CancelTokenSource by AbortController. close #530, close #532  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/530 and https://github.com/soybeanjs/soybean-admin/issues/532 [(527fd)](https://github.com/soybeanjs/soybean-admin/commit/527fd79) + - @sa/scripts: add ignore pattern list for command `gitCommitVerify`. close #504  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/504 [(958d0)](https://github.com/soybeanjs/soybean-admin/commit/958d0ba) +- **projects**: + - make branch `main` tiny & modify request retry times to 0  -  by @Azir-11 [(793b1)](https://github.com/soybeanjs/soybean-admin/commit/793b16e) + +###    ๐Ÿž Bug Fixes + +- **hooks**: prevent program freezing when pagesize returns 0  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/545 [(f4eeb)](https://github.com/soybeanjs/soybean-admin/commit/f4eeb2e) + +###    ๐Ÿ’… Refactors + +- **projects**: + - combine `theme tokens` and `theme settings`. close #379  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/379 [(1d1b1)](https://github.com/soybeanjs/soybean-admin/commit/1d1b148) + - change css vars mount to root  -  by @honghuangdc [(00f41)](https://github.com/soybeanjs/soybean-admin/commit/00f41dd) + +###    ๐Ÿ“– Documentation + +- **projects**: update CHANGELOG  -  by @honghuangdc [(a0b76)](https://github.com/soybeanjs/soybean-admin/commit/a0b76da) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @honghuangdc [(f6bd6)](https://github.com/soybeanjs/soybean-admin/commit/f6bd6b8) +- **projects**: add script `czh`  -  by @honghuangdc [(02069)](https://github.com/soybeanjs/soybean-admin/commit/0206969) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![mmdapl](https://github.com/mmdapl.png?size=48)](https://github.com/mmdapl)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)   + +## [v1.2.8](https://github.com/soybeanjs/soybean-admin/compare/v1.2.7...v1.2.8) (2024-07-20) + +###    ๐Ÿž Bug Fixes + +- **packages**: + - @sa/hooks: fix searchParams of useHookTable. fixed #552  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/552 [(96c10)](https://github.com/soybeanjs/soybean-admin/commit/96c1044) +- **types**: + - Fixed the reference type error  -  by **dodu2014** in https://github.com/soybeanjs/soybean-admin/issues/551 [(3e2a9)](https://github.com/soybeanjs/soybean-admin/commit/3e2a993) + - fix data type of useHookTable  -  by @honghuangdc [(276ea)](https://github.com/soybeanjs/soybean-admin/commit/276ea7f) + +###    ๐Ÿ’… Refactors + +- **projects**: replace `cloneDeep` of `lodash-es` with `klona`  -  by @honghuangdc [(a9133)](https://github.com/soybeanjs/soybean-admin/commit/a91335d) + +###    ๐Ÿ“– Documentation + +- **projects**: update CHANGELOG  -  by @honghuangdc [(58fc0)](https://github.com/soybeanjs/soybean-admin/commit/58fc096) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @honghuangdc [(cf019)](https://github.com/soybeanjs/soybean-admin/commit/cf0192a) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[dodu2014](mailto:dodu@live.cn) + +## [v1.2.7](https://github.com/honghuangdc/soybean-admin/compare/v1.2.6...v1.2.7) (2024-07-12) + +###    ๐Ÿ›  Optimizations + +- **projects**: supports custom menu icon sizes  -  by @wynn-w in https://github.com/honghuangdc/soybean-admin/issues/534 [(e035e)](https://github.com/honghuangdc/soybean-admin/commit/e035eab) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @honghuangdc [(72ede)](https://github.com/honghuangdc/soybean-admin/commit/72ede8b) + - update deps  -  by @honghuangdc [(be13c)](https://github.com/honghuangdc/soybean-admin/commit/be13ca2) + - update deps  -  by @honghuangdc [(752ec)](https://github.com/honghuangdc/soybean-admin/commit/752ec1e) +- **projects**: + - Fix deprecated configuration config  -  by @paynezhuang in https://github.com/honghuangdc/soybean-admin/issues/524 [(0d20e)](https://github.com/honghuangdc/soybean-admin/commit/0d20e4c) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![wynn-w](https://github.com/wynn-w.png?size=48)](https://github.com/wynn-w)  [![paynezhuang](https://github.com/paynezhuang.png?size=48)](https://github.com/paynezhuang)   + +## [v1.2.6](https://github.com/honghuangdc/soybean-admin/compare/v1.2.5...v1.2.6) (2024-06-21) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - request modal title use i18n. fixed #507  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/507 [(f7de3)](https://github.com/honghuangdc/soybean-admin/commit/f7de3fd) + - add `getDataByPage` for `useTable`. fixed #499  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/499 [(425c6)](https://github.com/honghuangdc/soybean-admin/commit/425c69a) + - fix login redirect to routeHome when routeHome of dynamic route is not same as static route. fixed #511  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/511 [(49f60)](https://github.com/honghuangdc/soybean-admin/commit/49f60b2) + +###    ๐Ÿ›  Optimizations + +- **projects**: optimize `getRouteQueryOfLoginRoute`  -  by @honghuangdc [(693f7)](https://github.com/honghuangdc/soybean-admin/commit/693f704) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update CHANGELOG  -  by @honghuangdc [(5c67d)](https://github.com/honghuangdc/soybean-admin/commit/5c67d06) + - update README  -  by @honghuangdc [(1e67a)](https://github.com/honghuangdc/soybean-admin/commit/1e67ae8) + +###    ๐Ÿก Chore + +- **deps**: + - update deps. close #510  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/510 [(53143)](https://github.com/honghuangdc/soybean-admin/commit/531432d) + - update deps  -  by @honghuangdc [(c7f6f)](https://github.com/honghuangdc/soybean-admin/commit/c7f6f2a) + +###    ๐Ÿค– CI + +- **projects**: + - add github issues template  -  by @honghuangdc [(b5027)](https://github.com/honghuangdc/soybean-admin/commit/b5027c8) + - update github issues template  -  by @honghuangdc [(ff1d5)](https://github.com/honghuangdc/soybean-admin/commit/ff1d504) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.2.5](https://github.com/soybeanjs/soybean-admin/compare/v1.2.4...v1.2.5) (2024-06-15) + +###    ๐Ÿž Bug Fixes + +- **projects**: Fix the issue of abnormal tab caching after logout. fixed #495  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/495 [(3eeac)](https://github.com/soybeanjs/soybean-admin/commit/3eeace9) + +###    ๐Ÿ”ฅ Performance + +- **project**: Initializing the static routing function does not require asynchronization  -  by **CHENZL** in https://github.com/soybeanjs/soybean-admin/issues/493 [(2198b)](https://github.com/soybeanjs/soybean-admin/commit/2198b98) + +###    ๐Ÿ›  Optimizations + +- **projects**: optimize code  -  by @soybeanjs [(b94ba)](https://github.com/soybeanjs/soybean-admin/commit/b94baa1) +- **types**: Enhance compatibility of global types  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/494 [(cd9d5)](https://github.com/soybeanjs/soybean-admin/commit/cd9d58d) +- **utils**: Reduce code indentation and improve readability  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/496 [(ad2f2)](https://github.com/soybeanjs/soybean-admin/commit/ad2f247) + +###    ๐Ÿ“– Documentation + +- **projects**: update CHANGELOG  -  by @soybeanjs [(b3368)](https://github.com/soybeanjs/soybean-admin/commit/b336841) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @soybeanjs [(b094d)](https://github.com/soybeanjs/soybean-admin/commit/b094d68) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)   +[CHENZL](mailto:zlong5568863@qq.com) + +## [v1.2.4](https://github.com/soybeanjs/soybean-admin/compare/v1.2.3...v1.2.4) (2024-06-14) + +###    ๐Ÿ›  Optimizations + +- **projects**: + - optimize `setupAppVersionNotification`  -  by @soybeanjs [(b5a72)](https://github.com/soybeanjs/soybean-admin/commit/b5a723c) + - get buildTime with timezone 'Asia/Shanghai'  -  by @soybeanjs [(069fa)](https://github.com/soybeanjs/soybean-admin/commit/069fa8a) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v1.2.3](https://github.com/soybeanjs/soybean-admin/compare/v1.2.2...v1.2.3) (2024-06-13) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - fix mobile browser theme issue by adding color-scheme meta tag to index.html  -  by @KickCashew in https://github.com/soybeanjs/soybean-admin/issues/488 [(c2125)](https://github.com/soybeanjs/soybean-admin/commit/c212565) + - Fix secondary directory components is empty  -  by @paynezhuang in https://github.com/soybeanjs/soybean-admin/issues/491 [(aabb2)](https://github.com/soybeanjs/soybean-admin/commit/aabb2a4) + +###    ๐Ÿ“– Documentation + +- **projects**: + - Fixed the hyperlink pointing error  -  by **Azir** [(20a81)](https://github.com/soybeanjs/soybean-admin/commit/20a8127) + - update README  -  by @soybeanjs [(70261)](https://github.com/soybeanjs/soybean-admin/commit/7026126) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @soybeanjs [(813d8)](https://github.com/soybeanjs/soybean-admin/commit/813d8ce) + - update deps  -  by @soybeanjs [(bf718)](https://github.com/soybeanjs/soybean-admin/commit/bf71837) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![paynezhuang](https://github.com/paynezhuang.png?size=48)](https://github.com/paynezhuang)  [![KickCashew](https://github.com/KickCashew.png?size=48)](https://github.com/KickCashew)   +[Azir](mailto:2075125282@qq.com) + +## [v1.2.2](https://github.com/honghuangdc/soybean-admin/compare/v1.2.1...v1.2.2) (2024-06-12) + +###    ๐Ÿš€ Features + +- **projects**: reset scroll position when tab change  -  by @soybeanjs [(9094b)](https://github.com/honghuangdc/soybean-admin/commit/9094b21) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - hide AppVersionNotification in DEV mode  -  by @sigma-plus in https://github.com/honghuangdc/soybean-admin/issues/482 [(62592)](https://github.com/honghuangdc/soybean-admin/commit/6259287) + - fix menu-toggler hidden in mobile layout. fixed #483  -  by @soybeanjs in https://github.com/honghuangdc/soybean-admin/issues/483 [(4470c)](https://github.com/honghuangdc/soybean-admin/commit/4470cb4) + +###    ๐Ÿ“– Documentation + +- **projects**: update README  -  by @soybeanjs [(8f9a7)](https://github.com/honghuangdc/soybean-admin/commit/8f9a705) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![sigma-plus](https://github.com/sigma-plus.png?size=48)](https://github.com/sigma-plus)   + +## [v1.2.1](https://github.com/honghuangdc/soybean-admin/compare/v1.2.0...v1.2.1) (2024-06-07) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - fix get user info when page reload  -  by @soybeanjs [(ff51b)](https://github.com/honghuangdc/soybean-admin/commit/ff51b72) + - fix setupAppVersionNotification render  -  by @soybeanjs [(6a6eb)](https://github.com/honghuangdc/soybean-admin/commit/6a6eb9a) + +###    ๐Ÿ“– Documentation + +- **projects**: update CHANGELOG  -  by @soybeanjs [(fe06b)](https://github.com/honghuangdc/soybean-admin/commit/fe06b8c) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @soybeanjs [(08827)](https://github.com/honghuangdc/soybean-admin/commit/08827a4) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v1.2.0](https://github.com/soybeanjs/soybean-admin/compare/v1.1.5...v1.2.0) (2024-06-06) + +###    ๐Ÿš€ Features + +- **projects**: + - support system new version update notification. close #420  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/420 [(584cd)](https://github.com/soybeanjs/soybean-admin/commit/584cd54) + - get user info in router guard and remove in localStorage. close #459  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/459 [(5531a)](https://github.com/soybeanjs/soybean-admin/commit/5531a68) + +###    ๐Ÿ“– Documentation + +- **projects**: update CHANGELOG  -  by @soybeanjs [(2bec8)](https://github.com/soybeanjs/soybean-admin/commit/2bec899) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v1.1.5](https://github.com/soybeanjs/soybean-admin/compare/v1.1.4...v1.1.5) (2024-06-06) + +###    ๐Ÿž Bug Fixes + +- **projects**: fix register name, CodeLogin => Register  -  by @m-xlsea in https://github.com/soybeanjs/soybean-admin/issues/478 [(ddf38)](https://github.com/soybeanjs/soybean-admin/commit/ddf3823) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @soybeanjs [(060c0)](https://github.com/soybeanjs/soybean-admin/commit/060c0a9) +- **projects**: update vscode settings: vue official  -  by @soybeanjs [(76649)](https://github.com/soybeanjs/soybean-admin/commit/76649e2) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![m-xlsea](https://github.com/m-xlsea.png?size=48)](https://github.com/m-xlsea)   + +## [v1.1.4](https://github.com/honghuangdc/soybean-admin/compare/v1.1.3...v1.1.4) (2024-06-06) + +###    ๐Ÿž Bug Fixes + +- **utils**: modalLogout bug when esc is pressed  -  by @sigma-plus in https://github.com/honghuangdc/soybean-admin/issues/470 [(bd69c)](https://github.com/honghuangdc/soybean-admin/commit/bd69c00) + +###    ๐Ÿ›  Optimizations + +- **projects**: optimize RouteMeta remarks  -  by @soybeanjs [(ffb48)](https://github.com/honghuangdc/soybean-admin/commit/ffb48b1) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update CHANGELOG  -  by @soybeanjs [(756f8)](https://github.com/honghuangdc/soybean-admin/commit/756f84a) + - update Node&pnpm version  -  by @Azir-11 in https://github.com/honghuangdc/soybean-admin/issues/472 [(9b05d)](https://github.com/honghuangdc/soybean-admin/commit/9b05d73) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @soybeanjs [(d0380)](https://github.com/honghuangdc/soybean-admin/commit/d0380ce) + - update deps  -  by @soybeanjs [(1f464)](https://github.com/honghuangdc/soybean-admin/commit/1f4647b) +- **projects**: + - close http proxy  -  by @soybeanjs [(d08a3)](https://github.com/honghuangdc/soybean-admin/commit/d08a381) + - update mock url  -  by @soybeanjs [(e6086)](https://github.com/honghuangdc/soybean-admin/commit/e6086f0) + - update vscode settings  -  by @soybeanjs [(910df)](https://github.com/honghuangdc/soybean-admin/commit/910dfca) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)  [![sigma-plus](https://github.com/sigma-plus.png?size=48)](https://github.com/sigma-plus)   + +## [v1.1.3](https://github.com/soybeanjs/soybean-admin/compare/v1.1.2...v1.1.3) (2024-06-02) + +###    ๐Ÿž Bug Fixes + +- **components**: + - Fix the issue of search box popping up repeatedly due to carriage return  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/468 [(5bd96)](https://github.com/soybeanjs/soybean-admin/commit/5bd96b8) +- **projects**: + - fix click menu search. fixed #466, close #467  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/466 and https://github.com/soybeanjs/soybean-admin/issues/467 [(8efdb)](https://github.com/soybeanjs/soybean-admin/commit/8efdb10) + - fix reCacheRoute. fixed #464  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/464 [(59faf)](https://github.com/soybeanjs/soybean-admin/commit/59faf15) +- **styles**: + - fix FirstLevelMenu style. fixed #450  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/450 [(db64b)](https://github.com/soybeanjs/soybean-admin/commit/db64b0e) + - fix PinToggler style. fixed #451  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/451 [(42b12)](https://github.com/soybeanjs/soybean-admin/commit/42b121a) + +###    ๐Ÿ›  Optimizations + +- **components**: accuracy draggable area for TableColumnSetting with animation  -  by @orangelckc in https://github.com/soybeanjs/soybean-admin/issues/465 [(2aa85)](https://github.com/soybeanjs/soybean-admin/commit/2aa85c6) +- **projects**: unocss border shortcut  -  by @soybeanjs [(40d0f)](https://github.com/soybeanjs/soybean-admin/commit/40d0f8a) + +###    ๐Ÿ“– Documentation + +- **projects**: update CHANGELOG  -  by @soybeanjs [(87b18)](https://github.com/soybeanjs/soybean-admin/commit/87b1838) + +###    ๐Ÿก Chore + +- **other**: + - correct spell mistake  -  by @orangelckc in https://github.com/soybeanjs/soybean-admin/issues/460 [(086ba)](https://github.com/soybeanjs/soybean-admin/commit/086bad4) + - correct spell mistake  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/462 [(f1850)](https://github.com/soybeanjs/soybean-admin/commit/f185041) +- **projects**: + - update vscode launch.json  -  by @soybeanjs [(4c1c7)](https://github.com/soybeanjs/soybean-admin/commit/4c1c7e6) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)  [![orangelckc](https://github.com/orangelckc.png?size=48)](https://github.com/orangelckc)   + +## [v1.1.2](https://github.com/soybeanjs/soybean-admin/compare/v1.1.1...v1.1.2) (2024-05-24) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - fix header style & fix button highlight when click global-tab. fixed #446  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/446 [(64fc0)](https://github.com/soybeanjs/soybean-admin/commit/64fc099) + - fix multi tab page only render once. fixed #441  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/441 [(e379d)](https://github.com/soybeanjs/soybean-admin/commit/e379d6c) + +###    ๐Ÿ›  Optimizations + +- **projects**: optimize code  -  by @honghuangdc [(bc8dc)](https://github.com/soybeanjs/soybean-admin/commit/bc8dc47) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.1.1](https://github.com/soybeanjs/soybean-admin/compare/v1.1.0...v1.1.1) (2024-05-20) + +###    ๐Ÿš€ Features + +- **hooks**: add setOptions for useEcharts  -  by @honghuangdc [(e4d53)](https://github.com/soybeanjs/soybean-admin/commit/e4d53aa) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - fix useRouter. fixed #436  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/436 [(0774a)](https://github.com/soybeanjs/soybean-admin/commit/0774a51) + - add error handle when get routes in dynamic route mode. fixed 440  -  by @honghuangdc [(57b4a)](https://github.com/soybeanjs/soybean-admin/commit/57b4a9d) +- **styles**: + - fix useTable type  -  by @honghuangdc [(07124)](https://github.com/soybeanjs/soybean-admin/commit/071241f) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update CHANGELOG  -  by @honghuangdc [(19783)](https://github.com/soybeanjs/soybean-admin/commit/1978397) + - update README.md  -  by @honghuangdc [(fa56e)](https://github.com/soybeanjs/soybean-admin/commit/fa56e9c) + - update README.md  -  by @honghuangdc [(419ea)](https://github.com/soybeanjs/soybean-admin/commit/419ea42) + +###    ๐Ÿก Chore + +- **projects**: + - update deps & fix TS error  -  by @honghuangdc [(4ea9c)](https://github.com/soybeanjs/soybean-admin/commit/4ea9c85) + - update eslint-config & fix code  -  by @honghuangdc [(68ea9)](https://github.com/soybeanjs/soybean-admin/commit/68ea974) + - update @elegant-router/vue & add error handle for resolve route. fixed #442  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/442 [(24ff8)](https://github.com/soybeanjs/soybean-admin/commit/24ff852) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.1.0](https://github.com/honghuangdc/soybean-admin/compare/v1.0.9...v1.1.0) (2024-05-07) + +###    ๐Ÿš€ Features + +- **projects**: + - support grayscale. fixed #385  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/385 [(d335d)](https://github.com/honghuangdc/soybean-admin/commit/d335df6) + - Add prefix to local storage  -  by **Azir** [(1fc34)](https://github.com/honghuangdc/soybean-admin/commit/1fc34cc) + - add table showTotal options  -  by **paynezhuang** [(3e61e)](https://github.com/honghuangdc/soybean-admin/commit/3e61eab) + - add recommend color switch. closed #388  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/388 [(a1920)](https://github.com/honghuangdc/soybean-admin/commit/a1920fc) + - add menu route field  -  by **paynezhuang** [(dbe31)](https://github.com/honghuangdc/soybean-admin/commit/dbe31eb) + - support repeated request errors occur once in a short time. close #368, close #369  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/368 and https://github.com/honghuangdc/soybean-admin/issues/369 [(e3bd3)](https://github.com/honghuangdc/soybean-admin/commit/e3bd397) + - close tab by mouse wheel button click  -  by **JianJroh** [(d3849)](https://github.com/honghuangdc/soybean-admin/commit/d3849ba) + - page: support manage_menu more options. close #366  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/366 [(c4b5c)](https://github.com/honghuangdc/soybean-admin/commit/c4b5c65) + - useTable adds expand to display  -  by **paynezhuang** [(0a90d)](https://github.com/honghuangdc/soybean-admin/commit/0a90dd3) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - menu fixedIndexInTab default null  -  by **paynezhuang** [(3d10e)](https://github.com/honghuangdc/soybean-admin/commit/3d10ef1) + - fix menu-toggler zIndex  -  by @honghuangdc [(7bd43)](https://github.com/honghuangdc/soybean-admin/commit/7bd43df) + - fix manage_menu modal style  -  by @honghuangdc [(60f3b)](https://github.com/honghuangdc/soybean-admin/commit/60f3b14) + - fix menu data when role is changed. fixed #391  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/391 [(3b47b)](https://github.com/honghuangdc/soybean-admin/commit/3b47b5a) + +###    ๐Ÿ›  Optimizations + +- **projects**: remove deprecated code  -  by @honghuangdc [(72ccb)](https://github.com/honghuangdc/soybean-admin/commit/72ccb6b) + +###    ๐Ÿ’… Refactors + +- **projects**: + - refactor @sa/color-palette => @sa/color & perf @sa/utils  -  by @honghuangdc [(34999)](https://github.com/honghuangdc/soybean-admin/commit/3499997) + - menu-operate-drawer => menu-operate-modal  -  by @honghuangdc [(003e1)](https://github.com/honghuangdc/soybean-admin/commit/003e145) + +###    ๐Ÿ“– Documentation + +- **projects**: + - add CHANGELOG.zh_CN.md  -  by @honghuangdc [(18b3f)](https://github.com/honghuangdc/soybean-admin/commit/18b3f05) + - update CHANGELOG  -  by @honghuangdc [(4d17c)](https://github.com/honghuangdc/soybean-admin/commit/4d17cfd) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @honghuangdc [(1cb38)](https://github.com/honghuangdc/soybean-admin/commit/1cb3816) + - update deps  -  by @honghuangdc [(599b4)](https://github.com/honghuangdc/soybean-admin/commit/599b4e1) +- **projects**: + - merge main to v1.1.0  -  by @honghuangdc [(ebe55)](https://github.com/honghuangdc/soybean-admin/commit/ebe55af) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[paynezhuang](mailto:paynezhuang@gmail.com), [JianJroh](mailto:rhjian@foxmail.com), [Azir](mailto:2075125282@qq.com) + +## [v1.1.0-beta.2](https://github.com/honghuangdc/soybean-admin/compare/v1.1.0-beta.1...v1.1.0-beta.2) (2024-05-07) + +###    ๐Ÿš€ Features + +- **projects**: useTable adds expand to display  -  by **paynezhuang** [(0a90d)](https://github.com/honghuangdc/soybean-admin/commit/0a90dd3) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - fix manage_menu modal style  -  by @honghuangdc [(60f3b)](https://github.com/honghuangdc/soybean-admin/commit/60f3b14) + - fix menu data when role is changed. fixed #391  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/391 [(3b47b)](https://github.com/honghuangdc/soybean-admin/commit/3b47b5a) + +###    ๐Ÿ›  Optimizations + +- **projects**: remove deprecated code  -  by @honghuangdc [(72ccb)](https://github.com/honghuangdc/soybean-admin/commit/72ccb6b) + +###    ๐Ÿ“– Documentation + +- **projects**: add CHANGELOG.zh_CN.md  -  by @honghuangdc [(18b3f)](https://github.com/honghuangdc/soybean-admin/commit/18b3f05) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[paynezhuang](mailto:paynezhuang@gmail.com) + +## [v1.1.0-beta.1](https://github.com/soybeanjs/soybean-admin/compare/v1.0.9...v1.1.0-beta.1) (2024-05-07) + +###    ๐Ÿš€ Features + +- **projects**: + - support grayscale. fixed #385  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/385 [(d335d)](https://github.com/soybeanjs/soybean-admin/commit/d335df6) + - Add prefix to local storage  -  by **Azir** [(1fc34)](https://github.com/soybeanjs/soybean-admin/commit/1fc34cc) + - add table showTotal options  -  by **paynezhuang** [(3e61e)](https://github.com/soybeanjs/soybean-admin/commit/3e61eab) + - add recommend color switch. closed #388  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/388 [(a1920)](https://github.com/soybeanjs/soybean-admin/commit/a1920fc) + - add menu route field  -  by **paynezhuang** [(dbe31)](https://github.com/soybeanjs/soybean-admin/commit/dbe31eb) + - support repeated request errors occur once in a short time. close #368, close #369  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/368 and https://github.com/soybeanjs/soybean-admin/issues/369 [(e3bd3)](https://github.com/soybeanjs/soybean-admin/commit/e3bd397) + - close tab by mouse wheel button click  -  by **JianJroh** [(d3849)](https://github.com/soybeanjs/soybean-admin/commit/d3849ba) + - page: support manage_menu more options. close #366  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/366 [(c4b5c)](https://github.com/soybeanjs/soybean-admin/commit/c4b5c65) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - menu fixedIndexInTab default null  -  by **paynezhuang** [(3d10e)](https://github.com/soybeanjs/soybean-admin/commit/3d10ef1) + - fix menu-toggler zIndex  -  by @honghuangdc [(7bd43)](https://github.com/soybeanjs/soybean-admin/commit/7bd43df) + +###    ๐Ÿ’… Refactors + +- **projects**: + - refactor @sa/color-palette => @sa/color & perf @sa/utils  -  by @honghuangdc [(34999)](https://github.com/soybeanjs/soybean-admin/commit/3499997) + - menu-operate-drawer => menu-operate-modal  -  by @honghuangdc [(003e1)](https://github.com/soybeanjs/soybean-admin/commit/003e145) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @honghuangdc [(1cb38)](https://github.com/soybeanjs/soybean-admin/commit/1cb3816) + - update deps  -  by @honghuangdc [(599b4)](https://github.com/soybeanjs/soybean-admin/commit/599b4e1) +- **projects**: + - merge main to v1.1.0  -  by @honghuangdc [(ebe55)](https://github.com/soybeanjs/soybean-admin/commit/ebe55af) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[JianJroh](mailto:rhjian@foxmail.com), [paynezhuang](mailto:paynezhuang@gmail.com), [Azir](mailto:2075125282@qq.com) + +## [v1.0.9](https://github.com/soybeanjs/soybean-admin/compare/v1.0.8...v1.0.9) (2024-05-05) + +###    ๐Ÿš€ Features + +- **packages**: @sa/scripts: add new commit type `optimize` and commit scope `packages`  -  by @honghuangdc [(fbc2e)](https://github.com/soybeanjs/soybean-admin/commit/fbc2e61) + +###    ๐Ÿž Bug Fixes + +- **projects**: fix manage page drawer operate about data reset. fixed #415, fixed #417  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/415 and https://github.com/soybeanjs/soybean-admin/issues/417 [(f4513)](https://github.com/soybeanjs/soybean-admin/commit/f4513e1) + +###    ๐Ÿ“– Documentation + +- **projects**: + - add ecosystem to README.md  -  by @honghuangdc [(d0f17)](https://github.com/soybeanjs/soybean-admin/commit/d0f17a4) + - add PanisAdmin to README  -  by **paynezhuang** [(ce2a7)](https://github.com/soybeanjs/soybean-admin/commit/ce2a75b) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @honghuangdc [(413a8)](https://github.com/soybeanjs/soybean-admin/commit/413a8b2) + - update deps  -  by @honghuangdc [(734ef)](https://github.com/soybeanjs/soybean-admin/commit/734ef98) +- **projects**: + - update .npmrc  -  by @honghuangdc [(52188)](https://github.com/soybeanjs/soybean-admin/commit/52188d8) + - update vscode settings  -  by @honghuangdc [(c137b)](https://github.com/soybeanjs/soybean-admin/commit/c137b97) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[paynezhuang](mailto:paynezhuang@gmail.com) + +## [v1.0.8](https://github.com/soybeanjs/soybean-admin/compare/v1.0.7...v1.0.8) (2024-04-27) + +###    ๐Ÿž Bug Fixes + +- **components**: + - fix PinToggler label. fixed #407  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/407 [(c0ed1)](https://github.com/soybeanjs/soybean-admin/commit/c0ed1f2) +- **projects**: + - text level low. #409  -  by **alleycharming** in https://github.com/soybeanjs/soybean-admin/issues/409 [(3ddb1)](https://github.com/soybeanjs/soybean-admin/commit/3ddb17a) + - fix tab fixedIndex as null case  -  by **paynezhuang** [(4708e)](https://github.com/soybeanjs/soybean-admin/commit/4708ede) + - recovery the layout config before is mobile. fixed #408, fixed #361  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/408 and https://github.com/soybeanjs/soybean-admin/issues/361 [(dae2a)](https://github.com/soybeanjs/soybean-admin/commit/dae2aa5) + +###    ๐Ÿ”ฅ Performance + +- **projects**: perf judgement the fixed tab  -  by @honghuangdc [(b3e9b)](https://github.com/soybeanjs/soybean-admin/commit/b3e9bba) + +###    ๐Ÿ’… Refactors + +- **projects**: `Soybean Admin` to `SoybeanAdmin`  -  by @honghuangdc [(a8dbc)](https://github.com/soybeanjs/soybean-admin/commit/a8dbc03) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[paynezhuang](mailto:paynezhuang@gmail.com), [alleycharming](mailto:alleycharming@gmail.com) + +## [v1.0.7](https://github.com/soybeanjs/soybean-admin/compare/v1.0.6...v1.0.7) (2024-04-25) + +###    ๐Ÿš€ Features + +- **projects**: support iframe page with diffrent url of custom route  -  by @honghuangdc [(da12d)](https://github.com/soybeanjs/soybean-admin/commit/da12d4a) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @honghuangdc [(fbd80)](https://github.com/soybeanjs/soybean-admin/commit/fbd80c2) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.0.6](https://github.com/soybeanjs/soybean-admin/compare/v1.0.5...v1.0.6) (2024-04-25) + +###    ๐Ÿš€ Features + +- **hooks**: add state hooks: useRef, useState, useSignal  -  by @honghuangdc [(09f64)](https://github.com/soybeanjs/soybean-admin/commit/09f6464) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - added responseType judgment. #396  -  by **alleycharming** in https://github.com/soybeanjs/soybean-admin/issues/396 [(82eab)](https://github.com/soybeanjs/soybean-admin/commit/82eabab) + - supply $t import statement  -  by @honghuangdc [(b2660)](https://github.com/soybeanjs/soybean-admin/commit/b266035) + - fix mix-menu blank. fixed #389 & cache mixMenuFixed  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/389 [(93c7f)](https://github.com/soybeanjs/soybean-admin/commit/93c7ff7) + +###    ๐Ÿ”ฅ Performance + +- **hooks**: + - perf useSignal  -  by @honghuangdc [(5d45c)](https://github.com/soybeanjs/soybean-admin/commit/5d45cef) +- **projects**: + - remove useless prop `title` of `NDrawer`  -  by @honghuangdc [(fdde6)](https://github.com/soybeanjs/soybean-admin/commit/fdde679) + - add tsconfig.json for @sa/color-palette  -  by @honghuangdc [(d460e)](https://github.com/soybeanjs/soybean-admin/commit/d460e5c) + +###    ๐Ÿ’… Refactors + +- **hooks**: refactor useSignal, useComputed  -  by @honghuangdc [(3b5e4)](https://github.com/soybeanjs/soybean-admin/commit/3b5e4b3) +- **projects**: useMixMenuContext replace useMixMenu  -  by @honghuangdc [(1e142)](https://github.com/soybeanjs/soybean-admin/commit/1e14293) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @honghuangdc [(e57bf)](https://github.com/soybeanjs/soybean-admin/commit/e57bf0b) +- **projects**: + - use `engines` replace `packageManager`  -  by @honghuangdc [(dcd51)](https://github.com/soybeanjs/soybean-admin/commit/dcd51f4) + - update pnpm version requirement  -  by @honghuangdc [(19e65)](https://github.com/soybeanjs/soybean-admin/commit/19e65c1) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[alleycharming](mailto:alleycharming@gmail.com) + +## [v1.0.5](https://github.com/honghuangdc/soybean-admin/compare/v1.0.4...v1.0.5) (2024-04-24) + +###    ๐Ÿ“– Documentation + +- **projects**: update CHANGELOG.md  -  by @honghuangdc [(cf5bc)](https://github.com/honghuangdc/soybean-admin/commit/cf5bc88) + +###    ๐Ÿก Chore + +- **projects**: + - lower vue version to 3.4.23  -  by @honghuangdc [(b5243)](https://github.com/honghuangdc/soybean-admin/commit/b52432a) + - update pnpm-lock.yaml  -  by @honghuangdc [(516f4)](https://github.com/honghuangdc/soybean-admin/commit/516f46a) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.0.4](https://github.com/soybeanjs/soybean-admin/compare/v1.0.3...v1.0.4) (2024-04-24) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - fix CHANGELOG versions  -  by @honghuangdc [(d9af5)](https://github.com/soybeanjs/soybean-admin/commit/d9af5aa) + - fix disabled page animate  -  by @honghuangdc [(23f28)](https://github.com/soybeanjs/soybean-admin/commit/23f283a) + - fix routes data when role is change. fixed #391  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/391 [(cb83d)](https://github.com/soybeanjs/soybean-admin/commit/cb83d6d) + - fix tabs data when role is change. fixed #392  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/392 [(04aa0)](https://github.com/soybeanjs/soybean-admin/commit/04aa097) + - recovery pnpm-lock.yaml  -  by @honghuangdc [(c6952)](https://github.com/soybeanjs/soybean-admin/commit/c695208) + +###    ๐Ÿ’… Refactors + +- **hooks**: refactor @sa/color  -  by @honghuangdc [(93191)](https://github.com/soybeanjs/soybean-admin/commit/9319173) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README.md  -  by @honghuangdc [(5a523)](https://github.com/soybeanjs/soybean-admin/commit/5a5232b) + - update README.md  -  by @honghuangdc [(79d9c)](https://github.com/soybeanjs/soybean-admin/commit/79d9c51) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @honghuangdc [(ac928)](https://github.com/soybeanjs/soybean-admin/commit/ac92817) + - update deps  -  by @honghuangdc [(3ceeb)](https://github.com/soybeanjs/soybean-admin/commit/3ceeb6f) + - update deps  -  by @honghuangdc [(9a669)](https://github.com/soybeanjs/soybean-admin/commit/9a66979) +- **projects**: + - update pnpm version  -  by @honghuangdc [(42e16)](https://github.com/soybeanjs/soybean-admin/commit/42e16a0) + - update deps & update pnpm version & update eslint config  -  by @honghuangdc [(7392b)](https://github.com/soybeanjs/soybean-admin/commit/7392beb) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.0.3](https://github.com/soybeanjs/soybean-admin/compare/v1.0.2...v1.0.3) (2024-04-16) + +###    ๐Ÿš€ Features + +- **hooks**: deleting the route export of useRoutePush, use vue-router  -  by **paynezhuang** [(c6648)](https://github.com/soybeanjs/soybean-admin/commit/c6648b6) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - fix menu edit rules  -  by **paynezhuang** [(00105)](https://github.com/soybeanjs/soybean-admin/commit/001059c) + - fix SvgIcon inheritAttrs warning  -  by @honghuangdc [(efc0e)](https://github.com/soybeanjs/soybean-admin/commit/efc0e25) + - fix axios createRequest: add default state  -  by @honghuangdc [(d6eda)](https://github.com/soybeanjs/soybean-admin/commit/d6eda8f) + - update union-key.d.ts  -  by @honghuangdc [(60bef)](https://github.com/soybeanjs/soybean-admin/commit/60beff7) + - fix update theme color  -  by @honghuangdc [(27c53)](https://github.com/soybeanjs/soybean-admin/commit/27c53cd) + +###    ๐Ÿ”ฅ Performance + +- **projects**: perf code  -  by @honghuangdc [(b7f07)](https://github.com/soybeanjs/soybean-admin/commit/b7f0749) + +###    ๐Ÿ’… Refactors + +- **projects**: update naive-ui.d.ts  -  by @honghuangdc [(bb74d)](https://github.com/soybeanjs/soybean-admin/commit/bb74d99) + +###    ๐Ÿ“– Documentation + +- **projects**: update README.md  -  by @honghuangdc [(f4a9c)](https://github.com/soybeanjs/soybean-admin/commit/f4a9cf8) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[paynezhuang](mailto:paynezhuang@gmail.com) + +## [v1.0.2](https://github.com/soybeanjs/soybean-admin/compare/v1.0.1...v1.0.2) (2024-04-08) + +###    ๐Ÿž Bug Fixes + +- **projects**: unify border-radius of Tag. fixed #378  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/378 [(2f15a)](https://github.com/soybeanjs/soybean-admin/commit/2f15a2a) +- **styles**: fix css var is inserted repeatedly  -  by **็‡•ๅšๆ–‡** [(769d8)](https://github.com/soybeanjs/soybean-admin/commit/769d84a) + +###    ๐Ÿ’… Refactors + +- **projects**: refactor addThemeVarsToHtml  -  by @honghuangdc [(41e47)](https://github.com/soybeanjs/soybean-admin/commit/41e470e) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @honghuangdc [(a1b48)](https://github.com/soybeanjs/soybean-admin/commit/a1b484a) +- **projects**: disabled unocss eslint rule: order-attributify  -  by @honghuangdc [(1c72d)](https://github.com/soybeanjs/soybean-admin/commit/1c72dc7) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[็‡•ๅšๆ–‡](mailto:349952469@qq.com) + +## [v1.0.1](https://github.com/soybeanjs/soybean-admin/compare/v1.0.0...v1.0.1) (2024-04-03) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - fix flatRequest error type. fixed #376  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/376 [(1ec5e)](https://github.com/soybeanjs/soybean-admin/commit/1ec5ea0) + - add maxWidth for GlobalTab to fix bg with gap. fixed #350  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/350 [(cc539)](https://github.com/soybeanjs/soybean-admin/commit/cc53997) + +###    ๐Ÿ“– Documentation + +- **projects**: update README.md  -  by @honghuangdc [(76011)](https://github.com/soybeanjs/soybean-admin/commit/76011af) + +###    ๐Ÿก Chore + +- **projects**: + - update deps  -  by @honghuangdc [(4babb)](https://github.com/soybeanjs/soybean-admin/commit/4babbe1) + - update pnpm version  -  by @honghuangdc [(9125c)](https://github.com/soybeanjs/soybean-admin/commit/9125cc9) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.0.0](https://github.com/soybeanjs/soybean-admin/compare/v0.10.4...v1.0.0) (2024-03-31) + +###    ๐Ÿš€ Features + +- internationalized menu search  -  by **Kori** [(9e115)](https://github.com/soybeanjs/soybean-admin/commit/9e115da) +- **components**: + - enhance the custom strength of the 'TableHeaderOperation' component  -  by **tnt group** [(fdf64)](https://github.com/soybeanjs/soybean-admin/commit/fdf64f7) + - add GlobalSearch components  -  by **็‡•ๅšๆ–‡** [(9ea87)](https://github.com/soybeanjs/soybean-admin/commit/9ea8789) +- **hooks**: + - add use-echarts  -  by @honghuangdc [(726ab)](https://github.com/soybeanjs/soybean-admin/commit/726abe4) +- **projects**: + - 1.0 beta  -  by @honghuangdc [(e918a)](https://github.com/soybeanjs/soybean-admin/commit/e918a2c) + - support Vite5  -  by @honghuangdc [(96e4a)](https://github.com/soybeanjs/soybean-admin/commit/96e4aff) + - @sa/axios: createRequest, createFlatRequest, createHookRequest  -  by @honghuangdc [(bac16)](https://github.com/soybeanjs/soybean-admin/commit/bac1632) + - add app loading  -  by @honghuangdc [(c6545)](https://github.com/soybeanjs/soybean-admin/commit/c65451b) + - add copyright, unocss shortcut: card-wrapper, update package.json  -  by @honghuangdc [(affcc)](https://github.com/soybeanjs/soybean-admin/commit/affcc26) + - add page: about  -  by @honghuangdc [(4955f)](https://github.com/soybeanjs/soybean-admin/commit/4955f1a) + - add custom route exception  -  by @honghuangdc [(b43c9)](https://github.com/soybeanjs/soybean-admin/commit/b43c925) + - filter tabs which are not in routes  -  by @honghuangdc [(f59f3)](https://github.com/soybeanjs/soybean-admin/commit/f59f348) + - packages/scripts: add command changelog,release  -  by @honghuangdc [(dafb6)](https://github.com/soybeanjs/soybean-admin/commit/dafb6fa) + - add script: gen-route  -  by @honghuangdc [(697c1)](https://github.com/soybeanjs/soybean-admin/commit/697c1b6) + - @sa/axios: add qs stringify for params  -  by @honghuangdc [(2400c)](https://github.com/soybeanjs/soybean-admin/commit/2400c02) + - page home & perf useEcharts  -  by @honghuangdc [(62e4d)](https://github.com/soybeanjs/soybean-admin/commit/62e4da0) + - finish page home  -  by @honghuangdc [(7bd1e)](https://github.com/soybeanjs/soybean-admin/commit/7bd1e47) + - add page function_tab  -  by @honghuangdc [(6ff86)](https://github.com/soybeanjs/soybean-admin/commit/6ff86e7) + - page manage_role  -  by @honghuangdc [(237c6)](https://github.com/soybeanjs/soybean-admin/commit/237c6d2) + - page manage_user  -  by @honghuangdc [(8a170)](https://github.com/soybeanjs/soybean-admin/commit/8a170ee) + - page manage_menu  -  by @honghuangdc [(87d65)](https://github.com/soybeanjs/soybean-admin/commit/87d65d3) + - page manage_menu operateDrawer  -  by @honghuangdc [(db17c)](https://github.com/soybeanjs/soybean-admin/commit/db17c91) + - Add type to TabRoute: matched  -  by @Azir-11 [(2d102)](https://github.com/soybeanjs/soybean-admin/commit/2d102a0) + - support directory menu hide all child menus. fixed #325  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/325 [(7256a)](https://github.com/soybeanjs/soybean-admin/commit/7256ad4) + - mock manage list data with pagination  -  by @honghuangdc [(1a6be)](https://github.com/soybeanjs/soybean-admin/commit/1a6be00) + - globalSearch add i18n  -  by **็‡•ๅšๆ–‡** [(0126d)](https://github.com/soybeanjs/soybean-admin/commit/0126da4) + - Add route meta parameter:fixedQuery  -  by @Azir-11 [(874aa)](https://github.com/soybeanjs/soybean-admin/commit/874aaca) + - update  -  by @honghuangdc [(4158a)](https://github.com/soybeanjs/soybean-admin/commit/4158a72) + - change borderRadius to 6px of naiveUI  -  by @honghuangdc [(49558)](https://github.com/soybeanjs/soybean-admin/commit/49558ca) + - pef manage role  -  by @honghuangdc [(18709)](https://github.com/soybeanjs/soybean-admin/commit/1870981) + - login page: code-login  -  by @honghuangdc [(c91dd)](https://github.com/soybeanjs/soybean-admin/commit/c91dd28) + - login page: register  -  by @honghuangdc [(1ed33)](https://github.com/soybeanjs/soybean-admin/commit/1ed33dc) + - add request refresh token & logout  -  by @honghuangdc [(11a6a)](https://github.com/soybeanjs/soybean-admin/commit/11a6a3b) + - add request exception example page  -  by @honghuangdc [(41e8b)](https://github.com/soybeanjs/soybean-admin/commit/41e8bc4) + - add auth example  -  by @honghuangdc [(c11d5)](https://github.com/soybeanjs/soybean-admin/commit/c11d56d) +- **router**: + - add sortRoutesByOrder function  -  by @Azir-11 [(0cf09)](https://github.com/soybeanjs/soybean-admin/commit/0cf09ba) + +###    ๐Ÿž Bug Fixes + +- **components**: + - fix tooltip zIndex of ButtonIcon  -  by @honghuangdc [(99097)](https://github.com/soybeanjs/soybean-admin/commit/99097b4) + - supplement the `NaiveUI` type  -  by **tnt group** [(ccc2b)](https://github.com/soybeanjs/soybean-admin/commit/ccc2b67) + - fix homeTab closeRight and disable colseLeft  -  by **~li** [(d28bf)](https://github.com/soybeanjs/soybean-admin/commit/d28bf52) +- **hooks**: + - Fix Naive Pagination's outdated API  -  by **tnt group** [(37436)](https://github.com/soybeanjs/soybean-admin/commit/3743612) +- **projects**: + - ไฟฎๅค่ทฏ็”ฑๅ‘ฝๅไธบๅŒ…ๅซๅ…ณ็ณปๆ—ถๅฏผ่‡ดๅฏผ่ˆชๆ•ฐๆฎๅ‡บ้”™็š„้—ฎ้ข˜  -  by @Particaly [(76636)](https://github.com/soybeanjs/soybean-admin/commit/766369f) + - rename zh-ch  -  by @honghuangdc [(a8a77)](https://github.com/soybeanjs/soybean-admin/commit/a8a77ea) + - Fix welcome notification not closing  -  by @Azir-11 [(748cf)](https://github.com/soybeanjs/soybean-admin/commit/748cfa2) + - fix i18n vscode settings  -  by @honghuangdc [(fbf4c)](https://github.com/soybeanjs/soybean-admin/commit/fbf4cc4) + - add duration of login success notification  -  by @honghuangdc [(1335d)](https://github.com/soybeanjs/soybean-admin/commit/1335d47) + - fix menu indent  -  by @honghuangdc [(87143)](https://github.com/soybeanjs/soybean-admin/commit/8714317) + - fix theme mode segment  -  by @honghuangdc [(2372d)](https://github.com/soybeanjs/soybean-admin/commit/2372dc9) + - fix app loading theme color  -  by @honghuangdc [(0ba19)](https://github.com/soybeanjs/soybean-admin/commit/0ba19d5) + - fix page about style in mobile  -  by @honghuangdc [(8b6de)](https://github.com/soybeanjs/soybean-admin/commit/8b6de48) + - fix themeDrawer darkMode segement  -  by @honghuangdc [(1b5ca)](https://github.com/soybeanjs/soybean-admin/commit/1b5caa0) + - fix themeDrawer copy  -  by @honghuangdc [(b3779)](https://github.com/soybeanjs/soybean-admin/commit/b3779a6) + - remove space in tab content  -  by @honghuangdc [(4aae6)](https://github.com/soybeanjs/soybean-admin/commit/4aae6a5) + - fix horizontal menu  -  by @honghuangdc [(d886e)](https://github.com/soybeanjs/soybean-admin/commit/d886e50) + - perf card style  -  by @honghuangdc [(c1afb)](https://github.com/soybeanjs/soybean-admin/commit/c1afb9d) + - fix manage_user title  -  by @honghuangdc [(7770b)](https://github.com/soybeanjs/soybean-admin/commit/7770b37) + - default proxy prefix  -  by @smileluck [(da246)](https://github.com/soybeanjs/soybean-admin/commit/da24642) + - fix request msg  -  by @honghuangdc [(ae6b6)](https://github.com/soybeanjs/soybean-admin/commit/ae6b613) + - Fix the issue of tab error displaying parent localIcon  -  by @Azir-11 [(a9c98)](https://github.com/soybeanjs/soybean-admin/commit/a9c98d9) + - The matched value of TabRoute should be optional  -  by @Azir-11 [(e6fed)](https://github.com/soybeanjs/soybean-admin/commit/e6fed1f) + - fix build [unocss]: build failed to load icon "close", fixed #319  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/319 [(c18d8)](https://github.com/soybeanjs/soybean-admin/commit/c18d82f) + - fix resolve alias  -  by @honghuangdc [(3bdcb)](https://github.com/soybeanjs/soybean-admin/commit/3bdcbc7) + - Missing default value for tab icon  -  by @Azir-11 [(72a46)](https://github.com/soybeanjs/soybean-admin/commit/72a4679) + - add route icon: fucntion_hide-child  -  by @honghuangdc [(0a3ef)](https://github.com/soybeanjs/soybean-admin/commit/0a3efe3) + - fix table x-scroll. fixed #324  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/324 [(c7e2c)](https://github.com/soybeanjs/soybean-admin/commit/c7e2c55) + - Fix the logic of root route redirection to home  -  by **ๆ•็‘ž็Ž›็š„็š‡ๅธ** [(0123c)](https://github.com/soybeanjs/soybean-admin/commit/0123c37) + - Fix homepage mount error under dynamic routing  -  by **ๆ•็‘ž็Ž›็š„็š‡ๅธ** [(9cf2a)](https://github.com/soybeanjs/soybean-admin/commit/9cf2a51) + - fix repeat home tab  -  by @honghuangdc [(bccd6)](https://github.com/soybeanjs/soybean-admin/commit/bccd6cb) + - fix proxy config  -  by @honghuangdc [(c8019)](https://github.com/soybeanjs/soybean-admin/commit/c8019c4) + - fix proxy config  -  by @honghuangdc [(ffc95)](https://github.com/soybeanjs/soybean-admin/commit/ffc95d2) + - fix table row-key ts type  -  by @honghuangdc [(0cc8f)](https://github.com/soybeanjs/soybean-admin/commit/0cc8f05) + - fix class name conflict with unocss icon  -  by @honghuangdc [(455e4)](https://github.com/soybeanjs/soybean-admin/commit/455e48f) + - fix repeat routes  -  by @honghuangdc [(2c543)](https://github.com/soybeanjs/soybean-admin/commit/2c543f1) + - fix route init  -  by @honghuangdc [(23a40)](https://github.com/soybeanjs/soybean-admin/commit/23a4098) + - fix pin-toggler toolTip zIndex  -  by @honghuangdc [(f89e6)](https://github.com/soybeanjs/soybean-admin/commit/f89e6c0) + +###    ๐Ÿ”ฅ Performance + +- **components**: + - Optimize internationalized menu search code  -  by **็‡•ๅšๆ–‡** [(8c1ef)](https://github.com/soybeanjs/soybean-admin/commit/8c1ef4b) + - Optimize menu search code  -  by **็‡•ๅšๆ–‡** [(296a2)](https://github.com/soybeanjs/soybean-admin/commit/296a2d2) + - perf count-to  -  by @honghuangdc [(b2c61)](https://github.com/soybeanjs/soybean-admin/commit/b2c61f0) + - components name is converted to uppercase  -  by **็‡•ๅšๆ–‡** [(04aa1)](https://github.com/soybeanjs/soybean-admin/commit/04aa10b) + - perf global-search  -  by @honghuangdc [(72745)](https://github.com/soybeanjs/soybean-admin/commit/7274522) +- **projects**: + - perf code  -  by @honghuangdc [(8081e)](https://github.com/soybeanjs/soybean-admin/commit/8081e19) + - env config  -  by @honghuangdc [(1bac3)](https://github.com/soybeanjs/soybean-admin/commit/1bac3b7) + - add detailed annotations for route role  -  by @honghuangdc [(f6bab)](https://github.com/soybeanjs/soybean-admin/commit/f6bab0c) + - perf code  -  by @honghuangdc [(5c49d)](https://github.com/soybeanjs/soybean-admin/commit/5c49d24) + - remove useless file  -  by @honghuangdc [(c624f)](https://github.com/soybeanjs/soybean-admin/commit/c624f32) + - remove @soybeanjs/cli  -  by @honghuangdc [(41349)](https://github.com/soybeanjs/soybean-admin/commit/4134955) + - echarts loading style  -  by @honghuangdc [(456c3)](https://github.com/soybeanjs/soybean-admin/commit/456c318) + - perf page manage_role, useTable  -  by @honghuangdc [(39aa7)](https://github.com/soybeanjs/soybean-admin/commit/39aa7aa) + - perf table columns style  -  by @honghuangdc [(babdb)](https://github.com/soybeanjs/soybean-admin/commit/babdb5d) + - perf page manage_menu style  -  by @honghuangdc [(0aa75)](https://github.com/soybeanjs/soybean-admin/commit/0aa75c0) + - perf code  -  by @honghuangdc [(7fa87)](https://github.com/soybeanjs/soybean-admin/commit/7fa87f5) + - perf code  -  by @honghuangdc [(05db8)](https://github.com/soybeanjs/soybean-admin/commit/05db8c0) + - perf code  -  by @honghuangdc [(dc24a)](https://github.com/soybeanjs/soybean-admin/commit/dc24a36) + - perf manage page style  -  by @honghuangdc [(779ba)](https://github.com/soybeanjs/soybean-admin/commit/779ba4e) + - perf manage menu  -  by @honghuangdc [(71f2c)](https://github.com/soybeanjs/soybean-admin/commit/71f2c55) + - manage menu: add transform to component  -  by @honghuangdc [(0abbf)](https://github.com/soybeanjs/soybean-admin/commit/0abbfa5) + - perf code  -  by @honghuangdc [(a0bad)](https://github.com/soybeanjs/soybean-admin/commit/a0bad57) + +###    ๐Ÿ’… Refactors + +- **projects**: + - remove plugin-web-update-notification  -  by @honghuangdc [(f6c6d)](https://github.com/soybeanjs/soybean-admin/commit/f6c6dbd) + - fix conflict with locale file  -  by @honghuangdc [(3346b)](https://github.com/soybeanjs/soybean-admin/commit/3346bcd) + - refactor app-loading  -  by @honghuangdc [(b4f3d)](https://github.com/soybeanjs/soybean-admin/commit/b4f3dd2) + - use naive-ui color-picker  -  by @honghuangdc [(b5551)](https://github.com/soybeanjs/soybean-admin/commit/b5551d6) + - perf page home  -  by @honghuangdc [(4c61c)](https://github.com/soybeanjs/soybean-admin/commit/4c61c6f) + - login components => modules  -  by @honghuangdc [(59bec)](https://github.com/soybeanjs/soybean-admin/commit/59bec2d) + - perf page function_tab  -  by @honghuangdc [(b5477)](https://github.com/soybeanjs/soybean-admin/commit/b5477e8) + - update mock api  -  by @honghuangdc [(27241)](https://github.com/soybeanjs/soybean-admin/commit/2724169) + - page manage_role: extract module  -  by @honghuangdc [(0e9e2)](https://github.com/soybeanjs/soybean-admin/commit/0e9e2e1) + - perf page manage_role  -  by @honghuangdc [(a19f8)](https://github.com/soybeanjs/soybean-admin/commit/a19f895) + - manage_route => manage_menu  -  by @honghuangdc [(f8467)](https://github.com/soybeanjs/soybean-admin/commit/f8467ce) + - refactor service env config  -  by @honghuangdc [(43193)](https://github.com/soybeanjs/soybean-admin/commit/43193e2) + - refactor unocss shortcuts: wh-full => size-full  -  by @honghuangdc [(b4c00)](https://github.com/soybeanjs/soybean-admin/commit/b4c00ce) + - use enquirer replace prompts  -  by @honghuangdc [(b546f)](https://github.com/soybeanjs/soybean-admin/commit/b546ff8) + - refactor useTable  -  by @honghuangdc [(c3efa)](https://github.com/soybeanjs/soybean-admin/commit/c3efa1b) + - finish refactor useTable  -  by @honghuangdc [(86301)](https://github.com/soybeanjs/soybean-admin/commit/8630175) + - finish refactor useTable and apply  -  by @honghuangdc [(3fd15)](https://github.com/soybeanjs/soybean-admin/commit/3fd15e5) + - perf code  -  by @honghuangdc [(f91ef)](https://github.com/soybeanjs/soybean-admin/commit/f91ef30) + - new route guard  -  by @honghuangdc [(37d20)](https://github.com/soybeanjs/soybean-admin/commit/37d20b8) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README.md  -  by @honghuangdc [(78364)](https://github.com/soybeanjs/soybean-admin/commit/783648f) + - update README.md  -  by @honghuangdc [(1ea48)](https://github.com/soybeanjs/soybean-admin/commit/1ea4817) + - add README  -  by @honghuangdc [(2371b)](https://github.com/soybeanjs/soybean-admin/commit/2371ba8) + - update README  -  by @honghuangdc [(d16a9)](https://github.com/soybeanjs/soybean-admin/commit/d16a9d5) + - update README.md  -  by @honghuangdc [(6a771)](https://github.com/soybeanjs/soybean-admin/commit/6a771ea) + - update README.md  -  by @honghuangdc [(57b6d)](https://github.com/soybeanjs/soybean-admin/commit/57b6d8a) + - update README.md  -  by @honghuangdc [(b30c0)](https://github.com/soybeanjs/soybean-admin/commit/b30c035) + - update README.md  -  by @honghuangdc [(c260f)](https://github.com/soybeanjs/soybean-admin/commit/c260fe2) + - update README.md  -  by @honghuangdc [(03c42)](https://github.com/soybeanjs/soybean-admin/commit/03c42aa) + - update README.md  -  by @honghuangdc [(0fae9)](https://github.com/soybeanjs/soybean-admin/commit/0fae993) + - update README.md  -  by @honghuangdc [(4e4d2)](https://github.com/soybeanjs/soybean-admin/commit/4e4d2de) + - update README.md  -  by @honghuangdc [(86b44)](https://github.com/soybeanjs/soybean-admin/commit/86b445c) + - update README.md  -  by @honghuangdc [(e2085)](https://github.com/soybeanjs/soybean-admin/commit/e2085e0) + - update README.md  -  by @honghuangdc [(6ea9b)](https://github.com/soybeanjs/soybean-admin/commit/6ea9b85) + - update README.md  -  by @honghuangdc [(ef4af)](https://github.com/soybeanjs/soybean-admin/commit/ef4af79) + - update README.md  -  by @honghuangdc [(41830)](https://github.com/soybeanjs/soybean-admin/commit/418302a) + - add CHANGELOG.md  -  by @honghuangdc [(46b61)](https://github.com/soybeanjs/soybean-admin/commit/46b6156) + - add communication  -  by @honghuangdc [(8c7ea)](https://github.com/soybeanjs/soybean-admin/commit/8c7ea23) + - update README.md  -  by @honghuangdc [(07d8d)](https://github.com/soybeanjs/soybean-admin/commit/07d8d25) + - update README.md  -  by @honghuangdc [(1a707)](https://github.com/soybeanjs/soybean-admin/commit/1a7070f) + - update README.md  -  by @honghuangdc [(f69e1)](https://github.com/soybeanjs/soybean-admin/commit/f69e152) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @honghuangdc [(3eaf0)](https://github.com/soybeanjs/soybean-admin/commit/3eaf05b) + - update deps  -  by @honghuangdc [(36fe1)](https://github.com/soybeanjs/soybean-admin/commit/36fe1da) + - update deps  -  by @honghuangdc [(55342)](https://github.com/soybeanjs/soybean-admin/commit/5534294) + - update deps  -  by @honghuangdc [(f1b86)](https://github.com/soybeanjs/soybean-admin/commit/f1b86cc) + - update deps  -  by @honghuangdc [(840e7)](https://github.com/soybeanjs/soybean-admin/commit/840e7f9) + - update deps  -  by @honghuangdc [(6114b)](https://github.com/soybeanjs/soybean-admin/commit/6114b9f) + - update deps  -  by @honghuangdc [(9cc7e)](https://github.com/soybeanjs/soybean-admin/commit/9cc7ee5) + - update deps  -  by @honghuangdc [(9c4ba)](https://github.com/soybeanjs/soybean-admin/commit/9c4ba66) + - update deps  -  by @honghuangdc [(fb3b9)](https://github.com/soybeanjs/soybean-admin/commit/fb3b94b) + - update deps  -  by @honghuangdc [(14aa8)](https://github.com/soybeanjs/soybean-admin/commit/14aa856) + - update deps  -  by @honghuangdc [(02d4b)](https://github.com/soybeanjs/soybean-admin/commit/02d4b0a) + - update deps  -  by @honghuangdc [(b2ee9)](https://github.com/soybeanjs/soybean-admin/commit/b2ee9ee) + - update deps  -  by @honghuangdc [(0fee1)](https://github.com/soybeanjs/soybean-admin/commit/0fee104) + - update deps  -  by @honghuangdc [(c0a65)](https://github.com/soybeanjs/soybean-admin/commit/c0a65a1) + - update deps  -  by @honghuangdc [(6b513)](https://github.com/soybeanjs/soybean-admin/commit/6b5132c) + - update deps  -  by @honghuangdc [(82b53)](https://github.com/soybeanjs/soybean-admin/commit/82b53d7) +- **project**: + - delete src/locales/lang/zh-CN.ts  -  by @honghuangdc [(377db)](https://github.com/soybeanjs/soybean-admin/commit/377db82) +- **projects**: + - use eslint flat config & update config  -  by @honghuangdc [(a176d)](https://github.com/soybeanjs/soybean-admin/commit/a176dc4) + - update @sa/scripts  -  by @honghuangdc [(d7785)](https://github.com/soybeanjs/soybean-admin/commit/d778560) + - update pnpm version  -  by @honghuangdc [(55f76)](https://github.com/soybeanjs/soybean-admin/commit/55f7638) + - update eslint config  -  by @honghuangdc [(5023f)](https://github.com/soybeanjs/soybean-admin/commit/5023f37) + - lock deps versions  -  by @honghuangdc [(a24f9)](https://github.com/soybeanjs/soybean-admin/commit/a24f963) + - update pnpm version  -  by @honghuangdc [(ea02b)](https://github.com/soybeanjs/soybean-admin/commit/ea02b23) + - remove @simonwep/pickr  -  by @honghuangdc [(502a4)](https://github.com/soybeanjs/soybean-admin/commit/502a4d2) + - remove soybean.svg  -  by @honghuangdc [(4031f)](https://github.com/soybeanjs/soybean-admin/commit/4031faf) + - update pnpm version  -  by @honghuangdc [(adec0)](https://github.com/soybeanjs/soybean-admin/commit/adec0d7) + - update deps & fix keep-alive  -  by @honghuangdc [(13001)](https://github.com/soybeanjs/soybean-admin/commit/13001bc) + - update @elegant-router/vue, fix inject name in windows  -  by @honghuangdc [(0b56e)](https://github.com/soybeanjs/soybean-admin/commit/0b56e44) + - add dev and build command with service env  -  by @honghuangdc [(ebb15)](https://github.com/soybeanjs/soybean-admin/commit/ebb1548) + - update deps & remove packages docs  -  by @honghuangdc [(57963)](https://github.com/soybeanjs/soybean-admin/commit/579636b) + - update pnpm-lock.yaml  -  by @honghuangdc [(147f6)](https://github.com/soybeanjs/soybean-admin/commit/147f60d) + - update repository url  -  by @honghuangdc [(806a1)](https://github.com/soybeanjs/soybean-admin/commit/806a1cb) + - update deps & update pnpm version  -  by @honghuangdc [(9772a)](https://github.com/soybeanjs/soybean-admin/commit/9772aec) + - add unocss eslint config  -  by @honghuangdc [(40635)](https://github.com/soybeanjs/soybean-admin/commit/4063529) + - update launch.json  -  by @honghuangdc [(3db82)](https://github.com/soybeanjs/soybean-admin/commit/3db82ac) + - update vscode extensions.json  -  by @honghuangdc [(4e29a)](https://github.com/soybeanjs/soybean-admin/commit/4e29aca) + - update pnpm version  -  by @honghuangdc [(7065f)](https://github.com/soybeanjs/soybean-admin/commit/7065f6f) + - update deps & fix eslint vue rule  -  by @honghuangdc [(8143b)](https://github.com/soybeanjs/soybean-admin/commit/8143b00) + - update pnpm version  -  by @honghuangdc [(6ad51)](https://github.com/soybeanjs/soybean-admin/commit/6ad51e9) + - add .gitattributes  -  by @honghuangdc [(c0009)](https://github.com/soybeanjs/soybean-admin/commit/c000920) + +###    ๐ŸŽจ Styles + +- **components**: + - Uniform icon size for header  -  by @Azir-11 [(b37c1)](https://github.com/soybeanjs/soybean-admin/commit/b37c1e9) +- **projects**: + - format code  -  by @honghuangdc [(a7481)](https://github.com/soybeanjs/soybean-admin/commit/a748166) + - update theme mode segment height  -  by @honghuangdc [(4d846)](https://github.com/soybeanjs/soybean-admin/commit/4d8469e) + - fix tooltip zIndex of ButtonIcon  -  by @honghuangdc [(db747)](https://github.com/soybeanjs/soybean-admin/commit/db747c4) + - sort defineProps, defineEmits with TS type  -  by @honghuangdc [(123fd)](https://github.com/soybeanjs/soybean-admin/commit/123fd4f) + +###    ๐Ÿค– CI + +- **projects**: + - add github actions config  -  by @honghuangdc [(4cb17)](https://github.com/soybeanjs/soybean-admin/commit/4cb17c7) + - update release.yml  -  by @honghuangdc [(7b298)](https://github.com/soybeanjs/soybean-admin/commit/7b298c6) + - add issue template  -  by @honghuangdc [(06e20)](https://github.com/soybeanjs/soybean-admin/commit/06e204a) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)  [![smileluck](https://github.com/smileluck.png?size=48)](https://github.com/smileluck)  [![Particaly](https://github.com/Particaly.png?size=48)](https://github.com/Particaly)   +[~li](mailto:miciili-02@outlook.com), [Azir-11](mailto:2075125282@qq.com), [็‡•ๅšๆ–‡](mailto:349952469@qq.com), [tnt group](mailto:dodu@live.cn), [Kori](mailto:kexin@korix.top),  + +## [v1.0.0-beta.3](https://github.com/soybeanjs/soybean-admin/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2024-03-31) + +###    ๐Ÿ“– Documentation + +- **projects**: update README.md  -  by @honghuangdc [(f69e1)](https://github.com/soybeanjs/soybean-admin/commit/f69e152) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @honghuangdc [(82b53)](https://github.com/soybeanjs/soybean-admin/commit/82b53d7) +- **projects**: add .gitattributes  -  by @honghuangdc [(c0009)](https://github.com/soybeanjs/soybean-admin/commit/c000920) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.0.0-beta.2](https://github.com/soybeanjs/soybean-admin/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2024-03-27) + +###    ๐Ÿž Bug Fixes + +- **projects**: fix pin-toggler toolTip zIndex  -  by @honghuangdc [(f89e6)](https://github.com/soybeanjs/soybean-admin/commit/f89e6c0) + +###    ๐Ÿ”ฅ Performance + +- **projects**: perf code  -  by @honghuangdc [(a0bad)](https://github.com/soybeanjs/soybean-admin/commit/a0bad57) + +###    ๐Ÿ“– Documentation + +- **projects**: + - add communication  -  by @honghuangdc [(8c7ea)](https://github.com/soybeanjs/soybean-admin/commit/8c7ea23) + - update README.md  -  by @honghuangdc [(07d8d)](https://github.com/soybeanjs/soybean-admin/commit/07d8d25) + - update README.md  -  by @honghuangdc [(1a707)](https://github.com/soybeanjs/soybean-admin/commit/1a7070f) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @honghuangdc [(6b513)](https://github.com/soybeanjs/soybean-admin/commit/6b5132c) + +###    ๐Ÿค– CI + +- **projects**: + - update release.yml  -  by @honghuangdc [(7b298)](https://github.com/soybeanjs/soybean-admin/commit/7b298c6) + - add issue template  -  by @honghuangdc [(06e20)](https://github.com/soybeanjs/soybean-admin/commit/06e204a) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.0.0-beta.1](https://github.com/soybeanjs/soybean-admin/compare/v0.10.4...v1.0.0-beta.1) (2024-03-25) + +###    ๐Ÿš€ Features + +- internationalized menu search  -  by **Kori** [(9e115)](https://github.com/soybeanjs/soybean-admin/commit/9e115da) +- **components**: + - enhance the custom strength of the 'TableHeaderOperation' component  -  by **tnt group** [(fdf64)](https://github.com/soybeanjs/soybean-admin/commit/fdf64f7) + - add GlobalSearch components  -  by **็‡•ๅšๆ–‡** [(9ea87)](https://github.com/soybeanjs/soybean-admin/commit/9ea8789) +- **hooks**: + - add use-echarts  -  by @honghuangdc [(726ab)](https://github.com/soybeanjs/soybean-admin/commit/726abe4) +- **projects**: + - 1.0 beta  -  by @honghuangdc [(e918a)](https://github.com/soybeanjs/soybean-admin/commit/e918a2c) + - support Vite5  -  by @honghuangdc [(96e4a)](https://github.com/soybeanjs/soybean-admin/commit/96e4aff) + - @sa/axios: createRequest, createFlatRequest, createHookRequest  -  by @honghuangdc [(bac16)](https://github.com/soybeanjs/soybean-admin/commit/bac1632) + - add app loading  -  by @honghuangdc [(c6545)](https://github.com/soybeanjs/soybean-admin/commit/c65451b) + - add copyright, unocss shortcut: card-wrapper, update package.json  -  by @honghuangdc [(affcc)](https://github.com/soybeanjs/soybean-admin/commit/affcc26) + - add page: about  -  by @honghuangdc [(4955f)](https://github.com/soybeanjs/soybean-admin/commit/4955f1a) + - add custom route exception  -  by @honghuangdc [(b43c9)](https://github.com/soybeanjs/soybean-admin/commit/b43c925) + - filter tabs which are not in routes  -  by @honghuangdc [(f59f3)](https://github.com/soybeanjs/soybean-admin/commit/f59f348) + - packages/scripts: add command changelog,release  -  by @honghuangdc [(dafb6)](https://github.com/soybeanjs/soybean-admin/commit/dafb6fa) + - add script: gen-route  -  by @honghuangdc [(697c1)](https://github.com/soybeanjs/soybean-admin/commit/697c1b6) + - @sa/axios: add qs stringify for params  -  by @honghuangdc [(2400c)](https://github.com/soybeanjs/soybean-admin/commit/2400c02) + - page home & perf useEcharts  -  by @honghuangdc [(62e4d)](https://github.com/soybeanjs/soybean-admin/commit/62e4da0) + - finish page home  -  by @honghuangdc [(7bd1e)](https://github.com/soybeanjs/soybean-admin/commit/7bd1e47) + - add page function_tab  -  by @honghuangdc [(6ff86)](https://github.com/soybeanjs/soybean-admin/commit/6ff86e7) + - page manage_role  -  by @honghuangdc [(237c6)](https://github.com/soybeanjs/soybean-admin/commit/237c6d2) + - page manage_user  -  by @honghuangdc [(8a170)](https://github.com/soybeanjs/soybean-admin/commit/8a170ee) + - page manage_menu  -  by @honghuangdc [(87d65)](https://github.com/soybeanjs/soybean-admin/commit/87d65d3) + - page manage_menu operateDrawer  -  by @honghuangdc [(db17c)](https://github.com/soybeanjs/soybean-admin/commit/db17c91) + - Add type to TabRoute: matched  -  by @Azir-11 [(2d102)](https://github.com/soybeanjs/soybean-admin/commit/2d102a0) + - support directory menu hide all child menus. fixed #325  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/325 [(7256a)](https://github.com/soybeanjs/soybean-admin/commit/7256ad4) + - mock manage list data with pagination  -  by @honghuangdc [(1a6be)](https://github.com/soybeanjs/soybean-admin/commit/1a6be00) + - globalSearch add i18n  -  by **็‡•ๅšๆ–‡** [(0126d)](https://github.com/soybeanjs/soybean-admin/commit/0126da4) + - Add route meta parameter:fixedQuery  -  by @Azir-11 [(874aa)](https://github.com/soybeanjs/soybean-admin/commit/874aaca) + - update  -  by @honghuangdc [(4158a)](https://github.com/soybeanjs/soybean-admin/commit/4158a72) + - change borderRadius to 6px of naiveUI  -  by @honghuangdc [(49558)](https://github.com/soybeanjs/soybean-admin/commit/49558ca) + - pef manage role  -  by @honghuangdc [(18709)](https://github.com/soybeanjs/soybean-admin/commit/1870981) + - login page: code-login  -  by @honghuangdc [(c91dd)](https://github.com/soybeanjs/soybean-admin/commit/c91dd28) + - login page: register  -  by @honghuangdc [(1ed33)](https://github.com/soybeanjs/soybean-admin/commit/1ed33dc) + - add request refresh token & logout  -  by @honghuangdc [(11a6a)](https://github.com/soybeanjs/soybean-admin/commit/11a6a3b) + - add request exception example page  -  by @honghuangdc [(41e8b)](https://github.com/soybeanjs/soybean-admin/commit/41e8bc4) + - add auth example  -  by @honghuangdc [(c11d5)](https://github.com/soybeanjs/soybean-admin/commit/c11d56d) +- **router**: + - add sortRoutesByOrder function  -  by @Azir-11 [(0cf09)](https://github.com/soybeanjs/soybean-admin/commit/0cf09ba) + +###    ๐Ÿž Bug Fixes + +- **components**: + - fix tooltip zIndex of ButtonIcon  -  by @honghuangdc [(99097)](https://github.com/soybeanjs/soybean-admin/commit/99097b4) + - supplement the `NaiveUI` type  -  by **tnt group** [(ccc2b)](https://github.com/soybeanjs/soybean-admin/commit/ccc2b67) + - fix homeTab closeRight and disable colseLeft  -  by **~li** [(d28bf)](https://github.com/soybeanjs/soybean-admin/commit/d28bf52) +- **hooks**: + - Fix Naive Pagination's outdated API  -  by **tnt group** [(37436)](https://github.com/soybeanjs/soybean-admin/commit/3743612) +- **projects**: + - ไฟฎๅค่ทฏ็”ฑๅ‘ฝๅไธบๅŒ…ๅซๅ…ณ็ณปๆ—ถๅฏผ่‡ดๅฏผ่ˆชๆ•ฐๆฎๅ‡บ้”™็š„้—ฎ้ข˜  -  by **pantao** [(76636)](https://github.com/soybeanjs/soybean-admin/commit/766369f) + - rename zh-ch  -  by @honghuangdc [(a8a77)](https://github.com/soybeanjs/soybean-admin/commit/a8a77ea) + - Fix welcome notification not closing  -  by @Azir-11 [(748cf)](https://github.com/soybeanjs/soybean-admin/commit/748cfa2) + - fix i18n vscode settings  -  by @honghuangdc [(fbf4c)](https://github.com/soybeanjs/soybean-admin/commit/fbf4cc4) + - add duration of login success notification  -  by @honghuangdc [(1335d)](https://github.com/soybeanjs/soybean-admin/commit/1335d47) + - fix menu indent  -  by @honghuangdc [(87143)](https://github.com/soybeanjs/soybean-admin/commit/8714317) + - fix theme mode segment  -  by @honghuangdc [(2372d)](https://github.com/soybeanjs/soybean-admin/commit/2372dc9) + - fix app loading theme color  -  by @honghuangdc [(0ba19)](https://github.com/soybeanjs/soybean-admin/commit/0ba19d5) + - fix page about style in mobile  -  by @honghuangdc [(8b6de)](https://github.com/soybeanjs/soybean-admin/commit/8b6de48) + - fix themeDrawer darkMode segement  -  by @honghuangdc [(1b5ca)](https://github.com/soybeanjs/soybean-admin/commit/1b5caa0) + - fix themeDrawer copy  -  by @honghuangdc [(b3779)](https://github.com/soybeanjs/soybean-admin/commit/b3779a6) + - remove space in tab content  -  by @honghuangdc [(4aae6)](https://github.com/soybeanjs/soybean-admin/commit/4aae6a5) + - fix horizontal menu  -  by @honghuangdc [(d886e)](https://github.com/soybeanjs/soybean-admin/commit/d886e50) + - perf card style  -  by @honghuangdc [(c1afb)](https://github.com/soybeanjs/soybean-admin/commit/c1afb9d) + - fix manage_user title  -  by @honghuangdc [(7770b)](https://github.com/soybeanjs/soybean-admin/commit/7770b37) + - default proxy prefix  -  by @smileluck [(da246)](https://github.com/soybeanjs/soybean-admin/commit/da24642) + - fix request msg  -  by @honghuangdc [(ae6b6)](https://github.com/soybeanjs/soybean-admin/commit/ae6b613) + - Fix the issue of tab error displaying parent localIcon  -  by @Azir-11 [(a9c98)](https://github.com/soybeanjs/soybean-admin/commit/a9c98d9) + - The matched value of TabRoute should be optional  -  by @Azir-11 [(e6fed)](https://github.com/soybeanjs/soybean-admin/commit/e6fed1f) + - fix build [unocss]: build failed to load icon "close", fixed #319  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/319 [(c18d8)](https://github.com/soybeanjs/soybean-admin/commit/c18d82f) + - fix resolve alias  -  by @honghuangdc [(3bdcb)](https://github.com/soybeanjs/soybean-admin/commit/3bdcbc7) + - Missing default value for tab icon  -  by @Azir-11 [(72a46)](https://github.com/soybeanjs/soybean-admin/commit/72a4679) + - add route icon: fucntion_hide-child  -  by @honghuangdc [(0a3ef)](https://github.com/soybeanjs/soybean-admin/commit/0a3efe3) + - fix table x-scroll. fixed #324  -  by @honghuangdc in https://github.com/soybeanjs/soybean-admin/issues/324 [(c7e2c)](https://github.com/soybeanjs/soybean-admin/commit/c7e2c55) + - Fix the logic of root route redirection to home  -  by **ๆ•็‘ž็Ž›็š„็š‡ๅธ** [(0123c)](https://github.com/soybeanjs/soybean-admin/commit/0123c37) + - Fix homepage mount error under dynamic routing  -  by **ๆ•็‘ž็Ž›็š„็š‡ๅธ** [(9cf2a)](https://github.com/soybeanjs/soybean-admin/commit/9cf2a51) + - fix repeat home tab  -  by @honghuangdc [(bccd6)](https://github.com/soybeanjs/soybean-admin/commit/bccd6cb) + - fix proxy config  -  by @honghuangdc [(c8019)](https://github.com/soybeanjs/soybean-admin/commit/c8019c4) + - fix proxy config  -  by @honghuangdc [(ffc95)](https://github.com/soybeanjs/soybean-admin/commit/ffc95d2) + - fix table row-key ts type  -  by @honghuangdc [(0cc8f)](https://github.com/soybeanjs/soybean-admin/commit/0cc8f05) + - fix class name conflict with unocss icon  -  by @honghuangdc [(455e4)](https://github.com/soybeanjs/soybean-admin/commit/455e48f) + - fix repeat routes  -  by @honghuangdc [(2c543)](https://github.com/soybeanjs/soybean-admin/commit/2c543f1) + - fix route init  -  by @honghuangdc [(23a40)](https://github.com/soybeanjs/soybean-admin/commit/23a4098) + +###    ๐Ÿ”ฅ Performance + +- **components**: + - Optimize internationalized menu search code  -  by **็‡•ๅšๆ–‡** [(8c1ef)](https://github.com/soybeanjs/soybean-admin/commit/8c1ef4b) + - Optimize menu search code  -  by **็‡•ๅšๆ–‡** [(296a2)](https://github.com/soybeanjs/soybean-admin/commit/296a2d2) + - perf count-to  -  by @honghuangdc [(b2c61)](https://github.com/soybeanjs/soybean-admin/commit/b2c61f0) + - components name is converted to uppercase  -  by **็‡•ๅšๆ–‡** [(04aa1)](https://github.com/soybeanjs/soybean-admin/commit/04aa10b) + - perf global-search  -  by @honghuangdc [(72745)](https://github.com/soybeanjs/soybean-admin/commit/7274522) +- **projects**: + - perf code  -  by @honghuangdc [(8081e)](https://github.com/soybeanjs/soybean-admin/commit/8081e19) + - env config  -  by @honghuangdc [(1bac3)](https://github.com/soybeanjs/soybean-admin/commit/1bac3b7) + - add detailed annotations for route role  -  by @honghuangdc [(f6bab)](https://github.com/soybeanjs/soybean-admin/commit/f6bab0c) + - perf code  -  by @honghuangdc [(5c49d)](https://github.com/soybeanjs/soybean-admin/commit/5c49d24) + - remove useless file  -  by @honghuangdc [(c624f)](https://github.com/soybeanjs/soybean-admin/commit/c624f32) + - remove @soybeanjs/cli  -  by @honghuangdc [(41349)](https://github.com/soybeanjs/soybean-admin/commit/4134955) + - echarts loading style  -  by @honghuangdc [(456c3)](https://github.com/soybeanjs/soybean-admin/commit/456c318) + - perf page manage_role, useTable  -  by @honghuangdc [(39aa7)](https://github.com/soybeanjs/soybean-admin/commit/39aa7aa) + - perf table columns style  -  by @honghuangdc [(babdb)](https://github.com/soybeanjs/soybean-admin/commit/babdb5d) + - perf page manage_menu style  -  by @honghuangdc [(0aa75)](https://github.com/soybeanjs/soybean-admin/commit/0aa75c0) + - perf code  -  by @honghuangdc [(7fa87)](https://github.com/soybeanjs/soybean-admin/commit/7fa87f5) + - perf code  -  by @honghuangdc [(05db8)](https://github.com/soybeanjs/soybean-admin/commit/05db8c0) + - perf code  -  by @honghuangdc [(dc24a)](https://github.com/soybeanjs/soybean-admin/commit/dc24a36) + - perf manage page style  -  by @honghuangdc [(779ba)](https://github.com/soybeanjs/soybean-admin/commit/779ba4e) + - perf manage menu  -  by @honghuangdc [(71f2c)](https://github.com/soybeanjs/soybean-admin/commit/71f2c55) + - manage menu: add transform to component  -  by @honghuangdc [(0abbf)](https://github.com/soybeanjs/soybean-admin/commit/0abbfa5) + +###    ๐Ÿ’… Refactors + +- **projects**: + - remove plugin-web-update-notification  -  by @honghuangdc [(f6c6d)](https://github.com/soybeanjs/soybean-admin/commit/f6c6dbd) + - fix conflict with locale file  -  by @honghuangdc [(3346b)](https://github.com/soybeanjs/soybean-admin/commit/3346bcd) + - refactor app-loading  -  by @honghuangdc [(b4f3d)](https://github.com/soybeanjs/soybean-admin/commit/b4f3dd2) + - use naive-ui color-picker  -  by @honghuangdc [(b5551)](https://github.com/soybeanjs/soybean-admin/commit/b5551d6) + - perf page home  -  by @honghuangdc [(4c61c)](https://github.com/soybeanjs/soybean-admin/commit/4c61c6f) + - login components => modules  -  by @honghuangdc [(59bec)](https://github.com/soybeanjs/soybean-admin/commit/59bec2d) + - perf page function_tab  -  by @honghuangdc [(b5477)](https://github.com/soybeanjs/soybean-admin/commit/b5477e8) + - update mock api  -  by @honghuangdc [(27241)](https://github.com/soybeanjs/soybean-admin/commit/2724169) + - page manage_role: extract module  -  by @honghuangdc [(0e9e2)](https://github.com/soybeanjs/soybean-admin/commit/0e9e2e1) + - perf page manage_role  -  by @honghuangdc [(a19f8)](https://github.com/soybeanjs/soybean-admin/commit/a19f895) + - manage_route => manage_menu  -  by @honghuangdc [(f8467)](https://github.com/soybeanjs/soybean-admin/commit/f8467ce) + - refactor service env config  -  by @honghuangdc [(43193)](https://github.com/soybeanjs/soybean-admin/commit/43193e2) + - refactor unocss shortcuts: wh-full => size-full  -  by @honghuangdc [(b4c00)](https://github.com/soybeanjs/soybean-admin/commit/b4c00ce) + - use enquirer replace prompts  -  by @honghuangdc [(b546f)](https://github.com/soybeanjs/soybean-admin/commit/b546ff8) + - refactor useTable  -  by @honghuangdc [(c3efa)](https://github.com/soybeanjs/soybean-admin/commit/c3efa1b) + - finish refactor useTable  -  by @honghuangdc [(86301)](https://github.com/soybeanjs/soybean-admin/commit/8630175) + - finish refactor useTable and apply  -  by @honghuangdc [(3fd15)](https://github.com/soybeanjs/soybean-admin/commit/3fd15e5) + - perf code  -  by @honghuangdc [(f91ef)](https://github.com/soybeanjs/soybean-admin/commit/f91ef30) + - new route guard  -  by @honghuangdc [(37d20)](https://github.com/soybeanjs/soybean-admin/commit/37d20b8) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README.md  -  by @honghuangdc [(78364)](https://github.com/soybeanjs/soybean-admin/commit/783648f) + - update README.md  -  by @honghuangdc [(1ea48)](https://github.com/soybeanjs/soybean-admin/commit/1ea4817) + - add README  -  by @honghuangdc [(2371b)](https://github.com/soybeanjs/soybean-admin/commit/2371ba8) + - update README  -  by @honghuangdc [(d16a9)](https://github.com/soybeanjs/soybean-admin/commit/d16a9d5) + - update README.md  -  by @honghuangdc [(6a771)](https://github.com/soybeanjs/soybean-admin/commit/6a771ea) + - update README.md  -  by @honghuangdc [(57b6d)](https://github.com/soybeanjs/soybean-admin/commit/57b6d8a) + - update README.md  -  by @honghuangdc [(b30c0)](https://github.com/soybeanjs/soybean-admin/commit/b30c035) + - update README.md  -  by @honghuangdc [(c260f)](https://github.com/soybeanjs/soybean-admin/commit/c260fe2) + - update README.md  -  by @honghuangdc [(03c42)](https://github.com/soybeanjs/soybean-admin/commit/03c42aa) + - update README.md  -  by @honghuangdc [(0fae9)](https://github.com/soybeanjs/soybean-admin/commit/0fae993) + - update README.md  -  by @honghuangdc [(4e4d2)](https://github.com/soybeanjs/soybean-admin/commit/4e4d2de) + - update README.md  -  by @honghuangdc [(86b44)](https://github.com/soybeanjs/soybean-admin/commit/86b445c) + - update README.md  -  by @honghuangdc [(e2085)](https://github.com/soybeanjs/soybean-admin/commit/e2085e0) + - update README.md  -  by @honghuangdc [(6ea9b)](https://github.com/soybeanjs/soybean-admin/commit/6ea9b85) + - update README.md  -  by @honghuangdc [(ef4af)](https://github.com/soybeanjs/soybean-admin/commit/ef4af79) + - update README.md  -  by @honghuangdc [(41830)](https://github.com/soybeanjs/soybean-admin/commit/418302a) + - add CHANGELOG.md  -  by @honghuangdc [(46b61)](https://github.com/soybeanjs/soybean-admin/commit/46b6156) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @honghuangdc [(3eaf0)](https://github.com/soybeanjs/soybean-admin/commit/3eaf05b) + - update deps  -  by @honghuangdc [(36fe1)](https://github.com/soybeanjs/soybean-admin/commit/36fe1da) + - update deps  -  by @honghuangdc [(55342)](https://github.com/soybeanjs/soybean-admin/commit/5534294) + - update deps  -  by @honghuangdc [(f1b86)](https://github.com/soybeanjs/soybean-admin/commit/f1b86cc) + - update deps  -  by @honghuangdc [(840e7)](https://github.com/soybeanjs/soybean-admin/commit/840e7f9) + - update deps  -  by @honghuangdc [(6114b)](https://github.com/soybeanjs/soybean-admin/commit/6114b9f) + - update deps  -  by @honghuangdc [(9cc7e)](https://github.com/soybeanjs/soybean-admin/commit/9cc7ee5) + - update deps  -  by @honghuangdc [(9c4ba)](https://github.com/soybeanjs/soybean-admin/commit/9c4ba66) + - update deps  -  by @honghuangdc [(fb3b9)](https://github.com/soybeanjs/soybean-admin/commit/fb3b94b) + - update deps  -  by @honghuangdc [(14aa8)](https://github.com/soybeanjs/soybean-admin/commit/14aa856) + - update deps  -  by @honghuangdc [(02d4b)](https://github.com/soybeanjs/soybean-admin/commit/02d4b0a) + - update deps  -  by @honghuangdc [(b2ee9)](https://github.com/soybeanjs/soybean-admin/commit/b2ee9ee) + - update deps  -  by @honghuangdc [(0fee1)](https://github.com/soybeanjs/soybean-admin/commit/0fee104) + - update deps  -  by @honghuangdc [(c0a65)](https://github.com/soybeanjs/soybean-admin/commit/c0a65a1) +- **project**: + - delete src/locales/lang/zh-CN.ts  -  by @honghuangdc [(377db)](https://github.com/soybeanjs/soybean-admin/commit/377db82) +- **projects**: + - use eslint flat config & update config  -  by @honghuangdc [(a176d)](https://github.com/soybeanjs/soybean-admin/commit/a176dc4) + - update @sa/scripts  -  by @honghuangdc [(d7785)](https://github.com/soybeanjs/soybean-admin/commit/d778560) + - update pnpm version  -  by @honghuangdc [(55f76)](https://github.com/soybeanjs/soybean-admin/commit/55f7638) + - update eslint config  -  by @honghuangdc [(5023f)](https://github.com/soybeanjs/soybean-admin/commit/5023f37) + - lock deps versions  -  by @honghuangdc [(a24f9)](https://github.com/soybeanjs/soybean-admin/commit/a24f963) + - update pnpm version  -  by @honghuangdc [(ea02b)](https://github.com/soybeanjs/soybean-admin/commit/ea02b23) + - remove @simonwep/pickr  -  by @honghuangdc [(502a4)](https://github.com/soybeanjs/soybean-admin/commit/502a4d2) + - remove soybean.svg  -  by @honghuangdc [(4031f)](https://github.com/soybeanjs/soybean-admin/commit/4031faf) + - update pnpm version  -  by @honghuangdc [(adec0)](https://github.com/soybeanjs/soybean-admin/commit/adec0d7) + - update deps & fix keep-alive  -  by @honghuangdc [(13001)](https://github.com/soybeanjs/soybean-admin/commit/13001bc) + - update @elegant-router/vue, fix inject name in windows  -  by @honghuangdc [(0b56e)](https://github.com/soybeanjs/soybean-admin/commit/0b56e44) + - add dev and build command with service env  -  by @honghuangdc [(ebb15)](https://github.com/soybeanjs/soybean-admin/commit/ebb1548) + - update deps & remove packages docs  -  by @honghuangdc [(57963)](https://github.com/soybeanjs/soybean-admin/commit/579636b) + - update pnpm-lock.yaml  -  by @honghuangdc [(147f6)](https://github.com/soybeanjs/soybean-admin/commit/147f60d) + - update repository url  -  by @honghuangdc [(806a1)](https://github.com/soybeanjs/soybean-admin/commit/806a1cb) + - update deps & update pnpm version  -  by @honghuangdc [(9772a)](https://github.com/soybeanjs/soybean-admin/commit/9772aec) + - add unocss eslint config  -  by @honghuangdc [(40635)](https://github.com/soybeanjs/soybean-admin/commit/4063529) + - update launch.json  -  by @honghuangdc [(3db82)](https://github.com/soybeanjs/soybean-admin/commit/3db82ac) + - update vscode extensions.json  -  by @honghuangdc [(4e29a)](https://github.com/soybeanjs/soybean-admin/commit/4e29aca) + - update pnpm version  -  by @honghuangdc [(7065f)](https://github.com/soybeanjs/soybean-admin/commit/7065f6f) + - update deps & fix eslint vue rule  -  by @honghuangdc [(8143b)](https://github.com/soybeanjs/soybean-admin/commit/8143b00) + - update pnpm version  -  by @honghuangdc [(6ad51)](https://github.com/soybeanjs/soybean-admin/commit/6ad51e9) + +###    ๐ŸŽจ Styles + +- **components**: + - Uniform icon size for header  -  by @Azir-11 [(b37c1)](https://github.com/soybeanjs/soybean-admin/commit/b37c1e9) +- **projects**: + - format code  -  by @honghuangdc [(a7481)](https://github.com/soybeanjs/soybean-admin/commit/a748166) + - update theme mode segment height  -  by @honghuangdc [(4d846)](https://github.com/soybeanjs/soybean-admin/commit/4d8469e) + - fix tooltip zIndex of ButtonIcon  -  by @honghuangdc [(db747)](https://github.com/soybeanjs/soybean-admin/commit/db747c4) + - sort defineProps, defineEmits with TS type  -  by @honghuangdc [(123fd)](https://github.com/soybeanjs/soybean-admin/commit/123fd4f) + +###    ๐Ÿค– CI + +- **projects**: add github actions config  -  by @honghuangdc [(4cb17)](https://github.com/soybeanjs/soybean-admin/commit/4cb17c7) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)  [![smileluck](https://github.com/smileluck.png?size=48)](https://github.com/smileluck)  [![Particaly](https://github.com/Particaly.png?size=48)](https://github.com/Particaly)   +[~li](mailto:miciili-02@outlook.com), [Azir-11](mailto:2075125282@qq.com), [็‡•ๅšๆ–‡](mailto:349952469@qq.com), [tnt group](mailto:dodu@live.cn), [Kori](mailto:kexin@korix.top),  + +## [v0.10.4](https://github.com/honghuangdc/soybean-admin/compare/v0.10.3...v0.10.4) (23-09-20) + +###    ๐Ÿš€ Features + +- **auth**: + - ้˜ฒๆญขๅคšๆฌกๅˆทๆ–ฐtoken  -  by @eAliwei [(0eaa3)](https://github.com/honghuangdc/soybean-admin/commit/0eaa327) +- **hooks**: + - add useHookTable  -  by @honghuangdc [(b3ae7)](https://github.com/honghuangdc/soybean-admin/commit/b3ae760) +- **projects**: + - add websocket demo  -  by @honghuangdc [(af53e)](https://github.com/honghuangdc/soybean-admin/commit/af53ec7) + - add switch for customize darkmode transition  -  by @honghuangdc [(6e0cc)](https://github.com/honghuangdc/soybean-admin/commit/6e0cce4) + - new i18n function $t & login page and setting drawer config i18n  -  by @honghuangdc [(854d0)](https://github.com/honghuangdc/soybean-admin/commit/854d0bc) + - add plugin-web-update-notification  -  by @honghuangdc [(c9164)](https://github.com/honghuangdc/soybean-admin/commit/c91644b) + +###    ๐Ÿž Bug Fixes + +- **components**: + - ไฟฎๅคๅŠจๆ€่ทฏ็”ฑไธป้กต404  -  by @lapislazulisch [(3ae19)](https://github.com/honghuangdc/soybean-admin/commit/3ae1952) + - ไฟฎๅคๅŠจๆ€่ทฏ็”ฑhome้กต404  -  by @lapislazulisch [(ad6ac)](https://github.com/honghuangdc/soybean-admin/commit/ad6ac72) +- **projects**: + - fix set tab title (fixed #256)  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/256 [(13f6c)](https://github.com/honghuangdc/soybean-admin/commit/13f6cd8) + - correct the lang file name & add recommend vscode plugin i18n-ally  -  by @honghuangdc [(864ec)](https://github.com/honghuangdc/soybean-admin/commit/864ec47) + - fix reload button animate  -  by @honghuangdc [(41f23)](https://github.com/honghuangdc/soybean-admin/commit/41f2338) +- **styles**: + - ็”จๆˆท็ฎก็†้กต้ขๅธƒๅฑ€่‡ช้€‚ๅบ”ๅฑๅน•้ซ˜ๅบฆ (fixed #253)  -  by @honghuangdc in https://github.com/honghuangdc/soybean-admin/issues/253 [(0f7b9)](https://github.com/honghuangdc/soybean-admin/commit/0f7b9d5) + +###    ๐Ÿ”ฅ Performance + +- **hooks**: + - perf use-table  -  by @honghuangdc [(33180)](https://github.com/honghuangdc/soybean-admin/commit/3318041) + - perf useHookTable  -  by @honghuangdc [(809fa)](https://github.com/honghuangdc/soybean-admin/commit/809fa85) +- **projects**: + - add type declaration for document startViewTransition  -  by @honghuangdc [(d3ebe)](https://github.com/honghuangdc/soybean-admin/commit/d3ebe95) + +###    ๐Ÿ’… Refactors + +- **projects**: + - ็”Ÿไบง็Žฏๅขƒ็ผ“ๅญ˜ไธป้ข˜ๅ˜ๆ›ดไธบsessionStorage  -  by @honghuangdc [(c46a5)](https://github.com/honghuangdc/soybean-admin/commit/c46a592) + - add reCacheRoute method  -  by @honghuangdc [(f92ee)](https://github.com/honghuangdc/soybean-admin/commit/f92ee77) + - update soybean domain  -  by @honghuangdc [(073fd)](https://github.com/honghuangdc/soybean-admin/commit/073fd16) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README.md logo  -  by @honghuangdc [(19141)](https://github.com/honghuangdc/soybean-admin/commit/19141a7) + - update Docker deployment method  -  by @snowords [(00da0)](https://github.com/honghuangdc/soybean-admin/commit/00da000) + - update git hooks init command  -  by @snowords [(7f35e)](https://github.com/honghuangdc/soybean-admin/commit/7f35e87) + - update README.md  -  by @eltociear [(93ed5)](https://github.com/honghuangdc/soybean-admin/commit/93ed5ad) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @honghuangdc [(bba68)](https://github.com/honghuangdc/soybean-admin/commit/bba68bf) + - update deps  -  by @honghuangdc [(0e6d2)](https://github.com/honghuangdc/soybean-admin/commit/0e6d289) + - update deps  -  by @honghuangdc [(135ce)](https://github.com/honghuangdc/soybean-admin/commit/135ce77) + - update deps  -  by @honghuangdc [(44ba3)](https://github.com/honghuangdc/soybean-admin/commit/44ba327) + - update deps  -  by @honghuangdc [(9296e)](https://github.com/honghuangdc/soybean-admin/commit/9296e69) + - update deps  -  by @honghuangdc [(751de)](https://github.com/honghuangdc/soybean-admin/commit/751ded4) + - update deps  -  by @honghuangdc [(305d9)](https://github.com/honghuangdc/soybean-admin/commit/305d956) +- **projects**: + - update deps and fix swiper  -  by @honghuangdc [(9d105)](https://github.com/honghuangdc/soybean-admin/commit/9d1051b) + - update package.json  -  by @honghuangdc [(d7aea)](https://github.com/honghuangdc/soybean-admin/commit/d7aea9d) + - update deps & fix eslint code  -  by @honghuangdc [(08e0c)](https://github.com/honghuangdc/soybean-admin/commit/08e0cf5) + - update pnpm-lock.yaml  -  by @honghuangdc [(94644)](https://github.com/honghuangdc/soybean-admin/commit/9464473) + - update VSCode setting  -  by @honghuangdc [(56c77)](https://github.com/honghuangdc/soybean-admin/commit/56c770c) + - correct the word spell  -  by @honghuangdc [(458e3)](https://github.com/honghuangdc/soybean-admin/commit/458e387) + - correct word spell & eslint fix code  -  by @honghuangdc [(cffc3)](https://github.com/honghuangdc/soybean-admin/commit/cffc30a) + - When tab is switched, keep the page without refreshing  -  by @linjiangl [(83f25)](https://github.com/honghuangdc/soybean-admin/commit/83f2514) + +###    ๐ŸŽจ Styles + +- **projects**: + - unify card border radius, 16px to 8px  -  by @honghuangdc [(cbda4)](https://github.com/honghuangdc/soybean-admin/commit/cbda4a3) + - update default theme color  -  by @honghuangdc [(43ac2)](https://github.com/honghuangdc/soybean-admin/commit/43ac23f) + - prettier format code  -  by @honghuangdc [(24cf1)](https://github.com/honghuangdc/soybean-admin/commit/24cf1d9) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![eltociear](https://github.com/eltociear.png?size=48)](https://github.com/eltociear)  [![linjiangl](https://github.com/linjiangl.png?size=48)](https://github.com/linjiangl)  [![lapislazulisch](https://github.com/lapislazulisch.png?size=48)](https://github.com/lapislazulisch)  [![snowords](https://github.com/snowords.png?size=48)](https://github.com/snowords)  [![eAliwei](https://github.com/eAliwei.png?size=48)](https://github.com/eAliwei)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v0.10.3](https://github.com/honghuangdc/soybean-admin/compare/v0.10.2...v0.10.3) (23-06-15) + +###    ๐Ÿž Bug Fixes + +- **projects**: fix userRoleOptions  -  by @soybeanjs [(2ca2b)](https://github.com/honghuangdc/soybean-admin/commit/2ca2b76) +- **styles**: fix toggle-lang bg  -  by @soybeanjs [(47309)](https://github.com/honghuangdc/soybean-admin/commit/473095b) + +###    ๐Ÿ”ฅ Performance + +- **projects**: + - remove useless code  -  by @soybeanjs [(eb8e4)](https://github.com/honghuangdc/soybean-admin/commit/eb8e49e) + - use transformObjectToOption to generate option of object labels  -  by @soybeanjs [(da611)](https://github.com/honghuangdc/soybean-admin/commit/da611fb) + +###    ๐Ÿ“– Documentation + +- **projects**: + - CHANGELOG.md  -  by @soybeanjs [(ff5bf)](https://github.com/honghuangdc/soybean-admin/commit/ff5bf62) + - generate full CHANGELOG.md  -  by @soybeanjs [(055d4)](https://github.com/honghuangdc/soybean-admin/commit/055d4cc) + - update README.md  -  by @soybeanjs [(3c7e1)](https://github.com/honghuangdc/soybean-admin/commit/3c7e1cf) + - update README.md  -  by @soybeanjs [(1681c)](https://github.com/honghuangdc/soybean-admin/commit/1681c34) + - update README.md picture url  -  by @soybeanjs [(4eefc)](https://github.com/honghuangdc/soybean-admin/commit/4eefc95) + - update README.md  -  by @soybeanjs [(8f24a)](https://github.com/honghuangdc/soybean-admin/commit/8f24a94) + - update CHANGELOG.md by regenerate changelog  -  by @soybeanjs [(2a9b7)](https://github.com/honghuangdc/soybean-admin/commit/2a9b725) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @soybeanjs [(f9d47)](https://github.com/honghuangdc/soybean-admin/commit/f9d47c0) + - update deps  -  by @soybeanjs [(47ab0)](https://github.com/honghuangdc/soybean-admin/commit/47ab018) + - decrease vite-plugin-page-route  -  by @soybeanjs [(882f2)](https://github.com/honghuangdc/soybean-admin/commit/882f281) + - update deps  -  by @soybeanjs [(e6abf)](https://github.com/honghuangdc/soybean-admin/commit/e6abf93) +- **projects**: + - remove bumpp & add release script  -  by @soybeanjs [(a3dfe)](https://github.com/honghuangdc/soybean-admin/commit/a3dfe61) + - update @soybeanjs/cli and generate total changelog  -  by @soybeanjs [(58591)](https://github.com/honghuangdc/soybean-admin/commit/58591f6) + - update deps & update unocss deprecated api exclude  -  by @soybeanjs [(0907d)](https://github.com/honghuangdc/soybean-admin/commit/0907d38) + - update deps & update package.json  -  by @soybeanjs [(0b2f6)](https://github.com/honghuangdc/soybean-admin/commit/0b2f68a) + - add vite-plugin-vue-devtools  -  by @soybeanjs [(c1bee)](https://github.com/honghuangdc/soybean-admin/commit/c1bee40) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v0.10.2](https://github.com/honghuangdc/soybean-admin/compare/v0.10.1...v0.10.2) (2023-06-01) + +###    ๐Ÿž Bug Fixes + +- **components**: fix mix-menu layout when the locale is English (fixed 241)  -  by @soybeanjs [(5c085)](https://github.com/honghuangdc/soybean-admin/commit/5c085a1) + +###    ๐Ÿ“– Documentation + +- **projects**: + - CHANGELOG.md  -  by @soybeanjs [(bb2ea)](https://github.com/honghuangdc/soybean-admin/commit/bb2eab6) + - update README.md: update example image url [ๆ›ดๆ–ฐ็คบไพ‹ๅ›พ็‰‡็š„้“พๆŽฅ]  -  by @soybeanjs [(4f512)](https://github.com/honghuangdc/soybean-admin/commit/4f51263) + - fix README.md: example image link  -  by @soybeanjs [(56ea8)](https://github.com/honghuangdc/soybean-admin/commit/56ea893) + +###    ๐Ÿก Chore + +- release v0.10.2  -  by @soybeanjs [(1f6d0)](https://github.com/honghuangdc/soybean-admin/commit/1f6d079) +- **projects**: update deps and use soy lint-staged replace lint-staged  -  by @soybeanjs [(9a238)](https://github.com/honghuangdc/soybean-admin/commit/9a23817) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v0.10.1](https://github.com/honghuangdc/soybean-admin/compare/v0.10.0...v0.10.1) (2023-05-31) + +###    ๐Ÿ“– Documentation + +- **projects**: + - CHANGELOG.md  -  by @soybeanjs [(a2521)](https://github.com/honghuangdc/soybean-admin/commit/a252138) + - update README.md  -  by @soybeanjs [(b5839)](https://github.com/honghuangdc/soybean-admin/commit/b5839ea) + +###    ๐Ÿก Chore + +- release v0.10.1  -  by @soybeanjs [(44e4c)](https://github.com/honghuangdc/soybean-admin/commit/44e4c04) +- **projects**: add switch for pageRoute plugin [ๆทปๅŠ ่‡ชๅŠจ็”Ÿๆˆ่ทฏ็”ฑ็š„ๆ’ไปถ็š„ๅผ€ๅ…ณ]  -  by @soybeanjs [(780ac)](https://github.com/honghuangdc/soybean-admin/commit/780ac75) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v0.10.0](https://github.com/honghuangdc/soybean-admin/compare/v0.9.9...v0.10.0) (2023-05-31) + +###    ๐Ÿš€ Features + +- **components**: + - Add tree related component instances  -  by **small_happy** [(d203a)](https://github.com/honghuangdc/soybean-admin/commit/d203a35) + - Add routing data related to tree components and page display optimization  -  by **small_happy** [(a0f55)](https://github.com/honghuangdc/soybean-admin/commit/a0f55ac) +- **projects**: + - ่ฟ”ๅ›ž้กถ้ƒจๅŠŸ่ƒฝ้€‚้…ๆ–ฐๅธƒๅฑ€  -  by @yanbowe [(54e2c)](https://github.com/honghuangdc/soybean-admin/commit/54e2cb5) + - ๅขžๅŠ i18nๆ”ฏๆŒ็ฟป่ฏ‘่œๅ•,tab,title  -  by **cc** [(3d48a)](https://github.com/honghuangdc/soybean-admin/commit/3d48aa8) + - add menu translate [็ฟป่ฏ‘่œๅ•]  -  by @soybeanjs [(f6828)](https://github.com/honghuangdc/soybean-admin/commit/f68285f) + - ๅขžๅŠ ไธป้ข˜ๅˆ‡ๆข่ฟ‡ๆธกๆ•ˆๆžœ  -  by **cc** [(8da88)](https://github.com/honghuangdc/soybean-admin/commit/8da8843) + - support mobile layout [ๆ”ฏๆŒ็งปๅŠจ็ซฏๅธƒๅฑ€]  -  by @soybeanjs [(f2b51)](https://github.com/honghuangdc/soybean-admin/commit/f2b518e) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - fix router guide [ไฟฎๅค่ทฏ็”ฑ่ทณ่ฝฌๅผ‚ๅธธ] fixed #216  -  by @soybeanjs in https://github.com/honghuangdc/soybean-admin/issues/216 [(59578)](https://github.com/honghuangdc/soybean-admin/commit/5957833) + - fix better-mock usage [ไฟฎๅคbetter-mock็”จๆณ•]  -  by @soybeanjs [(c5764)](https://github.com/honghuangdc/soybean-admin/commit/c57640a) + - tsconfig missing isolatedModules  -  by @kirklin [(ab49a)](https://github.com/honghuangdc/soybean-admin/commit/ab49afd) + - fix mockjs [ไฟฎๅคmockjs]  -  by @soybeanjs [(9b19f)](https://github.com/honghuangdc/soybean-admin/commit/9b19f96) + - add prod mockjs switch [ๆทปๅŠ ็”Ÿไบงๆจกๅผ็š„mockjs็š„ๅผ€ๅ…ณ]  -  by @soybeanjs [(9f563)](https://github.com/honghuangdc/soybean-admin/commit/9f5638f) + - ไฟฎๅค้ขๅŒ…ๅฑ‘ๅฏผ่ˆชไธ‹ๆ‹‰่œๅ•่ฏญ่จ€ๆ˜พ็คบ้—ฎ้ข˜  -  by **cc** [(ee8fa)](https://github.com/honghuangdc/soybean-admin/commit/ee8fa04) + - hide the drawer when it is initial mobile mode [ๅˆๅง‹ๅŒ–ๆ—ถไธบ็งปๅŠจ็ซฏๅธƒๅฑ€ๅˆ™้š่—ไพง่พนๆ ] fixed #238  -  by @soybeanjs in https://github.com/honghuangdc/soybean-admin/issues/238 [(0abde)](https://github.com/honghuangdc/soybean-admin/commit/0abde46) + +###    ๐Ÿ”ฅ Performance + +- **projects**: + - complete dynamic route translate [่กฅๅ……ๅŠจๆ€่ทฏ็”ฑ็š„็ฟป่ฏ‘]  -  by @soybeanjs [(7b746)](https://github.com/honghuangdc/soybean-admin/commit/7b746fa) + - move changing document title by locale to global event of composables & add appLoading unmount  -  by @soybeanjs [(08e19)](https://github.com/honghuangdc/soybean-admin/commit/08e194e) + +###    ๐Ÿ’… Refactors + +- **projects**: + - update useTable  -  by @soybeanjs [(211ae)](https://github.com/honghuangdc/soybean-admin/commit/211ae1f) + - remove page examples: tree [ๅŽป้™คtree็›ธๅ…ณ็คบไพ‹้กต้ข]  -  by @soybeanjs [(f3090)](https://github.com/honghuangdc/soybean-admin/commit/f309003) + - use better-mock replace mockjs [็”จbetter-mockๆ›ฟๆขmockjs]  -  by @soybeanjs [(9d3c7)](https://github.com/honghuangdc/soybean-admin/commit/9d3c732) + - upgrade vue3.3, official support defineOptions  -  by @kirklin [(86a37)](https://github.com/honghuangdc/soybean-admin/commit/86a370f) + +###    ๐Ÿ“– Documentation + +- **projects**: + - add qq to README.md [ๆ–‡ๆกฃๆทปๅŠ QQ็พค]  -  by @soybeanjs [(f74a6)](https://github.com/honghuangdc/soybean-admin/commit/f74a642) + - update README.md [ๆ›ดๆ–ฐREADME.md]  -  by @soybeanjs [(39709)](https://github.com/honghuangdc/soybean-admin/commit/397092c) + - update README.md [ๆ›ดๆ–ฐREADME.md]  -  by @soybeanjs [(5a4f8)](https://github.com/honghuangdc/soybean-admin/commit/5a4f842) + - update README.md [ๆ›ดๆ–ฐREADME.md]  -  by @soybeanjs [(a765d)](https://github.com/honghuangdc/soybean-admin/commit/a765da6) + - update README.md [ๆ›ดๆ–ฐREADME.md]  -  by @soybeanjs [(a989b)](https://github.com/honghuangdc/soybean-admin/commit/a989b44) + - ไผ˜ๅŒ–README.md  -  by @greper [(6ea75)](https://github.com/honghuangdc/soybean-admin/commit/6ea755f) + - readme.md ไบŒๆฌกๅผ€ๅ‘็š„้กน็›ฎๅ†…ๅฎนๆข่กŒ  -  by @greper [(f3a17)](https://github.com/honghuangdc/soybean-admin/commit/f3a1707) + - update CHANGELOG.md  -  by @soybeanjs [(5f6ca)](https://github.com/honghuangdc/soybean-admin/commit/5f6caab) + +###    ๐Ÿ“ฆ Build + +- **deps**: + - update deps  -  by @soybeanjs [(db629)](https://github.com/honghuangdc/soybean-admin/commit/db62959) + - update deps [ๅ‡็บงไพ่ต–]  -  by @soybeanjs [(f2e82)](https://github.com/honghuangdc/soybean-admin/commit/f2e82da) + - update deps and remove vite-plugin-html [ๅ‡็บงไพ่ต–๏ผŒๅŽป้™คvite-plugin-html]  -  by @soybeanjs [(eaf36)](https://github.com/honghuangdc/soybean-admin/commit/eaf3678) + - update deps [ๅ‡็บงไพ่ต–]  -  by @soybeanjs [(bae17)](https://github.com/honghuangdc/soybean-admin/commit/bae1767) + - update deps [ๅ‡็บงไพ่ต–]  -  by @soybeanjs [(c2642)](https://github.com/honghuangdc/soybean-admin/commit/c264216) + - update deps [ๅ‡็บงไพ่ต–]  -  by @soybeanjs [(40f85)](https://github.com/honghuangdc/soybean-admin/commit/40f8587) +- **projects**: + - remove old layout,tab package [ๅŽป้™คๆ—ง็š„ๅธƒๅฑ€ๅ’Œ้กต็ญพไพ่ต–]  -  by @soybeanjs [(42e6d)](https://github.com/honghuangdc/soybean-admin/commit/42e6de3) + - update deps and fix type error [ๅ‡็บงไพ่ต–ๅนถไฟฎๅค็ฑปๅž‹้—ฎ้ข˜]  -  by @soybeanjs [(34f02)](https://github.com/honghuangdc/soybean-admin/commit/34f023c) + - update deps and fix style [ๅ‡็บงไพ่ต–&ไฟฎๅคไปฃ็ ๆ ผๅผ]  -  by @soybeanjs [(c1c43)](https://github.com/honghuangdc/soybean-admin/commit/c1c4335) + +###    ๐Ÿก Chore + +- release v0.10.0  -  by @soybeanjs [(270a0)](https://github.com/honghuangdc/soybean-admin/commit/270a055) +- **deps**: update deps  -  by @soybeanjs [(cebbe)](https://github.com/honghuangdc/soybean-admin/commit/cebbef6) +- **projects**: remove useless packages, update lint-staged config, add githublogen  -  by @soybeanjs [(5aaa3)](https://github.com/honghuangdc/soybean-admin/commit/5aaa318) + +###    ๐ŸŽจ Styles + +- **projects**: per style [ๅฎŒๅ–„ๆ ทๅผ]  -  by @soybeanjs [(209ef)](https://github.com/honghuangdc/soybean-admin/commit/209ef3d) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![greper](https://github.com/greper.png?size=48)](https://github.com/greper)  [![kirklin](https://github.com/kirklin.png?size=48)](https://github.com/kirklin)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)   +[cc](mailto:cc@qq.com), [small_happy](mailto:5304122+small_happy@user.noreply.gitee.com),  + +## [v0.9.9](https://github.com/honghuangdc/soybean-admin/compare/v0.9.8...v0.9.9) (2023-03-13) + +###    ๐Ÿš€ Features + +- **hooks**: + - add useNaiveTable  -  by @soybeanjs [(cc13f)](https://github.com/honghuangdc/soybean-admin/commit/cc13fcc) +- **projects**: + - custom unocss colors support opacity  -  by @soybeanjs [(488e6)](https://github.com/honghuangdc/soybean-admin/commit/488e6e3) + - new layout,tab and add update theme settings  -  by @soybeanjs [(912c3)](https://github.com/honghuangdc/soybean-admin/commit/912c353) + +###    ๐Ÿž Bug Fixes + +- **components**: + - ้กต้ข่ทณ่ฝฌ่ขซๆ‹ฆๆˆช, ๅˆ™ไผšๅ‡บ็Žฐ tab ้กต็ญพไธŽ้กต้ขไธไธ€่‡ด็š„้—ฎ้ข˜  -  by @taisha [(bd5dd)](https://github.com/honghuangdc/soybean-admin/commit/bd5dd2c) + - ไฟฎๅคiconSelect้€‰ๆ‹ฉๅ™จ็‚นๅ‡ปไบ‹ไปถๅคฑๆ•ˆ  -  by @yanbowe [(7e505)](https://github.com/honghuangdc/soybean-admin/commit/7e505f9) + - refresh cached routes  -  by @taisha [(b0f98)](https://github.com/honghuangdc/soybean-admin/commit/b0f98e4) +- **projects**: + - fix eslint svg cause incorrect icon render  -  by @soybeanjs [(0b5af)](https://github.com/honghuangdc/soybean-admin/commit/0b5afda) + - sortRoutes recursively  -  by @sunhao1256 [(91889)](https://github.com/honghuangdc/soybean-admin/commit/9188941) + - not only `/login` claim dynamic path scenario , but also others , eg:/user/1  -  by @sunhao1256 [(60598)](https://github.com/honghuangdc/soybean-admin/commit/6059891) + - the length of routes children list should greater than 0  -  by @Shadowsight9 [(e1afc)](https://github.com/honghuangdc/soybean-admin/commit/e1afc10) + - fix pwa logo  -  by @soybeanjs [(bf2f6)](https://github.com/honghuangdc/soybean-admin/commit/bf2f617) + - fix github bug-report  -  by @soybeanjs [(f73e3)](https://github.com/honghuangdc/soybean-admin/commit/f73e3f6) +- **utils**: + - make AxiosRequestConfig optional for request.handleDelete()  -  by @guuuuo [(4a6fe)](https://github.com/honghuangdc/soybean-admin/commit/4a6fec8) + +###    ๐Ÿ’… Refactors + +- **projects**: + - all file and folder use kebab-case  -  by @soybeanjs [(cea60)](https://github.com/honghuangdc/soybean-admin/commit/cea600f) + - update service and proxy config  -  by @soybeanjs [(8debf)](https://github.com/honghuangdc/soybean-admin/commit/8debfe7) + - remove enum  -  by @soybeanjs [(21d52)](https://github.com/honghuangdc/soybean-admin/commit/21d5214) + - rename union key  -  by @soybeanjs [(e2b32)](https://github.com/honghuangdc/soybean-admin/commit/e2b320a) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README.md  -  by @soybeanjs [(cf8c7)](https://github.com/honghuangdc/soybean-admin/commit/cf8c7cb) + - update README.md  -  by @soybeanjs [(1ef1b)](https://github.com/honghuangdc/soybean-admin/commit/1ef1b6b) + - update README.md  -  by @soybeanjs [(aaef0)](https://github.com/honghuangdc/soybean-admin/commit/aaef0be) + +###    ๐Ÿ“ฆ Build + +- **deps**: + - update deps  -  by @soybeanjs [(61998)](https://github.com/honghuangdc/soybean-admin/commit/6199888) +- **projects**: + - update deps and fix project config  -  by @soybeanjs [(da521)](https://github.com/honghuangdc/soybean-admin/commit/da521b3) + - perf logo  -  by @soybeanjs [(a8a6e)](https://github.com/honghuangdc/soybean-admin/commit/a8a6ed9) + - update vscode config  -  by @soybeanjs [(608d7)](https://github.com/honghuangdc/soybean-admin/commit/608d7fb) + - update unocss config  -  by @soybeanjs [(3503d)](https://github.com/honghuangdc/soybean-admin/commit/3503dff) + - update deps, add prettier format command  -  by @soybeanjs [(36e5f)](https://github.com/honghuangdc/soybean-admin/commit/36e5fea) + +###    ๐Ÿก Chore + +- **projects**: + - add github action  -  by @lixin59 [(f355a)](https://github.com/honghuangdc/soybean-admin/commit/f355a69) + - ไฟฎๅคissueๆจกๆฟๆ ผๅผ้—ฎ้ข˜  -  by @lixin59 [(d8bab)](https://github.com/honghuangdc/soybean-admin/commit/d8baba5) +- **release**: + - 0.9.9  -  by @soybeanjs [(c0066)](https://github.com/honghuangdc/soybean-admin/commit/c0066b2) + +###    ๐ŸŽจ Styles + +- **projects**: format yaml  -  by @soybeanjs [(fb46d)](https://github.com/honghuangdc/soybean-admin/commit/fb46d7e) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![guuuuo](https://github.com/guuuuo.png?size=48)](https://github.com/guuuuo)  [![lixin59](https://github.com/lixin59.png?size=48)](https://github.com/lixin59)  [![taisha](https://github.com/taisha.png?size=48)](https://github.com/taisha)  [![Shadowsight9](https://github.com/Shadowsight9.png?size=48)](https://github.com/Shadowsight9)  [![sunhao1256](https://github.com/sunhao1256.png?size=48)](https://github.com/sunhao1256)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)   + +## [v0.9.8](https://github.com/honghuangdc/soybean-admin/compare/v0.9.7...v0.9.8) (2023-01-15) + +###    ๐Ÿš€ Features + +- setting ้กต้ขๆ–ฐๅขž ๆ˜ฏๅฆๆ˜พ็คบfooter็š„ๅผ€ๅ…ณ  -  by @zuihou [(d064f)](https://github.com/honghuangdc/soybean-admin/commit/d064f62) +- ๆ–ฐๅขž affix ๅฑžๆ€ง๏ผŒ็”จไบŽๅฐ†ๅ…ถๅ›บๅฎšๅœจtabๅก  -  by @zuihou [(e772f)](https://github.com/honghuangdc/soybean-admin/commit/e772ff0) +- **projects**: + - add compress script [ๆทปๅŠ ๅŽ‹็ผฉๅ‘ฝไปค]  -  by @soybeanjs [(be6d4)](https://github.com/honghuangdc/soybean-admin/commit/be6d431) + - add script about generating png logo from [ๆทปๅŠ ๆ นๆฎsvg็”Ÿๆˆpngๅ›พๆ ‡็š„ๅ‘ฝไปค]  -  by @soybeanjs [(70aee)](https://github.com/honghuangdc/soybean-admin/commit/70aeefe) + - add generate logo script  -  by @soybeanjs [(25daa)](https://github.com/honghuangdc/soybean-admin/commit/25daa23) + - add new route plugin @soybeanjs/vite-plugin-vue-page-route [้›†ๆˆๆ–ฐ็š„่ทฏ็”ฑๆ’ไปถ]  -  by @soybeanjs [(3131e)](https://github.com/honghuangdc/soybean-admin/commit/3131e00) + +###    ๐Ÿž Bug Fixes + +- remove height limit h-360px  -  by @codearhat [(b5c57)](https://github.com/honghuangdc/soybean-admin/commit/b5c570a) +- set password attributes  -  by @codearhat [(a9a37)](https://github.com/honghuangdc/soybean-admin/commit/a9a3703) +- **components**: + - ไฟฎๅค่ทฏ็”ฑๅœจpathไธญๅŒ…ๅซ้‡ๅค่ทฏๅ•่ฏๅพ„่œๅ•ๆ—ถ๏ผŒ่ขซๆฟ€ๆดปไผš้”™่ฏฏๅฑ•ๅผ€  -  by @shabby2333 [(264da)](https://github.com/honghuangdc/soybean-admin/commit/264da00) +- **projects**: + - fix vite-pwa plugin config  -  by @soybeanjs [(94098)](https://github.com/honghuangdc/soybean-admin/commit/94098d0) + - add router-page.d.ts to git [ๅฐ†router-page.d.tsๆทปๅŠ gitๆไบค]  -  by @soybeanjs [(7a580)](https://github.com/honghuangdc/soybean-admin/commit/7a58035) + - fix router when the dynamic routes api was failed [ไฟฎๅคๅฝ“ๅŠจๆ€่ทฏ็”ฑๆŽฅๅฃๅคฑ่ดฅๅŽ่ทฏ็”ฑๅผ‚ๅธธ้—ฎ้ข˜]  -  by @soybeanjs [(f2b58)](https://github.com/honghuangdc/soybean-admin/commit/f2b580f) + - fix login success message [ไฟฎๅค็™ปๅฝ•ๆˆๅŠŸ็š„ๆถˆๆฏๆ็คบ]  -  by @soybeanjs [(81039)](https://github.com/honghuangdc/soybean-admin/commit/810398a) + - ไฟฎๅคtabsๅœจstatic่ทฏ็”ฑๆจกๅผไธ‹ๅฏไปฅๅ…ณ้—ญ้ฆ–้กต  -  by @yanbowe [(7211a)](https://github.com/honghuangdc/soybean-admin/commit/7211a17) + - ไฟฎๅคๅŠจๆ€่ทฏ็”ฑๆจกๅผไธ‹่ทฏ็”ฑไธๆŽ’ๅบ็š„้—ฎ้ข˜  -  by @HnyLi [(58b27)](https://github.com/honghuangdc/soybean-admin/commit/58b27c9) + +###    ๐Ÿ’… Refactors + +- **czg**: + - update cz-git,czg breaking changes  -  by @yanbowe [(fcb7a)](https://github.com/honghuangdc/soybean-admin/commit/fcb7ad9) +- **hooks**: + - ้‡ๆž„hookๅ‡ฝๆ•ฐๅ–ๆถˆ็›‘ๅฌๆ–นๅผ  -  by @yanbowe [(fd948)](https://github.com/honghuangdc/soybean-admin/commit/fd94886) +- **projects**: + - format code style [่ฐƒๆ•ดไปฃ็ ๆ ผๅผ]  -  by @soybeanjs [(a9d58)](https://github.com/honghuangdc/soybean-admin/commit/a9d58f8) + - import cz-git, czg replace @soybeanjs/cli [ๅผ•ๅ…ฅcz-gitใ€czgๆ›ฟๆข@soybeanjs/cli]  -  by @soybeanjs [(1bdd8)](https://github.com/honghuangdc/soybean-admin/commit/1bdd81a) + - perfect scrollbar style [ๅฎŒๅ–„ๆปšๅŠจๆก]  -  by @soybeanjs [(1a02c)](https://github.com/honghuangdc/soybean-admin/commit/1a02cab) + - refactor app init loading [้‡ๆž„็ณป็ปŸๅˆๅง‹ๅŒ–็š„ๅŠ ่ฝฝ]  -  by @soybeanjs [(57bfe)](https://github.com/honghuangdc/soybean-admin/commit/57bfe27) + - new storage system [ๆ–ฐ็š„ๆœฌๅœฐๆ•ฐๆฎๅญ˜ๅ‚จ็ณป็ปŸ]  -  by @soybeanjs [(97191)](https://github.com/honghuangdc/soybean-admin/commit/9719159) + - add simple-git-hooks replace husky  -  by @soybeanjs [(9110d)](https://github.com/honghuangdc/soybean-admin/commit/9110d87) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README  -  by @soybeanjs [(828a2)](https://github.com/honghuangdc/soybean-admin/commit/828a2f5) + - update README  -  by @soybeanjs [(a3562)](https://github.com/honghuangdc/soybean-admin/commit/a3562d9) + +###    ๐Ÿ“ฆ Build + +- **deps**: + - update deps  -  by @soybeanjs [(84567)](https://github.com/honghuangdc/soybean-admin/commit/8456750) + - update deps  -  by @soybeanjs [(fcc65)](https://github.com/honghuangdc/soybean-admin/commit/fcc65c3) + - update deps  -  by @soybeanjs [(c097b)](https://github.com/honghuangdc/soybean-admin/commit/c097b56) +- **projects**: + - update plugin config  -  by @soybeanjs [(6a344)](https://github.com/honghuangdc/soybean-admin/commit/6a344ff) + - update deps and perfect the details [ๅ‡็บงไพ่ต–๏ผŒๅฎŒๅ–„็ป†่Š‚]  -  by @soybeanjs [(61a43)](https://github.com/honghuangdc/soybean-admin/commit/61a43b8) + - update deps and update config  -  by @soybeanjs [(b08c3)](https://github.com/honghuangdc/soybean-admin/commit/b08c389) + - update lint-staged config  -  by @soybeanjs [(0882c)](https://github.com/honghuangdc/soybean-admin/commit/0882c25) + - add VSCode debug config file  -  by @soybeanjs [(0c126)](https://github.com/honghuangdc/soybean-admin/commit/0c12665) + - update deps  -  by @soybeanjs [(f7181)](https://github.com/honghuangdc/soybean-admin/commit/f71812d) + +###    ๐Ÿก Chore + +- **release**: 0.9.8  -  by @soybeanjs [(34ffd)](https://github.com/honghuangdc/soybean-admin/commit/34ffd9c) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![shabby2333](https://github.com/shabby2333.png?size=48)](https://github.com/shabby2333)  [![HnyLi](https://github.com/HnyLi.png?size=48)](https://github.com/HnyLi)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)  [![zuihou](https://github.com/zuihou.png?size=48)](https://github.com/zuihou)  [![codearhat](https://github.com/codearhat.png?size=48)](https://github.com/codearhat)  [![RockerHX](https://github.com/RockerHX.png?size=48)](https://github.com/RockerHX)   + +## [v0.9.7](https://github.com/honghuangdc/soybean-admin/compare/v0.9.6...v0.9.7) (2022-11-08) + +###    ๐Ÿš€ Features + +- **projects**: + - ๅขžๅŠ ็ณป็ปŸๆถˆๆฏ็ป„ไปถ  -  by @yanbowe [(afa01)](https://github.com/honghuangdc/soybean-admin/commit/afa0134) + - ็ณป็ปŸๆถˆๆฏ็ป„ไปถไปฃ็ ไผ˜ๅŒ–  -  by @yanbowe [(95183)](https://github.com/honghuangdc/soybean-admin/commit/9518372) + - ๅขžๅŠ ่ฟ”ๅ›ž้กถ้ƒจๅŠŸ่ƒฝ  -  by @yanbowe [(894b0)](https://github.com/honghuangdc/soybean-admin/commit/894b0f1) + - ๆทปๅŠ ็”Ÿไบง็š„ไธป้ข˜้…็ฝฎ็ผ“ๅญ˜  -  by @soybeanjs [(718c3)](https://github.com/honghuangdc/soybean-admin/commit/718c362) + - ๆทปๅŠ provideใ€injectไธŠไธ‹ๆ–‡็คบไพ‹  -  by @soybeanjs [(a4447)](https://github.com/honghuangdc/soybean-admin/commit/a444731) + - ๆทปๅŠ ็ป„ไปถๅ็งฐ๏ผŒ่ฐƒๆ•ดvueๆ–‡ไปถ้‡Œ้ข็š„็ฑปๅž‹ๅฃฐๆ˜Žไฝ็ฝฎ  -  by @soybeanjs [(f64bc)](https://github.com/honghuangdc/soybean-admin/commit/f64bc91) + - ้€‚้…็งปๅŠจ็ซฏ๏ผŒไฟฎๅคTabๅ…ณ้—ญๅ›พๆ ‡็š„bug  -  by @soybeanjs [(296b1)](https://github.com/honghuangdc/soybean-admin/commit/296b154) + - ๆทปๅŠ ็ณป็ปŸ็ฎก็†็š„้กต้ข  -  by @soybeanjs [(c33b5)](https://github.com/honghuangdc/soybean-admin/commit/c33b5eb) + - useNaiveTableๅ‡ฝๆ•ฐ๏ผš็ฑปๅž‹้ƒจๅˆ†  -  by @soybeanjs [(02992)](https://github.com/honghuangdc/soybean-admin/commit/02992dc) + - ๆทปๅŠ ่ฏทๆฑ‚้€‚้…adapterๅฑ‚ๅบ”็”จ็š„็คบไพ‹้กต้ข  -  by @soybeanjs [(8d11a)](https://github.com/honghuangdc/soybean-admin/commit/8d11a6a) + - ๅฎž็Žฐ็”จๆˆท็ฎก็†้กต้ข  -  by @soybeanjs [(472f9)](https://github.com/honghuangdc/soybean-admin/commit/472f93b) + - ๅ…จๅฑ€ๆœ็ดข่œๅ•ๅŠๆถˆๆฏ้€š็Ÿฅ้€‚้…็งปๅŠจ็ซฏ  -  by @yanbowe [(97e2f)](https://github.com/honghuangdc/soybean-admin/commit/97e2ffd) + - support constant route without login status[ๆ”ฏๆŒๆœช็™ปๅฝ•็Šถๆ€ไธ‹่ฎฟ้—ฎ่‡ชๅฎšไน‰็š„ๅ›บๅฎš่ทฏ็”ฑ]  -  by @soybeanjs [(a5391)](https://github.com/honghuangdc/soybean-admin/commit/a539112) + - add pinia setup syntax example: setup-store[ๆทปๅŠ setup syntax็š„pinia็คบไพ‹setup-store]  -  by @soybeanjs [(82c4b)](https://github.com/honghuangdc/soybean-admin/commit/82c4b09) + - add constant route page without login status[ๆทปๅŠ ๆœช็™ปๅฝ•ๅฏ่ฎฟ้—ฎ็š„ๅ›บๅฎš่ทฏ็”ฑ็คบไพ‹้กต้ข]  -  by @soybeanjs [(78efd)](https://github.com/honghuangdc/soybean-admin/commit/78efd77) + - refactor icon system, unify icon usage [้‡ๆž„ๅ›พๆ ‡็ณป็ปŸ๏ผŒ็ปŸไธ€ๅ›พๆ ‡็”จๆณ•]  -  by @soybeanjs [(811f8)](https://github.com/honghuangdc/soybean-admin/commit/811f820) + - import i18n [ๅผ•ๅ…ฅi18n]  -  by @soybeanjs [(b632b)](https://github.com/honghuangdc/soybean-admin/commit/b632b7f) + - new router system [ๆ–ฐ็š„่ทฏ็”ฑ็ณป็ปŸ]  -  by @soybeanjs [(c7b6a)](https://github.com/honghuangdc/soybean-admin/commit/c7b6a3f) +- **tabs**: + - ๅคš้กต็ญพๅขžๅŠ ๅ…ณ้—ญๆ‰€ๆœ‰  -  by @yanbowe [(8237a)](https://github.com/honghuangdc/soybean-admin/commit/8237adb) + +###    ๐Ÿž Bug Fixes + +- **deps**: + - decrease @types/node version to fix TS type error [้™ไฝŽ@types/node็‰ˆๆœฌไฟฎๅคTS็š„็ฑปๅž‹้”™่ฏฏ]  -  by @soybeanjs [(149d2)](https://github.com/honghuangdc/soybean-admin/commit/149d22a) +- **projects**: + - ไฟฎๅคtabไธๆ˜พ็คบ่ทฏ็”ฑ้ฆ–้กต็š„้—ฎ้ข˜  -  by @soybeanjs [(a792b)](https://github.com/honghuangdc/soybean-admin/commit/a792bb5) + - ไฟฎๅคๅคšไธชๅŽ็ซฏๆœๅŠกๆ—ถ็š„ๆœฌๅœฐไปฃ็†  -  by @soybeanjs [(2aba5)](https://github.com/honghuangdc/soybean-admin/commit/2aba58c) + - ไฟฎๅคๅ›พๆ ‡็š„TS็ฑปๅž‹  -  by @soybeanjs [(dbd67)](https://github.com/honghuangdc/soybean-admin/commit/dbd6760) + - ไฟฎๅคimport.meta.env็š„TS็ฑปๅž‹  -  by @soybeanjs [(19942)](https://github.com/honghuangdc/soybean-admin/commit/1994262) + - ไฟฎๅคๆž„ๅปบๅŽmockjsๅฏนxhr็š„ๅฝฑๅ“้—ฎ้ข˜  -  by @soybeanjs [(77572)](https://github.com/honghuangdc/soybean-admin/commit/7757285) + - ไฟฎๅคTS็ฑปๅž‹้—ฎ้ข˜  -  by @soybeanjs [(16dce)](https://github.com/honghuangdc/soybean-admin/commit/16dce9a) + - ไฟฎๅคeslint่ง„ๅˆ™  -  by @soybeanjs [(d7f5b)](https://github.com/honghuangdc/soybean-admin/commit/d7f5bf3) + - add iconify json  -  by @soybeanjs [(8a1ec)](https://github.com/honghuangdc/soybean-admin/commit/8a1ec93) +- **svg-icon**: + - ่‡ชๅฎšไน‰ๅ›พๆ ‡ๅœจDropdown็ป„ไปถไธ‹hover็Šถๆ€ๆ— ๆณ•ๆ˜พ็คบๅ›พๆ ‡  -  by @yanbowe [(0523f)](https://github.com/honghuangdc/soybean-admin/commit/0523f08) +- **utils**: + - ไฟฎๅคiconifyRender  -  by @soybeanjs [(c37d0)](https://github.com/honghuangdc/soybean-admin/commit/c37d0ac) + +###    ๐Ÿ”ฅ Performance + +- **components**: + - ๆทปๅŠ ๆ›ดๅคšไธป้ข˜้ขœ่‰ฒ่ฎพ็ฝฎๆจกๆ€็ช—็š„ๅฑ‚็บง  -  by @xiaotao2018 [(ee7eb)](https://github.com/honghuangdc/soybean-admin/commit/ee7eb3a) + - ๆทปๅŠ ๆ›ดๅคšไธป้ข˜้ขœ่‰ฒ่ฎพ็ฝฎๆจกๆ€็ช—็š„ๅฑ‚็บง๏ผŒz-indexไธบint  -  by @xiaotao2018 [(e2d65)](https://github.com/honghuangdc/soybean-admin/commit/e2d6554) + +###    ๐Ÿ’… Refactors + +- **projects**: + - ไปฃ็ ไผ˜ๅŒ–  -  by @yanbowe [(41147)](https://github.com/honghuangdc/soybean-admin/commit/41147b3) + - ๆทปๅŠ subscribeAppStore  -  by @soybeanjs [(aa2f7)](https://github.com/honghuangdc/soybean-admin/commit/aa2f78a) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(b60db)](https://github.com/honghuangdc/soybean-admin/commit/b60db89) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(61436)](https://github.com/honghuangdc/soybean-admin/commit/6143605) + - ่ฏทๆฑ‚้€‚้…ๅ™จๅ‡ฝๆ•ฐ่Œƒๅž‹้‡ๆž„ใ€ไผ˜ๅŒ–่ฏทๆฑ‚็›ธๅ…ณ็š„ๅ‘ฝๅ  -  by @soybeanjs [(7f9c9)](https://github.com/honghuangdc/soybean-admin/commit/7f9c98a) + - ๆ›ดๆ–ฐๆœ็ดขๅผน็ช—็š„ๅ›พๆ ‡  -  by @soybeanjs [(ed9cd)](https://github.com/honghuangdc/soybean-admin/commit/ed9cd6c) + - ๆŠฝ็ฆปๆ ผๅผๅŒ–็›ธๅ…ณไพ่ต–้…็ฝฎ  -  by @soybeanjs [(f4d37)](https://github.com/honghuangdc/soybean-admin/commit/f4d37cf) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(49f95)](https://github.com/honghuangdc/soybean-admin/commit/49f95c4) + - cancel autoinstall @iconify-json [ๅ–ๆถˆ@iconify-json่‡ชๅŠจๅฎ‰่ฃ…]  -  by @soybeanjs [(c29b8)](https://github.com/honghuangdc/soybean-admin/commit/c29b887) + - refactor page: user-management [้‡ๆž„็”จๆˆท็ฎก็†้กต้ข]  -  by @soybeanjs [(468b4)](https://github.com/honghuangdc/soybean-admin/commit/468b4bb) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README.md  -  by @soybeanjs [(e2727)](https://github.com/honghuangdc/soybean-admin/commit/e2727e6) + - revert docs  -  by @soybeanjs [(2c562)](https://github.com/honghuangdc/soybean-admin/commit/2c56233) + +###    ๐Ÿ“ฆ Build + +- **deps**: + - update deps  -  by @soybeanjs [(69e39)](https://github.com/honghuangdc/soybean-admin/commit/69e39c1) + - update deps  -  by @soybeanjs [(ea1a3)](https://github.com/honghuangdc/soybean-admin/commit/ea1a336) + - update deps  -  by @soybeanjs [(73fa3)](https://github.com/honghuangdc/soybean-admin/commit/73fa3d1) + - update deps  -  by @soybeanjs [(973ab)](https://github.com/honghuangdc/soybean-admin/commit/973ab14) + - update deps  -  by @soybeanjs [(75000)](https://github.com/honghuangdc/soybean-admin/commit/750000e) + - update deps  -  by @soybeanjs [(8dcfb)](https://github.com/honghuangdc/soybean-admin/commit/8dcfbb2) + - update deps  -  by @soybeanjs [(1523c)](https://github.com/honghuangdc/soybean-admin/commit/1523c7b) + - update deps  -  by @soybeanjs [(da407)](https://github.com/honghuangdc/soybean-admin/commit/da407b6) + - update deps  -  by @soybeanjs [(cec0f)](https://github.com/honghuangdc/soybean-admin/commit/cec0f25) + - update deps  -  by @soybeanjs [(d9cfe)](https://github.com/honghuangdc/soybean-admin/commit/d9cfeab) + - update deps  -  by @soybeanjs [(dd113)](https://github.com/honghuangdc/soybean-admin/commit/dd11324) + - update deps  -  by @soybeanjs [(d0823)](https://github.com/honghuangdc/soybean-admin/commit/d0823b0) + - update deps  -  by @soybeanjs [(94ff7)](https://github.com/honghuangdc/soybean-admin/commit/94ff787) + - update deps  -  by @soybeanjs [(b32bc)](https://github.com/honghuangdc/soybean-admin/commit/b32bca4) + - update deps  -  by @soybeanjs [(f6b61)](https://github.com/honghuangdc/soybean-admin/commit/f6b6141) + - update deps  -  by @soybeanjs [(0f0cd)](https://github.com/honghuangdc/soybean-admin/commit/0f0cd0b) + - ๆ›ดๆ–ฐ@soybeanjs/eslint-config  -  by @soybeanjs [(36f06)](https://github.com/honghuangdc/soybean-admin/commit/36f06bc) + - update deps  -  by @soybeanjs [(d9324)](https://github.com/honghuangdc/soybean-admin/commit/d9324f0) + - update deps  -  by @soybeanjs [(1ad92)](https://github.com/honghuangdc/soybean-admin/commit/1ad92a2) + - ๅ‡็บงไพ่ต–  -  by @soybeanjs [(7240b)](https://github.com/honghuangdc/soybean-admin/commit/7240be8) + - update deps  -  by @soybeanjs [(c5ba6)](https://github.com/honghuangdc/soybean-admin/commit/c5ba631) + - update deps  -  by @soybeanjs [(3e0cc)](https://github.com/honghuangdc/soybean-admin/commit/3e0cc8c) + - update deps  -  by @soybeanjs [(21b6f)](https://github.com/honghuangdc/soybean-admin/commit/21b6fb6) + - update deps  -  by @soybeanjs [(d823e)](https://github.com/honghuangdc/soybean-admin/commit/d823ee5) + - unplugin-vue-define-optionsๆ›ฟๆขไธบunplugin-vue-macros  -  by @soybeanjs [(22c90)](https://github.com/honghuangdc/soybean-admin/commit/22c9025) + - update deps  -  by @soybeanjs [(7dd7c)](https://github.com/honghuangdc/soybean-admin/commit/7dd7c71) + - update deps  -  by @soybeanjs [(fe8ca)](https://github.com/honghuangdc/soybean-admin/commit/fe8cab3) + - unplugin-icon autoinstall @iconify-json [unplugin-icon่‡ชๅŠจๅฎ‰่ฃ…@iconify-json]  -  by @soybeanjs [(c045e)](https://github.com/honghuangdc/soybean-admin/commit/c045e3f) + - update deps [ๅ‡็บงไพ่ต–]  -  by @soybeanjs [(331b1)](https://github.com/honghuangdc/soybean-admin/commit/331b14e) + - update deps  -  by @soybeanjs [(88e53)](https://github.com/honghuangdc/soybean-admin/commit/88e535f) + - update deps  -  by @soybeanjs [(89985)](https://github.com/honghuangdc/soybean-admin/commit/8998581) + - update deps  -  by @soybeanjs [(65ac6)](https://github.com/honghuangdc/soybean-admin/commit/65ac69e) + - update deps  -  by @soybeanjs [(abd02)](https://github.com/honghuangdc/soybean-admin/commit/abd02d1) + - update deps  -  by @soybeanjs [(d6b15)](https://github.com/honghuangdc/soybean-admin/commit/d6b1530) + - update deps  -  by @soybeanjs [(8e801)](https://github.com/honghuangdc/soybean-admin/commit/8e801dd) + - update deps  -  by @soybeanjs [(41b3b)](https://github.com/honghuangdc/soybean-admin/commit/41b3bcb) + - update deps  -  by @soybeanjs [(1f3e6)](https://github.com/honghuangdc/soybean-admin/commit/1f3e6e4) + - update deps  -  by @soybeanjs [(74772)](https://github.com/honghuangdc/soybean-admin/commit/74772a1) +- **projects**: + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(5c1b0)](https://github.com/honghuangdc/soybean-admin/commit/5c1b086) + - update tsconfig  -  by @soybeanjs [(9ce58)](https://github.com/honghuangdc/soybean-admin/commit/9ce5807) + - update vscode settings  -  by @soybeanjs [(3fe4e)](https://github.com/honghuangdc/soybean-admin/commit/3fe4e92) + - ๆทปๅŠ .gitattributes  -  by @soybeanjs [(896e6)](https://github.com/honghuangdc/soybean-admin/commit/896e6f2) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(6a9a3)](https://github.com/honghuangdc/soybean-admin/commit/6a9a362) + - ๅ‡็บงไพ่ต–๏ผŒๆทปๅŠ ๅฏนjson็š„eslintๆฃ€ๆต‹ๅŠๆ ผๅผๅŒ–  -  by @soybeanjs [(711a4)](https://github.com/honghuangdc/soybean-admin/commit/711a4ae) + - update deps and README.md  -  by @soybeanjs [(35aee)](https://github.com/honghuangdc/soybean-admin/commit/35aeedf) + - ๅ‡็บงไพ่ต–ใ€vite้…็ฝฎoptimizeDeps  -  by @soybeanjs [(ee434)](https://github.com/honghuangdc/soybean-admin/commit/ee434b4) + - ๅŽป้™คprettier๏ผŒๅทฒ้›†ๆˆ่ฟ›@soybeanjs/eslint-config  -  by @soybeanjs [(182da)](https://github.com/honghuangdc/soybean-admin/commit/182dac0) + - update eslint  -  by @soybeanjs [(907cf)](https://github.com/honghuangdc/soybean-admin/commit/907cf44) + - ๅผ•ๅ…ฅpwaๆ’ไปถ๏ผŒๆ›ดๆ–ฐ้…็ฝฎ  -  by @soybeanjs [(695ec)](https://github.com/honghuangdc/soybean-admin/commit/695ec7e) + - ๆ›ดๆ–ฐไพ่ต–ใ€่ฐƒๆ•ด้กต้ข  -  by @soybeanjs [(40ecc)](https://github.com/honghuangdc/soybean-admin/commit/40ecc32) + - ๅผ•ๅ…ฅvite-plugin-progress  -  by @soybeanjs [(44ab0)](https://github.com/honghuangdc/soybean-admin/commit/44ab077) + - ๅ‡็บงไพ่ต–ใ€ไฟฎๅคTๆ ‡็ญพๅณ้”ฎ่œๅ•่ฟž็ปญๆ˜พ็คบ้—ฎ้ข˜  -  by @soybeanjs [(639c4)](https://github.com/honghuangdc/soybean-admin/commit/639c445) + - ๅผ•ๅ…ฅTS้ซ˜็บง็ฑปๅž‹ๅบ“  -  by @soybeanjs [(71a75)](https://github.com/honghuangdc/soybean-admin/commit/71a753f) + - ๆ›ดๆขeslintไพ่ต–ไธบeslint-config-soybeanjs-vue  -  by @soybeanjs [(07325)](https://github.com/honghuangdc/soybean-admin/commit/07325a4) + - ๅ‡็บงไพ่ต–๏ผŒ้™ไฝŽnaive-ui็‰ˆๆœฌไฟฎๅคๆ‰“ๅŒ…้—ฎ้ข˜  -  by @soybeanjs [(f408e)](https://github.com/honghuangdc/soybean-admin/commit/f408ea0) + - ๅ‡็บงไพ่ต–๏ผŒไฟฎๅคTS็ฑปๅž‹  -  by @soybeanjs [(73ce5)](https://github.com/honghuangdc/soybean-admin/commit/73ce53a) + - ๅผ•ๅ…ฅ@unocss/viteๆ›ฟๆขunocss๏ผŒ็ฒพ็ฎ€ไฝ“็งฏ  -  by @soybeanjs [(3540b)](https://github.com/honghuangdc/soybean-admin/commit/3540b75) + - update deps, update logos  -  by @soybeanjs [(22c05)](https://github.com/honghuangdc/soybean-admin/commit/22c0567) + - add constant page content  -  by @soybeanjs [(13d0c)](https://github.com/honghuangdc/soybean-admin/commit/13d0c41) + - add tauri scripts, change tauri icon, fix mockjs [ๆทปๅŠ tauri็›ธๅ…ณ็š„ๅ‘ฝไปค๏ผŒๅ˜ๆ›ดtauriๅ›พๆ ‡๏ผŒไฟฎๅคmockjs]  -  by @soybeanjs [(1b45b)](https://github.com/honghuangdc/soybean-admin/commit/1b45b71) + - use @soybeanjs/cli replace commitizen  -  by @soybeanjs [(428d4)](https://github.com/honghuangdc/soybean-admin/commit/428d41b) + - use pnpm patch replace @milahu/patch-package  -  by @soybeanjs [(9455a)](https://github.com/honghuangdc/soybean-admin/commit/9455ad9) + - remove useless file: commitlint.config.js  -  by @soybeanjs [(67736)](https://github.com/honghuangdc/soybean-admin/commit/6773659) + - move tauri to branch tauri  -  by @soybeanjs [(6c14b)](https://github.com/honghuangdc/soybean-admin/commit/6c14bfe) + - update deps and update config  -  by @soybeanjs [(7d699)](https://github.com/honghuangdc/soybean-admin/commit/7d69992) + - new router branch  -  by @soybeanjs [(288d5)](https://github.com/honghuangdc/soybean-admin/commit/288d586) + - add vite plugin @soybeanjs/router-page  -  by @soybeanjs [(40c1e)](https://github.com/honghuangdc/soybean-admin/commit/40c1e13) + +###    ๐Ÿก Chore + +- **other**: + - release v0.9.7  -  by @soybeanjs [(cc00c)](https://github.com/honghuangdc/soybean-admin/commit/cc00c8f) +- **projects**: + - ๆ›ดๆ–ฐ.cz-config  -  by @soybeanjs [(b18c4)](https://github.com/honghuangdc/soybean-admin/commit/b18c49e) + - ๆ›ดๆ–ฐeslint้…็ฝฎ  -  by @soybeanjs [(872bb)](https://github.com/honghuangdc/soybean-admin/commit/872bb84) + +###    ๐Ÿค– CI + +- add docker build  -  by @zq-xu [(af740)](https://github.com/honghuangdc/soybean-admin/commit/af74046) +- change docker image name  -  by @zq-xu [(6fbde)](https://github.com/honghuangdc/soybean-admin/commit/6fbde1e) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![hhstore](https://github.com/hhstore.png?size=48)](https://github.com/hhstore)  [![zq-xu](https://github.com/zq-xu.png?size=48)](https://github.com/zq-xu)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)  [![xiaotao2018](https://github.com/xiaotao2018.png?size=48)](https://github.com/xiaotao2018)   + +## [v0.9.6](https://github.com/honghuangdc/soybean-admin/compare/v0.9.5...v0.9.6) (2022-06-16) + +###    ๐Ÿš€ Features + +- **projects**: + - ๆ–ฐๅขžAntv G2ๅ›พ่กจ็คบไพ‹  -  by @soybeanjs [(2d64a)](https://github.com/honghuangdc/soybean-admin/commit/2d64a2e) + - ไธŠไธ‹็ป“ๆž„๏ผŒ่œๅ•ๆ”ฏๆŒๆจชๅ‘ๆปšๅŠจ  -  by @suiyingsky [(80805)](https://github.com/honghuangdc/soybean-admin/commit/808051b) + - ๅขžๅŠ ่ฎพ็ฝฎๅฝ“ๅ‰Tab้กต็ญพๅ็งฐๅŠŸ่ƒฝ  -  by @yanbowe [(48721)](https://github.com/honghuangdc/soybean-admin/commit/487213b) + - ๆœฌๅœฐsvgๅŠจๆ€ๆธฒๆŸ“ๅ›พๆ ‡  -  by @soybeanjs [(c3c97)](https://github.com/honghuangdc/soybean-admin/commit/c3c975e) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - ไฟฎๅค้กถ้ƒจ่œๅ•็š„ไฝ็ฝฎๅคฑๆ•ˆ้—ฎ้ข˜  -  by @honghuangdc [(4ee0d)](https://github.com/honghuangdc/soybean-admin/commit/4ee0d94) + - ่ฎพ็ฝฎtabๆ ‡้ข˜ๅฏผ่‡ดmetaๅฑžๆ€งไธขๅคฑ  -  by @yanbowe [(efcfa)](https://github.com/honghuangdc/soybean-admin/commit/efcfa57) + +###    ๐Ÿ’… Refactors + +- **projects**: + - ไผ˜ๅŒ–่œๅ•ๆ”ฏๆŒๆจชๅ‘ๆปšๅŠจ  -  by @soybeanjs [(8f3e8)](https://github.com/honghuangdc/soybean-admin/commit/8f3e855) + - ไปฃ็ ไผ˜ๅŒ–  -  by @honghuangdc [(5fa82)](https://github.com/honghuangdc/soybean-admin/commit/5fa822f) + +###    ๐Ÿ“– Documentation + +- **projects**: update README.md  -  by @soybeanjs [(0c70a)](https://github.com/honghuangdc/soybean-admin/commit/0c70a9e) + +###    ๐Ÿ“ฆ Build + +- **deps**: + - update deps  -  by @soybeanjs [(906ae)](https://github.com/honghuangdc/soybean-admin/commit/906aed5) + - update deps  -  by @soybeanjs [(9917b)](https://github.com/honghuangdc/soybean-admin/commit/9917b5e) + - update deps  -  by @soybeanjs [(83301)](https://github.com/honghuangdc/soybean-admin/commit/833018a) +- **projects**: + - update deps, update config  -  by @honghuangdc [(8e6e7)](https://github.com/honghuangdc/soybean-admin/commit/8e6e787) + +###    ๐Ÿก Chore + +- **release**: 0.9.6  -  by @soybeanjs [(65c21)](https://github.com/honghuangdc/soybean-admin/commit/65c2181) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![suiyingsky](https://github.com/suiyingsky.png?size=48)](https://github.com/suiyingsky)   + +## [v0.9.5](https://github.com/honghuangdc/soybean-admin/compare/v0.9.4...v0.9.5) (2022-06-07) + +###    ๐Ÿš€ Features + +- **projects**: + - ๆทปๅŠ ่‡ชๅŠจ่ทŸ้š็ณป็ปŸไธป้ข˜่ฎพ็ฝฎ  -  by @toolvcn [(ba07b)](https://github.com/honghuangdc/soybean-admin/commit/ba07b69) + - ๅผ•ๅ…ฅechartsๆ›ฟๆขantvG2plot  -  by @soybeanjs [(e7ad0)](https://github.com/honghuangdc/soybean-admin/commit/e7ad086) + - ๆทปๅŠ ็™พๅบฆๅœฐๅ›พใ€ๅ‡็บงไพ่ต–  -  by @soybeanjs [(39854)](https://github.com/honghuangdc/soybean-admin/commit/39854a4) + - ๆทปๅŠ ๆ’ไปถ้กต้ข๏ผšๅ›พ่กจ  -  by @soybeanjs [(0a46e)](https://github.com/honghuangdc/soybean-admin/commit/0a46ea0) + - ๆทปๅŠ antv g2ๅ›พ่กจ็คบไพ‹  -  by @soybeanjs [(44b02)](https://github.com/honghuangdc/soybean-admin/commit/44b022a) + - ่กฅๅ……ๆ›ดๅคš็š„ECharts็คบไพ‹  -  by @soybeanjs [(c7762)](https://github.com/honghuangdc/soybean-admin/commit/c776249) + - ๅŠจๆ€่ทฏ็”ฑๆ น่ทฏ็”ฑ้‡ๅฎšๅ‘ๅช้œ€ๅ–ๅ†ณไบŽๅŽ็ซฏ่ฟ”ๅ›ž็š„่ทฏ็”ฑ้ฆ–้กต  -  by @soybeanjs [(434ab)](https://github.com/honghuangdc/soybean-admin/commit/434ab1c) + - ๆ”ฏๆŒๅŒไธ€่ทฏ็”ฑๆ นๆฎไธๅŒqueryๅ’ŒhashๅŒๆ—ถๆ˜พ็คบไธๅŒTab  -  by @soybeanjs [(41226)](https://github.com/honghuangdc/soybean-admin/commit/4122685) +- **route**: + - ่ทฏ็”ฑmetaๆ–ฐๅขžactiveMenuๅฑžๆ€ง  -  by @yanbowe [(ebd16)](https://github.com/honghuangdc/soybean-admin/commit/ebd16a4) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - ไฟฎๅคๆ’ไปถไธๅญ˜ๅœจ็š„้”™่ฏฏๆ็คบ  -  by @ThinkDevelop [(71652)](https://github.com/honghuangdc/soybean-admin/commit/7165282) + - ไฟฎๅคๆƒ้™ๅˆ‡ๆข่ทฏ็”ฑๆ•ฐๆฎๆœชๆ›ดๆ–ฐ็š„้—ฎ้ข˜  -  by @soybeanjs [(60f91)](https://github.com/honghuangdc/soybean-admin/commit/60f9125) + - ไฟฎๅค้กต้ขๅˆ‡ๆขๆ—ถๅฏผ่‡ด็š„ๆบขๅ‡บๆปšๅŠจๆก  -  by @soybeanjs [(e0233)](https://github.com/honghuangdc/soybean-admin/commit/e023306) + - ไฟฎๅค@antv/g2็”Ÿไบง็ŽฏๅขƒๆŠฅ้”™  -  by @soybeanjs [(4558c)](https://github.com/honghuangdc/soybean-admin/commit/4558c24) +- **route**: + - ๅฝ“ไธบๅทฆไพงๆททๅˆ่œๅ•ๆ—ถactiveMenuๆ— ๆ•ˆๆƒ…ๅ†ต  -  by @yanbowe [(3e4f9)](https://github.com/honghuangdc/soybean-admin/commit/3e4f9e2) + +###    ๐Ÿ’… Refactors + +- **layouts**: + - layout/header ๅ่ฝฌ่‰ฒๆ ทๅผ่กฅๅ……  -  by **ๅ…ƒๅฎถๆ€ฟ** [(01d0b)](https://github.com/honghuangdc/soybean-admin/commit/01d0bcb) +- **projects**: + - ไปฃ็ ไผ˜ๅŒ–  -  by @honghuangdc [(14c14)](https://github.com/honghuangdc/soybean-admin/commit/14c145e) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(3590b)](https://github.com/honghuangdc/soybean-admin/commit/3590b65) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(a1c7e)](https://github.com/honghuangdc/soybean-admin/commit/a1c7e10) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(44ab5)](https://github.com/honghuangdc/soybean-admin/commit/44ab55d) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(095c4)](https://github.com/honghuangdc/soybean-admin/commit/095c432) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(d28b9)](https://github.com/honghuangdc/soybean-admin/commit/d28b903) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(4c2f5)](https://github.com/honghuangdc/soybean-admin/commit/4c2f535) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(d9ac7)](https://github.com/honghuangdc/soybean-admin/commit/d9ac7e4) +- **styles**: + - ไปฃ็ ๆ ผๅผ  -  by @soybeanjs [(8f6d6)](https://github.com/honghuangdc/soybean-admin/commit/8f6d6ce) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README.md  -  by @soybeanjs [(3d8be)](https://github.com/honghuangdc/soybean-admin/commit/3d8befa) + - update README.md  -  by @honghuangdc [(21e63)](https://github.com/honghuangdc/soybean-admin/commit/21e6399) + - update README.md  -  by @honghuangdc [(0811f)](https://github.com/honghuangdc/soybean-admin/commit/0811ffa) + - update README.md  -  by @soybeanjs [(84cb0)](https://github.com/honghuangdc/soybean-admin/commit/84cb07b) + - update README.md  -  by @soybeanjs [(4b80a)](https://github.com/honghuangdc/soybean-admin/commit/4b80a66) + - update docs  -  by @honghuangdc [(e9656)](https://github.com/honghuangdc/soybean-admin/commit/e9656c6) + - update README.md  -  by @honghuangdc [(ae99e)](https://github.com/honghuangdc/soybean-admin/commit/ae99e57) + +###    ๐Ÿ“ฆ Build + +- **deps**: + - update deps  -  by @honghuangdc [(518f7)](https://github.com/honghuangdc/soybean-admin/commit/518f7ee) + - update deps  -  by @soybeanjs [(92b84)](https://github.com/honghuangdc/soybean-admin/commit/92b8406) + - update deps  -  by @soybeanjs [(50d7c)](https://github.com/honghuangdc/soybean-admin/commit/50d7ccd) + - update deps  -  by @soybeanjs [(3f822)](https://github.com/honghuangdc/soybean-admin/commit/3f822a7) + - update deps  -  by @soybeanjs [(02809)](https://github.com/honghuangdc/soybean-admin/commit/028096e) + - update deps  -  by @soybeanjs [(be45d)](https://github.com/honghuangdc/soybean-admin/commit/be45d83) + - update deps  -  by @soybeanjs [(6a5a3)](https://github.com/honghuangdc/soybean-admin/commit/6a5a357) + - ไพ่ต–ๅ‡็บง  -  by @honghuangdc [(e3c4a)](https://github.com/honghuangdc/soybean-admin/commit/e3c4a6e) +- **other**: + - update cz config  -  by @honghuangdc [(07baa)](https://github.com/honghuangdc/soybean-admin/commit/07baac7) +- **projects**: + - update config  -  by @soybeanjs [(a0c40)](https://github.com/honghuangdc/soybean-admin/commit/a0c405d) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(de09f)](https://github.com/honghuangdc/soybean-admin/commit/de09f82) + - ้…็ฝฎไผ˜ๅŒ–  -  by @honghuangdc [(fd787)](https://github.com/honghuangdc/soybean-admin/commit/fd78791) + - ้…็ฝฎๆ›ดๆ”น  -  by @honghuangdc [(c8717)](https://github.com/honghuangdc/soybean-admin/commit/c8717c2) + +###    ๐Ÿก Chore + +- **deps**: + - update deps  -  by @soybeanjs [(a70e4)](https://github.com/honghuangdc/soybean-admin/commit/a70e416) + - update deps  -  by @soybeanjs [(7487a)](https://github.com/honghuangdc/soybean-admin/commit/7487ab7) +- **release**: + - 0.9.5  -  by @soybeanjs [(08d83)](https://github.com/honghuangdc/soybean-admin/commit/08d83ec) + +###    ๐ŸŽจ Styles + +- **GlobalBreadcrumb**: ไปฃ็ ๆ ผๅผfix  -  by @tclyjy [(0243b)](https://github.com/honghuangdc/soybean-admin/commit/0243b27) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)  [![ThinkDevelop](https://github.com/ThinkDevelop.png?size=48)](https://github.com/ThinkDevelop)  [![tclyjy](https://github.com/tclyjy.png?size=48)](https://github.com/tclyjy)  [![toolvcn](https://github.com/toolvcn.png?size=48)](https://github.com/toolvcn)   +[ๅ…ƒๅฎถๆ€ฟ](mailto:jiayi.yuan@lkcoffee.com),  + +## [v0.9.4](https://github.com/honghuangdc/soybean-admin/compare/main-0428...v0.9.4) (2022-04-29) + +###    ๐Ÿš€ Features + +- **layouts**: + - ๆทปๅŠ ไพง่พนๆ /ๅคด้ƒจ็š„ๅ่ฝฌๆจกๅผๆฅๅขžๅŠ ๅฏนๆฏ”ๅบฆ  -  by **ๅ…ƒๅฎถๆ€ฟ** [(861c8)](https://github.com/honghuangdc/soybean-admin/commit/861c8b9) +- **projects**: + - ๅผ•ๅ…ฅunocssๆ›ฟๆขwindicss  -  by @honghuangdc [(c9d3e)](https://github.com/honghuangdc/soybean-admin/commit/c9d3e5a) + - HTML lang ไฟฎๆ”นไธบ zh-cmn-Hans  -  by @toolvcn [(b9c5c)](https://github.com/honghuangdc/soybean-admin/commit/b9c5c34) + - ๆƒ้™ๅฎŒๅ–„ๅŠๆƒ้™็คบไพ‹้กต้ข  -  by @soybeanjs [(80744)](https://github.com/honghuangdc/soybean-admin/commit/807448a) + - mockๆทปๅŠ ๆƒ้™่ฟ‡ๆปค  -  by @soybeanjs [(7f435)](https://github.com/honghuangdc/soybean-admin/commit/7f4350a) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - ๆทปๅŠ .npmrcไฟฎๅคๆ— ๆณ•่Žทๅ–่‡ชๅŠจๅผ•ๅ…ฅ็š„ๅ…จๅฑ€็ป„ไปถๅฃฐๆ˜Ž็ฑปๅž‹  -  by @honghuangdc [(e8488)](https://github.com/honghuangdc/soybean-admin/commit/e8488e4) + - ไฟฎๅคๆ ทๅผ  -  by @honghuangdc [(e8999)](https://github.com/honghuangdc/soybean-admin/commit/e899914) + +###    ๐Ÿ’… Refactors + +- **projects**: + - mockๆƒ้™็›ธๅ…ณๆ•ฐๆฎไผ˜ๅŒ–  -  by @soybeanjs [(41e46)](https://github.com/honghuangdc/soybean-admin/commit/41e46a5) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(251b5)](https://github.com/honghuangdc/soybean-admin/commit/251b5b9) + - ไปฃ็ ไผ˜ๅŒ–  -  by @honghuangdc [(a7824)](https://github.com/honghuangdc/soybean-admin/commit/a782461) + - ็ป†่Š‚ไผ˜ๅŒ–  -  by @soybeanjs [(c275f)](https://github.com/honghuangdc/soybean-admin/commit/c275f26) + - layoutๅ’Œtab็ป„ไปถไพ่ต–ๅ็งฐๅ˜ๆ›ดใ€ๆ ทๅผไฟฎๅค  -  by @soybeanjs [(de5fb)](https://github.com/honghuangdc/soybean-admin/commit/de5fb84) + - merge branch unocss to main  -  by @soybeanjs [(69d51)](https://github.com/honghuangdc/soybean-admin/commit/69d5131) + - ๅŠจๆ€่ทฏ็”ฑๆƒ้™ๅฎŒๅ–„  -  by @soybeanjs [(55ddc)](https://github.com/honghuangdc/soybean-admin/commit/55ddc9c) + +###    ๐Ÿ“– Documentation + +- **projects**: update README.md  -  by @soybeanjs [(d5c75)](https://github.com/honghuangdc/soybean-admin/commit/d5c7511) + +###    ๐Ÿ“ฆ Build + +- **deps**: update deps  -  by @honghuangdc [(5c75e)](https://github.com/honghuangdc/soybean-admin/commit/5c75e9d) +- **projects**: ็ป†่Š‚่ฐƒๆ•ด  -  by @soybeanjs [(401f0)](https://github.com/honghuangdc/soybean-admin/commit/401f0c7) + +###    ๐Ÿก Chore + +- **release**: 0.9.4  -  by @soybeanjs [(97c92)](https://github.com/honghuangdc/soybean-admin/commit/97c9262) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![toolvcn](https://github.com/toolvcn.png?size=48)](https://github.com/toolvcn)   +[ๅ…ƒๅฎถๆ€ฟ](mailto:jiayi.yuan@luckincoffee.com),  + +## [v0.10.2](https://github.com/honghuangdc/soybean-admin/compare/v0.9.3...main-0428) (23-06-07) + +###    ๐Ÿš€ Features + +- **layouts**: + - ๆทปๅŠ ไพง่พนๆ /ๅคด้ƒจ็š„ๅ่ฝฌๆจกๅผๆฅๅขžๅŠ ๅฏนๆฏ”ๅบฆ  -  by **ๅ…ƒๅฎถๆ€ฟ** [(3c8dd)](https://github.com/honghuangdc/soybean-admin/commit/3c8dd77) +- **projects**: + - ๆ–ฐๅขž้™ๆ€่ทฏ็”ฑ  -  by @soybeanjs [(ca2df)](https://github.com/honghuangdc/soybean-admin/commit/ca2dfa6) + - ๆ’ไปถๆ–นๅผๆŒ‰้œ€ๅผ•ๅ…ฅnaiveUI  -  by @soybeanjs [(6bed9)](https://github.com/honghuangdc/soybean-admin/commit/6bed9ea) + - ๆทปๅŠ ่ฏทๆฑ‚้€‚้…ๅ™จ็š„่ฏทๆฑ‚็คบไพ‹  -  by @soybeanjs [(bed42)](https://github.com/honghuangdc/soybean-admin/commit/bed4292) + - ็™ปๅฝ•้กต้ข้€‚้…็งปๅŠจ็ซฏ  -  by @soybeanjs [(ec077)](https://github.com/honghuangdc/soybean-admin/commit/ec0776e) + - ็™ปๅฝ•้กต่ƒŒๆ™ฏๅ›พ็‰‡ไฝ็ฝฎ้€‚้…็งปๅŠจ็ซฏ  -  by @soybeanjs [(24010)](https://github.com/honghuangdc/soybean-admin/commit/24010d0) + - HTML lang ไฟฎๆ”นไธบ zh-cmn-Hans  -  by @toolvcn [(dbeb5)](https://github.com/honghuangdc/soybean-admin/commit/dbeb595) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - ไฟฎๅคvite alias  -  by @soybeanjs [(cd7ca)](https://github.com/honghuangdc/soybean-admin/commit/cd7ca8f) + - ไฟฎๅค่ทฏ็”ฑๅฎˆๅซ็š„ๅŠจๆ€่ทฏ็”ฑ้€ป่พ‘  -  by @soybeanjs [(e6c26)](https://github.com/honghuangdc/soybean-admin/commit/e6c26fc) + - ๅ…จๅฑ€ๆœ็ดขๅผน็ช—ๅผนๅ‡บๆ—ถๅŠจ็”ป้—ชๅฑ้—ฎ้ข˜  -  by @yanbowe [(bb1bb)](https://github.com/honghuangdc/soybean-admin/commit/bb1bbf2) + - ๅŽป้™คไปŽ็Žฏๅขƒๆ–‡ไปถๅผ•ๅ…ฅ็ซฏๅฃๅทๅฏผ่‡ด็š„้”™่ฏฏ  -  by @soybeanjs [(2d6d1)](https://github.com/honghuangdc/soybean-admin/commit/2d6d179) + - ไฟฎๅคๅœจๆ–ฐ็‰ˆviteไธ‹็Žฏๅขƒๅ˜้‡่Žทๅ–ไธๅˆฐ็š„้—ฎ้ข˜  -  by @soybeanjs [(3fb13)](https://github.com/honghuangdc/soybean-admin/commit/3fb13ca) + - ไฟฎๅค่Žทๅ–vite็Žฏๅขƒๅ˜้‡็š„ๆ–นๅผ  -  by @soybeanjs [(46e1a)](https://github.com/honghuangdc/soybean-admin/commit/46e1ae7) + - ๆทปๅŠ ่Žทๅ–่ทฏ็”ฑ็ป„ไปถๆ–‡ไปถๆœชๆ‰พๅˆฐๆ—ถ็š„้”™่ฏฏๆ็คบ  -  by @honghuangdc [(219f8)](https://github.com/honghuangdc/soybean-admin/commit/219f87f) + +###    ๐Ÿ”ฅ Performance + +- refresh-kokenๅ‘ฝๅ  -  by @southliu [(17155)](https://github.com/honghuangdc/soybean-admin/commit/1715504) + +###    ๐Ÿ’… Refactors + +- **projects**: + - lintๅ‘ฝไปคไฟฎๆ”น  -  by @soybeanjs [(20911)](https://github.com/honghuangdc/soybean-admin/commit/20911dd) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(e8b53)](https://github.com/honghuangdc/soybean-admin/commit/e8b534b) + - ๅŽป้™คๅœจpinia็š„getters็š„ๅ‡ฝๆ•ฐ่ฐƒ็”จๅ‰ฏไฝœ็”จ๏ผŒ็”จwatchไปฃๆ›ฟ  -  by @soybeanjs [(b35ed)](https://github.com/honghuangdc/soybean-admin/commit/b35ed89) + - ไปฃ็ ไผ˜ๅŒ–  -  by @honghuangdc [(5e276)](https://github.com/honghuangdc/soybean-admin/commit/5e27642) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README.md  -  by @honghuangdc [(21645)](https://github.com/honghuangdc/soybean-admin/commit/2164553) + - update README.md  -  by @honghuangdc [(9a90f)](https://github.com/honghuangdc/soybean-admin/commit/9a90f18) + - update README.md  -  by @honghuangdc [(60a55)](https://github.com/honghuangdc/soybean-admin/commit/60a55a7) + +###    ๐Ÿ“ฆ Build + +- **deps**: update deps  -  by @soybeanjs [(cecce)](https://github.com/honghuangdc/soybean-admin/commit/cecce83) +- **projects**: vite.configไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(ca707)](https://github.com/honghuangdc/soybean-admin/commit/ca707a4) + +###    ๐Ÿก Chore + +- **deps**: update deps  -  by @soybeanjs [(4eb46)](https://github.com/honghuangdc/soybean-admin/commit/4eb46ea) + +###    ๐ŸŽจ Styles + +- **projects**: update prettier config  -  by @honghuangdc [(df56a)](https://github.com/honghuangdc/soybean-admin/commit/df56abe) + +###    โค๏ธ Contributors + +[![toolvcn](https://github.com/toolvcn.png?size=48)](https://github.com/toolvcn)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)  [![southliu](https://github.com/southliu.png?size=48)](https://github.com/southliu)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[ๅ…ƒๅฎถๆ€ฟ](mailto:jiayi.yuan@luckincoffee.com),  + +## [v0.9.3](https://github.com/honghuangdc/soybean-admin/compare/old-version...v0.9.3) (2022-03-12) + +###    ๐Ÿš€ Features + +- **components**: + - svgIcon,ๆทปๅŠ type,่ฐƒๆ•ดsizeๆ–นๆกˆ  -  by @Lsq128 [(ce4e0)](https://github.com/honghuangdc/soybean-admin/commit/ce4e039) +- **projects**: + - ่ทฏ็”ฑ้กต้ข่ทณ่ฝฌๆƒ้™ๅฎŒๆˆ  -  by @soybeanjs [(0d2a5)](https://github.com/honghuangdc/soybean-admin/commit/0d2a562) + - ้›†ๆˆnaiveUIไธป้ข˜้…็ฝฎ๏ผŒๅฐ†css varsๆทปๅŠ ่‡ณhtml  -  by @soybeanjs [(2c196)](https://github.com/honghuangdc/soybean-admin/commit/2c19684) + - ๅˆๅง‹ๅŒ–ๅŠ ่ฝฝๆ•ˆๆžœ๏ผšๅบ”็”จไธป้ข˜้ขœ่‰ฒ  -  by @honghuangdc [(035fa)](https://github.com/honghuangdc/soybean-admin/commit/035fa11) + - ็™ปๅฝ•้กต้ขๅผ€ๅง‹่ฟ็งป  -  by @honghuangdc [(f5a36)](https://github.com/honghuangdc/soybean-admin/commit/f5a36a0) + - ่ฟ็งป็™ปๅฝ•ๅฎŒๆˆ  -  by @soybeanjs [(b93b8)](https://github.com/honghuangdc/soybean-admin/commit/b93b80c) + - ๆทปๅŠ NaiveProvider็ป„ไปถ  -  by @honghuangdc [(c804b)](https://github.com/honghuangdc/soybean-admin/commit/c804b21) + - ๅคš็บง่ทฏ็”ฑ็š„ๆ‰€ๆœ‰ๅญ่ทฏ็”ฑ่ฝฌๆขๆˆไบŒ็บง่ทฏ็”ฑ  -  by @honghuangdc [(85b55)](https://github.com/honghuangdc/soybean-admin/commit/85b55bb) + - ๆ–ฐๅขžBasicLayoutๅธƒๅฑ€  -  by @soybeanjs [(00646)](https://github.com/honghuangdc/soybean-admin/commit/006467a) + - ๅˆ›ๅปบ่‡ชๅฎšไน‰ๅธƒๅฑ€็ป„ไปถSoybeanLayout  -  by @honghuangdc [(0653f)](https://github.com/honghuangdc/soybean-admin/commit/0653fb1) + - ๆทปๅŠ ๆŠฝๅฑ‰  -  by @honghuangdc [(10e4d)](https://github.com/honghuangdc/soybean-admin/commit/10e4d81) + - theme storeๅฎŒๆˆ  -  by @soybeanjs [(bf020)](https://github.com/honghuangdc/soybean-admin/commit/bf020a8) + - ไธป้ข˜้…็ฝฎๆŠฝๅฑ‰๏ผš่ฟ็งปๆš—้ป‘ๆจกๅผใ€ๅธƒๅฑ€ๆจกๅผใ€ๆทปๅŠ ้ขœ่‰ฒ้€‰ๆ‹ฉ้ขๆฟ  -  by @soybeanjs [(912bf)](https://github.com/honghuangdc/soybean-admin/commit/912bfdf) + - ไธป้ข˜้…็ฝฎๆŠฝๅฑ‰: ่ฟ็งปๅ…ถไป–ๅŠŸ่ƒฝ  -  by @soybeanjs [(6d132)](https://github.com/honghuangdc/soybean-admin/commit/6d132c5) + - ๆทปๅŠ ๅคด้ƒจๆŠ˜ๅ ๆŒ‰้’ฎ  -  by @honghuangdc [(a090d)](https://github.com/honghuangdc/soybean-admin/commit/a090d39) + - ๆทปๅŠ ไพง่พน่œๅ•  -  by @soybeanjs [(e25af)](https://github.com/honghuangdc/soybean-admin/commit/e25afe2) + - ้ขๅŒ…ๅฑ‘  -  by @honghuangdc [(09c76)](https://github.com/honghuangdc/soybean-admin/commit/09c7658) + - ่ฏทๆฑ‚ๆ‹ฆๆˆชๅ™จๆทปๅŠ ๅˆทๆ–ฐtoken  -  by @honghuangdc [(839b8)](https://github.com/honghuangdc/soybean-admin/commit/839b82b) + - ็ป†่Š‚ๅฎŒๅ–„  -  by @soybeanjs [(cc290)](https://github.com/honghuangdc/soybean-admin/commit/cc290ac) + - ่ฟ็งปๅคš้กต็ญพ  -  by @soybeanjs [(28efb)](https://github.com/honghuangdc/soybean-admin/commit/28efbdb) + - ็ป†่Š‚ๅฎŒๅ–„ใ€่ฟ็งป้กต้ข  -  by @soybeanjs [(ce531)](https://github.com/honghuangdc/soybean-admin/commit/ce531ce) + - ๆทปๅŠ ้กต้ข็ผ“ๅญ˜ใ€่ฎฐๅฝ•ๅœจtabไธญ็š„็ผ“ๅญ˜้กต้ข็š„ๆปšๅŠจๆกไฝ็ฝฎ  -  by @soybeanjs [(1d63a)](https://github.com/honghuangdc/soybean-admin/commit/1d63a83) + - ๆทปๅŠ ็ผ“ๅญ˜ไธป้ข˜่‰ฒ  -  by @soybeanjs [(37092)](https://github.com/honghuangdc/soybean-admin/commit/3709297) + - ๆ–ฐ็‰ˆ้‡ๆž„ๅฎŒๆˆ  -  by @soybeanjs [(68b42)](https://github.com/honghuangdc/soybean-admin/commit/68b4230) + - ่ฟ็งปๅ…จๅฑ€ๆœ็ดข่œๅ•ๅŠŸ่ƒฝ  -  by @yanbowe [(554d7)](https://github.com/honghuangdc/soybean-admin/commit/554d7fd) + - ๆทปๅŠ naiveUIๆŒ‰้œ€ๅผ•ๅ…ฅ  -  by @soybeanjs [(a810e)](https://github.com/honghuangdc/soybean-admin/commit/a810ef8) + - ๆทปๅŠ SvgIcon,้…็ฝฎvite plugin  -  by **Liushengqun** [(378d5)](https://github.com/honghuangdc/soybean-admin/commit/378d55a) + - ๅผ•ๅ…ฅsoybean-admin-tabใ€ๅŽป้™คvite-plugin-svg-icons๏ผŒ็”จunplugin-iconsๅฎž็Žฐ่‡ชๅฎšไน‰svg็š„iconifyๅ†™ๆณ•ใ€ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(a1a57)](https://github.com/honghuangdc/soybean-admin/commit/a1a57a1) + - ๆ–ฐๅขžๅญ่œๅ•ๅ›พๆ ‡ๅ’Œๅคš้กต็ญพๅ›พๆ ‡  -  by @soybeanjs [(f5c56)](https://github.com/honghuangdc/soybean-admin/commit/f5c56c3) + - ้‡ๆž„้กน็›ฎ็š„TS็ฑปๅž‹ๆžถๆž„๏ผŒๅŽป้™คinterfaceๆ–‡ไปถๅคน  -  by @soybeanjs [(81914)](https://github.com/honghuangdc/soybean-admin/commit/8191490) + - ๆทปๅŠ ็ฝ‘็ปœไปฃ็†  -  by @soybeanjs [(094dc)](https://github.com/honghuangdc/soybean-admin/commit/094dca9) + - ๆทปๅŠ ๅ…จๅฑ€็ป„ไปถ่‡ชๅŠจๅผ•ๅ…ฅๆณจๅ†Œ  -  by @soybeanjs [(f5a04)](https://github.com/honghuangdc/soybean-admin/commit/f5a043b) + - ๆ–ฐๅขž่‡ชๅฎšไน‰svgๅ›พๆ ‡ๅŠจๆ€ๆธฒๆŸ“  -  by @soybeanjs [(f83c7)](https://github.com/honghuangdc/soybean-admin/commit/f83c7b5) + +###    ๐Ÿž Bug Fixes + +- **components**: + - ไฟฎๅคTabๅœจ็งปๅŠจ็ซฏ่ฎพๅค‡ๆ— ๆณ•็‚นๅ‡ป็š„้—ฎ้ข˜  -  by @honghuangdc [(2c966)](https://github.com/honghuangdc/soybean-admin/commit/2c9660f) + - ไฟฎๅค็ป„ไปถLoadingEmptyWrapper้€‚ๅบ”ๆš—้ป‘ๆจกๅผ  -  by @soybeanjs [(811b1)](https://github.com/honghuangdc/soybean-admin/commit/811b15e) + - ็ป„ไปถLoadingEmptyWrapperๆทปๅŠ ่ƒŒๆ™ฏ้ขœ่‰ฒๅŠจ็”ป่ฟ‡ๆธก  -  by @soybeanjs [(7add5)](https://github.com/honghuangdc/soybean-admin/commit/7add5c2) +- **projects**: + - ไฟฎๅคredirect-not-foundๅญ่ทฏ็”ฑ  -  by @honghuangdc [(5bfb8)](https://github.com/honghuangdc/soybean-admin/commit/5bfb819) + - ๅŽป้™คLayout็ป„ไปถๅ†—ไฝ™ไปฃ็   -  by @honghuangdc [(0e783)](https://github.com/honghuangdc/soybean-admin/commit/0e783bc) + - ไฟฎๅค้ขๅŒ…ๅฑ‘ๆ•ฐๆฎ  -  by @honghuangdc [(28b5d)](https://github.com/honghuangdc/soybean-admin/commit/28b5d22) + - ไฟฎๅคvertical-mixๅธƒๅฑ€ใ€้‡ๆž„ๅˆๅง‹ๅŒ–็š„loading  -  by @soybeanjs [(579e0)](https://github.com/honghuangdc/soybean-admin/commit/579e074) + - ไฟฎๅคๆœช็™ปๅฝ•ๆ—ถไผš่ฐƒ็”จ่Žทๅ–็”จๆˆท่ทฏ็”ฑ็š„ๆŽฅๅฃ  -  by @soybeanjs [(21bab)](https://github.com/honghuangdc/soybean-admin/commit/21bab1f) + - ไฟฎๅค่ทฏ็”ฑๅฎˆๅซ็š„ๅŠจๆ€่ทฏ็”ฑ้€ป่พ‘  -  by @soybeanjs [(b61b0)](https://github.com/honghuangdc/soybean-admin/commit/b61b0ce) + - vite้…็ฝฎไฟฎๅค  -  by @soybeanjs [(facc0)](https://github.com/honghuangdc/soybean-admin/commit/facc00e) + - ไฟฎๅคๅˆ†ๆž้กตๅ’Œๅทฅไฝœๅฐ็š„ๅธƒๅฑ€้—ฎ้ข˜  -  by @honghuangdc [(e93b9)](https://github.com/honghuangdc/soybean-admin/commit/e93b94c) + - ไฟฎๅค้กน็›ฎ้…็ฝฎๆ‹ท่ดๅŠŸ่ƒฝ  -  by @soybeanjs [(a7a26)](https://github.com/honghuangdc/soybean-admin/commit/a7a269d) + - ไฟฎๅค้กต้ขๅˆ‡ๆขๅŠจ็”ปๆ— ๅ˜ๅŒ–  -  by @soybeanjs [(c4546)](https://github.com/honghuangdc/soybean-admin/commit/c4546bd) + - ไฟฎๅค้กต้ขๅˆ‡ๆขๅŠจ็”ปๅผ€ๅ…ณไธ็”Ÿๆ•ˆ  -  by @bundlejs [(9d4ed)](https://github.com/honghuangdc/soybean-admin/commit/9d4ed61) + - ไฟฎๅค BASE_URL ๆฒกๆœ‰็”Ÿๆ•ˆ็š„้—ฎ้ข˜  -  by @pany-ang [(72d7d)](https://github.com/honghuangdc/soybean-admin/commit/72d7dcf) + +###    ๐Ÿ’… Refactors + +- **components**: + - ๅŽป้™คpackages็š„soybean-layout๏ผŒ้€š่ฟ‡npm็š„ๆ–นๅผๅผ•ๅ…ฅ  -  by @soybeanjs [(c1182)](https://github.com/honghuangdc/soybean-admin/commit/c1182fe) +- **projects**: + - ็ฒพ็ฎ€็‰ˆ+ๅŠจๆ€่ทฏ็”ฑๆƒ้™ๅˆๆญฅ  -  by @soybeanjs [(de205)](https://github.com/honghuangdc/soybean-admin/commit/de2057f) + - ๅ•็‹ฌไธ€็บง่ทฏ็”ฑ็›ธๅ…ณ้€ป่พ‘้‡ๆž„  -  by @honghuangdc [(ab9a6)](https://github.com/honghuangdc/soybean-admin/commit/ab9a6a2) + - ๅ•็‹ฌ่ทฏ็”ฑ้€ป่พ‘้‡ๆž„ใ€่ทฏ็”ฑ่ฝฌๆขๅ‡ฝๆ•ฐไผ˜ๅŒ–  -  by @soybeanjs [(b36a6)](https://github.com/honghuangdc/soybean-admin/commit/b36a62b) + - ๆขๅคpinia้ป˜่ฎคๅ†™ๆณ•  -  by @soybeanjs [(b2a4d)](https://github.com/honghuangdc/soybean-admin/commit/b2a4ddf) + - ่ฏทๆฑ‚ๆž„้€ ๅ‡ฝๆ•ฐ้€‚้…ไธๅŒๅŽ็ซฏๆŽฅๅฃ็š„ๆ•ฐๆฎ็ป“ๆž„  -  by @soybeanjs [(4f9d5)](https://github.com/honghuangdc/soybean-admin/commit/4f9d544) + - ็ป†่Š‚ๅฎŒๅ–„  -  by @soybeanjs [(651e5)](https://github.com/honghuangdc/soybean-admin/commit/651e58d) + - ้‡ๆž„่ทฏ็”ฑ้กต้ข็ป„ไปถ็š„ๅฏผๅ…ฅ  -  by @honghuangdc [(e6503)](https://github.com/honghuangdc/soybean-admin/commit/e65034d) + - ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(4e31a)](https://github.com/honghuangdc/soybean-admin/commit/4e31abd) + +###    ๐Ÿ“– Documentation + +- **other**: + - ๆณจ้‡Šๆ–‡ๆกˆไฟฎๆ”น  -  by **ๆฏ›ๅšๆ–‡** [(d0064)](https://github.com/honghuangdc/soybean-admin/commit/d00643c) +- **projects**: + - update README.md  -  by @soybeanjs [(5eddb)](https://github.com/honghuangdc/soybean-admin/commit/5eddb49) + - update README.md  -  by @soybeanjs [(02c51)](https://github.com/honghuangdc/soybean-admin/commit/02c51e6) + - update README.md  -  by @honghuangdc [(47f28)](https://github.com/honghuangdc/soybean-admin/commit/47f2871) + - update README.md  -  by @honghuangdc [(7ed5d)](https://github.com/honghuangdc/soybean-admin/commit/7ed5d0d) + - update README.md  -  by @honghuangdc [(3befb)](https://github.com/honghuangdc/soybean-admin/commit/3befb22) + - update README.md  -  by @honghuangdc [(e856c)](https://github.com/honghuangdc/soybean-admin/commit/e856cdb) + - update README.md  -  by @soybeanjs [(3aded)](https://github.com/honghuangdc/soybean-admin/commit/3aded40) + - update README.md  -  by @soybeanjs [(225e7)](https://github.com/honghuangdc/soybean-admin/commit/225e712) + - update README.md  -  by @honghuangdc [(5b401)](https://github.com/honghuangdc/soybean-admin/commit/5b401a7) + - update README.md  -  by @honghuangdc [(8cdad)](https://github.com/honghuangdc/soybean-admin/commit/8cdad54) + - update README.md  -  by @soybeanjs [(a0dfa)](https://github.com/honghuangdc/soybean-admin/commit/a0dfa3d) + - update README.md  -  by @soybeanjs [(b8db2)](https://github.com/honghuangdc/soybean-admin/commit/b8db211) + +###    ๐Ÿ“ฆ Build + +- **deps**: + - ๅ‡็บงไพ่ต–  -  by @soybeanjs [(284af)](https://github.com/honghuangdc/soybean-admin/commit/284af63) + - ๅ‡็บงไพ่ต–  -  by @soybeanjs [(57c69)](https://github.com/honghuangdc/soybean-admin/commit/57c692b) + - ๅ‡็บงไพ่ต–  -  by @soybeanjs [(7ba33)](https://github.com/honghuangdc/soybean-admin/commit/7ba332c) + - upgrade deps  -  by @soybeanjs [(50c8b)](https://github.com/honghuangdc/soybean-admin/commit/50c8b9d) + - upgrade deps  -  by @soybeanjs [(8d00b)](https://github.com/honghuangdc/soybean-admin/commit/8d00b23) + - upgrade deps  -  by @soybeanjs [(b298a)](https://github.com/honghuangdc/soybean-admin/commit/b298af1) +- **projects**: + - ไฟฎๆ”นvscode้…็ฝฎ  -  by @honghuangdc [(0c577)](https://github.com/honghuangdc/soybean-admin/commit/0c5770d) + - ๆทปๅŠ vercelๆ‰“ๅŒ…็š„็Žฏๅขƒ  -  by @honghuangdc [(371fa)](https://github.com/honghuangdc/soybean-admin/commit/371fad4) + - add license  -  by @soybeanjs [(b1672)](https://github.com/honghuangdc/soybean-admin/commit/b16721b) + - ๆ›ดๆ–ฐtsconfig.json  -  by @soybeanjs [(f42ee)](https://github.com/honghuangdc/soybean-admin/commit/f42ee9d) + - update tsconfigใ€eslintrc  -  by @soybeanjs [(75de2)](https://github.com/honghuangdc/soybean-admin/commit/75de2b0) + +###    ๐Ÿก Chore + +- **release**: + - 0.1.1 ็ฒพ็ฎ€็‰ˆๅ‘ๅธƒ  -  by @soybeanjs [(db3c2)](https://github.com/honghuangdc/soybean-admin/commit/db3c25e) + - 0.1.2  -  by @soybeanjs [(db75c)](https://github.com/honghuangdc/soybean-admin/commit/db75c91) + - 0.1.3  -  by @soybeanjs [(32a7c)](https://github.com/honghuangdc/soybean-admin/commit/32a7cc4) + - 0.9.1  -  by @soybeanjs [(be374)](https://github.com/honghuangdc/soybean-admin/commit/be37408) + - 0.9.2  -  by @honghuangdc [(11407)](https://github.com/honghuangdc/soybean-admin/commit/1140722) + - 0.9.3  -  by @soybeanjs [(d0522)](https://github.com/honghuangdc/soybean-admin/commit/d0522ce) + +###    ๐ŸŽจ Styles + +- **components**: ไปฃ็ ไผ˜ๅŒ–  -  by @soybeanjs [(1e2fd)](https://github.com/honghuangdc/soybean-admin/commit/1e2fdda) +- **projects**: ่ทฏ็”ฑ็›ธๅ…ณๆ–‡ไปถๅคน็ฎ€ๅŒ–  -  by @honghuangdc [(e5793)](https://github.com/honghuangdc/soybean-admin/commit/e5793e1) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![pany-ang](https://github.com/pany-ang.png?size=48)](https://github.com/pany-ang)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![bundlejs](https://github.com/bundlejs.png?size=48)](https://github.com/bundlejs)  [![Lsq128](https://github.com/Lsq128.png?size=48)](https://github.com/Lsq128)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)   +[ๆฏ›ๅšๆ–‡](mailto:maobowen@bonc.com.cn), [Liushengqun](mailto:18232366809@163.com),  + +## [v0.10.2](https://github.com/honghuangdc/soybean-admin/compare/v0.9.2...old-version) (23-06-07) + +###    ๐Ÿš€ Features + +- **projects**: + - ่ทฏ็”ฑ้กต้ข่ทณ่ฝฌๆƒ้™ๅฎŒๆˆ  -  by @soybeanjs [(0d2a5)](https://github.com/honghuangdc/soybean-admin/commit/0d2a562) + - ้›†ๆˆnaiveUIไธป้ข˜้…็ฝฎ๏ผŒๅฐ†css varsๆทปๅŠ ่‡ณhtml  -  by @soybeanjs [(2c196)](https://github.com/honghuangdc/soybean-admin/commit/2c19684) + - ๅˆๅง‹ๅŒ–ๅŠ ่ฝฝๆ•ˆๆžœ๏ผšๅบ”็”จไธป้ข˜้ขœ่‰ฒ  -  by @honghuangdc [(035fa)](https://github.com/honghuangdc/soybean-admin/commit/035fa11) + - ็™ปๅฝ•้กต้ขๅผ€ๅง‹่ฟ็งป  -  by @honghuangdc [(f5a36)](https://github.com/honghuangdc/soybean-admin/commit/f5a36a0) + - ่ฟ็งป็™ปๅฝ•ๅฎŒๆˆ  -  by @soybeanjs [(b93b8)](https://github.com/honghuangdc/soybean-admin/commit/b93b80c) + - ๆทปๅŠ NaiveProvider็ป„ไปถ  -  by @honghuangdc [(c804b)](https://github.com/honghuangdc/soybean-admin/commit/c804b21) + - ๅคš็บง่ทฏ็”ฑ็š„ๆ‰€ๆœ‰ๅญ่ทฏ็”ฑ่ฝฌๆขๆˆไบŒ็บง่ทฏ็”ฑ  -  by @honghuangdc [(85b55)](https://github.com/honghuangdc/soybean-admin/commit/85b55bb) + - ๆ–ฐๅขžBasicLayoutๅธƒๅฑ€  -  by @soybeanjs [(00646)](https://github.com/honghuangdc/soybean-admin/commit/006467a) + - ๅˆ›ๅปบ่‡ชๅฎšไน‰ๅธƒๅฑ€็ป„ไปถSoybeanLayout  -  by @honghuangdc [(0653f)](https://github.com/honghuangdc/soybean-admin/commit/0653fb1) + - ๆทปๅŠ ๆŠฝๅฑ‰  -  by @honghuangdc [(10e4d)](https://github.com/honghuangdc/soybean-admin/commit/10e4d81) + - theme storeๅฎŒๆˆ  -  by @soybeanjs [(bf020)](https://github.com/honghuangdc/soybean-admin/commit/bf020a8) + - ไธป้ข˜้…็ฝฎๆŠฝๅฑ‰๏ผš่ฟ็งปๆš—้ป‘ๆจกๅผใ€ๅธƒๅฑ€ๆจกๅผใ€ๆทปๅŠ ้ขœ่‰ฒ้€‰ๆ‹ฉ้ขๆฟ  -  by @soybeanjs [(912bf)](https://github.com/honghuangdc/soybean-admin/commit/912bfdf) + - ไธป้ข˜้…็ฝฎๆŠฝๅฑ‰: ่ฟ็งปๅ…ถไป–ๅŠŸ่ƒฝ  -  by @soybeanjs [(6d132)](https://github.com/honghuangdc/soybean-admin/commit/6d132c5) + - ๆทปๅŠ ๅคด้ƒจๆŠ˜ๅ ๆŒ‰้’ฎ  -  by @honghuangdc [(a090d)](https://github.com/honghuangdc/soybean-admin/commit/a090d39) + - ๆทปๅŠ ไพง่พน่œๅ•  -  by @soybeanjs [(e25af)](https://github.com/honghuangdc/soybean-admin/commit/e25afe2) + - ้ขๅŒ…ๅฑ‘  -  by @honghuangdc [(09c76)](https://github.com/honghuangdc/soybean-admin/commit/09c7658) + - ่ฏทๆฑ‚ๆ‹ฆๆˆชๅ™จๆทปๅŠ ๅˆทๆ–ฐtoken  -  by @honghuangdc [(839b8)](https://github.com/honghuangdc/soybean-admin/commit/839b82b) + - ็ป†่Š‚ๅฎŒๅ–„  -  by @soybeanjs [(cc290)](https://github.com/honghuangdc/soybean-admin/commit/cc290ac) + - ่ฟ็งปๅคš้กต็ญพ  -  by @soybeanjs [(28efb)](https://github.com/honghuangdc/soybean-admin/commit/28efbdb) + - ็ป†่Š‚ๅฎŒๅ–„ใ€่ฟ็งป้กต้ข  -  by @soybeanjs [(ce531)](https://github.com/honghuangdc/soybean-admin/commit/ce531ce) + - ๆทปๅŠ ้กต้ข็ผ“ๅญ˜ใ€่ฎฐๅฝ•ๅœจtabไธญ็š„็ผ“ๅญ˜้กต้ข็š„ๆปšๅŠจๆกไฝ็ฝฎ  -  by @soybeanjs [(1d63a)](https://github.com/honghuangdc/soybean-admin/commit/1d63a83) + - ๆทปๅŠ ็ผ“ๅญ˜ไธป้ข˜่‰ฒ  -  by @soybeanjs [(37092)](https://github.com/honghuangdc/soybean-admin/commit/3709297) + - ๆ–ฐ็‰ˆ้‡ๆž„ๅฎŒๆˆ  -  by @soybeanjs [(68b42)](https://github.com/honghuangdc/soybean-admin/commit/68b4230) + - ่ฟ็งปๅ…จๅฑ€ๆœ็ดข่œๅ•ๅŠŸ่ƒฝ  -  by @yanbowe [(554d7)](https://github.com/honghuangdc/soybean-admin/commit/554d7fd) + +###    ๐Ÿž Bug Fixes + +- **components**: + - ไฟฎๅคTabๅœจ็งปๅŠจ็ซฏ่ฎพๅค‡ๆ— ๆณ•็‚นๅ‡ป็š„้—ฎ้ข˜  -  by @honghuangdc [(2c966)](https://github.com/honghuangdc/soybean-admin/commit/2c9660f) +- **projects**: + - ไฟฎๅคredirect-not-foundๅญ่ทฏ็”ฑ  -  by @honghuangdc [(5bfb8)](https://github.com/honghuangdc/soybean-admin/commit/5bfb819) + - ๅŽป้™คLayout็ป„ไปถๅ†—ไฝ™ไปฃ็   -  by @honghuangdc [(0e783)](https://github.com/honghuangdc/soybean-admin/commit/0e783bc) + - ไฟฎๅค้ขๅŒ…ๅฑ‘ๆ•ฐๆฎ  -  by @honghuangdc [(28b5d)](https://github.com/honghuangdc/soybean-admin/commit/28b5d22) + - ไฟฎๅคvertical-mixๅธƒๅฑ€ใ€้‡ๆž„ๅˆๅง‹ๅŒ–็š„loading  -  by @soybeanjs [(579e0)](https://github.com/honghuangdc/soybean-admin/commit/579e074) + - ไฟฎๅคๆœช็™ปๅฝ•ๆ—ถไผš่ฐƒ็”จ่Žทๅ–็”จๆˆท่ทฏ็”ฑ็š„ๆŽฅๅฃ  -  by @soybeanjs [(21bab)](https://github.com/honghuangdc/soybean-admin/commit/21bab1f) + - ไฟฎๅค่ทฏ็”ฑๅฎˆๅซ็š„ๅŠจๆ€่ทฏ็”ฑ้€ป่พ‘  -  by @soybeanjs [(b61b0)](https://github.com/honghuangdc/soybean-admin/commit/b61b0ce) + - vite้…็ฝฎไฟฎๅค  -  by @soybeanjs [(facc0)](https://github.com/honghuangdc/soybean-admin/commit/facc00e) + - ไฟฎๅคๅˆ†ๆž้กตๅ’Œๅทฅไฝœๅฐ็š„ๅธƒๅฑ€้—ฎ้ข˜  -  by @honghuangdc [(e93b9)](https://github.com/honghuangdc/soybean-admin/commit/e93b94c) + - ไฟฎๅค้กน็›ฎ้…็ฝฎๆ‹ท่ดๅŠŸ่ƒฝ  -  by @soybeanjs [(a7a26)](https://github.com/honghuangdc/soybean-admin/commit/a7a269d) + +###    ๐Ÿ’… Refactors + +- **projects**: + - ็ฒพ็ฎ€็‰ˆ+ๅŠจๆ€่ทฏ็”ฑๆƒ้™ๅˆๆญฅ  -  by @soybeanjs [(de205)](https://github.com/honghuangdc/soybean-admin/commit/de2057f) + - ๅ•็‹ฌไธ€็บง่ทฏ็”ฑ็›ธๅ…ณ้€ป่พ‘้‡ๆž„  -  by @honghuangdc [(ab9a6)](https://github.com/honghuangdc/soybean-admin/commit/ab9a6a2) + - ๅ•็‹ฌ่ทฏ็”ฑ้€ป่พ‘้‡ๆž„ใ€่ทฏ็”ฑ่ฝฌๆขๅ‡ฝๆ•ฐไผ˜ๅŒ–  -  by @soybeanjs [(b36a6)](https://github.com/honghuangdc/soybean-admin/commit/b36a62b) + - ๆขๅคpinia้ป˜่ฎคๅ†™ๆณ•  -  by @soybeanjs [(b2a4d)](https://github.com/honghuangdc/soybean-admin/commit/b2a4ddf) + - ่ฏทๆฑ‚ๆž„้€ ๅ‡ฝๆ•ฐ้€‚้…ไธๅŒๅŽ็ซฏๆŽฅๅฃ็š„ๆ•ฐๆฎ็ป“ๆž„  -  by @soybeanjs [(4f9d5)](https://github.com/honghuangdc/soybean-admin/commit/4f9d544) + - ็ป†่Š‚ๅฎŒๅ–„  -  by @soybeanjs [(651e5)](https://github.com/honghuangdc/soybean-admin/commit/651e58d) + - ้‡ๆž„่ทฏ็”ฑ้กต้ข็ป„ไปถ็š„ๅฏผๅ…ฅ  -  by @honghuangdc [(e6503)](https://github.com/honghuangdc/soybean-admin/commit/e65034d) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README.md  -  by @soybeanjs [(5eddb)](https://github.com/honghuangdc/soybean-admin/commit/5eddb49) + - update README.md  -  by @soybeanjs [(02c51)](https://github.com/honghuangdc/soybean-admin/commit/02c51e6) + - update README.md  -  by @honghuangdc [(47f28)](https://github.com/honghuangdc/soybean-admin/commit/47f2871) + - update README.md  -  by @honghuangdc [(7ed5d)](https://github.com/honghuangdc/soybean-admin/commit/7ed5d0d) + - update README.md  -  by @honghuangdc [(3befb)](https://github.com/honghuangdc/soybean-admin/commit/3befb22) + +###    ๐Ÿ“ฆ Build + +- **projects**: + - ไฟฎๆ”นvscode้…็ฝฎ  -  by @honghuangdc [(0c577)](https://github.com/honghuangdc/soybean-admin/commit/0c5770d) + - ๆทปๅŠ vercelๆ‰“ๅŒ…็š„็Žฏๅขƒ  -  by @honghuangdc [(371fa)](https://github.com/honghuangdc/soybean-admin/commit/371fad4) + - add license  -  by @soybeanjs [(b1672)](https://github.com/honghuangdc/soybean-admin/commit/b16721b) + +###    ๐Ÿก Chore + +- **release**: + - 0.1.1 ็ฒพ็ฎ€็‰ˆๅ‘ๅธƒ  -  by @soybeanjs [(db3c2)](https://github.com/honghuangdc/soybean-admin/commit/db3c25e) + - 0.1.2  -  by @soybeanjs [(db75c)](https://github.com/honghuangdc/soybean-admin/commit/db75c91) + - 0.1.3  -  by @soybeanjs [(32a7c)](https://github.com/honghuangdc/soybean-admin/commit/32a7cc4) + - 0.9.1  -  by @soybeanjs [(be374)](https://github.com/honghuangdc/soybean-admin/commit/be37408) + - 0.9.2  -  by @honghuangdc [(11407)](https://github.com/honghuangdc/soybean-admin/commit/1140722) + +###    ๐ŸŽจ Styles + +- **projects**: ่ทฏ็”ฑ็›ธๅ…ณๆ–‡ไปถๅคน็ฎ€ๅŒ–  -  by @honghuangdc [(e5793)](https://github.com/honghuangdc/soybean-admin/commit/e5793e1) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)   + +## [v0.9.2](https://github.com/honghuangdc/soybean-admin/compare/v0.9.1...v0.9.2) (2022-02-11) + +###    ๐Ÿš€ Features + +- **projects**: ่ฟ็งปๅ…จๅฑ€ๆœ็ดข่œๅ•ๅŠŸ่ƒฝ  -  by @yanbowe [(554d7)](https://github.com/honghuangdc/soybean-admin/commit/554d7fd) + +###    ๐Ÿž Bug Fixes + +- **components**: + - ไฟฎๅคTabๅœจ็งปๅŠจ็ซฏ่ฎพๅค‡ๆ— ๆณ•็‚นๅ‡ป็š„้—ฎ้ข˜  -  by @honghuangdc [(2c966)](https://github.com/honghuangdc/soybean-admin/commit/2c9660f) +- **projects**: + - vite้…็ฝฎไฟฎๅค  -  by @soybeanjs [(facc0)](https://github.com/honghuangdc/soybean-admin/commit/facc00e) + - ไฟฎๅคๅˆ†ๆž้กตๅ’Œๅทฅไฝœๅฐ็š„ๅธƒๅฑ€้—ฎ้ข˜  -  by @honghuangdc [(e93b9)](https://github.com/honghuangdc/soybean-admin/commit/e93b94c) + - ไฟฎๅค้กน็›ฎ้…็ฝฎๆ‹ท่ดๅŠŸ่ƒฝ  -  by @soybeanjs [(a7a26)](https://github.com/honghuangdc/soybean-admin/commit/a7a269d) + +###    ๐Ÿ’… Refactors + +- **projects**: ้‡ๆž„่ทฏ็”ฑ้กต้ข็ป„ไปถ็š„ๅฏผๅ…ฅ  -  by @honghuangdc [(e6503)](https://github.com/honghuangdc/soybean-admin/commit/e65034d) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README.md  -  by @soybeanjs [(02c51)](https://github.com/honghuangdc/soybean-admin/commit/02c51e6) + - update README.md  -  by @honghuangdc [(47f28)](https://github.com/honghuangdc/soybean-admin/commit/47f2871) + - update README.md  -  by @honghuangdc [(7ed5d)](https://github.com/honghuangdc/soybean-admin/commit/7ed5d0d) + - update README.md  -  by @honghuangdc [(3befb)](https://github.com/honghuangdc/soybean-admin/commit/3befb22) + +###    ๐Ÿ“ฆ Build + +- **projects**: add license  -  by @soybeanjs [(b1672)](https://github.com/honghuangdc/soybean-admin/commit/b16721b) + +###    ๐Ÿก Chore + +- **release**: 0.9.2  -  by @honghuangdc [(11407)](https://github.com/honghuangdc/soybean-admin/commit/1140722) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)   + +## [v0.9.1](https://github.com/honghuangdc/soybean-admin/compare/v0.1.3...v0.9.1) (2022-01-24) + +###    ๐Ÿš€ Features + +- **projects**: ๆ–ฐ็‰ˆ้‡ๆž„ๅฎŒๆˆ  -  by @soybeanjs [(68b42)](https://github.com/honghuangdc/soybean-admin/commit/68b4230) + +###    ๐Ÿก Chore + +- **release**: 0.9.1  -  by @soybeanjs [(be374)](https://github.com/honghuangdc/soybean-admin/commit/be37408) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v0.1.3](https://github.com/honghuangdc/soybean-admin/compare/v0.1.2...v0.1.3) (2022-01-24) + +###    ๐Ÿž Bug Fixes + +- **projects**: + - ไฟฎๅคๆœช็™ปๅฝ•ๆ—ถไผš่ฐƒ็”จ่Žทๅ–็”จๆˆท่ทฏ็”ฑ็š„ๆŽฅๅฃ  -  by @soybeanjs [(21bab)](https://github.com/honghuangdc/soybean-admin/commit/21bab1f) + - ไฟฎๅค่ทฏ็”ฑๅฎˆๅซ็š„ๅŠจๆ€่ทฏ็”ฑ้€ป่พ‘  -  by @soybeanjs [(b61b0)](https://github.com/honghuangdc/soybean-admin/commit/b61b0ce) + +###    ๐Ÿ’… Refactors + +- **projects**: + - ่ฏทๆฑ‚ๆž„้€ ๅ‡ฝๆ•ฐ้€‚้…ไธๅŒๅŽ็ซฏๆŽฅๅฃ็š„ๆ•ฐๆฎ็ป“ๆž„  -  by @soybeanjs [(4f9d5)](https://github.com/honghuangdc/soybean-admin/commit/4f9d544) + - ็ป†่Š‚ๅฎŒๅ–„  -  by @soybeanjs [(651e5)](https://github.com/honghuangdc/soybean-admin/commit/651e58d) + +###    ๐Ÿก Chore + +- **release**: 0.1.3  -  by @soybeanjs [(32a7c)](https://github.com/honghuangdc/soybean-admin/commit/32a7cc4) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v0.1.2](https://github.com/honghuangdc/soybean-admin/compare/v0.1.1...v0.1.2) (2022-01-22) + +###    ๐Ÿš€ Features + +- **projects**: + - ๆทปๅŠ ้กต้ข็ผ“ๅญ˜ใ€่ฎฐๅฝ•ๅœจtabไธญ็š„็ผ“ๅญ˜้กต้ข็š„ๆปšๅŠจๆกไฝ็ฝฎ  -  by @soybeanjs [(1d63a)](https://github.com/honghuangdc/soybean-admin/commit/1d63a83) + - ๆทปๅŠ ็ผ“ๅญ˜ไธป้ข˜่‰ฒ  -  by @soybeanjs [(37092)](https://github.com/honghuangdc/soybean-admin/commit/3709297) + +###    ๐Ÿก Chore + +- **release**: 0.1.2  -  by @soybeanjs [(db75c)](https://github.com/honghuangdc/soybean-admin/commit/db75c91) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v0.1.1](https://github.com/honghuangdc/soybean-admin/compare/v0.0.5...v0.1.1) (2022-01-20) + +###    ๐Ÿš€ Features + +- **projects**: + - ๆทปๅŠ ่ทฏ็”ฑ่ทณ่ฝฌๆต่งˆๅ™จๆ–ฐๆ ‡็ญพ  -  by @honghuangdc [(987ce)](https://github.com/honghuangdc/soybean-admin/commit/987cef3) + - ๆทปๅŠ ๅธธ็”จ็ป„ไปถใ€composablesๅ‡ฝๆ•ฐ  -  by @soybeanjs [(230a5)](https://github.com/honghuangdc/soybean-admin/commit/230a50a) + - ๆทปๅŠ ่กจๆ ผ้กต้ข็คบไพ‹  -  by @soybeanjs [(51c74)](https://github.com/honghuangdc/soybean-admin/commit/51c744c) + - ๅขžๅŠ Icon้€‰ๆ‹ฉๅ™จ็ป„ไปถ  -  by @yanbowe [(9472b)](https://github.com/honghuangdc/soybean-admin/commit/9472b51) + - ๅ›พๆ ‡้€‰ๆ‹ฉๅ™จๅขžๅŠ ๆ‰ฉๅฑ•ๆ ‘ๅฝข  -  by @yanbowe [(04101)](https://github.com/honghuangdc/soybean-admin/commit/041012b) + - ๅขžๅŠ ้กน็›ฎๆ–‡ๆกฃๅค–้“พ  -  by @yanbowe [(1901a)](https://github.com/honghuangdc/soybean-admin/commit/1901a0b) + - ๅผ•ๅ…ฅmockjs  -  by @soybeanjs [(9bc68)](https://github.com/honghuangdc/soybean-admin/commit/9bc682d) + - ๅขžๅŠ ๅ…จๅฑ€ๆœ็ดข่œๅ•ๅŠŸ่ƒฝ  -  by @yanbowe [(b9ce6)](https://github.com/honghuangdc/soybean-admin/commit/b9ce691) + - ่œๅ•ๆœ็ดขๅขžๅŠ ๅคงๅฐๅ†™่ฝฌๆข  -  by @yanbowe [(29078)](https://github.com/honghuangdc/soybean-admin/commit/2907868) + - ๆทปๅŠ cryptojs๏ผŒๅฏนๆœฌๅœฐ็ผ“ๅญ˜ๆ•ฐๆฎ่ฟ›่กŒๅŠ ๅฏ†  -  by @soybeanjs [(7a064)](https://github.com/honghuangdc/soybean-admin/commit/7a0648d) + - ่ทฏ็”ฑ้กต้ข่ทณ่ฝฌๆƒ้™ๅฎŒๆˆ  -  by @soybeanjs [(0d2a5)](https://github.com/honghuangdc/soybean-admin/commit/0d2a562) + - ้›†ๆˆnaiveUIไธป้ข˜้…็ฝฎ๏ผŒๅฐ†css varsๆทปๅŠ ่‡ณhtml  -  by @soybeanjs [(2c196)](https://github.com/honghuangdc/soybean-admin/commit/2c19684) + - ๅˆๅง‹ๅŒ–ๅŠ ่ฝฝๆ•ˆๆžœ๏ผšๅบ”็”จไธป้ข˜้ขœ่‰ฒ  -  by @honghuangdc [(035fa)](https://github.com/honghuangdc/soybean-admin/commit/035fa11) + - ็™ปๅฝ•้กต้ขๅผ€ๅง‹่ฟ็งป  -  by @honghuangdc [(f5a36)](https://github.com/honghuangdc/soybean-admin/commit/f5a36a0) + - ่ฟ็งป็™ปๅฝ•ๅฎŒๆˆ  -  by @soybeanjs [(b93b8)](https://github.com/honghuangdc/soybean-admin/commit/b93b80c) + - ๆทปๅŠ NaiveProvider็ป„ไปถ  -  by @honghuangdc [(c804b)](https://github.com/honghuangdc/soybean-admin/commit/c804b21) + - ๅคš็บง่ทฏ็”ฑ็š„ๆ‰€ๆœ‰ๅญ่ทฏ็”ฑ่ฝฌๆขๆˆไบŒ็บง่ทฏ็”ฑ  -  by @honghuangdc [(85b55)](https://github.com/honghuangdc/soybean-admin/commit/85b55bb) + - ๆ–ฐๅขžBasicLayoutๅธƒๅฑ€  -  by @soybeanjs [(00646)](https://github.com/honghuangdc/soybean-admin/commit/006467a) + - ๅˆ›ๅปบ่‡ชๅฎšไน‰ๅธƒๅฑ€็ป„ไปถSoybeanLayout  -  by @honghuangdc [(0653f)](https://github.com/honghuangdc/soybean-admin/commit/0653fb1) + - ๆทปๅŠ ๆŠฝๅฑ‰  -  by @honghuangdc [(10e4d)](https://github.com/honghuangdc/soybean-admin/commit/10e4d81) + - theme storeๅฎŒๆˆ  -  by @soybeanjs [(bf020)](https://github.com/honghuangdc/soybean-admin/commit/bf020a8) + - ไธป้ข˜้…็ฝฎๆŠฝๅฑ‰๏ผš่ฟ็งปๆš—้ป‘ๆจกๅผใ€ๅธƒๅฑ€ๆจกๅผใ€ๆทปๅŠ ้ขœ่‰ฒ้€‰ๆ‹ฉ้ขๆฟ  -  by @soybeanjs [(912bf)](https://github.com/honghuangdc/soybean-admin/commit/912bfdf) + - ไธป้ข˜้…็ฝฎๆŠฝๅฑ‰: ่ฟ็งปๅ…ถไป–ๅŠŸ่ƒฝ  -  by @soybeanjs [(6d132)](https://github.com/honghuangdc/soybean-admin/commit/6d132c5) + - ๆทปๅŠ ๅคด้ƒจๆŠ˜ๅ ๆŒ‰้’ฎ  -  by @honghuangdc [(a090d)](https://github.com/honghuangdc/soybean-admin/commit/a090d39) + - ๆทปๅŠ ไพง่พน่œๅ•  -  by @soybeanjs [(e25af)](https://github.com/honghuangdc/soybean-admin/commit/e25afe2) + - ้ขๅŒ…ๅฑ‘  -  by @honghuangdc [(09c76)](https://github.com/honghuangdc/soybean-admin/commit/09c7658) + - ่ฏทๆฑ‚ๆ‹ฆๆˆชๅ™จๆทปๅŠ ๅˆทๆ–ฐtoken  -  by @honghuangdc [(839b8)](https://github.com/honghuangdc/soybean-admin/commit/839b82b) + - ็ป†่Š‚ๅฎŒๅ–„  -  by @soybeanjs [(cc290)](https://github.com/honghuangdc/soybean-admin/commit/cc290ac) + - ่ฟ็งปๅคš้กต็ญพ  -  by @soybeanjs [(28efb)](https://github.com/honghuangdc/soybean-admin/commit/28efbdb) + - ็ป†่Š‚ๅฎŒๅ–„ใ€่ฟ็งป้กต้ข  -  by @soybeanjs [(ce531)](https://github.com/honghuangdc/soybean-admin/commit/ce531ce) + +###    ๐Ÿž Bug Fixes + +- **deps**: + - ้™ไฝŽvite็‰ˆๆœฌ  -  by @honghuangdc [(c9c5c)](https://github.com/honghuangdc/soybean-admin/commit/c9c5ca9) +- **projects**: + - ไฟฎๅค็ฝ‘็ปœ่ฏทๆฑ‚้”™่ฏฏ็ฉบไฟกๆฏ็š„ๆ็คบ  -  by @honghuangdc [(ff921)](https://github.com/honghuangdc/soybean-admin/commit/ff9216b) + - ่ฏทๆฑ‚็›ธๅ…ณ็ป†่Š‚ไฟฎๅค  -  by @honghuangdc [(2ad1a)](https://github.com/honghuangdc/soybean-admin/commit/2ad1ad3) + - ไฟฎๅคredirect-not-foundๅญ่ทฏ็”ฑ  -  by @honghuangdc [(5bfb8)](https://github.com/honghuangdc/soybean-admin/commit/5bfb819) + - ๅŽป้™คLayout็ป„ไปถๅ†—ไฝ™ไปฃ็   -  by @honghuangdc [(0e783)](https://github.com/honghuangdc/soybean-admin/commit/0e783bc) + - ไฟฎๅค้ขๅŒ…ๅฑ‘ๆ•ฐๆฎ  -  by @honghuangdc [(28b5d)](https://github.com/honghuangdc/soybean-admin/commit/28b5d22) + - ไฟฎๅคvertical-mixๅธƒๅฑ€ใ€้‡ๆž„ๅˆๅง‹ๅŒ–็š„loading  -  by @soybeanjs [(579e0)](https://github.com/honghuangdc/soybean-admin/commit/579e074) + +###    ๐Ÿ’… Refactors + +- **projects**: + - ็™ปๅฝ•ๆจกๅ—็”ฑqueryๅ˜ๆ›ดไธบๅŠจๆ€่ทฏ็”ฑparams  -  by @honghuangdc [(225c4)](https://github.com/honghuangdc/soybean-admin/commit/225c4fe) + - ็ฒพ็ฎ€็‰ˆ+ๅŠจๆ€่ทฏ็”ฑๆƒ้™ๅˆๆญฅ  -  by @soybeanjs [(de205)](https://github.com/honghuangdc/soybean-admin/commit/de2057f) + - ๅ•็‹ฌไธ€็บง่ทฏ็”ฑ็›ธๅ…ณ้€ป่พ‘้‡ๆž„  -  by @honghuangdc [(ab9a6)](https://github.com/honghuangdc/soybean-admin/commit/ab9a6a2) + - ๅ•็‹ฌ่ทฏ็”ฑ้€ป่พ‘้‡ๆž„ใ€่ทฏ็”ฑ่ฝฌๆขๅ‡ฝๆ•ฐไผ˜ๅŒ–  -  by @soybeanjs [(b36a6)](https://github.com/honghuangdc/soybean-admin/commit/b36a62b) + - ๆขๅคpinia้ป˜่ฎคๅ†™ๆณ•  -  by @soybeanjs [(b2a4d)](https://github.com/honghuangdc/soybean-admin/commit/b2a4ddf) +- **styles**: + - ๆ ทๅผ่ฐƒๆ•ด  -  by @honghuangdc [(f2910)](https://github.com/honghuangdc/soybean-admin/commit/f29106e) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README.md  -  by @honghuangdc [(659e4)](https://github.com/honghuangdc/soybean-admin/commit/659e460) + - update README.md  -  by @honghuangdc [(90ddf)](https://github.com/honghuangdc/soybean-admin/commit/90ddf98) + - update README.md  -  by @soybeanjs [(5eddb)](https://github.com/honghuangdc/soybean-admin/commit/5eddb49) + +###    ๐Ÿ“ฆ Build + +- **deps**: + - ๅ‡็บงไพ่ต–  -  by @soybeanjs [(ae7ec)](https://github.com/honghuangdc/soybean-admin/commit/ae7ec99) + - ๅ‡็บงไพ่ต–  -  by @soybeanjs [(e755c)](https://github.com/honghuangdc/soybean-admin/commit/e755caa) + - ๅ‡็บงไพ่ต–  -  by @honghuangdc [(f3c86)](https://github.com/honghuangdc/soybean-admin/commit/f3c86ef) + - ๅ‡็บงไพ่ต–  -  by @honghuangdc [(e776d)](https://github.com/honghuangdc/soybean-admin/commit/e776df4) + - ๅ‡็บงไพ่ต–  -  by @soybeanjs [(777cf)](https://github.com/honghuangdc/soybean-admin/commit/777cf8e) +- **projects**: + - ็Žฏๅขƒๅ˜้‡่Žทๅ–ๆ–นๅผๅ˜ๆ›ด  -  by @honghuangdc [(21c2f)](https://github.com/honghuangdc/soybean-admin/commit/21c2f5a) + - ไฟฎๆ”นvscode้…็ฝฎ  -  by @honghuangdc [(0c577)](https://github.com/honghuangdc/soybean-admin/commit/0c5770d) + - ๆทปๅŠ vercelๆ‰“ๅŒ…็š„็Žฏๅขƒ  -  by @honghuangdc [(371fa)](https://github.com/honghuangdc/soybean-admin/commit/371fad4) + +###    ๐Ÿก Chore + +- **release**: 0.1.1 ็ฒพ็ฎ€็‰ˆๅ‘ๅธƒ  -  by @soybeanjs [(db3c2)](https://github.com/honghuangdc/soybean-admin/commit/db3c25e) + +###    ๐ŸŽจ Styles + +- **projects**: ่ทฏ็”ฑ็›ธๅ…ณๆ–‡ไปถๅคน็ฎ€ๅŒ–  -  by @honghuangdc [(e5793)](https://github.com/honghuangdc/soybean-admin/commit/e5793e1) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v0.0.5](https://github.com/honghuangdc/soybean-admin/compare/v0.0.4...v0.0.5) (2021-11-28) + +###    ๐Ÿš€ Features + +- **projects**: ๆ–ฐๅขž็ป„ไปถ้กต้ข๏ผšๆŒ‰้’ฎใ€ๅก็‰‡็คบไพ‹  -  by @soybeanjs [(bdc39)](https://github.com/honghuangdc/soybean-admin/commit/bdc39af) + +###    ๐Ÿž Bug Fixes + +- **components**: ไฟฎๅคHorizontalLayoutๅธƒๅฑ€  -  by @soybeanjs [(9fb64)](https://github.com/honghuangdc/soybean-admin/commit/9fb641f) + +###    ๐Ÿ’… Refactors + +- **projects**: + - ้‡ๆž„่ทฏ็”ฑ็ฑปๅž‹ๅ’Œ่ทฏ็”ฑๅ…ƒๆ•ฐๆฎ็ฑปๅž‹๏ผŒ้‡ๆž„ๅคš็บง่œๅ•่ทฏ็”ฑๅ†™ๆณ•  -  by @soybeanjs [(d6838)](https://github.com/honghuangdc/soybean-admin/commit/d683894) + - ไผ˜ๅŒ–่ทฏ็”ฑๅฏผๅ…ฅ้กต้ขๅ†™ๆณ•๏ผŒ้กต้ข่ทฏ็”ฑ่ฐƒๆ•ด  -  by @soybeanjs [(0b10b)](https://github.com/honghuangdc/soybean-admin/commit/0b10b50) + +###    ๐Ÿ“ฆ Build + +- **deps**: ๅ‡็บงไพ่ต–  -  by @soybeanjs [(a6bdc)](https://github.com/honghuangdc/soybean-admin/commit/a6bdc38) + +###    ๐Ÿก Chore + +- **release**: 0.0.5  -  by @soybeanjs [(e53e7)](https://github.com/honghuangdc/soybean-admin/commit/e53e793) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v0.0.4](https://github.com/honghuangdc/soybean-admin/compare/v0.0.3...v0.0.4) (2021-11-25) + +###    ๐Ÿš€ Features + +- **components**: ๆทปๅŠ ๅคš้กต็ญพTab็‚นๅ‡ปๅŽ่‡ชๅŠจๅพ€ไธญ้—ดๆปšๅŠจ  -  by @soybeanjs [(8ce62)](https://github.com/honghuangdc/soybean-admin/commit/8ce627a) +- **projects**: ๆ–ฐๅขž็ฝ‘ๅ€ๅฏผ่ˆช้กต้ข  -  by @honghuangdc [(32aa5)](https://github.com/honghuangdc/soybean-admin/commit/32aa5ee) +- **storage**: localๅญ˜ๅ‚จๅขžๅŠ ๆœ‰ๆ•ˆๆœŸ  -  by @yanbowe [(e6c9b)](https://github.com/honghuangdc/soybean-admin/commit/e6c9b35) + +###    ๐Ÿž Bug Fixes + +- **components**: + - ไฟฎๅคๅคš้กต็ญพTab่‡ชๅŠจๆปšๅŠจ้—ฎ้ข˜  -  by @soybeanjs [(20aa3)](https://github.com/honghuangdc/soybean-admin/commit/20aa39f) + - ไฟฎๅคๅคš้กต็ญพๆŒ‰้’ฎ้ฃŽๆ ผ็š„tabๆปšๅŠจ้—ฎ้ข˜  -  by @soybeanjs [(c429c)](https://github.com/honghuangdc/soybean-admin/commit/c429cd0) +- **projects**: + - ไฟฎๅคๆ‰“ๅŒ…ๆž„ๅปบๆ—ถๅ›พๆ ‡้”™่ฏฏ  -  by @soybeanjs [(93f9a)](https://github.com/honghuangdc/soybean-admin/commit/93f9aa9) + - ๆทปๅŠ ่ฅฟ็“œ่ง†้ข‘ๅฎžไพ‹ๅœจonUnMounted็š„้”€ๆฏ๏ผŒๅคš้กต็ญพๅฑ…ไธญ่ท็ฆป็ฒพ็กฎ  -  by @soybeanjs [(73896)](https://github.com/honghuangdc/soybean-admin/commit/738964a) +- **types**: + - ๆทปๅŠ dotEnv็ฑปๅž‹็š„้ž็ฉบๅˆคๆ–ญ  -  by @soybeanjs [(cff11)](https://github.com/honghuangdc/soybean-admin/commit/cff11d9) + +###    ๐Ÿ’… Refactors + +- **components**: + - blankLayoutๅผ•ๅ…ฅGlobalContent  -  by @soybeanjs [(1ffb7)](https://github.com/honghuangdc/soybean-admin/commit/1ffb75a) +- **projects**: + - axiosๅค„็†็š„่ฏทๆฑ‚็ป“ๆžœๅŽป้™ค็ฝ‘่ทฏ็Šถๆ€  -  by @honghuangdc [(05696)](https://github.com/honghuangdc/soybean-admin/commit/0569666) + - ๆ–‡ไปถๅคนไฝ็ฝฎ่ง„่Œƒ  -  by @honghuangdc [(f5a5f)](https://github.com/honghuangdc/soybean-admin/commit/f5a5f44) + - ็ป†่Š‚ๅฎŒๅ–„  -  by @honghuangdc [(62611)](https://github.com/honghuangdc/soybean-admin/commit/6261156) + +###    ๐Ÿ“– Documentation + +- **projects**: + - update README.md  -  by @soybeanjs [(54577)](https://github.com/honghuangdc/soybean-admin/commit/54577f1) + - update README.md  -  by @honghuangdc [(1b346)](https://github.com/honghuangdc/soybean-admin/commit/1b3463d) + - update README.md  -  by @honghuangdc [(98a7d)](https://github.com/honghuangdc/soybean-admin/commit/98a7d25) + +###    ๐Ÿก Chore + +- **release**: 0.0.4  -  by @soybeanjs [(8b27f)](https://github.com/honghuangdc/soybean-admin/commit/8b27fc8) + +###    โค๏ธ Contributors + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![yanbowe](https://github.com/yanbowe.png?size=48)](https://github.com/yanbowe)   + +## [v0.0.3](https://github.com/honghuangdc/soybean-admin/compare/v0.0.2...v0.0.3) (2021-11-23) + +###    ๐Ÿ’… Refactors + +- **projects**: + - ่ฏทๆฑ‚ๅ‡ฝๆ•ฐ้‡ๆž„ๅˆๆญฅ  -  by @soybeanjs [(9f643)](https://github.com/honghuangdc/soybean-admin/commit/9f64321) + - axiosๅฐ่ฃ…๏ผšๆ–‡ไปถๅคน่ง„่Œƒ๏ผŒ้”™่ฏฏๅค„็†ๅฎŒๅ–„  -  by @honghuangdc [(451c7)](https://github.com/honghuangdc/soybean-admin/commit/451c754) + - axiosๅฐ่ฃ…ๅฎŒๆˆ  -  by @soybeanjs [(03b39)](https://github.com/honghuangdc/soybean-admin/commit/03b398a) + +###    ๐Ÿ“ฆ Build + +- **deps**: + - ๅ‡็บงไพ่ต–  -  by @soybeanjs [(4e04a)](https://github.com/honghuangdc/soybean-admin/commit/4e04a8f) + - ๅ‡็บงไพ่ต–  -  by @soybeanjs [(c8122)](https://github.com/honghuangdc/soybean-admin/commit/c81221e) + +###    ๐Ÿก Chore + +- **release**: 0.0.3  -  by @honghuangdc [(e1dac)](https://github.com/honghuangdc/soybean-admin/commit/e1dacdb) + +###    โค๏ธ Contributors + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + + + diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md new file mode 100644 index 0000000..79587cd --- /dev/null +++ b/CHANGELOG.zh_CN.md @@ -0,0 +1,634 @@ +# ๆ›ดๆ–ฐๆ—ฅๅฟ— + +## [v1.3.5](https://github.com/soybeanjs/soybean-admin/compare/v1.3.4...v1.3.5) (2024-09-07) + +###    ๐Ÿš€ ๆ–ฐๅŠŸ่ƒฝ + +- **packages**: + - @sa/axios: ๆˆๅŠŸๆ—ถๅฐ†ๅ“ๅบ”ๆทปๅŠ ๅˆฐ flatRequest  -  by @soybeanjs [(c4e16)](https://github.com/soybeanjs/soybean-admin/commit/c4e1610) +- **projects**: + - README.zh_CN.md ๆทปๅŠ ๅˆไฝœๆŽจๅนฟ  -  by @PZ-18664918826 in https://github.com/soybeanjs/soybean-admin/issues/601 [(2fa40)](https://github.com/soybeanjs/soybean-admin/commit/2fa400b) + - ๆ นๆฎ Apache ่ง„่ŒƒๆทปๅŠ ๆ›ดๅคšๆไบค็ฑปๅž‹  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/610 [(878d9)](https://github.com/soybeanjs/soybean-admin/commit/878d9c3) + - ้…็ฝฎๆ˜ฏๅฆๆ”ฏๆŒ่‡ชๅŠจๆ›ดๆ–ฐใ€‚ๅ…ณ้—ญ#612  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/617 ๅ’Œ https://github.com/soybeanjs/soybean-admin/issues/612 [(4c9f4)](https://github.com/soybeanjs/soybean-admin/commit/4c9f4e0) + - ๆทปๅŠ ๅบ”็”จ้”™่ฏฏๅค„็†็จ‹ๅบใ€‚ๅ…ณ้—ญ #587  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/587 [(be855)](https://github.com/soybeanjs/soybean-admin/commit/be8556c) + +###    ๐Ÿž Bug ไฟฎๅค + +- **deps**: + - ๅฐ† json5 ไปŽ devDependencies ็งปๅˆฐ dependencies ไปฅๆ”ฏๆŒ็”Ÿไบง็Žฏๅขƒไฝฟ็”จ  -  by @mufeng889 in https://github.com/soybeanjs/soybean-admin/issues/618 [(7cb43)](https://github.com/soybeanjs/soybean-admin/commit/7cb43fc) +- **projects**: + - ้ฟๅ…ๆฃ€็ดข็ผ“ๅญ˜็š„ HTML  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/605 [(ef6cf)](https://github.com/soybeanjs/soybean-admin/commit/ef6cf93) + - ไฟฎๅค็™ปๅฝ•้‡ๅฎšๅ‘  -  by @soybeanjs [(3830e)](https://github.com/soybeanjs/soybean-admin/commit/3830ec7) + - ไฟฎๅคไพง่พนๆ ๆŠ˜ๅ ๆ—ถ็š„ vertical-mix-menuใ€‚ไฟฎๅค #608  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/608 [(c3f1f)](https://github.com/soybeanjs/soybean-admin/commit/c3f1f69) + - ไฟฎๅค activeMenu ไธบ็ˆถ่œๅ•ๆ—ถ็š„้ขๅŒ…ๅฑ‘ใ€‚ไฟฎๅค #589  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/589 [(79b2a)](https://github.com/soybeanjs/soybean-admin/commit/79b2a28) + - ไฟฎๅค้‡ๅˆฐๅคš่ฏทๆฑ‚ๆ—ถ็š„ๅˆทๆ–ฐไปค็‰Œใ€‚ไฟฎๅค #581  -  by @soybeanjs in https://github.com/soybeanjs/soybean-admin/issues/581 [(27b52)](https://github.com/soybeanjs/soybean-admin/commit/27b5222) +- **types**: + - ไฟฎๅค TableApiFn ็š„็ฑปๅž‹  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/599 [(26c93)](https://github.com/soybeanjs/soybean-admin/commit/26c93df) + +###    ๐Ÿ›  ไผ˜ๅŒ– + +- **projects**: ไผ˜ๅŒ–่œๅ• selectedKey  -  by @soybeanjs [(531bf)](https://github.com/soybeanjs/soybean-admin/commit/531bfaf) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **projects**: + - ๆ›ดๆ–ฐ README  -  by @mufeng889 in https://github.com/soybeanjs/soybean-admin/issues/594 [(a8f92)](https://github.com/soybeanjs/soybean-admin/commit/a8f923e) + - ๆ›ดๆ–ฐ README  -  by @soybeanjs [(e9a2e)](https://github.com/soybeanjs/soybean-admin/commit/e9a2ee4) + - ๆ›ดๆ–ฐ README  -  by @soybeanjs [(73e91)](https://github.com/soybeanjs/soybean-admin/commit/73e917a) + - ๆ›ดๆ–ฐๆ–‡ๆกฃไธญ้‡่ฆไฟกๆฏ็š„ไฝ็ฝฎ  -  by **Azir** [(9c012)](https://github.com/soybeanjs/soybean-admin/commit/9c012c7) + +###    ๐Ÿก ๆ‚้กน + +- **deps**: + - ๆ›ดๆ–ฐไพ่ต–  -  by @soybeanjs [(a1c14)](https://github.com/soybeanjs/soybean-admin/commit/a1c14a1) + - ๆ›ดๆ–ฐไพ่ต–  -  by @soybeanjs [(7fa55)](https://github.com/soybeanjs/soybean-admin/commit/7fa5590) + - ๆ›ดๆ–ฐไพ่ต–  -  by @soybeanjs [(a44ea)](https://github.com/soybeanjs/soybean-admin/commit/a44ea62) +- **projects**: + - ไฝฟ็”จ json5 ่งฃๆž็Žฏๅขƒๅ˜้‡ `VITE_OTHER_SERVICE_BASE_URL` ๅนถไฟฎๅคไปฃ็†ๅฏ็”จ  -  by @soybeanjs [(b16a9)](https://github.com/soybeanjs/soybean-admin/commit/b16a963) + +###    ๐ŸŽจ ๆ ทๅผ + +- **projects**: ๅฐ†่„šๆœฌ czh ้‡ๅ‘ฝๅไธบ commit:zh  -  by @Azir-11 in https://github.com/soybeanjs/soybean-admin/issues/597 [(5094f)](https://github.com/soybeanjs/soybean-admin/commit/5094f0e) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![mufeng889](https://github.com/mufeng889.png?size=48)](https://github.com/mufeng889)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)  [![PZ-18664918826](https://github.com/PZ-18664918826.png?size=48)](https://github.com/PZ-18664918826)   +[Azir](mailto:2075125282@qq.com),  + +## [v1.3.4](https://github.com/honghuangdc/soybean-admin/compare/v1.3.3...v1.3.4) (2024-08-01) + +###    ๐Ÿšจ ้‡ๅคงๅ˜ๆ›ด + +- **projects**: ๅฝ“ vertical-mix ๅธƒๅฑ€ไธบ mixSiderFixed ๆ—ถ๏ผŒไธ้‡็ฝฎๆดปๅŠจ่œๅ•  -  by @honghuangdc [(939c5)](https://github.com/honghuangdc/soybean-admin/commit/939c512) + +###    ๐Ÿ›  ไผ˜ๅŒ– + +- **projects**: ไผ˜ๅŒ–ไปฃ็   -  by @honghuangdc [(cb1d4)](https://github.com/honghuangdc/soybean-admin/commit/cb1d445) + +###    ๐Ÿก ๆ‚้กน + +- **projects**: ๆ›ดๆ–ฐไพ่ต–ๅนถไฟฎๅค vue-router ็ฑปๅž‹  -  by @honghuangdc [(96837)](https://github.com/honghuangdc/soybean-admin/commit/968370b) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.3.3](https://github.com/honghuangdc/soybean-admin/compare/v1.3.2...v1.3.3) (2024-07-30) + +###    ๐Ÿž Bug ไฟฎๅค + +- **projects**: ไฟฎๅคๆฐดๅฐ่ฎพ็ฝฎ  -  by @honghuangdc [(5646a)](https://github.com/honghuangdc/soybean-admin/commit/5646a50) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **projects**: ๆ›ดๆ–ฐ CHANGELOG  -  by @honghuangdc [(ebc83)](https://github.com/honghuangdc/soybean-admin/commit/ebc838c) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.3.2](https://github.com/honghuangdc/soybean-admin/compare/v1.3.1...v1.3.2) (2024-07-30) + +###    ๐Ÿš€ ๆ–ฐๅŠŸ่ƒฝ + +- **้กน็›ฎ**: + - ๆทปๅŠ ้ขœ่‰ฒๆธๅ˜ๆจกๅผใ€‚ๅ…ณ้—ญ #567  -  ็”ฑ @Azir-11 ๅœจ https://github.com/honghuangdc/soybean-admin/issues/569 ๅ’Œ https://github.com/honghuangdc/soybean-admin/issues/567 [(4dde4)](https://github.com/honghuangdc/soybean-admin/commit/4dde4c2) + - ๆทปๅŠ ๅ…จๅฑๆฐดๅฐใ€‚ๅ…ณ้—ญ #571  -  ็”ฑ @paynezhuang ๅœจ https://github.com/honghuangdc/soybean-admin/issues/573 ๅ’Œ https://github.com/honghuangdc/soybean-admin/issues/571 [(ea8aa)](https://github.com/honghuangdc/soybean-admin/commit/ea8aa6c) + +###    ๐Ÿž Bug ไฟฎๅค + +- **้กน็›ฎ**: ไฟฎๅค vertical-mix ่œๅ•้€‰ไธญ้—ฎ้ข˜  -  ็”ฑ @honghuangdc [(59f07)](https://github.com/honghuangdc/soybean-admin/commit/59f07d8) + +###    ๐Ÿ›  ไผ˜ๅŒ– + +- **้กน็›ฎ**: + - ๆทปๅŠ ็ฑปๅž‹ WatermarkProps  -  ็”ฑ @honghuangdc [(f26d0)](https://github.com/honghuangdc/soybean-admin/commit/f26d0a6) + - ็งป้™ค home NAlert ๅฏๅ…ณ้—ญ  -  ็”ฑ @honghuangdc [(98b75)](https://github.com/honghuangdc/soybean-admin/commit/98b75c2) + - ไผ˜ๅŒ–ๅ“ๅบ”ไปฃ็ ๆฏ”่พƒ  -  ็”ฑ @honghuangdc [(cf67d)](https://github.com/honghuangdc/soybean-admin/commit/cf67d55) +- **็ฑปๅž‹**: + - ็งป้™คๆ— ็”จ็ฑปๅž‹ใ€‚  -  ็”ฑ **Azir** [(eed61)](https://github.com/honghuangdc/soybean-admin/commit/eed617f) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: ๆ›ดๆ–ฐๆ›ดๆ–ฐๆ—ฅๅฟ—  -  ็”ฑ @honghuangdc [(d3759)](https://github.com/honghuangdc/soybean-admin/commit/d37591d) + +###    ๐Ÿก ๆ‚้กน + +- **ไพ่ต–**: ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @honghuangdc [(993e9)](https://github.com/honghuangdc/soybean-admin/commit/993e9ca) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![paynezhuang](https://github.com/paynezhuang.png?size=48)](https://github.com/paynezhuang)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)   +[Azir](mailto:2075125282@qq.com),  + +## [v1.3.1](https://github.com/honghuangdc/soybean-admin/compare/v1.3.0...v1.3.1) (2024-07-22) + +###    ๐Ÿž Bug ไฟฎๅค + +- **้กน็›ฎ**: + - ไฟฎๅค้กถ้ƒจ่œๅ•ๆททๅˆๅ’Œๅๅ‘ๆจกๅผไธ‹ไพง่พนๆ ๅฎฝๅบฆๅผ‚ๅธธ็š„้—ฎ้ข˜  -  ็”ฑ @Azir-11 ๅœจ https://github.com/honghuangdc/soybean-admin/issues/562 ไฟฎๅค [(c4695)](https://github.com/honghuangdc/soybean-admin/commit/c469512) + - ไฟฎๅคๆฐดๅนณๆททๅˆ่œๅ•ๅ่ฝฌ้—ฎ้ข˜ใ€‚ไฟฎๅค #563  -  ็”ฑ @honghuangdc ๅœจ https://github.com/honghuangdc/soybean-admin/issues/563 ไฟฎๅค [(4e55b)](https://github.com/honghuangdc/soybean-admin/commit/4e55b0e) + - ไฟฎๅคๅฝ“ๅธƒๅฑ€ๆฅ่‡ช็งปๅŠจ็ซฏๆ—ถๅž‚็›ด่œๅ•ไธๆธฒๆŸ“็š„้—ฎ้ข˜  -  ็”ฑ @honghuangdc ไฟฎๅค [(84027)](https://github.com/honghuangdc/soybean-admin/commit/8402734) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: ๆ›ดๆ–ฐๆ›ดๆ–ฐๆ—ฅๅฟ—  -  ็”ฑ @honghuangdc ๆ›ดๆ–ฐ [(613c8)](https://github.com/honghuangdc/soybean-admin/commit/613c836) + +###    ๐ŸŽจ ๆ ทๅผ + +- **ๅ…ถไป–**: ไฟฎๆ”น็ฐๅบฆๆจกๅผ็š„ไธญๆ–‡ๅ็งฐ  -  ็”ฑ **Azir** ไฟฎๆ”น [(53770)](https://github.com/honghuangdc/soybean-admin/commit/5377002) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)   +[Azir](mailto:2075125282@qq.com),  + + +## [v1.3.0](https://github.com/soybeanjs/soybean-admin/compare/v1.2.8...v1.3.0) (2024-07-22) + +###    ๐Ÿšจ ็ ดๅๆ€งๅ˜ๆ›ด + +- **้กน็›ฎ**: ้‡ๆž„ๅ…จๅฑ€่œๅ• & ๆ”ฏๆŒ `reversed-horizontal-mix-menu`ใ€‚ๅ…ณ้—ญ #365  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/365 ๆๅ‡บ [(087e5)](https://github.com/soybeanjs/soybean-admin/commit/087e532) + +###    ๐Ÿš€ ๅŠŸ่ƒฝ + +- **ๅŒ…**: + - `@sa/scripts`: ๅ‘ฝไปค `gitCommit` ๆ”ฏๆŒไธญๆ–‡  -  ็”ฑ @mmdapl ๅœจ https://github.com/soybeanjs/soybean-admin/issues/548 ๆๅ‡บ [(06971)](https://github.com/soybeanjs/soybean-admin/commit/06971f3) + - @sa/axios: ็”จ AbortController ๆ›ฟๆข CancelTokenSourceใ€‚ๅ…ณ้—ญ #530, ๅ…ณ้—ญ #532  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/530 ๅ’Œ https://github.com/soybeanjs/soybean-admin/issues/532 ๆๅ‡บ [(527fd)](https://github.com/soybeanjs/soybean-admin/commit/527fd79) + - @sa/scripts: ไธบๅ‘ฝไปค `gitCommitVerify` ๆทปๅŠ ๅฟฝ็•ฅๆจกๅผๅˆ—่กจใ€‚ๅ…ณ้—ญ #504  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/504 ๆๅ‡บ [(958d0)](https://github.com/soybeanjs/soybean-admin/commit/958d0ba) +- **้กน็›ฎ**: + - ไฝฟๅˆ†ๆ”ฏ `main` ๆ›ด็ฒพ็ฎ€ & ไฟฎๆ”น่ฏทๆฑ‚้‡่ฏ•ๆฌกๆ•ฐไธบ 0  -  ็”ฑ @Azir-11 ๆๅ‡บ [(793b1)](https://github.com/soybeanjs/soybean-admin/commit/793b16e) + +###    ๐Ÿž ไฟฎๅค + +- **้’ฉๅญ**: ๅฝ“ pagesize ่ฟ”ๅ›ž 0 ๆ—ถ้˜ฒๆญข็จ‹ๅบๅ†ป็ป“  -  ็”ฑ @Azir-11 ๅœจ https://github.com/soybeanjs/soybean-admin/issues/545 ๆๅ‡บ [(f4eeb)](https://github.com/soybeanjs/soybean-admin/commit/f4eeb2e) + +###    ๐Ÿ’… ้‡ๆž„ + +- **้กน็›ฎ**: + - ๅˆๅนถ `theme tokens` ๅ’Œ `theme settings`ใ€‚ๅ…ณ้—ญ #379  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/379 ๆๅ‡บ [(1d1b1)](https://github.com/soybeanjs/soybean-admin/commit/1d1b148) + - ๅฐ† css ๅ˜้‡ๆŒ‚่ฝฝๅˆฐ root  -  ็”ฑ @honghuangdc ๆๅ‡บ [(00f41)](https://github.com/soybeanjs/soybean-admin/commit/00f41dd) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: ๆ›ดๆ–ฐๆ›ดๆ–ฐๆ—ฅๅฟ—  -  ็”ฑ @honghuangdc ๆๅ‡บ [(a0b76)](https://github.com/soybeanjs/soybean-admin/commit/a0b76da) + +###    ๐Ÿก ๆ‚ๅŠก + +- **ไพ่ต–**: ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @honghuangdc ๆๅ‡บ [(f6bd6)](https://github.com/soybeanjs/soybean-admin/commit/f6bd6b8) +- **้กน็›ฎ**: ๆทปๅŠ ่„šๆœฌ `czh`  -  ็”ฑ @honghuangdc ๆๅ‡บ [(02069)](https://github.com/soybeanjs/soybean-admin/commit/0206969) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![mmdapl](https://github.com/mmdapl.png?size=48)](https://github.com/mmdapl)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)   + + +## [v1.2.8](https://github.com/soybeanjs/soybean-admin/compare/v1.2.7...v1.2.8) (2024-07-20) + +###    ๐Ÿž ไฟฎๅค + +- **ๅŒ…**: + - @sa/hooks: ไฟฎๅค useHookTable ็š„ searchParamsใ€‚ไฟฎๅคไบ† #552  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/552 ๆๅ‡บ [(96c10)](https://github.com/soybeanjs/soybean-admin/commit/96c1044) +- **็ฑปๅž‹**: + - ไฟฎๅคไบ†ๅผ•็”จ็ฑปๅž‹้”™่ฏฏ  -  ็”ฑ **dodu2014** ๅœจ https://github.com/soybeanjs/soybean-admin/issues/551 ๆๅ‡บ [(3e2a9)](https://github.com/soybeanjs/soybean-admin/commit/3e2a993) + - ไฟฎๅค useHookTable ็š„ๆ•ฐๆฎ็ฑปๅž‹  -  ็”ฑ @honghuangdc ๆๅ‡บ [(276ea)](https://github.com/soybeanjs/soybean-admin/commit/276ea7f) + +###    ๐Ÿ’… ้‡ๆž„ + +- **้กน็›ฎ**: ็”จ `klona` ๆ›ฟๆข `lodash-es` ็š„ `cloneDeep`  -  ็”ฑ @honghuangdc ๆๅ‡บ [(a9133)](https://github.com/soybeanjs/soybean-admin/commit/a91335d) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: ๆ›ดๆ–ฐๆ›ดๆ–ฐๆ—ฅๅฟ—  -  ็”ฑ @honghuangdc ๆๅ‡บ [(58fc0)](https://github.com/soybeanjs/soybean-admin/commit/58fc096) + +###    ๐Ÿก ๆ‚ๅŠก + +- **ไพ่ต–**: ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @honghuangdc ๆๅ‡บ [(cf019)](https://github.com/soybeanjs/soybean-admin/commit/cf0192a) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[dodu2014](mailto:dodu@live.cn) + + +## [v1.2.7](https://github.com/honghuangdc/soybean-admin/compare/v1.2.6...v1.2.7) (2024-07-12) + +###    ๐Ÿ›  ไผ˜ๅŒ– + +- **้กน็›ฎ**: ๆ”ฏๆŒ่‡ชๅฎšไน‰่œๅ•ๅ›พๆ ‡ๅคงๅฐ  -  ็”ฑ @wynn-w ๅœจ https://github.com/honghuangdc/soybean-admin/issues/534 ๆๅ‡บ [(e035e)](https://github.com/honghuangdc/soybean-admin/commit/e035eab) + +###    ๐Ÿก ๆ‚ๅŠก + +- **ไพ่ต–**: + - ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @honghuangdc [(72ede)](https://github.com/honghuangdc/soybean-admin/commit/72ede8b) + - ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @honghuangdc [(be13c)](https://github.com/honghuangdc/soybean-admin/commit/be13ca2) + - ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @honghuangdc [(752ec)](https://github.com/honghuangdc/soybean-admin/commit/752ec1e) +- **้กน็›ฎ**: + - ไฟฎๅคๅทฒๅผƒ็”จ็š„้…็ฝฎ้…็ฝฎ  -  ็”ฑ @paynezhuang ๅœจ https://github.com/honghuangdc/soybean-admin/issues/524 ๆๅ‡บ [(0d20e)](https://github.com/honghuangdc/soybean-admin/commit/0d20e4c) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)  [![wynn-w](https://github.com/wynn-w.png?size=48)](https://github.com/wynn-w)  [![paynezhuang](https://github.com/paynezhuang.png?size=48)](https://github.com/paynezhuang)   + +## [v1.2.6](https://github.com/honghuangdc/soybean-admin/compare/v1.2.5...v1.2.6) (2024-06-21) + +###    ๐Ÿž ไฟฎๅค + +- **้กน็›ฎ**: + - ่ฏทๆฑ‚ๆจกๆ€ๆ ‡้ข˜ไฝฟ็”จ i18nใ€‚ไฟฎๅค #507  -  ็”ฑ @honghuangdc ๅœจ https://github.com/honghuangdc/soybean-admin/issues/507 ๆๅ‡บ [(f7de3)](https://github.com/honghuangdc/soybean-admin/commit/f7de3fd) + - ไธบ `useTable` ๆทปๅŠ  `getDataByPage`ใ€‚ไฟฎๅค #499  -  ็”ฑ @honghuangdc ๅœจ https://github.com/honghuangdc/soybean-admin/issues/499 ๆๅ‡บ [(425c6)](https://github.com/honghuangdc/soybean-admin/commit/425c69a) + - ไฟฎๅค็™ปๅฝ•้‡ๅฎšๅ‘ๅˆฐ routeHome ๆ—ถ๏ผŒๅŠจๆ€่ทฏ็”ฑ็š„ routeHome ไธŽ้™ๆ€่ทฏ็”ฑไธๅŒ็š„้—ฎ้ข˜ใ€‚ไฟฎๅค #511  -  ็”ฑ @honghuangdc ๅœจ https://github.com/honghuangdc/soybean-admin/issues/511 ๆๅ‡บ [(49f60)](https://github.com/honghuangdc/soybean-admin/commit/49f60b2) + +###    ๐Ÿ›  ไผ˜ๅŒ– + +- **้กน็›ฎ**: ไผ˜ๅŒ– `getRouteQueryOfLoginRoute`  -  ็”ฑ @honghuangdc [(693f7)](https://github.com/honghuangdc/soybean-admin/commit/693f704) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: + - ๆ›ดๆ–ฐๆ›ดๆ–ฐๆ—ฅๅฟ—  -  ็”ฑ @honghuangdc [(5c67d)](https://github.com/honghuangdc/soybean-admin/commit/5c67d06) + - ๆ›ดๆ–ฐ่‡ช่ฟฐๆ–‡ไปถ  -  ็”ฑ @honghuangdc [(1e67a)](https://github.com/honghuangdc/soybean-admin/commit/1e67ae8) + +###    ๐Ÿก ๆ‚ๅŠก + +- **ไพ่ต–**: + - ๆ›ดๆ–ฐไพ่ต–ใ€‚ๅ…ณ้—ญ #510  -  ็”ฑ @honghuangdc ๅœจ https://github.com/honghuangdc/soybean-admin/issues/510 ๆๅ‡บ [(53143)](https://github.com/honghuangdc/soybean-admin/commit/531432d) + - ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @honghuangdc [(c7f6f)](https://github.com/honghuangdc/soybean-admin/commit/c7f6f2a) + +###    ๐Ÿค– CI + +- **้กน็›ฎ**: + - ๆทปๅŠ  github ้—ฎ้ข˜ๆจกๆฟ  -  ็”ฑ @honghuangdc [(b5027)](https://github.com/honghuangdc/soybean-admin/commit/b5027c8) + - ๆ›ดๆ–ฐ github ้—ฎ้ข˜ๆจกๆฟ  -  ็”ฑ @honghuangdc [(ff1d5)](https://github.com/honghuangdc/soybean-admin/commit/ff1d504) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.2.5](https://github.com/soybeanjs/soybean-admin/compare/v1.2.4...v1.2.5) (2024-06-15) + +###    ๐Ÿž ้”™่ฏฏไฟฎๅค + +- **้กน็›ฎ**: ไฟฎๅค็™ปๅ‡บๅŽๆ ‡็ญพ้กตๅผ‚ๅธธ็ผ“ๅญ˜็š„้—ฎ้ข˜ใ€‚ๅทฒไฟฎๅค #495  -  ็”ฑ @Azir-11 ๅœจ https://github.com/soybeanjs/soybean-admin/issues/495 [(3eeac)](https://github.com/soybeanjs/soybean-admin/commit/3eeace9) + +###    ๐Ÿ”ฅ ๆ€ง่ƒฝ + +- **้กน็›ฎ**: ๅˆๅง‹ๅŒ–้™ๆ€่ทฏ็”ฑๅŠŸ่ƒฝไธ้œ€่ฆๅผ‚ๆญฅ  -  ็”ฑ **CHENZL** ๅœจ https://github.com/soybeanjs/soybean-admin/issues/493 [(2198b)](https://github.com/soybeanjs/soybean-admin/commit/2198b98) + +###    ๐Ÿ›  ไผ˜ๅŒ– + +- **้กน็›ฎ**: ไผ˜ๅŒ–ไปฃ็   -  ็”ฑ @soybeanjs [(b94ba)](https://github.com/soybeanjs/soybean-admin/commit/b94baa1) +- **็ฑปๅž‹**: ๆ้ซ˜ๅ…จๅฑ€็ฑปๅž‹็š„ๅ…ผๅฎนๆ€ง  -  ็”ฑ @Azir-11 ๅœจ https://github.com/soybeanjs/soybean-admin/issues/494 [(cd9d5)](https://github.com/soybeanjs/soybean-admin/commit/cd9d58d) +- **ๅทฅๅ…ท**: ๅ‡ๅฐ‘ไปฃ็ ็ผฉ่ฟ›๏ผŒๆ้ซ˜ๅฏ่ฏปๆ€ง  -  ็”ฑ @Azir-11 ๅœจ https://github.com/soybeanjs/soybean-admin/issues/496 [(ad2f2)](https://github.com/soybeanjs/soybean-admin/commit/ad2f247) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: ๆ›ดๆ–ฐCHANGELOG  -  ็”ฑ @soybeanjs [(f70d2)](https://github.com/soybeanjs/soybean-admin/commit/f70d29b) + +###    ๐Ÿก ๆ‚้กน + +- **ไพ่ต–**: ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @soybeanjs [(b094d)](https://github.com/soybeanjs/soybean-admin/commit/b094d68) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)   +[CHENZL](mailto:zlong5568863@qq.com) + + +## [v1.2.4](https://github.com/soybeanjs/soybean-admin/compare/v1.2.3...v1.2.4) (2024-06-14) + +###    ๐Ÿ›  ไผ˜ๅŒ– + +- **้กน็›ฎ**: + - ไผ˜ๅŒ– `setupAppVersionNotification`  -  ็”ฑ @soybeanjs ๆไบค [(b5a72)](https://github.com/soybeanjs/soybean-admin/commit/b5a723c) + - ่Žทๅ– 'Asia/Shanghai' ๆ—ถๅŒบ็š„ๆž„ๅปบๆ—ถ้—ด  -  ็”ฑ @soybeanjs ๆไบค [(069fa)](https://github.com/soybeanjs/soybean-admin/commit/069fa8a) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v1.2.3](https://github.com/soybeanjs/soybean-admin/compare/v1.2.2...v1.2.3) (2024-06-13) + +###    ๐Ÿž ไฟฎๅค้”™่ฏฏ + +- **้กน็›ฎ**: + - ้€š่ฟ‡ๅœจindex.htmlไธญๆทปๅŠ color-schemeๅ…ƒๆ ‡็ญพไฟฎๅค็งปๅŠจๆต่งˆๅ™จไธป้ข˜้—ฎ้ข˜  -  ็”ฑ @KickCashew ๅœจ https://github.com/soybeanjs/soybean-admin/issues/488 ไธญๆไบค [(c2125)](https://github.com/soybeanjs/soybean-admin/commit/c212565) + - ไฟฎๅคไบŒ็บง็›ฎๅฝ•็ป„ไปถไธบ็ฉบ  -  ็”ฑ @paynezhuang ๅœจ https://github.com/soybeanjs/soybean-admin/issues/491 ไธญๆไบค [(aabb2)](https://github.com/soybeanjs/soybean-admin/commit/aabb2a4) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: + - ไฟฎๅค่ถ…้“พๆŽฅๆŒ‡ๅ‘้”™่ฏฏ  -  ็”ฑ **Azir** ๆไบค [(20a81)](https://github.com/soybeanjs/soybean-admin/commit/20a8127) + - ๆ›ดๆ–ฐ README  -  ็”ฑ @soybeanjs ๆไบค [(70261)](https://github.com/soybeanjs/soybean-admin/commit/7026126) + +###    ๐Ÿก ๆ‚้กน + +- **ไพ่ต–**: + - ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @soybeanjs ๆไบค [(813d8)](https://github.com/soybeanjs/soybean-admin/commit/813d8ce) + - ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @soybeanjs ๆไบค [(bf718)](https://github.com/soybeanjs/soybean-admin/commit/bf71837) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![paynezhuang](https://github.com/paynezhuang.png?size=48)](https://github.com/paynezhuang)  [![KickCashew](https://github.com/KickCashew.png?size=48)](https://github.com/KickCashew)   +[Azir](mailto:2075125282@qq.com) + +## [v1.2.2](https://github.com/honghuangdc/soybean-admin/compare/v1.2.1...v1.2.2) (2024-06-12) + +###    ๐Ÿš€ ็‰นๆ€ง + +- **้กน็›ฎ**: ๅˆ‡ๆขๆ ‡็ญพๆ—ถ้‡็ฝฎๆปšๅŠจไฝ็ฝฎ  -  ็”ฑ @soybeanjs ๆไบค [(9094b)](https://github.com/honghuangdc/soybean-admin/commit/9094b21) + +###    ๐Ÿž ไฟฎๅค้”™่ฏฏ + +- **้กน็›ฎ**: + - ๅœจDEVๆจกๅผไธ‹้š่—AppVersionNotification  -  ็”ฑ @sigma-plus ๅœจ https://github.com/honghuangdc/soybean-admin/issues/482 ไธญๆไบค [(62592)](https://github.com/honghuangdc/soybean-admin/commit/6259287) + - ไฟฎๅคๅœจ็งปๅŠจๅธƒๅฑ€ไธญ้š่—menu-togglerใ€‚fixed #483  -  ็”ฑ @soybeanjs ๅœจ https://github.com/honghuangdc/soybean-admin/issues/483 ไธญๆไบค [(4470c)](https://github.com/honghuangdc/soybean-admin/commit/4470cb4) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: ๆ›ดๆ–ฐ README  -  ็”ฑ @soybeanjs ๆไบค [(8f9a7)](https://github.com/honghuangdc/soybean-admin/commit/8f9a705) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![sigma-plus](https://github.com/sigma-plus.png?size=48)](https://github.com/sigma-plus)   + +## [v1.2.1](https://github.com/honghuangdc/soybean-admin/compare/v1.2.0...v1.2.1) (2024-06-07) + +###    ๐Ÿž ไฟฎๅค้”™่ฏฏ + +- **้กน็›ฎ**: + - ไฟฎๅค้กต้ข้‡ๆ–ฐๅŠ ่ฝฝๆ—ถ่Žทๅ–็”จๆˆทไฟกๆฏ  -  ็”ฑ @soybeanjs ๆไบค [(ff51b)](https://github.com/honghuangdc/soybean-admin/commit/ff51b72) + - ไฟฎๅคsetupAppVersionNotificationๆธฒๆŸ“  -  ็”ฑ @soybeanjs ๆไบค [(6a6eb)](https://github.com/honghuangdc/soybean-admin/commit/6a6eb9a) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: ๆ›ดๆ–ฐCHANGELOG  -  ็”ฑ @soybeanjs [(fe06b)](https://github.com/honghuangdc/soybean-admin/commit/fe06b8c)ๅฎŒๆˆ + +###    ๐Ÿก ๆ—ฅๅธธไปปๅŠก + +- **ไพ่ต–**: ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @soybeanjs [(08827)](https://github.com/honghuangdc/soybean-admin/commit/08827a4)ๅฎŒๆˆ + +###    โค๏ธ ่ดก็Œฎ่€… + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + + +## [v1.2.0](https://github.com/soybeanjs/soybean-admin/compare/v1.1.5...v1.2.0) (2024-06-06) + +###    ๐Ÿš€ ๅŠŸ่ƒฝ + +- **้กน็›ฎ**: + - ๆ”ฏๆŒ็ณป็ปŸๆ–ฐ็‰ˆๆœฌๆ›ดๆ–ฐ้€š็Ÿฅใ€‚ๅ…ณ้—ญ #420  -  ็”ฑ @soybeanjs ๅœจ https://github.com/soybeanjs/soybean-admin/issues/420 [(584cd)](https://github.com/soybeanjs/soybean-admin/commit/584cd54) + - ๅœจ่ทฏ็”ฑๅฎˆๅซไธญ่Žทๅ–็”จๆˆทไฟกๆฏๅนถไปŽlocalStorageไธญ็งป้™คใ€‚ๅ…ณ้—ญ #459  -  ็”ฑ @soybeanjs ๅœจ https://github.com/soybeanjs/soybean-admin/issues/459 [(5531a)](https://github.com/soybeanjs/soybean-admin/commit/5531a68) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: ๆ›ดๆ–ฐCHANGELOG  -  ็”ฑ @soybeanjs [(2bec8)](https://github.com/soybeanjs/soybean-admin/commit/2bec899) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)   + +## [v1.1.5](https://github.com/soybeanjs/soybean-admin/compare/v1.1.4...v1.1.5) (2024-06-06) + +###    ๐Ÿž ้”™่ฏฏไฟฎๅค + +- **้กน็›ฎ**: ไฟฎๅคๆณจๅ†Œ็ป„ไปถๅ๏ผŒCodeLogin => Register  -  ็”ฑ @m-xlsea ๅœจ https://github.com/soybeanjs/soybean-admin/issues/478 [(ddf38)](https://github.com/soybeanjs/soybean-admin/commit/ddf3823) + +###    ๐Ÿก ๆ‚ๅŠก + +- **ไพ่ต–**: ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @soybeanjs [(060c0)](https://github.com/soybeanjs/soybean-admin/commit/060c0a9) +- **้กน็›ฎ**: ๆ›ดๆ–ฐ vscode ่ฎพ็ฝฎ: vue ๅฎ˜ๆ–น  -  ็”ฑ @soybeanjs [(76649)](https://github.com/soybeanjs/soybean-admin/commit/76649e2) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![m-xlsea](https://github.com/m-xlsea.png?size=48)](https://github.com/m-xlsea)   + +## [v1.1.4](https://github.com/honghuangdc/soybean-admin/compare/v1.1.3...v1.1.4) (2024-06-06) + +###    ๐Ÿž ้”™่ฏฏไฟฎๅค + +- **utils**: ไฟฎๅคไบ†ๆŒ‰esc้”ฎๆ—ถmodalLogout็š„้”™่ฏฏ  -  ็”ฑ @sigma-plus ๅœจ https://github.com/honghuangdc/soybean-admin/issues/470 ไธญๆๅ‡บ [(bd69c)](https://github.com/honghuangdc/soybean-admin/commit/bd69c00) + +###    ๐Ÿ›  ไผ˜ๅŒ– + +- **projects**: ไผ˜ๅŒ–ไบ†RouteMeta็š„ๅค‡ๆณจ  -  ็”ฑ @soybeanjs ๆๅ‡บ [(ffb48)](https://github.com/honghuangdc/soybean-admin/commit/ffb48b1) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **projects**: + - ๆ›ดๆ–ฐไบ†CHANGELOG  -  ็”ฑ @soybeanjs ๆๅ‡บ [(756f8)](https://github.com/honghuangdc/soybean-admin/commit/756f84a) + - ๆ›ดๆ–ฐไบ†Node&pnpm็‰ˆๆœฌ  -  ็”ฑ @Azir-11 ๅœจ https://github.com/honghuangdc/soybean-admin/issues/472 ไธญๆๅ‡บ [(9b05d)](https://github.com/honghuangdc/soybean-admin/commit/9b05d73) + +###    ๐Ÿก ๆ‚้กน + +- **deps**: + - ๆ›ดๆ–ฐไบ†ไพ่ต–  -  ็”ฑ @soybeanjs ๆๅ‡บ [(d0380)](https://github.com/honghuangdc/soybean-admin/commit/d0380ce) + - ๆ›ดๆ–ฐไบ†ไพ่ต–  -  ็”ฑ @soybeanjs ๆๅ‡บ [(1f464)](https://github.com/honghuangdc/soybean-admin/commit/1f4647b) +- **projects**: + - ๅ…ณ้—ญไบ†httpไปฃ็†  -  ็”ฑ @soybeanjs ๆๅ‡บ [(d08a3)](https://github.com/honghuangdc/soybean-admin/commit/d08a381) + - ๆ›ดๆ–ฐไบ†mock url  -  ็”ฑ @soybeanjs ๆๅ‡บ [(e6086)](https://github.com/honghuangdc/soybean-admin/commit/e6086f0) + - ๆ›ดๆ–ฐไบ†vscode่ฎพ็ฝฎ  -  ็”ฑ @soybeanjs ๆๅ‡บ [(910df)](https://github.com/honghuangdc/soybean-admin/commit/910dfca) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)  [![sigma-plus](https://github.com/sigma-plus.png?size=48)](https://github.com/sigma-plus)   + +## [v1.1.3](https://github.com/soybeanjs/soybean-admin/compare/v1.1.2...v1.1.3) (2024-06-02) + +###    ๐Ÿž ้”™่ฏฏไฟฎๅค + +- **็ป„ไปถ**: + - ไฟฎๅคไบ†็”ฑไบŽๅ›ž่ฝฆๅฏผ่‡ดๆœ็ดขๆก†ๅๅคๅผนๅ‡บ็š„้—ฎ้ข˜  -  ็”ฑ @Azir-11 ๅœจ https://github.com/soybeanjs/soybean-admin/issues/468 ไธญไฟฎๅค [(5bd96)](https://github.com/soybeanjs/soybean-admin/commit/5bd96b8) +- **้กน็›ฎ**: + - ไฟฎๅค็‚นๅ‡ป่œๅ•ๆœ็ดขใ€‚ไฟฎๅคไบ† #466๏ผŒๅ…ณ้—ญ #467  -  ็”ฑ @soybeanjs ๅœจ https://github.com/soybeanjs/soybean-admin/issues/466 ๅ’Œ https://github.com/soybeanjs/soybean-admin/issues/467 ไธญไฟฎๅค [(8efdb)](https://github.com/soybeanjs/soybean-admin/commit/8efdb10) + - ไฟฎๅค reCacheRouteใ€‚ไฟฎๅคไบ† #464  -  ็”ฑ @soybeanjs ๅœจ https://github.com/soybeanjs/soybean-admin/issues/464 ไธญไฟฎๅค [(59faf)](https://github.com/soybeanjs/soybean-admin/commit/59faf15) +- **ๆ ทๅผ**: + - ไฟฎๅค FirstLevelMenu ๆ ทๅผใ€‚ไฟฎๅคไบ† #450  -  ็”ฑ @soybeanjs ๅœจ https://github.com/soybeanjs/soybean-admin/issues/450 ไธญไฟฎๅค [(db64b)](https://github.com/soybeanjs/soybean-admin/commit/db64b0e) + - ไฟฎๅค PinToggler ๆ ทๅผใ€‚ไฟฎๅคไบ† #451  -  ็”ฑ @soybeanjs ๅœจ https://github.com/soybeanjs/soybean-admin/issues/451 ไธญไฟฎๅค [(42b12)](https://github.com/soybeanjs/soybean-admin/commit/42b121a) + +###    ๐Ÿ›  ไผ˜ๅŒ– + +- **็ป„ไปถ**: ๆ้ซ˜ TableColumnSetting ็š„ๆ‹–ๅŠจๅŒบๅŸŸ็ฒพๅบฆ๏ผŒๅธฆๆœ‰ๅŠจ็”ป  -  ็”ฑ @orangelckc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/465 ไธญไผ˜ๅŒ– [(2aa85)](https://github.com/soybeanjs/soybean-admin/commit/2aa85c6) +- **้กน็›ฎ**: unocss ่พนๆก†ๅฟซๆทๆ–นๅผ  -  ็”ฑ @soybeanjs ไผ˜ๅŒ– [(40d0f)](https://github.com/soybeanjs/soybean-admin/commit/40d0f8a) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: ๆ›ดๆ–ฐ CHANGELOG  -  ็”ฑ @soybeanjs ๆ›ดๆ–ฐ [(87b18)](https://github.com/soybeanjs/soybean-admin/commit/87b1838) + +###    ๐Ÿก ๆ‚้กน + +- **ๅ…ถไป–**: + - ็บ ๆญฃๆ‹ผๅ†™้”™่ฏฏ  -  ็”ฑ @orangelckc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/460 ไธญ็บ ๆญฃ [(086ba)](https://github.com/soybeanjs/soybean-admin/commit/086bad4) + - ็บ ๆญฃๆ‹ผๅ†™้”™่ฏฏ  -  ็”ฑ @Azir-11 ๅœจ https://github.com/soybeanjs/soybean-admin/issues/462 ไธญ็บ ๆญฃ [(f1850)](https://github.com/soybeanjs/soybean-admin/commit/f185041) +- **้กน็›ฎ**: + - ๆ›ดๆ–ฐ vscode launch.json  -  ็”ฑ @soybeanjs ๆ›ดๆ–ฐ [(4c1c7)](https://github.com/soybeanjs/soybean-admin/commit/4c1c7e6) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![soybeanjs](https://github.com/soybeanjs.png?size=48)](https://github.com/soybeanjs)  [![Azir-11](https://github.com/Azir-11.png?size=48)](https://github.com/Azir-11)  [![orangelckc](https://github.com/orangelckc.png?size=48)](https://github.com/orangelckc)   + +## [v1.1.2](https://github.com/soybeanjs/soybean-admin/compare/v1.1.1...v1.1.2) (2024-05-24) + +###    ๐Ÿž ้”™่ฏฏไฟฎๅค + +- **้กน็›ฎ**: + - ไฟฎๅคๅคด้ƒจๆ ทๅผ & ไฟฎๅค็‚นๅ‡ปๅ…จๅฑ€ๆ ‡็ญพๆ—ถๆŒ‰้’ฎ้ซ˜ไบฎใ€‚ไฟฎๅคไบ† #446  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/446 [(64fc0)](https://github.com/soybeanjs/soybean-admin/commit/64fc099) + - ไฟฎๅคๅคšๆ ‡็ญพ้กตๅชๆธฒๆŸ“ไธ€ๆฌกใ€‚ไฟฎๅคไบ† #441  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/441 [(e379d)](https://github.com/soybeanjs/soybean-admin/commit/e379d6c) + +###    ๐Ÿ›  ไผ˜ๅŒ– + +- **้กน็›ฎ**: ไผ˜ๅŒ–ไปฃ็   -  ็”ฑ @honghuangdc [(bc8dc)](https://github.com/soybeanjs/soybean-admin/commit/bc8dc47) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.1.1](https://github.com/soybeanjs/soybean-admin/compare/v1.1.0...v1.1.1) (2024-05-20) + +###    ๐Ÿš€ ๅŠŸ่ƒฝ + +- **hooks**: ไธบ useEcharts ๆทปๅŠ  setOptions  -  ็”ฑ @honghuangdc ๆไบค [(e4d53)](https://github.com/soybeanjs/soybean-admin/commit/e4d53aa) + +###    ๐Ÿž ไฟฎๅค้”™่ฏฏ + +- **projects**: + - ไฟฎๅค useRouterใ€‚ไฟฎๅคไบ† #436  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/436 ๆไบค [(0774a)](https://github.com/soybeanjs/soybean-admin/commit/0774a51) + - ๅœจๅŠจๆ€่ทฏ็”ฑๆจกๅผไธ‹่Žทๅ–่ทฏ็”ฑๆ—ถๆทปๅŠ ้”™่ฏฏๅค„็†ใ€‚ไฟฎๅคไบ† 440  -  ็”ฑ @honghuangdc ๆไบค [(57b4a)](https://github.com/soybeanjs/soybean-admin/commit/57b4a9d) +- **styles**: + - ไฟฎๅค useTable ็ฑปๅž‹  -  ็”ฑ @honghuangdc ๆไบค [(07124)](https://github.com/soybeanjs/soybean-admin/commit/071241f) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **projects**: + - ๆ›ดๆ–ฐ CHANGELOG  -  ็”ฑ @honghuangdc ๆไบค [(19783)](https://github.com/soybeanjs/soybean-admin/commit/1978397) + - ๆ›ดๆ–ฐ README.md  -  ็”ฑ @honghuangdc ๆไบค [(fa56e)](https://github.com/soybeanjs/soybean-admin/commit/fa56e9c) + - ๆ›ดๆ–ฐ README.md  -  ็”ฑ @honghuangdc ๆไบค [(419ea)](https://github.com/soybeanjs/soybean-admin/commit/419ea42) + +###    ๐Ÿก ๆ‚้กน + +- **projects**: + - ๆ›ดๆ–ฐไพ่ต–ๅนถไฟฎๅค TS ้”™่ฏฏ  -  ็”ฑ @honghuangdc ๆไบค [(4ea9c)](https://github.com/soybeanjs/soybean-admin/commit/4ea9c85) + - ๆ›ดๆ–ฐ eslint-config ๅนถไฟฎๅคไปฃ็   -  ็”ฑ @honghuangdc ๆไบค [(68ea9)](https://github.com/soybeanjs/soybean-admin/commit/68ea974) + - ๆ›ดๆ–ฐ @elegant-router/vue ๅนถไธบ resolve route ๆทปๅŠ ้”™่ฏฏๅค„็†ใ€‚ไฟฎๅคไบ† #442  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/442 ๆไบค [(24ff8)](https://github.com/soybeanjs/soybean-admin/commit/24ff852) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   + +## [v1.1.0](https://github.com/honghuangdc/soybean-admin/compare/v1.0.9...v1.1.0) (2024-05-07) + +###    ๐Ÿš€ ๅŠŸ่ƒฝ + +- **้กน็›ฎ**: + - ๆ”ฏๆŒ็ฐๅบฆใ€‚ไฟฎๅคไบ† #385  -  ็”ฑ @honghuangdc ๅœจ https://github.com/honghuangdc/soybean-admin/issues/385 [(d335d)](https://github.com/honghuangdc/soybean-admin/commit/d335df6) + - ๆทปๅŠ ๅ‰็ผ€ๅˆฐๆœฌๅœฐๅญ˜ๅ‚จ  -  ็”ฑ **Azir** [(1fc34)](https://github.com/honghuangdc/soybean-admin/commit/1fc34cc) + - ๆทปๅŠ ่กจๆ ผๆ˜พ็คบๆ€ปๆ•ฐ้€‰้กน  -  ็”ฑ **paynezhuang** [(3e61e)](https://github.com/honghuangdc/soybean-admin/commit/3e61eab) + - ๆทปๅŠ ๆŽจ่้ขœ่‰ฒๅˆ‡ๆขใ€‚ๅ…ณ้—ญไบ† #388  -  ็”ฑ @honghuangdc ๅœจ https://github.com/honghuangdc/soybean-admin/issues/388 [(a1920)](https://github.com/honghuangdc/soybean-admin/commit/a1920fc) + - ๆทปๅŠ ่œๅ•่ทฏ็”ฑๅญ—ๆฎต  -  ็”ฑ **paynezhuang** [(dbe31)](https://github.com/honghuangdc/soybean-admin/commit/dbe31eb) + - ๆ”ฏๆŒ็Ÿญๆ—ถ้—ดๅ†…้‡ๅค่ฏทๆฑ‚้”™่ฏฏๅชๅ‡บ็Žฐไธ€ๆฌกใ€‚ๅ…ณ้—ญไบ† #368, ๅ…ณ้—ญไบ† #369  -  ็”ฑ @honghuangdc ๅœจ https://github.com/honghuangdc/soybean-admin/issues/368 ๅ’Œ https://github.com/honghuangdc/soybean-admin/issues/369 [(e3bd3)](https://github.com/honghuangdc/soybean-admin/commit/e3bd397) + - ้€š่ฟ‡้ผ ๆ ‡ๆปš่ฝฎๆŒ‰้’ฎ็‚นๅ‡ปๅ…ณ้—ญๆ ‡็ญพ  -  ็”ฑ **JianJroh** [(d3849)](https://github.com/honghuangdc/soybean-admin/commit/d3849ba) + - ้กต้ข๏ผšๆ”ฏๆŒ็ฎก็†่œๅ•ๆ›ดๅคš้€‰้กนใ€‚ๅ…ณ้—ญไบ† #366  -  ็”ฑ @honghuangdc ๅœจ https://github.com/honghuangdc/soybean-admin/issues/366 [(c4b5c)](https://github.com/honghuangdc/soybean-admin/commit/c4b5c65) + - useTable ๆทปๅŠ ๅฑ•ๅผ€ๆ˜พ็คบ  -  ็”ฑ **paynezhuang** [(0a90d)](https://github.com/honghuangdc/soybean-admin/commit/0a90dd3) + +###    ๐Ÿž ้”™่ฏฏไฟฎๅค + +- **้กน็›ฎ**: + - ่œๅ• fixedIndexInTab ้ป˜่ฎคไธบ null  -  ็”ฑ **paynezhuang** [(3d10e)](https://github.com/honghuangdc/soybean-admin/commit/3d10ef1) + - ไฟฎๅค่œๅ•ๅˆ‡ๆขๅ™จ zIndex  -  ็”ฑ @honghuangdc [(7bd43)](https://github.com/honghuangdc/soybean-admin/commit/7bd43df) + - ไฟฎๅค็ฎก็†่œๅ•ๆจกๆ€ๆ ทๅผ  -  ็”ฑ @honghuangdc [(60f3b)](https://github.com/honghuangdc/soybean-admin/commit/60f3b14) + - ๅฝ“่ง’่‰ฒๆ”นๅ˜ๆ—ถไฟฎๅค่œๅ•ๆ•ฐๆฎใ€‚ไฟฎๅคไบ† #391  -  ็”ฑ @honghuangdc ๅœจ https://github.com/honghuangdc/soybean-admin/issues/391 [(3b47b)](https://github.com/honghuangdc/soybean-admin/commit/3b47b5a) + +###    ๐Ÿ›  ไผ˜ๅŒ– + +- **้กน็›ฎ**: ็งป้™คๅบŸๅผƒ็š„ไปฃ็   -  ็”ฑ @honghuangdc [(72ccb)](https://github.com/honghuangdc/soybean-admin/commit/72ccb6b) + +###    ๐Ÿ’… ้‡ๆž„ + +- **้กน็›ฎ**: + - ้‡ๆž„ @sa/color-palette => @sa/color & ไผ˜ๅŒ– @sa/utils ไปฃ็   -  ็”ฑ @honghuangdc [(34999)](https://github.com/honghuangdc/soybean-admin/commit/3499997) + - menu-operate-drawer => menu-operate-modal  -  ็”ฑ @honghuangdc [(003e1)](https://github.com/honghuangdc/soybean-admin/commit/003e145) + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: + - ๆทปๅŠ  CHANGELOG.zh_CN.md  -  ็”ฑ @honghuangdc [(18b3f)](https://github.com/honghuangdc/soybean-admin/commit/18b3f05) + - ๆ›ดๆ–ฐ CHANGELOG  -  ็”ฑ @honghuangdc [(4d17c)](https://github.com/honghuangdc/soybean-admin/commit/4d17cfd) + +###    ๐Ÿก ๆ‚้กน + +- **ไพ่ต–**: + - ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @honghuangdc [(1cb38)](https://github.com/honghuangdc/soybean-admin/commit/1cb3816) + - ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @honghuangdc [(599b4)](https://github.com/honghuangdc/soybean-admin/commit/599b4e1) +- **้กน็›ฎ**: + - ๅˆๅนถ main ๅˆฐ v1.1.0  -  ็”ฑ @honghuangdc [(ebe55)](https://github.com/honghuangdc/soybean-admin/commit/ebe55af) + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[paynezhuang](mailto:paynezhuang@gmail.com), [JianJroh](mailto:rhjian@foxmail.com), [Azir](mailto:2075125282@qq.com) + +## [v1.1.0-beta.2](https://github.com/honghuangdc/soybean-admin/compare/v1.1.0-beta.1...v1.1.0-beta.2) (2024-05-07) + +###    ๐Ÿš€ ็‰นๆ€ง + +- **้กน็›ฎ**: useTableๆทปๅŠ ๅฑ•ๅผ€ไปฅๆ˜พ็คบ  -  ็”ฑ **paynezhuang** [(0a90d)](https://github.com/honghuangdc/soybean-admin/commit/0a90dd3) ๆไพ› + +###    ๐Ÿž ไฟฎๅค็š„้”™่ฏฏ + +- **้กน็›ฎ**: + - ไฟฎๅค manage_menu ๆจกๆ€ๆ ทๅผ  -  ็”ฑ @honghuangdc [(60f3b)](https://github.com/honghuangdc/soybean-admin/commit/60f3b14) ๆไพ› + - ๅฝ“่ง’่‰ฒๆ”นๅ˜ๆ—ถไฟฎๅค่œๅ•ๆ•ฐๆฎใ€‚ไฟฎๅคไบ† #391  -  ็”ฑ @honghuangdc ๅœจ https://github.com/honghuangdc/soybean-admin/issues/391 [(3b47b)](https://github.com/honghuangdc/soybean-admin/commit/3b47b5a) ๆไพ› + +###    ๐Ÿ›  ไผ˜ๅŒ– + +- **้กน็›ฎ**: ๅˆ ้™คๅบŸๅผƒ็š„ไปฃ็   -  ็”ฑ @honghuangdc [(72ccb)](https://github.com/honghuangdc/soybean-admin/commit/72ccb6b) ๆไพ› + +###    ๐Ÿ“– ๆ–‡ๆกฃ + +- **้กน็›ฎ**: ๆทปๅŠ  CHANGELOG.zh_CN.md  -  ็”ฑ @honghuangdc [(18b3f)](https://github.com/honghuangdc/soybean-admin/commit/18b3f05) ๆไพ› + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[paynezhuang](mailto:paynezhuang@gmail.com) + + +## [v1.1.0-beta.1](https://github.com/soybeanjs/soybean-admin/compare/v1.0.9...v1.1.0-beta.1) (2024-05-07) + +###    ๐Ÿš€ ๅŠŸ่ƒฝ + +- **้กน็›ฎ**: + - ๆ”ฏๆŒ็ฐๅบฆใ€‚ไฟฎๅคไบ† #385  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/385 [(d335d)](https://github.com/soybeanjs/soybean-admin/commit/d335df6) + - ๆทปๅŠ ๅ‰็ผ€ๅˆฐๆœฌๅœฐๅญ˜ๅ‚จ  -  ็”ฑ **Azir** [(1fc34)](https://github.com/soybeanjs/soybean-admin/commit/1fc34cc) + - ๆทปๅŠ ่กจๆ ผ showTotal ้€‰้กน  -  ็”ฑ **paynezhuang** [(3e61e)](https://github.com/soybeanjs/soybean-admin/commit/3e61eab) + - ๆทปๅŠ ๆŽจ่้ขœ่‰ฒๅˆ‡ๆขใ€‚ๅ…ณ้—ญไบ† #388  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/388 [(a1920)](https://github.com/soybeanjs/soybean-admin/commit/a1920fc) + - ๆทปๅŠ ่œๅ•่ทฏ็”ฑๅญ—ๆฎต  -  ็”ฑ **paynezhuang** [(dbe31)](https://github.com/soybeanjs/soybean-admin/commit/dbe31eb) + - ๆ”ฏๆŒ็Ÿญๆ—ถ้—ดๅ†…้‡ๅค่ฏทๆฑ‚้”™่ฏฏๅชๅ‘็”Ÿไธ€ๆฌกใ€‚ๅ…ณ้—ญไบ† #368, ๅ…ณ้—ญไบ† #369  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/368 ๅ’Œ https://github.com/soybeanjs/soybean-admin/issues/369 [(e3bd3)](https://github.com/soybeanjs/soybean-admin/commit/e3bd397) + - ้€š่ฟ‡้ผ ๆ ‡ๆปš่ฝฎๆŒ‰้’ฎ็‚นๅ‡ปๅ…ณ้—ญๆ ‡็ญพ  -  ็”ฑ **JianJroh** [(d3849)](https://github.com/soybeanjs/soybean-admin/commit/d3849ba) + - ้กต้ข๏ผšๆ”ฏๆŒๆ›ดๅคš็š„ manage_menu ้€‰้กนใ€‚ๅ…ณ้—ญไบ† #366  -  ็”ฑ @honghuangdc ๅœจ https://github.com/soybeanjs/soybean-admin/issues/366 [(c4b5c)](https://github.com/soybeanjs/soybean-admin/commit/c4b5c65) + +###    ๐Ÿž ้”™่ฏฏไฟฎๅค + +- **้กน็›ฎ**: + - ไฟฎๅค่œๅ• fixedIndexInTab ้ป˜่ฎคไธบ null  -  ็”ฑ **paynezhuang** [(3d10e)](https://github.com/soybeanjs/soybean-admin/commit/3d10ef1)ๅฎŒๆˆ + - ไฟฎๅค่œๅ•ๅˆ‡ๆขๅ™จ zIndex  -  ็”ฑ @honghuangdc [(7bd43)](https://github.com/soybeanjs/soybean-admin/commit/7bd43df)ๅฎŒๆˆ + +###    ๐Ÿ’… ้‡ๆž„ + +- **้กน็›ฎ**: + - ้‡ๆž„ @sa/color-palette => @sa/color & ๆ€ง่ƒฝไผ˜ๅŒ– @sa/utils  -  ็”ฑ @honghuangdc [(34999)](https://github.com/soybeanjs/soybean-admin/commit/3499997)ๅฎŒๆˆ + - menu-operate-drawer => menu-operate-modal  -  ็”ฑ @honghuangdc [(003e1)](https://github.com/soybeanjs/soybean-admin/commit/003e145)ๅฎŒๆˆ + +###    ๐Ÿก ๆ‚ๅŠก + +- **ไพ่ต–**: + - ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @honghuangdc [(1cb38)](https://github.com/soybeanjs/soybean-admin/commit/1cb3816)ๅฎŒๆˆ + - ๆ›ดๆ–ฐไพ่ต–  -  ็”ฑ @honghuangdc [(599b4)](https://github.com/soybeanjs/soybean-admin/commit/599b4e1)ๅฎŒๆˆ +- **้กน็›ฎ**: + - ๅˆๅนถไธปๅˆ†ๆ”ฏๅˆฐ v1.1.0  -  ็”ฑ @honghuangdc [(ebe55)](https://github.com/soybeanjs/soybean-admin/commit/ebe55af)ๅฎŒๆˆ + +###    โค๏ธ ่ดก็Œฎ่€… + +[![honghuangdc](https://github.com/honghuangdc.png?size=48)](https://github.com/honghuangdc)   +[JianJroh](mailto:rhjian@foxmail.com), [paynezhuang](mailto:paynezhuang@gmail.com), [Azir](mailto:2075125282@qq.com) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..20547de --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Soybean + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.en_US.md b/README.en_US.md new file mode 100644 index 0000000..2306bd9 --- /dev/null +++ b/README.en_US.md @@ -0,0 +1,184 @@ +
+ +

SoybeanAdmin

+ ไธญๆ–‡ | English +
+ +--- + +[![license](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE) +[![github stars](https://img.shields.io/github/stars/soybeanjs/soybean-admin)](https://github.com/soybeanjs/soybean-admin) +[![github forks](https://img.shields.io/github/forks/soybeanjs/soybean-admin)](https://github.com/soybeanjs/soybean-admin) +[![gitee stars](https://gitee.com/honghuangdc/soybean-admin/badge/star.svg)](https://gitee.com/honghuangdc/soybean-admin) + +Featured๏ฝœHelloGitHub + + +> [!NOTE] +> If you think `SoybeanAdmin` is helpful to you, or you like our project, please give us a โญ๏ธ on GitHub. Your support is the driving force for us to continue to improve and add new features! Thank you for your support! + +## Introduction + +[`SoybeanAdmin`](https://github.com/soybeanjs/soybean-admin) is a clean, elegant, beautiful and powerful admin template, based on the latest front-end technology stack, including Vue3, Vite5, TypeScript, Pinia and UnoCSS. It has built-in rich theme configuration and components, strict code specifications, and an automated file routing system. In addition, it also uses the online mock data solution based on ApiFox. `SoybeanAdmin` provides you with a one-stop admin solution, no additional configuration, and out of the box. It is also a best practice for learning cutting-edge technologies quickly. + + +## Features + +- **Cutting-edge technology application**: using the latest popular technology stack such as Vue3, Vite5, TypeScript, Pinia and UnoCSS. +- **Clear project architecture**: using pnpm monorepo architecture, clear structure, elegant and easy to understand. +- **Strict code specifications**: follow the [SoybeanJS specification](https://docs.soybeanjs.cn/standard), integrate eslint, prettier and simple-git-hooks to ensure the code is standardized. +- **TypeScript**: support strict type checking to improve code maintainability. +- **Rich theme configuration**: built-in a variety of theme configurations, perfectly integrated with UnoCSS. +- **Built-in internationalization solution**: easily realize multi-language support. +- **Automated file routing system**: automatically generate route import, declaration and type. For more details, please refer to [Elegant Router](https://github.com/soybeanjs/elegant-router). +- **Flexible permission routing**: support both front-end static routing and back-end dynamic routing. +- **Rich page components**: built-in a variety of pages and components, including 403, 404, 500 pages, as well as layout components, tag components, theme configuration components, etc. +- **Command line tool**: built-in efficient command line tool, git commit, delete file, release, etc. +- **Mobile adaptation**: perfectly support mobile terminal to realize adaptive layout. + + +## Version + +- **NaiveUI Version:** + - [Preview Link](https://naive.soybeanjs.cn/) + - [Github Repository](https://github.com/soybeanjs/soybean-admin) + - [Gitee Repository](https://gitee.com/honghuangdc/soybean-admin) + +- **AntDesignVue Version:** + - [Preview Link](https://antd.soybeanjs.cn/) + - [Github Repository](https://github.com/soybeanjs/soybean-admin-antd) + - [Gitee Repository](https://gitee.com/honghuangdc/soybean-admin-antd) + +- **ElementPlus Version:** + - [Preview Link](https://elp.soybeanjs.cn/) + - [Github Repository](https://github.com/soybeanjs/soybean-admin-element-plus) + +- **Legacy Version:** + - [Preview Link](https://legacy.soybeanjs.cn/) + - [Github Repository](https://github.com/soybeanjs/soybean-admin/tree/legacy) + + +## Documentation + +- [Link](https://docs.soybeanjs.cn) +- [Legacy Docs](https://legacy-docs.soybeanjs.cn) + +## Example Images + +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-01.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-02.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-03.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-04.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-05.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-06.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-07.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-08.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-09.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-10.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-mobile.png) + + +## Usage + +**Environment Preparation** + +Make sure your environment meets the following requirements: + +- **git**: you need git to clone and manage project versions. +- **NodeJS**: >=18.12.0, recommended 18.19.0 or higher. +- **pnpm**: >= 8.7.0, recommended 8.14.0 or higher. + +**Clone Project** + +```bash +git clone https://github.com/soybeanjs/soybean-admin.git +``` + +**Install Dependencies** + +```bash +pnpm i +``` +> Since this project uses the pnpm monorepo management method, please do not use npm or yarn to install dependencies. + +**Start Project** + +```bash +pnpm dev +``` + +**Build Project** + +```bash +pnpm build +``` + +**Code Synchronization** + +Refer to the [Code Synchronization](https://docs.soybeanjs.cn/guide/sync) document. + +## Ecosystem + +- [react-soybean-admin](https://github.com/mufeng889/react-soybean-admin): SoybeanAdmin based version of React. +- [electron-mock-admin](https://github.com/lixin59/electron-mock-api): A Mock Api management system that helps front-end developers quickly implement interface mocks. +- [T-Shell](https://github.com/TheBlindM/T-Shell): A terminal emulator and SSH client with configurable command prompts. +- [pea](https://github.com/haitang1894/pea) : Adopting SpringBoot3.2 + JDK21, MyBatis-Plus, SpringSecurity security framework, etc., suitable for the simple permission system developed by [soybean-admin](https://gitee.com/honghuangdc/soybean-admin). +- [MalusAdmin](https://github.com/pridejoy/MalusAdmin): A backend management framework developed based on Vue3/TypeScript/NaiveUI and NET7 & Sqlsugar. It is implemented in the most original and simplest way, with a fresh and elegant front-end, a clear and elegant backend structure, and powerful functions. +- [PanisAdmin](https://github.com/paynezhuang/panis-admin): Adopting SpringBoot 3, SaToken, MySQL and other frameworks to develop and modify [soybean-admin](https://github.com/soybeanjs/soybean-admin) for the second time, adapting dynamic menu/button-level authorization. Retaining the original flavor, fresh and elegant, high-value back-end management system scaffold. +- [snail-job](https://github.com/aizuda/snail-job): A distributed task retry and task scheduling platform with "high performance, high value and high activity". +- [SuperApi](https://github.com/TmmTop/SuperApi): Quickly turn your idea into an online stable product! Entity-less library and table building, add, delete, change and check entity-less library table, support 15 kinds of condition query, as well as paging, list, unlimited tree list and other functions of the API deployment! With interface documentation, Auth authorisation, interface flow restriction, access to the client's real IP, advanced server caching components, dynamic APIs and other features, we look forward to your experience! +- [FastSoyAdmin](https://github.com/sleep1223/fast-soy-admin): A modern Management Platform based on FastAPI+Vue3+Naive UI. + + +## How to Contribute + +We warmly welcome and appreciate all forms of contributions. If you have any ideas or suggestions, please feel free to share them by submitting [pull requests](https://github.com/soybeanjs/soybean-admin/pulls) or creating GitHub [issue](https://github.com/soybeanjs/soybean-admin/issues/new). + +## Git Commit Guidelines + +This project has built-in `commit` command, you can execute `pnpm commit` to generate commit information that conforms to [Conventional Commits](https://www.conventionalcommits.org/) specification. When submitting PR, please be sure to use `commit` command to create commit information to ensure the standardization of information. + +## Browser Support + +It is recommended to use the latest version of Chrome in development for a better experience. + +| [IE](http://godban.github.io/browsers-support-badges/) | [ Edge](http://godban.github.io/browsers-support-badges/) | [Firefox](http://godban.github.io/browsers-support-badges/) | [Chrome](http://godban.github.io/browsers-support-badges/) | [Safari](http://godban.github.io/browsers-support-badges/) | +| --- | --- | --- | --- | --- | +| not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions | + +## OpenSource Author + +[Soybean](https://github.com/honghuangdc) + +## Contributors + +Thanks the following people for their contributions. If you want to contribute to this project, please refer to [How to Contribute](#how-to-contribute). + + + + + +## Communication + +`SoybeanAdmin` is a completely open source and free project, helping developers to develop medium and large-scale management systems more conveniently. It also provides WeChat and QQ communication groups. If you have any questions, please feel free to ask in the group. + +
+

QQ Group

+ +
+ +
+

Add the following WeChat to invite to the WeChat group

+ +
+ +## Star Trend + +[![Star History Chart](https://api.star-history.com/svg?repos=soybeanjs/soybean-admin&type=Date)](https://star-history.com/#soybeanjs/soybean-admin&Date) + +## License + +This project is based on the [MIT ยฉ 2021 Soybean](./LICENSE) protocol, for learning purposes only, please retain the author's copyright information for commercial use, the author does not guarantee and is not responsible for the software. diff --git a/README.md b/README.md new file mode 100644 index 0000000..e811613 --- /dev/null +++ b/README.md @@ -0,0 +1,211 @@ +
+ +

SoybeanAdmin

+ ไธญๆ–‡ | English +
+ +--- + +[![license](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE) +[![github stars](https://img.shields.io/github/stars/honghuangdc/soybean-admin)](https://github.com/soybeanjs/soybean-admin) +[![github forks](https://img.shields.io/github/forks/honghuangdc/soybean-admin)](https://github.com/soybeanjs/soybean-admin) +[![gitee stars](https://gitee.com/honghuangdc/soybean-admin/badge/star.svg)](https://gitee.com/honghuangdc/soybean-admin) + +Featured๏ฝœHelloGitHub + +> [!NOTE] +> ๅฆ‚ๆžœๆ‚จ่ง‰ๅพ— `SoybeanAdmin`ๅฏนๆ‚จๆœ‰ๆ‰€ๅธฎๅŠฉ๏ผŒๆˆ–่€…ๆ‚จๅ–œๆฌขๆˆ‘ไปฌ็š„้กน็›ฎ๏ผŒ่ฏทๅœจ GitHub ไธŠ็ป™ๆˆ‘ไปฌไธ€ไธช โญ๏ธใ€‚ๆ‚จ็š„ๆ”ฏๆŒๆ˜ฏๆˆ‘ไปฌๆŒ็ปญๆ”น่ฟ›ๅ’ŒๅขžๅŠ ๆ–ฐๅŠŸ่ƒฝ็š„ๅŠจๅŠ›๏ผๆ„Ÿ่ฐขๆ‚จ็š„ๆ”ฏๆŒ๏ผ + +## ็ฎ€ไป‹ + +[`SoybeanAdmin`](https://github.com/soybeanjs/soybean-admin) ๆ˜ฏไธ€ไธชๆธ…ๆ–ฐไผ˜้›…ใ€้ซ˜้ขœๅ€ผไธ”ๅŠŸ่ƒฝๅผบๅคง็š„ๅŽๅฐ็ฎก็†ๆจกๆฟ๏ผŒๅŸบไบŽๆœ€ๆ–ฐ็š„ๅ‰็ซฏๆŠ€ๆœฏๆ ˆ๏ผŒๅŒ…ๆ‹ฌ Vue3, Vite5, TypeScript, Pinia ๅ’Œ UnoCSSใ€‚ๅฎƒๅ†…็ฝฎไบ†ไธฐๅฏŒ็š„ไธป้ข˜้…็ฝฎๅ’Œ็ป„ไปถ๏ผŒไปฃ็ ่ง„่Œƒไธฅ่ฐจ๏ผŒๅฎž็Žฐไบ†่‡ชๅŠจๅŒ–็š„ๆ–‡ไปถ่ทฏ็”ฑ็ณป็ปŸใ€‚ๆญคๅค–๏ผŒๅฎƒ่ฟ˜้‡‡็”จไบ†ๅŸบไบŽ ApiFox ็š„ๅœจ็บฟMockๆ•ฐๆฎๆ–นๆกˆใ€‚`SoybeanAdmin` ไธบๆ‚จๆไพ›ไบ†ไธ€็ซ™ๅผ็š„ๅŽๅฐ็ฎก็†่งฃๅ†ณๆ–นๆกˆ๏ผŒๆ— ้œ€้ขๅค–้…็ฝฎ๏ผŒๅผ€็ฎฑๅณ็”จใ€‚ๅŒๆ ทๆ˜ฏไธ€ไธชๅฟซ้€Ÿๅญฆไน ๅ‰ๆฒฟๆŠ€ๆœฏ็š„ๆœ€ไฝณๅฎž่ทตใ€‚ + +## ็‰นๆ€ง + +- **ๅ‰ๆฒฟๆŠ€ๆœฏๅบ”็”จ**๏ผš้‡‡็”จ Vue3, Vite5, TypeScript, Pinia ๅ’Œ UnoCSS ็ญ‰ๆœ€ๆ–ฐๆต่กŒ็š„ๆŠ€ๆœฏๆ ˆใ€‚ +- **ๆธ…ๆ™ฐ็š„้กน็›ฎๆžถๆž„**๏ผš้‡‡็”จ pnpm monorepo ๆžถๆž„๏ผŒ็ป“ๆž„ๆธ…ๆ™ฐ๏ผŒไผ˜้›…ๆ˜“ๆ‡‚ใ€‚ +- **ไธฅๆ ผ็š„ไปฃ็ ่ง„่Œƒ**๏ผš้ตๅพช [SoybeanJS ่ง„่Œƒ](https://docs.soybeanjs.cn/zh/standard)๏ผŒ้›†ๆˆไบ†eslint, prettier ๅ’Œ simple-git-hooks๏ผŒไฟ่ฏไปฃ็ ็š„่ง„่Œƒๆ€งใ€‚ +- **TypeScript**๏ผš ๆ”ฏๆŒไธฅๆ ผ็š„็ฑปๅž‹ๆฃ€ๆŸฅ๏ผŒๆ้ซ˜ไปฃ็ ็š„ๅฏ็ปดๆŠคๆ€งใ€‚ +- **ไธฐๅฏŒ็š„ไธป้ข˜้…็ฝฎ**๏ผšๅ†…็ฝฎๅคšๆ ท็š„ไธป้ข˜้…็ฝฎ๏ผŒไธŽ UnoCSS ๅฎŒ็พŽ็ป“ๅˆใ€‚ +- **ๅ†…็ฝฎๅ›ฝ้™…ๅŒ–ๆ–นๆกˆ**๏ผš่ฝปๆพๅฎž็Žฐๅคš่ฏญ่จ€ๆ”ฏๆŒใ€‚ +- **่‡ชๅŠจๅŒ–ๆ–‡ไปถ่ทฏ็”ฑ็ณป็ปŸ**๏ผš่‡ชๅŠจ็”Ÿๆˆ่ทฏ็”ฑๅฏผๅ…ฅใ€ๅฃฐๆ˜Žๅ’Œ็ฑปๅž‹ใ€‚ๆ›ดๅคš็ป†่Š‚่ฏทๆŸฅ็œ‹ [Elegant Router](https://github.com/soybeanjs/elegant-router)ใ€‚ +- **็ตๆดป็š„ๆƒ้™่ทฏ็”ฑ**๏ผšๅŒๆ—ถๆ”ฏๆŒๅ‰็ซฏ้™ๆ€่ทฏ็”ฑๅ’ŒๅŽ็ซฏๅŠจๆ€่ทฏ็”ฑใ€‚ +- **ไธฐๅฏŒ็š„้กต้ข็ป„ไปถ**๏ผšๅ†…็ฝฎๅคšๆ ท้กต้ขๅ’Œ็ป„ไปถ๏ผŒๅŒ…ๆ‹ฌ403ใ€404ใ€500้กต้ข๏ผŒไปฅๅŠๅธƒๅฑ€็ป„ไปถใ€ๆ ‡็ญพ็ป„ไปถใ€ไธป้ข˜้…็ฝฎ็ป„ไปถ็ญ‰ใ€‚ +- **ๅ‘ฝไปค่กŒๅทฅๅ…ท**๏ผšๅ†…็ฝฎ้ซ˜ๆ•ˆ็š„ๅ‘ฝไปค่กŒๅทฅๅ…ท๏ผŒgitๆไบคใ€ๅˆ ้™คๆ–‡ไปถใ€ๅ‘ๅธƒ็ญ‰ใ€‚ +- **็งปๅŠจ็ซฏ้€‚้…**๏ผšๅฎŒ็พŽๆ”ฏๆŒ็งปๅŠจ็ซฏ๏ผŒๅฎž็Žฐ่‡ช้€‚ๅบ”ๅธƒๅฑ€ใ€‚ + + +## ็‰ˆๆœฌ + +- **NaiveUI ็‰ˆๆœฌ:** + - [้ข„่งˆๅœฐๅ€](https://naive.soybeanjs.cn/) + - [Github ไป“ๅบ“](https://github.com/soybeanjs/soybean-admin) + - [Gitee ไป“ๅบ“](https://gitee.com/honghuangdc/soybean-admin) +- **AntDesignVue ็‰ˆๆœฌ:** + - [้ข„่งˆๅœฐๅ€](https://antd.soybeanjs.cn/) + - [Github ไป“ๅบ“](https://github.com/soybeanjs/soybean-admin-antd) + - [Gitee ไป“ๅบ“](https://gitee.com/honghuangdc/soybean-admin-antd) +- **ElementPlus ็‰ˆๆœฌ:** + - [้ข„่งˆๅœฐๅ€](https://elp.soybeanjs.cn/) + - [Github ไป“ๅบ“](https://github.com/soybeanjs/soybean-admin-element-plus) +- **ๆ—ง็‰ˆ:** + - [้ข„่งˆๅœฐๅ€](https://legacy.soybeanjs.cn/) + - [Github ไป“ๅบ“](https://github.com/soybeanjs/soybean-admin/tree/legacy) + + +## ๆ–‡ๆกฃ + +- [ๅœฐๅ€](https://docs.soybeanjs.cn) +- [ๆ—ง็‰ˆๆ–‡ๆกฃ](https://legacy-docs.soybeanjs.cn) + + +## ๅˆไฝœไบ‹้กน + +ๆˆ‘ไปฌ้žๅธธๆ„Ÿ่ฐขๅคงๅฎถๅฏน [`SoybeanAdmin`](https://github.com/soybeanjs/soybean-admin) ็š„ๆ”ฏๆŒ๏ผไธบไบ†่ฟ›ไธ€ๆญฅๅ›ž้ฆˆ็คพๅŒบ๏ผŒๅนถๅŠฉๅŠ›ไผไธšๅ’Œๅผ€ๅ‘่€…ๅฎž็Žฐไธชๆ€งๅŒ–้œ€ๆฑ‚๏ผŒๆˆ‘ไปฌ็Žฐๆไพ›ๅคš็งๅˆไฝœๆœๅŠก๏ผŒๆœŸๅพ…ไธŽๆ‚จๆบๆ‰‹ๅ…ฑ่ตขใ€‚ + +##### 1ใ€ๅฎšๅˆถๅŒ–็ฎก็†ๅŽๅฐๅผ€ๅ‘ + +้’ˆๅฏนไผไธšๅ’Œๅผ€ๅ‘่€…็š„็‰นๅฎšไธšๅŠก้œ€ๆฑ‚๏ผŒๆˆ‘ไปฌๆไพ›ๅŸบไบŽ [`SoybeanAdmin`](https://github.com/soybeanjs/soybean-admin) ็š„ๅฎšๅˆถๅŒ–็ฎก็†ๅŽๅฐๅผ€ๅ‘ๆœๅŠกใ€‚ๆˆ‘ไปฌ็š„ๅ›ข้˜Ÿๅ…ทๅค‡ไธฐๅฏŒ็š„่กŒไธš็ป้ชŒ๏ผŒ่ƒฝๅคŸ่ฟ…้€Ÿ็†่งฃๅนถๅฎž็Žฐๆ‚จ็š„้œ€ๆฑ‚๏ผŒๆ‰“้€ ้ซ˜ๆ•ˆใ€็ตๆดปไธ”ๅฎ‰ๅ…จ็š„ๅฎšๅˆถๅŒ–่งฃๅ†ณๆ–นๆกˆใ€‚ + +- **ๅฎšๅˆถๅผ€ๅ‘**๏ผšๆˆ‘ไปฌๅฐ†ๆ นๆฎๆ‚จ็š„ๅ…ทไฝ“้œ€ๆฑ‚๏ผŒๆไพ›ไปŽ้œ€ๆฑ‚ๅˆ†ๆžใ€UI่ฎพ่ฎกๅˆฐๅŠŸ่ƒฝๅฎž็Žฐ็š„ๅ…จๆ–นไฝๆœๅŠก๏ผŒ็กฎไฟ้กน็›ฎ้ซ˜ๆ•ˆไบคไป˜ใ€‚ +- **ๅŠŸ่ƒฝๆ‰ฉๅฑ•**๏ผšๅœจ [`SoybeanAdmin`](https://github.com/soybeanjs/soybean-admin) ๅŸบ็ก€ไธŠ๏ผŒๆ‰ฉๅฑ•ๆ‚จๆ‰€้œ€็š„็‰นๅฎšๅŠŸ่ƒฝๆจกๅ—๏ผŒๆๅ‡็ฎก็†ๅŽๅฐ็š„ๅŠŸ่ƒฝๅ’Œ็”จๆˆทไฝ“้ชŒใ€‚ + +##### 2ใ€ไผไธšๅค–ๅŒ…ๆœๅŠก + +ๆˆ‘ไปฌๆ‰ฟๆŽฅๅ„็ฑปไผไธš็บงๅค–ๅŒ…้กน็›ฎ๏ผŒ็‰นๅˆซๆ˜ฏๅœจ็ฎก็†ๅŽๅฐ็ณป็ปŸ็š„ๅผ€ๅ‘ใ€้›†ๆˆไธŽ่ฟ็ปดๆ–น้ขใ€‚ๆˆ‘ไปฌไปฅ็ฒพ็›Šๆฑ‚็ฒพ็š„ๆ€ๅบฆ๏ผŒ็กฎไฟ้กน็›ฎ็š„่ดจ้‡ๅ’Œ่ฟ›ๅบฆ๏ผŒไธบๆ‚จ็š„ไธšๅŠกๆไพ›ๅผบๆœ‰ๅŠ›็š„ๆŠ€ๆœฏๆ”ฏๆŒใ€‚ + +- **้กน็›ฎๅผ€ๅ‘**๏ผšๆ— ่ฎบๆ˜ฏๅ…จๆ–ฐ็š„้กน็›ฎ๏ผŒ่ฟ˜ๆ˜ฏ็Žฐๆœ‰็ณป็ปŸ็š„ไผ˜ๅŒ–ไธŽ้›†ๆˆ๏ผŒๆˆ‘ไปฌ้ƒฝๅฐ†ไธบๆ‚จ้‡่บซๆ‰“้€ ้ซ˜ๆ•ˆๅฏ้ ็š„่งฃๅ†ณๆ–นๆกˆใ€‚ +- **็ณป็ปŸ้›†ๆˆไธŽ็ปดๆŠค**๏ผšๆˆ‘ไปฌไนŸๆไพ›ๅŸบไบŽ [`SoybeanAdmin`](https://github.com/soybeanjs/soybean-admin) ็š„็ณป็ปŸ้›†ๆˆไธŽ้•ฟๆœŸ็ปดๆŠคๆœๅŠก๏ผŒ็กฎไฟๆ‚จ็š„็ณป็ปŸ็จณๅฎšใ€ๅฎ‰ๅ…จๅœฐ่ฟ่กŒใ€‚ + +##### 3ใ€่”็ณปๆ–นๅผ + +ๅฆ‚ๆœ‰ๅˆไฝœๆ„ๅ‘ๆˆ–้กน็›ฎๅ’จ่ฏข๏ผŒ่ฏท้€š่ฟ‡ไปฅไธ‹ๆ–นๅผไธŽๆˆ‘ไปฌ่”็ณป๏ผš + +- **Email**: [soybeanjs@outlook.com](mailto:soybeanjs@outlook.com) +- **GitHub Issues**: ๆฌข่ฟŽ้€š่ฟ‡ [GitHub Issues](https://github.com/soybeanjs/soybean-admin/issues/new) ่”็ณปๆˆ‘ไปฌ๏ผŒ่ฟ›่กŒๅˆๆญฅ็š„ๅˆไฝœๆดฝ่ฐˆใ€‚ +- **ๅ•†ๅŠกๅˆไฝœๅพฎไฟก**: honghuangdc + +ๆœŸๅพ…ไธŽๆ‚จๅผ€ๅฑ•ๆทฑๅ…ฅๅˆไฝœ๏ผŒๅ…ฑๅŒๆŽจๅŠจ SoybeanAdmin ้กน็›ฎๅŠๅ…ถๅœจๆ›ดๅคš้ข†ๅŸŸ็š„ๆˆๅŠŸๅบ”็”จ๏ผ + + +## ็คบไพ‹ๅ›พ็‰‡ + +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-01.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-02.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-03.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-04.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-05.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-06.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-07.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-08.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-09.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-10.png) +![](https://soybeanjs-1300612522.cos.ap-guangzhou.myqcloud.com/uPic/soybean-admin-v1-mobile.png) + + +## ไฝฟ็”จ + +**็Žฏๅขƒๅ‡†ๅค‡** + +็กฎไฟไฝ ็š„็Žฏๅขƒๆปก่ถณไปฅไธ‹่ฆๆฑ‚๏ผš + +- **git**: ไฝ ้œ€่ฆgitๆฅๅ…‹้š†ๅ’Œ็ฎก็†้กน็›ฎ็‰ˆๆœฌใ€‚ +- **NodeJS**: >=18.12.0๏ผŒๆŽจ่ 18.19.0 ๆˆ–ๆ›ด้ซ˜ใ€‚ +- **pnpm**: >= 8.7.0๏ผŒๆŽจ่ 8.14.0 ๆˆ–ๆ›ด้ซ˜ใ€‚ + +**ๅ…‹้š†้กน็›ฎ** + +```bash +git clone https://github.com/soybeanjs/soybean-admin.git +``` + +**ๅฎ‰่ฃ…ไพ่ต–** + +```bash +pnpm i +``` +> ็”ฑไบŽๆœฌ้กน็›ฎ้‡‡็”จไบ† pnpm monorepo ็š„็ฎก็†ๆ–นๅผ๏ผŒๅ› ๆญค่ฏทไธ่ฆไฝฟ็”จ npm ๆˆ– yarn ๆฅๅฎ‰่ฃ…ไพ่ต–ใ€‚ + +**ๅฏๅŠจ้กน็›ฎ** + +```bash +pnpm dev +``` + +**ๆž„ๅปบ้กน็›ฎ** + +```bash +pnpm build +``` + +**ไปฃ็ ๅŒๆญฅ** + +ๅ‚่€ƒ [ไปฃ็ ๅŒๆญฅ](https://docs.soybeanjs.cn/zh/guide/sync) ๆ–‡ๆกฃใ€‚ + +## ๅ‘จ่พน็”Ÿๆ€ + +- [react-soybean-admin](https://github.com/mufeng889/react-soybean-admin): ๅŸบไบŽSoybeanAdmin็š„React็‰ˆๆœฌ. +- [electron-mock-admin](https://github.com/lixin59/electron-mock-api): ไธ€ไธช Mock Api ็ฎก็†็ณป็ปŸ๏ผŒๅธฎๅŠฉๅ‰็ซฏๅผ€ๅ‘ไผ™ไผดๅฟซ้€Ÿๅฎž็ŽฐๆŽฅๅฃ็š„ mockใ€‚ +- [T-Shell](https://github.com/TheBlindM/T-Shell): ๆ˜ฏไธ€ไธชๅฏ้…็ฝฎๅ‘ฝไปคๆ็คบ็š„็ปˆ็ซฏๆจกๆ‹Ÿๅ™จๅ’Œ SSH ๅฎขๆˆท็ซฏใ€‚ +- [pea](https://github.com/haitang1894/pea) : ้‡‡็”จSpringBoot3.2 + JDK21ใ€MyBatis-Plusใ€SpringSecurityๅฎ‰ๅ…จๆก†ๆžถ็ญ‰๏ผŒ้€‚้… [soybean-admin](https://gitee.com/honghuangdc/soybean-admin) ๅผ€ๅ‘็š„็ฎ€ๅ•ๆƒ้™็ณป็ปŸใ€‚ +- [MalusAdmin](https://github.com/pridejoy/MalusAdmin): ๅŸบไบŽ Vue3/TypeScript/NaiveUI ๅ’Œ NET7 & Sqlsugar ๅผ€ๅ‘็š„ๅŽๅฐ็ฎก็†ๆก†ๆžถใ€‚้‡‡็”จๆœ€ๅŽŸ็”Ÿๆœ€็ฎ€ๆด็š„ๆ–นๅผๆฅๅฎž็Žฐ, ๅ‰็ซฏๆธ…ๆ–ฐไผ˜้›…้ซ˜้ขœๅ€ผ๏ผŒๅŽ็ซฏ ็ป“ๆž„ๆธ…ๆ™ฐ๏ผŒไผ˜้›…ๆ˜“ๆ‡‚๏ผŒๅŠŸ่ƒฝๅผบๅคงใ€‚ +- [PanisAdmin](https://github.com/paynezhuang/panis-admin): ้‡‡็”จSpringBoot3ใ€SaTokenใ€MySQL็ญ‰ๆก†ๆžถๅผ€ๅ‘๏ผŒไบŒๆฌกไฟฎๆ”น [soybean-admin](https://github.com/soybeanjs/soybean-admin)๏ผŒ้€‚้…ๅŠจๆ€่œๅ•/ๆŒ‰้’ฎ็บงๅˆซ็š„้‰ดๆƒ๏ผŒไฟ็•™ๅŽŸๆฑๅŽŸๅ‘ณใ€ๆธ…ๆ–ฐไผ˜้›…ใ€้ซ˜้ขœๅ€ผ็š„ๅŽๅฐ็ฎก็†็ณป็ปŸ่„šๆ‰‹ๆžถใ€‚ +- [snail-job](https://github.com/aizuda/snail-job): ไธ€ๆฌพๅ…ผๅ…ท โ€œ้ซ˜ๆ€ง่ƒฝใ€้ซ˜้ขœๅ€ผใ€้ซ˜ๆดป่ทƒโ€ ็š„ๅˆ†ๅธƒๅผไปปๅŠก้‡่ฏ•ๅ’Œๅˆ†ๅธƒๅผไปปๅŠก่ฐƒๅบฆๅนณๅฐใ€‚ +- [SuperApi](https://github.com/TmmTop/SuperApi): ๅฟซ้€Ÿๅฐ†ไฝ ็š„ idea ๅ˜ๆˆ็บฟไธŠ็จณๅฎš่ฟ่กŒ็š„ไบงๅ“๏ผ ๆ— ๅฎžไฝ“ๅปบๅบ“ๅปบ่กจ๏ผŒๅฏนๆ— ๅฎžไฝ“ๅบ“่กจ่ฟ›่กŒๅขžๅˆ ๆ”นๆŸฅ๏ผŒๆ”ฏๆŒ 15 ็งๆกไปถๆŸฅ่ฏข๏ผŒไปฅๅŠๅˆ†้กต๏ผŒๅˆ—่กจ๏ผŒๆ— ้™็บงๆ ‘ๅฝขๅˆ—่กจ ็ญ‰ๅŠŸ่ƒฝ็š„ API ้ƒจ็ฝฒ๏ผ ๆ‹ฅๆœ‰ๆŽฅๅฃๆ–‡ๆกฃ๏ผŒAuth ๆŽˆๆƒ๏ผŒๆŽฅๅฃ้™ๆต๏ผŒ่Žทๅ–ๅฎขๆˆท็ซฏ็œŸๅฎž IP๏ผŒๅ…ˆ่ฟ›็š„ๆœๅŠกๅ™จ็ผ“ๅญ˜็ป„ไปถ๏ผŒๅŠจๆ€ API ็ญ‰ๅŠŸ่ƒฝ๏ผŒๆœŸๅพ…ๆ‚จ็š„ไฝ“้ชŒ๏ผ +- [FastSoyAdmin](https://github.com/sleep1223/fast-soy-admin): ๅŸบไบŽ FastAPI+Vue3+Naive UI ็š„็ŽฐไปฃๅŒ–่ฝป้‡็ฎก็†ๅนณๅฐ. + + +## ๅฆ‚ไฝ•่ดก็Œฎ + +ๆˆ‘ไปฌ็ƒญ็ƒˆๆฌข่ฟŽๅนถๆ„Ÿ่ฐขๆ‰€ๆœ‰ๅฝขๅผ็š„่ดก็Œฎใ€‚ๅฆ‚ๆžœๆ‚จๆœ‰ไปปไฝ•ๆƒณๆณ•ๆˆ–ๅปบ่ฎฎ๏ผŒๆฌข่ฟŽ้€š่ฟ‡ๆไบค [pull requests](https://github.com/soybeanjs/soybean-admin/pulls) ๆˆ–ๅˆ›ๅปบ GitHub [issue](https://github.com/soybeanjs/soybean-admin/issues/new) ๆฅๅˆ†ไบซใ€‚ + +## Git ๆไบค่ง„่Œƒ + +ๆœฌ้กน็›ฎๅทฒๅ†…็ฝฎ `commit` ๅ‘ฝไปค๏ผŒๆ‚จๅฏไปฅ้€š่ฟ‡ๆ‰ง่กŒ `pnpm commit` ๆฅ็”Ÿๆˆ็ฌฆๅˆ [Conventional Commits]([conventionalcommits](https://www.conventionalcommits.org/)) ่ง„่Œƒ็š„ๆไบคไฟกๆฏใ€‚ๅœจๆไบคPRๆ—ถ๏ผŒ่ฏทๅŠกๅฟ…ไฝฟ็”จ `commit` ๅ‘ฝไปคๆฅๅˆ›ๅปบๆไบคไฟกๆฏ๏ผŒไปฅ็กฎไฟไฟกๆฏ็š„่ง„่Œƒๆ€งใ€‚ + + +## ๆต่งˆๅ™จๆ”ฏๆŒ + +ๆŽจ่ไฝฟ็”จๆœ€ๆ–ฐ็‰ˆ็š„ Chrome ๆต่งˆๅ™จ่ฟ›่กŒๅผ€ๅ‘๏ผŒไปฅ่Žทๅพ—ๆ›ดๅฅฝ็š„ไฝ“้ชŒใ€‚ + +| [IE](http://godban.github.io/browsers-support-badges/) | [ Edge](http://godban.github.io/browsers-support-badges/) | [Firefox](http://godban.github.io/browsers-support-badges/) | [Chrome](http://godban.github.io/browsers-support-badges/) | [Safari](http://godban.github.io/browsers-support-badges/) | +| --- | --- | --- | --- | --- | +| not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions | + +## ๅผ€ๆบไฝœ่€… + +[Soybean](https://github.com/honghuangdc) + + +## ่ดก็Œฎ่€… + +ๆ„Ÿ่ฐขไปฅไธ‹่ดก็Œฎ่€…็š„่ดก็Œฎใ€‚ๅฆ‚ๆžœๆ‚จๆƒณไธบๆœฌ้กน็›ฎๅšๅ‡บ่ดก็Œฎ๏ผŒ่ฏทๅ‚่€ƒ [ๅฆ‚ไฝ•่ดก็Œฎ](#ๅฆ‚ไฝ•่ดก็Œฎ)ใ€‚ + + + + + +## ไบคๆต + +`SoybeanAdmin` ๆ˜ฏๅฎŒๅ…จๅผ€ๆบๅ…่ดน็š„้กน็›ฎ๏ผŒๅœจๅธฎๅŠฉๅผ€ๅ‘่€…ๆ›ดๆ–นไพฟๅœฐ่ฟ›่กŒไธญๅคงๅž‹็ฎก็†็ณป็ปŸๅผ€ๅ‘๏ผŒๅŒๆ—ถไนŸๆไพ›ๅพฎไฟกๅ’Œ QQ ไบคๆต็พค๏ผŒไฝฟ็”จ้—ฎ้ข˜ๆฌข่ฟŽๅœจ็พคๅ†…ๆ้—ฎใ€‚ + +
+

QQไบคๆต็พค

+ +
+ +
+

ๆทปๅŠ ไธ‹้ขๅพฎไฟก้‚€่ฏท่ฟ›ๅพฎไฟก็พค

+ +
+ +## Star ่ถ‹ๅŠฟ + +[![Star History Chart](https://api.star-history.com/svg?repos=soybeanjs/soybean-admin&type=Date)](https://star-history.com/#soybeanjs/soybean-admin&Date) + +## ๅผ€ๆบๅ่ฎฎ + +้กน็›ฎๅŸบไบŽ [MIT ยฉ 2021 Soybean](./LICENSE) ๅ่ฎฎ๏ผŒไป…ไพ›ๅญฆไน ๅ‚่€ƒ๏ผŒๅ•†ไธšไฝฟ็”จ่ฏทไฟ็•™ไฝœ่€…็‰ˆๆƒไฟกๆฏ๏ผŒไฝœ่€…ไธไฟ่ฏไนŸไธๆ‰ฟๆ‹…ไปปไฝ•่ฝฏไปถ็š„ไฝฟ็”จ้ฃŽ้™ฉใ€‚ diff --git a/build/config/index.ts b/build/config/index.ts new file mode 100644 index 0000000..8a9621a --- /dev/null +++ b/build/config/index.ts @@ -0,0 +1,2 @@ +export * from './proxy'; +export * from './time'; diff --git a/build/config/proxy.ts b/build/config/proxy.ts new file mode 100644 index 0000000..e307d30 --- /dev/null +++ b/build/config/proxy.ts @@ -0,0 +1,55 @@ +import type { HttpProxy, ProxyOptions } from 'vite'; +import { bgRed, bgYellow, green, lightBlue } from 'kolorist'; +import { consola } from 'consola'; +import { createServiceConfig } from '../../src/utils/service'; + +/** + * Set http proxy + * + * @param env - The current env + * @param enable - If enable http proxy + */ +export function createViteProxy(env: Env.ImportMeta, enable: boolean) { + const isEnableHttpProxy = enable && env.VITE_HTTP_PROXY === 'Y'; + + if (!isEnableHttpProxy) return undefined; + + const isEnableProxyLog = env.VITE_PROXY_LOG === 'Y'; + + const { baseURL, proxyPattern, other } = createServiceConfig(env); + + const proxy: Record = createProxyItem({ baseURL, proxyPattern }, isEnableProxyLog); + + other.forEach(item => { + Object.assign(proxy, createProxyItem(item, isEnableProxyLog)); + }); + + return proxy; +} + +function createProxyItem(item: App.Service.ServiceConfigItem, enableLog: boolean) { + const proxy: Record = {}; + + proxy[item.proxyPattern] = { + target: item.baseURL, + changeOrigin: true, + configure: (_proxy: HttpProxy.Server, options: ProxyOptions) => { + _proxy.on('proxyReq', (_proxyReq, req, _res) => { + if (!enableLog) return; + + const requestUrl = `${lightBlue('[proxy url]')}: ${bgYellow(` ${req.method} `)} ${green(`${item.proxyPattern}${req.url}`)}`; + + const proxyUrl = `${lightBlue('[real request url]')}: ${green(`${options.target}${req.url}`)}`; + + consola.log(`${requestUrl}\n${proxyUrl}`); + }); + _proxy.on('error', (_err, req, _res) => { + if (!enableLog) return; + consola.log(bgRed(`Error: ${req.method} `), green(`${options.target}${req.url}`)); + }); + }, + rewrite: path => path.replace(new RegExp(`^${item.proxyPattern}`), '') + }; + + return proxy; +} diff --git a/build/config/time.ts b/build/config/time.ts new file mode 100644 index 0000000..3b57146 --- /dev/null +++ b/build/config/time.ts @@ -0,0 +1,12 @@ +import dayjs from 'dayjs'; +import utc from 'dayjs/plugin/utc'; +import timezone from 'dayjs/plugin/timezone'; + +export function getBuildTime() { + dayjs.extend(utc); + dayjs.extend(timezone); + + const buildTime = dayjs.tz(Date.now(), 'Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss'); + + return buildTime; +} diff --git a/build/plugins/html.ts b/build/plugins/html.ts new file mode 100644 index 0000000..b94d24f --- /dev/null +++ b/build/plugins/html.ts @@ -0,0 +1,13 @@ +import type { Plugin } from 'vite'; + +export function setupHtmlPlugin(buildTime: string) { + const plugin: Plugin = { + name: 'html-plugin', + apply: 'build', + transformIndexHtml(html) { + return html.replace('', `\n `); + } + }; + + return plugin; +} diff --git a/build/plugins/index.ts b/build/plugins/index.ts new file mode 100644 index 0000000..52c7275 --- /dev/null +++ b/build/plugins/index.ts @@ -0,0 +1,24 @@ +import type { PluginOption } from 'vite'; +import vue from '@vitejs/plugin-vue'; +import vueJsx from '@vitejs/plugin-vue-jsx'; +import VueDevtools from 'vite-plugin-vue-devtools'; +import progress from 'vite-plugin-progress'; +import { setupElegantRouter } from './router'; +import { setupUnocss } from './unocss'; +import { setupUnplugin } from './unplugin'; +import { setupHtmlPlugin } from './html'; + +export function setupVitePlugins(viteEnv: Env.ImportMeta, buildTime: string) { + const plugins: PluginOption = [ + vue(), + vueJsx(), + VueDevtools(), + setupElegantRouter(), + setupUnocss(viteEnv), + ...setupUnplugin(viteEnv), + progress(), + setupHtmlPlugin(buildTime) + ]; + + return plugins; +} diff --git a/build/plugins/router.ts b/build/plugins/router.ts new file mode 100644 index 0000000..3d6917e --- /dev/null +++ b/build/plugins/router.ts @@ -0,0 +1,41 @@ +import type { RouteMeta } from 'vue-router'; +import ElegantVueRouter from '@elegant-router/vue/vite'; +import type { RouteKey } from '@elegant-router/types'; + +export function setupElegantRouter() { + return ElegantVueRouter({ + layouts: { + base: 'src/layouts/base-layout/index.vue', + blank: 'src/layouts/blank-layout/index.vue' + }, + routePathTransformer(routeName, routePath) { + const key = routeName as RouteKey; + + if (key === 'login') { + const modules: UnionKey.LoginModule[] = ['pwd-login', 'code-login', 'register', 'reset-pwd', 'bind-wechat']; + + const moduleReg = modules.join('|'); + + return `/login/:module(${moduleReg})?`; + } + + return routePath; + }, + onRouteMetaGen(routeName) { + const key = routeName as RouteKey; + + const constantRoutes: RouteKey[] = ['login', '403', '404', '500']; + + const meta: Partial = { + title: key, + i18nKey: `route.${key}` as App.I18n.I18nKey + }; + + if (constantRoutes.includes(key)) { + meta.constant = true; + } + + return meta; + } + }); +} diff --git a/build/plugins/unocss.ts b/build/plugins/unocss.ts new file mode 100644 index 0000000..06b41d3 --- /dev/null +++ b/build/plugins/unocss.ts @@ -0,0 +1,32 @@ +import process from 'node:process'; +import path from 'node:path'; +import unocss from '@unocss/vite'; +import presetIcons from '@unocss/preset-icons'; +import { FileSystemIconLoader } from '@iconify/utils/lib/loader/node-loaders'; + +export function setupUnocss(viteEnv: Env.ImportMeta) { + const { VITE_ICON_PREFIX, VITE_ICON_LOCAL_PREFIX } = viteEnv; + + const localIconPath = path.join(process.cwd(), 'src/assets/svg-icon'); + + /** The name of the local icon collection */ + const collectionName = VITE_ICON_LOCAL_PREFIX.replace(`${VITE_ICON_PREFIX}-`, ''); + + return unocss({ + presets: [ + presetIcons({ + prefix: `${VITE_ICON_PREFIX}-`, + scale: 1, + extraProperties: { + display: 'inline-block' + }, + collections: { + [collectionName]: FileSystemIconLoader(localIconPath, svg => + svg.replace(/^ + svg.replace(/^ + + + + + + + %VITE_APP_TITLE% + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..16f1979 --- /dev/null +++ b/package.json @@ -0,0 +1,114 @@ +{ + "name": "soybean-admin", + "type": "module", + "version": "1.3.13", + "description": "A fresh and elegant admin template, based on Vue3ใ€Vite3ใ€TypeScriptใ€NaiveUI and UnoCSS. ไธ€ไธชๅŸบไบŽVue3ใ€Vite3ใ€TypeScriptใ€NaiveUI and UnoCSS็š„ๆธ…ๆ–ฐไผ˜้›…็š„ไธญๅŽๅฐๆจก็‰ˆใ€‚", + "author": { + "name": "Soybean", + "email": "soybeanjs@outlook.com", + "url": "https://github.com/soybeanjs" + }, + "license": "MIT", + "homepage": "https://github.com/soybeanjs/soybean-admin", + "repository": { + "url": "https://github.com/soybeanjs/soybean-admin.git" + }, + "bugs": { + "url": "https://github.com/soybeanjs/soybean-admin/issues" + }, + "keywords": [ + "Vue3 admin ", + "vue-admin-template", + "Vite5", + "TypeScript", + "naive-ui", + "naive-ui-admin", + "ant-design-vue v4", + "UnoCSS" + ], + "engines": { + "node": ">=18.20.0", + "pnpm": ">=8.7.0" + }, + "scripts": { + "build": "vite build --mode prod", + "build:test": "vite build --mode test", + "cleanup": "sa cleanup", + "commit": "sa git-commit", + "commit:zh": "sa git-commit -l=zh-cn", + "dev": "vite --mode test", + "dev:prod": "vite --mode prod", + "gen-route": "sa gen-route", + "lint": "eslint . --fix", + "prepare": "simple-git-hooks", + "preview": "vite preview", + "release": "sa release", + "typecheck": "vue-tsc --noEmit --skipLibCheck", + "update-pkg": "sa update-pkg" + }, + "dependencies": { + "@better-scroll/core": "2.5.1", + "@iconify/vue": "4.3.0", + "@sa/axios": "workspace:*", + "@sa/color": "workspace:*", + "@sa/hooks": "workspace:*", + "@sa/materials": "workspace:*", + "@sa/utils": "workspace:*", + "@vueuse/core": "13.0.0", + "clipboard": "2.0.11", + "dayjs": "1.11.13", + "defu": "6.1.4", + "echarts": "5.6.0", + "json5": "2.2.3", + "naive-ui": "2.41.0", + "nprogress": "0.2.0", + "pinia": "3.0.1", + "tailwind-merge": "3.0.2", + "vue": "3.5.13", + "vue-draggable-plus": "0.6.0", + "vue-i18n": "11.1.2", + "vue-router": "4.5.0" + }, + "devDependencies": { + "@elegant-router/vue": "0.3.8", + "@iconify/json": "2.2.318", + "@sa/scripts": "workspace:*", + "@sa/uno-preset": "workspace:*", + "@soybeanjs/eslint-config": "1.6.0", + "@types/node": "22.13.10", + "@types/nprogress": "0.2.3", + "@unocss/eslint-config": "66.0.0", + "@unocss/preset-icons": "66.0.0", + "@unocss/preset-uno": "66.0.0", + "@unocss/transformer-directives": "66.0.0", + "@unocss/transformer-variant-group": "66.0.0", + "@unocss/vite": "66.0.0", + "@vitejs/plugin-vue": "5.2.3", + "@vitejs/plugin-vue-jsx": "4.1.2", + "consola": "3.4.2", + "eslint": "9.22.0", + "eslint-plugin-vue": "10.0.0", + "kolorist": "1.8.0", + "lint-staged": "15.5.0", + "sass": "1.86.0", + "simple-git-hooks": "2.11.1", + "tsx": "4.19.3", + "typescript": "5.8.2", + "unplugin-icons": "22.1.0", + "unplugin-vue-components": "28.4.1", + "vite": "6.2.2", + "vite-plugin-progress": "0.0.7", + "vite-plugin-svg-icons": "2.0.1", + "vite-plugin-vue-devtools": "7.7.2", + "vue-eslint-parser": "10.1.1", + "vue-tsc": "2.2.8" + }, + "simple-git-hooks": { + "commit-msg": "pnpm sa git-commit-verify", + "pre-commit": "pnpm typecheck && pnpm lint-staged" + }, + "lint-staged": { + "*": "eslint --fix" + }, + "website": "https://admin.soybeanjs.cn" +} diff --git a/packages/alova/package.json b/packages/alova/package.json new file mode 100644 index 0000000..83f2b1c --- /dev/null +++ b/packages/alova/package.json @@ -0,0 +1,20 @@ +{ + "name": "@sa/alova", + "version": "1.3.13", + "exports": { + ".": "./src/index.ts", + "./fetch": "./src/fetch.ts", + "./client": "./src/client.ts", + "./mock": "./src/mock.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "@alova/mock": "2.0.12", + "@sa/utils": "workspace:*", + "alova": "3.2.10" + } +} diff --git a/packages/alova/src/client.ts b/packages/alova/src/client.ts new file mode 100644 index 0000000..0d76ebb --- /dev/null +++ b/packages/alova/src/client.ts @@ -0,0 +1 @@ +export * from 'alova/client'; diff --git a/packages/alova/src/constant.ts b/packages/alova/src/constant.ts new file mode 100644 index 0000000..be5c43c --- /dev/null +++ b/packages/alova/src/constant.ts @@ -0,0 +1,2 @@ +/** the backend error code key */ +export const BACKEND_ERROR_CODE = 'BACKEND_ERROR'; diff --git a/packages/alova/src/fetch.ts b/packages/alova/src/fetch.ts new file mode 100644 index 0000000..8511ce4 --- /dev/null +++ b/packages/alova/src/fetch.ts @@ -0,0 +1,2 @@ +import adapterFetch from 'alova/fetch'; +export default adapterFetch; diff --git a/packages/alova/src/index.ts b/packages/alova/src/index.ts new file mode 100644 index 0000000..4264253 --- /dev/null +++ b/packages/alova/src/index.ts @@ -0,0 +1,77 @@ +import { createAlova } from 'alova'; +import type { AlovaDefaultCacheAdapter, AlovaGenerics, AlovaGlobalCacheAdapter, AlovaRequestAdapter } from 'alova'; +import VueHook from 'alova/vue'; +import type { VueHookType } from 'alova/vue'; +import adapterFetch from 'alova/fetch'; +import { createServerTokenAuthentication } from 'alova/client'; +import type { FetchRequestInit } from 'alova/fetch'; +import { BACKEND_ERROR_CODE } from './constant'; +import type { CustomAlovaConfig, RequestOptions } from './type'; + +export const createAlovaRequest = < + RequestConfig = FetchRequestInit, + ResponseType = Response, + ResponseHeader = Headers, + L1Cache extends AlovaGlobalCacheAdapter = AlovaDefaultCacheAdapter, + L2Cache extends AlovaGlobalCacheAdapter = AlovaDefaultCacheAdapter +>( + customConfig: CustomAlovaConfig< + AlovaGenerics + >, + options: RequestOptions> +) => { + const { tokenRefresher } = options; + const { onAuthRequired, onResponseRefreshToken } = createServerTokenAuthentication< + VueHookType, + AlovaRequestAdapter + >({ + refreshTokenOnSuccess: { + isExpired: (response, method) => tokenRefresher?.isExpired(response, method) || false, + handler: async (response, method) => tokenRefresher?.handler(response, method) + }, + refreshTokenOnError: { + isExpired: (response, method) => tokenRefresher?.isExpired(response, method) || false, + handler: async (response, method) => tokenRefresher?.handler(response, method) + } + }); + + const instance = createAlova({ + ...customConfig, + timeout: customConfig.timeout ?? 10 * 1000, + requestAdapter: (customConfig.requestAdapter as any) ?? adapterFetch(), + statesHook: VueHook, + beforeRequest: onAuthRequired(options.onRequest as any), + responded: onResponseRefreshToken({ + onSuccess: async (response, method) => { + // check if http status is success + let error: any = null; + let transformedData: any = null; + try { + if (await options.isBackendSuccess(response)) { + transformedData = await options.transformBackendResponse(response); + } else { + error = new Error('the backend request error'); + error.code = BACKEND_ERROR_CODE; + } + } catch (err) { + error = err; + } + + if (error) { + await options.onError?.(error, response, method); + throw error; + } + + return transformedData; + }, + onComplete: options.onComplete, + onError: (error, method) => options.onError?.(error, null, method) + }) + }); + + return instance; +}; + +export { BACKEND_ERROR_CODE }; +export type * from './type'; +export type * from 'alova'; diff --git a/packages/alova/src/mock.ts b/packages/alova/src/mock.ts new file mode 100644 index 0000000..f3aaf08 --- /dev/null +++ b/packages/alova/src/mock.ts @@ -0,0 +1 @@ +export * from '@alova/mock'; diff --git a/packages/alova/src/type.ts b/packages/alova/src/type.ts new file mode 100644 index 0000000..27b84b2 --- /dev/null +++ b/packages/alova/src/type.ts @@ -0,0 +1,52 @@ +import type { AlovaGenerics, AlovaOptions, AlovaRequestAdapter, Method, ResponseCompleteHandler } from 'alova'; + +export type CustomAlovaConfig = Omit< + AlovaOptions, + 'statesHook' | 'beforeRequest' | 'responded' | 'requestAdapter' +> & { + /** request adapter. all request of alova will be sent by it. */ + requestAdapter?: AlovaRequestAdapter; +}; + +export interface RequestOptions { + /** + * The hook before request + * + * For example: You can add header token in this hook + * + * @param method alova Method Instance + */ + onRequest?: AlovaOptions['beforeRequest']; + /** + * The hook to check backend response is success or not + * + * @param response alova response + */ + isBackendSuccess: (response: AG['Response']) => Promise; + + /** The config to refresh token */ + tokenRefresher?: { + /** detect the token is expired */ + isExpired(response: AG['Response'], Method: Method): Promise | boolean; + /** refresh token handler */ + handler(response: AG['Response'], Method: Method): Promise; + }; + + /** The hook after backend request complete */ + onComplete?: ResponseCompleteHandler; + + /** + * The hook to handle error + * + * For example: You can show error message in this hook + * + * @param error + */ + onError?: (error: any, response: AG['Response'] | null, methodInstance: Method) => any | Promise; + /** + * transform backend response when the responseType is json + * + * @param response alova response + */ + transformBackendResponse: (response: AG['Response']) => any; +} diff --git a/packages/alova/tsconfig.json b/packages/alova/tsconfig.json new file mode 100644 index 0000000..5823ed5 --- /dev/null +++ b/packages/alova/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/axios/package.json b/packages/axios/package.json new file mode 100644 index 0000000..ad76483 --- /dev/null +++ b/packages/axios/package.json @@ -0,0 +1,21 @@ +{ + "name": "@sa/axios", + "version": "1.3.13", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "@sa/utils": "workspace:*", + "axios": "1.8.3", + "axios-retry": "4.5.0", + "qs": "6.14.0" + }, + "devDependencies": { + "@types/qs": "6.9.18" + } +} diff --git a/packages/axios/src/constant.ts b/packages/axios/src/constant.ts new file mode 100644 index 0000000..d6c5a33 --- /dev/null +++ b/packages/axios/src/constant.ts @@ -0,0 +1,5 @@ +/** request id key */ +export const REQUEST_ID_KEY = 'X-Request-Id'; + +/** the backend error code key */ +export const BACKEND_ERROR_CODE = 'BACKEND_ERROR'; diff --git a/packages/axios/src/index.ts b/packages/axios/src/index.ts new file mode 100644 index 0000000..c29d9d2 --- /dev/null +++ b/packages/axios/src/index.ts @@ -0,0 +1,183 @@ +import axios, { AxiosError } from 'axios'; +import type { AxiosResponse, CreateAxiosDefaults, InternalAxiosRequestConfig } from 'axios'; +import axiosRetry from 'axios-retry'; +import { nanoid } from '@sa/utils'; +import { createAxiosConfig, createDefaultOptions, createRetryOptions } from './options'; +import { BACKEND_ERROR_CODE, REQUEST_ID_KEY } from './constant'; +import type { + CustomAxiosRequestConfig, + FlatRequestInstance, + MappedType, + RequestInstance, + RequestOption, + ResponseType +} from './type'; + +function createCommonRequest( + axiosConfig?: CreateAxiosDefaults, + options?: Partial> +) { + const opts = createDefaultOptions(options); + + const axiosConf = createAxiosConfig(axiosConfig); + const instance = axios.create(axiosConf); + + const abortControllerMap = new Map(); + + // config axios retry + const retryOptions = createRetryOptions(axiosConf); + axiosRetry(instance, retryOptions); + + instance.interceptors.request.use(conf => { + const config: InternalAxiosRequestConfig = { ...conf }; + + // set request id + const requestId = nanoid(); + config.headers.set(REQUEST_ID_KEY, requestId); + + // config abort controller + if (!config.signal) { + const abortController = new AbortController(); + config.signal = abortController.signal; + abortControllerMap.set(requestId, abortController); + } + + // handle config by hook + const handledConfig = opts.onRequest?.(config) || config; + + return handledConfig; + }); + + instance.interceptors.response.use( + async response => { + const responseType: ResponseType = (response.config?.responseType as ResponseType) || 'json'; + + if (responseType !== 'json' || opts.isBackendSuccess(response)) { + return Promise.resolve(response); + } + + const fail = await opts.onBackendFail(response, instance); + if (fail) { + return fail; + } + + const backendError = new AxiosError( + 'the backend request error', + BACKEND_ERROR_CODE, + response.config, + response.request, + response + ); + + await opts.onError(backendError); + + return Promise.reject(backendError); + }, + async (error: AxiosError) => { + await opts.onError(error); + + return Promise.reject(error); + } + ); + + function cancelRequest(requestId: string) { + const abortController = abortControllerMap.get(requestId); + if (abortController) { + abortController.abort(); + abortControllerMap.delete(requestId); + } + } + + function cancelAllRequest() { + abortControllerMap.forEach(abortController => { + abortController.abort(); + }); + abortControllerMap.clear(); + } + + return { + instance, + opts, + cancelRequest, + cancelAllRequest + }; +} + +/** + * create a request instance + * + * @param axiosConfig axios config + * @param options request options + */ +export function createRequest>( + axiosConfig?: CreateAxiosDefaults, + options?: Partial> +) { + const { instance, opts, cancelRequest, cancelAllRequest } = createCommonRequest(axiosConfig, options); + + const request: RequestInstance = async function request( + config: CustomAxiosRequestConfig + ) { + const response: AxiosResponse = await instance(config); + + const responseType = response.config?.responseType || 'json'; + + if (responseType === 'json') { + return opts.transformBackendResponse(response); + } + + return response.data as MappedType; + } as RequestInstance; + + request.cancelRequest = cancelRequest; + request.cancelAllRequest = cancelAllRequest; + request.state = {} as State; + + return request; +} + +/** + * create a flat request instance + * + * The response data is a flat object: { data: any, error: AxiosError } + * + * @param axiosConfig axios config + * @param options request options + */ +export function createFlatRequest>( + axiosConfig?: CreateAxiosDefaults, + options?: Partial> +) { + const { instance, opts, cancelRequest, cancelAllRequest } = createCommonRequest(axiosConfig, options); + + const flatRequest: FlatRequestInstance = async function flatRequest< + T = any, + R extends ResponseType = 'json' + >(config: CustomAxiosRequestConfig) { + try { + const response: AxiosResponse = await instance(config); + + const responseType = response.config?.responseType || 'json'; + + if (responseType === 'json') { + const data = opts.transformBackendResponse(response); + + return { data, error: null, response }; + } + + return { data: response.data as MappedType, error: null }; + } catch (error) { + return { data: null, error, response: (error as AxiosError).response }; + } + } as FlatRequestInstance; + + flatRequest.cancelRequest = cancelRequest; + flatRequest.cancelAllRequest = cancelAllRequest; + flatRequest.state = {} as State; + + return flatRequest; +} + +export { BACKEND_ERROR_CODE, REQUEST_ID_KEY }; +export type * from './type'; +export type { CreateAxiosDefaults, AxiosError }; diff --git a/packages/axios/src/options.ts b/packages/axios/src/options.ts new file mode 100644 index 0000000..8b2b116 --- /dev/null +++ b/packages/axios/src/options.ts @@ -0,0 +1,48 @@ +import type { CreateAxiosDefaults } from 'axios'; +import type { IAxiosRetryConfig } from 'axios-retry'; +import { stringify } from 'qs'; +import { isHttpSuccess } from './shared'; +import type { RequestOption } from './type'; + +export function createDefaultOptions(options?: Partial>) { + const opts: RequestOption = { + onRequest: async config => config, + isBackendSuccess: _response => true, + onBackendFail: async () => {}, + transformBackendResponse: async response => response.data, + onError: async () => {} + }; + + Object.assign(opts, options); + + return opts; +} + +export function createRetryOptions(config?: Partial) { + const retryConfig: IAxiosRetryConfig = { + retries: 0 + }; + + Object.assign(retryConfig, config); + + return retryConfig; +} + +export function createAxiosConfig(config?: Partial) { + const TEN_SECONDS = 10 * 1000; + + const axiosConfig: CreateAxiosDefaults = { + timeout: TEN_SECONDS, + headers: { + 'Content-Type': 'application/json' + }, + validateStatus: isHttpSuccess, + paramsSerializer: params => { + return stringify(params); + } + }; + + Object.assign(axiosConfig, config); + + return axiosConfig; +} diff --git a/packages/axios/src/shared.ts b/packages/axios/src/shared.ts new file mode 100644 index 0000000..7afd32b --- /dev/null +++ b/packages/axios/src/shared.ts @@ -0,0 +1,28 @@ +import type { AxiosHeaderValue, AxiosResponse, InternalAxiosRequestConfig } from 'axios'; + +export function getContentType(config: InternalAxiosRequestConfig) { + const contentType: AxiosHeaderValue = config.headers?.['Content-Type'] || 'application/json'; + + return contentType; +} + +/** + * check if http status is success + * + * @param status + */ +export function isHttpSuccess(status: number) { + const isSuccessCode = status >= 200 && status < 300; + return isSuccessCode || status === 304; +} + +/** + * is response json + * + * @param response axios response + */ +export function isResponseJson(response: AxiosResponse) { + const { responseType } = response.config; + + return responseType === 'json' || responseType === undefined; +} diff --git a/packages/axios/src/type.ts b/packages/axios/src/type.ts new file mode 100644 index 0000000..644847f --- /dev/null +++ b/packages/axios/src/type.ts @@ -0,0 +1,115 @@ +import type { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios'; + +export type ContentType = + | 'text/html' + | 'text/plain' + | 'multipart/form-data' + | 'application/json' + | 'application/x-www-form-urlencoded' + | 'application/octet-stream'; + +export interface RequestOption { + /** + * The hook before request + * + * For example: You can add header token in this hook + * + * @param config Axios config + */ + onRequest: (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig | Promise; + /** + * The hook to check backend response is success or not + * + * @param response Axios response + */ + isBackendSuccess: (response: AxiosResponse) => boolean; + /** + * The hook after backend request fail + * + * For example: You can handle the expired token in this hook + * + * @param response Axios response + * @param instance Axios instance + */ + onBackendFail: ( + response: AxiosResponse, + instance: AxiosInstance + ) => Promise | Promise; + /** + * transform backend response when the responseType is json + * + * @param response Axios response + */ + transformBackendResponse(response: AxiosResponse): any | Promise; + /** + * The hook to handle error + * + * For example: You can show error message in this hook + * + * @param error + */ + onError: (error: AxiosError) => void | Promise; +} + +interface ResponseMap { + blob: Blob; + text: string; + arrayBuffer: ArrayBuffer; + stream: ReadableStream; + document: Document; +} +export type ResponseType = keyof ResponseMap | 'json'; + +export type MappedType = R extends keyof ResponseMap + ? ResponseMap[R] + : JsonType; + +export type CustomAxiosRequestConfig = Omit & { + responseType?: R; +}; + +export interface RequestInstanceCommon { + /** + * cancel the request by request id + * + * if the request provide abort controller sign from config, it will not collect in the abort controller map + * + * @param requestId + */ + cancelRequest: (requestId: string) => void; + /** + * cancel all request + * + * if the request provide abort controller sign from config, it will not collect in the abort controller map + */ + cancelAllRequest: () => void; + /** you can set custom state in the request instance */ + state: T; +} + +/** The request instance */ +export interface RequestInstance> extends RequestInstanceCommon { + (config: CustomAxiosRequestConfig): Promise>; +} + +export type FlatResponseSuccessData = { + data: T; + error: null; + response: AxiosResponse; +}; + +export type FlatResponseFailData = { + data: null; + error: AxiosError; + response: AxiosResponse; +}; + +export type FlatResponseData = + | FlatResponseSuccessData + | FlatResponseFailData; + +export interface FlatRequestInstance, ResponseData = any> extends RequestInstanceCommon { + ( + config: CustomAxiosRequestConfig + ): Promise, ResponseData>>; +} diff --git a/packages/axios/tsconfig.json b/packages/axios/tsconfig.json new file mode 100644 index 0000000..5823ed5 --- /dev/null +++ b/packages/axios/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/color/package.json b/packages/color/package.json new file mode 100644 index 0000000..6500ae5 --- /dev/null +++ b/packages/color/package.json @@ -0,0 +1,16 @@ +{ + "name": "@sa/color", + "version": "1.3.13", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "@sa/utils": "workspace:*", + "colord": "2.9.3" + } +} diff --git a/packages/color/src/constant/index.ts b/packages/color/src/constant/index.ts new file mode 100644 index 0000000..cefbcdb --- /dev/null +++ b/packages/color/src/constant/index.ts @@ -0,0 +1,2 @@ +export * from './name'; +export * from './palette'; diff --git a/packages/color/src/constant/name.ts b/packages/color/src/constant/name.ts new file mode 100644 index 0000000..36648c3 --- /dev/null +++ b/packages/color/src/constant/name.ts @@ -0,0 +1,1579 @@ +export const colorNames: [hex: string, name: string][] = [ + ['#000000', 'Black'], + ['#000080', 'Navy Blue'], + ['#0000c8', 'Dark Blue'], + ['#0000ff', 'Blue'], + ['#000741', 'Stratos'], + ['#001b1c', 'Swamp'], + ['#002387', 'Resolution Blue'], + ['#002900', 'Deep Fir'], + ['#002e20', 'Burnham'], + ['#002fa7', 'International Klein Blue'], + ['#003153', 'Prussian Blue'], + ['#003366', 'Midnight Blue'], + ['#003399', 'Smalt'], + ['#003532', 'Deep Teal'], + ['#003e40', 'Cyprus'], + ['#004620', 'Kaitoke Green'], + ['#0047ab', 'Cobalt'], + ['#004816', 'Crusoe'], + ['#004950', 'Sherpa Blue'], + ['#0056a7', 'Endeavour'], + ['#00581a', 'Camarone'], + ['#0066cc', 'Science Blue'], + ['#0066ff', 'Blue Ribbon'], + ['#00755e', 'Tropical Rain Forest'], + ['#0076a3', 'Allports'], + ['#007ba7', 'Deep Cerulean'], + ['#007ec7', 'Lochmara'], + ['#007fff', 'Azure Radiance'], + ['#008080', 'Teal'], + ['#0095b6', 'Bondi Blue'], + ['#009dc4', 'Pacific Blue'], + ['#00a693', 'Persian Green'], + ['#00a86b', 'Jade'], + ['#00cc99', 'Caribbean Green'], + ['#00cccc', "Robin's Egg Blue"], + ['#00ff00', 'Green'], + ['#00ff7f', 'Spring Green'], + ['#00ffff', 'Cyan Aqua'], + ['#010d1a', 'Blue Charcoal'], + ['#011635', 'Midnight'], + ['#011d13', 'Holly'], + ['#012731', 'Daintree'], + ['#01361c', 'Cardin Green'], + ['#01371a', 'County Green'], + ['#013e62', 'Astronaut Blue'], + ['#013f6a', 'Regal Blue'], + ['#014b43', 'Aqua Deep'], + ['#015e85', 'Orient'], + ['#016162', 'Blue Stone'], + ['#016d39', 'Fun Green'], + ['#01796f', 'Pine Green'], + ['#017987', 'Blue Lagoon'], + ['#01826b', 'Deep Sea'], + ['#01a368', 'Green Haze'], + ['#022d15', 'English Holly'], + ['#02402c', 'Sherwood Green'], + ['#02478e', 'Congress Blue'], + ['#024e46', 'Evening Sea'], + ['#026395', 'Bahama Blue'], + ['#02866f', 'Observatory'], + ['#02a4d3', 'Cerulean'], + ['#03163c', 'Tangaroa'], + ['#032b52', 'Green Vogue'], + ['#036a6e', 'Mosque'], + ['#041004', 'Midnight Moss'], + ['#041322', 'Black Pearl'], + ['#042e4c', 'Blue Whale'], + ['#044022', 'Zuccini'], + ['#044259', 'Teal Blue'], + ['#051040', 'Deep Cove'], + ['#051657', 'Gulf Blue'], + ['#055989', 'Venice Blue'], + ['#056f57', 'Watercourse'], + ['#062a78', 'Catalina Blue'], + ['#063537', 'Tiber'], + ['#069b81', 'Gossamer'], + ['#06a189', 'Niagara'], + ['#073a50', 'Tarawera'], + ['#080110', 'Jaguar'], + ['#081910', 'Black Bean'], + ['#082567', 'Deep Sapphire'], + ['#088370', 'Elf Green'], + ['#08e8de', 'Bright Turquoise'], + ['#092256', 'Downriver'], + ['#09230f', 'Palm Green'], + ['#09255d', 'Madison'], + ['#093624', 'Bottle Green'], + ['#095859', 'Deep Sea Green'], + ['#097f4b', 'Salem'], + ['#0a001c', 'Black Russian'], + ['#0a480d', 'Dark Fern'], + ['#0a6906', 'Japanese Laurel'], + ['#0a6f75', 'Atoll'], + ['#0b0b0b', 'Cod Gray'], + ['#0b0f08', 'Marshland'], + ['#0b1107', 'Gordons Green'], + ['#0b1304', 'Black Forest'], + ['#0b6207', 'San Felix'], + ['#0bda51', 'Malachite'], + ['#0c0b1d', 'Ebony'], + ['#0c0d0f', 'Woodsmoke'], + ['#0c1911', 'Racing Green'], + ['#0c7a79', 'Surfie Green'], + ['#0c8990', 'Blue Chill'], + ['#0d0332', 'Black Rock'], + ['#0d1117', 'Bunker'], + ['#0d1c19', 'Aztec'], + ['#0d2e1c', 'Bush'], + ['#0e0e18', 'Cinder'], + ['#0e2a30', 'Firefly'], + ['#0f2d9e', 'Torea Bay'], + ['#10121d', 'Vulcan'], + ['#101405', 'Green Waterloo'], + ['#105852', 'Eden'], + ['#110c6c', 'Arapawa'], + ['#120a8f', 'Ultramarine'], + ['#123447', 'Elephant'], + ['#126b40', 'Jewel'], + ['#130000', 'Diesel'], + ['#130a06', 'Asphalt'], + ['#13264d', 'Blue Zodiac'], + ['#134f19', 'Parsley'], + ['#140600', 'Nero'], + ['#1450aa', 'Tory Blue'], + ['#151f4c', 'Bunting'], + ['#1560bd', 'Denim'], + ['#15736b', 'Genoa'], + ['#161928', 'Mirage'], + ['#161d10', 'Hunter Green'], + ['#162a40', 'Big Stone'], + ['#163222', 'Celtic'], + ['#16322c', 'Timber Green'], + ['#163531', 'Gable Green'], + ['#171f04', 'Pine Tree'], + ['#175579', 'Chathams Blue'], + ['#182d09', 'Deep Forest Green'], + ['#18587a', 'Blumine'], + ['#19330e', 'Palm Leaf'], + ['#193751', 'Nile Blue'], + ['#1959a8', 'Fun Blue'], + ['#1a1a68', 'Lucky Point'], + ['#1ab385', 'Mountain Meadow'], + ['#1b0245', 'Tolopea'], + ['#1b1035', 'Haiti'], + ['#1b127b', 'Deep Koamaru'], + ['#1b1404', 'Acadia'], + ['#1b2f11', 'Seaweed'], + ['#1b3162', 'Biscay'], + ['#1b659d', 'Matisse'], + ['#1c1208', 'Crowshead'], + ['#1c1e13', 'Rangoon Green'], + ['#1c39bb', 'Persian Blue'], + ['#1c402e', 'Everglade'], + ['#1c7c7d', 'Elm'], + ['#1d6142', 'Green Pea'], + ['#1e0f04', 'Creole'], + ['#1e1609', 'Karaka'], + ['#1e1708', 'El Paso'], + ['#1e385b', 'Cello'], + ['#1e433c', 'Te Papa Green'], + ['#1e90ff', 'Dodger Blue'], + ['#1e9ab0', 'Eastern Blue'], + ['#1f120f', 'Night Rider'], + ['#1fc2c2', 'Java'], + ['#20208d', 'Jacksons Purple'], + ['#202e54', 'Cloud Burst'], + ['#204852', 'Blue Dianne'], + ['#211a0e', 'Eternity'], + ['#220878', 'Deep Blue'], + ['#228b22', 'Forest Green'], + ['#233418', 'Mallard'], + ['#240a40', 'Violet'], + ['#240c02', 'Kilamanjaro'], + ['#242a1d', 'Log Cabin'], + ['#242e16', 'Black Olive'], + ['#24500f', 'Green House'], + ['#251607', 'Graphite'], + ['#251706', 'Cannon Black'], + ['#251f4f', 'Port Gore'], + ['#25272c', 'Shark'], + ['#25311c', 'Green Kelp'], + ['#2596d1', 'Curious Blue'], + ['#260368', 'Paua'], + ['#26056a', 'Paris M'], + ['#261105', 'Wood Bark'], + ['#261414', 'Gondola'], + ['#262335', 'Steel Gray'], + ['#26283b', 'Ebony Clay'], + ['#273a81', 'Bay Of Many'], + ['#27504b', 'Plantation'], + ['#278a5b', 'Eucalyptus'], + ['#281e15', 'Oil'], + ['#283a77', 'Astronaut'], + ['#286acd', 'Mariner'], + ['#290c5e', 'Violent Violet'], + ['#292130', 'Bastille'], + ['#292319', 'Zeus'], + ['#292937', 'Charade'], + ['#297b9a', 'Jelly Bean'], + ['#29ab87', 'Jungle Green'], + ['#2a0359', 'Cherry Pie'], + ['#2a140e', 'Coffee Bean'], + ['#2a2630', 'Baltic Sea'], + ['#2a380b', 'Turtle Green'], + ['#2a52be', 'Cerulean Blue'], + ['#2b0202', 'Sepia Black'], + ['#2b194f', 'Valhalla'], + ['#2b3228', 'Heavy Metal'], + ['#2c0e8c', 'Blue Gem'], + ['#2c1632', 'Revolver'], + ['#2c2133', 'Bleached Cedar'], + ['#2c8c84', 'Lochinvar'], + ['#2d2510', 'Mikado'], + ['#2d383a', 'Outer Space'], + ['#2d569b', 'St Tropaz'], + ['#2e0329', 'Jacaranda'], + ['#2e1905', 'Jacko Bean'], + ['#2e3222', 'Rangitoto'], + ['#2e3f62', 'Rhino'], + ['#2e8b57', 'Sea Green'], + ['#2ebfd4', 'Scooter'], + ['#2f270e', 'Onion'], + ['#2f3cb3', 'Governor Bay'], + ['#2f519e', 'Sapphire'], + ['#2f5a57', 'Spectra'], + ['#2f6168', 'Casal'], + ['#300529', 'Melanzane'], + ['#301f1e', 'Cocoa Brown'], + ['#302a0f', 'Woodrush'], + ['#304b6a', 'San Juan'], + ['#30d5c8', 'Turquoise'], + ['#311c17', 'Eclipse'], + ['#314459', 'Pickled Bluewood'], + ['#315ba1', 'Azure'], + ['#31728d', 'Calypso'], + ['#317d82', 'Paradiso'], + ['#32127a', 'Persian Indigo'], + ['#32293a', 'Blackcurrant'], + ['#323232', 'Mine Shaft'], + ['#325d52', 'Stromboli'], + ['#327c14', 'Bilbao'], + ['#327da0', 'Astral'], + ['#33036b', 'Christalle'], + ['#33292f', 'Thunder'], + ['#33cc99', 'Shamrock'], + ['#341515', 'Tamarind'], + ['#350036', 'Mardi Gras'], + ['#350e42', 'Valentino'], + ['#350e57', 'Jagger'], + ['#353542', 'Tuna'], + ['#354e8c', 'Chambray'], + ['#363050', 'Martinique'], + ['#363534', 'Tuatara'], + ['#363c0d', 'Waiouru'], + ['#36747d', 'Ming'], + ['#368716', 'La Palma'], + ['#370202', 'Chocolate'], + ['#371d09', 'Clinker'], + ['#37290e', 'Brown Tumbleweed'], + ['#373021', 'Birch'], + ['#377475', 'Oracle'], + ['#380474', 'Blue Diamond'], + ['#381a51', 'Grape'], + ['#383533', 'Dune'], + ['#384555', 'Oxford Blue'], + ['#384910', 'Clover'], + ['#394851', 'Limed Spruce'], + ['#396413', 'Dell'], + ['#3a0020', 'Toledo'], + ['#3a2010', 'Sambuca'], + ['#3a2a6a', 'Jacarta'], + ['#3a686c', 'William'], + ['#3a6a47', 'Killarney'], + ['#3ab09e', 'Keppel'], + ['#3b000b', 'Temptress'], + ['#3b0910', 'Aubergine'], + ['#3b1f1f', 'Jon'], + ['#3b2820', 'Treehouse'], + ['#3b7a57', 'Amazon'], + ['#3b91b4', 'Boston Blue'], + ['#3c0878', 'Windsor'], + ['#3c1206', 'Rebel'], + ['#3c1f76', 'Meteorite'], + ['#3c2005', 'Dark Ebony'], + ['#3c3910', 'Camouflage'], + ['#3c4151', 'Bright Gray'], + ['#3c4443', 'Cape Cod'], + ['#3c493a', 'Lunar Green'], + ['#3d0c02', 'Bean '], + ['#3d2b1f', 'Bistre'], + ['#3d7d52', 'Goblin'], + ['#3e0480', 'Kingfisher Daisy'], + ['#3e1c14', 'Cedar'], + ['#3e2b23', 'English Walnut'], + ['#3e2c1c', 'Black Marlin'], + ['#3e3a44', 'Ship Gray'], + ['#3eabbf', 'Pelorous'], + ['#3f2109', 'Bronze'], + ['#3f2500', 'Cola'], + ['#3f3002', 'Madras'], + ['#3f307f', 'Minsk'], + ['#3f4c3a', 'Cabbage Pont'], + ['#3f583b', 'Tom Thumb'], + ['#3f5d53', 'Mineral Green'], + ['#3fc1aa', 'Puerto Rico'], + ['#3fff00', 'Harlequin'], + ['#401801', 'Brown Pod'], + ['#40291d', 'Cork'], + ['#403b38', 'Masala'], + ['#403d19', 'Thatch Green'], + ['#405169', 'Fiord'], + ['#40826d', 'Viridian'], + ['#40a860', 'Chateau Green'], + ['#410056', 'Ripe Plum'], + ['#411f10', 'Paco'], + ['#412010', 'Deep Oak'], + ['#413c37', 'Merlin'], + ['#414257', 'Gun Powder'], + ['#414c7d', 'East Bay'], + ['#4169e1', 'Royal Blue'], + ['#41aa78', 'Ocean Green'], + ['#420303', 'Burnt Maroon'], + ['#423921', 'Lisbon Brown'], + ['#427977', 'Faded Jade'], + ['#431560', 'Scarlet Gum'], + ['#433120', 'Iroko'], + ['#433e37', 'Armadillo'], + ['#434c59', 'River Bed'], + ['#436a0d', 'Green Leaf'], + ['#44012d', 'Barossa'], + ['#441d00', 'Morocco Brown'], + ['#444954', 'Mako'], + ['#454936', 'Kelp'], + ['#456cac', 'San Marino'], + ['#45b1e8', 'Picton Blue'], + ['#460b41', 'Loulou'], + ['#462425', 'Crater Brown'], + ['#465945', 'Gray Asparagus'], + ['#4682b4', 'Steel Blue'], + ['#480404', 'Rustic Red'], + ['#480607', 'Bulgarian Rose'], + ['#480656', 'Clairvoyant'], + ['#481c1c', 'Cocoa Bean'], + ['#483131', 'Woody Brown'], + ['#483c32', 'Taupe'], + ['#49170c', 'Van Cleef'], + ['#492615', 'Brown Derby'], + ['#49371b', 'Metallic Bronze'], + ['#495400', 'Verdun Green'], + ['#496679', 'Blue Bayoux'], + ['#497183', 'Bismark'], + ['#4a2a04', 'Bracken'], + ['#4a3004', 'Deep Bronze'], + ['#4a3c30', 'Mondo'], + ['#4a4244', 'Tundora'], + ['#4a444b', 'Gravel'], + ['#4a4e5a', 'Trout'], + ['#4b0082', 'Pigment Indigo'], + ['#4b5d52', 'Nandor'], + ['#4c3024', 'Saddle'], + ['#4c4f56', 'Abbey'], + ['#4d0135', 'Blackberry'], + ['#4d0a18', 'Cab Sav'], + ['#4d1e01', 'Indian Tan'], + ['#4d282d', 'Cowboy'], + ['#4d282e', 'Livid Brown'], + ['#4d3833', 'Rock'], + ['#4d3d14', 'Punga'], + ['#4d400f', 'Bronzetone'], + ['#4d5328', 'Woodland'], + ['#4e0606', 'Mahogany'], + ['#4e2a5a', 'Bossanova'], + ['#4e3b41', 'Matterhorn'], + ['#4e420c', 'Bronze Olive'], + ['#4e4562', 'Mulled Wine'], + ['#4e6649', 'Axolotl'], + ['#4e7f9e', 'Wedgewood'], + ['#4eabd1', 'Shakespeare'], + ['#4f1c70', 'Honey Flower'], + ['#4f2398', 'Daisy Bush'], + ['#4f69c6', 'Indigo'], + ['#4f7942', 'Fern Green'], + ['#4f9d5d', 'Fruit Salad'], + ['#4fa83d', 'Apple'], + ['#504351', 'Mortar'], + ['#507096', 'Kashmir Blue'], + ['#507672', 'Cutty Sark'], + ['#50c878', 'Emerald'], + ['#514649', 'Emperor'], + ['#516e3d', 'Chalet Green'], + ['#517c66', 'Como'], + ['#51808f', 'Smalt Blue'], + ['#52001f', 'Castro'], + ['#520c17', 'Maroon Oak'], + ['#523c94', 'Gigas'], + ['#533455', 'Voodoo'], + ['#534491', 'Victoria'], + ['#53824b', 'Hippie Green'], + ['#541012', 'Heath'], + ['#544333', 'Judge Gray'], + ['#54534d', 'Fuscous Gray'], + ['#549019', 'Vida Loca'], + ['#55280c', 'Cioccolato'], + ['#555b10', 'Saratoga'], + ['#556d56', 'Finlandia'], + ['#5590d9', 'Havelock Blue'], + ['#56b4be', 'Fountain Blue'], + ['#578363', 'Spring Leaves'], + ['#583401', 'Saddle Brown'], + ['#585562', 'Scarpa Flow'], + ['#587156', 'Cactus'], + ['#589aaf', 'Hippie Blue'], + ['#591d35', 'Wine Berry'], + ['#592804', 'Brown Bramble'], + ['#593737', 'Congo Brown'], + ['#594433', 'Millbrook'], + ['#5a6e9c', 'Waikawa Gray'], + ['#5a87a0', 'Horizon'], + ['#5b3013', 'Jambalaya'], + ['#5c0120', 'Bordeaux'], + ['#5c0536', 'Mulberry Wood'], + ['#5c2e01', 'Carnaby Tan'], + ['#5c5d75', 'Comet'], + ['#5d1e0f', 'Redwood'], + ['#5d4c51', 'Don Juan'], + ['#5d5c58', 'Chicago'], + ['#5d5e37', 'Verdigris'], + ['#5d7747', 'Dingley'], + ['#5da19f', 'Breaker Bay'], + ['#5e483e', 'Kabul'], + ['#5e5d3b', 'Hemlock'], + ['#5f3d26', 'Irish Coffee'], + ['#5f5f6e', 'Mid Gray'], + ['#5f6672', 'Shuttle Gray'], + ['#5fa777', 'Aqua Forest'], + ['#5fb3ac', 'Tradewind'], + ['#604913', 'Horses Neck'], + ['#605b73', 'Smoky'], + ['#606e68', 'Corduroy'], + ['#6093d1', 'Danube'], + ['#612718', 'Espresso'], + ['#614051', 'Eggplant'], + ['#615d30', 'Costa Del Sol'], + ['#61845f', 'Glade Green'], + ['#622f30', 'Buccaneer'], + ['#623f2d', 'Quincy'], + ['#624e9a', 'Butterfly Bush'], + ['#625119', 'West Coast'], + ['#626649', 'Finch'], + ['#639a8f', 'Patina'], + ['#63b76c', 'Fern'], + ['#6456b7', 'Blue Violet'], + ['#646077', 'Dolphin'], + ['#646463', 'Storm Dust'], + ['#646a54', 'Siam'], + ['#646e75', 'Nevada'], + ['#6495ed', 'Cornflower Blue'], + ['#64ccdb', 'Viking'], + ['#65000b', 'Rosewood'], + ['#651a14', 'Cherrywood'], + ['#652dc1', 'Purple Heart'], + ['#657220', 'Fern Frond'], + ['#65745d', 'Willow Grove'], + ['#65869f', 'Hoki'], + ['#660045', 'Pompadour'], + ['#660099', 'Purple'], + ['#66023c', 'Tyrian Purple'], + ['#661010', 'Dark Tan'], + ['#66b58f', 'Silver Tree'], + ['#66ff00', 'Bright Green'], + ['#66ff66', 'Screamin Green'], + ['#67032d', 'Black Rose'], + ['#675fa6', 'Scampi'], + ['#676662', 'Ironside Gray'], + ['#678975', 'Viridian Green'], + ['#67a712', 'Christi'], + ['#683600', 'Nutmeg Wood Finish'], + ['#685558', 'Zambezi'], + ['#685e6e', 'Salt Box'], + ['#692545', 'Tawny Port'], + ['#692d54', 'Finn'], + ['#695f62', 'Scorpion'], + ['#697e9a', 'Lynch'], + ['#6a442e', 'Spice'], + ['#6a5d1b', 'Himalaya'], + ['#6a6051', 'Soya Bean'], + ['#6b2a14', 'Hairy Heath'], + ['#6b3fa0', 'Royal Purple'], + ['#6b4e31', 'Shingle Fawn'], + ['#6b5755', 'Dorado'], + ['#6b8ba2', 'Bermuda Gray'], + ['#6b8e23', 'Olive Drab'], + ['#6c3082', 'Eminence'], + ['#6cdae7', 'Turquoise Blue'], + ['#6d0101', 'Lonestar'], + ['#6d5e54', 'Pine Cone'], + ['#6d6c6c', 'Dove Gray'], + ['#6d9292', 'Juniper'], + ['#6d92a1', 'Gothic'], + ['#6e0902', 'Red Oxide'], + ['#6e1d14', 'Moccaccino'], + ['#6e4826', 'Pickled Bean'], + ['#6e4b26', 'Dallas'], + ['#6e6d57', 'Kokoda'], + ['#6e7783', 'Pale Sky'], + ['#6f440c', 'Cafe Royale'], + ['#6f6a61', 'Flint'], + ['#6f8e63', 'Highland'], + ['#6f9d02', 'Limeade'], + ['#6fd0c5', 'Downy'], + ['#701c1c', 'Persian Plum'], + ['#704214', 'Sepia'], + ['#704a07', 'Antique Bronze'], + ['#704f50', 'Ferra'], + ['#706555', 'Coffee'], + ['#708090', 'Slate Gray'], + ['#711a00', 'Cedar Wood Finish'], + ['#71291d', 'Metallic Copper'], + ['#714693', 'Affair'], + ['#714ab2', 'Studio'], + ['#715d47', 'Tobacco Brown'], + ['#716338', 'Yellow Metal'], + ['#716b56', 'Peat'], + ['#716e10', 'Olivetone'], + ['#717486', 'Storm Gray'], + ['#718080', 'Sirocco'], + ['#71d9e2', 'Aquamarine Blue'], + ['#72010f', 'Venetian Red'], + ['#724a2f', 'Old Copper'], + ['#726d4e', 'Go Ben'], + ['#727b89', 'Raven'], + ['#731e8f', 'Seance'], + ['#734a12', 'Raw Umber'], + ['#736c9f', 'Kimberly'], + ['#736d58', 'Crocodile'], + ['#737829', 'Crete'], + ['#738678', 'Xanadu'], + ['#74640d', 'Spicy Mustard'], + ['#747d63', 'Limed Ash'], + ['#747d83', 'Rolling Stone'], + ['#748881', 'Blue Smoke'], + ['#749378', 'Laurel'], + ['#74c365', 'Mantis'], + ['#755a57', 'Russett'], + ['#7563a8', 'Deluge'], + ['#76395d', 'Cosmic'], + ['#7666c6', 'Blue Marguerite'], + ['#76bd17', 'Lima'], + ['#76d7ea', 'Sky Blue'], + ['#770f05', 'Dark Burgundy'], + ['#771f1f', 'Crown Of Thorns'], + ['#773f1a', 'Walnut'], + ['#776f61', 'Pablo'], + ['#778120', 'Pacifika'], + ['#779e86', 'Oxley'], + ['#77dd77', 'Pastel Green'], + ['#780109', 'Japanese Maple'], + ['#782d19', 'Mocha'], + ['#782f16', 'Peanut'], + ['#78866b', 'Camouflage Green'], + ['#788a25', 'Wasabi'], + ['#788bba', 'Ship Cove'], + ['#78a39c', 'Sea Nymph'], + ['#795d4c', 'Roman Coffee'], + ['#796878', 'Old Lavender'], + ['#796989', 'Rum'], + ['#796a78', 'Fedora'], + ['#796d62', 'Sandstone'], + ['#79deec', 'Spray'], + ['#7a013a', 'Siren'], + ['#7a58c1', 'Fuchsia Blue'], + ['#7a7a7a', 'Boulder'], + ['#7a89b8', 'Wild Blue Yonder'], + ['#7ac488', 'De York'], + ['#7b3801', 'Red Beech'], + ['#7b3f00', 'Cinnamon'], + ['#7b6608', 'Yukon Gold'], + ['#7b7874', 'Tapa'], + ['#7b7c94', 'Waterloo '], + ['#7b8265', 'Flax Smoke'], + ['#7b9f80', 'Amulet'], + ['#7ba05b', 'Asparagus'], + ['#7c1c05', 'Kenyan Copper'], + ['#7c7631', 'Pesto'], + ['#7c778a', 'Topaz'], + ['#7c7b7a', 'Concord'], + ['#7c7b82', 'Jumbo'], + ['#7c881a', 'Trendy Green'], + ['#7ca1a6', 'Gumbo'], + ['#7cb0a1', 'Acapulco'], + ['#7cb7bb', 'Neptune'], + ['#7d2c14', 'Pueblo'], + ['#7da98d', 'Bay Leaf'], + ['#7dc8f7', 'Malibu'], + ['#7dd8c6', 'Bermuda'], + ['#7e3a15', 'Copper Canyon'], + ['#7f1734', 'Claret'], + ['#7f3a02', 'Peru Tan'], + ['#7f626d', 'Falcon'], + ['#7f7589', 'Mobster'], + ['#7f76d3', 'Moody Blue'], + ['#7fff00', 'Chartreuse'], + ['#7fffd4', 'Aquamarine'], + ['#800000', 'Maroon'], + ['#800b47', 'Rose Bud Cherry'], + ['#801818', 'Falu Red'], + ['#80341f', 'Red Robin'], + ['#803790', 'Vivid Violet'], + ['#80461b', 'Russet'], + ['#807e79', 'Friar Gray'], + ['#808000', 'Olive'], + ['#808080', 'Gray'], + ['#80b3ae', 'Gulf Stream'], + ['#80b3c4', 'Glacier'], + ['#80ccea', 'Seagull'], + ['#81422c', 'Nutmeg'], + ['#816e71', 'Spicy Pink'], + ['#817377', 'Empress'], + ['#819885', 'Spanish Green'], + ['#826f65', 'Sand Dune'], + ['#828685', 'Gunsmoke'], + ['#828f72', 'Battleship Gray'], + ['#831923', 'Merlot'], + ['#837050', 'Shadow'], + ['#83aa5d', 'Chelsea Cucumber'], + ['#83d0c6', 'Monte Carlo'], + ['#843179', 'Plum'], + ['#84a0a0', 'Granny Smith'], + ['#8581d9', 'Chetwode Blue'], + ['#858470', 'Bandicoot'], + ['#859faf', 'Bali Hai'], + ['#85c4cc', 'Half Baked'], + ['#860111', 'Red Devil'], + ['#863c3c', 'Lotus'], + ['#86483c', 'Ironstone'], + ['#864d1e', 'Bull Shot'], + ['#86560a', 'Rusty Nail'], + ['#868974', 'Bitter'], + ['#86949f', 'Regent Gray'], + ['#871550', 'Disco'], + ['#87756e', 'Americano'], + ['#877c7b', 'Hurricane'], + ['#878d91', 'Oslo Gray'], + ['#87ab39', 'Sushi'], + ['#885342', 'Spicy Mix'], + ['#886221', 'Kumera'], + ['#888387', 'Suva Gray'], + ['#888d65', 'Avocado'], + ['#893456', 'Camelot'], + ['#893843', 'Solid Pink'], + ['#894367', 'Cannon Pink'], + ['#897d6d', 'Makara'], + ['#8a3324', 'Burnt Umber'], + ['#8a73d6', 'True V'], + ['#8a8360', 'Clay Creek'], + ['#8a8389', 'Monsoon'], + ['#8a8f8a', 'Stack'], + ['#8ab9f1', 'Jordy Blue'], + ['#8b00ff', 'Electric Violet'], + ['#8b0723', 'Monarch'], + ['#8b6b0b', 'Corn Harvest'], + ['#8b8470', 'Olive Haze'], + ['#8b847e', 'Schooner'], + ['#8b8680', 'Natural Gray'], + ['#8b9c90', 'Mantle'], + ['#8b9fee', 'Portage'], + ['#8ba690', 'Envy'], + ['#8ba9a5', 'Cascade'], + ['#8be6d8', 'Riptide'], + ['#8c055e', 'Cardinal Pink'], + ['#8c472f', 'Mule Fawn'], + ['#8c5738', 'Potters Clay'], + ['#8c6495', 'Trendy Pink'], + ['#8d0226', 'Paprika'], + ['#8d3d38', 'Sanguine Brown'], + ['#8d3f3f', 'Tosca'], + ['#8d7662', 'Cement'], + ['#8d8974', 'Granite Green'], + ['#8d90a1', 'Manatee'], + ['#8da8cc', 'Polo Blue'], + ['#8e0000', 'Red Berry'], + ['#8e4d1e', 'Rope'], + ['#8e6f70', 'Opium'], + ['#8e775e', 'Domino'], + ['#8e8190', 'Mamba'], + ['#8eabc1', 'Nepal'], + ['#8f021c', 'Pohutukawa'], + ['#8f3e33', 'El Salva'], + ['#8f4b0e', 'Korma'], + ['#8f8176', 'Squirrel'], + ['#8fd6b4', 'Vista Blue'], + ['#900020', 'Burgundy'], + ['#901e1e', 'Old Brick'], + ['#907874', 'Hemp'], + ['#907b71', 'Almond Frost'], + ['#908d39', 'Sycamore'], + ['#92000a', 'Sangria'], + ['#924321', 'Cumin'], + ['#926f5b', 'Beaver'], + ['#928573', 'Stonewall'], + ['#928590', 'Venus'], + ['#9370db', 'Medium Purple'], + ['#93ccea', 'Cornflower'], + ['#93dfb8', 'Algae Green'], + ['#944747', 'Copper Rust'], + ['#948771', 'Arrowtown'], + ['#950015', 'Scarlett'], + ['#956387', 'Strikemaster'], + ['#959396', 'Mountain Mist'], + ['#960018', 'Carmine'], + ['#964b00', 'Brown'], + ['#967059', 'Leather'], + ['#9678b6', "Purple Mountain's Majesty"], + ['#967bb6', 'Lavender Purple'], + ['#96a8a1', 'Pewter'], + ['#96bbab', 'Summer Green'], + ['#97605d', 'Au Chico'], + ['#9771b5', 'Wisteria'], + ['#97cd2d', 'Atlantis'], + ['#983d61', 'Vin Rouge'], + ['#9874d3', 'Lilac Bush'], + ['#98777b', 'Bazaar'], + ['#98811b', 'Hacienda'], + ['#988d77', 'Pale Oyster'], + ['#98ff98', 'Mint Green'], + ['#990066', 'Fresh Eggplant'], + ['#991199', 'Violet Eggplant'], + ['#991613', 'Tamarillo'], + ['#991b07', 'Totem Pole'], + ['#996666', 'Copper Rose'], + ['#9966cc', 'Amethyst'], + ['#997a8d', 'Mountbatten Pink'], + ['#9999cc', 'Blue Bell'], + ['#9a3820', 'Prairie Sand'], + ['#9a6e61', 'Toast'], + ['#9a9577', 'Gurkha'], + ['#9ab973', 'Olivine'], + ['#9ac2b8', 'Shadow Green'], + ['#9b4703', 'Oregon'], + ['#9b9e8f', 'Lemon Grass'], + ['#9c3336', 'Stiletto'], + ['#9d5616', 'Hawaiian Tan'], + ['#9dacb7', 'Gull Gray'], + ['#9dc209', 'Pistachio'], + ['#9de093', 'Granny Smith Apple'], + ['#9de5ff', 'Anakiwa'], + ['#9e5302', 'Chelsea Gem'], + ['#9e5b40', 'Sepia Skin'], + ['#9ea587', 'Sage'], + ['#9ea91f', 'Citron'], + ['#9eb1cd', 'Rock Blue'], + ['#9edee0', 'Morning Glory'], + ['#9f381d', 'Cognac'], + ['#9f821c', 'Reef Gold'], + ['#9f9f9c', 'Star Dust'], + ['#9fa0b1', 'Santas Gray'], + ['#9fd7d3', 'Sinbad'], + ['#9fdd8c', 'Feijoa'], + ['#a02712', 'Tabasco'], + ['#a1750d', 'Buttered Rum'], + ['#a1adb5', 'Hit Gray'], + ['#a1c50a', 'Citrus'], + ['#a1dad7', 'Aqua Island'], + ['#a1e9de', 'Water Leaf'], + ['#a2006d', 'Flirt'], + ['#a23b6c', 'Rouge'], + ['#a26645', 'Cape Palliser'], + ['#a2aab3', 'Gray Chateau'], + ['#a2aeab', 'Edward'], + ['#a3807b', 'Pharlap'], + ['#a397b4', 'Amethyst Smoke'], + ['#a3e3ed', 'Blizzard Blue'], + ['#a4a49d', 'Delta'], + ['#a4a6d3', 'Wistful'], + ['#a4af6e', 'Green Smoke'], + ['#a50b5e', 'Jazzberry Jam'], + ['#a59b91', 'Zorba'], + ['#a5cb0c', 'Bahia'], + ['#a62f20', 'Roof Terracotta'], + ['#a65529', 'Paarl'], + ['#a68b5b', 'Barley Corn'], + ['#a69279', 'Donkey Brown'], + ['#a6a29a', 'Dawn'], + ['#a72525', 'Mexican Red'], + ['#a7882c', 'Luxor Gold'], + ['#a85307', 'Rich Gold'], + ['#a86515', 'Reno Sand'], + ['#a86b6b', 'Coral Tree'], + ['#a8989b', 'Dusty Gray'], + ['#a899e6', 'Dull Lavender'], + ['#a8a589', 'Tallow'], + ['#a8ae9c', 'Bud'], + ['#a8af8e', 'Locust'], + ['#a8bd9f', 'Norway'], + ['#a8e3bd', 'Chinook'], + ['#a9a491', 'Gray Olive'], + ['#a9acb6', 'Aluminium'], + ['#a9b2c3', 'Cadet Blue'], + ['#a9b497', 'Schist'], + ['#a9bdbf', 'Tower Gray'], + ['#a9bef2', 'Perano'], + ['#a9c6c2', 'Opal'], + ['#aa375a', 'Night Shadz'], + ['#aa4203', 'Fire'], + ['#aa8b5b', 'Muesli'], + ['#aa8d6f', 'Sandal'], + ['#aaa5a9', 'Shady Lady'], + ['#aaa9cd', 'Logan'], + ['#aaabb7', 'Spun Pearl'], + ['#aad6e6', 'Regent St Blue'], + ['#aaf0d1', 'Magic Mint'], + ['#ab0563', 'Lipstick'], + ['#ab3472', 'Royal Heath'], + ['#ab917a', 'Sandrift'], + ['#aba0d9', 'Cold Purple'], + ['#aba196', 'Bronco'], + ['#ac8a56', 'Limed Oak'], + ['#ac91ce', 'East Side'], + ['#ac9e22', 'Lemon Ginger'], + ['#aca494', 'Napa'], + ['#aca586', 'Hillary'], + ['#aca59f', 'Cloudy'], + ['#acacac', 'Silver Chalice'], + ['#acb78e', 'Swamp Green'], + ['#accbb1', 'Spring Rain'], + ['#acdd4d', 'Conifer'], + ['#ace1af', 'Celadon'], + ['#ad781b', 'Mandalay'], + ['#adbed1', 'Casper'], + ['#addfad', 'Moss Green'], + ['#ade6c4', 'Padua'], + ['#adff2f', 'Green Yellow'], + ['#ae4560', 'Hippie Pink'], + ['#ae6020', 'Desert'], + ['#ae809e', 'Bouquet'], + ['#af4035', 'Medium Carmine'], + ['#af4d43', 'Apple Blossom'], + ['#af593e', 'Brown Rust'], + ['#af8751', 'Driftwood'], + ['#af8f2c', 'Alpine'], + ['#af9f1c', 'Lucky'], + ['#afa09e', 'Martini'], + ['#afb1b8', 'Bombay'], + ['#afbdd9', 'Pigeon Post'], + ['#b04c6a', 'Cadillac'], + ['#b05d54', 'Matrix'], + ['#b05e81', 'Tapestry'], + ['#b06608', 'Mai Tai'], + ['#b09a95', 'Del Rio'], + ['#b0e0e6', 'Powder Blue'], + ['#b0e313', 'Inch Worm'], + ['#b10000', 'Bright Red'], + ['#b14a0b', 'Vesuvius'], + ['#b1610b', 'Pumpkin Skin'], + ['#b16d52', 'Santa Fe'], + ['#b19461', 'Teak'], + ['#b1e2c1', 'Fringy Flower'], + ['#b1f4e7', 'Ice Cold'], + ['#b20931', 'Shiraz'], + ['#b2a1ea', 'Biloba Flower'], + ['#b32d29', 'Tall Poppy'], + ['#b35213', 'Fiery Orange'], + ['#b38007', 'Hot Toddy'], + ['#b3af95', 'Taupe Gray'], + ['#b3c110', 'La Rioja'], + ['#b43332', 'Well Read'], + ['#b44668', 'Blush'], + ['#b4cfd3', 'Jungle Mist'], + ['#b57281', 'Turkish Rose'], + ['#b57edc', 'Lavender'], + ['#b5a27f', 'Mongoose'], + ['#b5b35c', 'Olive Green'], + ['#b5d2ce', 'Jet Stream'], + ['#b5ecdf', 'Cruise'], + ['#b6316c', 'Hibiscus'], + ['#b69d98', 'Thatch'], + ['#b6b095', 'Heathered Gray'], + ['#b6baa4', 'Eagle'], + ['#b6d1ea', 'Spindle'], + ['#b6d3bf', 'Gum Leaf'], + ['#b7410e', 'Rust'], + ['#b78e5c', 'Muddy Waters'], + ['#b7a214', 'Sahara'], + ['#b7a458', 'Husk'], + ['#b7b1b1', 'Nobel'], + ['#b7c3d0', 'Heather'], + ['#b7f0be', 'Madang'], + ['#b81104', 'Milano Red'], + ['#b87333', 'Copper'], + ['#b8b56a', 'Gimblet'], + ['#b8c1b1', 'Green Spring'], + ['#b8c25d', 'Celery'], + ['#b8e0f9', 'Sail'], + ['#b94e48', 'Chestnut'], + ['#b95140', 'Crail'], + ['#b98d28', 'Marigold'], + ['#b9c46a', 'Wild Willow'], + ['#b9c8ac', 'Rainee'], + ['#ba0101', 'Guardsman Red'], + ['#ba450c', 'Rock Spray'], + ['#ba6f1e', 'Bourbon'], + ['#ba7f03', 'Pirate Gold'], + ['#bab1a2', 'Nomad'], + ['#bac7c9', 'Submarine'], + ['#baeef9', 'Charlotte'], + ['#bb3385', 'Medium Red Violet'], + ['#bb8983', 'Brandy Rose'], + ['#bbd009', 'Rio Grande'], + ['#bbd7c1', 'Surf'], + ['#bcc9c2', 'Powder Ash'], + ['#bd5e2e', 'Tuscany'], + ['#bd978e', 'Quicksand'], + ['#bdb1a8', 'Silk'], + ['#bdb2a1', 'Malta'], + ['#bdb3c7', 'Chatelle'], + ['#bdbbd7', 'Lavender Gray'], + ['#bdbdc6', 'French Gray'], + ['#bdc8b3', 'Clay Ash'], + ['#bdc9ce', 'Loblolly'], + ['#bdedfd', 'French Pass'], + ['#bea6c3', 'London Hue'], + ['#beb5b7', 'Pink Swan'], + ['#bede0d', 'Fuego'], + ['#bf5500', 'Rose Of Sharon'], + ['#bfb8b0', 'Tide'], + ['#bfbed8', 'Blue Haze'], + ['#bfc1c2', 'Silver Sand'], + ['#bfc921', 'Key Lime Pie'], + ['#bfdbe2', 'Ziggurat'], + ['#bfff00', 'Lime'], + ['#c02b18', 'Thunderbird'], + ['#c04737', 'Mojo'], + ['#c08081', 'Old Rose'], + ['#c0c0c0', 'Silver'], + ['#c0d3b9', 'Pale Leaf'], + ['#c0d8b6', 'Pixie Green'], + ['#c1440e', 'Tia Maria'], + ['#c154c1', 'Fuchsia Pink'], + ['#c1a004', 'Buddha Gold'], + ['#c1b7a4', 'Bison Hide'], + ['#c1bab0', 'Tea'], + ['#c1becd', 'Gray Suit'], + ['#c1d7b0', 'Sprout'], + ['#c1f07c', 'Sulu'], + ['#c26b03', 'Indochine'], + ['#c2955d', 'Twine'], + ['#c2bdb6', 'Cotton Seed'], + ['#c2cac4', 'Pumice'], + ['#c2e8e5', 'Jagged Ice'], + ['#c32148', 'Maroon Flush'], + ['#c3b091', 'Indian Khaki'], + ['#c3bfc1', 'Pale Slate'], + ['#c3c3bd', 'Gray Nickel'], + ['#c3cde6', 'Periwinkle Gray'], + ['#c3d1d1', 'Tiara'], + ['#c3ddf9', 'Tropical Blue'], + ['#c41e3a', 'Cardinal'], + ['#c45655', 'Fuzzy Wuzzy Brown'], + ['#c45719', 'Orange Roughy'], + ['#c4c4bc', 'Mist Gray'], + ['#c4d0b0', 'Coriander'], + ['#c4f4eb', 'Mint Tulip'], + ['#c54b8c', 'Mulberry'], + ['#c59922', 'Nugget'], + ['#c5994b', 'Tussock'], + ['#c5dbca', 'Sea Mist'], + ['#c5e17a', 'Yellow Green'], + ['#c62d42', 'Brick Red'], + ['#c6726b', 'Contessa'], + ['#c69191', 'Oriental Pink'], + ['#c6a84b', 'Roti'], + ['#c6c3b5', 'Ash'], + ['#c6c8bd', 'Kangaroo'], + ['#c6e610', 'Las Palmas'], + ['#c7031e', 'Monza'], + ['#c71585', 'Red Violet'], + ['#c7bca2', 'Coral Reef'], + ['#c7c1ff', 'Melrose'], + ['#c7c4bf', 'Cloud'], + ['#c7c9d5', 'Ghost'], + ['#c7cd90', 'Pine Glade'], + ['#c7dde5', 'Botticelli'], + ['#c88a65', 'Antique Brass'], + ['#c8a2c8', 'Lilac'], + ['#c8a528', 'Hokey Pokey'], + ['#c8aabf', 'Lily'], + ['#c8b568', 'Laser'], + ['#c8e3d7', 'Edgewater'], + ['#c96323', 'Piper'], + ['#c99415', 'Pizza'], + ['#c9a0dc', 'Light Wisteria'], + ['#c9b29b', 'Rodeo Dust'], + ['#c9b35b', 'Sundance'], + ['#c9b93b', 'Earls Green'], + ['#c9c0bb', 'Silver Rust'], + ['#c9d9d2', 'Conch'], + ['#c9ffa2', 'Reef'], + ['#c9ffe5', 'Aero Blue'], + ['#ca3435', 'Flush Mahogany'], + ['#cabb48', 'Turmeric'], + ['#cadcd4', 'Paris White'], + ['#cae00d', 'Bitter Lemon'], + ['#cae6da', 'Skeptic'], + ['#cb8fa9', 'Viola'], + ['#cbcab6', 'Foggy Gray'], + ['#cbd3b0', 'Green Mist'], + ['#cbdbd6', 'Nebula'], + ['#cc3333', 'Persian Red'], + ['#cc5500', 'Burnt Orange'], + ['#cc7722', 'Ochre'], + ['#cc8899', 'Puce'], + ['#cccaa8', 'Thistle Green'], + ['#ccccff', 'Periwinkle'], + ['#ccff00', 'Electric Lime'], + ['#cd5700', 'Tenn'], + ['#cd5c5c', 'Chestnut Rose'], + ['#cd8429', 'Brandy Punch'], + ['#cdf4ff', 'Onahau'], + ['#ceb98f', 'Sorrell Brown'], + ['#cebaba', 'Cold Turkey'], + ['#cec291', 'Yuma'], + ['#cec7a7', 'Chino'], + ['#cfa39d', 'Eunry'], + ['#cfb53b', 'Old Gold'], + ['#cfdccf', 'Tasman'], + ['#cfe5d2', 'Surf Crest'], + ['#cff9f3', 'Humming Bird'], + ['#cffaf4', 'Scandal'], + ['#d05f04', 'Red Stage'], + ['#d06da1', 'Hopbush'], + ['#d07d12', 'Meteor'], + ['#d0bef8', 'Perfume'], + ['#d0c0e5', 'Prelude'], + ['#d0f0c0', 'Tea Green'], + ['#d18f1b', 'Geebung'], + ['#d1bea8', 'Vanilla'], + ['#d1c6b4', 'Soft Amber'], + ['#d1d2ca', 'Celeste'], + ['#d1d2dd', 'Mischka'], + ['#d1e231', 'Pear'], + ['#d2691e', 'Hot Cinnamon'], + ['#d27d46', 'Raw Sienna'], + ['#d29eaa', 'Careys Pink'], + ['#d2b48c', 'Tan'], + ['#d2da97', 'Deco'], + ['#d2f6de', 'Blue Romance'], + ['#d2f8b0', 'Gossip'], + ['#d3cbba', 'Sisal'], + ['#d3cdc5', 'Swirl'], + ['#d47494', 'Charm'], + ['#d4b6af', 'Clam Shell'], + ['#d4bf8d', 'Straw'], + ['#d4c4a8', 'Akaroa'], + ['#d4cd16', 'Bird Flower'], + ['#d4d7d9', 'Iron'], + ['#d4dfe2', 'Geyser'], + ['#d4e2fc', 'Hawkes Blue'], + ['#d54600', 'Grenadier'], + ['#d591a4', 'Can Can'], + ['#d59a6f', 'Whiskey'], + ['#d5d195', 'Winter Hazel'], + ['#d5f6e3', 'Granny Apple'], + ['#d69188', 'My Pink'], + ['#d6c562', 'Tacha'], + ['#d6cef6', 'Moon Raker'], + ['#d6d6d1', 'Quill Gray'], + ['#d6ffdb', 'Snowy Mint'], + ['#d7837f', 'New York Pink'], + ['#d7c498', 'Pavlova'], + ['#d7d0ff', 'Fog'], + ['#d84437', 'Valencia'], + ['#d87c63', 'Japonica'], + ['#d8bfd8', 'Thistle'], + ['#d8c2d5', 'Maverick'], + ['#d8fcfa', 'Foam'], + ['#d94972', 'Cabaret'], + ['#d99376', 'Burning Sand'], + ['#d9b99b', 'Cameo'], + ['#d9d6cf', 'Timberwolf'], + ['#d9dcc1', 'Tana'], + ['#d9e4f5', 'Link Water'], + ['#d9f7ff', 'Mabel'], + ['#da3287', 'Cerise'], + ['#da5b38', 'Flame Pea'], + ['#da6304', 'Bamboo'], + ['#da6a41', 'Red Damask'], + ['#da70d6', 'Orchid'], + ['#da8a67', 'Copperfield'], + ['#daa520', 'Golden Grass'], + ['#daecd6', 'Zanah'], + ['#daf4f0', 'Iceberg'], + ['#dafaff', 'Oyster Bay'], + ['#db5079', 'Cranberry'], + ['#db9690', 'Petite Orchid'], + ['#db995e', 'Di Serria'], + ['#dbdbdb', 'Alto'], + ['#dbfff8', 'Frosted Mint'], + ['#dc143c', 'Crimson'], + ['#dc4333', 'Punch'], + ['#dcb20c', 'Galliano'], + ['#dcb4bc', 'Blossom'], + ['#dcd747', 'Wattle'], + ['#dcd9d2', 'Westar'], + ['#dcddcc', 'Moon Mist'], + ['#dcedb4', 'Caper'], + ['#dcf0ea', 'Swans Down'], + ['#ddd6d5', 'Swiss Coffee'], + ['#ddf9f1', 'White Ice'], + ['#de3163', 'Cerise Red'], + ['#de6360', 'Roman'], + ['#dea681', 'Tumbleweed'], + ['#deba13', 'Gold Tips'], + ['#dec196', 'Brandy'], + ['#decbc6', 'Wafer'], + ['#ded4a4', 'Sapling'], + ['#ded717', 'Barberry'], + ['#dee5c0', 'Beryl Green'], + ['#def5ff', 'Pattens Blue'], + ['#df73ff', 'Heliotrope'], + ['#dfbe6f', 'Apache'], + ['#dfcd6f', 'Chenin'], + ['#dfcfdb', 'Lola'], + ['#dfecda', 'Willow Brook'], + ['#dfff00', 'Chartreuse Yellow'], + ['#e0b0ff', 'Mauve'], + ['#e0b646', 'Anzac'], + ['#e0b974', 'Harvest Gold'], + ['#e0c095', 'Calico'], + ['#e0ffff', 'Baby Blue'], + ['#e16865', 'Sunglo'], + ['#e1bc64', 'Equator'], + ['#e1c0c8', 'Pink Flare'], + ['#e1e6d6', 'Periglacial Blue'], + ['#e1ead4', 'Kidnapper'], + ['#e1f6e8', 'Tara'], + ['#e25465', 'Mandy'], + ['#e2725b', 'Terracotta'], + ['#e28913', 'Golden Bell'], + ['#e292c0', 'Shocking'], + ['#e29418', 'Dixie'], + ['#e29cd2', 'Light Orchid'], + ['#e2d8ed', 'Snuff'], + ['#e2ebed', 'Mystic'], + ['#e2f3ec', 'Apple Green'], + ['#e30b5c', 'Razzmatazz'], + ['#e32636', 'Alizarin Crimson'], + ['#e34234', 'Cinnabar'], + ['#e3bebe', 'Cavern Pink'], + ['#e3f5e1', 'Peppermint'], + ['#e3f988', 'Mindaro'], + ['#e47698', 'Deep Blush'], + ['#e49b0f', 'Gamboge'], + ['#e4c2d5', 'Melanie'], + ['#e4cfde', 'Twilight'], + ['#e4d1c0', 'Bone'], + ['#e4d422', 'Sunflower'], + ['#e4d5b7', 'Grain Brown'], + ['#e4d69b', 'Zombie'], + ['#e4f6e7', 'Frostee'], + ['#e4ffd1', 'Snow Flurry'], + ['#e52b50', 'Amaranth'], + ['#e5841b', 'Zest'], + ['#e5ccc9', 'Dust Storm'], + ['#e5d7bd', 'Stark White'], + ['#e5d8af', 'Hampton'], + ['#e5e0e1', 'Bon Jour'], + ['#e5e5e5', 'Mercury'], + ['#e5f9f6', 'Polar'], + ['#e64e03', 'Trinidad'], + ['#e6be8a', 'Gold Sand'], + ['#e6bea5', 'Cashmere'], + ['#e6d7b9', 'Double Spanish White'], + ['#e6e4d4', 'Satin Linen'], + ['#e6f2ea', 'Harp'], + ['#e6f8f3', 'Off Green'], + ['#e6ffe9', 'Hint Of Green'], + ['#e6ffff', 'Tranquil'], + ['#e77200', 'Mango Tango'], + ['#e7730a', 'Christine'], + ['#e79f8c', 'Tonys Pink'], + ['#e79fc4', 'Kobi'], + ['#e7bcb4', 'Rose Fog'], + ['#e7bf05', 'Corn'], + ['#e7cd8c', 'Putty'], + ['#e7ece6', 'Gray Nurse'], + ['#e7f8ff', 'Lily White'], + ['#e7feff', 'Bubbles'], + ['#e89928', 'Fire Bush'], + ['#e8b9b3', 'Shilo'], + ['#e8e0d5', 'Pearl Bush'], + ['#e8ebe0', 'Green White'], + ['#e8f1d4', 'Chrome White'], + ['#e8f2eb', 'Gin'], + ['#e8f5f2', 'Aqua Squeeze'], + ['#e96e00', 'Clementine'], + ['#e97451', 'Burnt Sienna'], + ['#e97c07', 'Tahiti Gold'], + ['#e9cecd', 'Oyster Pink'], + ['#e9d75a', 'Confetti'], + ['#e9e3e3', 'Ebb'], + ['#e9f8ed', 'Ottoman'], + ['#e9fffd', 'Clear Day'], + ['#ea88a8', 'Carissma'], + ['#eaae69', 'Porsche'], + ['#eab33b', 'Tulip Tree'], + ['#eac674', 'Rob Roy'], + ['#eadab8', 'Raffia'], + ['#eae8d4', 'White Rock'], + ['#eaf6ee', 'Panache'], + ['#eaf6ff', 'Solitude'], + ['#eaf9f5', 'Aqua Spring'], + ['#eafffe', 'Dew'], + ['#eb9373', 'Apricot'], + ['#ebc2af', 'Zinnwaldite'], + ['#eca927', 'Fuel Yellow'], + ['#ecc54e', 'Ronchi'], + ['#ecc7ee', 'French Lilac'], + ['#eccdb9', 'Just Right'], + ['#ece090', 'Wild Rice'], + ['#ecebbd', 'Fall Green'], + ['#ecebce', 'Aths Special'], + ['#ecf245', 'Starship'], + ['#ed0a3f', 'Red Ribbon'], + ['#ed7a1c', 'Tango'], + ['#ed9121', 'Carrot Orange'], + ['#ed989e', 'Sea Pink'], + ['#edb381', 'Tacao'], + ['#edc9af', 'Desert Sand'], + ['#edcdab', 'Pancho'], + ['#eddcb1', 'Chamois'], + ['#edea99', 'Primrose'], + ['#edf5dd', 'Frost'], + ['#edf5f5', 'Aqua Haze'], + ['#edf6ff', 'Zumthor'], + ['#edf9f1', 'Narvik'], + ['#edfc84', 'Honeysuckle'], + ['#ee82ee', 'Lavender Magenta'], + ['#eec1be', 'Beauty Bush'], + ['#eed794', 'Chalky'], + ['#eed9c4', 'Almond'], + ['#eedc82', 'Flax'], + ['#eededa', 'Bizarre'], + ['#eee3ad', 'Double Colonial White'], + ['#eeeee8', 'Cararra'], + ['#eeef78', 'Manz'], + ['#eef0c8', 'Tahuna Sands'], + ['#eef0f3', 'Athens Gray'], + ['#eef3c3', 'Tusk'], + ['#eef4de', 'Loafer'], + ['#eef6f7', 'Catskill White'], + ['#eefdff', 'Twilight Blue'], + ['#eeff9a', 'Jonquil'], + ['#eeffe2', 'Rice Flower'], + ['#ef863f', 'Jaffa'], + ['#efefef', 'Gallery'], + ['#eff2f3', 'Porcelain'], + ['#f091a9', 'Mauvelous'], + ['#f0d52d', 'Golden Dream'], + ['#f0db7d', 'Golden Sand'], + ['#f0dc82', 'Buff'], + ['#f0e2ec', 'Prim'], + ['#f0e68c', 'Khaki'], + ['#f0eefd', 'Selago'], + ['#f0eeff', 'Titan White'], + ['#f0f8ff', 'Alice Blue'], + ['#f0fcea', 'Feta'], + ['#f18200', 'Gold Drop'], + ['#f19bab', 'Wewak'], + ['#f1e788', 'Sahara Sand'], + ['#f1e9d2', 'Parchment'], + ['#f1e9ff', 'Blue Chalk'], + ['#f1eec1', 'Mint Julep'], + ['#f1f1f1', 'Seashell'], + ['#f1f7f2', 'Saltpan'], + ['#f1ffad', 'Tidal'], + ['#f1ffc8', 'Chiffon'], + ['#f2552a', 'Flamingo'], + ['#f28500', 'Tangerine'], + ['#f2c3b2', 'Mandys Pink'], + ['#f2f2f2', 'Concrete'], + ['#f2fafa', 'Black Squeeze'], + ['#f34723', 'Pomegranate'], + ['#f3ad16', 'Buttercup'], + ['#f3d69d', 'New Orleans'], + ['#f3d9df', 'Vanilla Ice'], + ['#f3e7bb', 'Sidecar'], + ['#f3e9e5', 'Dawn Pink'], + ['#f3edcf', 'Wheatfield'], + ['#f3fb62', 'Canary'], + ['#f3fbd4', 'Orinoco'], + ['#f3ffd8', 'Carla'], + ['#f400a1', 'Hollywood Cerise'], + ['#f4a460', 'Sandy brown'], + ['#f4c430', 'Saffron'], + ['#f4d81c', 'Ripe Lemon'], + ['#f4ebd3', 'Janna'], + ['#f4f2ee', 'Pampas'], + ['#f4f4f4', 'Wild Sand'], + ['#f4f8ff', 'Zircon'], + ['#f57584', 'Froly'], + ['#f5c85c', 'Cream Can'], + ['#f5c999', 'Manhattan'], + ['#f5d5a0', 'Maize'], + ['#f5deb3', 'Wheat'], + ['#f5e7a2', 'Sandwisp'], + ['#f5e7e2', 'Pot Pourri'], + ['#f5e9d3', 'Albescent White'], + ['#f5edef', 'Soft Peach'], + ['#f5f3e5', 'Ecru White'], + ['#f5f5dc', 'Beige'], + ['#f5fb3d', 'Golden Fizz'], + ['#f5ffbe', 'Australian Mint'], + ['#f64a8a', 'French Rose'], + ['#f653a6', 'Brilliant Rose'], + ['#f6a4c9', 'Illusion'], + ['#f6f0e6', 'Merino'], + ['#f6f7f7', 'Black Haze'], + ['#f6ffdc', 'Spring Sun'], + ['#f7468a', 'Violet Red'], + ['#f77703', 'Chilean Fire'], + ['#f77fbe', 'Persian Pink'], + ['#f7b668', 'Rajah'], + ['#f7c8da', 'Azalea'], + ['#f7dbe6', 'We Peep'], + ['#f7f2e1', 'Quarter Spanish White'], + ['#f7f5fa', 'Whisper'], + ['#f7faf7', 'Snow Drift'], + ['#f8b853', 'Casablanca'], + ['#f8c3df', 'Chantilly'], + ['#f8d9e9', 'Cherub'], + ['#f8db9d', 'Marzipan'], + ['#f8dd5c', 'Energy Yellow'], + ['#f8e4bf', 'Givry'], + ['#f8f0e8', 'White Linen'], + ['#f8f4ff', 'Magnolia'], + ['#f8f6f1', 'Spring Wood'], + ['#f8f7dc', 'Coconut Cream'], + ['#f8f7fc', 'White Lilac'], + ['#f8f8f7', 'Desert Storm'], + ['#f8f99c', 'Texas'], + ['#f8facd', 'Corn Field'], + ['#f8fdd3', 'Mimosa'], + ['#f95a61', 'Carnation'], + ['#f9bf58', 'Saffron Mango'], + ['#f9e0ed', 'Carousel Pink'], + ['#f9e4bc', 'Dairy Cream'], + ['#f9e663', 'Portica'], + ['#f9eaf3', 'Amour'], + ['#f9f8e4', 'Rum Swizzle'], + ['#f9ff8b', 'Dolly'], + ['#f9fff6', 'Sugar Cane'], + ['#fa7814', 'Ecstasy'], + ['#fa9d5a', 'Tan Hide'], + ['#fad3a2', 'Corvette'], + ['#fadfad', 'Peach Yellow'], + ['#fae600', 'Turbo'], + ['#faeab9', 'Astra'], + ['#faeccc', 'Champagne'], + ['#faf0e6', 'Linen'], + ['#faf3f0', 'Fantasy'], + ['#faf7d6', 'Citrine White'], + ['#fafafa', 'Alabaster'], + ['#fafde4', 'Hint Of Yellow'], + ['#faffa4', 'Milan'], + ['#fb607f', 'Brink Pink'], + ['#fb8989', 'Geraldine'], + ['#fba0e3', 'Lavender Rose'], + ['#fba129', 'Sea Buckthorn'], + ['#fbac13', 'Sun'], + ['#fbaed2', 'Lavender Pink'], + ['#fbb2a3', 'Rose Bud'], + ['#fbbeda', 'Cupid'], + ['#fbcce7', 'Classic Rose'], + ['#fbceb1', 'Apricot Peach'], + ['#fbe7b2', 'Banana Mania'], + ['#fbe870', 'Marigold Yellow'], + ['#fbe96c', 'Festival'], + ['#fbea8c', 'Sweet Corn'], + ['#fbec5d', 'Candy Corn'], + ['#fbf9f9', 'Hint Of Red'], + ['#fbffba', 'Shalimar'], + ['#fc0fc0', 'Shocking Pink'], + ['#fc80a5', 'Tickle Me Pink'], + ['#fc9c1d', 'Tree Poppy'], + ['#fcc01e', 'Lightning Yellow'], + ['#fcd667', 'Goldenrod'], + ['#fcd917', 'Candlelight'], + ['#fcda98', 'Cherokee'], + ['#fcf4d0', 'Double Pearl Lusta'], + ['#fcf4dc', 'Pearl Lusta'], + ['#fcf8f7', 'Vista White'], + ['#fcfbf3', 'Bianca'], + ['#fcfeda', 'Moon Glow'], + ['#fcffe7', 'China Ivory'], + ['#fcfff9', 'Ceramic'], + ['#fd0e35', 'Torch Red'], + ['#fd5b78', 'Wild Watermelon'], + ['#fd7b33', 'Crusta'], + ['#fd7c07', 'Sorbus'], + ['#fd9fa2', 'Sweet Pink'], + ['#fdd5b1', 'Light Apricot'], + ['#fdd7e4', 'Pig Pink'], + ['#fde1dc', 'Cinderella'], + ['#fde295', 'Golden Glow'], + ['#fde910', 'Lemon'], + ['#fdf5e6', 'Old Lace'], + ['#fdf6d3', 'Half Colonial White'], + ['#fdf7ad', 'Drover'], + ['#fdfeb8', 'Pale Prim'], + ['#fdffd5', 'Cumulus'], + ['#fe28a2', 'Persian Rose'], + ['#fe4c40', 'Sunset Orange'], + ['#fe6f5e', 'Bittersweet'], + ['#fe9d04', 'California'], + ['#fea904', 'Yellow Sea'], + ['#febaad', 'Melon'], + ['#fed33c', 'Bright Sun'], + ['#fed85d', 'Dandelion'], + ['#fedb8d', 'Salomie'], + ['#fee5ac', 'Cape Honey'], + ['#feebf3', 'Remy'], + ['#feefce', 'Oasis'], + ['#fef0ec', 'Bridesmaid'], + ['#fef2c7', 'Beeswax'], + ['#fef3d8', 'Bleach White'], + ['#fef4cc', 'Pipi'], + ['#fef4db', 'Half Spanish White'], + ['#fef4f8', 'Wisp Pink'], + ['#fef5f1', 'Provincial Pink'], + ['#fef7de', 'Half Dutch White'], + ['#fef8e2', 'Solitaire'], + ['#fef8ff', 'White Pointer'], + ['#fef9e3', 'Off Yellow'], + ['#fefced', 'Orange White'], + ['#ff0000', 'Red'], + ['#ff007f', 'Rose'], + ['#ff00cc', 'Purple Pizzazz'], + ['#ff00ff', 'Magenta Fuchsia'], + ['#ff2400', 'Scarlet'], + ['#ff3399', 'Wild Strawberry'], + ['#ff33cc', 'Razzle Dazzle Rose'], + ['#ff355e', 'Radical Red'], + ['#ff3f34', 'Red Orange'], + ['#ff4040', 'Coral Red'], + ['#ff4d00', 'Vermilion'], + ['#ff4f00', 'International Orange'], + ['#ff6037', 'Outrageous Orange'], + ['#ff6600', 'Blaze Orange'], + ['#ff66ff', 'Pink Flamingo'], + ['#ff681f', 'Orange'], + ['#ff69b4', 'Hot Pink'], + ['#ff6b53', 'Persimmon'], + ['#ff6fff', 'Blush Pink'], + ['#ff7034', 'Burning Orange'], + ['#ff7518', 'Pumpkin'], + ['#ff7d07', 'Flamenco'], + ['#ff7f00', 'Flush Orange'], + ['#ff7f50', 'Coral'], + ['#ff8c69', 'Salmon'], + ['#ff9000', 'Pizazz'], + ['#ff910f', 'West Side'], + ['#ff91a4', 'Pink Salmon'], + ['#ff9933', 'Neon Carrot'], + ['#ff9966', 'Atomic Tangerine'], + ['#ff9980', 'Vivid Tangerine'], + ['#ff9e2c', 'Sunshade'], + ['#ffa000', 'Orange Peel'], + ['#ffa194', 'Mona Lisa'], + ['#ffa500', 'Web Orange'], + ['#ffa6c9', 'Carnation Pink'], + ['#ffab81', 'Hit Pink'], + ['#ffae42', 'Yellow Orange'], + ['#ffb0ac', 'Cornflower Lilac'], + ['#ffb1b3', 'Sundown'], + ['#ffb31f', 'My Sin'], + ['#ffb555', 'Texas Rose'], + ['#ffb7d5', 'Cotton Candy'], + ['#ffb97b', 'Macaroni And Cheese'], + ['#ffba00', 'Selective Yellow'], + ['#ffbd5f', 'Koromiko'], + ['#ffbf00', 'Amber'], + ['#ffc0a8', 'Wax Flower'], + ['#ffc0cb', 'Pink'], + ['#ffc3c0', 'Your Pink'], + ['#ffc901', 'Supernova'], + ['#ffcba4', 'Flesh'], + ['#ffcc33', 'Sunglow'], + ['#ffcc5c', 'Golden Tainoi'], + ['#ffcc99', 'Peach Orange'], + ['#ffcd8c', 'Chardonnay'], + ['#ffd1dc', 'Pastel Pink'], + ['#ffd2b7', 'Romantic'], + ['#ffd38c', 'Grandis'], + ['#ffd700', 'Gold'], + ['#ffd800', 'School Bus Yellow'], + ['#ffd8d9', 'Cosmos'], + ['#ffdb58', 'Mustard'], + ['#ffdcd6', 'Peach Schnapps'], + ['#ffddaf', 'Caramel'], + ['#ffddcd', 'Tuft Bush'], + ['#ffddcf', 'Watusi'], + ['#ffddf4', 'Pink Lace'], + ['#ffdead', 'Navajo White'], + ['#ffdeb3', 'Frangipani'], + ['#ffe1df', 'Pippin'], + ['#ffe1f2', 'Pale Rose'], + ['#ffe2c5', 'Negroni'], + ['#ffe5a0', 'Cream Brulee'], + ['#ffe5b4', 'Peach'], + ['#ffe6c7', 'Tequila'], + ['#ffe772', 'Kournikova'], + ['#ffeac8', 'Sandy Beach'], + ['#ffead4', 'Karry'], + ['#ffec13', 'Broom'], + ['#ffedbc', 'Colonial White'], + ['#ffeed8', 'Derby'], + ['#ffefa1', 'Vis Vis'], + ['#ffefc1', 'Egg White'], + ['#ffefd5', 'Papaya Whip'], + ['#ffefec', 'Fair Pink'], + ['#fff0db', 'Peach Cream'], + ['#fff0f5', 'Lavender Blush'], + ['#fff14f', 'Gorse'], + ['#fff1b5', 'Buttermilk'], + ['#fff1d8', 'Pink Lady'], + ['#fff1ee', 'Forget Me Not'], + ['#fff1f9', 'Tutu'], + ['#fff39d', 'Picasso'], + ['#fff3f1', 'Chardon'], + ['#fff46e', 'Paris Daisy'], + ['#fff4ce', 'Barley White'], + ['#fff4dd', 'Egg Sour'], + ['#fff4e0', 'Sazerac'], + ['#fff4e8', 'Serenade'], + ['#fff4f3', 'Chablis'], + ['#fff5ee', 'Seashell Peach'], + ['#fff5f3', 'Sauvignon'], + ['#fff6d4', 'Milk Punch'], + ['#fff6df', 'Varden'], + ['#fff6f5', 'Rose White'], + ['#fff8d1', 'Baja White'], + ['#fff9e2', 'Gin Fizz'], + ['#fff9e6', 'Early Dawn'], + ['#fffacd', 'Lemon Chiffon'], + ['#fffaf4', 'Bridal Heath'], + ['#fffbdc', 'Scotch Mist'], + ['#fffbf9', 'Soapstone'], + ['#fffc99', 'Witch Haze'], + ['#fffcea', 'Buttery White'], + ['#fffcee', 'Island Spice'], + ['#fffdd0', 'Cream'], + ['#fffde6', 'Chilean Heath'], + ['#fffde8', 'Travertine'], + ['#fffdf3', 'Orchid White'], + ['#fffdf4', 'Quarter Pearl Lusta'], + ['#fffee1', 'Half And Half'], + ['#fffeec', 'Apricot White'], + ['#fffef0', 'Rice Cake'], + ['#fffef6', 'Black White'], + ['#fffefd', 'Romance'], + ['#ffff00', 'Yellow'], + ['#ffff66', 'Laser Lemon'], + ['#ffff99', 'Pale Canary'], + ['#ffffb4', 'Portafino'], + ['#fffff0', 'Ivory'], + ['#ffffff', 'White'] +]; + +/** + * Map Of hex color values to color names + * + * - key: hex value + * - value: color name + */ +export const colorNameMap = colorNames.reduce>((acc, [hex, name]) => { + acc[hex] = name; + return acc; +}, {}); diff --git a/packages/color/src/constant/palette.ts b/packages/color/src/constant/palette.ts new file mode 100644 index 0000000..9f62664 --- /dev/null +++ b/packages/color/src/constant/palette.ts @@ -0,0 +1,356 @@ +import type { ColorPaletteFamily } from '../types'; + +export const colorPalettes: ColorPaletteFamily[] = [ + { + name: 'Slate', + palettes: [ + { hex: '#f8fafc', number: 50 }, + { hex: '#f1f5f9', number: 100 }, + { hex: '#e2e8f0', number: 200 }, + { hex: '#cbd5e1', number: 300 }, + { hex: '#94a3b8', number: 400 }, + { hex: '#64748b', number: 500 }, + { hex: '#475569', number: 600 }, + { hex: '#334155', number: 700 }, + { hex: '#1e293b', number: 800 }, + { hex: '#0f172a', number: 900 }, + { hex: '#020617', number: 950 } + ] + }, + { + name: 'Gray', + palettes: [ + { hex: '#f9fafb', number: 50 }, + { hex: '#f3f4f6', number: 100 }, + { hex: '#e5e7eb', number: 200 }, + { hex: '#d1d5db', number: 300 }, + { hex: '#9ca3af', number: 400 }, + { hex: '#6b7280', number: 500 }, + { hex: '#4b5563', number: 600 }, + { hex: '#374151', number: 700 }, + { hex: '#1f2937', number: 800 }, + { hex: '#111827', number: 900 }, + { hex: '#030712', number: 950 } + ] + }, + { + name: 'Zinc', + palettes: [ + { hex: '#fafafa', number: 50 }, + { hex: '#f4f4f5', number: 100 }, + { hex: '#e4e4e7', number: 200 }, + { hex: '#d4d4d8', number: 300 }, + { hex: '#a1a1aa', number: 400 }, + { hex: '#71717a', number: 500 }, + { hex: '#52525b', number: 600 }, + { hex: '#3f3f46', number: 700 }, + { hex: '#27272a', number: 800 }, + { hex: '#18181b', number: 900 }, + { hex: '#09090b', number: 950 } + ] + }, + { + name: 'Neutral', + palettes: [ + { hex: '#fafafa', number: 50 }, + { hex: '#f5f5f5', number: 100 }, + { hex: '#e5e5e5', number: 200 }, + { hex: '#d4d4d4', number: 300 }, + { hex: '#a3a3a3', number: 400 }, + { hex: '#737373', number: 500 }, + { hex: '#525252', number: 600 }, + { hex: '#404040', number: 700 }, + { hex: '#262626', number: 800 }, + { hex: '#171717', number: 900 }, + { hex: '#0a0a0a', number: 950 } + ] + }, + { + name: 'Stone', + palettes: [ + { hex: '#fafaf9', number: 50 }, + { hex: '#f5f5f4', number: 100 }, + { hex: '#e7e5e4', number: 200 }, + { hex: '#d6d3d1', number: 300 }, + { hex: '#a8a29e', number: 400 }, + { hex: '#78716c', number: 500 }, + { hex: '#57534e', number: 600 }, + { hex: '#44403c', number: 700 }, + { hex: '#292524', number: 800 }, + { hex: '#1c1917', number: 900 }, + { hex: '#0c0a09', number: 950 } + ] + }, + { + name: 'Red', + palettes: [ + { hex: '#fef2f2', number: 50 }, + { hex: '#fee2e2', number: 100 }, + { hex: '#fecaca', number: 200 }, + { hex: '#fca5a5', number: 300 }, + { hex: '#f87171', number: 400 }, + { hex: '#ef4444', number: 500 }, + { hex: '#dc2626', number: 600 }, + { hex: '#b91c1c', number: 700 }, + { hex: '#991b1b', number: 800 }, + { hex: '#7f1d1d', number: 900 }, + { hex: '#450a0a', number: 950 } + ] + }, + { + name: 'Orange', + palettes: [ + { hex: '#fff7ed', number: 50 }, + { hex: '#ffedd5', number: 100 }, + { hex: '#fed7aa', number: 200 }, + { hex: '#fdba74', number: 300 }, + { hex: '#fb923c', number: 400 }, + { hex: '#f97316', number: 500 }, + { hex: '#ea580c', number: 600 }, + { hex: '#c2410c', number: 700 }, + { hex: '#9a3412', number: 800 }, + { hex: '#7c2d12', number: 900 }, + { hex: '#431407', number: 950 } + ] + }, + { + name: 'Amber', + palettes: [ + { hex: '#fffbeb', number: 50 }, + { hex: '#fef3c7', number: 100 }, + { hex: '#fde68a', number: 200 }, + { hex: '#fcd34d', number: 300 }, + { hex: '#fbbf24', number: 400 }, + { hex: '#f59e0b', number: 500 }, + { hex: '#d97706', number: 600 }, + { hex: '#b45309', number: 700 }, + { hex: '#92400e', number: 800 }, + { hex: '#78350f', number: 900 }, + { hex: '#451a03', number: 950 } + ] + }, + { + name: 'Yellow', + palettes: [ + { hex: '#fefce8', number: 50 }, + { hex: '#fef9c3', number: 100 }, + { hex: '#fef08a', number: 200 }, + { hex: '#fde047', number: 300 }, + { hex: '#facc15', number: 400 }, + { hex: '#eab308', number: 500 }, + { hex: '#ca8a04', number: 600 }, + { hex: '#a16207', number: 700 }, + { hex: '#854d0e', number: 800 }, + { hex: '#713f12', number: 900 }, + { hex: '#422006', number: 950 } + ] + }, + { + name: 'Lime', + palettes: [ + { hex: '#f7fee7', number: 50 }, + { hex: '#ecfccb', number: 100 }, + { hex: '#d9f99d', number: 200 }, + { hex: '#bef264', number: 300 }, + { hex: '#a3e635', number: 400 }, + { hex: '#84cc16', number: 500 }, + { hex: '#65a30d', number: 600 }, + { hex: '#4d7c0f', number: 700 }, + { hex: '#3f6212', number: 800 }, + { hex: '#365314', number: 900 }, + { hex: '#1a2e05', number: 950 } + ] + }, + { + name: 'Green', + palettes: [ + { hex: '#f0fdf4', number: 50 }, + { hex: '#dcfce7', number: 100 }, + { hex: '#bbf7d0', number: 200 }, + { hex: '#86efac', number: 300 }, + { hex: '#4ade80', number: 400 }, + { hex: '#22c55e', number: 500 }, + { hex: '#16a34a', number: 600 }, + { hex: '#15803d', number: 700 }, + { hex: '#166534', number: 800 }, + { hex: '#14532d', number: 900 }, + { hex: '#052e16', number: 950 } + ] + }, + { + name: 'Emerald', + palettes: [ + { hex: '#ecfdf5', number: 50 }, + { hex: '#d1fae5', number: 100 }, + { hex: '#a7f3d0', number: 200 }, + { hex: '#6ee7b7', number: 300 }, + { hex: '#34d399', number: 400 }, + { hex: '#10b981', number: 500 }, + { hex: '#059669', number: 600 }, + { hex: '#047857', number: 700 }, + { hex: '#065f46', number: 800 }, + { hex: '#064e3b', number: 900 }, + { hex: '#022c22', number: 950 } + ] + }, + { + name: 'Teal', + palettes: [ + { hex: '#f0fdfa', number: 50 }, + { hex: '#ccfbf1', number: 100 }, + { hex: '#99f6e4', number: 200 }, + { hex: '#5eead4', number: 300 }, + { hex: '#2dd4bf', number: 400 }, + { hex: '#14b8a6', number: 500 }, + { hex: '#0d9488', number: 600 }, + { hex: '#0f766e', number: 700 }, + { hex: '#115e59', number: 800 }, + { hex: '#134e4a', number: 900 }, + { hex: '#042f2e', number: 950 } + ] + }, + { + name: 'Cyan', + palettes: [ + { hex: '#ecfeff', number: 50 }, + { hex: '#cffafe', number: 100 }, + { hex: '#a5f3fc', number: 200 }, + { hex: '#67e8f9', number: 300 }, + { hex: '#22d3ee', number: 400 }, + { hex: '#06b6d4', number: 500 }, + { hex: '#0891b2', number: 600 }, + { hex: '#0e7490', number: 700 }, + { hex: '#155e75', number: 800 }, + { hex: '#164e63', number: 900 }, + { hex: '#083344', number: 950 } + ] + }, + { + name: 'Sky', + palettes: [ + { hex: '#f0f9ff', number: 50 }, + { hex: '#e0f2fe', number: 100 }, + { hex: '#bae6fd', number: 200 }, + { hex: '#7dd3fc', number: 300 }, + { hex: '#38bdf8', number: 400 }, + { hex: '#0ea5e9', number: 500 }, + { hex: '#0284c7', number: 600 }, + { hex: '#0369a1', number: 700 }, + { hex: '#075985', number: 800 }, + { hex: '#0c4a6e', number: 900 }, + { hex: '#082f49', number: 950 } + ] + }, + { + name: 'Blue', + palettes: [ + { hex: '#eff6ff', number: 50 }, + { hex: '#dbeafe', number: 100 }, + { hex: '#bfdbfe', number: 200 }, + { hex: '#93c5fd', number: 300 }, + { hex: '#60a5fa', number: 400 }, + { hex: '#3b82f6', number: 500 }, + { hex: '#2563eb', number: 600 }, + { hex: '#1d4ed8', number: 700 }, + { hex: '#1e40af', number: 800 }, + { hex: '#1e3a8a', number: 900 }, + { hex: '#172554', number: 950 } + ] + }, + { + name: 'Indigo', + palettes: [ + { hex: '#eef2ff', number: 50 }, + { hex: '#e0e7ff', number: 100 }, + { hex: '#c7d2fe', number: 200 }, + { hex: '#a5b4fc', number: 300 }, + { hex: '#818cf8', number: 400 }, + { hex: '#6366f1', number: 500 }, + { hex: '#4f46e5', number: 600 }, + { hex: '#4338ca', number: 700 }, + { hex: '#3730a3', number: 800 }, + { hex: '#312e81', number: 900 }, + { hex: '#1e1b4b', number: 950 } + ] + }, + { + name: 'Violet', + palettes: [ + { hex: '#f5f3ff', number: 50 }, + { hex: '#ede9fe', number: 100 }, + { hex: '#ddd6fe', number: 200 }, + { hex: '#c4b5fd', number: 300 }, + { hex: '#a78bfa', number: 400 }, + { hex: '#8b5cf6', number: 500 }, + { hex: '#7c3aed', number: 600 }, + { hex: '#6d28d9', number: 700 }, + { hex: '#5b21b6', number: 800 }, + { hex: '#4c1d95', number: 900 }, + { hex: '#2e1065', number: 950 } + ] + }, + { + name: 'Purple', + palettes: [ + { hex: '#faf5ff', number: 50 }, + { hex: '#f3e8ff', number: 100 }, + { hex: '#e9d5ff', number: 200 }, + { hex: '#d8b4fe', number: 300 }, + { hex: '#c084fc', number: 400 }, + { hex: '#a855f7', number: 500 }, + { hex: '#9333ea', number: 600 }, + { hex: '#7e22ce', number: 700 }, + { hex: '#6b21a8', number: 800 }, + { hex: '#581c87', number: 900 }, + { hex: '#3b0764', number: 950 } + ] + }, + { + name: 'Fuchsia', + palettes: [ + { hex: '#fdf4ff', number: 50 }, + { hex: '#fae8ff', number: 100 }, + { hex: '#f5d0fe', number: 200 }, + { hex: '#f0abfc', number: 300 }, + { hex: '#e879f9', number: 400 }, + { hex: '#d946ef', number: 500 }, + { hex: '#c026d3', number: 600 }, + { hex: '#a21caf', number: 700 }, + { hex: '#86198f', number: 800 }, + { hex: '#701a75', number: 900 }, + { hex: '#4a044e', number: 950 } + ] + }, + { + name: 'Pink', + palettes: [ + { hex: '#fdf2f8', number: 50 }, + { hex: '#fce7f3', number: 100 }, + { hex: '#fbcfe8', number: 200 }, + { hex: '#f9a8d4', number: 300 }, + { hex: '#f472b6', number: 400 }, + { hex: '#ec4899', number: 500 }, + { hex: '#db2777', number: 600 }, + { hex: '#be185d', number: 700 }, + { hex: '#9d174d', number: 800 }, + { hex: '#831843', number: 900 }, + { hex: '#500724', number: 950 } + ] + }, + { + name: 'Rose', + palettes: [ + { hex: '#fff1f2', number: 50 }, + { hex: '#ffe4e6', number: 100 }, + { hex: '#fecdd3', number: 200 }, + { hex: '#fda4af', number: 300 }, + { hex: '#fb7185', number: 400 }, + { hex: '#f43f5e', number: 500 }, + { hex: '#e11d48', number: 600 }, + { hex: '#be123c', number: 700 }, + { hex: '#9f1239', number: 800 }, + { hex: '#881337', number: 900 }, + { hex: '#4c0519', number: 950 } + ] + } +]; diff --git a/packages/color/src/index.ts b/packages/color/src/index.ts new file mode 100644 index 0000000..42a4d54 --- /dev/null +++ b/packages/color/src/index.ts @@ -0,0 +1,7 @@ +import { colorPalettes } from './constant'; + +export * from './palette'; +export * from './shared'; +export { colorPalettes }; + +export * from './types'; diff --git a/packages/color/src/palette/antd.ts b/packages/color/src/palette/antd.ts new file mode 100644 index 0000000..c3d5b48 --- /dev/null +++ b/packages/color/src/palette/antd.ts @@ -0,0 +1,176 @@ +import type { AnyColor, HsvColor } from 'colord'; +import { getHex, getHsv, isValidColor, mixColor } from '../shared'; +import type { ColorIndex } from '../types'; + +/** Hue step */ +const hueStep = 2; +/** Saturation step, light color part */ +const saturationStep = 16; +/** Saturation step, dark color part */ +const saturationStep2 = 5; +/** Brightness step, light color part */ +const brightnessStep1 = 5; +/** Brightness step, dark color part */ +const brightnessStep2 = 15; +/** Light color count, main color up */ +const lightColorCount = 5; +/** Dark color count, main color down */ +const darkColorCount = 4; + +/** + * Get AntD palette color by index + * + * @param color - Color + * @param index - The color index of color palette (the main color index is 6) + * @returns Hex color + */ +export function getAntDPaletteColorByIndex(color: AnyColor, index: ColorIndex): string { + if (!isValidColor(color)) { + throw new Error('invalid input color value'); + } + + if (index === 6) { + return getHex(color); + } + + const isLight = index < 6; + const hsv = getHsv(color); + const i = isLight ? lightColorCount + 1 - index : index - lightColorCount - 1; + + const newHsv: HsvColor = { + h: getHue(hsv, i, isLight), + s: getSaturation(hsv, i, isLight), + v: getValue(hsv, i, isLight) + }; + + return getHex(newHsv); +} + +/** Map of dark color index and opacity */ +const darkColorMap = [ + { index: 7, opacity: 0.15 }, + { index: 6, opacity: 0.25 }, + { index: 5, opacity: 0.3 }, + { index: 5, opacity: 0.45 }, + { index: 5, opacity: 0.65 }, + { index: 5, opacity: 0.85 }, + { index: 5, opacity: 0.9 }, + { index: 4, opacity: 0.93 }, + { index: 3, opacity: 0.95 }, + { index: 2, opacity: 0.97 }, + { index: 1, opacity: 0.98 } +]; + +/** + * Get AntD color palette + * + * @param color - Color + * @param darkTheme - Dark theme + * @param darkThemeMixColor - Dark theme mix color (default: #141414) + */ +export function getAntDColorPalette(color: AnyColor, darkTheme = false, darkThemeMixColor = '#141414'): string[] { + const indexes: ColorIndex[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; + + const patterns = indexes.map(index => getAntDPaletteColorByIndex(color, index)); + + if (darkTheme) { + const darkPatterns = darkColorMap.map(({ index, opacity }) => { + const darkColor = mixColor(darkThemeMixColor, patterns[index], opacity); + + return darkColor; + }); + + return darkPatterns.map(item => getHex(item)); + } + + return patterns; +} + +/** + * Get hue + * + * @param hsv - Hsv format color + * @param i - The relative distance from 6 + * @param isLight - Is light color + */ +function getHue(hsv: HsvColor, i: number, isLight: boolean) { + let hue: number; + + const hsvH = Math.round(hsv.h); + + if (hsvH >= 60 && hsvH <= 240) { + hue = isLight ? hsvH - hueStep * i : hsvH + hueStep * i; + } else { + hue = isLight ? hsvH + hueStep * i : hsvH - hueStep * i; + } + + if (hue < 0) { + hue += 360; + } + + if (hue >= 360) { + hue -= 360; + } + + return hue; +} + +/** + * Get saturation + * + * @param hsv - Hsv format color + * @param i - The relative distance from 6 + * @param isLight - Is light color + */ +function getSaturation(hsv: HsvColor, i: number, isLight: boolean) { + if (hsv.h === 0 && hsv.s === 0) { + return hsv.s; + } + + let saturation: number; + + if (isLight) { + saturation = hsv.s - saturationStep * i; + } else if (i === darkColorCount) { + saturation = hsv.s + saturationStep; + } else { + saturation = hsv.s + saturationStep2 * i; + } + + if (saturation > 100) { + saturation = 100; + } + + if (isLight && i === lightColorCount && saturation > 10) { + saturation = 10; + } + + if (saturation < 6) { + saturation = 6; + } + + return saturation; +} + +/** + * Get value of hsv + * + * @param hsv - Hsv format color + * @param i - The relative distance from 6 + * @param isLight - Is light color + */ +function getValue(hsv: HsvColor, i: number, isLight: boolean) { + let value: number; + + if (isLight) { + value = hsv.v + brightnessStep1 * i; + } else { + value = hsv.v - brightnessStep2 * i; + } + + if (value > 100) { + value = 100; + } + + return value; +} diff --git a/packages/color/src/palette/index.ts b/packages/color/src/palette/index.ts new file mode 100644 index 0000000..ba3b853 --- /dev/null +++ b/packages/color/src/palette/index.ts @@ -0,0 +1,45 @@ +import type { AnyColor } from 'colord'; +import { getHex } from '../shared'; +import type { ColorPaletteNumber } from '../types'; +import { getRecommendedColorPalette } from './recommend'; +import { getAntDColorPalette } from './antd'; + +/** + * get color palette by provided color + * + * @param color + * @param recommended whether to get recommended color palette (the provided color may not be the main color) + */ +export function getColorPalette(color: AnyColor, recommended = false) { + const colorMap = new Map(); + + if (recommended) { + const colorPalette = getRecommendedColorPalette(getHex(color)); + colorPalette.palettes.forEach(palette => { + colorMap.set(palette.number, palette.hex); + }); + } else { + const colors = getAntDColorPalette(color); + + const colorNumbers: ColorPaletteNumber[] = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950]; + + colorNumbers.forEach((number, index) => { + colorMap.set(number, colors[index]); + }); + } + + return colorMap; +} + +/** + * get color palette color by number + * + * @param color the provided color + * @param number the color palette number + * @param recommended whether to get recommended color palette (the provided color may not be the main color) + */ +export function getPaletteColorByNumber(color: AnyColor, number: ColorPaletteNumber, recommended = false) { + const colorMap = getColorPalette(color, recommended); + + return colorMap.get(number as ColorPaletteNumber)!; +} diff --git a/packages/color/src/palette/recommend.ts b/packages/color/src/palette/recommend.ts new file mode 100644 index 0000000..904cae2 --- /dev/null +++ b/packages/color/src/palette/recommend.ts @@ -0,0 +1,152 @@ +import { getColorName, getDeltaE, getHsl, isValidColor, transformHslToHex } from '../shared'; +import { colorPalettes } from '../constant'; +import type { + ColorPalette, + ColorPaletteFamily, + ColorPaletteFamilyWithNearestPalette, + ColorPaletteMatch, + ColorPaletteNumber +} from '../types'; + +/** + * get recommended color palette by provided color + * + * @param color the provided color + */ +export function getRecommendedColorPalette(color: string) { + const colorPaletteFamily = getRecommendedColorPaletteFamily(color); + + const colorMap = new Map(); + + colorPaletteFamily.palettes.forEach(palette => { + colorMap.set(palette.number, palette); + }); + + const mainColor = colorMap.get(500)!; + const matchColor = colorPaletteFamily.palettes.find(palette => palette.hex === color)!; + + const colorPalette: ColorPaletteMatch = { + ...colorPaletteFamily, + colorMap, + main: mainColor, + match: matchColor + }; + + return colorPalette; +} + +/** + * get recommended palette color by provided color + * + * @param color the provided color + * @param number the color palette number + */ +export function getRecommendedPaletteColorByNumber(color: string, number: ColorPaletteNumber) { + const colorPalette = getRecommendedColorPalette(color); + + const { hex } = colorPalette.colorMap.get(number)!; + + return hex; +} + +/** + * get color palette family by provided color and color name + * + * @param color the provided color + */ +export function getRecommendedColorPaletteFamily(color: string) { + if (!isValidColor(color)) { + throw new Error('Invalid color, please check color value!'); + } + + let colorName = getColorName(color); + + colorName = colorName.toLowerCase().replace(/\s/g, '-'); + + const { h: h1, s: s1 } = getHsl(color); + + const { nearestLightnessPalette, palettes } = getNearestColorPaletteFamily(color, colorPalettes); + + const { number, hex } = nearestLightnessPalette; + + const { h: h2, s: s2 } = getHsl(hex); + + const deltaH = h1 - h2; + + const sRatio = s1 / s2; + + const colorPaletteFamily: ColorPaletteFamily = { + name: colorName, + palettes: palettes.map(palette => { + let hexValue = color; + + const isSame = number === palette.number; + + if (!isSame) { + const { h: h3, s: s3, l } = getHsl(palette.hex); + + const newH = deltaH < 0 ? h3 + deltaH : h3 - deltaH; + const newS = s3 * sRatio; + + hexValue = transformHslToHex({ + h: newH, + s: newS, + l + }); + } + + return { + hex: hexValue, + number: palette.number + }; + }) + }; + + return colorPaletteFamily; +} + +/** + * get nearest color palette family + * + * @param color color + * @param families color palette families + */ +function getNearestColorPaletteFamily(color: string, families: ColorPaletteFamily[]) { + const familyWithConfig = families.map(family => { + const palettes = family.palettes.map(palette => { + return { + ...palette, + delta: getDeltaE(color, palette.hex) + }; + }); + + const nearestPalette = palettes.reduce((prev, curr) => (prev.delta < curr.delta ? prev : curr)); + + return { + ...family, + palettes, + nearestPalette + }; + }); + + const nearestPaletteFamily = familyWithConfig.reduce((prev, curr) => + prev.nearestPalette.delta < curr.nearestPalette.delta ? prev : curr + ); + + const { l } = getHsl(color); + + const paletteFamily: ColorPaletteFamilyWithNearestPalette = { + ...nearestPaletteFamily, + nearestLightnessPalette: nearestPaletteFamily.palettes.reduce((prev, curr) => { + const { l: prevLightness } = getHsl(prev.hex); + const { l: currLightness } = getHsl(curr.hex); + + const deltaPrev = Math.abs(prevLightness - l); + const deltaCurr = Math.abs(currLightness - l); + + return deltaPrev < deltaCurr ? prev : curr; + }) + }; + + return paletteFamily; +} diff --git a/packages/color/src/shared/colord.ts b/packages/color/src/shared/colord.ts new file mode 100644 index 0000000..4c52330 --- /dev/null +++ b/packages/color/src/shared/colord.ts @@ -0,0 +1,93 @@ +import { colord, extend } from 'colord'; +import namesPlugin from 'colord/plugins/names'; +import mixPlugin from 'colord/plugins/mix'; +import labPlugin from 'colord/plugins/lab'; +import type { AnyColor, HslColor, RgbColor } from 'colord'; + +extend([namesPlugin, mixPlugin, labPlugin]); + +export function isValidColor(color: AnyColor) { + return colord(color).isValid(); +} + +export function getHex(color: AnyColor) { + return colord(color).toHex(); +} + +export function getRgb(color: AnyColor) { + return colord(color).toRgb(); +} + +export function getHsl(color: AnyColor) { + return colord(color).toHsl(); +} + +export function getHsv(color: AnyColor) { + return colord(color).toHsv(); +} + +export function getDeltaE(color1: AnyColor, color2: AnyColor) { + return colord(color1).delta(color2); +} + +export function transformHslToHex(color: HslColor) { + return colord(color).toHex(); +} + +/** + * Add color alpha + * + * @param color - Color + * @param alpha - Alpha (0 - 1) + */ +export function addColorAlpha(color: AnyColor, alpha: number) { + return colord(color).alpha(alpha).toHex(); +} + +/** + * Mix color + * + * @param firstColor - First color + * @param secondColor - Second color + * @param ratio - The ratio of the second color (0 - 1) + */ +export function mixColor(firstColor: AnyColor, secondColor: AnyColor, ratio: number) { + return colord(firstColor).mix(secondColor, ratio).toHex(); +} + +/** + * Transform color with opacity to similar color without opacity + * + * @param color - Color + * @param alpha - Alpha (0 - 1) + * @param bgColor Background color (usually white or black) + */ +export function transformColorWithOpacity(color: AnyColor, alpha: number, bgColor = '#ffffff') { + const originColor = addColorAlpha(color, alpha); + const { r: oR, g: oG, b: oB } = colord(originColor).toRgb(); + + const { r: bgR, g: bgG, b: bgB } = colord(bgColor).toRgb(); + + function calRgb(or: number, bg: number, al: number) { + return bg + (or - bg) * al; + } + + const resultRgb: RgbColor = { + r: calRgb(oR, bgR, alpha), + g: calRgb(oG, bgG, alpha), + b: calRgb(oB, bgB, alpha) + }; + + return colord(resultRgb).toHex(); +} + +/** + * Is white color + * + * @param color - Color + */ +export function isWhiteColor(color: AnyColor) { + return colord(color).isEqual('#ffffff'); +} + +export { colord }; diff --git a/packages/color/src/shared/index.ts b/packages/color/src/shared/index.ts new file mode 100644 index 0000000..ae293ce --- /dev/null +++ b/packages/color/src/shared/index.ts @@ -0,0 +1,2 @@ +export * from './colord'; +export * from './name'; diff --git a/packages/color/src/shared/name.ts b/packages/color/src/shared/name.ts new file mode 100644 index 0000000..866bd33 --- /dev/null +++ b/packages/color/src/shared/name.ts @@ -0,0 +1,49 @@ +import { colorNames } from '../constant'; +import { getHex, getHsl, getRgb } from './colord'; + +/** + * Get color name + * + * @param color + */ +export function getColorName(color: string) { + const hex = getHex(color); + const rgb = getRgb(color); + const hsl = getHsl(color); + + let ndf = 0; + let ndf1 = 0; + let ndf2 = 0; + let cl = -1; + let df = -1; + + let name = ''; + + colorNames.some((item, index) => { + const [hexValue, colorName] = item; + + const match = hex === hexValue; + + if (match) { + name = colorName; + } else { + const { r, g, b } = getRgb(hexValue); + const { h, s, l } = getHsl(hexValue); + + ndf1 = (rgb.r - r) ** 2 + (rgb.g - g) ** 2 + (rgb.b - b) ** 2; + ndf2 = (hsl.h - h) ** 2 + (hsl.s - s) ** 2 + (hsl.l - l) ** 2; + + ndf = ndf1 + ndf2 * 2; + if (df < 0 || df > ndf) { + df = ndf; + cl = index; + } + } + + return match; + }); + + name = colorNames[cl][1]; + + return name; +} diff --git a/packages/color/src/types/index.ts b/packages/color/src/types/index.ts new file mode 100644 index 0000000..3a63bc8 --- /dev/null +++ b/packages/color/src/types/index.ts @@ -0,0 +1,58 @@ +/** + * the color palette number + * + * the main color number is 500 + */ +export type ColorPaletteNumber = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950; + +/** the color palette */ +export type ColorPalette = { + /** the color hex value */ + hex: string; + /** + * the color number + * + * - 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950 + */ + number: ColorPaletteNumber; +}; + +/** the color palette family */ +export type ColorPaletteFamily = { + /** the color palette family name */ + name: string; + /** the color palettes */ + palettes: ColorPalette[]; +}; + +/** the color palette with delta */ +export type ColorPaletteWithDelta = ColorPalette & { + delta: number; +}; + +/** the color palette family with nearest palette */ +export type ColorPaletteFamilyWithNearestPalette = ColorPaletteFamily & { + nearestPalette: ColorPaletteWithDelta; + nearestLightnessPalette: ColorPaletteWithDelta; +}; + +/** the color palette match */ +export type ColorPaletteMatch = ColorPaletteFamily & { + /** the color map of the palette */ + colorMap: Map; + /** + * the main color of the palette + * + * which number is 500 + */ + main: ColorPalette; + /** the match color of the palette */ + match: ColorPalette; +}; + +/** + * The color index of color palette + * + * From left to right, the color is from light to dark, 6 is main color + */ +export type ColorIndex = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11; diff --git a/packages/color/tsconfig.json b/packages/color/tsconfig.json new file mode 100644 index 0000000..5823ed5 --- /dev/null +++ b/packages/color/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/hooks/package.json b/packages/hooks/package.json new file mode 100644 index 0000000..8cc75ba --- /dev/null +++ b/packages/hooks/package.json @@ -0,0 +1,16 @@ +{ + "name": "@sa/hooks", + "version": "1.3.13", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "@sa/axios": "workspace:*", + "@sa/utils": "workspace:*" + } +} diff --git a/packages/hooks/src/index.ts b/packages/hooks/src/index.ts new file mode 100644 index 0000000..a6a330b --- /dev/null +++ b/packages/hooks/src/index.ts @@ -0,0 +1,11 @@ +import useBoolean from './use-boolean'; +import useLoading from './use-loading'; +import useCountDown from './use-count-down'; +import useContext from './use-context'; +import useSvgIconRender from './use-svg-icon-render'; +import useHookTable from './use-table'; + +export { useBoolean, useLoading, useCountDown, useContext, useSvgIconRender, useHookTable }; + +export * from './use-signal'; +export * from './use-table'; diff --git a/packages/hooks/src/use-boolean.ts b/packages/hooks/src/use-boolean.ts new file mode 100644 index 0000000..a60d45a --- /dev/null +++ b/packages/hooks/src/use-boolean.ts @@ -0,0 +1,31 @@ +import { ref } from 'vue'; + +/** + * Boolean + * + * @param initValue Init value + */ +export default function useBoolean(initValue = false) { + const bool = ref(initValue); + + function setBool(value: boolean) { + bool.value = value; + } + function setTrue() { + setBool(true); + } + function setFalse() { + setBool(false); + } + function toggle() { + setBool(!bool.value); + } + + return { + bool, + setBool, + setTrue, + setFalse, + toggle + }; +} diff --git a/packages/hooks/src/use-context.ts b/packages/hooks/src/use-context.ts new file mode 100644 index 0000000..001d8aa --- /dev/null +++ b/packages/hooks/src/use-context.ts @@ -0,0 +1,96 @@ +import { inject, provide } from 'vue'; +import type { InjectionKey } from 'vue'; + +/** + * Use context + * + * @example + * ```ts + * // there are three vue files: A.vue, B.vue, C.vue, and A.vue is the parent component of B.vue and C.vue + * + * // context.ts + * import { ref } from 'vue'; + * import { useContext } from '@sa/hooks'; + * + * export const { setupStore, useStore } = useContext('demo', () => { + * const count = ref(0); + * + * function increment() { + * count.value++; + * } + * + * function decrement() { + * count.value--; + * } + * + * return { + * count, + * increment, + * decrement + * }; + * }) + * ``` // A.vue + * ```vue + * + * + * ``` // B.vue + * ```vue + * + * + * ```; + * + * // C.vue is same as B.vue + * + * @param contextName Context name + * @param fn Context function + */ +export default function useContext any>(contextName: string, fn: T) { + type Context = ReturnType; + + const { useProvide, useInject: useStore } = createContext(contextName); + + function setupStore(...args: Parameters) { + const context: Context = fn(...args); + return useProvide(context); + } + + return { + /** Setup store in the parent component */ + setupStore, + /** Use store in the child component */ + useStore + }; +} + +/** Create context */ +function createContext(contextName: string) { + const injectKey: InjectionKey = Symbol(contextName); + + function useProvide(context: T) { + provide(injectKey, context); + + return context; + } + + function useInject() { + return inject(injectKey) as T; + } + + return { + useProvide, + useInject + }; +} diff --git a/packages/hooks/src/use-count-down.ts b/packages/hooks/src/use-count-down.ts new file mode 100644 index 0000000..bfad064 --- /dev/null +++ b/packages/hooks/src/use-count-down.ts @@ -0,0 +1,49 @@ +import { computed, onScopeDispose, ref } from 'vue'; +import { useRafFn } from '@vueuse/core'; + +/** + * count down + * + * @param seconds - count down seconds + */ +export default function useCountDown(seconds: number) { + const FPS_PER_SECOND = 60; + + const fps = ref(0); + + const count = computed(() => Math.ceil(fps.value / FPS_PER_SECOND)); + + const isCounting = computed(() => fps.value > 0); + + const { pause, resume } = useRafFn( + () => { + if (fps.value > 0) { + fps.value -= 1; + } else { + pause(); + } + }, + { immediate: false } + ); + + function start(updateSeconds: number = seconds) { + fps.value = FPS_PER_SECOND * updateSeconds; + resume(); + } + + function stop() { + fps.value = 0; + pause(); + } + + onScopeDispose(() => { + pause(); + }); + + return { + count, + isCounting, + start, + stop + }; +} diff --git a/packages/hooks/src/use-loading.ts b/packages/hooks/src/use-loading.ts new file mode 100644 index 0000000..b8f89ad --- /dev/null +++ b/packages/hooks/src/use-loading.ts @@ -0,0 +1,16 @@ +import useBoolean from './use-boolean'; + +/** + * Loading + * + * @param initValue Init value + */ +export default function useLoading(initValue = false) { + const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(initValue); + + return { + loading, + startLoading, + endLoading + }; +} diff --git a/packages/hooks/src/use-request.ts b/packages/hooks/src/use-request.ts new file mode 100644 index 0000000..a0a40e6 --- /dev/null +++ b/packages/hooks/src/use-request.ts @@ -0,0 +1,79 @@ +import { ref } from 'vue'; +import type { Ref } from 'vue'; +import { createFlatRequest } from '@sa/axios'; +import type { + AxiosError, + CreateAxiosDefaults, + CustomAxiosRequestConfig, + MappedType, + RequestOption, + ResponseType +} from '@sa/axios'; +import useLoading from './use-loading'; + +export type HookRequestInstanceResponseSuccessData = { + data: Ref; + error: Ref; +}; + +export type HookRequestInstanceResponseFailData = { + data: Ref; + error: Ref>; +}; + +export type HookRequestInstanceResponseData = { + loading: Ref; +} & (HookRequestInstanceResponseSuccessData | HookRequestInstanceResponseFailData); + +export interface HookRequestInstance { + ( + config: CustomAxiosRequestConfig + ): HookRequestInstanceResponseData, ResponseData>; + cancelRequest: (requestId: string) => void; + cancelAllRequest: () => void; +} + +/** + * create a hook request instance + * + * @param axiosConfig + * @param options + */ +export default function createHookRequest( + axiosConfig?: CreateAxiosDefaults, + options?: Partial> +) { + const request = createFlatRequest(axiosConfig, options); + + const hookRequest: HookRequestInstance = function hookRequest( + config: CustomAxiosRequestConfig + ) { + const { loading, startLoading, endLoading } = useLoading(); + + const data = ref | null>(null) as Ref>; + const error = ref | null>(null) as Ref | null>; + + startLoading(); + + request(config).then(res => { + if (res.data) { + data.value = res.data; + } else { + error.value = res.error; + } + + endLoading(); + }); + + return { + loading, + data, + error + }; + } as HookRequestInstance; + + hookRequest.cancelRequest = request.cancelRequest; + hookRequest.cancelAllRequest = request.cancelAllRequest; + + return hookRequest; +} diff --git a/packages/hooks/src/use-signal.ts b/packages/hooks/src/use-signal.ts new file mode 100644 index 0000000..fa9d626 --- /dev/null +++ b/packages/hooks/src/use-signal.ts @@ -0,0 +1,144 @@ +import { computed, ref, shallowRef, triggerRef } from 'vue'; +import type { + ComputedGetter, + DebuggerOptions, + Ref, + ShallowRef, + WritableComputedOptions, + WritableComputedRef +} from 'vue'; + +type Updater = (value: T) => T; +type Mutator = (value: T) => void; + +/** + * Signal is a reactive value that can be set, updated or mutated + * + * @example + * ```ts + * const count = useSignal(0); + * + * // `watchEffect` + * watchEffect(() => { + * console.log(count()); + * }); + * + * // watch + * watch(count, value => { + * console.log(value); + * }); + * + * // useComputed + * const double = useComputed(() => count() * 2); + * const writeableDouble = useComputed({ + * get: () => count() * 2, + * set: value => count.set(value / 2) + * }); + * ``` + */ +export interface Signal { + (): Readonly; + /** + * Set the value of the signal + * + * It recommend use `set` for primitive values + * + * @param value + */ + set(value: T): void; + /** + * Update the value of the signal using an updater function + * + * It recommend use `update` for non-primitive values, only the first level of the object will be reactive. + * + * @param updater + */ + update(updater: Updater): void; + /** + * Mutate the value of the signal using a mutator function + * + * this action will call `triggerRef`, so the value will be tracked on `watchEffect`. + * + * It recommend use `mutate` for non-primitive values, all levels of the object will be reactive. + * + * @param mutator + */ + mutate(mutator: Mutator): void; + /** + * Get the reference of the signal + * + * Sometimes it can be useful to make `v-model` work with the signal + * + * ```vue + * ; + * + * + * ``` + */ + getRef(): Readonly>>; +} + +export interface ReadonlySignal { + (): Readonly; +} + +export interface SignalOptions { + /** + * Whether to use `ref` to store the value + * + * @default false use `sharedRef` to store the value + */ + useRef?: boolean; +} + +export function useSignal(initialValue: T, options?: SignalOptions): Signal { + const { useRef } = options || {}; + + const state = useRef ? (ref(initialValue) as Ref) : shallowRef(initialValue); + + return createSignal(state); +} + +export function useComputed(getter: ComputedGetter, debugOptions?: DebuggerOptions): ReadonlySignal; +export function useComputed(options: WritableComputedOptions, debugOptions?: DebuggerOptions): Signal; +export function useComputed( + getterOrOptions: ComputedGetter | WritableComputedOptions, + debugOptions?: DebuggerOptions +) { + const isGetter = typeof getterOrOptions === 'function'; + + const computedValue = computed(getterOrOptions as any, debugOptions); + + if (isGetter) { + return () => computedValue.value as ReadonlySignal; + } + + return createSignal(computedValue); +} + +function createSignal(state: ShallowRef | WritableComputedRef): Signal { + const signal = () => state.value; + + signal.set = (value: T) => { + state.value = value; + }; + + signal.update = (updater: Updater) => { + state.value = updater(state.value); + }; + + signal.mutate = (mutator: Mutator) => { + mutator(state.value); + triggerRef(state); + }; + + signal.getRef = () => state as Readonly>>; + + return signal; +} diff --git a/packages/hooks/src/use-svg-icon-render.ts b/packages/hooks/src/use-svg-icon-render.ts new file mode 100644 index 0000000..62c2206 --- /dev/null +++ b/packages/hooks/src/use-svg-icon-render.ts @@ -0,0 +1,50 @@ +import { h } from 'vue'; +import type { Component } from 'vue'; + +/** + * Svg icon render hook + * + * @param SvgIcon Svg icon component + */ +export default function useSvgIconRender(SvgIcon: Component) { + interface IconConfig { + /** Iconify icon name */ + icon?: string; + /** Local icon name */ + localIcon?: string; + /** Icon color */ + color?: string; + /** Icon size */ + fontSize?: number; + } + + type IconStyle = Partial>; + + /** + * Svg icon VNode + * + * @param config + */ + const SvgIconVNode = (config: IconConfig) => { + const { color, fontSize, icon, localIcon } = config; + + const style: IconStyle = {}; + + if (color) { + style.color = color; + } + if (fontSize) { + style.fontSize = `${fontSize}px`; + } + + if (!icon && !localIcon) { + return undefined; + } + + return () => h(SvgIcon, { icon, localIcon, style }); + }; + + return { + SvgIconVNode + }; +} diff --git a/packages/hooks/src/use-table.ts b/packages/hooks/src/use-table.ts new file mode 100644 index 0000000..46bcf52 --- /dev/null +++ b/packages/hooks/src/use-table.ts @@ -0,0 +1,154 @@ +import { computed, reactive, ref } from 'vue'; +import type { Ref, VNodeChild } from 'vue'; +import { jsonClone } from '@sa/utils'; +import useBoolean from './use-boolean'; +import useLoading from './use-loading'; + +export type MaybePromise = T | Promise; + +export type ApiFn = (args: any) => Promise; + +export type TableColumnCheckTitle = string | ((...args: any) => VNodeChild); + +export type TableColumnCheck = { + key: string; + title: TableColumnCheckTitle; + checked: boolean; +}; + +export type TableDataWithIndex = T & { index: number }; + +export type TransformedData = { + data: TableDataWithIndex[]; + pageNum: number; + pageSize: number; + total: number; +}; + +export type Transformer = (response: Response) => TransformedData; + +export type TableConfig = { + /** api function to get table data */ + apiFn: A; + /** api params */ + apiParams?: Parameters[0]; + /** transform api response to table data */ + transformer: Transformer>>; + /** columns factory */ + columns: () => C[]; + /** + * get column checks + * + * @param columns + */ + getColumnChecks: (columns: C[]) => TableColumnCheck[]; + /** + * get columns + * + * @param columns + */ + getColumns: (columns: C[], checks: TableColumnCheck[]) => C[]; + /** + * callback when response fetched + * + * @param transformed transformed data + */ + onFetched?: (transformed: TransformedData) => MaybePromise; + /** + * whether to get data immediately + * + * @default true + */ + immediate?: boolean; +}; + +export default function useHookTable(config: TableConfig) { + const { loading, startLoading, endLoading } = useLoading(); + const { bool: empty, setBool: setEmpty } = useBoolean(); + + const { apiFn, apiParams, transformer, immediate = true, getColumnChecks, getColumns } = config; + + const searchParams: NonNullable[0]> = reactive(jsonClone({ ...apiParams })); + + const allColumns = ref(config.columns()) as Ref; + + const data: Ref[]> = ref([]); + + const columnChecks: Ref = ref(getColumnChecks(config.columns())); + + const columns = computed(() => getColumns(allColumns.value, columnChecks.value)); + + function reloadColumns() { + allColumns.value = config.columns(); + + const checkMap = new Map(columnChecks.value.map(col => [col.key, col.checked])); + + const defaultChecks = getColumnChecks(allColumns.value); + + columnChecks.value = defaultChecks.map(col => ({ + ...col, + checked: checkMap.get(col.key) ?? col.checked + })); + } + + async function getData() { + startLoading(); + + const formattedParams = formatSearchParams(searchParams); + + const response = await apiFn(formattedParams); + + const transformed = transformer(response as Awaited>); + + data.value = transformed.data; + + setEmpty(transformed.data.length === 0); + + await config.onFetched?.(transformed); + + endLoading(); + } + + function formatSearchParams(params: Record) { + const formattedParams: Record = {}; + + Object.entries(params).forEach(([key, value]) => { + if (value !== null && value !== undefined) { + formattedParams[key] = value; + } + }); + + return formattedParams; + } + + /** + * update search params + * + * @param params + */ + function updateSearchParams(params: Partial[0]>) { + Object.assign(searchParams, params); + } + + /** reset search params */ + function resetSearchParams() { + Object.assign(searchParams, jsonClone(apiParams)); + } + + if (immediate) { + getData(); + } + + return { + loading, + empty, + data, + columns, + columnChecks, + reloadColumns, + getData, + searchParams, + updateSearchParams, + resetSearchParams + }; +} diff --git a/packages/hooks/tsconfig.json b/packages/hooks/tsconfig.json new file mode 100644 index 0000000..5823ed5 --- /dev/null +++ b/packages/hooks/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/materials/package.json b/packages/materials/package.json new file mode 100644 index 0000000..f8fcdbc --- /dev/null +++ b/packages/materials/package.json @@ -0,0 +1,19 @@ +{ + "name": "@sa/materials", + "version": "1.3.13", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "@sa/utils": "workspace:*", + "simplebar-vue": "2.4.0" + }, + "devDependencies": { + "typed-css-modules": "0.9.1" + } +} diff --git a/packages/materials/src/index.ts b/packages/materials/src/index.ts new file mode 100644 index 0000000..f6ca01d --- /dev/null +++ b/packages/materials/src/index.ts @@ -0,0 +1,6 @@ +import AdminLayout, { LAYOUT_MAX_Z_INDEX, LAYOUT_SCROLL_EL_ID } from './libs/admin-layout'; +import PageTab from './libs/page-tab'; +import SimpleScrollbar from './libs/simple-scrollbar'; + +export { AdminLayout, LAYOUT_SCROLL_EL_ID, LAYOUT_MAX_Z_INDEX, PageTab, SimpleScrollbar }; +export * from './types'; diff --git a/packages/materials/src/libs/admin-layout/index.module.css b/packages/materials/src/libs/admin-layout/index.module.css new file mode 100644 index 0000000..e5c8ac8 --- /dev/null +++ b/packages/materials/src/libs/admin-layout/index.module.css @@ -0,0 +1,63 @@ +/* @type */ + +.layout-header, +.layout-header-placement { + height: var(--soy-header-height); +} + +.layout-header { + z-index: var(--soy-header-z-index); +} + +.layout-tab { + top: var(--soy-header-height); + height: var(--soy-tab-height); + z-index: var(--soy-tab-z-index); +} + +.layout-tab-placement { + height: var(--soy-tab-height); +} + +.layout-sider { + width: var(--soy-sider-width); + z-index: var(--soy-sider-z-index); +} + +.layout-mobile-sider { + z-index: var(--soy-sider-z-index); +} + +.layout-mobile-sider-mask { + z-index: var(--soy-mobile-sider-z-index); +} + +.layout-sider_collapsed { + width: var(--soy-sider-collapsed-width); + z-index: var(--soy-sider-z-index); +} + +.layout-footer, +.layout-footer-placement { + height: var(--soy-footer-height); +} + +.layout-footer { + z-index: var(--soy-footer-z-index); +} + +.left-gap { + padding-left: var(--soy-sider-width); +} + +.left-gap_collapsed { + padding-left: var(--soy-sider-collapsed-width); +} + +.sider-padding-top { + padding-top: var(--soy-header-height); +} + +.sider-padding-bottom { + padding-bottom: var(--soy-footer-height); +} diff --git a/packages/materials/src/libs/admin-layout/index.module.css.d.ts b/packages/materials/src/libs/admin-layout/index.module.css.d.ts new file mode 100644 index 0000000..c326c84 --- /dev/null +++ b/packages/materials/src/libs/admin-layout/index.module.css.d.ts @@ -0,0 +1,18 @@ +declare const styles: { + readonly 'layout-header': string; + readonly 'layout-header-placement': string; + readonly 'layout-tab': string; + readonly 'layout-tab-placement': string; + readonly 'layout-sider': string; + readonly 'layout-mobile-sider': string; + readonly 'layout-mobile-sider-mask': string; + readonly 'layout-sider_collapsed': string; + readonly 'layout-footer': string; + readonly 'layout-footer-placement': string; + readonly 'left-gap': string; + readonly 'left-gap_collapsed': string; + readonly 'sider-padding-top': string; + readonly 'sider-padding-bottom': string; +}; + +export default styles; diff --git a/packages/materials/src/libs/admin-layout/index.ts b/packages/materials/src/libs/admin-layout/index.ts new file mode 100644 index 0000000..0687362 --- /dev/null +++ b/packages/materials/src/libs/admin-layout/index.ts @@ -0,0 +1,5 @@ +import AdminLayout from './index.vue'; +import { LAYOUT_MAX_Z_INDEX, LAYOUT_SCROLL_EL_ID } from './shared'; + +export default AdminLayout; +export { LAYOUT_SCROLL_EL_ID, LAYOUT_MAX_Z_INDEX }; diff --git a/packages/materials/src/libs/admin-layout/index.vue b/packages/materials/src/libs/admin-layout/index.vue new file mode 100644 index 0000000..543f7dc --- /dev/null +++ b/packages/materials/src/libs/admin-layout/index.vue @@ -0,0 +1,237 @@ + + + + + diff --git a/packages/materials/src/libs/admin-layout/shared.ts b/packages/materials/src/libs/admin-layout/shared.ts new file mode 100644 index 0000000..940451e --- /dev/null +++ b/packages/materials/src/libs/admin-layout/shared.ts @@ -0,0 +1,68 @@ +import type { AdminLayoutProps, LayoutCssVars, LayoutCssVarsProps } from '../../types'; + +/** The id of the scroll element of the layout */ +export const LAYOUT_SCROLL_EL_ID = '__SCROLL_EL_ID__'; + +/** The max z-index of the layout */ +export const LAYOUT_MAX_Z_INDEX = 100; + +/** + * Create layout css vars by css vars props + * + * @param props Css vars props + */ +function createLayoutCssVarsByCssVarsProps(props: LayoutCssVarsProps) { + const cssVars: LayoutCssVars = { + '--soy-header-height': `${props.headerHeight}px`, + '--soy-header-z-index': props.headerZIndex, + '--soy-tab-height': `${props.tabHeight}px`, + '--soy-tab-z-index': props.tabZIndex, + '--soy-sider-width': `${props.siderWidth}px`, + '--soy-sider-collapsed-width': `${props.siderCollapsedWidth}px`, + '--soy-sider-z-index': props.siderZIndex, + '--soy-mobile-sider-z-index': props.mobileSiderZIndex, + '--soy-footer-height': `${props.footerHeight}px`, + '--soy-footer-z-index': props.footerZIndex + }; + + return cssVars; +} + +/** + * Create layout css vars + * + * @param props + */ +export function createLayoutCssVars(props: AdminLayoutProps) { + const { + mode, + isMobile, + maxZIndex = LAYOUT_MAX_Z_INDEX, + headerHeight, + tabHeight, + siderWidth, + siderCollapsedWidth, + footerHeight + } = props; + + const headerZIndex = maxZIndex - 3; + const tabZIndex = maxZIndex - 5; + const siderZIndex = mode === 'vertical' || isMobile ? maxZIndex - 1 : maxZIndex - 4; + const mobileSiderZIndex = isMobile ? maxZIndex - 2 : 0; + const footerZIndex = maxZIndex - 5; + + const cssProps: LayoutCssVarsProps = { + headerHeight, + headerZIndex, + tabHeight, + tabZIndex, + siderWidth, + siderZIndex, + mobileSiderZIndex, + siderCollapsedWidth, + footerHeight, + footerZIndex + }; + + return createLayoutCssVarsByCssVarsProps(cssProps); +} diff --git a/packages/materials/src/libs/page-tab/button-tab.vue b/packages/materials/src/libs/page-tab/button-tab.vue new file mode 100644 index 0000000..0826e71 --- /dev/null +++ b/packages/materials/src/libs/page-tab/button-tab.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/packages/materials/src/libs/page-tab/chrome-tab-bg.vue b/packages/materials/src/libs/page-tab/chrome-tab-bg.vue new file mode 100644 index 0000000..151e03a --- /dev/null +++ b/packages/materials/src/libs/page-tab/chrome-tab-bg.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/packages/materials/src/libs/page-tab/chrome-tab.vue b/packages/materials/src/libs/page-tab/chrome-tab.vue new file mode 100644 index 0000000..e4509b0 --- /dev/null +++ b/packages/materials/src/libs/page-tab/chrome-tab.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/packages/materials/src/libs/page-tab/index.module.css b/packages/materials/src/libs/page-tab/index.module.css new file mode 100644 index 0000000..abf56a5 --- /dev/null +++ b/packages/materials/src/libs/page-tab/index.module.css @@ -0,0 +1,97 @@ +/* @type */ + +.button-tab { + border-color: #e5e7eb; +} + +.button-tab_dark { + border-color: #ffffff3d; +} + +.button-tab:hover { + color: var(--soy-primary-color); + border-color: var(--soy-primary-color-opacity3); +} + +.button-tab_active { + color: var(--soy-primary-color); + border-color: var(--soy-primary-color-opacity3); + background-color: var(--soy-primary-color-opacity1); +} + +.button-tab_active_dark { + background-color: var(--soy-primary-color-opacity2); +} + +.button-tab .svg-close:hover { + font-size: 12px; + color: #ffffff; + background-color: var(--soy-primary-color); +} + +.button-tab_dark .svg-close:hover { + color: #000000; +} + +.chrome-tab:hover { + z-index: 9; +} + +.chrome-tab_active { + z-index: 10; + color: var(--soy-primary-color); +} + +.chrome-tab__bg { + color: transparent; +} + +.chrome-tab_active .chrome-tab__bg { + color: var(--soy-primary-color1); +} + +.chrome-tab_active_dark .chrome-tab__bg { + color: var(--soy-primary-color2); +} + +.chrome-tab:hover .chrome-tab__bg { + color: #dee1e6; +} + +.chrome-tab_active:hover .chrome-tab__bg { + color: var(--soy-primary-color1); +} + +.chrome-tab_dark:hover .chrome-tab__bg { + color: #333333; +} + +.chrome-tab_active_dark:hover .chrome-tab__bg { + color: var(--soy-primary-color2); +} + +.chrome-tab .svg-close:hover { + font-size: 12px; + color: #ffffff; + background-color: #9ca3af; +} + +.chrome-tab_active .svg-close:hover { + background-color: var(--soy-primary-color); +} + +.chrome-tab_dark .svg-close:hover { + color: #000000; +} + +.chrome-tab_active .chrome-tab-divider { + opacity: 0; +} + +.chrome-tab:hover .chrome-tab-divider { + opacity: 0; +} + +.chrome-tab_dark .chrome-tab-divider { + background-color: rgba(255, 255, 255, 0.9); +} diff --git a/packages/materials/src/libs/page-tab/index.module.css.d.ts b/packages/materials/src/libs/page-tab/index.module.css.d.ts new file mode 100644 index 0000000..ab45c0a --- /dev/null +++ b/packages/materials/src/libs/page-tab/index.module.css.d.ts @@ -0,0 +1,15 @@ +declare const styles: { + readonly 'button-tab': string; + readonly 'button-tab_dark': string; + readonly 'button-tab_active': string; + readonly 'button-tab_active_dark': string; + readonly 'chrome-tab': string; + readonly 'chrome-tab_active': string; + readonly 'chrome-tab__bg': string; + readonly 'chrome-tab_active_dark': string; + readonly 'chrome-tab_dark': string; + readonly 'chrome-tab-divider': string; + readonly 'svg-close': string; +}; + +export default styles; diff --git a/packages/materials/src/libs/page-tab/index.ts b/packages/materials/src/libs/page-tab/index.ts new file mode 100644 index 0000000..b402adf --- /dev/null +++ b/packages/materials/src/libs/page-tab/index.ts @@ -0,0 +1,3 @@ +import PageTab from './index.vue'; + +export default PageTab; diff --git a/packages/materials/src/libs/page-tab/index.vue b/packages/materials/src/libs/page-tab/index.vue new file mode 100644 index 0000000..8c7b98d --- /dev/null +++ b/packages/materials/src/libs/page-tab/index.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/packages/materials/src/libs/page-tab/shared.ts b/packages/materials/src/libs/page-tab/shared.ts new file mode 100644 index 0000000..db71f5d --- /dev/null +++ b/packages/materials/src/libs/page-tab/shared.ts @@ -0,0 +1,31 @@ +import { addColorAlpha, transformColorWithOpacity } from '@sa/color'; +import type { PageTabCssVars, PageTabCssVarsProps } from '../../types'; + +/** The active color of the tab */ +export const ACTIVE_COLOR = '#1890ff'; + +function createCssVars(props: PageTabCssVarsProps) { + const cssVars: PageTabCssVars = { + '--soy-primary-color': props.primaryColor, + '--soy-primary-color1': props.primaryColor1, + '--soy-primary-color2': props.primaryColor2, + '--soy-primary-color-opacity1': props.primaryColorOpacity1, + '--soy-primary-color-opacity2': props.primaryColorOpacity2, + '--soy-primary-color-opacity3': props.primaryColorOpacity3 + }; + + return cssVars; +} + +export function createTabCssVars(primaryColor: string) { + const cssProps: PageTabCssVarsProps = { + primaryColor, + primaryColor1: transformColorWithOpacity(primaryColor, 0.1, '#ffffff'), + primaryColor2: transformColorWithOpacity(primaryColor, 0.3, '#000000'), + primaryColorOpacity1: addColorAlpha(primaryColor, 0.1), + primaryColorOpacity2: addColorAlpha(primaryColor, 0.15), + primaryColorOpacity3: addColorAlpha(primaryColor, 0.3) + }; + + return createCssVars(cssProps); +} diff --git a/packages/materials/src/libs/page-tab/svg-close.vue b/packages/materials/src/libs/page-tab/svg-close.vue new file mode 100644 index 0000000..26ba07a --- /dev/null +++ b/packages/materials/src/libs/page-tab/svg-close.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/packages/materials/src/libs/simple-scrollbar/index.ts b/packages/materials/src/libs/simple-scrollbar/index.ts new file mode 100644 index 0000000..1453a06 --- /dev/null +++ b/packages/materials/src/libs/simple-scrollbar/index.ts @@ -0,0 +1,3 @@ +import SimpleScrollbar from './index.vue'; + +export default SimpleScrollbar; diff --git a/packages/materials/src/libs/simple-scrollbar/index.vue b/packages/materials/src/libs/simple-scrollbar/index.vue new file mode 100644 index 0000000..1e8076b --- /dev/null +++ b/packages/materials/src/libs/simple-scrollbar/index.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/packages/materials/src/types/index.ts b/packages/materials/src/types/index.ts new file mode 100644 index 0000000..bbcfb9d --- /dev/null +++ b/packages/materials/src/types/index.ts @@ -0,0 +1,294 @@ +/** Header config */ +interface AdminLayoutHeaderConfig { + /** + * Whether header is visible + * + * @default true + */ + headerVisible?: boolean; + /** + * Header class + * + * @default '' + */ + headerClass?: string; + /** + * Header height + * + * @default 56px + */ + headerHeight?: number; +} + +/** Tab config */ +interface AdminLayoutTabConfig { + /** + * Whether tab is visible + * + * @default true + */ + tabVisible?: boolean; + /** + * Tab class + * + * @default '' + */ + tabClass?: string; + /** + * Tab height + * + * @default 48px + */ + tabHeight?: number; +} + +/** Sider config */ +interface AdminLayoutSiderConfig { + /** + * Whether sider is visible + * + * @default true + */ + siderVisible?: boolean; + /** + * Sider class + * + * @default '' + */ + siderClass?: string; + /** + * Mobile sider class + * + * @default '' + */ + mobileSiderClass?: string; + /** + * Sider collapse status + * + * @default false + */ + siderCollapse?: boolean; + /** + * Sider width when collapse is false + * + * @default '220px' + */ + siderWidth?: number; + /** + * Sider width when collapse is true + * + * @default '64px' + */ + siderCollapsedWidth?: number; +} + +/** Content config */ +export interface AdminLayoutContentConfig { + /** + * Content class + * + * @default '' + */ + contentClass?: string; + /** + * Whether content is full the page + * + * If true, other elements will be hidden by `display: none` + */ + fullContent?: boolean; +} + +/** Footer config */ +export interface AdminLayoutFooterConfig { + /** + * Whether footer is visible + * + * @default true + */ + footerVisible?: boolean; + /** + * Whether footer is fixed + * + * @default true + */ + fixedFooter?: boolean; + /** + * Footer class + * + * @default '' + */ + footerClass?: string; + /** + * Footer height + * + * @default 48px + */ + footerHeight?: number; + /** + * Whether footer is on the right side + * + * When the layout is vertical, the footer is on the right side + */ + rightFooter?: boolean; +} + +/** + * Layout mode + * + * - Horizontal + * - Vertical + */ +export type LayoutMode = 'horizontal' | 'vertical'; + +/** + * The scroll mode when content overflow + * + * - Wrapper: the layout component's wrapper element has a scrollbar + * - Content: the layout component's content element has a scrollbar + * + * @default 'wrapper' + */ +export type LayoutScrollMode = 'wrapper' | 'content'; + +/** Admin layout props */ +export interface AdminLayoutProps + extends AdminLayoutHeaderConfig, + AdminLayoutTabConfig, + AdminLayoutSiderConfig, + AdminLayoutContentConfig, + AdminLayoutFooterConfig { + /** + * Layout mode + * + * - {@link LayoutMode} + */ + mode?: LayoutMode; + /** Is mobile layout */ + isMobile?: boolean; + /** + * Scroll mode + * + * - {@link ScrollMode} + */ + scrollMode?: LayoutScrollMode; + /** + * The id of the scroll element of the layout + * + * It can be used to get the corresponding Dom and scroll it + * + * @example + * use the default id by import + * ```ts + * import { adminLayoutScrollElId } from '@sa/vue-materials'; + * ``` + * + * @default + * ```ts + * const adminLayoutScrollElId = '__ADMIN_LAYOUT_SCROLL_EL_ID__' + * ``` + */ + scrollElId?: string; + /** The class of the scroll element */ + scrollElClass?: string; + /** The class of the scroll wrapper element */ + scrollWrapperClass?: string; + /** + * The common class of the layout + * + * Is can be used to configure the transition animation + * + * @default 'transition-all-300' + */ + commonClass?: string; + /** + * Whether fix the header and tab + * + * @default true + */ + fixedTop?: boolean; + /** + * The max z-index of the layout + * + * The z-index of Header,Tab,Sider and Footer will not exceed this value + */ + maxZIndex?: number; +} + +type Kebab = S extends Uncapitalize ? S : `-${Uncapitalize}`; + +type KebabCase = S extends `${infer Start}${infer End}` + ? `${Uncapitalize}${KebabCase>}` + : S; + +type Prefix = '--soy-'; + +export type LayoutCssVarsProps = Pick< + AdminLayoutProps, + 'headerHeight' | 'tabHeight' | 'siderWidth' | 'siderCollapsedWidth' | 'footerHeight' +> & { + headerZIndex?: number; + tabZIndex?: number; + siderZIndex?: number; + mobileSiderZIndex?: number; + footerZIndex?: number; +}; + +export type LayoutCssVars = { + [K in keyof LayoutCssVarsProps as `${Prefix}${KebabCase}`]: string | number; +}; + +/** + * The mode of the tab + * + * - Button: button style + * - Chrome: chrome style + * + * @default chrome + */ +export type PageTabMode = 'button' | 'chrome'; + +export interface PageTabProps { + /** Whether is dark mode */ + darkMode?: boolean; + /** + * The mode of the tab + * + * - {@link TabMode} + */ + mode?: PageTabMode; + /** + * The common class of the layout + * + * Is can be used to configure the transition animation + * + * @default 'transition-all-300' + */ + commonClass?: string; + /** The class of the button tab */ + buttonClass?: string; + /** The class of the chrome tab */ + chromeClass?: string; + /** Whether the tab is active */ + active?: boolean; + /** The color of the active tab */ + activeColor?: string; + /** + * Whether the tab is closable + * + * Show the close icon when true + */ + closable?: boolean; +} + +export type PageTabCssVarsProps = { + primaryColor: string; + primaryColor1: string; + primaryColor2: string; + primaryColorOpacity1: string; + primaryColorOpacity2: string; + primaryColorOpacity3: string; +}; + +export type PageTabCssVars = { + [K in keyof PageTabCssVarsProps as `${Prefix}${KebabCase}`]: string | number; +}; diff --git a/packages/materials/tsconfig.json b/packages/materials/tsconfig.json new file mode 100644 index 0000000..5823ed5 --- /dev/null +++ b/packages/materials/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/ofetch/package.json b/packages/ofetch/package.json new file mode 100644 index 0000000..cc8f240 --- /dev/null +++ b/packages/ofetch/package.json @@ -0,0 +1,15 @@ +{ + "name": "@sa/fetch", + "version": "1.3.13", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "ofetch": "1.4.1" + } +} diff --git a/packages/ofetch/src/index.ts b/packages/ofetch/src/index.ts new file mode 100644 index 0000000..dce1ed4 --- /dev/null +++ b/packages/ofetch/src/index.ts @@ -0,0 +1,10 @@ +import { ofetch } from 'ofetch'; +import type { FetchOptions } from 'ofetch'; + +export function createRequest(options: FetchOptions) { + const request = ofetch.create(options); + + return request; +} + +export default createRequest; diff --git a/packages/ofetch/tsconfig.json b/packages/ofetch/tsconfig.json new file mode 100644 index 0000000..5823ed5 --- /dev/null +++ b/packages/ofetch/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/scripts/bin.ts b/packages/scripts/bin.ts new file mode 100644 index 0000000..1a1817b --- /dev/null +++ b/packages/scripts/bin.ts @@ -0,0 +1,3 @@ +#!/usr/bin/env tsx + +import './src/index.ts'; diff --git a/packages/scripts/package.json b/packages/scripts/package.json new file mode 100644 index 0000000..c5a489e --- /dev/null +++ b/packages/scripts/package.json @@ -0,0 +1,27 @@ +{ + "name": "@sa/scripts", + "version": "1.3.13", + "bin": { + "sa": "./bin.ts" + }, + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "devDependencies": { + "@soybeanjs/changelog": "0.3.24", + "bumpp": "10.1.0", + "c12": "3.0.2", + "cac": "6.7.14", + "consola": "3.4.2", + "enquirer": "2.4.1", + "execa": "9.5.2", + "kolorist": "1.8.0", + "npm-check-updates": "17.1.15", + "rimraf": "6.0.1" + } +} diff --git a/packages/scripts/src/commands/changelog.ts b/packages/scripts/src/commands/changelog.ts new file mode 100644 index 0000000..e01ce40 --- /dev/null +++ b/packages/scripts/src/commands/changelog.ts @@ -0,0 +1,10 @@ +import { generateChangelog, generateTotalChangelog } from '@soybeanjs/changelog'; +import type { ChangelogOption } from '@soybeanjs/changelog'; + +export async function genChangelog(options?: Partial, total = false) { + if (total) { + await generateTotalChangelog(options); + } else { + await generateChangelog(options); + } +} diff --git a/packages/scripts/src/commands/cleanup.ts b/packages/scripts/src/commands/cleanup.ts new file mode 100644 index 0000000..a9d3990 --- /dev/null +++ b/packages/scripts/src/commands/cleanup.ts @@ -0,0 +1,5 @@ +import { rimraf } from 'rimraf'; + +export async function cleanup(paths: string[]) { + await rimraf(paths, { glob: true }); +} diff --git a/packages/scripts/src/commands/git-commit.ts b/packages/scripts/src/commands/git-commit.ts new file mode 100644 index 0000000..35c0df5 --- /dev/null +++ b/packages/scripts/src/commands/git-commit.ts @@ -0,0 +1,84 @@ +import path from 'node:path'; +import { readFileSync } from 'node:fs'; +import { prompt } from 'enquirer'; +import { execCommand } from '../shared'; +import { locales } from '../locales'; +import type { Lang } from '../locales'; + +interface PromptObject { + types: string; + scopes: string; + description: string; +} + +/** + * Git commit with Conventional Commits standard + * + * @param lang + */ +export async function gitCommit(lang: Lang = 'en-us') { + const { gitCommitMessages, gitCommitTypes, gitCommitScopes } = locales[lang]; + + const typesChoices = gitCommitTypes.map(([value, msg]) => { + const nameWithSuffix = `${value}:`; + + const message = `${nameWithSuffix.padEnd(12)}${msg}`; + + return { + name: value, + message + }; + }); + + const scopesChoices = gitCommitScopes.map(([value, msg]) => ({ + name: value, + message: `${value.padEnd(30)} (${msg})` + })); + + const result = await prompt([ + { + name: 'types', + type: 'select', + message: gitCommitMessages.types, + choices: typesChoices + }, + { + name: 'scopes', + type: 'select', + message: gitCommitMessages.scopes, + choices: scopesChoices + }, + { + name: 'description', + type: 'text', + message: gitCommitMessages.description + } + ]); + + const breaking = result.description.startsWith('!') ? '!' : ''; + + const description = result.description.replace(/^!/, '').trim(); + + const commitMsg = `${result.types}(${result.scopes})${breaking}: ${description}`; + + await execCommand('git', ['commit', '-m', commitMsg], { stdio: 'inherit' }); +} + +/** Git commit message verify */ +export async function gitCommitVerify(lang: Lang = 'en-us', ignores: RegExp[] = []) { + const gitPath = await execCommand('git', ['rev-parse', '--show-toplevel']); + + const gitMsgPath = path.join(gitPath, '.git', 'COMMIT_EDITMSG'); + + const commitMsg = readFileSync(gitMsgPath, 'utf8').trim(); + + if (ignores.some(regExp => regExp.test(commitMsg))) return; + + const REG_EXP = /(?[a-z]+)(?:\((?.+)\))?(?!)?: (?.+)/i; + + if (!REG_EXP.test(commitMsg)) { + const errorMsg = locales[lang].gitCommitVerify; + + throw new Error(errorMsg); + } +} diff --git a/packages/scripts/src/commands/index.ts b/packages/scripts/src/commands/index.ts new file mode 100644 index 0000000..db4fc15 --- /dev/null +++ b/packages/scripts/src/commands/index.ts @@ -0,0 +1,6 @@ +export * from './git-commit'; +export * from './cleanup'; +export * from './update-pkg'; +export * from './changelog'; +export * from './release'; +export * from './router'; diff --git a/packages/scripts/src/commands/release.ts b/packages/scripts/src/commands/release.ts new file mode 100644 index 0000000..1cf3bc3 --- /dev/null +++ b/packages/scripts/src/commands/release.ts @@ -0,0 +1,12 @@ +import { versionBump } from 'bumpp'; + +export async function release(execute = 'pnpm sa changelog', push = true) { + await versionBump({ + files: ['**/package.json', '!**/node_modules'], + execute, + all: true, + tag: true, + commit: 'chore(projects): release v%s', + push + }); +} diff --git a/packages/scripts/src/commands/router.ts b/packages/scripts/src/commands/router.ts new file mode 100644 index 0000000..f407589 --- /dev/null +++ b/packages/scripts/src/commands/router.ts @@ -0,0 +1,90 @@ +import process from 'node:process'; +import path from 'node:path'; +import { writeFile } from 'node:fs/promises'; +import { existsSync, mkdirSync } from 'node:fs'; +import { prompt } from 'enquirer'; +import { green, red } from 'kolorist'; + +interface PromptObject { + routeName: string; + addRouteParams: boolean; + routeParams: string; +} + +/** generate route */ +export async function generateRoute() { + const result = await prompt([ + { + name: 'routeName', + type: 'text', + message: 'please enter route name', + initial: 'demo-route_child' + }, + { + name: 'addRouteParams', + type: 'confirm', + message: 'add route params?', + initial: false + } + ]); + + if (result.addRouteParams) { + const answers = await prompt({ + name: 'routeParams', + type: 'text', + message: 'please enter route params', + initial: 'id' + }); + + Object.assign(result, answers); + } + + const PAGE_DIR_NAME_PATTERN = /^[\w-]+[0-9a-zA-Z]+$/; + + if (!PAGE_DIR_NAME_PATTERN.test(result.routeName)) { + throw new Error(`${red('route name is invalid, it only allow letters, numbers, "-" or "_"')}. +For example: +(1) one level route: ${green('demo-route')} +(2) two level route: ${green('demo-route_child')} +(3) multi level route: ${green('demo-route_child_child')} +(4) group route: ${green('_ignore_demo-route')}' +`); + } + + const PARAM_REG = /^\w+$/g; + + if (result.routeParams && !PARAM_REG.test(result.routeParams)) { + throw new Error(red('route params is invalid, it only allow letters, numbers or "_".')); + } + + const cwd = process.cwd(); + + const [dir, ...rest] = result.routeName.split('_') as string[]; + + let routeDir = path.join(cwd, 'src', 'views', dir); + + if (rest.length) { + routeDir = path.join(routeDir, rest.join('_')); + } + + if (!existsSync(routeDir)) { + mkdirSync(routeDir, { recursive: true }); + } else { + throw new Error(red('route already exists')); + } + + const fileName = result.routeParams ? `[${result.routeParams}].vue` : 'index.vue'; + + const vueTemplate = ` + + + + +`; + + const filePath = path.join(routeDir, fileName); + + await writeFile(filePath, vueTemplate); +} diff --git a/packages/scripts/src/commands/update-pkg.ts b/packages/scripts/src/commands/update-pkg.ts new file mode 100644 index 0000000..54d1132 --- /dev/null +++ b/packages/scripts/src/commands/update-pkg.ts @@ -0,0 +1,5 @@ +import { execCommand } from '../shared'; + +export async function updatePkg(args: string[] = ['--deep', '-u']) { + execCommand('npx', ['ncu', ...args], { stdio: 'inherit' }); +} diff --git a/packages/scripts/src/config/index.ts b/packages/scripts/src/config/index.ts new file mode 100644 index 0000000..0fd9fbe --- /dev/null +++ b/packages/scripts/src/config/index.ts @@ -0,0 +1,39 @@ +import process from 'node:process'; +import { loadConfig } from 'c12'; +import type { CliOption } from '../types'; + +const defaultOptions: CliOption = { + cwd: process.cwd(), + cleanupDirs: [ + '**/dist', + '**/package-lock.json', + '**/yarn.lock', + '**/pnpm-lock.yaml', + '**/node_modules', + '!node_modules/**' + ], + ncuCommandArgs: ['--deep', '-u'], + changelogOptions: {}, + gitCommitVerifyIgnores: [ + /^((Merge pull request)|(Merge (.*?) into (.*?)|(Merge branch (.*?)))(?:\r?\n)*$)/m, + /^(Merge tag (.*?))(?:\r?\n)*$/m, + /^(R|r)evert (.*)/, + /^(amend|fixup|squash)!/, + /^(Merged (.*?)(in|into) (.*)|Merged PR (.*): (.*))/, + /^Merge remote-tracking branch(\s*)(.*)/, + /^Automatic merge(.*)/, + /^Auto-merged (.*?) into (.*)/ + ] +}; + +export async function loadCliOptions(overrides?: Partial, cwd = process.cwd()) { + const { config } = await loadConfig>({ + name: 'soybean', + defaults: defaultOptions, + overrides, + cwd, + packageJson: true + }); + + return config as CliOption; +} diff --git a/packages/scripts/src/index.ts b/packages/scripts/src/index.ts new file mode 100644 index 0000000..34367d7 --- /dev/null +++ b/packages/scripts/src/index.ts @@ -0,0 +1,109 @@ +import cac from 'cac'; +import { blue, lightGreen } from 'kolorist'; +import { version } from '../package.json'; +import { cleanup, genChangelog, generateRoute, gitCommit, gitCommitVerify, release, updatePkg } from './commands'; +import { loadCliOptions } from './config'; +import type { Lang } from './locales'; + +type Command = 'cleanup' | 'update-pkg' | 'git-commit' | 'git-commit-verify' | 'changelog' | 'release' | 'gen-route'; + +type CommandAction = (args?: A) => Promise | void; + +type CommandWithAction = Record }>; + +interface CommandArg { + /** Execute additional command after bumping and before git commit. Defaults to 'pnpm sa changelog' */ + execute?: string; + /** Indicates whether to push the git commit and tag. Defaults to true */ + push?: boolean; + /** Generate changelog by total tags */ + total?: boolean; + /** + * The glob pattern of dirs to clean up + * + * If not set, it will use the default value + * + * Multiple values use "," to separate them + */ + cleanupDir?: string; + /** + * display lang of cli + * + * @default 'en-us' + */ + lang?: Lang; +} + +export async function setupCli() { + const cliOptions = await loadCliOptions(); + + const cli = cac(blue('soybean-admin')); + + cli + .version(lightGreen(version)) + .option( + '-e, --execute [command]', + "Execute additional command after bumping and before git commit. Defaults to 'npx soy changelog'" + ) + .option('-p, --push', 'Indicates whether to push the git commit and tag') + .option('-t, --total', 'Generate changelog by total tags') + .option( + '-c, --cleanupDir ', + 'The glob pattern of dirs to cleanup, If not set, it will use the default value, Multiple values use "," to separate them' + ) + .option('-l, --lang ', 'display lang of cli', { default: 'en-us', type: [String] }) + .help(); + + const commands: CommandWithAction = { + cleanup: { + desc: 'delete dirs: node_modules, dist, etc.', + action: async () => { + await cleanup(cliOptions.cleanupDirs); + } + }, + 'update-pkg': { + desc: 'update package.json dependencies versions', + action: async () => { + await updatePkg(cliOptions.ncuCommandArgs); + } + }, + 'git-commit': { + desc: 'git commit, generate commit message which match Conventional Commits standard', + action: async args => { + await gitCommit(args?.lang); + } + }, + 'git-commit-verify': { + desc: 'verify git commit message, make sure it match Conventional Commits standard', + action: async args => { + await gitCommitVerify(args?.lang, cliOptions.gitCommitVerifyIgnores); + } + }, + changelog: { + desc: 'generate changelog', + action: async args => { + await genChangelog(cliOptions.changelogOptions, args?.total); + } + }, + release: { + desc: 'release: update version, generate changelog, commit code', + action: async args => { + await release(args?.execute, args?.push); + } + }, + 'gen-route': { + desc: 'generate route', + action: async () => { + await generateRoute(); + } + } + }; + + for (const [command, { desc, action }] of Object.entries(commands)) { + cli.command(command, lightGreen(desc)).action(action); + } + + cli.parse(); +} + +setupCli(); diff --git a/packages/scripts/src/locales/index.ts b/packages/scripts/src/locales/index.ts new file mode 100644 index 0000000..74321d0 --- /dev/null +++ b/packages/scripts/src/locales/index.ts @@ -0,0 +1,82 @@ +import { bgRed, green, red, yellow } from 'kolorist'; + +export type Lang = 'zh-cn' | 'en-us'; + +export const locales = { + 'zh-cn': { + gitCommitMessages: { + types: '่ฏท้€‰ๆ‹ฉๆไบค็ฑปๅž‹', + scopes: '่ฏท้€‰ๆ‹ฉๆไบค่Œƒๅ›ด', + description: `่ฏท่พ“ๅ…ฅๆ่ฟฐไฟกๆฏ๏ผˆ${yellow('!')}ๅผ€ๅคด่กจ็คบ็ ดๅๆ€งๆ”นๅŠจ` + }, + gitCommitTypes: [ + ['feat', 'ๆ–ฐๅŠŸ่ƒฝ'], + ['feat-wip', 'ๅผ€ๅ‘ไธญ็š„ๅŠŸ่ƒฝ๏ผŒๆฏ”ๅฆ‚ๆŸๅŠŸ่ƒฝ็š„้ƒจๅˆ†ไปฃ็ '], + ['fix', 'ไฟฎๅคBug'], + ['docs', 'ๅชๆถ‰ๅŠๆ–‡ๆกฃๆ›ดๆ–ฐ'], + ['typo', 'ไปฃ็ ๆˆ–ๆ–‡ๆกฃๅ‹˜่ฏฏ๏ผŒๆฏ”ๅฆ‚้”™่ฏฏๆ‹ผๅ†™'], + ['style', 'ไฟฎๆ”นไปฃ็ ้ฃŽๆ ผ๏ผŒไธๅฝฑๅ“ไปฃ็ ๅซไน‰็š„ๅ˜ๆ›ด'], + ['refactor', 'ไปฃ็ ้‡ๆž„๏ผŒๆ—ขไธไฟฎๅค bug ไนŸไธๆทปๅŠ ๅŠŸ่ƒฝ็š„ไปฃ็ ๅ˜ๆ›ด'], + ['perf', 'ๅฏๆ้ซ˜ๆ€ง่ƒฝ็š„ไปฃ็ ๆ›ดๆ”น'], + ['optimize', 'ไผ˜ๅŒ–ไปฃ็ ่ดจ้‡็š„ไปฃ็ ๆ›ดๆ”น'], + ['test', 'ๆทปๅŠ ็ผบๅคฑ็š„ๆต‹่ฏ•ๆˆ–ๆ›ดๆญฃ็Žฐๆœ‰ๆต‹่ฏ•'], + ['build', 'ๅฝฑๅ“ๆž„ๅปบ็ณป็ปŸๆˆ–ๅค–้ƒจไพ่ต–้กน็š„ๆ›ดๆ”น'], + ['ci', 'ๅฏน CI ้…็ฝฎๆ–‡ไปถๅ’Œ่„šๆœฌ็š„ๆ›ดๆ”น'], + ['chore', 'ๆฒกๆœ‰ไฟฎๆ”นsrcๆˆ–ๆต‹่ฏ•ๆ–‡ไปถ็š„ๅ…ถไป–ๅ˜ๆ›ด'], + ['revert', '่ฟ˜ๅŽŸๅ…ˆๅ‰็š„ๆไบค'] + ] as [string, string][], + gitCommitScopes: [ + ['projects', '้กน็›ฎ'], + ['packages', 'ๅŒ…'], + ['components', '็ป„ไปถ'], + ['hooks', '้’ฉๅญๅ‡ฝๆ•ฐ'], + ['utils', 'ๅทฅๅ…ทๅ‡ฝๆ•ฐ'], + ['types', 'TS็ฑปๅž‹ๅฃฐๆ˜Ž'], + ['styles', 'ไปฃ็ ้ฃŽๆ ผ'], + ['deps', '้กน็›ฎไพ่ต–'], + ['release', 'ๅ‘ๅธƒ้กน็›ฎๆ–ฐ็‰ˆๆœฌ'], + ['other', 'ๅ…ถไป–็š„ๅ˜ๆ›ด'] + ] as [string, string][], + gitCommitVerify: `${bgRed(' ้”™่ฏฏ ')} ${red('git ๆไบคไฟกๆฏๅฟ…้กป็ฌฆๅˆ Conventional Commits ๆ ‡ๅ‡†!')}\n\n${green( + 'ๆŽจ่ไฝฟ็”จๅ‘ฝไปค `pnpm commit` ็”Ÿๆˆ็ฌฆๅˆ Conventional Commits ๆ ‡ๅ‡†็š„ๆไบคไฟกๆฏใ€‚\n่Žทๅ–ๆœ‰ๅ…ณ Conventional Commits ็š„ๆ›ดๅคšไฟกๆฏ๏ผŒ่ฏท่ฎฟ้—ฎๆญค้“พๆŽฅ: https://conventionalcommits.org' + )}` + }, + 'en-us': { + gitCommitMessages: { + types: 'Please select a type', + scopes: 'Please select a scope', + description: `Please enter a description (add prefix ${yellow('!')} to indicate breaking change)` + }, + gitCommitTypes: [ + ['feat', 'A new feature'], + ['feat-wip', 'Features in development, such as partial code for a certain feature'], + ['fix', 'A bug fix'], + ['docs', 'Documentation only changes'], + ['typo', 'Code or document corrections, such as spelling errors'], + ['style', 'Changes that do not affect the meaning of the code'], + ['refactor', 'A code change that neither fixes a bug nor adds a feature'], + ['perf', 'A code change that improves performance'], + ['optimize', 'A code change that optimizes code quality'], + ['test', 'Adding missing tests or correcting existing tests'], + ['build', 'Changes that affect the build system or external dependencies'], + ['ci', 'Changes to our CI configuration files and scripts'], + ['chore', "Other changes that don't modify src or test files"], + ['revert', 'Reverts a previous commit'] + ] as [string, string][], + gitCommitScopes: [ + ['projects', 'project'], + ['packages', 'packages'], + ['components', 'components'], + ['hooks', 'hook functions'], + ['utils', 'utils functions'], + ['types', 'TS declaration'], + ['styles', 'style'], + ['deps', 'project dependencies'], + ['release', 'release project'], + ['other', 'other changes'] + ] as [string, string][], + gitCommitVerify: `${bgRed(' ERROR ')} ${red('git commit message must match the Conventional Commits standard!')}\n\n${green( + 'Recommended to use the command `pnpm commit` to generate Conventional Commits compliant commit information.\nGet more info about Conventional Commits, follow this link: https://conventionalcommits.org' + )}` + } +} satisfies Record>; diff --git a/packages/scripts/src/shared/index.ts b/packages/scripts/src/shared/index.ts new file mode 100644 index 0000000..9b1763f --- /dev/null +++ b/packages/scripts/src/shared/index.ts @@ -0,0 +1,7 @@ +import type { Options } from 'execa'; + +export async function execCommand(cmd: string, args: string[], options?: Options) { + const { execa } = await import('execa'); + const res = await execa(cmd, args, options); + return (res?.stdout as string)?.trim() || ''; +} diff --git a/packages/scripts/src/types/index.ts b/packages/scripts/src/types/index.ts new file mode 100644 index 0000000..32bc091 --- /dev/null +++ b/packages/scripts/src/types/index.ts @@ -0,0 +1,31 @@ +import type { ChangelogOption } from '@soybeanjs/changelog'; + +export interface CliOption { + /** The project root directory */ + cwd: string; + /** + * Cleanup dirs + * + * Glob pattern syntax {@link https://github.com/isaacs/minimatch} + * + * @default + * ```json + * ["** /dist", "** /pnpm-lock.yaml", "** /node_modules", "!node_modules/**"] + * ``` + */ + cleanupDirs: string[]; + /** + * Npm-check-updates command args + * + * @default ['--deep', '-u'] + */ + ncuCommandArgs: string[]; + /** + * Options of generate changelog + * + * @link https://github.com/soybeanjs/changelog + */ + changelogOptions: Partial; + /** The ignore pattern list of git commit verify */ + gitCommitVerifyIgnores: RegExp[]; +} diff --git a/packages/scripts/tsconfig.json b/packages/scripts/tsconfig.json new file mode 100644 index 0000000..67ab8a4 --- /dev/null +++ b/packages/scripts/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*", "typings/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/uno-preset/package.json b/packages/uno-preset/package.json new file mode 100644 index 0000000..808dec0 --- /dev/null +++ b/packages/uno-preset/package.json @@ -0,0 +1,12 @@ +{ + "name": "@sa/uno-preset", + "version": "1.3.13", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + } +} diff --git a/packages/uno-preset/src/index.ts b/packages/uno-preset/src/index.ts new file mode 100644 index 0000000..6a1ae42 --- /dev/null +++ b/packages/uno-preset/src/index.ts @@ -0,0 +1,55 @@ +// @unocss-include + +import type { Preset } from '@unocss/core'; +import type { Theme } from '@unocss/preset-uno'; + +export function presetSoybeanAdmin(): Preset { + const preset: Preset = { + name: 'preset-soybean-admin', + shortcuts: [ + { + 'flex-center': 'flex justify-center items-center', + 'flex-x-center': 'flex justify-center', + 'flex-y-center': 'flex items-center', + 'flex-col': 'flex flex-col', + 'flex-col-center': 'flex-center flex-col', + 'flex-col-stretch': 'flex-col items-stretch', + 'i-flex-center': 'inline-flex justify-center items-center', + 'i-flex-x-center': 'inline-flex justify-center', + 'i-flex-y-center': 'inline-flex items-center', + 'i-flex-col': 'flex-col inline-flex', + 'i-flex-col-center': 'flex-col i-flex-center', + 'i-flex-col-stretch': 'i-flex-col items-stretch', + 'flex-1-hidden': 'flex-1 overflow-hidden' + }, + { + 'absolute-lt': 'absolute left-0 top-0', + 'absolute-lb': 'absolute left-0 bottom-0', + 'absolute-rt': 'absolute right-0 top-0', + 'absolute-rb': 'absolute right-0 bottom-0', + 'absolute-tl': 'absolute-lt', + 'absolute-tr': 'absolute-rt', + 'absolute-bl': 'absolute-lb', + 'absolute-br': 'absolute-rb', + 'absolute-center': 'absolute-lt flex-center size-full', + 'fixed-lt': 'fixed left-0 top-0', + 'fixed-lb': 'fixed left-0 bottom-0', + 'fixed-rt': 'fixed right-0 top-0', + 'fixed-rb': 'fixed right-0 bottom-0', + 'fixed-tl': 'fixed-lt', + 'fixed-tr': 'fixed-rt', + 'fixed-bl': 'fixed-lb', + 'fixed-br': 'fixed-rb', + 'fixed-center': 'fixed-lt flex-center size-full' + }, + { + 'nowrap-hidden': 'overflow-hidden whitespace-nowrap', + 'ellipsis-text': 'nowrap-hidden text-ellipsis' + } + ] + }; + + return preset; +} + +export default presetSoybeanAdmin; diff --git a/packages/uno-preset/tsconfig.json b/packages/uno-preset/tsconfig.json new file mode 100644 index 0000000..5823ed5 --- /dev/null +++ b/packages/uno-preset/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/utils/package.json b/packages/utils/package.json new file mode 100644 index 0000000..f6d3376 --- /dev/null +++ b/packages/utils/package.json @@ -0,0 +1,22 @@ +{ + "name": "@sa/utils", + "version": "1.3.13", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "colord": "2.9.3", + "crypto-js": "4.2.0", + "klona": "2.0.6", + "localforage": "1.10.0", + "nanoid": "5.1.5" + }, + "devDependencies": { + "@types/crypto-js": "4.2.2" + } +} diff --git a/packages/utils/src/crypto.ts b/packages/utils/src/crypto.ts new file mode 100644 index 0000000..dc173c8 --- /dev/null +++ b/packages/utils/src/crypto.ts @@ -0,0 +1,27 @@ +import CryptoJS from 'crypto-js'; + +export class Crypto { + /** Secret */ + secret: string; + + constructor(secret: string) { + this.secret = secret; + } + + encrypt(data: T): string { + const dataString = JSON.stringify(data); + const encrypted = CryptoJS.AES.encrypt(dataString, this.secret); + return encrypted.toString(); + } + + decrypt(encrypted: string) { + const decrypted = CryptoJS.AES.decrypt(encrypted, this.secret); + const dataString = decrypted.toString(CryptoJS.enc.Utf8); + try { + return JSON.parse(dataString) as T; + } catch { + // avoid parse error + return null; + } + } +} diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts new file mode 100644 index 0000000..079fba6 --- /dev/null +++ b/packages/utils/src/index.ts @@ -0,0 +1,4 @@ +export * from './crypto'; +export * from './storage'; +export * from './nanoid'; +export * from './klona'; diff --git a/packages/utils/src/klona.ts b/packages/utils/src/klona.ts new file mode 100644 index 0000000..2fe5927 --- /dev/null +++ b/packages/utils/src/klona.ts @@ -0,0 +1,3 @@ +import { klona as jsonClone } from 'klona/json'; + +export { jsonClone }; diff --git a/packages/utils/src/nanoid.ts b/packages/utils/src/nanoid.ts new file mode 100644 index 0000000..5cc1d2e --- /dev/null +++ b/packages/utils/src/nanoid.ts @@ -0,0 +1,3 @@ +import { nanoid } from 'nanoid'; + +export { nanoid }; diff --git a/packages/utils/src/storage.ts b/packages/utils/src/storage.ts new file mode 100644 index 0000000..850562a --- /dev/null +++ b/packages/utils/src/storage.ts @@ -0,0 +1,76 @@ +import localforage from 'localforage'; + +/** The storage type */ +export type StorageType = 'local' | 'session'; + +export function createStorage(type: StorageType, storagePrefix: string) { + const stg = type === 'session' ? window.sessionStorage : window.localStorage; + + const storage = { + /** + * Set session + * + * @param key Session key + * @param value Session value + */ + set(key: K, value: T[K]) { + const json = JSON.stringify(value); + + stg.setItem(`${storagePrefix}${key as string}`, json); + }, + /** + * Get session + * + * @param key Session key + */ + get(key: K): T[K] | null { + const json = stg.getItem(`${storagePrefix}${key as string}`); + if (json) { + let storageData: T[K] | null = null; + + try { + storageData = JSON.parse(json); + } catch {} + + if (storageData) { + return storageData as T[K]; + } + } + + stg.removeItem(`${storagePrefix}${key as string}`); + + return null; + }, + remove(key: keyof T) { + stg.removeItem(`${storagePrefix}${key as string}`); + }, + clear() { + stg.clear(); + } + }; + return storage; +} + +type LocalForage = Omit & { + getItem(key: K, callback?: (err: any, value: T[K] | null) => void): Promise; + + setItem(key: K, value: T[K], callback?: (err: any, value: T[K]) => void): Promise; + + removeItem(key: keyof T, callback?: (err: any) => void): Promise; +}; + +type LocalforageDriver = 'local' | 'indexedDB' | 'webSQL'; + +export function createLocalforage(driver: LocalforageDriver) { + const driverMap: Record = { + local: localforage.LOCALSTORAGE, + indexedDB: localforage.INDEXEDDB, + webSQL: localforage.WEBSQL + }; + + localforage.config({ + driver: driverMap[driver] + }); + + return localforage as LocalForage; +} diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json new file mode 100644 index 0000000..5823ed5 --- /dev/null +++ b/packages/utils/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..583198e --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,8472 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@better-scroll/core': + specifier: 2.5.1 + version: 2.5.1 + '@iconify/vue': + specifier: 4.3.0 + version: 4.3.0(vue@3.5.13(typescript@5.8.2)) + '@sa/axios': + specifier: workspace:* + version: link:packages/axios + '@sa/color': + specifier: workspace:* + version: link:packages/color + '@sa/hooks': + specifier: workspace:* + version: link:packages/hooks + '@sa/materials': + specifier: workspace:* + version: link:packages/materials + '@sa/utils': + specifier: workspace:* + version: link:packages/utils + '@vueuse/core': + specifier: 13.0.0 + version: 13.0.0(vue@3.5.13(typescript@5.8.2)) + clipboard: + specifier: 2.0.11 + version: 2.0.11 + dayjs: + specifier: 1.11.13 + version: 1.11.13 + defu: + specifier: 6.1.4 + version: 6.1.4 + echarts: + specifier: 5.6.0 + version: 5.6.0 + json5: + specifier: 2.2.3 + version: 2.2.3 + naive-ui: + specifier: 2.41.0 + version: 2.41.0(vue@3.5.13(typescript@5.8.2)) + nprogress: + specifier: 0.2.0 + version: 0.2.0 + pinia: + specifier: 3.0.1 + version: 3.0.1(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)) + tailwind-merge: + specifier: 3.0.2 + version: 3.0.2 + vue: + specifier: 3.5.13 + version: 3.5.13(typescript@5.8.2) + vue-draggable-plus: + specifier: 0.6.0 + version: 0.6.0(@types/sortablejs@1.15.8) + vue-i18n: + specifier: 11.1.2 + version: 11.1.2(vue@3.5.13(typescript@5.8.2)) + vue-router: + specifier: 4.5.0 + version: 4.5.0(vue@3.5.13(typescript@5.8.2)) + devDependencies: + '@elegant-router/vue': + specifier: 0.3.8 + version: 0.3.8 + '@iconify/json': + specifier: 2.2.318 + version: 2.2.318 + '@sa/scripts': + specifier: workspace:* + version: link:packages/scripts + '@sa/uno-preset': + specifier: workspace:* + version: link:packages/uno-preset + '@soybeanjs/eslint-config': + specifier: 1.6.0 + version: 1.6.0(@unocss/eslint-config@66.0.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-plugin-vue@10.0.0(eslint@9.22.0(jiti@2.4.2))(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2))))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2))) + '@types/node': + specifier: 22.13.10 + version: 22.13.10 + '@types/nprogress': + specifier: 0.2.3 + version: 0.2.3 + '@unocss/eslint-config': + specifier: 66.0.0 + version: 66.0.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@unocss/preset-icons': + specifier: 66.0.0 + version: 66.0.0 + '@unocss/preset-uno': + specifier: 66.0.0 + version: 66.0.0 + '@unocss/transformer-directives': + specifier: 66.0.0 + version: 66.0.0 + '@unocss/transformer-variant-group': + specifier: 66.0.0 + version: 66.0.0 + '@unocss/vite': + specifier: 66.0.0 + version: 66.0.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) + '@vitejs/plugin-vue': + specifier: 5.2.3 + version: 5.2.3(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) + '@vitejs/plugin-vue-jsx': + specifier: 4.1.2 + version: 4.1.2(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) + consola: + specifier: 3.4.2 + version: 3.4.2 + eslint: + specifier: 9.22.0 + version: 9.22.0(jiti@2.4.2) + eslint-plugin-vue: + specifier: 10.0.0 + version: 10.0.0(eslint@9.22.0(jiti@2.4.2))(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2))) + kolorist: + specifier: 1.8.0 + version: 1.8.0 + lint-staged: + specifier: 15.5.0 + version: 15.5.0 + sass: + specifier: 1.86.0 + version: 1.86.0 + simple-git-hooks: + specifier: 2.11.1 + version: 2.11.1 + tsx: + specifier: 4.19.3 + version: 4.19.3 + typescript: + specifier: 5.8.2 + version: 5.8.2 + unplugin-icons: + specifier: 22.1.0 + version: 22.1.0(@vue/compiler-sfc@3.5.13) + unplugin-vue-components: + specifier: 28.4.1 + version: 28.4.1(@babel/parser@7.26.10)(vue@3.5.13(typescript@5.8.2)) + vite: + specifier: 6.2.2 + version: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0) + vite-plugin-progress: + specifier: 0.0.7 + version: 0.0.7(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0)) + vite-plugin-svg-icons: + specifier: 2.0.1 + version: 2.0.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0)) + vite-plugin-vue-devtools: + specifier: 7.7.2 + version: 7.7.2(rollup@4.36.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) + vue-eslint-parser: + specifier: 10.1.1 + version: 10.1.1(eslint@9.22.0(jiti@2.4.2)) + vue-tsc: + specifier: 2.2.8 + version: 2.2.8(typescript@5.8.2) + + packages/alova: + dependencies: + '@alova/mock': + specifier: 2.0.12 + version: 2.0.12(alova@3.2.10) + '@sa/utils': + specifier: workspace:* + version: link:../utils + alova: + specifier: 3.2.10 + version: 3.2.10 + + packages/axios: + dependencies: + '@sa/utils': + specifier: workspace:* + version: link:../utils + axios: + specifier: 1.8.3 + version: 1.8.3 + axios-retry: + specifier: 4.5.0 + version: 4.5.0(axios@1.8.3) + qs: + specifier: 6.14.0 + version: 6.14.0 + devDependencies: + '@types/qs': + specifier: 6.9.18 + version: 6.9.18 + + packages/color: + dependencies: + '@sa/utils': + specifier: workspace:* + version: link:../utils + colord: + specifier: 2.9.3 + version: 2.9.3 + + packages/hooks: + dependencies: + '@sa/axios': + specifier: workspace:* + version: link:../axios + '@sa/utils': + specifier: workspace:* + version: link:../utils + + packages/materials: + dependencies: + '@sa/utils': + specifier: workspace:* + version: link:../utils + simplebar-vue: + specifier: 2.4.0 + version: 2.4.0(vue@3.5.13(typescript@5.8.2)) + devDependencies: + typed-css-modules: + specifier: 0.9.1 + version: 0.9.1 + + packages/ofetch: + dependencies: + ofetch: + specifier: 1.4.1 + version: 1.4.1 + + packages/scripts: + devDependencies: + '@soybeanjs/changelog': + specifier: 0.3.24 + version: 0.3.24(@unocss/eslint-config@66.0.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-plugin-vue@10.0.0(eslint@9.22.0(jiti@2.4.2))(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2))))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2))) + bumpp: + specifier: 10.1.0 + version: 10.1.0 + c12: + specifier: 3.0.2 + version: 3.0.2 + cac: + specifier: 6.7.14 + version: 6.7.14 + consola: + specifier: 3.4.2 + version: 3.4.2 + enquirer: + specifier: 2.4.1 + version: 2.4.1 + execa: + specifier: 9.5.2 + version: 9.5.2 + kolorist: + specifier: 1.8.0 + version: 1.8.0 + npm-check-updates: + specifier: 17.1.15 + version: 17.1.15 + rimraf: + specifier: 6.0.1 + version: 6.0.1 + + packages/uno-preset: {} + + packages/utils: + dependencies: + colord: + specifier: 2.9.3 + version: 2.9.3 + crypto-js: + specifier: 4.2.0 + version: 4.2.0 + klona: + specifier: 2.0.6 + version: 2.0.6 + localforage: + specifier: 1.10.0 + version: 1.10.0 + nanoid: + specifier: 5.1.5 + version: 5.1.5 + devDependencies: + '@types/crypto-js': + specifier: 4.2.2 + version: 4.2.2 + +packages: + + '@alova/mock@2.0.12': + resolution: {integrity: sha512-y6dYxnVCto/oq5tvS2wAYRkedL2qZTPw8h/6xTvpbdATu5HkBo3LIZR+O6MjyaxyReJtpNlTTordQ0W4QMbR7w==} + peerDependencies: + alova: ^3.0.20 + + '@alova/shared@1.1.2': + resolution: {integrity: sha512-8q/gMHFpzm7XYcaUlsyTCMDRRhFnewwheTeObMjPl1+bFdr+wZuBEHEPYIyd8tyzLwfrqpBeonaMN2tlngM8EA==} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@antfu/eslint-define-config@1.23.0-2': + resolution: {integrity: sha512-LvxY21+ZhpuBf/aHeBUtGQhSEfad4PkNKXKvDOSvukaM3XVTfBhwmHX2EKwAsdq5DlfjbT3qqYyMiueBIO5iDQ==} + engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>= 8.6.0'} + + '@antfu/install-pkg@1.0.0': + resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==} + + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + + '@antfu/utils@8.1.1': + resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.10': + resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.26.9': + resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.26.5': + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.10': + resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.10': + resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-proposal-decorators@7.25.9': + resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-decorators@7.25.9': + resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.26.8': + resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.10': + resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.10': + resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} + engines: {node: '>=6.9.0'} + + '@better-scroll/core@2.5.1': + resolution: {integrity: sha512-koKOuYA55dQ04FJRIVUpMGDr1hbCfWmfX0MGp1hKagkQSWSRpwblqACiwtggVauoj9aaJRJZ9hDsTM4weaavlg==} + + '@better-scroll/shared-utils@2.5.1': + resolution: {integrity: sha512-AplkfSjXVYP9LZiD6JsKgmgQJ/mG4uuLmBuwLz8W5OsYc7AYTfN8kw6GqZ5OwCGoXkVhBGyd8NeC4xwYItp0aw==} + + '@css-render/plugin-bem@0.15.14': + resolution: {integrity: sha512-QK513CJ7yEQxm/P3EwsI+d+ha8kSOcjGvD6SevM41neEMxdULE+18iuQK6tEChAWMOQNQPLG/Rw3Khb69r5neg==} + peerDependencies: + css-render: ~0.15.14 + + '@css-render/vue3-ssr@0.15.14': + resolution: {integrity: sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==} + peerDependencies: + vue: ^3.0.11 + + '@elegant-router/core@0.3.8': + resolution: {integrity: sha512-q8CihD9la9V2H+/OYIzMLftXSBkbT234UMwhMxDL1Gq7BGKU3kEIEJvifRM7htbiRD77bkQhwMGBY3WZacqw8A==} + + '@elegant-router/vue@0.3.8': + resolution: {integrity: sha512-K9x2275vw9kQB25WnZ7ROTLsT3o8bxu8acvwF09Do8hexIKG2i6elV0+pWxaufNZ4XCuBxT+lKHfHeyBbRhtYQ==} + + '@emotion/hash@0.8.0': + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + + '@esbuild/aix-ppc64@0.25.1': + resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.1': + resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.1': + resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.1': + resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.1': + resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.1': + resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.1': + resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.1': + resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.1': + resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.1': + resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.1': + resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.1': + resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.1': + resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.1': + resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.1': + resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.1': + resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.1': + resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.1': + resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.1': + resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.1': + resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.1': + resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.1': + resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.1': + resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.1': + resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.1': + resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.5.1': + resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/compat@1.2.7': + resolution: {integrity: sha512-xvv7hJE32yhegJ8xNAnb62ggiAwTYHBpUCWhRxEj/ksvgDJuSXfoDkBcRYaYNFiJ+jH0IE3K16hd+xXzhBgNbg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.10.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.1.0': + resolution: {integrity: sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.12.0': + resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.0': + resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.22.0': + resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.7': + resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + engines: {node: '>=18.18'} + + '@iconify/json@2.2.318': + resolution: {integrity: sha512-8hmJxD/l322LLyQzt9s6aPCE6O+p86H9GVFhoH3hEQ9PRrU5O3Ptf8tlzFKzkBrBoEqdSzkAG5j8bwGt47Ragw==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@2.3.0': + resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} + + '@iconify/vue@4.3.0': + resolution: {integrity: sha512-Xq0h6zMrHBbrW8jXJ9fISi+x8oDQllg5hTDkDuxnWiskJ63rpJu9CvJshj8VniHVTbsxCg9fVoPAaNp3RQI5OQ==} + peerDependencies: + vue: '>=3' + + '@intlify/core-base@11.1.2': + resolution: {integrity: sha512-nmG512G8QOABsserleechwHGZxzKSAlggGf9hQX0nltvSwyKNVuB/4o6iFeG2OnjXK253r8p8eSDOZf8PgFdWw==} + engines: {node: '>= 16'} + + '@intlify/message-compiler@11.1.2': + resolution: {integrity: sha512-T/xbNDzi+Yv0Qn2Dfz2CWCAJiwNgU5d95EhhAEf4YmOgjCKktpfpiUSmLcBvK1CtLpPQ85AMMQk/2NCcXnNj1g==} + engines: {node: '>= 16'} + + '@intlify/shared@11.1.2': + resolution: {integrity: sha512-dF2iMMy8P9uKVHV/20LA1ulFLL+MKSbfMiixSmn6fpwqzvix38OIc7ebgnFbBqElvghZCW9ACtzKTGKsTGTWGA==} + engines: {node: '>= 16'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@juggle/resize-observer@3.4.0': + resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} + + '@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'} + + '@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'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + 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.36.0': + resolution: {integrity: sha512-jgrXjjcEwN6XpZXL0HUeOVGfjXhPyxAbbhD0BlXUB+abTOpbPiN5Wb3kOT7yb+uEtATNYF5x5gIfwutmuBA26w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.36.0': + resolution: {integrity: sha512-NyfuLvdPdNUfUNeYKUwPwKsE5SXa2J6bCt2LdB/N+AxShnkpiczi3tcLJrm5mA+eqpy0HmaIY9F6XCa32N5yzg==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.36.0': + resolution: {integrity: sha512-JQ1Jk5G4bGrD4pWJQzWsD8I1n1mgPXq33+/vP4sk8j/z/C2siRuxZtaUA7yMTf71TCZTZl/4e1bfzwUmFb3+rw==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.36.0': + resolution: {integrity: sha512-6c6wMZa1lrtiRsbDziCmjE53YbTkxMYhhnWnSW8R/yqsM7a6mSJ3uAVT0t8Y/DGt7gxUWYuFM4bwWk9XCJrFKA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.36.0': + resolution: {integrity: sha512-KXVsijKeJXOl8QzXTsA+sHVDsFOmMCdBRgFmBb+mfEb/7geR7+C8ypAml4fquUt14ZyVXaw2o1FWhqAfOvA4sg==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.36.0': + resolution: {integrity: sha512-dVeWq1ebbvByI+ndz4IJcD4a09RJgRYmLccwlQ8bPd4olz3Y213uf1iwvc7ZaxNn2ab7bjc08PrtBgMu6nb4pQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.36.0': + resolution: {integrity: sha512-bvXVU42mOVcF4le6XSjscdXjqx8okv4n5vmwgzcmtvFdifQ5U4dXFYaCB87namDRKlUL9ybVtLQ9ztnawaSzvg==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.36.0': + resolution: {integrity: sha512-JFIQrDJYrxOnyDQGYkqnNBtjDwTgbasdbUiQvcU8JmGDfValfH1lNpng+4FWlhaVIR4KPkeddYjsVVbmJYvDcg==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.36.0': + resolution: {integrity: sha512-KqjYVh3oM1bj//5X7k79PSCZ6CvaVzb7Qs7VMWS+SlWB5M8p3FqufLP9VNp4CazJ0CsPDLwVD9r3vX7Ci4J56A==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.36.0': + resolution: {integrity: sha512-QiGnhScND+mAAtfHqeT+cB1S9yFnNQ/EwCg5yE3MzoaZZnIV0RV9O5alJAoJKX/sBONVKeZdMfO8QSaWEygMhw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loongarch64-gnu@4.36.0': + resolution: {integrity: sha512-1ZPyEDWF8phd4FQtTzMh8FQwqzvIjLsl6/84gzUxnMNFBtExBtpL51H67mV9xipuxl1AEAerRBgBwFNpkw8+Lg==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-powerpc64le-gnu@4.36.0': + resolution: {integrity: sha512-VMPMEIUpPFKpPI9GZMhJrtu8rxnp6mJR3ZzQPykq4xc2GmdHj3Q4cA+7avMyegXy4n1v+Qynr9fR88BmyO74tg==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-gnu@4.36.0': + resolution: {integrity: sha512-ttE6ayb/kHwNRJGYLpuAvB7SMtOeQnVXEIpMtAvx3kepFQeowVED0n1K9nAdraHUPJ5hydEMxBpIR7o4nrm8uA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-s390x-gnu@4.36.0': + resolution: {integrity: sha512-4a5gf2jpS0AIe7uBjxDeUMNcFmaRTbNv7NxI5xOCs4lhzsVyGR/0qBXduPnoWf6dGC365saTiwag8hP1imTgag==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.36.0': + resolution: {integrity: sha512-5KtoW8UWmwFKQ96aQL3LlRXX16IMwyzMq/jSSVIIyAANiE1doaQsx/KRyhAvpHlPjPiSU/AYX/8m+lQ9VToxFQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.36.0': + resolution: {integrity: sha512-sycrYZPrv2ag4OCvaN5js+f01eoZ2U+RmT5as8vhxiFz+kxwlHrsxOwKPSA8WyS+Wc6Epid9QeI/IkQ9NkgYyQ==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-win32-arm64-msvc@4.36.0': + resolution: {integrity: sha512-qbqt4N7tokFwwSVlWDsjfoHgviS3n/vZ8LK0h1uLG9TYIRuUTJC88E1xb3LM2iqZ/WTqNQjYrtmtGmrmmawB6A==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.36.0': + resolution: {integrity: sha512-t+RY0JuRamIocMuQcfwYSOkmdX9dtkr1PbhKW42AMvaDQa+jOdpUYysroTF/nuPpAaQMWp7ye+ndlmmthieJrQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.36.0': + resolution: {integrity: sha512-aRXd7tRZkWLqGbChgcMMDEHjOKudo1kChb1Jt1IfR8cY/KIpgNviLeJy5FUb9IpSuQj8dU2fAYNMPW/hLKOSTw==} + cpu: [x64] + os: [win32] + + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@soybeanjs/changelog@0.3.24': + resolution: {integrity: sha512-QQVDFOsAdrYkyE5eEXuwtEi3poIOptkZhA0NxV2dfZoU3ChfFo0pkkuDplgpXaZvx09Omu2i04fdNKxFftAC3w==} + engines: {node: '>=16', pnpm: '>=9'} + + '@soybeanjs/eslint-config@1.6.0': + resolution: {integrity: sha512-ogBm0uXN+TkOVZeE1wsDSGu5/fhE1tzTEJYgKjqGXN0X0knRWtTnWxZ+AydT0nKavjcltNYT5Clk/gmB7sL/ww==} + peerDependencies: + '@toml-tools/parser': '*' + '@unocss/eslint-config': '>=0.58.0' + eslint: '>=8.40.0' + eslint-plugin-astro: '>=0.30.0' + eslint-plugin-react: '>=7.0.0' + eslint-plugin-react-hooks: '>=4.0.0' + eslint-plugin-react-native: '>=4.0.0' + eslint-plugin-react-refresh: '>=0.4.0' + eslint-plugin-solid: '>=0.10.0' + eslint-plugin-svelte: '>=2.0.0' + eslint-plugin-vue: '>=9.19.0' + prettier-plugin-astro: '>=0.12.0' + prettier-plugin-svelte: '>=3.0.0' + prettier-plugin-toml: '>=2.0.0' + typescript: '>=5.0.0' + vue-eslint-parser: '>=9.3.2' + peerDependenciesMeta: + '@toml-tools/parser': + optional: true + '@unocss/eslint-config': + optional: true + eslint-plugin-astro: + optional: true + eslint-plugin-react: + optional: true + eslint-plugin-react-hooks: + optional: true + eslint-plugin-react-native: + optional: true + eslint-plugin-react-refresh: + optional: true + eslint-plugin-solid: + optional: true + eslint-plugin-svelte: + optional: true + eslint-plugin-vue: + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-svelte: + optional: true + prettier-plugin-toml: + optional: true + vue-eslint-parser: + optional: true + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@types/crypto-js@4.2.2': + resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/doctrine@0.0.9': + resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/katex@0.16.7': + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.16': + resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/node@10.17.60': + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + + '@types/node@22.13.10': + resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/nprogress@0.2.3': + resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} + + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + + '@types/sortablejs@1.15.8': + resolution: {integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==} + + '@types/svgo@2.6.4': + resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@typescript-eslint/eslint-plugin@8.26.1': + resolution: {integrity: sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/parser@8.26.1': + resolution: {integrity: sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.26.1': + resolution: {integrity: sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.26.1': + resolution: {integrity: sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/types@8.26.1': + resolution: {integrity: sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.26.1': + resolution: {integrity: sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.26.1': + resolution: {integrity: sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.26.1': + resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@unocss/config@66.0.0': + resolution: {integrity: sha512-nFRGop/guBa4jLkrgXjaRDm5JPz4x3YpP10m5IQkHpHwlnHUVn1L9smyPl04ohYWhYn9ZcAHgR28Ih2jwta8hw==} + engines: {node: '>=14'} + + '@unocss/core@66.0.0': + resolution: {integrity: sha512-PdVbSMHNDDkr++9nkqzsZRAkaU84gxMTEgYbqI7dt2p1DXp/5tomVtmMsr2/whXGYKRiUc0xZ3p4Pzraz8TcXA==} + + '@unocss/eslint-config@66.0.0': + resolution: {integrity: sha512-xTMbWe8a51IpdcipV0mwbc2uYldY+dNKPGEF8TFAEvVH8zQvtMxuOKC1itOPe29o4dm/TABK/p+Gxt44RL/ISw==} + engines: {node: '>=14'} + + '@unocss/eslint-plugin@66.0.0': + resolution: {integrity: sha512-KTP6uK0loH9+PkUjL2F4eyuMcUZRiVYkg4zJfqVWNctE1yGkuTUzCvm6ORRvLakajAU8G/Zzvuo1pE94zyZQbw==} + engines: {node: '>=14'} + + '@unocss/extractor-arbitrary-variants@66.0.0': + resolution: {integrity: sha512-vlkOIOuwBfaFBJcN6o7+obXjigjOlzVFN/jT6pG1WXbQDTRZ021jeF3i9INdb9D/0cQHSeDvNgi1TJ5oUxfiow==} + + '@unocss/inspector@66.0.0': + resolution: {integrity: sha512-mkIxieVm0kMOKw+E4ABpIerihYMdjgq9A92RD5h2+W/ebpxTEw5lTTK1xcMLiAlmOrVYMQKjpgPeu3vQmDyGZQ==} + + '@unocss/preset-icons@66.0.0': + resolution: {integrity: sha512-6ObwTvEGuPBbKWRoMMiDioHtwwQTFI5oojFLJ32Y8tW6TdXvBLkO88d7qpgQxEjgVt4nJrqF1WEfR4niRgBm0Q==} + + '@unocss/preset-mini@66.0.0': + resolution: {integrity: sha512-d62eACnuKtR0dwCFOQXgvw5VLh5YSyK56xCzpHkh0j0GstgfDLfKTys0T/XVAAvdSvAy/8A8vhSNJ4PlIc9V2A==} + + '@unocss/preset-uno@66.0.0': + resolution: {integrity: sha512-qgoZ/hzTI32bQvcyjcwvv1X/dbPlmQNehzgjUaL7QFT0q0/CN/SRpysfzoQ8DLl2se9T+YCOS9POx3KrpIiYSQ==} + + '@unocss/preset-wind3@66.0.0': + resolution: {integrity: sha512-WAGRmpi1sb2skvYn9DBQUvhfqrJ+VmQmn5ZGsT2ewvsk7HFCvVLAMzZeKrrTQepeNBRhg6HzFDDi8yg6yB5c9g==} + + '@unocss/rule-utils@66.0.0': + resolution: {integrity: sha512-UJ51YHbwxYTGyj35ugsPlOT4gaa7tCbXdywZ3m5Nn0JgywwIqGmBFyiN9ZjHBHfJuDxmmPd6lxojoBscih/WMQ==} + engines: {node: '>=14'} + + '@unocss/transformer-directives@66.0.0': + resolution: {integrity: sha512-utcg7m2Foi7uHrU5WHadNuJ0a3qWG8tZNkQMi+m0DQpX6KWfuDtDn0zDZ1X+z5lmiB3WGSJERRrsvZbj1q50Mw==} + + '@unocss/transformer-variant-group@66.0.0': + resolution: {integrity: sha512-1BLjNWtAnR1JAcQGw0TS+nGrVoB9aznzvVZRoTx23dtRr3btvgKPHb8LrD48eD/p8Dtw9j3WfuxMDKXKegKDLg==} + + '@unocss/vite@66.0.0': + resolution: {integrity: sha512-IVcPX8xL+2edyXKt4tp9yu5A6gcbPVCsspfcL0XgziCr01kS+4qSoZ90F3IUs3hXc/AyO5eCpRtGFMPLpOjXQg==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 + + '@vitejs/plugin-vue-jsx@4.1.2': + resolution: {integrity: sha512-4Rk0GdE0QCdsIkuMmWeg11gmM4x8UmTnZR/LWPm7QJ7+BsK4tq08udrN0isrrWqz5heFy9HLV/7bOLgFS8hUjA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.0.0 + + '@vitejs/plugin-vue@5.2.3': + resolution: {integrity: sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + + '@volar/language-core@2.4.12': + resolution: {integrity: sha512-RLrFdXEaQBWfSnYGVxvR2WrO6Bub0unkdHYIdC31HzIEqATIuuhRRzYu76iGPZ6OtA4Au1SnW0ZwIqPP217YhA==} + + '@volar/source-map@2.4.12': + resolution: {integrity: sha512-bUFIKvn2U0AWojOaqf63ER0N/iHIBYZPpNGogfLPQ68F5Eet6FnLlyho7BS0y2HJ1jFhSif7AcuTx1TqsCzRzw==} + + '@volar/typescript@2.4.12': + resolution: {integrity: sha512-HJB73OTJDgPc80K30wxi3if4fSsZZAOScbj2fcicMuOPoOkcf9NNAINb33o+DzhBdF9xTKC1gnPmIRDous5S0g==} + + '@vue/babel-helper-vue-transform-on@1.4.0': + resolution: {integrity: sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==} + + '@vue/babel-plugin-jsx@1.4.0': + resolution: {integrity: sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@1.4.0': + resolution: {integrity: sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/compiler-vue2@2.7.16': + resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/devtools-api@7.7.2': + resolution: {integrity: sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==} + + '@vue/devtools-core@7.7.2': + resolution: {integrity: sha512-lexREWj1lKi91Tblr38ntSsy6CvI8ba7u+jmwh2yruib/ltLUcsIzEjCnrkh1yYGGIKXbAuYV2tOG10fGDB9OQ==} + peerDependencies: + vue: ^3.0.0 + + '@vue/devtools-kit@7.7.2': + resolution: {integrity: sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==} + + '@vue/devtools-shared@7.7.2': + resolution: {integrity: sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==} + + '@vue/language-core@2.2.8': + resolution: {integrity: sha512-rrzB0wPGBvcwaSNRriVWdNAbHQWSf0NlGqgKHK5mEkXpefjUlVRP62u03KvwZpvKVjRnBIQ/Lwre+Mx9N6juUQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + '@vueuse/core@13.0.0': + resolution: {integrity: sha512-rkgb4a8/0b234lMGCT29WkCjPfsX0oxrIRR7FDndRoW3FsaC9NBzefXg/9TLhAgwM11f49XnutshM4LzJBrQ5g==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/metadata@13.0.0': + resolution: {integrity: sha512-TRNksqmvtvqsuHf7bbgH9OSXEV2b6+M3BSN4LR5oxWKykOFT9gV78+C2/0++Pq9KCp9KQ1OQDPvGlWNQpOb2Mw==} + + '@vueuse/shared@13.0.0': + resolution: {integrity: sha512-9MiHhAPw+sqCF/RLo8V6HsjRqEdNEWVpDLm2WBRW2G/kSQjb8X901sozXpSCaeLG0f7TEfMrT4XNaA5m1ez7Dg==} + peerDependencies: + vue: ^3.5.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + alien-signals@1.0.4: + resolution: {integrity: sha512-DJqqQD3XcsaQcQ1s+iE2jDUZmmQpXwHiR6fCAim/w87luaW+vmLY8fMlrdkmRwzaFXhkxf3rqPCR59tKVv1MDw==} + + alova@3.2.10: + resolution: {integrity: sha512-OHMuSNUbIUEsAq6q5DabISNgFMIXqrC/DPBQv1QJEwxW3fWlYlaF6Vr8b4iqwZnUd2+0rCmFm9GnpKWk7vvx2w==} + engines: {node: '>= 18.0.0'} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + ansis@3.17.0: + resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} + engines: {node: '>=14'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + args-tokenizer@0.3.0: + resolution: {integrity: sha512-xXAd7G2Mll5W8uo37GETpQ2VrE84M181Z7ugHFGQnJZ50M2mbOv0osSZ9VsSgPfJQ+LVG0prSi0th+ELMsno7Q==} + + arr-diff@4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + + arr-flatten@1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + + arr-union@3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-unique@0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + assign-symbols@1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios-retry@4.5.0: + resolution: {integrity: sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ==} + peerDependencies: + axios: 0.x || 1.x + + axios@1.8.3: + resolution: {integrity: sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base@0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + binary-searching@2.0.5: + resolution: {integrity: sha512-v4N2l3RxL+m4zDxyxz3Ne2aTmiPn8ZUpKFpdPtO+ItW1NcTCXA7JeHG5GMBSvoKSkQZ9ycS+EouDVxYB9ufKWA==} + + birpc@0.2.19: + resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + builtin-modules@4.0.0: + resolution: {integrity: sha512-p1n8zyCkt1BVrKNFymOHjcDSAl7oq/gUvfgULv2EblgpPVQlQr9yHnWjg9IJ2MhfwPqiYqMMrr01OY7yQoK2yA==} + engines: {node: '>=18.20'} + + bumpp@10.1.0: + resolution: {integrity: sha512-cM/4+kO2A2l3aDSL7tr/ALg8TWPihl1fDWHZyz55JlDmzd01Y+8Vq3YQ1ydeKDS4QFN+tKaLsVzhdDIb/cbsLQ==} + engines: {node: '>=18'} + hasBin: true + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + c12@3.0.2: + resolution: {integrity: sha512-6Tzk1/TNeI3WBPpK0j/Ss4+gPj3PUJYbWl/MWDJBThFvwNGNkXtd7Cz8BJtD4aRwoGHtzQD0SnxamgUiBH0/Nw==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cache-base@1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + 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@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001706: + resolution: {integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==} + + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + ci-info@4.2.0: + resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} + engines: {node: '>=8'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + class-utils@0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + clipboard@2.0.11: + resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + collection-visit@1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + + 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@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} + engines: {node: '>= 12.0.0'} + + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.1: + resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==} + + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + convert-gitmoji@0.1.5: + resolution: {integrity: sha512-4wqOafJdk2tqZC++cjcbGcaJ13BZ3kwldf06PTiAQRAB76Z1KJwZNL1SaRZMi2w1FM9RYTgZ6QErS8NUl/GBmQ==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + + copy-descriptor@0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + + core-js-compat@3.41.0: + resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + + css-render@0.15.14: + resolution: {integrity: sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==} + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.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.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + + csstype@3.0.11: + resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + date-fns-tz@3.2.0: + resolution: {integrity: sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==} + peerDependencies: + date-fns: ^3.0.0 || ^4.0.0 + + date-fns@3.6.0: + resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + + dayjs@1.11.11: + resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.1.0: + resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + define-property@0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + + define-property@1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + + define-property@2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegate@3.2.0: + resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-serializer@0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@2.4.2: + resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + echarts@5.6.0: + resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==} + + electron-to-chromium@1.5.120: + resolution: {integrity: sha512-oTUp3gfX1gZI+xfD2djr2rzQdHCwHzPQrrK0CD7WpTdF0nPdQ/INcRVjWgLdCT4a9W3jFObR9DAfsuyFQnI8CQ==} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + entities@1.1.2: + resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-stack-parser-es@0.1.5: + resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} + + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + + 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-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'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + esbuild@0.25.1: + resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + + eslint-config-flat-gitignore@2.1.0: + resolution: {integrity: sha512-cJzNJ7L+psWp5mXM7jBX+fjHtBvvh06RBlcweMhKD8jWqQw0G78hOW5tpVALGHGFPsBV+ot2H+pdDGJy6CV8pA==} + peerDependencies: + eslint: ^9.5.0 + + eslint-config-prettier@10.1.1: + resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-parser-plain@0.1.1: + resolution: {integrity: sha512-KRgd6wuxH4U8kczqPp+Oyk4irThIhHWxgFgLDtpgjUGVIS3wGrJntvZW/p6hHq1T4FOwnOtCNkvAI4Kr+mQ/Hw==} + + eslint-plugin-es-x@7.8.0: + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' + + eslint-plugin-import-x@4.6.1: + resolution: {integrity: sha512-wluSUifMIb7UfwWXqx7Yx0lE/SGCcGXECLx/9bCmbY2nneLwvAZ4vkd1IXDjPKFvdcdUgr1BaRnaRpx3k2+Pfw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + eslint-plugin-n@17.16.2: + resolution: {integrity: sha512-iQM5Oj+9o0KaeLoObJC/uxNGpktZCkYiTTBo8PkRWq3HwNcRxwpvSDFjBhQ5+HLJzBTy+CLDC5+bw0Z5GyhlOQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.23.0' + + eslint-plugin-prettier@5.2.3: + resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-unicorn@57.0.0: + resolution: {integrity: sha512-zUYYa6zfNdTeG9BISWDlcLmz16c+2Ck2o5ZDHh0UzXJz3DEP7xjmlVDTzbyV0W+XksgZ0q37WEWzN2D2Ze+g9Q==} + engines: {node: '>=18.18'} + peerDependencies: + eslint: '>=9.20.0' + + eslint-plugin-vue@10.0.0: + resolution: {integrity: sha512-XKckedtajqwmaX6u1VnECmZ6xJt+YvlmMzBPZd+/sI3ub2lpYZyFnsyWo7c3nMOQKJQudeyk1lw/JxdgeKT64w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + vue-eslint-parser: ^10.0.0 + + eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + 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.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.22.0: + resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + 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==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + evtd@0.2.4: + resolution: {integrity: sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + execa@9.1.0: + resolution: {integrity: sha512-lSgHc4Elo2m6bUDhc3Hl/VxvUDJdQWI40RZ4KMY9bKRc+hgMOT7II/JjbNDhI8VnMtrCb7U/fhpJIkLORZozWw==} + engines: {node: '>=18'} + + execa@9.5.2: + resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} + engines: {node: ^18.19.0 || >=20.5.0} + + expand-brackets@2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + + exsolve@1.0.4: + resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} + + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + + extend-shallow@3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + + extglob@2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + 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==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + fragment-cache@0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + 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==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + 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.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + 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'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + + get-value@2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + + giget@2.0.0: + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} + 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@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@11.0.1: + resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} + engines: {node: 20 || >=22} + hasBin: true + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + 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'} + + globals@16.0.0: + resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + good-listener@1.2.2: + resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + 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'} + + has-value@0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + + has-value@1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + + has-values@0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + + has-values@1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + + htmlparser2@3.10.1: + resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + human-signals@7.0.0: + resolution: {integrity: sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==} + engines: {node: '>=18.18.0'} + + human-signals@8.0.0: + resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} + engines: {node: '>=18.18.0'} + + icss-replace-symbols@1.1.0: + resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} + + icss-utils@5.1.0: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + index-to-position@0.1.2: + resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} + engines: {node: '>=18'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + is-accessor-descriptor@1.0.1: + resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} + engines: {node: '>= 0.10'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-builtin-module@4.0.0: + resolution: {integrity: sha512-rWP3AMAalQSesXO8gleROyL2iKU73SX5Er66losQn9rWOWL4Gef0a/xOEOVqjWGMuR2vHG3FJ8UUmT700O8oFg==} + engines: {node: '>=18.20'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-descriptor@1.0.1: + resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-descriptor@0.1.7: + resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} + engines: {node: '>= 0.4'} + + is-descriptor@1.0.3: + resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==} + engines: {node: '>= 0.4'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + is-extendable@1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-retry-allowed@2.2.0: + resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} + engines: {node: '>=10'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-there@4.5.2: + resolution: {integrity: sha512-ixMkfz3rtS1vEsLf0TjgjqUn96Q0ukpUVDMnPYVocJyTzu2G/QgEtqYddcHZawHO+R31cKVPggJmBLrm1vJCOg==} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jackspeak@4.1.0: + resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} + engines: {node: 20 || >=22} + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + js-base64@2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + 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-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + + kind-of@4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + + kind-of@5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + 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==} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lint-staged@15.5.0: + resolution: {integrity: sha512-WyCzSbfYGhK7cU+UuDDkzUiytbfbi0ZdPy2orwtM75P3WTtQBzmG40cCxIa8Ii2+XjfxzLH6Be46tUfWS85Xfg==} + engines: {node: '>=18.12.0'} + hasBin: true + + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + engines: {node: '>=18.0.0'} + + loader-utils@1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} + + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} + 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'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + 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@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + magicast@0.3.4: + resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==} + + map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + + map-visit@1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + + merge-options@1.0.1: + resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==} + engines: {node: '>=4'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + micromatch@3.1.0: + resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==} + engines: {node: '>=0.10.0'} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + 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==} + + mixin-deep@1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + naive-ui@2.41.0: + resolution: {integrity: sha512-KnmLg+xPLwXV8QVR7ZZ69eCjvel7R5vru8+eFe4VoAJHEgqAJgVph6Zno9K2IVQRpSF3GBGea3tjavslOR4FAA==} + peerDependencies: + vue: ^3.0.0 + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanoid@5.1.5: + resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} + engines: {node: ^18 || >=20} + hasBin: true + + nanomatch@1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + + 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.6: + resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-check-updates@17.1.15: + resolution: {integrity: sha512-miATvKu5rjec/1wxc5TGDjpsucgtCHwRVZorZpDkS6NzdWXfnUWlN4abZddWb7XSijAuBNzzYglIdTm9SbgMVg==} + engines: {node: ^18.18.0 || >=20.0.0, npm: '>=8.12.1'} + hasBin: true + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + 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.0: + resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-copy@0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object-visit@1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.pick@1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + + ofetch@1.3.4: + resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==} + + ofetch@1.4.1: + resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-manager-detector@0.2.11: + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + + package-manager-detector@1.1.0: + resolution: {integrity: sha512-Y8f9qUlBzW8qauJjd/eu6jlpJZsuPJm2ZAV0cDVd420o4EdpH5RPdoCv+60/TdJflGatr4sDfpAL6ArWZbM5tA==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@8.1.0: + resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} + engines: {node: '>=18'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + + pascalcase@0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + + 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-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + pathe@0.2.0: + resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pinia@3.0.1: + resolution: {integrity: sha512-WXglsDzztOTH6IfcJ99ltYZin2mY8XZCXujkYWVIJlBjqsP6ST7zw+Aarh63E1cDVYeyUcPCxPHzJpEOmzB6Wg==} + peerDependencies: + typescript: '>=4.4.4' + vue: ^2.7.0 || ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.1.0: + resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + posix-character-classes@0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.1: + resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-prefix-selector@1.16.1: + resolution: {integrity: sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==} + peerDependencies: + postcss: '>4 <9' + + 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-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@5.2.18: + resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==} + engines: {node: '>=0.12'} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + posthtml-parser@0.2.1: + resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==} + + posthtml-rename-id@1.0.12: + resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==} + + posthtml-render@1.4.0: + resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==} + engines: {node: '>=10'} + + posthtml-svg-mode@1.0.3: + resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==} + + posthtml@0.9.2: + resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==} + engines: {node: '>=0.10.0'} + + 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-plugin-jsdoc@1.3.2: + resolution: {integrity: sha512-LNi9eq0TjyZn/PUNf/SYQxxUvGg5FLK4alEbi3i/S+2JbMyTu790c/puFueXzx09KP44oWCJ+TaHRyM/a0rKJQ==} + engines: {node: '>=14.13.1 || >=16.0.0'} + peerDependencies: + prettier: ^3.0.0 + + prettier-plugin-json-sort@0.0.2: + resolution: {integrity: sha512-xd5VVfneeUBdWhTm5uh0rAto3qnkkosbte6poO5WVTZEAiQdndMQMRPv1SROXx968zfyAlS+Z+C6rkr4jbVOgg==} + peerDependencies: + prettier: '>=2.0.0' + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + engines: {node: '>=14'} + hasBin: true + + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + 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'} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + + query-string@4.3.4: + resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==} + engines: {node: '>=0.10.0'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + rate-limiter-flexible@5.0.5: + resolution: {integrity: sha512-+/dSQfo+3FYwYygUs/V2BBdwGa9nFtakDwKt4l0bnvNB53TNT++QSFewwHX9qXrZJuMe9j+TUaU21lm5ARgqdQ==} + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + rd@2.0.1: + resolution: {integrity: sha512-/XdKU4UazUZTXFmI0dpABt8jSXPWcEyaGdk340KdHnsEOdkTctlX23aAK7ChQDn39YGNlAJr1M5uvaKt4QnpNw==} + + read-package-up@11.0.0: + resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} + engines: {node: '>=18'} + + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + recast@0.23.9: + resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} + engines: {node: '>= 4'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regex-not@1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + + repeat-element@1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve-url@0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + + 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@4.36.0: + resolution: {integrity: sha512-zwATAXNQxUcd40zgtQG0ZafcRK4g004WtEl7kbuhTWPvf07PsfohXl39jVUvPF7jvNAIkKPQ2XrsDlWuxBd++Q==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-regex@1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + + sass@1.86.0: + resolution: {integrity: sha512-zV8vGUld/+mP4KbMLJMX7TyGCuUp7hnkOScgCMsWuHtns8CWBoz+vmEhoGMXsaJrbUP8gj+F1dLvVe79sK8UdA==} + engines: {node: '>=14.0.0'} + hasBin: true + + seemly@0.3.10: + resolution: {integrity: sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==} + + select@1.1.2: + resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + set-value@2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + + 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'} + + simple-git-hooks@2.11.1: + resolution: {integrity: sha512-tgqwPUMDcNDhuf1Xf6KTUsyeqGdgKMhzaH4PAZZuzguOgTl5uuyeYe/8mWgAr6IBxB5V06uqEf6Dy37gIWDtDg==} + hasBin: true + + simplebar-core@1.3.0: + resolution: {integrity: sha512-LpWl3w0caz0bl322E68qsrRPpIn+rWBGAaEJ0lUJA7Xpr2sw92AkIhg6VWj988IefLXYh50ILatfAnbNoCFrlA==} + + simplebar-vue@2.4.0: + resolution: {integrity: sha512-XUFGqoTCjzTKRWLHmS0/gy03GF7Id9FZhczrAqC3tbFO5OZ9vRCdzMZ7F2MuCI5+fp6Plpvug9GUgyBDJLTc5A==} + peerDependencies: + vue: '>=2.5.17' + + sirv@3.0.1: + resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} + engines: {node: '>=18'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + snapdragon-node@2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + + snapdragon-util@3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + + snapdragon@0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-resolve@0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + + source-map-url@0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + split-string@3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + + stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + + stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + + static-extend@0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + + strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + + 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.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + + strip-indent@4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superjson@2.2.2: + resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} + engines: {node: '>=16'} + + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + + supports-color@3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-baker@1.7.0: + resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==} + + svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + + tailwind-merge@3.0.2: + resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tiny-emitter@2.1.0: + resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + + to-object-path@0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + + to-regex-range@2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + to-regex@3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + traverse@0.6.11: + resolution: {integrity: sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==} + engines: {node: '>= 0.4'} + + treemate@0.3.11: + resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==} + + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsx@4.19.3: + resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} + engines: {node: '>=18.0.0'} + hasBin: true + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@4.37.0: + resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==} + engines: {node: '>=16'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typed-css-modules@0.9.1: + resolution: {integrity: sha512-W2HWKncdKd+bLWsnuWB2EyuQBzZ7KJ9Byr/67KLiiyGegcN52rOveun9JR8yAvuL5IXunRMxt0eORMtAUj5bmA==} + engines: {node: '>=18.0.0'} + hasBin: true + + typedarray.prototype.slice@1.0.5: + resolution: {integrity: sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==} + engines: {node: '>= 0.4'} + + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + unconfig@7.0.0: + resolution: {integrity: sha512-G5CJSoG6ZTxgzCJblEfgpdRK2tos9+UdD2WtecDUVfImzQ0hFjwpH5RVvGMhP4pRpC9ML7NrC4qBsBl0Ttj35A==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + union-value@1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin-icons@22.1.0: + resolution: {integrity: sha512-ect2ZNtk1Zgwb0NVHd0C1IDW/MV+Jk/xaq4t8o6rYdVS3+L660ZdD5kTSQZvsgdwCvquRw+/wYn75hsweRjoIA==} + 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.2.4: + resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} + engines: {node: '>=18.12.0'} + + unplugin-vue-components@28.4.1: + resolution: {integrity: sha512-niGSc0vJD9ueAnsqcfAldmtpkppZ09B6p2G1dL7X5S8KPdgbk1P+txPwaaDCe7N+eZh2VG1aAypLXkuJs3OSUg==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin@1.12.0: + resolution: {integrity: sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==} + engines: {node: '>=14.0.0'} + + unplugin@2.2.1: + resolution: {integrity: sha512-Q0YDhwViJaSnHf1cxLf+/VKhmfdr/ZAS/RL2GQVO0cAbAfJAVUef2bvNu+veyWcEPNwsTlFmMiFLjf8Xeqog8g==} + engines: {node: '>=18.12.0'} + + unset-value@1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + urix@0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + + use@3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vdirs@0.1.8: + resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==} + peerDependencies: + vue: ^3.0.11 + + vite-hot-client@0.2.4: + resolution: {integrity: sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==} + peerDependencies: + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 + + vite-plugin-inspect@0.8.9: + resolution: {integrity: sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': '*' + vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + + vite-plugin-progress@0.0.7: + resolution: {integrity: sha512-zyvKdcc/X+6hnw3J1HVV1TKrlFKC4Rh8GnDnWG/2qhRXjqytTcM++xZ+SAPnoDsSyWl8O93ymK0wZRgHAoglEQ==} + engines: {node: '>=14', pnpm: '>=7.0.0'} + peerDependencies: + vite: '>2.0.0-0' + + vite-plugin-svg-icons@2.0.1: + resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-vue-devtools@7.7.2: + resolution: {integrity: sha512-5V0UijQWiSBj32blkyPEqIbzc6HO9c1bwnBhx+ay2dzU0FakH+qMdNUT8nF9BvDE+i6I1U8CqCuJiO20vKEdQw==} + engines: {node: '>=v14.21.3'} + peerDependencies: + vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 + + vite-plugin-vue-inspector@5.3.1: + resolution: {integrity: sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==} + peerDependencies: + vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 + + vite@6.2.2: + resolution: {integrity: sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + 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 + + vooks@0.2.12: + resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==} + peerDependencies: + vue: ^3.0.0 + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + vue-demi@0.13.11: + resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} + 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-draggable-plus@0.6.0: + resolution: {integrity: sha512-G5TSfHrt9tX9EjdG49InoFJbt2NYk0h3kgjgKxkFWr3ulIUays0oFObr5KZ8qzD4+QnhtALiRwIqY6qul4egqw==} + peerDependencies: + '@types/sortablejs': ^1.15.0 + '@vue/composition-api': '*' + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-eslint-parser@10.1.1: + resolution: {integrity: sha512-bh2Z/Au5slro9QJ3neFYLanZtb1jH+W2bKqGHXAoYD4vZgNG3KeotL7JpPv5xzY4UXUXJl7TrIsnzECH63kd3Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + vue-flow-layout@0.1.1: + resolution: {integrity: sha512-JdgRRUVrN0Y2GosA0M68DEbKlXMqJ7FQgsK8CjQD2vxvNSqAU6PZEpi4cfcTVtfM2GVOMjHo7GKKLbXxOBqDqA==} + peerDependencies: + vue: ^3.4.37 + + vue-i18n@11.1.2: + resolution: {integrity: sha512-MfdkdKGUHN+jkkaMT5Zbl4FpRmN7kfelJIwKoUpJ32ONIxdFhzxZiLTVaAXkAwvH3y9GmWpoiwjDqbPIkPIMFA==} + engines: {node: '>= 16'} + peerDependencies: + vue: ^3.0.0 + + vue-router@4.5.0: + resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==} + peerDependencies: + vue: ^3.2.0 + + vue-tsc@2.2.8: + resolution: {integrity: sha512-jBYKBNFADTN+L+MdesNX/TB3XuDSyaWynKMDgR+yCSln0GQ9Tfb7JS2lr46s2LiFUT1WsmfWsSvIElyxzOPqcQ==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + vueuc@0.4.64: + resolution: {integrity: sha512-wlJQj7fIwKK2pOEoOq4Aro8JdPOGpX8aWQhV8YkTW9OgWD2uj2O8ANzvSsIGjx7LTOc7QbS7sXdxHi6XvRnHPA==} + peerDependencies: + vue: ^3.0.11 + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + 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.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + 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.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + 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'} + + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + + zrender@5.6.1: + resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==} + +snapshots: + + '@alova/mock@2.0.12(alova@3.2.10)': + dependencies: + '@alova/shared': 1.1.2 + alova: 3.2.10 + + '@alova/shared@1.1.2': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@antfu/eslint-define-config@1.23.0-2': {} + + '@antfu/install-pkg@1.0.0': + dependencies: + package-manager-detector: 0.2.11 + tinyexec: 0.3.2 + + '@antfu/utils@0.7.10': {} + + '@antfu/utils@8.1.1': {} + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.10': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helpers': 7.26.10 + '@babel/parser': 7.26.10 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.10 + '@babel/types': 7.26.10 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.10': + dependencies: + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.26.10 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.10 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.26.10 + '@babel/types': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.10 + '@babel/types': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.10 + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.26.10 + '@babel/types': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.10': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.10 + + '@babel/parser@7.26.10': + dependencies: + '@babel/types': 7.26.10 + + '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + + '@babel/traverse@7.26.10': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.10 + '@babel/parser': 7.26.10 + '@babel/template': 7.26.9 + '@babel/types': 7.26.10 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.10': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@better-scroll/core@2.5.1': + dependencies: + '@better-scroll/shared-utils': 2.5.1 + + '@better-scroll/shared-utils@2.5.1': {} + + '@css-render/plugin-bem@0.15.14(css-render@0.15.14)': + dependencies: + css-render: 0.15.14 + + '@css-render/vue3-ssr@0.15.14(vue@3.5.13(typescript@5.8.2))': + dependencies: + vue: 3.5.13(typescript@5.8.2) + + '@elegant-router/core@0.3.8': + dependencies: + chokidar: 3.6.0 + consola: 3.2.3 + fast-glob: 3.3.2 + kolorist: 1.8.0 + micromatch: 4.0.7 + + '@elegant-router/vue@0.3.8': + dependencies: + '@elegant-router/core': 0.3.8 + consola: 3.2.3 + kolorist: 1.8.0 + magic-string: 0.30.11 + magicast: 0.3.4 + prettier: 3.3.3 + recast: 0.23.9 + unplugin: 1.12.0 + + '@emotion/hash@0.8.0': {} + + '@esbuild/aix-ppc64@0.25.1': + optional: true + + '@esbuild/android-arm64@0.25.1': + optional: true + + '@esbuild/android-arm@0.25.1': + optional: true + + '@esbuild/android-x64@0.25.1': + optional: true + + '@esbuild/darwin-arm64@0.25.1': + optional: true + + '@esbuild/darwin-x64@0.25.1': + optional: true + + '@esbuild/freebsd-arm64@0.25.1': + optional: true + + '@esbuild/freebsd-x64@0.25.1': + optional: true + + '@esbuild/linux-arm64@0.25.1': + optional: true + + '@esbuild/linux-arm@0.25.1': + optional: true + + '@esbuild/linux-ia32@0.25.1': + optional: true + + '@esbuild/linux-loong64@0.25.1': + optional: true + + '@esbuild/linux-mips64el@0.25.1': + optional: true + + '@esbuild/linux-ppc64@0.25.1': + optional: true + + '@esbuild/linux-riscv64@0.25.1': + optional: true + + '@esbuild/linux-s390x@0.25.1': + optional: true + + '@esbuild/linux-x64@0.25.1': + optional: true + + '@esbuild/netbsd-arm64@0.25.1': + optional: true + + '@esbuild/netbsd-x64@0.25.1': + optional: true + + '@esbuild/openbsd-arm64@0.25.1': + optional: true + + '@esbuild/openbsd-x64@0.25.1': + optional: true + + '@esbuild/sunos-x64@0.25.1': + optional: true + + '@esbuild/win32-arm64@0.25.1': + optional: true + + '@esbuild/win32-ia32@0.25.1': + optional: true + + '@esbuild/win32-x64@0.25.1': + optional: true + + '@eslint-community/eslint-utils@4.5.1(eslint@9.22.0(jiti@2.4.2))': + dependencies: + eslint: 9.22.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/compat@1.2.7(eslint@9.22.0(jiti@2.4.2))': + optionalDependencies: + eslint: 9.22.0(jiti@2.4.2) + + '@eslint/config-array@0.19.2': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.1.0': {} + + '@eslint/core@0.12.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.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.22.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.7': + dependencies: + '@eslint/core': 0.12.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.2': {} + + '@iconify/json@2.2.318': + dependencies: + '@iconify/types': 2.0.0 + pathe: 1.1.2 + + '@iconify/types@2.0.0': {} + + '@iconify/utils@2.3.0': + dependencies: + '@antfu/install-pkg': 1.0.0 + '@antfu/utils': 8.1.1 + '@iconify/types': 2.0.0 + debug: 4.4.0 + globals: 15.15.0 + kolorist: 1.8.0 + local-pkg: 1.1.1 + mlly: 1.7.4 + transitivePeerDependencies: + - supports-color + + '@iconify/vue@4.3.0(vue@3.5.13(typescript@5.8.2))': + dependencies: + '@iconify/types': 2.0.0 + vue: 3.5.13(typescript@5.8.2) + + '@intlify/core-base@11.1.2': + dependencies: + '@intlify/message-compiler': 11.1.2 + '@intlify/shared': 11.1.2 + + '@intlify/message-compiler@11.1.2': + dependencies: + '@intlify/shared': 11.1.2 + source-map-js: 1.2.1 + + '@intlify/shared@11.1.2': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@juggle/resize-observer@3.4.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@parcel/watcher-android-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + optional: true + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@polka/url@1.0.0-next.28': {} + + '@rollup/pluginutils@5.1.4(rollup@4.36.0)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.36.0 + + '@rollup/rollup-android-arm-eabi@4.36.0': + optional: true + + '@rollup/rollup-android-arm64@4.36.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.36.0': + optional: true + + '@rollup/rollup-darwin-x64@4.36.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.36.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.36.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.36.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.36.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.36.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.36.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.36.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.36.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.36.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.36.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.36.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.36.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.36.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.36.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.36.0': + optional: true + + '@sec-ant/readable-stream@0.4.1': {} + + '@sindresorhus/merge-streams@4.0.0': {} + + '@soybeanjs/changelog@0.3.24(@unocss/eslint-config@66.0.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-plugin-vue@10.0.0(eslint@9.22.0(jiti@2.4.2))(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2))))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2)))': + dependencies: + '@soybeanjs/eslint-config': 1.6.0(@unocss/eslint-config@66.0.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-plugin-vue@10.0.0(eslint@9.22.0(jiti@2.4.2))(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2))))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2))) + cli-progress: 3.12.0 + convert-gitmoji: 0.1.5 + dayjs: 1.11.11 + execa: 9.1.0 + ofetch: 1.3.4 + semver: 7.6.2 + transitivePeerDependencies: + - '@toml-tools/parser' + - '@types/eslint' + - '@unocss/eslint-config' + - eslint + - eslint-plugin-astro + - eslint-plugin-react + - eslint-plugin-react-hooks + - eslint-plugin-react-native + - eslint-plugin-react-refresh + - eslint-plugin-solid + - eslint-plugin-svelte + - eslint-plugin-vue + - prettier-plugin-astro + - prettier-plugin-svelte + - prettier-plugin-toml + - supports-color + - typescript + - vue-eslint-parser + + '@soybeanjs/eslint-config@1.6.0(@unocss/eslint-config@66.0.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint-plugin-vue@10.0.0(eslint@9.22.0(jiti@2.4.2))(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2))))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2)))': + dependencies: + '@antfu/eslint-define-config': 1.23.0-2 + '@antfu/install-pkg': 1.0.0 + '@eslint/eslintrc': 3.3.0 + '@eslint/js': 9.22.0 + '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + eslint: 9.22.0(jiti@2.4.2) + eslint-config-flat-gitignore: 2.1.0(eslint@9.22.0(jiti@2.4.2)) + eslint-config-prettier: 10.1.1(eslint@9.22.0(jiti@2.4.2)) + eslint-parser-plain: 0.1.1 + eslint-plugin-import-x: 4.6.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + eslint-plugin-n: 17.16.2(eslint@9.22.0(jiti@2.4.2)) + eslint-plugin-prettier: 5.2.3(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(prettier@3.5.3) + eslint-plugin-unicorn: 57.0.0(eslint@9.22.0(jiti@2.4.2)) + globals: 16.0.0 + local-pkg: 1.1.1 + prettier: 3.5.3 + prettier-plugin-jsdoc: 1.3.2(prettier@3.5.3) + prettier-plugin-json-sort: 0.0.2(prettier@3.5.3) + prompts: 2.4.2 + typescript: 5.8.2 + optionalDependencies: + '@unocss/eslint-config': 66.0.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + eslint-plugin-vue: 10.0.0(eslint@9.22.0(jiti@2.4.2))(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2))) + vue-eslint-parser: 10.1.1(eslint@9.22.0(jiti@2.4.2)) + transitivePeerDependencies: + - '@types/eslint' + - supports-color + + '@trysound/sax@0.2.0': {} + + '@types/crypto-js@4.2.2': {} + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/doctrine@0.0.9': {} + + '@types/estree@1.0.6': {} + + '@types/json-schema@7.0.15': {} + + '@types/katex@0.16.7': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.16 + + '@types/lodash@4.17.16': {} + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/ms@2.1.0': {} + + '@types/node@10.17.60': {} + + '@types/node@22.13.10': + dependencies: + undici-types: 6.20.0 + + '@types/normalize-package-data@2.4.4': {} + + '@types/nprogress@0.2.3': {} + + '@types/qs@6.9.18': {} + + '@types/sortablejs@1.15.8': {} + + '@types/svgo@2.6.4': + dependencies: + '@types/node': 22.13.10 + + '@types/unist@3.0.3': {} + + '@types/web-bluetooth@0.0.21': {} + + '@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.26.1 + eslint: 9.22.0(jiti@2.4.2) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.26.1 + debug: 4.4.0 + eslint: 9.22.0(jiti@2.4.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.26.1': + dependencies: + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/visitor-keys': 8.26.1 + + '@typescript-eslint/type-utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + debug: 4.4.0 + eslint: 9.22.0(jiti@2.4.2) + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.26.1': {} + + '@typescript-eslint/typescript-estree@8.26.1(typescript@5.8.2)': + dependencies: + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/visitor-keys': 8.26.1 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.22.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) + eslint: 9.22.0(jiti@2.4.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.26.1': + dependencies: + '@typescript-eslint/types': 8.26.1 + eslint-visitor-keys: 4.2.0 + + '@unocss/config@66.0.0': + dependencies: + '@unocss/core': 66.0.0 + unconfig: 7.0.0 + + '@unocss/core@66.0.0': {} + + '@unocss/eslint-config@66.0.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': + dependencies: + '@unocss/eslint-plugin': 66.0.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + '@unocss/eslint-plugin@66.0.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)': + dependencies: + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + '@unocss/config': 66.0.0 + '@unocss/core': 66.0.0 + '@unocss/rule-utils': 66.0.0 + magic-string: 0.30.17 + synckit: 0.9.2 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + '@unocss/extractor-arbitrary-variants@66.0.0': + dependencies: + '@unocss/core': 66.0.0 + + '@unocss/inspector@66.0.0(vue@3.5.13(typescript@5.8.2))': + dependencies: + '@unocss/core': 66.0.0 + '@unocss/rule-utils': 66.0.0 + colorette: 2.0.20 + gzip-size: 6.0.0 + sirv: 3.0.1 + vue-flow-layout: 0.1.1(vue@3.5.13(typescript@5.8.2)) + transitivePeerDependencies: + - vue + + '@unocss/preset-icons@66.0.0': + dependencies: + '@iconify/utils': 2.3.0 + '@unocss/core': 66.0.0 + ofetch: 1.4.1 + transitivePeerDependencies: + - supports-color + + '@unocss/preset-mini@66.0.0': + dependencies: + '@unocss/core': 66.0.0 + '@unocss/extractor-arbitrary-variants': 66.0.0 + '@unocss/rule-utils': 66.0.0 + + '@unocss/preset-uno@66.0.0': + dependencies: + '@unocss/core': 66.0.0 + '@unocss/preset-wind3': 66.0.0 + + '@unocss/preset-wind3@66.0.0': + dependencies: + '@unocss/core': 66.0.0 + '@unocss/preset-mini': 66.0.0 + '@unocss/rule-utils': 66.0.0 + + '@unocss/rule-utils@66.0.0': + dependencies: + '@unocss/core': 66.0.0 + magic-string: 0.30.17 + + '@unocss/transformer-directives@66.0.0': + dependencies: + '@unocss/core': 66.0.0 + '@unocss/rule-utils': 66.0.0 + css-tree: 3.1.0 + + '@unocss/transformer-variant-group@66.0.0': + dependencies: + '@unocss/core': 66.0.0 + + '@unocss/vite@66.0.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@unocss/config': 66.0.0 + '@unocss/core': 66.0.0 + '@unocss/inspector': 66.0.0(vue@3.5.13(typescript@5.8.2)) + chokidar: 3.6.0 + magic-string: 0.30.17 + tinyglobby: 0.2.12 + unplugin-utils: 0.2.4 + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0) + transitivePeerDependencies: + - vue + + '@vitejs/plugin-vue-jsx@4.1.2(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.10) + '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.26.10) + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0) + vue: 3.5.13(typescript@5.8.2) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-vue@5.2.3(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': + dependencies: + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0) + vue: 3.5.13(typescript@5.8.2) + + '@volar/language-core@2.4.12': + dependencies: + '@volar/source-map': 2.4.12 + + '@volar/source-map@2.4.12': {} + + '@volar/typescript@2.4.12': + dependencies: + '@volar/language-core': 2.4.12 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vue/babel-helper-vue-transform-on@1.4.0': {} + + '@vue/babel-plugin-jsx@1.4.0(@babel/core@7.26.10)': + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.10 + '@babel/types': 7.26.10 + '@vue/babel-helper-vue-transform-on': 1.4.0 + '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.26.10) + '@vue/shared': 3.5.13 + optionalDependencies: + '@babel/core': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.4.0(@babel/core@7.26.10)': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/parser': 7.26.10 + '@vue/compiler-sfc': 3.5.13 + transitivePeerDependencies: + - supports-color + + '@vue/compiler-core@3.5.13': + dependencies: + '@babel/parser': 7.26.10 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.13': + dependencies: + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-sfc@3.5.13': + dependencies: + '@babel/parser': 7.26.10 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.3 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.13': + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-vue2@2.7.16': + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + '@vue/devtools-api@6.6.4': {} + + '@vue/devtools-api@7.7.2': + dependencies: + '@vue/devtools-kit': 7.7.2 + + '@vue/devtools-core@7.7.2(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': + dependencies: + '@vue/devtools-kit': 7.7.2 + '@vue/devtools-shared': 7.7.2 + mitt: 3.0.1 + nanoid: 5.1.5 + pathe: 2.0.3 + vite-hot-client: 0.2.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0)) + vue: 3.5.13(typescript@5.8.2) + transitivePeerDependencies: + - vite + + '@vue/devtools-kit@7.7.2': + dependencies: + '@vue/devtools-shared': 7.7.2 + birpc: 0.2.19 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.2 + + '@vue/devtools-shared@7.7.2': + dependencies: + rfdc: 1.4.1 + + '@vue/language-core@2.2.8(typescript@5.8.2)': + dependencies: + '@volar/language-core': 2.4.12 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.13 + alien-signals: 1.0.4 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.8.2 + + '@vue/reactivity@3.5.13': + dependencies: + '@vue/shared': 3.5.13 + + '@vue/runtime-core@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/runtime-dom@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.8.2))': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13(typescript@5.8.2) + + '@vue/shared@3.5.13': {} + + '@vueuse/core@13.0.0(vue@3.5.13(typescript@5.8.2))': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 13.0.0 + '@vueuse/shared': 13.0.0(vue@3.5.13(typescript@5.8.2)) + vue: 3.5.13(typescript@5.8.2) + + '@vueuse/metadata@13.0.0': {} + + '@vueuse/shared@13.0.0(vue@3.5.13(typescript@5.8.2))': + dependencies: + vue: 3.5.13(typescript@5.8.2) + + acorn-jsx@5.3.2(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + + acorn@8.14.1: {} + + 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 + + alien-signals@1.0.4: {} + + alova@3.2.10: + dependencies: + '@alova/shared': 1.1.2 + rate-limiter-flexible: 5.0.5 + + ansi-colors@4.1.3: {} + + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + + ansi-regex@2.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@2.2.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + ansis@3.17.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + args-tokenizer@0.3.0: {} + + arr-diff@4.0.0: {} + + arr-flatten@1.1.0: {} + + arr-union@3.1.0: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-unique@0.3.2: {} + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + assign-symbols@1.0.0: {} + + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + + async-function@1.0.0: {} + + async-validator@4.2.5: {} + + asynckit@0.4.0: {} + + atob@2.1.2: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axios-retry@4.5.0(axios@1.8.3): + dependencies: + axios: 1.8.3 + is-retry-allowed: 2.2.0 + + axios@1.8.3: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + base@0.11.2: + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.1 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + + big.js@5.2.2: {} + + binary-extensions@2.3.0: {} + + binary-searching@2.0.5: {} + + birpc@0.2.19: {} + + bluebird@3.7.2: {} + + boolbase@1.0.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@2.3.2: + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001706 + electron-to-chromium: 1.5.120 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + builtin-modules@4.0.0: {} + + bumpp@10.1.0: + dependencies: + ansis: 3.17.0 + args-tokenizer: 0.3.0 + c12: 3.0.2 + cac: 6.7.14 + escalade: 3.2.0 + jsonc-parser: 3.3.1 + package-manager-detector: 1.1.0 + semver: 7.7.1 + tinyexec: 0.3.2 + tinyglobby: 0.2.12 + yaml: 2.7.0 + transitivePeerDependencies: + - magicast + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + + c12@3.0.2: + dependencies: + chokidar: 4.0.3 + confbox: 0.1.8 + defu: 6.1.4 + dotenv: 16.4.7 + exsolve: 1.0.4 + giget: 2.0.0 + jiti: 2.4.2 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 1.0.0 + pkg-types: 2.1.0 + rc9: 2.1.2 + + cac@6.7.14: {} + + cache-base@1.0.1: + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.1 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001706: {} + + chalk@1.1.3: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.4.1: {} + + character-entities@2.0.2: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + ci-info@4.2.0: {} + + citty@0.1.6: + dependencies: + consola: 3.4.2 + + class-utils@0.3.6: + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + + clean-regexp@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-progress@3.12.0: + dependencies: + string-width: 4.2.3 + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + clipboard@2.0.11: + dependencies: + good-listener: 1.2.2 + select: 1.1.2 + tiny-emitter: 2.1.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@2.1.2: {} + + collection-visit@1.0.0: + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + + 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@13.1.0: {} + + commander@7.2.0: {} + + comment-parser@1.4.1: {} + + component-emitter@1.3.1: {} + + concat-map@0.0.1: {} + + confbox@0.1.8: {} + + confbox@0.2.1: {} + + consola@3.2.3: {} + + consola@3.4.2: {} + + convert-gitmoji@0.1.5: {} + + convert-source-map@2.0.0: {} + + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + + copy-descriptor@0.1.1: {} + + core-js-compat@3.41.0: + dependencies: + browserslist: 4.24.4 + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-js@4.2.0: {} + + css-render@0.15.14: + dependencies: + '@emotion/hash': 0.8.0 + csstype: 3.0.11 + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + css-what@6.1.0: {} + + cssesc@3.0.0: {} + + csso@4.2.0: + dependencies: + css-tree: 1.1.3 + + csstype@3.0.11: {} + + csstype@3.1.3: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + date-fns-tz@3.2.0(date-fns@3.6.0): + dependencies: + date-fns: 3.6.0 + + date-fns@3.6.0: {} + + dayjs@1.11.11: {} + + dayjs@1.11.13: {} + + de-indent@1.0.2: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + decode-named-character-reference@1.1.0: + dependencies: + character-entities: 2.0.2 + + decode-uri-component@0.2.2: {} + + deep-is@0.1.4: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@3.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + define-property@0.2.5: + dependencies: + is-descriptor: 0.1.7 + + define-property@1.0.0: + dependencies: + is-descriptor: 1.0.3 + + define-property@2.0.2: + dependencies: + is-descriptor: 1.0.3 + isobject: 3.0.1 + + defu@6.1.4: {} + + delayed-stream@1.0.0: {} + + delegate@3.2.0: {} + + dequal@2.0.3: {} + + destr@2.0.3: {} + + detect-libc@1.0.3: + optional: true + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-serializer@0.2.2: + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + domelementtype@1.3.1: {} + + domelementtype@2.3.0: {} + + domhandler@2.4.2: + dependencies: + domelementtype: 1.3.1 + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domutils@1.7.0: + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + dotenv@16.4.7: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexer@0.1.2: {} + + eastasianwidth@0.2.0: {} + + echarts@5.6.0: + dependencies: + tslib: 2.3.0 + zrender: 5.6.1 + + electron-to-chromium@1.5.120: {} + + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + emojis-list@3.0.0: {} + + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + entities@1.1.2: {} + + entities@2.2.0: {} + + entities@4.5.0: {} + + environment@1.1.0: {} + + error-stack-parser-es@0.1.5: {} + + es-abstract@1.23.9: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + esbuild@0.25.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.1 + '@esbuild/android-arm': 0.25.1 + '@esbuild/android-arm64': 0.25.1 + '@esbuild/android-x64': 0.25.1 + '@esbuild/darwin-arm64': 0.25.1 + '@esbuild/darwin-x64': 0.25.1 + '@esbuild/freebsd-arm64': 0.25.1 + '@esbuild/freebsd-x64': 0.25.1 + '@esbuild/linux-arm': 0.25.1 + '@esbuild/linux-arm64': 0.25.1 + '@esbuild/linux-ia32': 0.25.1 + '@esbuild/linux-loong64': 0.25.1 + '@esbuild/linux-mips64el': 0.25.1 + '@esbuild/linux-ppc64': 0.25.1 + '@esbuild/linux-riscv64': 0.25.1 + '@esbuild/linux-s390x': 0.25.1 + '@esbuild/linux-x64': 0.25.1 + '@esbuild/netbsd-arm64': 0.25.1 + '@esbuild/netbsd-x64': 0.25.1 + '@esbuild/openbsd-arm64': 0.25.1 + '@esbuild/openbsd-x64': 0.25.1 + '@esbuild/sunos-x64': 0.25.1 + '@esbuild/win32-arm64': 0.25.1 + '@esbuild/win32-ia32': 0.25.1 + '@esbuild/win32-x64': 0.25.1 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-compat-utils@0.5.1(eslint@9.22.0(jiti@2.4.2)): + dependencies: + eslint: 9.22.0(jiti@2.4.2) + semver: 7.7.1 + + eslint-config-flat-gitignore@2.1.0(eslint@9.22.0(jiti@2.4.2)): + dependencies: + '@eslint/compat': 1.2.7(eslint@9.22.0(jiti@2.4.2)) + eslint: 9.22.0(jiti@2.4.2) + + eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)): + dependencies: + eslint: 9.22.0(jiti@2.4.2) + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + eslint-parser-plain@0.1.1: {} + + eslint-plugin-es-x@7.8.0(eslint@9.22.0(jiti@2.4.2)): + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.22.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + eslint: 9.22.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.22.0(jiti@2.4.2)) + + eslint-plugin-import-x@4.6.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2): + dependencies: + '@types/doctrine': 0.0.9 + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2) + debug: 4.4.0 + doctrine: 3.0.0 + enhanced-resolve: 5.18.1 + eslint: 9.22.0(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + get-tsconfig: 4.10.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + stable-hash: 0.0.4 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-n@17.16.2(eslint@9.22.0(jiti@2.4.2)): + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.22.0(jiti@2.4.2)) + enhanced-resolve: 5.18.1 + eslint: 9.22.0(jiti@2.4.2) + eslint-plugin-es-x: 7.8.0(eslint@9.22.0(jiti@2.4.2)) + get-tsconfig: 4.10.0 + globals: 15.15.0 + ignore: 5.3.2 + minimatch: 9.0.5 + semver: 7.7.1 + + eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(prettier@3.5.3): + dependencies: + eslint: 9.22.0(jiti@2.4.2) + prettier: 3.5.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.9.2 + optionalDependencies: + eslint-config-prettier: 10.1.1(eslint@9.22.0(jiti@2.4.2)) + + eslint-plugin-unicorn@57.0.0(eslint@9.22.0(jiti@2.4.2)): + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + '@eslint-community/eslint-utils': 4.5.1(eslint@9.22.0(jiti@2.4.2)) + ci-info: 4.2.0 + clean-regexp: 1.0.0 + core-js-compat: 3.41.0 + eslint: 9.22.0(jiti@2.4.2) + esquery: 1.6.0 + globals: 15.15.0 + indent-string: 5.0.0 + is-builtin-module: 4.0.0 + jsesc: 3.1.0 + pluralize: 8.0.0 + read-package-up: 11.0.0 + regexp-tree: 0.1.27 + regjsparser: 0.12.0 + semver: 7.7.1 + strip-indent: 4.0.0 + + eslint-plugin-vue@10.0.0(eslint@9.22.0(jiti@2.4.2))(vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2))): + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.22.0(jiti@2.4.2)) + eslint: 9.22.0(jiti@2.4.2) + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.2 + semver: 7.7.1 + vue-eslint-parser: 10.1.1(eslint@9.22.0(jiti@2.4.2)) + xml-name-validator: 4.0.0 + + eslint-scope@8.3.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.22.0(jiti@2.4.2): + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.22.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/config-helpers': 0.1.0 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.0 + '@eslint/js': 9.22.0 + '@eslint/plugin-kit': 0.2.7 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.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.4.2 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 4.2.0 + + esprima@4.0.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: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + eventemitter3@5.0.1: {} + + evtd@0.2.4: {} + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + execa@9.1.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 7.0.0 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 5.3.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + + execa@9.5.2: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.0 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + + expand-brackets@2.1.4: + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + + exsolve@1.0.4: {} + + extend-shallow@2.0.1: + dependencies: + is-extendable: 0.1.1 + + extend-shallow@3.0.2: + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + + extglob@2.0.4: + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.2: + 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.7 + + 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: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@4.0.0: + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up-simple@1.0.1: {} + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + follow-redirects@1.15.9: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + for-in@1.0.2: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + fragment-cache@0.2.1: + dependencies: + map-cache: 0.2.2 + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.3.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 + + get-stream@8.0.1: {} + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-tsconfig@4.10.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + get-value@2.0.6: {} + + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.6 + nypm: 0.6.0 + pathe: 2.0.3 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@11.0.1: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.0 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globals@15.15.0: {} + + globals@16.0.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + good-listener@1.2.2: + dependencies: + delegate: 3.2.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + gzip-size@6.0.0: + dependencies: + duplexer: 0.1.2 + + has-ansi@2.0.0: + dependencies: + ansi-regex: 2.1.1 + + has-bigints@1.1.0: {} + + has-flag@1.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + has-value@0.3.1: + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + + has-value@1.0.0: + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + + has-values@0.1.4: {} + + has-values@1.0.0: + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + highlight.js@11.11.1: {} + + hookable@5.5.3: {} + + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + + htmlparser2@3.10.1: + dependencies: + domelementtype: 1.3.1 + domhandler: 2.4.2 + domutils: 1.7.0 + entities: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + + human-signals@5.0.0: {} + + human-signals@7.0.0: {} + + human-signals@8.0.0: {} + + icss-replace-symbols@1.1.0: {} + + icss-utils@5.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + ignore@5.3.2: {} + + image-size@0.5.5: {} + + immediate@3.0.6: {} + + immutable@5.0.3: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + indent-string@5.0.0: {} + + index-to-position@0.1.2: {} + + inherits@2.0.4: {} + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + is-accessor-descriptor@1.0.1: + dependencies: + hasown: 2.0.2 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-buffer@1.1.6: {} + + is-builtin-module@4.0.0: + dependencies: + builtin-modules: 4.0.0 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-descriptor@1.0.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-descriptor@0.1.7: + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + + is-descriptor@1.0.3: + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + + is-docker@3.0.0: {} + + is-extendable@0.1.1: {} + + is-extendable@1.0.1: + dependencies: + is-plain-object: 2.0.4 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.3.0 + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-map@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@3.0.0: + dependencies: + kind-of: 3.2.2 + + is-number@7.0.0: {} + + is-plain-obj@1.1.0: {} + + is-plain-obj@4.1.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-retry-allowed@2.2.0: {} + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-stream@3.0.0: {} + + is-stream@4.0.1: {} + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-there@4.5.2: {} + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-unicode-supported@2.1.0: {} + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-what@4.1.16: {} + + is-windows@1.0.2: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isarray@1.0.0: {} + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + isobject@2.1.0: + dependencies: + isarray: 1.0.0 + + isobject@3.0.1: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jackspeak@4.1.0: + dependencies: + '@isaacs/cliui': 8.0.2 + + jiti@2.4.2: {} + + js-base64@2.6.4: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.0.2: {} + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsonc-parser@3.3.1: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@3.2.2: + dependencies: + is-buffer: 1.1.6 + + kind-of@4.0.0: + dependencies: + is-buffer: 1.1.6 + + kind-of@5.1.0: {} + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + klona@2.0.6: {} + + kolorist@1.8.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lie@3.1.1: + dependencies: + immediate: 3.0.6 + + lilconfig@3.1.3: {} + + lint-staged@15.5.0: + dependencies: + chalk: 5.4.1 + commander: 13.1.0 + debug: 4.4.0 + execa: 8.0.1 + lilconfig: 3.1.3 + listr2: 8.2.5 + micromatch: 4.0.8 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.7.0 + transitivePeerDependencies: + - supports-color + + listr2@8.2.5: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + + loader-utils@1.4.2: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.2 + + local-pkg@1.1.1: + dependencies: + mlly: 1.7.4 + pkg-types: 2.1.0 + quansync: 0.2.10 + + localforage@1.10.0: + dependencies: + lie: 3.1.1 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.17.21: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + lru-cache@10.4.3: {} + + lru-cache@11.0.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.11: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magicast@0.3.4: + dependencies: + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + source-map-js: 1.2.1 + + map-cache@0.2.2: {} + + map-visit@1.0.0: + dependencies: + object-visit: 1.0.1 + + math-intrinsics@1.1.0: {} + + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + mdn-data@2.0.14: {} + + mdn-data@2.12.2: {} + + merge-options@1.0.1: + dependencies: + is-plain-obj: 1.1.0 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.0 + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + micromatch@3.1.0: + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 1.0.0 + extend-shallow: 2.0.1 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 5.1.0 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + min-indent@1.0.1: {} + + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + mitt@3.0.1: {} + + mixin-deep@1.3.2: + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + + mkdirp@3.0.1: {} + + mlly@1.7.4: + dependencies: + acorn: 8.14.1 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.5.4 + + mrmime@2.0.1: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + muggle-string@0.4.1: {} + + naive-ui@2.41.0(vue@3.5.13(typescript@5.8.2)): + dependencies: + '@css-render/plugin-bem': 0.15.14(css-render@0.15.14) + '@css-render/vue3-ssr': 0.15.14(vue@3.5.13(typescript@5.8.2)) + '@types/katex': 0.16.7 + '@types/lodash': 4.17.16 + '@types/lodash-es': 4.17.12 + async-validator: 4.2.5 + css-render: 0.15.14 + csstype: 3.1.3 + date-fns: 3.6.0 + date-fns-tz: 3.2.0(date-fns@3.6.0) + evtd: 0.2.4 + highlight.js: 11.11.1 + lodash: 4.17.21 + lodash-es: 4.17.21 + seemly: 0.3.10 + treemate: 0.3.11 + vdirs: 0.1.8(vue@3.5.13(typescript@5.8.2)) + vooks: 0.2.12(vue@3.5.13(typescript@5.8.2)) + vue: 3.5.13(typescript@5.8.2) + vueuc: 0.4.64(vue@3.5.13(typescript@5.8.2)) + + nanoid@3.3.11: {} + + nanoid@5.1.5: {} + + nanomatch@1.2.13: + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + + natural-compare@1.4.0: {} + + node-addon-api@7.1.1: + optional: true + + node-fetch-native@1.6.6: {} + + node-releases@2.0.19: {} + + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.1 + validate-npm-package-license: 3.0.4 + + normalize-path@3.0.0: {} + + npm-check-updates@17.1.15: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + + nprogress@0.2.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nypm@0.6.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.1.0 + tinyexec: 0.3.2 + + object-assign@4.1.1: {} + + object-copy@0.1.0: + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object-visit@1.0.1: + dependencies: + isobject: 3.0.1 + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.pick@1.3.0: + dependencies: + isobject: 3.0.1 + + ofetch@1.3.4: + dependencies: + destr: 2.0.3 + node-fetch-native: 1.6.6 + ufo: 1.5.4 + + ofetch@1.4.1: + dependencies: + destr: 2.0.3 + node-fetch-native: 1.6.6 + ufo: 1.5.4 + + ohash@2.0.11: {} + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@10.1.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.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 + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json-from-dist@1.0.1: {} + + package-manager-detector@0.2.11: + dependencies: + quansync: 0.2.10 + + package-manager-detector@1.1.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@8.1.0: + dependencies: + '@babel/code-frame': 7.26.2 + index-to-position: 0.1.2 + type-fest: 4.37.0 + + parse-ms@4.0.0: {} + + pascalcase@0.1.1: {} + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.2 + minipass: 7.1.2 + + pathe@0.2.0: {} + + pathe@1.1.2: {} + + pathe@2.0.3: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pidtree@0.6.0: {} + + pinia@3.0.1(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)): + dependencies: + '@vue/devtools-api': 7.7.2 + vue: 3.5.13(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + pkg-types@2.1.0: + dependencies: + confbox: 0.2.1 + exsolve: 1.0.4 + pathe: 2.0.3 + + pluralize@8.0.0: {} + + posix-character-classes@0.1.1: {} + + possible-typed-array-names@1.1.0: {} + + postcss-modules-extract-imports@3.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-modules-local-by-default@4.2.0(postcss@8.5.3): + dependencies: + icss-utils: 5.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + + postcss-modules-scope@3.2.1(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 7.1.0 + + postcss-modules-values@4.0.0(postcss@8.5.3): + dependencies: + icss-utils: 5.1.0(postcss@8.5.3) + postcss: 8.5.3 + + postcss-prefix-selector@1.16.1(postcss@5.2.18): + dependencies: + postcss: 5.2.18 + + 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-value-parser@4.2.0: {} + + postcss@5.2.18: + dependencies: + chalk: 1.1.3 + js-base64: 2.6.4 + source-map: 0.5.7 + supports-color: 3.2.3 + + postcss@8.5.3: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + posthtml-parser@0.2.1: + dependencies: + htmlparser2: 3.10.1 + isobject: 2.1.0 + + posthtml-rename-id@1.0.12: + dependencies: + escape-string-regexp: 1.0.5 + + posthtml-render@1.4.0: {} + + posthtml-svg-mode@1.0.3: + dependencies: + merge-options: 1.0.1 + posthtml: 0.9.2 + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + + posthtml@0.9.2: + dependencies: + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier-plugin-jsdoc@1.3.2(prettier@3.5.3): + dependencies: + binary-searching: 2.0.5 + comment-parser: 1.4.1 + mdast-util-from-markdown: 2.0.2 + prettier: 3.5.3 + transitivePeerDependencies: + - supports-color + + prettier-plugin-json-sort@0.0.2(prettier@3.5.3): + dependencies: + prettier: 3.5.3 + + prettier@3.3.3: {} + + prettier@3.5.3: {} + + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + + progress@2.0.3: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + quansync@0.2.10: {} + + query-string@4.3.4: + dependencies: + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + + queue-microtask@1.2.3: {} + + rate-limiter-flexible@5.0.5: {} + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.3 + + rd@2.0.1: + dependencies: + '@types/node': 10.17.60 + + read-package-up@11.0.0: + dependencies: + find-up-simple: 1.0.1 + read-pkg: 9.0.1 + type-fest: 4.37.0 + + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.1.0 + type-fest: 4.37.0 + unicorn-magic: 0.1.0 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.1.2: {} + + recast@0.23.9: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regex-not@1.0.2: + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + + regexp-tree@0.1.27: {} + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regjsparser@0.12.0: + dependencies: + jsesc: 3.0.2 + + repeat-element@1.1.4: {} + + repeat-string@1.6.1: {} + + require-directory@2.1.1: {} + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve-url@0.2.1: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + ret@0.1.15: {} + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rimraf@6.0.1: + dependencies: + glob: 11.0.1 + package-json-from-dist: 1.0.1 + + rollup@4.36.0: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.36.0 + '@rollup/rollup-android-arm64': 4.36.0 + '@rollup/rollup-darwin-arm64': 4.36.0 + '@rollup/rollup-darwin-x64': 4.36.0 + '@rollup/rollup-freebsd-arm64': 4.36.0 + '@rollup/rollup-freebsd-x64': 4.36.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.36.0 + '@rollup/rollup-linux-arm-musleabihf': 4.36.0 + '@rollup/rollup-linux-arm64-gnu': 4.36.0 + '@rollup/rollup-linux-arm64-musl': 4.36.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.36.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.36.0 + '@rollup/rollup-linux-riscv64-gnu': 4.36.0 + '@rollup/rollup-linux-s390x-gnu': 4.36.0 + '@rollup/rollup-linux-x64-gnu': 4.36.0 + '@rollup/rollup-linux-x64-musl': 4.36.0 + '@rollup/rollup-win32-arm64-msvc': 4.36.0 + '@rollup/rollup-win32-ia32-msvc': 4.36.0 + '@rollup/rollup-win32-x64-msvc': 4.36.0 + fsevents: 2.3.3 + + run-applescript@7.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-regex@1.1.0: + dependencies: + ret: 0.1.15 + + sass@1.86.0: + dependencies: + chokidar: 4.0.3 + immutable: 5.0.3 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 + + seemly@0.3.10: {} + + select@1.1.2: {} + + semver@6.3.1: {} + + semver@7.6.2: {} + + semver@7.7.1: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + set-value@2.0.1: + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.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: {} + + simple-git-hooks@2.11.1: {} + + simplebar-core@1.3.0: + dependencies: + lodash: 4.17.21 + + simplebar-vue@2.4.0(vue@3.5.13(typescript@5.8.2)): + dependencies: + simplebar-core: 1.3.0 + vue: 3.5.13(typescript@5.8.2) + vue-demi: 0.13.11(vue@3.5.13(typescript@5.8.2)) + transitivePeerDependencies: + - '@vue/composition-api' + + sirv@3.0.1: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.1 + totalist: 3.0.1 + + sisteransi@1.0.5: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + + snapdragon-node@2.1.1: + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + + snapdragon-util@3.0.1: + dependencies: + kind-of: 3.2.2 + + snapdragon@0.8.2: + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + + source-map-js@1.2.1: {} + + source-map-resolve@0.5.3: + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + + source-map-url@0.4.1: {} + + source-map@0.5.7: {} + + source-map@0.6.1: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-license-ids@3.0.21: {} + + speakingurl@14.0.1: {} + + split-string@3.1.0: + dependencies: + extend-shallow: 3.0.2 + + stable-hash@0.0.4: {} + + stable@0.1.8: {} + + static-extend@0.1.2: + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + + strict-uri-encode@1.1.0: {} + + 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.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@3.0.0: {} + + strip-final-newline@4.0.0: {} + + strip-indent@4.0.0: + dependencies: + min-indent: 1.0.1 + + strip-json-comments@3.1.1: {} + + superjson@2.2.2: + dependencies: + copy-anything: 3.0.5 + + supports-color@2.0.0: {} + + supports-color@3.2.3: + dependencies: + has-flag: 1.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svg-baker@1.7.0: + dependencies: + bluebird: 3.7.2 + clone: 2.1.2 + he: 1.2.0 + image-size: 0.5.5 + loader-utils: 1.4.2 + merge-options: 1.0.1 + micromatch: 3.1.0 + postcss: 5.2.18 + postcss-prefix-selector: 1.16.1(postcss@5.2.18) + posthtml-rename-id: 1.0.12 + posthtml-svg-mode: 1.0.3 + query-string: 4.3.4 + traverse: 0.6.11 + transitivePeerDependencies: + - supports-color + + svgo@2.8.0: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.1.1 + stable: 0.1.8 + + synckit@0.9.2: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.8.1 + + tailwind-merge@3.0.2: {} + + tapable@2.2.1: {} + + tiny-emitter@2.1.0: {} + + tiny-invariant@1.3.3: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + + to-object-path@0.3.0: + dependencies: + kind-of: 3.2.2 + + to-regex-range@2.1.1: + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + to-regex@3.0.2: + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + + totalist@3.0.1: {} + + traverse@0.6.11: + dependencies: + gopd: 1.2.0 + typedarray.prototype.slice: 1.0.5 + which-typed-array: 1.1.19 + + treemate@0.3.11: {} + + ts-api-utils@2.0.1(typescript@5.8.2): + dependencies: + typescript: 5.8.2 + + tslib@2.3.0: {} + + tslib@2.8.1: {} + + tsx@4.19.3: + dependencies: + esbuild: 0.25.1 + get-tsconfig: 4.10.0 + optionalDependencies: + fsevents: 2.3.3 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@4.37.0: {} + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typed-css-modules@0.9.1: + dependencies: + camelcase: 6.3.0 + chalk: 4.1.2 + chokidar: 3.6.0 + glob: 10.4.5 + icss-replace-symbols: 1.1.0 + is-there: 4.5.2 + mkdirp: 3.0.1 + postcss: 8.5.3 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.3) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.3) + postcss-modules-scope: 3.2.1(postcss@8.5.3) + postcss-modules-values: 4.0.0(postcss@8.5.3) + yargs: 17.7.2 + + typedarray.prototype.slice@1.0.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-proto: 1.0.1 + math-intrinsics: 1.1.0 + typed-array-buffer: 1.0.3 + typed-array-byte-offset: 1.0.4 + + typescript@5.8.2: {} + + ufo@1.5.4: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + unconfig@7.0.0: + dependencies: + '@antfu/utils': 8.1.1 + defu: 6.1.4 + jiti: 2.4.2 + + undici-types@6.20.0: {} + + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + + union-value@1.0.1: + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + universalify@2.0.1: {} + + unplugin-icons@22.1.0(@vue/compiler-sfc@3.5.13): + dependencies: + '@antfu/install-pkg': 1.0.0 + '@iconify/utils': 2.3.0 + debug: 4.4.0 + local-pkg: 1.1.1 + unplugin: 2.2.1 + optionalDependencies: + '@vue/compiler-sfc': 3.5.13 + transitivePeerDependencies: + - supports-color + + unplugin-utils@0.2.4: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.2 + + unplugin-vue-components@28.4.1(@babel/parser@7.26.10)(vue@3.5.13(typescript@5.8.2)): + dependencies: + chokidar: 3.6.0 + debug: 4.4.0 + local-pkg: 1.1.1 + magic-string: 0.30.17 + mlly: 1.7.4 + tinyglobby: 0.2.12 + unplugin: 2.2.1 + unplugin-utils: 0.2.4 + vue: 3.5.13(typescript@5.8.2) + optionalDependencies: + '@babel/parser': 7.26.10 + transitivePeerDependencies: + - supports-color + + unplugin@1.12.0: + dependencies: + acorn: 8.14.1 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.2 + + unplugin@2.2.1: + dependencies: + acorn: 8.14.1 + webpack-virtual-modules: 0.6.2 + + unset-value@1.0.0: + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + urix@0.1.0: {} + + use@3.1.1: {} + + util-deprecate@1.0.2: {} + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + vary@1.1.2: {} + + vdirs@0.1.8(vue@3.5.13(typescript@5.8.2)): + dependencies: + evtd: 0.2.4 + vue: 3.5.13(typescript@5.8.2) + + vite-hot-client@0.2.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0)): + dependencies: + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0) + + vite-plugin-inspect@0.8.9(rollup@4.36.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0)): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.4(rollup@4.36.0) + debug: 4.4.0 + error-stack-parser-es: 0.1.5 + fs-extra: 11.3.0 + open: 10.1.0 + perfect-debounce: 1.0.0 + picocolors: 1.1.1 + sirv: 3.0.1 + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0) + transitivePeerDependencies: + - rollup + - supports-color + + vite-plugin-progress@0.0.7(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0)): + dependencies: + picocolors: 1.1.1 + progress: 2.0.3 + rd: 2.0.1 + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0) + + vite-plugin-svg-icons@2.0.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0)): + dependencies: + '@types/svgo': 2.6.4 + cors: 2.8.5 + debug: 4.4.0 + etag: 1.8.1 + fs-extra: 10.1.0 + pathe: 0.2.0 + svg-baker: 1.7.0 + svgo: 2.8.0 + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color + + vite-plugin-vue-devtools@7.7.2(rollup@4.36.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)): + dependencies: + '@vue/devtools-core': 7.7.2(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) + '@vue/devtools-kit': 7.7.2 + '@vue/devtools-shared': 7.7.2 + execa: 9.5.2 + sirv: 3.0.1 + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0) + vite-plugin-inspect: 0.8.9(rollup@4.36.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0)) + vite-plugin-vue-inspector: 5.3.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0)) + transitivePeerDependencies: + - '@nuxt/kit' + - rollup + - supports-color + - vue + + vite-plugin-vue-inspector@5.3.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0)): + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.10) + '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.26.10) + '@vue/compiler-dom': 3.5.13 + kolorist: 1.8.0 + magic-string: 0.30.17 + vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color + + vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(tsx@4.19.3)(yaml@2.7.0): + dependencies: + esbuild: 0.25.1 + postcss: 8.5.3 + rollup: 4.36.0 + optionalDependencies: + '@types/node': 22.13.10 + fsevents: 2.3.3 + jiti: 2.4.2 + sass: 1.86.0 + tsx: 4.19.3 + yaml: 2.7.0 + + vooks@0.2.12(vue@3.5.13(typescript@5.8.2)): + dependencies: + evtd: 0.2.4 + vue: 3.5.13(typescript@5.8.2) + + vscode-uri@3.1.0: {} + + vue-demi@0.13.11(vue@3.5.13(typescript@5.8.2)): + dependencies: + vue: 3.5.13(typescript@5.8.2) + + vue-draggable-plus@0.6.0(@types/sortablejs@1.15.8): + dependencies: + '@types/sortablejs': 1.15.8 + + vue-eslint-parser@10.1.1(eslint@9.22.0(jiti@2.4.2)): + dependencies: + debug: 4.4.0 + eslint: 9.22.0(jiti@2.4.2) + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + lodash: 4.17.21 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + vue-flow-layout@0.1.1(vue@3.5.13(typescript@5.8.2)): + dependencies: + vue: 3.5.13(typescript@5.8.2) + + vue-i18n@11.1.2(vue@3.5.13(typescript@5.8.2)): + dependencies: + '@intlify/core-base': 11.1.2 + '@intlify/shared': 11.1.2 + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.8.2) + + vue-router@4.5.0(vue@3.5.13(typescript@5.8.2)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.8.2) + + vue-tsc@2.2.8(typescript@5.8.2): + dependencies: + '@volar/typescript': 2.4.12 + '@vue/language-core': 2.2.8(typescript@5.8.2) + typescript: 5.8.2 + + vue@3.5.13(typescript@5.8.2): + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.8.2)) + '@vue/shared': 3.5.13 + optionalDependencies: + typescript: 5.8.2 + + vueuc@0.4.64(vue@3.5.13(typescript@5.8.2)): + dependencies: + '@css-render/vue3-ssr': 0.15.14(vue@3.5.13(typescript@5.8.2)) + '@juggle/resize-observer': 3.4.0 + css-render: 0.15.14 + evtd: 0.2.4 + seemly: 0.3.10 + vdirs: 0.1.8(vue@3.5.13(typescript@5.8.2)) + vooks: 0.2.12(vue@3.5.13(typescript@5.8.2)) + vue: 3.5.13(typescript@5.8.2) + + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.6.2: {} + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.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.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + xml-name-validator@4.0.0: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yaml@2.7.0: {} + + 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: {} + + yoctocolors@2.1.1: {} + + zrender@5.6.1: + dependencies: + tslib: 2.3.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..dee51e9 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - "packages/*" diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..169b2ab --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..e617af5 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/assets/imgs/soybean.jpg b/src/assets/imgs/soybean.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75457d5015acebac780047ca61b0f8dbd8525ddf GIT binary patch literal 114241 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

>@yuk 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 z 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 literal 0 HcmV?d00001 diff --git a/src/assets/svg-icon/activity.svg b/src/assets/svg-icon/activity.svg new file mode 100644 index 0000000..abe892f --- /dev/null +++ b/src/assets/svg-icon/activity.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/at-sign.svg b/src/assets/svg-icon/at-sign.svg new file mode 100644 index 0000000..625214d --- /dev/null +++ b/src/assets/svg-icon/at-sign.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/avatar.svg b/src/assets/svg-icon/avatar.svg new file mode 100644 index 0000000..66fe6f2 --- /dev/null +++ b/src/assets/svg-icon/avatar.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/banner.svg b/src/assets/svg-icon/banner.svg new file mode 100644 index 0000000..192b637 --- /dev/null +++ b/src/assets/svg-icon/banner.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/cast.svg b/src/assets/svg-icon/cast.svg new file mode 100644 index 0000000..4f008d3 --- /dev/null +++ b/src/assets/svg-icon/cast.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/chrome.svg b/src/assets/svg-icon/chrome.svg new file mode 100644 index 0000000..6314173 --- /dev/null +++ b/src/assets/svg-icon/chrome.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/copy.svg b/src/assets/svg-icon/copy.svg new file mode 100644 index 0000000..ab25601 --- /dev/null +++ b/src/assets/svg-icon/copy.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/custom-icon.svg b/src/assets/svg-icon/custom-icon.svg new file mode 100644 index 0000000..b33a43f --- /dev/null +++ b/src/assets/svg-icon/custom-icon.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/empty-data.svg b/src/assets/svg-icon/empty-data.svg new file mode 100644 index 0000000..293486c --- /dev/null +++ b/src/assets/svg-icon/empty-data.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/expectation.svg b/src/assets/svg-icon/expectation.svg new file mode 100644 index 0000000..1d87d5e --- /dev/null +++ b/src/assets/svg-icon/expectation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg-icon/heart.svg b/src/assets/svg-icon/heart.svg new file mode 100644 index 0000000..56e59b4 --- /dev/null +++ b/src/assets/svg-icon/heart.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/logo.svg b/src/assets/svg-icon/logo.svg new file mode 100644 index 0000000..341675d --- /dev/null +++ b/src/assets/svg-icon/logo.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/network-error.svg b/src/assets/svg-icon/network-error.svg new file mode 100644 index 0000000..52f97ab --- /dev/null +++ b/src/assets/svg-icon/network-error.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/no-icon.svg b/src/assets/svg-icon/no-icon.svg new file mode 100644 index 0000000..f6dcdd0 --- /dev/null +++ b/src/assets/svg-icon/no-icon.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/no-permission.svg b/src/assets/svg-icon/no-permission.svg new file mode 100644 index 0000000..4c408ca --- /dev/null +++ b/src/assets/svg-icon/no-permission.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/not-found.svg b/src/assets/svg-icon/not-found.svg new file mode 100644 index 0000000..a513656 --- /dev/null +++ b/src/assets/svg-icon/not-found.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/service-error.svg b/src/assets/svg-icon/service-error.svg new file mode 100644 index 0000000..0120f1e --- /dev/null +++ b/src/assets/svg-icon/service-error.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svg-icon/wind.svg b/src/assets/svg-icon/wind.svg new file mode 100644 index 0000000..7c90590 --- /dev/null +++ b/src/assets/svg-icon/wind.svg @@ -0,0 +1 @@ + diff --git a/src/components/advanced/table-column-setting.vue b/src/components/advanced/table-column-setting.vue new file mode 100644 index 0000000..014a51a --- /dev/null +++ b/src/components/advanced/table-column-setting.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/src/components/advanced/table-header-operation.vue b/src/components/advanced/table-header-operation.vue new file mode 100644 index 0000000..7ca287f --- /dev/null +++ b/src/components/advanced/table-header-operation.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/src/components/common/app-provider.vue b/src/components/common/app-provider.vue new file mode 100644 index 0000000..36a361a --- /dev/null +++ b/src/components/common/app-provider.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/components/common/dark-mode-container.vue b/src/components/common/dark-mode-container.vue new file mode 100644 index 0000000..71f2733 --- /dev/null +++ b/src/components/common/dark-mode-container.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/src/components/common/exception-base.vue b/src/components/common/exception-base.vue new file mode 100644 index 0000000..418e965 --- /dev/null +++ b/src/components/common/exception-base.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/components/common/full-screen.vue b/src/components/common/full-screen.vue new file mode 100644 index 0000000..41c1c56 --- /dev/null +++ b/src/components/common/full-screen.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/src/components/common/lang-switch.vue b/src/components/common/lang-switch.vue new file mode 100644 index 0000000..466720c --- /dev/null +++ b/src/components/common/lang-switch.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/components/common/menu-toggler.vue b/src/components/common/menu-toggler.vue new file mode 100644 index 0000000..31cb1b9 --- /dev/null +++ b/src/components/common/menu-toggler.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/src/components/common/pin-toggler.vue b/src/components/common/pin-toggler.vue new file mode 100644 index 0000000..aecc92d --- /dev/null +++ b/src/components/common/pin-toggler.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/src/components/common/reload-button.vue b/src/components/common/reload-button.vue new file mode 100644 index 0000000..2881d03 --- /dev/null +++ b/src/components/common/reload-button.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/src/components/common/system-logo.vue b/src/components/common/system-logo.vue new file mode 100644 index 0000000..7f23cc1 --- /dev/null +++ b/src/components/common/system-logo.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/components/common/theme-schema-switch.vue b/src/components/common/theme-schema-switch.vue new file mode 100644 index 0000000..78050d4 --- /dev/null +++ b/src/components/common/theme-schema-switch.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/src/components/custom/better-scroll.vue b/src/components/custom/better-scroll.vue new file mode 100644 index 0000000..7d2559c --- /dev/null +++ b/src/components/custom/better-scroll.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/src/components/custom/button-icon.vue b/src/components/custom/button-icon.vue new file mode 100644 index 0000000..153953a --- /dev/null +++ b/src/components/custom/button-icon.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/src/components/custom/count-to.vue b/src/components/custom/count-to.vue new file mode 100644 index 0000000..910b4cc --- /dev/null +++ b/src/components/custom/count-to.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/components/custom/look-forward.vue b/src/components/custom/look-forward.vue new file mode 100644 index 0000000..d0494f9 --- /dev/null +++ b/src/components/custom/look-forward.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/src/components/custom/soybean-avatar.vue b/src/components/custom/soybean-avatar.vue new file mode 100644 index 0000000..8d3278a --- /dev/null +++ b/src/components/custom/soybean-avatar.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/src/components/custom/svg-icon.vue b/src/components/custom/svg-icon.vue new file mode 100644 index 0000000..504763e --- /dev/null +++ b/src/components/custom/svg-icon.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/src/components/custom/wave-bg.vue b/src/components/custom/wave-bg.vue new file mode 100644 index 0000000..1d63f2e --- /dev/null +++ b/src/components/custom/wave-bg.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/src/constants/app.ts b/src/constants/app.ts new file mode 100644 index 0000000..4767c47 --- /dev/null +++ b/src/constants/app.ts @@ -0,0 +1,65 @@ +import { transformRecordToOption } from '@/utils/common'; + +export const GLOBAL_HEADER_MENU_ID = '__GLOBAL_HEADER_MENU__'; + +export const GLOBAL_SIDER_MENU_ID = '__GLOBAL_SIDER_MENU__'; + +export const themeSchemaRecord: Record = { + light: 'theme.themeSchema.light', + dark: 'theme.themeSchema.dark', + auto: 'theme.themeSchema.auto' +}; + +export const themeSchemaOptions = transformRecordToOption(themeSchemaRecord); + +export const loginModuleRecord: Record = { + 'pwd-login': 'page.login.pwdLogin.title', + 'code-login': 'page.login.codeLogin.title', + register: 'page.login.register.title', + 'reset-pwd': 'page.login.resetPwd.title', + 'bind-wechat': 'page.login.bindWeChat.title' +}; + +export const themeLayoutModeRecord: Record = { + vertical: 'theme.layoutMode.vertical', + 'vertical-mix': 'theme.layoutMode.vertical-mix', + horizontal: 'theme.layoutMode.horizontal', + 'horizontal-mix': 'theme.layoutMode.horizontal-mix' +}; + +export const themeLayoutModeOptions = transformRecordToOption(themeLayoutModeRecord); + +export const themeScrollModeRecord: Record = { + wrapper: 'theme.scrollMode.wrapper', + content: 'theme.scrollMode.content' +}; + +export const themeScrollModeOptions = transformRecordToOption(themeScrollModeRecord); + +export const themeTabModeRecord: Record = { + chrome: 'theme.tab.mode.chrome', + button: 'theme.tab.mode.button' +}; + +export const themeTabModeOptions = transformRecordToOption(themeTabModeRecord); + +export const themePageAnimationModeRecord: Record = { + 'fade-slide': 'theme.page.mode.fade-slide', + fade: 'theme.page.mode.fade', + 'fade-bottom': 'theme.page.mode.fade-bottom', + 'fade-scale': 'theme.page.mode.fade-scale', + 'zoom-fade': 'theme.page.mode.zoom-fade', + 'zoom-out': 'theme.page.mode.zoom-out', + none: 'theme.page.mode.none' +}; + +export const themePageAnimationModeOptions = transformRecordToOption(themePageAnimationModeRecord); + +export const resetCacheStrategyRecord: Record = { + close: 'theme.resetCacheStrategy.close', + refresh: 'theme.resetCacheStrategy.refresh' +}; + +export const resetCacheStrategyOptions = transformRecordToOption(resetCacheStrategyRecord); + +export const DARK_CLASS = 'dark'; diff --git a/src/constants/common.ts b/src/constants/common.ts new file mode 100644 index 0000000..2d5e05e --- /dev/null +++ b/src/constants/common.ts @@ -0,0 +1,8 @@ +import { transformRecordToOption } from '@/utils/common'; + +export const yesOrNoRecord: Record = { + Y: 'common.yesOrNo.yes', + N: 'common.yesOrNo.no' +}; + +export const yesOrNoOptions = transformRecordToOption(yesOrNoRecord); diff --git a/src/constants/reg.ts b/src/constants/reg.ts new file mode 100644 index 0000000..8805ca8 --- /dev/null +++ b/src/constants/reg.ts @@ -0,0 +1,25 @@ +export const REG_USER_NAME = /^[\u4E00-\u9FA5a-zA-Z0-9_-]{4,16}$/; + +/** Phone reg */ +export const REG_PHONE = + /^[1](([3][0-9])|([4][01456789])|([5][012356789])|([6][2567])|([7][0-8])|([8][0-9])|([9][012356789]))[0-9]{8}$/; + +/** + * Password reg + * + * 6-18 characters, including letters, numbers, and underscores + */ +export const REG_PWD = /^\w{6,18}$/; + +/** Email reg */ +export const REG_EMAIL = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; + +/** Six digit code reg */ +export const REG_CODE_SIX = /^\d{6}$/; + +/** Four digit code reg */ +export const REG_CODE_FOUR = /^\d{4}$/; + +/** Url reg */ +export const REG_URL = + /(((^https?:(?:\/\/)?)(?:[-;:&=+$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=+$,\w]+@)[A-Za-z0-9.-]+)((?:\/[+~%/.\w-_]*)?\??(?:[-+=&;%@.\w_]*)#?(?:[\w]*))?)$/; diff --git a/src/enum/index.ts b/src/enum/index.ts new file mode 100644 index 0000000..2739b3a --- /dev/null +++ b/src/enum/index.ts @@ -0,0 +1,7 @@ +export enum SetupStoreId { + App = 'app-store', + Theme = 'theme-store', + Auth = 'auth-store', + Route = 'route-store', + Tab = 'tab-store' +} diff --git a/src/hooks/business/auth.ts b/src/hooks/business/auth.ts new file mode 100644 index 0000000..f8fc749 --- /dev/null +++ b/src/hooks/business/auth.ts @@ -0,0 +1,21 @@ +import { useAuthStore } from '@/store/modules/auth'; + +export function useAuth() { + const authStore = useAuthStore(); + + function hasAuth(codes: string | string[]) { + if (!authStore.isLogin) { + return false; + } + + if (typeof codes === 'string') { + return authStore.userInfo.buttons.includes(codes); + } + + return codes.some(code => authStore.userInfo.buttons.includes(code)); + } + + return { + hasAuth + }; +} diff --git a/src/hooks/business/captcha.ts b/src/hooks/business/captcha.ts new file mode 100644 index 0000000..98124d9 --- /dev/null +++ b/src/hooks/business/captcha.ts @@ -0,0 +1,71 @@ +import { computed } from 'vue'; +import { useCountDown, useLoading } from '@sa/hooks'; +import { REG_PHONE } from '@/constants/reg'; +import { $t } from '@/locales'; + +export function useCaptcha() { + const { loading, startLoading, endLoading } = useLoading(); + const { count, start, stop, isCounting } = useCountDown(10); + + const label = computed(() => { + let text = $t('page.login.codeLogin.getCode'); + + const countingLabel = $t('page.login.codeLogin.reGetCode', { time: count.value }); + + if (loading.value) { + text = ''; + } + + if (isCounting.value) { + text = countingLabel; + } + + return text; + }); + + function isPhoneValid(phone: string) { + if (phone.trim() === '') { + window.$message?.error?.($t('form.phone.required')); + + return false; + } + + if (!REG_PHONE.test(phone)) { + window.$message?.error?.($t('form.phone.invalid')); + + return false; + } + + return true; + } + + async function getCaptcha(phone: string) { + const valid = isPhoneValid(phone); + + if (!valid || loading.value) { + return; + } + + startLoading(); + + // request + await new Promise(resolve => { + setTimeout(resolve, 500); + }); + + window.$message?.success?.($t('page.login.codeLogin.sendCodeSuccess')); + + start(); + + endLoading(); + } + + return { + label, + start, + stop, + isCounting, + loading, + getCaptcha + }; +} diff --git a/src/hooks/common/echarts.ts b/src/hooks/common/echarts.ts new file mode 100644 index 0000000..45c33e1 --- /dev/null +++ b/src/hooks/common/echarts.ts @@ -0,0 +1,235 @@ +import { computed, effectScope, nextTick, onScopeDispose, ref, watch } from 'vue'; +import { useElementSize } from '@vueuse/core'; +import * as echarts from 'echarts/core'; +import { BarChart, GaugeChart, LineChart, PictorialBarChart, PieChart, RadarChart, ScatterChart } from 'echarts/charts'; +import type { + BarSeriesOption, + GaugeSeriesOption, + LineSeriesOption, + PictorialBarSeriesOption, + PieSeriesOption, + RadarSeriesOption, + ScatterSeriesOption +} from 'echarts/charts'; +import { + DatasetComponent, + GridComponent, + LegendComponent, + TitleComponent, + ToolboxComponent, + TooltipComponent, + TransformComponent +} from 'echarts/components'; +import type { + DatasetComponentOption, + GridComponentOption, + LegendComponentOption, + TitleComponentOption, + ToolboxComponentOption, + TooltipComponentOption +} from 'echarts/components'; +import { LabelLayout, UniversalTransition } from 'echarts/features'; +import { CanvasRenderer } from 'echarts/renderers'; +import { useThemeStore } from '@/store/modules/theme'; + +export type ECOption = echarts.ComposeOption< + | BarSeriesOption + | LineSeriesOption + | PieSeriesOption + | ScatterSeriesOption + | PictorialBarSeriesOption + | RadarSeriesOption + | GaugeSeriesOption + | TitleComponentOption + | LegendComponentOption + | TooltipComponentOption + | GridComponentOption + | ToolboxComponentOption + | DatasetComponentOption +>; + +echarts.use([ + TitleComponent, + LegendComponent, + TooltipComponent, + GridComponent, + DatasetComponent, + TransformComponent, + ToolboxComponent, + BarChart, + LineChart, + PieChart, + ScatterChart, + PictorialBarChart, + RadarChart, + GaugeChart, + LabelLayout, + UniversalTransition, + CanvasRenderer +]); + +interface ChartHooks { + onRender?: (chart: echarts.ECharts) => void | Promise; + onUpdated?: (chart: echarts.ECharts) => void | Promise; + onDestroy?: (chart: echarts.ECharts) => void | Promise; +} + +/** + * use echarts + * + * @param optionsFactory echarts options factory function + * @param darkMode dark mode + */ +export function useEcharts(optionsFactory: () => T, hooks: ChartHooks = {}) { + const scope = effectScope(); + + const themeStore = useThemeStore(); + const darkMode = computed(() => themeStore.darkMode); + + const domRef = ref(null); + const initialSize = { width: 0, height: 0 }; + const { width, height } = useElementSize(domRef, initialSize); + + let chart: echarts.ECharts | null = null; + const chartOptions: T = optionsFactory(); + + const { + onRender = instance => { + const textColor = darkMode.value ? 'rgb(224, 224, 224)' : 'rgb(31, 31, 31)'; + const maskColor = darkMode.value ? 'rgba(0, 0, 0, 0.4)' : 'rgba(255, 255, 255, 0.8)'; + + instance.showLoading({ + color: themeStore.themeColor, + textColor, + fontSize: 14, + maskColor + }); + }, + onUpdated = instance => { + instance.hideLoading(); + }, + onDestroy + } = hooks; + + /** + * whether can render chart + * + * when domRef is ready and initialSize is valid + */ + function canRender() { + return domRef.value && initialSize.width > 0 && initialSize.height > 0; + } + + /** is chart rendered */ + function isRendered() { + return Boolean(domRef.value && chart); + } + + /** + * update chart options + * + * @param callback callback function + */ + async function updateOptions(callback: (opts: T, optsFactory: () => T) => ECOption = () => chartOptions) { + if (!isRendered()) return; + + const updatedOpts = callback(chartOptions, optionsFactory); + + Object.assign(chartOptions, updatedOpts); + + if (isRendered()) { + chart?.clear(); + } + + chart?.setOption({ ...updatedOpts, backgroundColor: 'transparent' }); + + await onUpdated?.(chart!); + } + + function setOptions(options: T) { + chart?.setOption(options); + } + + /** render chart */ + async function render() { + if (!isRendered()) { + const chartTheme = darkMode.value ? 'dark' : 'light'; + + await nextTick(); + + chart = echarts.init(domRef.value, chartTheme); + + chart.setOption({ ...chartOptions, backgroundColor: 'transparent' }); + + await onRender?.(chart); + } + } + + /** resize chart */ + function resize() { + chart?.resize(); + } + + /** destroy chart */ + async function destroy() { + if (!chart) return; + + await onDestroy?.(chart); + chart?.dispose(); + chart = null; + } + + /** change chart theme */ + async function changeTheme() { + await destroy(); + await render(); + await onUpdated?.(chart!); + } + + /** + * render chart by size + * + * @param w width + * @param h height + */ + async function renderChartBySize(w: number, h: number) { + initialSize.width = w; + initialSize.height = h; + + // size is abnormal, destroy chart + if (!canRender()) { + await destroy(); + + return; + } + + // resize chart + if (isRendered()) { + resize(); + } + + // render chart + await render(); + } + + scope.run(() => { + watch([width, height], ([newWidth, newHeight]) => { + renderChartBySize(newWidth, newHeight); + }); + + watch(darkMode, () => { + changeTheme(); + }); + }); + + onScopeDispose(() => { + destroy(); + scope.stop(); + }); + + return { + domRef, + updateOptions, + setOptions + }; +} diff --git a/src/hooks/common/form.ts b/src/hooks/common/form.ts new file mode 100644 index 0000000..e4a2733 --- /dev/null +++ b/src/hooks/common/form.ts @@ -0,0 +1,97 @@ +import { ref, toValue } from 'vue'; +import type { ComputedRef, Ref } from 'vue'; +import type { FormInst } from 'naive-ui'; +import { REG_CODE_SIX, REG_EMAIL, REG_PHONE, REG_PWD, REG_USER_NAME } from '@/constants/reg'; +import { $t } from '@/locales'; + +export function useFormRules() { + const patternRules = { + userName: { + pattern: REG_USER_NAME, + message: $t('form.userName.invalid'), + trigger: 'change' + }, + phone: { + pattern: REG_PHONE, + message: $t('form.phone.invalid'), + trigger: 'change' + }, + pwd: { + pattern: REG_PWD, + message: $t('form.pwd.invalid'), + trigger: 'change' + }, + code: { + pattern: REG_CODE_SIX, + message: $t('form.code.invalid'), + trigger: 'change' + }, + email: { + pattern: REG_EMAIL, + message: $t('form.email.invalid'), + trigger: 'change' + } + } satisfies Record; + + const formRules = { + userName: [createRequiredRule($t('form.userName.required')), patternRules.userName], + phone: [createRequiredRule($t('form.phone.required')), patternRules.phone], + pwd: [createRequiredRule($t('form.pwd.required')), patternRules.pwd], + code: [createRequiredRule($t('form.code.required')), patternRules.code], + email: [createRequiredRule($t('form.email.required')), patternRules.email] + } satisfies Record; + + /** the default required rule */ + const defaultRequiredRule = createRequiredRule($t('form.required')); + + function createRequiredRule(message: string): App.Global.FormRule { + return { + required: true, + message + }; + } + + /** create a rule for confirming the password */ + function createConfirmPwdRule(pwd: string | Ref | ComputedRef) { + const confirmPwdRule: App.Global.FormRule[] = [ + { required: true, message: $t('form.confirmPwd.required') }, + { + asyncValidator: (rule, value) => { + if (value.trim() !== '' && value !== toValue(pwd)) { + return Promise.reject(rule.message); + } + return Promise.resolve(); + }, + message: $t('form.confirmPwd.invalid'), + trigger: 'input' + } + ]; + return confirmPwdRule; + } + + return { + patternRules, + formRules, + defaultRequiredRule, + createRequiredRule, + createConfirmPwdRule + }; +} + +export function useNaiveForm() { + const formRef = ref(null); + + async function validate() { + await formRef.value?.validate(); + } + + async function restoreValidation() { + formRef.value?.restoreValidation(); + } + + return { + formRef, + validate, + restoreValidation + }; +} diff --git a/src/hooks/common/icon.ts b/src/hooks/common/icon.ts new file mode 100644 index 0000000..8998f60 --- /dev/null +++ b/src/hooks/common/icon.ts @@ -0,0 +1,10 @@ +import { useSvgIconRender } from '@sa/hooks'; +import SvgIcon from '@/components/custom/svg-icon.vue'; + +export function useSvgIcon() { + const { SvgIconVNode } = useSvgIconRender(SvgIcon); + + return { + SvgIconVNode + }; +} diff --git a/src/hooks/common/router.ts b/src/hooks/common/router.ts new file mode 100644 index 0000000..5affcdd --- /dev/null +++ b/src/hooks/common/router.ts @@ -0,0 +1,115 @@ +import { useRouter } from 'vue-router'; +import type { RouteLocationRaw } from 'vue-router'; +import type { RouteKey } from '@elegant-router/types'; +import { router as globalRouter } from '@/router'; + +/** + * Router push + * + * Jump to the specified route, it can replace function router.push + * + * @param inSetup Whether is in vue script setup + */ +export function useRouterPush(inSetup = true) { + const router = inSetup ? useRouter() : globalRouter; + const route = globalRouter.currentRoute; + + const routerPush = router.push; + + const routerBack = router.back; + + async function routerPushByKey(key: RouteKey, options?: App.Global.RouterPushOptions) { + const { query, params } = options || {}; + + const routeLocation: RouteLocationRaw = { + name: key + }; + + if (Object.keys(query || {}).length) { + routeLocation.query = query; + } + + if (Object.keys(params || {}).length) { + routeLocation.params = params; + } + + return routerPush(routeLocation); + } + + function routerPushByKeyWithMetaQuery(key: RouteKey) { + const allRoutes = router.getRoutes(); + const meta = allRoutes.find(item => item.name === key)?.meta || null; + + const query: Record = {}; + + meta?.query?.forEach(item => { + query[item.key] = item.value; + }); + + return routerPushByKey(key, { query }); + } + + async function toHome() { + return routerPushByKey('root'); + } + + /** + * Navigate to login page + * + * @param loginModule The login module + * @param redirectUrl The redirect url, if not specified, it will be the current route fullPath + */ + async function toLogin(loginModule?: UnionKey.LoginModule, redirectUrl?: string) { + const module = loginModule || 'pwd-login'; + + const options: App.Global.RouterPushOptions = { + params: { + module + } + }; + + const redirect = redirectUrl || route.value.fullPath; + + options.query = { + redirect + }; + + return routerPushByKey('login', options); + } + + /** + * Toggle login module + * + * @param module + */ + async function toggleLoginModule(module: UnionKey.LoginModule) { + const query = route.value.query as Record; + + return routerPushByKey('login', { query, params: { module } }); + } + + /** + * Redirect from login + * + * @param [needRedirect=true] Whether to redirect after login. Default is `true` + */ + async function redirectFromLogin(needRedirect = true) { + const redirect = route.value.query?.redirect as string; + console.log(redirect); + if (needRedirect && redirect) { + await routerPush(redirect); + } else { + await toHome(); + } + } + + return { + routerPush, + routerBack, + routerPushByKey, + routerPushByKeyWithMetaQuery, + toLogin, + toggleLoginModule, + redirectFromLogin + }; +} diff --git a/src/hooks/common/table.ts b/src/hooks/common/table.ts new file mode 100644 index 0000000..945f569 --- /dev/null +++ b/src/hooks/common/table.ts @@ -0,0 +1,274 @@ +import { computed, effectScope, onScopeDispose, reactive, ref, watch } from 'vue'; +import type { Ref } from 'vue'; +import type { PaginationProps } from 'naive-ui'; +import { jsonClone } from '@sa/utils'; +import { useBoolean, useHookTable } from '@sa/hooks'; +import { useAppStore } from '@/store/modules/app'; +import { $t } from '@/locales'; +import { log } from 'console'; + +type TableData = NaiveUI.TableData; +type GetTableData = NaiveUI.GetTableData; +type TableColumn = NaiveUI.TableColumn; + +export function useTable(config: NaiveUI.NaiveTableConfig) { + const scope = effectScope(); + const appStore = useAppStore(); + + const isMobile = computed(() => appStore.isMobile); + + const { apiFn, apiParams, immediate, showTotal } = config; + + const SELECTION_KEY = '__selection__'; + + const EXPAND_KEY = '__expand__'; + + const { + loading, + empty, + data, + columns, + columnChecks, + reloadColumns, + getData, + searchParams, + updateSearchParams, + resetSearchParams + } = useHookTable, TableColumn>>>({ + apiFn, + apiParams, + columns: config.columns, + transformer: res => { + console.log(res); + const { data = [], current = 1, size = 10, total = 0 } = res || {}; + + // Ensure that the size is greater than 0, If it is less than 0, it will cause paging calculation errors. + const pageSize = size <= 0 ? 10 : size; + + const recordsWithIndex = data.map((item, index) => { + return { + ...item, + index: (current - 1) * pageSize + index + 1 + }; + }); + console.log(recordsWithIndex); + return { + data: recordsWithIndex, + pageNum: current, + pageSize, + total + }; + }, + getColumnChecks: cols => { + const checks: NaiveUI.TableColumnCheck[] = []; + + cols.forEach(column => { + if (isTableColumnHasKey(column)) { + checks.push({ + key: column.key as string, + title: column.title!, + checked: true + }); + } else if (column.type === 'selection') { + checks.push({ + key: SELECTION_KEY, + title: $t('common.check'), + checked: true + }); + } else if (column.type === 'expand') { + checks.push({ + key: EXPAND_KEY, + title: $t('common.expandColumn'), + checked: true + }); + } + }); + + return checks; + }, + getColumns: (cols, checks) => { + const columnMap = new Map>>(); + + cols.forEach(column => { + if (isTableColumnHasKey(column)) { + columnMap.set(column.key as string, column); + } else if (column.type === 'selection') { + columnMap.set(SELECTION_KEY, column); + } else if (column.type === 'expand') { + columnMap.set(EXPAND_KEY, column); + } + }); + + const filteredColumns = checks + .filter(item => item.checked) + .map(check => columnMap.get(check.key) as TableColumn>); + + return filteredColumns; + }, + onFetched: async transformed => { + const { pageNum, pageSize, total } = transformed; + + updatePagination({ + page: pageNum, + pageSize, + itemCount: total + }); + }, + immediate + }); + + const pagination: PaginationProps = reactive({ + page: 1, + pageSize: 10, + showSizePicker: true, + itemCount: 0, + pageSizes: [10, 15, 20, 25, 30], + onUpdatePage: async (page: number) => { + pagination.page = page; + + updateSearchParams({ + current: page, + size: pagination.pageSize! + }); + + getData(); + }, + onUpdatePageSize: async (pageSize: number) => { + pagination.pageSize = pageSize; + pagination.page = 1; + + updateSearchParams({ + current: pagination.page, + size: pageSize + }); + + getData(); + }, + ...(showTotal + ? { + prefix: page => $t('datatable.itemCount', { total: page.itemCount }) + } + : {}) + }); + + // this is for mobile, if the system does not support mobile, you can use `pagination` directly + const mobilePagination = computed(() => { + const p: PaginationProps = { + ...pagination, + pageSlot: isMobile.value ? 3 : 9, + prefix: !isMobile.value && showTotal ? pagination.prefix : undefined + }; + + return p; + }); + + function updatePagination(update: Partial) { + Object.assign(pagination, update); + } + + /** + * get data by page number + * + * @param pageNum the page number. default is 1 + */ + async function getDataByPage(pageNum: number = 1) { + updatePagination({ + page: pageNum + }); + + updateSearchParams({ + current: pageNum, + size: pagination.pageSize! + }); + + await getData(); + } + + scope.run(() => { + watch( + () => appStore.locale, + () => { + reloadColumns(); + } + ); + }); + + onScopeDispose(() => { + scope.stop(); + }); + + return { + loading, + empty, + data, + columns, + columnChecks, + reloadColumns, + pagination, + mobilePagination, + updatePagination, + getData, + getDataByPage, + searchParams, + updateSearchParams, + resetSearchParams + }; +} + +export function useTableOperate(data: Ref, getData: () => Promise) { + const { bool: drawerVisible, setTrue: openDrawer, setFalse: closeDrawer } = useBoolean(); + + const operateType = ref('add'); + + function handleAdd() { + operateType.value = 'add'; + openDrawer(); + } + + /** the editing row data */ + const editingData: Ref = ref(null); + + function handleEdit(id: T['id']) { + operateType.value = 'edit'; + const findItem = data.value.find(item => item.id === id) || null; + editingData.value = jsonClone(findItem); + + openDrawer(); + } + + /** the checked row keys of table */ + const checkedRowKeys = ref([]); + + /** the hook after the batch delete operation is completed */ + async function onBatchDeleted() { + window.$message?.success($t('common.deleteSuccess')); + + checkedRowKeys.value = []; + + await getData(); + } + + /** the hook after the delete operation is completed */ + async function onDeleted() { + window.$message?.success($t('common.deleteSuccess')); + + await getData(); + } + + return { + drawerVisible, + openDrawer, + closeDrawer, + operateType, + handleAdd, + editingData, + handleEdit, + checkedRowKeys, + onBatchDeleted, + onDeleted + }; +} + +function isTableColumnHasKey(column: TableColumn): column is NaiveUI.TableColumnWithKey { + return Boolean((column as NaiveUI.TableColumnWithKey).key); +} diff --git a/src/layouts/base-layout/index.vue b/src/layouts/base-layout/index.vue new file mode 100644 index 0000000..7debe5d --- /dev/null +++ b/src/layouts/base-layout/index.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/layouts/blank-layout/index.vue b/src/layouts/blank-layout/index.vue new file mode 100644 index 0000000..2e393f0 --- /dev/null +++ b/src/layouts/blank-layout/index.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/src/layouts/context/index.ts b/src/layouts/context/index.ts new file mode 100644 index 0000000..8b54264 --- /dev/null +++ b/src/layouts/context/index.ts @@ -0,0 +1,83 @@ +import { computed, ref, watch } from 'vue'; +import { useRoute } from 'vue-router'; +import { useContext } from '@sa/hooks'; +import { useRouteStore } from '@/store/modules/route'; + +export const { setupStore: setupMixMenuContext, useStore: useMixMenuContext } = useContext('mix-menu', useMixMenu); + +function useMixMenu() { + const route = useRoute(); + const routeStore = useRouteStore(); + const { selectedKey } = useMenu(); + + const activeFirstLevelMenuKey = ref(''); + + function setActiveFirstLevelMenuKey(key: string) { + activeFirstLevelMenuKey.value = key; + } + + function getActiveFirstLevelMenuKey() { + const [firstLevelRouteName] = selectedKey.value.split('_'); + + setActiveFirstLevelMenuKey(firstLevelRouteName); + } + + const allMenus = computed(() => routeStore.menus); + + const firstLevelMenus = computed(() => + routeStore.menus.map(menu => { + const { children: _, ...rest } = menu; + + return rest; + }) + ); + + const childLevelMenus = computed( + () => routeStore.menus.find(menu => menu.key === activeFirstLevelMenuKey.value)?.children || [] + ); + + const isActiveFirstLevelMenuHasChildren = computed(() => { + if (!activeFirstLevelMenuKey.value) { + return false; + } + + const findItem = allMenus.value.find(item => item.key === activeFirstLevelMenuKey.value); + + return Boolean(findItem?.children?.length); + }); + + watch( + () => route.name, + () => { + getActiveFirstLevelMenuKey(); + }, + { immediate: true } + ); + + return { + allMenus, + firstLevelMenus, + childLevelMenus, + isActiveFirstLevelMenuHasChildren, + activeFirstLevelMenuKey, + setActiveFirstLevelMenuKey, + getActiveFirstLevelMenuKey + }; +} + +export function useMenu() { + const route = useRoute(); + + const selectedKey = computed(() => { + const { hideInMenu, activeMenu } = route.meta; + const name = route.name as string; + + const routeName = (hideInMenu ? activeMenu : name) || name; + + return routeName; + }); + + return { + selectedKey + }; +} diff --git a/src/layouts/modules/global-breadcrumb/index.vue b/src/layouts/modules/global-breadcrumb/index.vue new file mode 100644 index 0000000..0a17907 --- /dev/null +++ b/src/layouts/modules/global-breadcrumb/index.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/layouts/modules/global-content/index.vue b/src/layouts/modules/global-content/index.vue new file mode 100644 index 0000000..989b6d4 --- /dev/null +++ b/src/layouts/modules/global-content/index.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/layouts/modules/global-footer/index.vue b/src/layouts/modules/global-footer/index.vue new file mode 100644 index 0000000..603cbaf --- /dev/null +++ b/src/layouts/modules/global-footer/index.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/src/layouts/modules/global-header/components/theme-button.vue b/src/layouts/modules/global-header/components/theme-button.vue new file mode 100644 index 0000000..06c40ec --- /dev/null +++ b/src/layouts/modules/global-header/components/theme-button.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/src/layouts/modules/global-header/components/user-avatar.vue b/src/layouts/modules/global-header/components/user-avatar.vue new file mode 100644 index 0000000..78f5ade --- /dev/null +++ b/src/layouts/modules/global-header/components/user-avatar.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/layouts/modules/global-header/index.vue b/src/layouts/modules/global-header/index.vue new file mode 100644 index 0000000..592048d --- /dev/null +++ b/src/layouts/modules/global-header/index.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/src/layouts/modules/global-logo/index.vue b/src/layouts/modules/global-logo/index.vue new file mode 100644 index 0000000..40ec52b --- /dev/null +++ b/src/layouts/modules/global-logo/index.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/src/layouts/modules/global-menu/components/first-level-menu.vue b/src/layouts/modules/global-menu/components/first-level-menu.vue new file mode 100644 index 0000000..b9c895a --- /dev/null +++ b/src/layouts/modules/global-menu/components/first-level-menu.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/src/layouts/modules/global-menu/index.vue b/src/layouts/modules/global-menu/index.vue new file mode 100644 index 0000000..45434d9 --- /dev/null +++ b/src/layouts/modules/global-menu/index.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/layouts/modules/global-menu/modules/horizontal-menu.vue b/src/layouts/modules/global-menu/modules/horizontal-menu.vue new file mode 100644 index 0000000..93df109 --- /dev/null +++ b/src/layouts/modules/global-menu/modules/horizontal-menu.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/src/layouts/modules/global-menu/modules/horizontal-mix-menu.vue b/src/layouts/modules/global-menu/modules/horizontal-mix-menu.vue new file mode 100644 index 0000000..942a527 --- /dev/null +++ b/src/layouts/modules/global-menu/modules/horizontal-mix-menu.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/layouts/modules/global-menu/modules/reversed-horizontal-mix-menu.vue b/src/layouts/modules/global-menu/modules/reversed-horizontal-mix-menu.vue new file mode 100644 index 0000000..4f24f37 --- /dev/null +++ b/src/layouts/modules/global-menu/modules/reversed-horizontal-mix-menu.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/layouts/modules/global-menu/modules/vertical-menu.vue b/src/layouts/modules/global-menu/modules/vertical-menu.vue new file mode 100644 index 0000000..e33e0de --- /dev/null +++ b/src/layouts/modules/global-menu/modules/vertical-menu.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/src/layouts/modules/global-menu/modules/vertical-mix-menu.vue b/src/layouts/modules/global-menu/modules/vertical-mix-menu.vue new file mode 100644 index 0000000..3cfe230 --- /dev/null +++ b/src/layouts/modules/global-menu/modules/vertical-mix-menu.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/layouts/modules/global-search/components/search-footer.vue b/src/layouts/modules/global-search/components/search-footer.vue new file mode 100644 index 0000000..0fa6c8f --- /dev/null +++ b/src/layouts/modules/global-search/components/search-footer.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/layouts/modules/global-search/components/search-modal.vue b/src/layouts/modules/global-search/components/search-modal.vue new file mode 100644 index 0000000..39f18a8 --- /dev/null +++ b/src/layouts/modules/global-search/components/search-modal.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/src/layouts/modules/global-search/components/search-result.vue b/src/layouts/modules/global-search/components/search-result.vue new file mode 100644 index 0000000..bb13952 --- /dev/null +++ b/src/layouts/modules/global-search/components/search-result.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/src/layouts/modules/global-search/index.vue b/src/layouts/modules/global-search/index.vue new file mode 100644 index 0000000..95c2a7b --- /dev/null +++ b/src/layouts/modules/global-search/index.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/layouts/modules/global-sider/index.vue b/src/layouts/modules/global-sider/index.vue new file mode 100644 index 0000000..bb62c18 --- /dev/null +++ b/src/layouts/modules/global-sider/index.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/src/layouts/modules/global-tab/context-menu.vue b/src/layouts/modules/global-tab/context-menu.vue new file mode 100644 index 0000000..18d57f9 --- /dev/null +++ b/src/layouts/modules/global-tab/context-menu.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/src/layouts/modules/global-tab/index.vue b/src/layouts/modules/global-tab/index.vue new file mode 100644 index 0000000..5603427 --- /dev/null +++ b/src/layouts/modules/global-tab/index.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/src/layouts/modules/theme-drawer/components/layout-mode-card.vue b/src/layouts/modules/theme-drawer/components/layout-mode-card.vue new file mode 100644 index 0000000..ae39604 --- /dev/null +++ b/src/layouts/modules/theme-drawer/components/layout-mode-card.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/layouts/modules/theme-drawer/components/setting-item.vue b/src/layouts/modules/theme-drawer/components/setting-item.vue new file mode 100644 index 0000000..ccd29bd --- /dev/null +++ b/src/layouts/modules/theme-drawer/components/setting-item.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/src/layouts/modules/theme-drawer/index.vue b/src/layouts/modules/theme-drawer/index.vue new file mode 100644 index 0000000..aa937d5 --- /dev/null +++ b/src/layouts/modules/theme-drawer/index.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/src/layouts/modules/theme-drawer/modules/config-operation.vue b/src/layouts/modules/theme-drawer/modules/config-operation.vue new file mode 100644 index 0000000..f2df602 --- /dev/null +++ b/src/layouts/modules/theme-drawer/modules/config-operation.vue @@ -0,0 +1,58 @@ + + +