From ce6be02a152c9920e6af68616c4e0c395427dc99 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Thu, 21 Sep 2023 15:30:12 +0800
Subject: [PATCH 01/18] refactor: use unocss

---
 .vscode/extensions.json                       |  1 +
 .vscode/settings.json                         | 11 ++-
 .../Application/src/AppDarkModeToggle.vue     | 28 +++-----
 .../src/search/AppSearchFooter.vue            | 14 +---
 src/components/Basic/src/BasicHelp.vue        | 23 ++----
 .../ContextMenu/src/ContextMenu.vue           |  2 +-
 src/components/CronTab/src/CronTabInput.vue   | 24 +------
 src/components/Cropper/src/CropperAvatar.vue  |  9 +--
 .../Drawer/src/components/DrawerFooter.vue    | 32 +++------
 .../Drawer/src/components/DrawerHeader.vue    | 36 ++--------
 .../Form/src/components/FileUpload.vue        |  8 +--
 .../src/components/VFormCreate/index.vue      |  8 +--
 .../VFormDesign/components/FormOptions.vue    | 33 +--------
 .../components/ImportJsonModal.vue            |  8 +--
 .../VFormDesign/components/PreviewCode.vue    | 16 +----
 .../src/components/VFormDesign/index.vue      | 22 +-----
 src/components/Page/src/PageFooter.vue        | 18 +----
 src/components/Table/src/BasicTable.vue       |  2 +-
 src/design/index.less                         |  1 -
 src/layouts/default/footer/index.vue          | 42 ++---------
 .../header/components/notify/NoticeList.vue   | 70 +++----------------
 .../header/components/notify/index.vue        |  2 -
 src/layouts/default/index.vue                 | 22 +-----
 .../setting/components/InputNumberItem.vue    | 20 +-----
 .../default/setting/components/SelectItem.vue | 21 +-----
 .../setting/components/SettingFooter.vue      | 14 +---
 .../default/setting/components/SwitchItem.vue | 14 +---
 src/views/base/login/Login.vue                |  5 +-
 src/views/base/login/SessionTimeoutLogin.vue  | 16 +----
 src/views/base/profile/AccountBind.vue        | 17 +----
 src/views/base/profile/BaseSetting.vue        | 13 +---
 src/views/base/profile/MsgNotify.vue          | 10 +--
 src/views/base/profile/SecureSetting.vue      | 13 +---
 src/views/base/profile/index.vue              | 18 +----
 .../bpm/processInstance/create/index.vue      | 10 +--
 src/views/infra/codegen/EditTable.vue         | 10 +--
 .../codegen/components/BasicInfoForm.vue      | 42 +++--------
 .../codegen/components/CloumInfoForm.vue      | 39 +++--------
 .../infra/codegen/components/FinishForm.vue   | 14 +---
 39 files changed, 112 insertions(+), 596 deletions(-)

diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 5d7e57f3..0127df89 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -6,6 +6,7 @@
     "stylelint.vscode-stylelint",
     "dbaeumer.vscode-eslint",
     "esbenp.prettier-vscode",
+    "usernamehw.errorlens",
     "mrmlnc.vscode-less",
     "lokalise.i18n-ally",
     "redhat.vscode-yaml",
diff --git a/.vscode/settings.json b/.vscode/settings.json
index f45d23cf..81f0295e 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -66,6 +66,12 @@
     "source.fixAll.eslint": true,
     "source.organizeImports": false
   },
+  "eslint.rules.customizations": [
+    {
+      "rule": "@stylistic/*",
+      "severity": "off"
+    }
+  ],
   "eslint.validate": [
     "javascript",
     "javascriptreact",
@@ -82,7 +88,7 @@
     "editor.defaultFormatter": "esbenp.prettier-vscode"
   },
   "[typescript]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
+    "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
   },
   "[typescriptreact]": {
     "editor.defaultFormatter": "esbenp.prettier-vscode"
@@ -166,6 +172,9 @@
     "*.env": "$(capture).env.*",
     "package.json": ".hintrc,pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
   },
+  "eslint.codeAction.showDocumentation": {
+    "enable": true
+  },
   "terminal.integrated.scrollback": 10000,
   "nuxt.isNuxtApp": false
 }
diff --git a/src/components/Application/src/AppDarkModeToggle.vue b/src/components/Application/src/AppDarkModeToggle.vue
index 1a51fcad..7cde953f 100644
--- a/src/components/Application/src/AppDarkModeToggle.vue
+++ b/src/components/Application/src/AppDarkModeToggle.vue
@@ -29,8 +29,14 @@ function toggleDarkMode() {
 </script>
 
 <template>
-  <div v-if="getShowDarkModeToggle" :class="getClass" @click="toggleDarkMode">
-    <div :class="`${prefixCls}-inner`" />
+  <div
+    v-if="getShowDarkModeToggle" :class="getClass"
+    class="relative mr-auto h-6.5 w-12.5 flex cursor-pointer items-center justify-between rounded-4.5 bg-black px-1.5"
+    @click="toggleDarkMode"
+  >
+    <div
+      class="dark:(transform translateX(calc(100% + 2px))) absolute z-1 h-4.5 w-4.5 rounded-1/2 bg-white will-change-transform"
+    />
     <SvgIcon size="14" name="sun" />
     <SvgIcon size="14" name="moon" />
   </div>
@@ -46,29 +52,11 @@ html[data-theme='dark'] {
 }
 
 .@{prefix-cls} {
-  position: relative;
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  width: 50px;
-  height: 26px;
-  padding: 0 6px;
-  margin-left: auto;
-  cursor: pointer;
-  background-color: #151515;
-  border-radius: 30px;
 
   &-inner {
-    position: absolute;
-    z-index: 1;
-    width: 18px;
-    height: 18px;
-    background-color: #fff;
-    border-radius: 50%;
     transition:
       transform 0.5s,
       background-color 0.5s;
-    will-change: transform;
   }
 
   &--dark {
diff --git a/src/components/Application/src/search/AppSearchFooter.vue b/src/components/Application/src/search/AppSearchFooter.vue
index 373de941..2b449803 100644
--- a/src/components/Application/src/search/AppSearchFooter.vue
+++ b/src/components/Application/src/search/AppSearchFooter.vue
@@ -8,7 +8,7 @@ const { t } = useI18n()
 </script>
 
 <template>
-  <div :class="`${prefixCls}`">
+  <div class="relative h-10 flex flex-shrink-0 items-center border-t-1 rounded-bl-2xl px-4 py-0 dark:border-light-100">
     <AppSearchKeyItem :class="`${prefixCls}-item`" icon="ant-design:enter-outlined" />
     <span>{{ t('component.app.toSearch') }}</span>
     <AppSearchKeyItem :class="`${prefixCls}-item`" icon="ion:arrow-up-outline" />
@@ -23,18 +23,6 @@ const { t } = useI18n()
 @prefix-cls: ~'@{namespace}-app-search-footer';
 
 .@{prefix-cls} {
-  position: relative;
-  display: flex;
-  flex-shrink: 0;
-  align-items: center;
-  height: 44px;
-  padding: 0 16px;
-  font-size: 12px;
-  // color: var(--text-color);
-  // background-color: var(--component-background);
-  border-top: 1px solid var(--border-color);
-  border-radius: 0 0 16px 16px;
-
   &-item {
     display: flex;
     align-items: center;
diff --git a/src/components/Basic/src/BasicHelp.vue b/src/components/Basic/src/BasicHelp.vue
index 06c94509..8990fdb8 100644
--- a/src/components/Basic/src/BasicHelp.vue
+++ b/src/components/Basic/src/BasicHelp.vue
@@ -6,7 +6,6 @@ import { InfoCircleOutlined } from '@ant-design/icons-vue'
 import { getPopupContainer } from '@/utils'
 import { isArray, isString } from '@/utils/is'
 import { getSlot } from '@/utils/helper/tsxHelper'
-import { useDesign } from '@/hooks/web/useDesign'
 
 const props = {
   /**
@@ -44,7 +43,6 @@ export default defineComponent({
   components: { Tooltip },
   props,
   setup(props, { slots }) {
-    const { prefixCls } = useDesign('basic-help')
 
     const getTooltipStyle = computed((): CSSProperties => ({ color: props.color, fontSize: props.fontSize }))
 
@@ -74,14 +72,14 @@ export default defineComponent({
     return () => {
       return (
         <Tooltip
-          overlayClassName={`${prefixCls}__wrap`}
+          overlayClassName="overlay-class"
           title={<div style={unref(getTooltipStyle)}>{renderTitle()}</div>}
           autoAdjustOverflow={true}
           overlayStyle={unref(getOverlayStyle)}
           placement={props.placement as 'right'}
           getPopupContainer={() => getPopupContainer()}
         >
-          <span class={prefixCls}>{getSlot(slots) || <InfoCircleOutlined />}</span>
+          <span class="ml-1.5 inline-block cursor-pointer text-sm">{getSlot(slots) || <InfoCircleOutlined />}</span>
         </Tooltip>
       )
     }
@@ -89,19 +87,10 @@ export default defineComponent({
 })
 </script>
 
-<style lang="less">
-@prefix-cls: ~'@{namespace}-basic-help';
-
-.@{prefix-cls} {
-  display: inline-block;
-  margin-left: 6px;
-  font-size: 14px;
-  cursor: pointer;
-
-  &__wrap {
-    p {
-      margin-bottom: 0;
-    }
+<style>
+.overlay-class {
+  p {
+    margin-bottom: 0;
   }
 }
 </style>
diff --git a/src/components/ContextMenu/src/ContextMenu.vue b/src/components/ContextMenu/src/ContextMenu.vue
index db46712e..dbdddf13 100644
--- a/src/components/ContextMenu/src/ContextMenu.vue
+++ b/src/components/ContextMenu/src/ContextMenu.vue
@@ -31,7 +31,7 @@ const props = {
 const ItemContent: FunctionalComponent<ItemContentProps> = (props) => {
   const { item } = props
   return (
-    <span style="display: inline-block; width: 100%; " class="px-4" onClick={props.handler.bind(null, item)}>
+    <span class="inline-block w-full px-4" onClick={props.handler.bind(null, item)}>
       {props.showIcon && item.icon && <Icon class="mr-2" icon={item.icon} />}
       <span>{item.label}</span>
     </span>
diff --git a/src/components/CronTab/src/CronTabInput.vue b/src/components/CronTab/src/CronTabInput.vue
index 963ffe6f..def73fca 100644
--- a/src/components/CronTab/src/CronTabInput.vue
+++ b/src/components/CronTab/src/CronTabInput.vue
@@ -3,7 +3,6 @@ import { ref, watch } from 'vue'
 import { Input } from 'ant-design-vue'
 import CronTabModal from './CronTabModal.vue'
 import { cronEmits, cronProps } from './cron.data'
-import { useDesign } from '@/hooks/web/useDesign'
 import { useModal } from '@/components/Modal'
 import { propTypes } from '@/utils/propTypes'
 import { Icon } from '@/components/Icon'
@@ -14,7 +13,6 @@ const props = defineProps({
   exeStartTime: propTypes.oneOfType([propTypes.number, propTypes.string, propTypes.object]).def(0),
 })
 const emit = defineEmits([...cronEmits])
-const { prefixCls } = useDesign('cron-input')
 const [registerModal, { openModal }] = useModal()
 const editCronValue = ref(props.value)
 
@@ -37,11 +35,11 @@ function showConfigModal() {
 </script>
 
 <template>
-  <div :class="`${prefixCls}`">
+  <div>
     <Input v-model:value="editCronValue" :placeholder="placeholder" :disabled="disabled">
       <template #addonAfter>
-        <a class="open-btn" :disabled="disabled ? 'disabled' : null" @click="showConfigModal">
-          <Icon icon="ant-design:setting-outlined" />
+        <a class="cursor-pointer" :disabled="disabled ? 'disabled' : null" @click="showConfigModal">
+          <Icon class="relative right-0.5 top-0.25" icon="ant-design:setting-outlined" />
           <span>选择</span>
         </a>
       </template>
@@ -56,19 +54,3 @@ function showConfigModal() {
     />
   </div>
 </template>
-
-<style lang="less">
-@prefix-cls: ~'@{namespace}-cron-input';
-
-.@{prefix-cls} {
-  a.open-btn {
-    cursor: pointer;
-
-    .app-iconify {
-      position: relative;
-      top: 1px;
-      right: 2px;
-    }
-  }
-}
-</style>
diff --git a/src/components/Cropper/src/CropperAvatar.vue b/src/components/Cropper/src/CropperAvatar.vue
index cd5b8cce..38214f11 100644
--- a/src/components/Cropper/src/CropperAvatar.vue
+++ b/src/components/Cropper/src/CropperAvatar.vue
@@ -1,6 +1,7 @@
 <script lang="ts" setup>
 import type { CSSProperties } from 'vue'
 import { computed, ref, unref, watch, watchEffect } from 'vue'
+import { Avatar } from 'ant-design-vue'
 import CopperModal from './CopperModal.vue'
 import { useDesign } from '@/hooks/web/useDesign'
 import { useModal } from '@/components/Modal'
@@ -65,9 +66,9 @@ defineExpose({ openModal: openModal.bind(null, true), closeModal })
       <div :class="`${prefixCls}-image-mask`" :style="getImageWrapperStyle">
         <Icon icon="ant-design:cloud-upload-outlined" :size="getIconWidth" :style="getImageWrapperStyle" color="#d6d6d6" />
       </div>
-      <img v-if="sourceValue" :src="sourceValue" alt="avatar">
+      <Avatar v-if="sourceValue" :size="{ xs: 24, sm: 32, md: 40, lg: 64, xl: 80, xxl: 100 }" :src="sourceValue" alt="avatar" />
     </div>
-    <a-button v-if="showBtn" :class="`${prefixCls}-upload-btn`" v-bind="btnProps" @click="openModal">
+    <a-button v-if="showBtn" class="mx-auto my-2.5" v-bind="btnProps" @click="openModal">
       {{ btnText ? btnText : t('component.cropper.selectImage') }}
     </a-button>
 
@@ -113,9 +114,5 @@ defineExpose({ openModal: openModal.bind(null, true), closeModal })
   &-image-mask:hover {
     opacity: 40;
   }
-
-  &-upload-btn {
-    margin: 10px auto;
-  }
 }
 </style>
diff --git a/src/components/Drawer/src/components/DrawerFooter.vue b/src/components/Drawer/src/components/DrawerFooter.vue
index b437f35d..cd780b90 100644
--- a/src/components/Drawer/src/components/DrawerFooter.vue
+++ b/src/components/Drawer/src/components/DrawerFooter.vue
@@ -2,7 +2,6 @@
 import type { CSSProperties } from 'vue'
 import { computed } from 'vue'
 import { footerProps } from '../props'
-import { useDesign } from '@/hooks/web/useDesign'
 
 defineOptions({ name: 'BasicDrawerFooter' })
 
@@ -15,8 +14,6 @@ const props = defineProps({
 })
 const emit = defineEmits(['ok', 'close'])
 
-const { prefixCls } = useDesign('basic-drawer-footer')
-
 const getStyle = computed((): CSSProperties => {
   const heightStr = `${props.height}`
   return {
@@ -35,14 +32,21 @@ function handleClose() {
 </script>
 
 <template>
-  <div v-if="showFooter || $slots.footer" :class="prefixCls" :style="getStyle">
+  <div
+    v-if="showFooter || $slots.footer"
+    class="absolute bottom-0 w-full border-t-1 border-light-200 bg-white pl-5 pr-3 dark:bg-dark"
+    :style="getStyle"
+  >
     <template v-if="!$slots.footer">
       <slot name="insertFooter" />
       <a-button v-if="showCancelBtn" v-bind="cancelButtonProps" class="mr-2" @click="handleClose">
         {{ cancelText }}
       </a-button>
       <slot name="centerFooter" />
-      <a-button v-if="showOkBtn" :type="okType" v-bind="okButtonProps" class="mr-2" :loading="confirmLoading" @click="handleOk">
+      <a-button
+        v-if="showOkBtn" :type="okType" v-bind="okButtonProps" class="mr-2" :loading="confirmLoading"
+        @click="handleOk"
+      >
         {{ okText }}
       </a-button>
       <slot name="appendFooter" />
@@ -53,21 +57,3 @@ function handleClose() {
     </template>
   </div>
 </template>
-
-<style lang="less">
-@prefix-cls: ~'@{namespace}-basic-drawer-footer';
-@footer-height: 60px;
-.@{prefix-cls} {
-  position: absolute;
-  bottom: 0;
-  width: 100%;
-  padding: 0 12px 0 20px;
-  text-align: right;
-  background-color: var(--component-background);
-  border-top: 1px solid var(--border-color);
-
-  > * {
-    margin-right: 8px;
-  }
-}
-</style>
diff --git a/src/components/Drawer/src/components/DrawerHeader.vue b/src/components/Drawer/src/components/DrawerHeader.vue
index adce20a8..074eb25f 100644
--- a/src/components/Drawer/src/components/DrawerHeader.vue
+++ b/src/components/Drawer/src/components/DrawerHeader.vue
@@ -1,7 +1,6 @@
 <script lang="ts" setup>
 import { ArrowLeftOutlined } from '@ant-design/icons-vue'
 import { BasicTitle } from '@/components/Basic'
-import { useDesign } from '@/hooks/web/useDesign'
 import { propTypes } from '@/utils/propTypes'
 
 defineOptions({ name: 'BasicDrawerHeader' })
@@ -13,52 +12,27 @@ defineProps({
 })
 const emit = defineEmits(['close'])
 
-const { prefixCls } = useDesign('basic-drawer-header')
-
 function handleClose() {
   emit('close')
 }
 </script>
 
 <template>
-  <BasicTitle v-if="!isDetail" :class="prefixCls">
+  <BasicTitle v-if="!isDetail" class="h-full flex items-center">
     <slot name="title" />
     {{ !$slots.title ? title : '' }}
   </BasicTitle>
 
-  <div v-else :class="[prefixCls, `${prefixCls}--detail`]">
-    <span :class="`${prefixCls}__twrap`">
+  <div v-else>
+    <span class="flex-1">
       <span v-if="showDetailBack" @click="handleClose">
-        <ArrowLeftOutlined :class="`${prefixCls}__back`" />
+        <ArrowLeftOutlined class="cursor-pointer px-3" />
       </span>
       <span v-if="title">{{ title }}</span>
     </span>
 
-    <span :class="`${prefixCls}__toolbar`">
+    <span class="pr-12.5">
       <slot name="titleToolbar" />
     </span>
   </div>
 </template>
-
-<style lang="less">
-@prefix-cls: ~'@{namespace}-basic-drawer-header';
-@footer-height: 60px;
-.@{prefix-cls} {
-  display: flex;
-  align-items: center;
-  height: 100%;
-
-  &__back {
-    padding: 0 12px;
-    cursor: pointer;
-  }
-
-  &__twrap {
-    flex: 1;
-  }
-
-  &__toolbar {
-    padding-right: 50px;
-  }
-}
-</style>
diff --git a/src/components/Form/src/components/FileUpload.vue b/src/components/Form/src/components/FileUpload.vue
index 6baece2f..43ec3f7f 100644
--- a/src/components/Form/src/components/FileUpload.vue
+++ b/src/components/Form/src/components/FileUpload.vue
@@ -280,11 +280,11 @@ function getFileName(path) {
     <Upload
       :headers="headers"
       :multiple="multiple"
-      :action="uploadUrl as any"
+      :action="uploadUrl"
       :file-list="fileList"
       :disabled="disabled"
       v-bind="bindProps"
-      @remove="onRemove as any"
+      @remove="onRemove"
       @change="onFileChange"
       @preview="onFilePreview"
     >
@@ -305,7 +305,6 @@ function getFileName(path) {
 </template>
 
 <style lang="less">
-//noinspection LessUnresolvedVariable
 @prefix-cls: ~'@{namespace}-upload';
 
 .@{prefix-cls} {
@@ -323,12 +322,9 @@ function getFileName(path) {
         }
       }
 
-      /* update-begin-author:taoyan date:2022-5-24 for:VUEN-1093详情界面 图片下载按钮显示不全 */
       .upload-download-handler {
         right: 6px !important;
       }
-
-      /* update-end-author:taoyan date:2022-5-24 for:VUEN-1093详情界面 图片下载按钮显示不全 */
     }
 
     .ant-upload-list-item {
diff --git a/src/components/FormDesign/src/components/VFormCreate/index.vue b/src/components/FormDesign/src/components/VFormCreate/index.vue
index 5285d6c5..63ece88e 100644
--- a/src/components/FormDesign/src/components/VFormCreate/index.vue
+++ b/src/components/FormDesign/src/components/VFormCreate/index.vue
@@ -119,7 +119,7 @@ export default defineComponent({
 
 <template>
   <div class="v-form-container">
-    <Form ref="eFormModel" class="v-form-model" :model="formModel" v-bind="formModelProps">
+    <Form ref="eFormModel" class="overflow-hidden" :model="formModel" v-bind="formModelProps">
       <Row>
         <FormRender
           v-for="(schema, index) of noHiddenList"
@@ -143,9 +143,3 @@ export default defineComponent({
     </Form>
   </div>
 </template>
-
-<style lang="less" scoped>
-.v-form-model {
-  overflow: hidden;
-}
-</style>
diff --git a/src/components/FormDesign/src/components/VFormDesign/components/FormOptions.vue b/src/components/FormDesign/src/components/VFormDesign/components/FormOptions.vue
index 9e0e0ded..4770fd13 100644
--- a/src/components/FormDesign/src/components/VFormDesign/components/FormOptions.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/components/FormOptions.vue
@@ -52,10 +52,10 @@ function deleteGridOptions(index: number) {
     </div>
     <div v-else>
       <div v-for="(item, index) of formConfig.currentItem!.componentProps![key]" :key="index">
-        <div class="options-box">
+        <div class="mb-1.5 flex items-center">
           <Input v-model:value="item.label" />
-          <Input v-model:value="item.value" class="options-value" />
-          <a class="options-delete" @click="deleteOptions(index)">
+          <Input v-model:value="item.value" class="mx-2" />
+          <a class="h-7.5 w-7.5 rounded-full bg-light-50 text-center text-gray-500 hover:bg-red-500" @click="deleteOptions(index)">
             <Icon icon="ant-design:delete-outlined" />
           </a>
         </div>
@@ -67,30 +67,3 @@ function deleteGridOptions(index: number) {
     </div>
   </div>
 </template>
-
-<style lang="less" scoped>
-.options-box {
-  display: flex;
-  align-items: center;
-  margin-bottom: 5px;
-
-  .options-value {
-    margin: 0 8px;
-  }
-
-  .options-delete {
-    flex-shrink: 0;
-    width: 30px;
-    height: 30px;
-    line-height: 30px;
-    color: #666;
-    text-align: center;
-    background: #f5f5f5;
-    border-radius: 50%;
-
-    &:hover {
-      background: #ff4d4f;
-    }
-  }
-}
-</style>
diff --git a/src/components/FormDesign/src/components/VFormDesign/components/ImportJsonModal.vue b/src/components/FormDesign/src/components/VFormDesign/components/ImportJsonModal.vue
index e7e5a486..8a5f2700 100644
--- a/src/components/FormDesign/src/components/VFormDesign/components/ImportJsonModal.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/components/ImportJsonModal.vue
@@ -109,7 +109,7 @@ defineExpose({ showModal })
         取消
       </a-button>
       <Upload
-        class="upload-button"
+        class="mx-2.5"
         :before-upload="beforeUpload"
         :show-upload-list="false"
         accept="application/json"
@@ -124,9 +124,3 @@ defineExpose({ showModal })
     </template>
   </Modal>
 </template>
-
-<style lang="less" scoped>
-.upload-button {
-  margin: 0 10px;
-}
-</style>
diff --git a/src/components/FormDesign/src/components/VFormDesign/components/PreviewCode.vue b/src/components/FormDesign/src/components/VFormDesign/components/PreviewCode.vue
index 171564a3..44db4897 100644
--- a/src/components/FormDesign/src/components/VFormDesign/components/PreviewCode.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/components/PreviewCode.vue
@@ -72,10 +72,10 @@ export default defineComponent({
     <div class="v-json-box">
       <CodeEditor ref="myEditor" :value="editorJson" :mode="MODE.JSON" />
     </div>
-    <div class="copy-btn-box">
+    <div class="pt-2 text-center">
       <a-button
         type="primary"
-        class="copy-btn"
+        class="mr-2"
         data-clipboard-action="copy"
         :data-clipboard-text="editorJson"
         @click="handleCopyJson"
@@ -88,15 +88,3 @@ export default defineComponent({
     </div>
   </div>
 </template>
-
-<style lang="less" scoped>
-// modal复制按钮样式
-.copy-btn-box {
-  padding-top: 8px;
-  text-align: center;
-
-  .copy-btn {
-    margin-right: 8px;
-  }
-}
-</style>
diff --git a/src/components/FormDesign/src/components/VFormDesign/index.vue b/src/components/FormDesign/src/components/VFormDesign/index.vue
index c9eb7bad..8f27b905 100644
--- a/src/components/FormDesign/src/components/VFormDesign/index.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/index.vue
@@ -19,7 +19,6 @@ import PropsPanel from './modules/PropsPanel.vue'
 import ImportJsonModal from './components/ImportJsonModal.vue'
 import CodeModal from './components/CodeModal.vue'
 import { globalConfigState } from './config/formItemPropsConfig'
-import { useDesign } from '@/hooks/web/useDesign'
 import { CollapseContainer } from '@/components/Container/index'
 import 'codemirror/mode/javascript/javascript'
 
@@ -29,7 +28,6 @@ defineProps({
     default: 'v-form-antd表单设计器',
   },
 })
-const { prefixCls } = useDesign('form-design')
 // 子组件实例
 const propsPanel = ref<null | IPropsPanel>(null)
 const jsonModal = ref<null | IToolbarMethods>(null)
@@ -251,7 +249,7 @@ provide<IFormDesignMethods>('formDesignMethods', {
 <template>
   <Layout>
     <LayoutSider
-      :class="`left ${prefixCls}-sider`"
+      class="bg-white dark:bg-black"
       collapsible
       collapsed-width="0"
       width="270"
@@ -302,7 +300,7 @@ provide<IFormDesignMethods>('formDesignMethods', {
       />
     </LayoutContent>
     <LayoutSider
-      :class="`right ${prefixCls}-sider`"
+      class="bg-white dark:bg-black"
       collapsible
       :reverse-arrow="true"
       collapsed-width="0"
@@ -327,19 +325,3 @@ provide<IFormDesignMethods>('formDesignMethods', {
   <VFormPreview ref="eFormPreview" :form-config="formConfig" />
   <VFormPreview2 ref="eFormPreview2" :form-config="formConfig" />
 </template>
-
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-form-design';
-
-[data-theme='dark'] {
-  .@{prefix-cls}-sider {
-    background-color: #1f1f1f;
-  }
-}
-
-[data-theme='light'] {
-  .@{prefix-cls}-sider {
-    background-color: #fff;
-  }
-}
-</style>
diff --git a/src/components/Page/src/PageFooter.vue b/src/components/Page/src/PageFooter.vue
index 31eda4c8..8932ed26 100644
--- a/src/components/Page/src/PageFooter.vue
+++ b/src/components/Page/src/PageFooter.vue
@@ -9,8 +9,8 @@ const { getCalcContentWidth } = useMenuSetting()
 </script>
 
 <template>
-  <div :class="prefixCls" :style="{ width: getCalcContentWidth }">
-    <div :class="`${prefixCls}__left`">
+  <div class="fixed bottom-0 right-0 z-99 w-full flex items-center border-t-1 px-6 text-base/44" :style="{ width: getCalcContentWidth }">
+    <div class="flex-1-1">
       <slot name="left" />
     </div>
     <slot />
@@ -24,24 +24,10 @@ const { getCalcContentWidth } = useMenuSetting()
 @prefix-cls: ~'@{namespace}-page-footer';
 
 .@{prefix-cls} {
-  position: fixed;
-  right: 0;
-  bottom: 0;
-  z-index: @page-footer-z-index;
-  display: flex;
-  align-items: center;
-  width: 100%;
-  padding: 0 24px;
-  line-height: 44px;
-  border-top: 1px solid var(--border-color);
   box-shadow:
     0 -6px 16px -8px rgb(0 0 0 / 8%),
     0 -9px 28px 0 rgb(0 0 0 / 5%),
     0 -12px 48px 16px rgb(0 0 0 / 3%);
   transition: width 0.2s;
-
-  &__left {
-    flex: 1 1;
-  }
 }
 </style>
diff --git a/src/components/Table/src/BasicTable.vue b/src/components/Table/src/BasicTable.vue
index 885bc840..0e79bd6b 100644
--- a/src/components/Table/src/BasicTable.vue
+++ b/src/components/Table/src/BasicTable.vue
@@ -316,7 +316,7 @@ emit('register', tableAction, formActions)
 <style lang="less">
 @prefix-cls: ~'@{namespace}-basic-table';
 
-[data-theme='dark'] {
+html[data-theme='dark'] {
   .ant-table-tbody > tr:hover.ant-table-row-selected > td,
   .ant-table-tbody > tr.ant-table-row-selected td {
     background-color: #262626;
diff --git a/src/design/index.less b/src/design/index.less
index ab4c0cc0..a8b52ea8 100644
--- a/src/design/index.less
+++ b/src/design/index.less
@@ -1,7 +1,6 @@
 @import "transition/index.less";
 @import "var/index.less";
 @import "public.less";
-// @import "ant/index.less";
 @import "./theme.less";
 @import "./entry.css";
 
diff --git a/src/layouts/default/footer/index.vue b/src/layouts/default/footer/index.vue
index 7cf18559..de6cef27 100644
--- a/src/layouts/default/footer/index.vue
+++ b/src/layouts/default/footer/index.vue
@@ -11,7 +11,6 @@ import { openWindow } from '@/utils'
 
 import { useI18n } from '@/hooks/web/useI18n'
 import { useRootSetting } from '@/hooks/setting/useRootSetting'
-import { useDesign } from '@/hooks/web/useDesign'
 
 defineOptions({ name: 'LayoutFooter' })
 
@@ -22,7 +21,6 @@ const Footer = Layout.Footer
 const { t } = useI18n()
 const { getShowFooter } = useRootSetting()
 const { currentRoute } = useRouter()
-const { prefixCls } = useDesign('layout-footer')
 
 const footerRef = ref<ComponentRef>(null)
 const { setFooterHeight } = useLayoutHeight()
@@ -40,43 +38,15 @@ const getShowLayoutFooter = computed(() => {
 </script>
 
 <template>
-  <Footer v-if="getShowLayoutFooter" ref="footerRef" :class="prefixCls">
-    <div :class="`${prefixCls}__links`">
-      <a @click="openWindow(SITE_URL)">外包咨询</a>
+  <Footer v-if="getShowLayoutFooter" ref="footerRef" class="text-center text-[var(--normal-text)]">
+    <div class="mb-2">
+      <a class="text-[var(--normal-text)] hover:text-[var(--hover-text)]" @click="openWindow(SITE_URL)">外包咨询</a>
 
-      <GithubFilled :class="`${prefixCls}__github`" @click="openWindow(GITHUB_URL)" />
+      <GithubFilled class="mx-7.5 hover:text-[var(--hover-text)]" @click="openWindow(GITHUB_URL)" />
 
-      <a @click="openWindow(DOC_URL)">{{ t('layout.footer.onlineDocument') }}</a>
+      <a class="text-[var(--normal-text)] hover:text-[var(--hover-text)]" @click="openWindow(DOC_URL)">{{
+        t('layout.footer.onlineDocument') }}</a>
     </div>
     <div>Copyright &copy;2023 {{ SITE_TITLE }}</div>
   </Footer>
 </template>
-
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-layout-footer';
-
-.@{prefix-cls} {
-  color: var(--normal-text);
-  text-align: center;
-
-  &__links {
-    margin-bottom: 8px;
-
-    a {
-      color: var(--normal-text);
-
-      &:hover {
-        color: var(--hover-text);
-      }
-    }
-  }
-
-  &__github {
-    margin: 0 30px;
-
-    &:hover {
-      color: var(--hover-text);
-    }
-  }
-}
-</style>
diff --git a/src/layouts/default/header/components/notify/NoticeList.vue b/src/layouts/default/header/components/notify/NoticeList.vue
index 0df97f58..5b4884dc 100644
--- a/src/layouts/default/header/components/notify/NoticeList.vue
+++ b/src/layouts/default/header/components/notify/NoticeList.vue
@@ -2,7 +2,6 @@
 import { computed, ref, unref, watch } from 'vue'
 import { Avatar, List, Tag, Typography } from 'ant-design-vue'
 import type { ListItem } from './data'
-import { useDesign } from '@/hooks/web/useDesign'
 import { isNumber } from '@/utils/is'
 
 const props = defineProps({
@@ -31,7 +30,6 @@ const props = defineProps({
   },
 })
 const emit = defineEmits(['update:currentPage'])
-const { prefixCls } = useDesign('header-notify-list')
 const current = ref(props.currentPage || 1)
 const getData = computed(() => {
   const { pageSize, list } = props
@@ -72,12 +70,12 @@ function handleTitleClick(item: ListItem) {
 </script>
 
 <template>
-  <List :class="prefixCls" bordered :pagination="getPagination">
+  <List class="display-none" bordered :pagination="getPagination">
     <template v-for="item in getData" :key="item.id">
-      <List.Item class="list-item">
+      <List.Item class="cursor-pointer overflow-hidden p-1.5 transition-all delay-300">
         <List.Item.Meta>
           <template #title>
-            <div class="title">
+            <div class="mb-2 font-normal">
               <Typography.Paragraph
                 style="width: 100%; margin-bottom: 0 !important"
                 :style="{ cursor: isTitleClickable ? 'pointer' : '' }"
@@ -86,8 +84,8 @@ function handleTitleClick(item: ListItem) {
                 :content="item.title"
                 @click="handleTitleClick(item)"
               />
-              <div v-if="item.extra" class="extra">
-                <Tag class="tag" :color="item.color">
+              <div v-if="item.extra" class="float-right mr-0 font-normal -mt-0.375">
+                <Tag class="mr-0" :color="item.color">
                   {{ item.extra }}
                 </Tag>
               </div>
@@ -95,20 +93,20 @@ function handleTitleClick(item: ListItem) {
           </template>
 
           <template #avatar>
-            <Avatar v-if="item.avatar" class="avatar" :src="item.avatar" />
+            <Avatar v-if="item.avatar" class="mt-1" :src="item.avatar" />
             <span v-else> {{ item.avatar }}</span>
           </template>
 
           <template #description>
             <div>
-              <div v-if="item.description" class="description">
+              <div v-if="item.description" class="text-xs/18">
                 <Typography.Paragraph
                   style="width: 100%; margin-bottom: 0 !important"
                   :ellipsis="$props.descRows && $props.descRows > 0 ? { rows: $props.descRows, tooltip: !!item.description } : false"
                   :content="item.description"
                 />
               </div>
-              <div class="datetime">
+              <div class="mt-1 text-xs/18">
                 {{ item.datetime }}
               </div>
             </div>
@@ -118,55 +116,3 @@ function handleTitleClick(item: ListItem) {
     </template>
   </List>
 </template>
-
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-header-notify-list';
-
-.@{prefix-cls} {
-  &::-webkit-scrollbar {
-    display: none;
-  }
-
-  ::v-deep(.ant-pagination-disabled) {
-    display: inline-block !important;
-  }
-
-  &-item {
-    padding: 6px;
-    overflow: hidden;
-    cursor: pointer;
-    transition: all 0.3s;
-
-    .title {
-      margin-bottom: 8px;
-      font-weight: normal;
-
-      .extra {
-        float: right;
-        margin-top: -1.5px;
-        margin-right: 0;
-        font-weight: normal;
-
-        .tag {
-          margin-right: 0;
-        }
-      }
-
-      .avatar {
-        margin-top: 4px;
-      }
-
-      .description {
-        font-size: 12px;
-        line-height: 18px;
-      }
-
-      .datetime {
-        margin-top: 4px;
-        font-size: 12px;
-        line-height: 18px;
-      }
-    }
-  }
-}
-</style>
diff --git a/src/layouts/default/header/components/notify/index.vue b/src/layouts/default/header/components/notify/index.vue
index 9201c38c..65b19cb3 100644
--- a/src/layouts/default/header/components/notify/index.vue
+++ b/src/layouts/default/header/components/notify/index.vue
@@ -33,5 +33,3 @@ onMounted(async () => {
     </Tooltip>
   </div>
 </template>
-
-<style lang="less"></style>
diff --git a/src/layouts/default/index.vue b/src/layouts/default/index.vue
index 306a26f9..9abaff54 100644
--- a/src/layouts/default/index.vue
+++ b/src/layouts/default/index.vue
@@ -9,7 +9,6 @@ import LayoutSideBar from './sider/index.vue'
 import { useHeaderSetting } from '@/hooks/setting/useHeaderSetting'
 import { useMenuSetting } from '@/hooks/setting/useMenuSetting'
 import { useAppInject } from '@/hooks/web/useAppInject'
-import { useDesign } from '@/hooks/web/useDesign'
 import { useLockPage } from '@/hooks/web/useLockPage'
 import { createAsyncComponent } from '@/utils/factory/createAsyncComponent'
 
@@ -18,7 +17,6 @@ defineOptions({ name: 'DefaultLayout' })
 const LayoutFeatures = createAsyncComponent(() => import('@/layouts/default/feature/index.vue'))
 const LayoutFooter = createAsyncComponent(() => import('@/layouts/default/footer/index.vue'))
 
-const { prefixCls } = useDesign('default-layout')
 const { getIsMobile } = useAppInject()
 const { getShowFullHeaderRef } = useHeaderSetting()
 const { getShowSidebar, getIsMixSidebar, getShowMenu } = useMenuSetting()
@@ -36,12 +34,12 @@ const layoutClass = computed(() => {
 </script>
 
 <template>
-  <Layout :class="prefixCls" v-bind="lockEvents">
+  <Layout class="min-h-full w-full flex flex-col" v-bind="lockEvents">
     <LayoutFeatures />
     <LayoutHeader v-if="getShowFullHeaderRef" fixed />
     <Layout :class="[layoutClass]">
       <LayoutSideBar v-if="getShowSidebar || getIsMobile" />
-      <Layout :class="`${prefixCls}-main`">
+      <Layout class="ml-0.25 w-full">
         <LayoutMultipleHeader />
         <LayoutContent />
         <LayoutFooter />
@@ -49,19 +47,3 @@ const layoutClass = computed(() => {
     </Layout>
   </Layout>
 </template>
-
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-default-layout';
-
-  .@{prefix-cls} {
-    display: flex;
-    flex-direction: column;
-    width: 100%;
-    min-height: 100%;
-
-    &-main {
-      width: 100%;
-      margin-left: 1px;
-    }
-  }
-</style>
diff --git a/src/layouts/default/setting/components/InputNumberItem.vue b/src/layouts/default/setting/components/InputNumberItem.vue
index 96306e2b..07bf4540 100644
--- a/src/layouts/default/setting/components/InputNumberItem.vue
+++ b/src/layouts/default/setting/components/InputNumberItem.vue
@@ -2,7 +2,6 @@
 import { InputNumber } from 'ant-design-vue'
 import { baseHandler } from '../handler'
 import type { HandlerEnum } from '../enum'
-import { useDesign } from '@/hooks/web/useDesign'
 
 defineOptions({ name: 'InputNumberItem' })
 
@@ -14,7 +13,6 @@ const props = defineProps({
     type: String,
   },
 })
-const { prefixCls } = useDesign('setting-input-number-item')
 
 function handleChange(e) {
   props.event && baseHandler(props.event, e)
@@ -22,22 +20,8 @@ function handleChange(e) {
 </script>
 
 <template>
-  <div :class="prefixCls">
+  <div class="my-4 flex justify-between">
     <span> {{ title }}</span>
-    <InputNumber v-bind="$attrs" :class="`${prefixCls}-input-number`" @change="handleChange" />
+    <InputNumber v-bind="$attrs" class="max-w-32 w-30" @change="handleChange" />
   </div>
 </template>
-
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-setting-input-number-item';
-
-.@{prefix-cls} {
-  display: flex;
-  justify-content: space-between;
-  margin: 16px 0;
-
-  &-input-number {
-    width: 126px !important;
-  }
-}
-</style>
diff --git a/src/layouts/default/setting/components/SelectItem.vue b/src/layouts/default/setting/components/SelectItem.vue
index a4f8cdb6..dec8ec9c 100644
--- a/src/layouts/default/setting/components/SelectItem.vue
+++ b/src/layouts/default/setting/components/SelectItem.vue
@@ -4,7 +4,6 @@ import { computed } from 'vue'
 import { Select } from 'ant-design-vue'
 import { baseHandler } from '../handler'
 import type { HandlerEnum } from '../enum'
-import { useDesign } from '@/hooks/web/useDesign'
 
 defineOptions({ name: 'SelectItem' })
 
@@ -29,33 +28,19 @@ const props = defineProps({
     default: () => [],
   },
 })
-const { prefixCls } = useDesign('setting-select-item')
 const getBindValue = computed(() => {
   return props.def ? { value: props.def, defaultValue: props.initValue || props.def } : {}
 })
 
-function handleChange(e: ChangeEvent) {
+function handleChange(e) {
   props.event && baseHandler(props.event, e)
 }
 </script>
 
 <template>
-  <div :class="prefixCls">
+  <div class="my-4 flex justify-between">
     <span> {{ title }}</span>
-    <Select v-bind="getBindValue" :class="`${prefixCls}-select`" :disabled="disabled" :options="options" @change="handleChange as any" />
+    <Select v-bind="getBindValue" class="max-w-32 w-30" :disabled="disabled" :options="options" @change="handleChange" />
   </div>
 </template>
 
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-setting-select-item';
-
-.@{prefix-cls} {
-  display: flex;
-  justify-content: space-between;
-  margin: 16px 0;
-
-  &-select {
-    width: 126px;
-  }
-}
-</style>
diff --git a/src/layouts/default/setting/components/SettingFooter.vue b/src/layouts/default/setting/components/SettingFooter.vue
index ce102432..80910a43 100644
--- a/src/layouts/default/setting/components/SettingFooter.vue
+++ b/src/layouts/default/setting/components/SettingFooter.vue
@@ -8,7 +8,6 @@ import { usePermissionStore } from '@/store/modules/permission'
 import { useMultipleTabStore } from '@/store/modules/multipleTab'
 import { useUserStore } from '@/store/modules/user'
 
-import { useDesign } from '@/hooks/web/useDesign'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useMessage } from '@/hooks/web/useMessage'
 import { useCopyToClipboard } from '@/hooks/web/useCopyToClipboard'
@@ -22,7 +21,6 @@ import { updateSidebarBgColor } from '@/logics/theme/updateBackground'
 defineOptions({ name: 'SettingFooter' })
 
 const permissionStore = usePermissionStore()
-const { prefixCls } = useDesign('setting-footer')
 const { t } = useI18n()
 const { createSuccessModal, createMessage } = useMessage()
 const tabStore = useMultipleTabStore()
@@ -63,7 +61,7 @@ function handleClearAndRedo() {
 </script>
 
 <template>
-  <div :class="prefixCls">
+  <div class="flex flex-col items-center">
     <a-button type="primary" block @click="handleCopy">
       <CopyOutlined class="mr-2" />
       {{ t('layout.setting.copyBtn') }}
@@ -80,13 +78,3 @@ function handleClearAndRedo() {
     </a-button>
   </div>
 </template>
-
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-setting-footer';
-
-.@{prefix-cls} {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-}
-</style>
diff --git a/src/layouts/default/setting/components/SwitchItem.vue b/src/layouts/default/setting/components/SwitchItem.vue
index 5eaab82f..46415af0 100644
--- a/src/layouts/default/setting/components/SwitchItem.vue
+++ b/src/layouts/default/setting/components/SwitchItem.vue
@@ -4,7 +4,6 @@ import { computed } from 'vue'
 import { Switch } from 'ant-design-vue'
 import { baseHandler } from '../handler'
 import type { HandlerEnum } from '../enum'
-import { useDesign } from '@/hooks/web/useDesign'
 import { useI18n } from '@/hooks/web/useI18n'
 
 defineOptions({ name: 'SwitchItem' })
@@ -23,7 +22,6 @@ const props = defineProps({
     type: Boolean,
   },
 })
-const { prefixCls } = useDesign('setting-switch-item')
 const { t } = useI18n()
 
 const getBindValue = computed(() => {
@@ -35,7 +33,7 @@ function handleChange(e) {
 </script>
 
 <template>
-  <div :class="prefixCls">
+  <div class="my-4 flex justify-between">
     <span> {{ title }}</span>
     <Switch
       v-bind="getBindValue"
@@ -46,13 +44,3 @@ function handleChange(e) {
     />
   </div>
 </template>
-
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-setting-switch-item';
-
-.@{prefix-cls} {
-  display: flex;
-  justify-content: space-between;
-  margin: 16px 0;
-}
-</style>
diff --git a/src/views/base/login/Login.vue b/src/views/base/login/Login.vue
index fc24925a..6fa3b845 100644
--- a/src/views/base/login/Login.vue
+++ b/src/views/base/login/Login.vue
@@ -26,7 +26,7 @@ const title = computed(() => globSetting?.title ?? '')
 </script>
 
 <template>
-  <div :class="prefixCls" class="relative h-full w-full px-4">
+  <div :class="prefixCls" class="relative h-full min-h-full w-full overflow-hidden px-4">
     <div class="absolute right-4 top-4 flex items-center">
       <AppDarkModeToggle v-if="!sessionTimeout" class="enter-x mr-2" />
       <AppLocalePicker v-if="!sessionTimeout && showLocale" class="enter-x xl:text-gray-600" :show-text="false" />
@@ -108,9 +108,6 @@ html[data-theme='dark'] {
 }
 
 .@{prefix-cls} {
-  min-height: 100%;
-  overflow: hidden;
-
   @media (max-width: @screen-xl) {
     background-color: #293146;
 
diff --git a/src/views/base/login/SessionTimeoutLogin.vue b/src/views/base/login/SessionTimeoutLogin.vue
index 6d60cedf..c9b33bf5 100644
--- a/src/views/base/login/SessionTimeoutLogin.vue
+++ b/src/views/base/login/SessionTimeoutLogin.vue
@@ -1,13 +1,11 @@
 <script lang="ts" setup>
 import { onBeforeUnmount, onMounted, ref } from 'vue'
 import Login from './Login.vue'
-import { useDesign } from '@/hooks/web/useDesign'
 import { useUserStore } from '@/store/modules/user'
 import { usePermissionStore } from '@/store/modules/permission'
 import { useAppStore } from '@/store/modules/app'
 import { PermissionModeEnum } from '@/enums/appEnum'
 
-const { prefixCls } = useDesign('st-login')
 const userStore = useUserStore()
 const permissionStore = usePermissionStore()
 const appStore = useAppStore()
@@ -36,20 +34,8 @@ onBeforeUnmount(() => {
 
 <template>
   <transition>
-    <div :class="prefixCls">
+    <div class="fixed z-9999999 h-full w-full bg-[var(--component-background)]">
       <Login session-timeout />
     </div>
   </transition>
 </template>
-
-<style lang="less" scoped>
-@prefix-cls: ~'@{namespace}-st-login';
-
-.@{prefix-cls} {
-  position: fixed;
-  z-index: 9999999;
-  width: 100%;
-  height: 100%;
-  background: var(--component-background);
-}
-</style>
diff --git a/src/views/base/profile/AccountBind.vue b/src/views/base/profile/AccountBind.vue
index 2985fcfc..2c59d4d3 100644
--- a/src/views/base/profile/AccountBind.vue
+++ b/src/views/base/profile/AccountBind.vue
@@ -32,11 +32,11 @@ onMounted(async () => {
         <List.Item>
           <List.Item.Meta>
             <template #avatar>
-              <Icon v-if="item.avatar" class="avatar" :icon="item.avatar" :color="item.color" />
+              <Icon v-if="item.avatar" class="text-4xl" :icon="item.avatar" :color="item.color" />
             </template>
             <template #title>
               {{ item.title }}
-              <a-button v-if="item.extra" type="link" size="small" class="extra">
+              <a-button v-if="item.extra" type="link" size="small" class="float-right mr-7.5 mt-2.5 cursor-pointer">
                 {{ item.extra }}
               </a-button>
             </template>
@@ -49,16 +49,3 @@ onMounted(async () => {
     </List>
   </CollapseContainer>
 </template>
-
-<style lang="less" scoped>
-.avatar {
-  font-size: 40px !important;
-}
-
-.extra {
-  float: right;
-  margin-top: 10px;
-  margin-right: 30px;
-  cursor: pointer;
-}
-</style>
diff --git a/src/views/base/profile/BaseSetting.vue b/src/views/base/profile/BaseSetting.vue
index fc852b32..dee9d151 100644
--- a/src/views/base/profile/BaseSetting.vue
+++ b/src/views/base/profile/BaseSetting.vue
@@ -54,7 +54,7 @@ async function handleSubmit() {
         <BasicForm @register="register" />
       </Col>
       <Col :span="10">
-        <div class="change-avatar">
+        <div>
           <div class="mb-2">
             头像
           </div>
@@ -63,6 +63,7 @@ async function handleSubmit() {
             btn-text="更换头像"
             :btn-props="{ preIcon: 'ant-design:cloud-upload-outlined' }"
             width="150"
+            class="mb-4 block rounded-full"
             @change="updateAvatar"
           />
         </div>
@@ -73,13 +74,3 @@ async function handleSubmit() {
     </Button>
   </CollapseContainer>
 </template>
-
-<style lang="less" scoped>
-.change-avatar {
-  img {
-    display: block;
-    margin-bottom: 15px;
-    border-radius: 50%;
-  }
-}
-</style>
diff --git a/src/views/base/profile/MsgNotify.vue b/src/views/base/profile/MsgNotify.vue
index 7890a21e..d3d6cee6 100644
--- a/src/views/base/profile/MsgNotify.vue
+++ b/src/views/base/profile/MsgNotify.vue
@@ -15,7 +15,7 @@ const ListItemMeta = List.Item.Meta
           <ListItemMeta>
             <template #title>
               {{ item.title }}
-              <Switch class="extra" checked-children="开" un-checked-children="关" default-checked />
+              <Switch class="float-right mr-7.5 mt-0" checked-children="开" un-checked-children="关" default-checked />
             </template>
             <template #description>
               <div>{{ item.description }}</div>
@@ -26,11 +26,3 @@ const ListItemMeta = List.Item.Meta
     </List>
   </CollapseContainer>
 </template>
-
-<style lang="less" scoped>
-.extra {
-  float: right;
-  margin-top: 10px;
-  margin-right: 30px;
-}
-</style>
diff --git a/src/views/base/profile/SecureSetting.vue b/src/views/base/profile/SecureSetting.vue
index 3805eb40..b3dfc7fb 100644
--- a/src/views/base/profile/SecureSetting.vue
+++ b/src/views/base/profile/SecureSetting.vue
@@ -29,7 +29,7 @@ function handleSuccess() {
           <ListItemMeta>
             <template #title>
               {{ item.title }}
-              <div v-if="item.extra" class="extra">
+              <div v-if="item.extra" class="float-right mr-7.5 mt-2.5 cursor-pointer font-normal text-blue-500">
                 <a-button type="link" @click="handleEdit(item.title)">
                   {{ item.extra }}
                 </a-button>
@@ -45,14 +45,3 @@ function handleSuccess() {
   </CollapseContainer>
   <PasswordModal @register="registerModal" @success="handleSuccess" />
 </template>
-
-<style lang="less" scoped>
-.extra {
-  float: right;
-  margin-top: 10px;
-  margin-right: 30px;
-  font-weight: normal;
-  color: #1890ff;
-  cursor: pointer;
-}
-</style>
diff --git a/src/views/base/profile/index.vue b/src/views/base/profile/index.vue
index 5dc3ed17..a48e4e38 100644
--- a/src/views/base/profile/index.vue
+++ b/src/views/base/profile/index.vue
@@ -15,7 +15,7 @@ const tabBarStyle = { width: '220px' }
 
 <template>
   <ScrollContainer>
-    <div ref="wrapperRef" class="account-setting">
+    <div ref="wrapperRef" class="m-3 rounded-1.5 bg-[var(--component-background)]">
       <Tabs tab-position="left" :tab-bar-style="tabBarStyle">
         <template v-for="item in settingList" :key="item.key">
           <TabPane :tab="item.name">
@@ -29,19 +29,3 @@ const tabBarStyle = { width: '220px' }
     </div>
   </ScrollContainer>
 </template>
-
-<style lang="less">
-.account-setting {
-  margin: 12px;
-  background-color: var(--component-background);
-  border-radius: 6px;
-
-  .base-title {
-    padding-left: 0;
-  }
-
-  // .ant-tabs-tab-active {
-  //   background-color: @item-active-bg;
-  // }
-}
-</style>
diff --git a/src/views/bpm/processInstance/create/index.vue b/src/views/bpm/processInstance/create/index.vue
index d8b1fae6..69e51c47 100644
--- a/src/views/bpm/processInstance/create/index.vue
+++ b/src/views/bpm/processInstance/create/index.vue
@@ -78,7 +78,7 @@ async function submitForm(formData) {
 
 <template>
   <PageWrapper>
-    <div class="step-form-form">
+    <div class="mx-auto my-0 mt-2.5 w-200">
       <Steps :current="current">
         <Steps.Step title="选择流程" />
         <Steps.Step title="流程提交" />
@@ -113,11 +113,3 @@ async function submitForm(formData) {
     </div>
   </PageWrapper>
 </template>
-
-<style lang="less" scoped>
-.step-form-form {
-  width: 750px;
-  margin: 0 auto;
-  margin-top: 10px;
-}
-</style>
diff --git a/src/views/infra/codegen/EditTable.vue b/src/views/infra/codegen/EditTable.vue
index d8f4d9ce..d3de37d8 100644
--- a/src/views/infra/codegen/EditTable.vue
+++ b/src/views/infra/codegen/EditTable.vue
@@ -73,7 +73,7 @@ onMounted(async () => {
 
 <template>
   <PageWrapper>
-    <div class="step-form-form">
+    <div class="mx-auto my-0 mt-2.5 w-200">
       <Steps :current="current">
         <Step title="生成信息" />
         <Step title="字段信息" />
@@ -94,11 +94,3 @@ onMounted(async () => {
     </div>
   </PageWrapper>
 </template>
-
-<style lang="less" scoped>
-.step-form-form {
-  width: 750px;
-  margin: 0 auto;
-  margin-top: 10px;
-}
-</style>
diff --git a/src/views/infra/codegen/components/BasicInfoForm.vue b/src/views/infra/codegen/components/BasicInfoForm.vue
index d6a38631..98f12d3d 100644
--- a/src/views/infra/codegen/components/BasicInfoForm.vue
+++ b/src/views/infra/codegen/components/BasicInfoForm.vue
@@ -51,46 +51,20 @@ watch(
 </script>
 
 <template>
-  <div class="step1">
-    <div class="step1-form">
+  <div>
+    <div class="mx-auto my-0 w-80%">
       <BasicForm @register="register" />
     </div>
     <Divider />
-    <h3>说明</h3>
-    <h4>基本信息</h4>
+    <h3 class="mb-3 text-base">
+      说明
+    </h3>
+    <h4 class="mb-1 text-sm">
+      基本信息
+    </h4>
     <p> 配置生成的基本信息 </p>
 
     <h4>生成信息</h4>
     <p> 配置生成生成的详细信息。 </p>
   </div>
 </template>
-
-<style lang="less" scoped>
-.step1 {
-  &-form {
-    width: 80%;
-    margin: 0 auto;
-  }
-
-  h3 {
-    margin: 0 0 12px;
-    font-size: 16px;
-    line-height: 32px;
-  }
-
-  h4 {
-    margin: 0 0 4px;
-    font-size: 14px;
-    line-height: 22px;
-  }
-
-}
-
-.pay-select {
-  width: 20%;
-}
-
-.pay-input {
-  width: 70%;
-}
-</style>
diff --git a/src/views/infra/codegen/components/CloumInfoForm.vue b/src/views/infra/codegen/components/CloumInfoForm.vue
index 59c11ab1..0062d304 100644
--- a/src/views/infra/codegen/components/CloumInfoForm.vue
+++ b/src/views/infra/codegen/components/CloumInfoForm.vue
@@ -39,11 +39,11 @@ function handleEdit(record: EditRecordRow) {
 
 <template>
   <div class="step2">
-    <div class="step2-table">
+    <div class="mx-auto my-0 w-full">
       <BasicTable :data-source="columnsInfo" @register="registerTable" @row-click="handleEdit" />
     </div>
     <Divider />
-    <div class="step2-button">
+    <div class="flex justify-center">
       <a-button @click="customResetFunc">
         上一步
       </a-button>
@@ -51,35 +51,12 @@ function handleEdit(record: EditRecordRow) {
         提交
       </a-button>
     </div>
-    <h3>说明</h3>
-    <h4>配置字段</h4>
+    <h3 class="mb-3 text-base">
+      说明
+    </h3>
+    <h4 class="mb-1 text-sm">
+      配置字段
+    </h4>
     <p> 配置表的字段类型,增删改查,字典等 </p>
   </div>
 </template>
-
-<style lang="less" scoped>
-.step2 {
-  &-table {
-    width: 100%;
-    margin: 0 auto;
-  }
-
-  &-button {
-    display: flex;
-    justify-content: center;
-  }
-
-  h3 {
-    margin: 0 0 12px;
-    font-size: 16px;
-    line-height: 32px;
-  }
-
-  h4 {
-    margin: 0 0 4px;
-    font-size: 14px;
-    line-height: 22px;
-  }
-
-}
-</style>
diff --git a/src/views/infra/codegen/components/FinishForm.vue b/src/views/infra/codegen/components/FinishForm.vue
index 39cad7f0..048eb471 100644
--- a/src/views/infra/codegen/components/FinishForm.vue
+++ b/src/views/infra/codegen/components/FinishForm.vue
@@ -36,7 +36,7 @@ function handleGoList() {
 </script>
 
 <template>
-  <div class="result-success m-5">
+  <div class="m-5 bg-white px-8 py-12 dark:bg-dark">
     <Result status="success" title="代码生成成功" sub-title="可点击下方按钮预览、下载,或返回列表页。">
       <template #extra>
         <a-button key="console" type="primary" @click="handleGoList">
@@ -53,15 +53,3 @@ function handleGoList() {
     <PreviewModal @register="registerPreviewModal" />
   </div>
 </template>
-
-<style lang="less" scoped>
-.result-success {
-  padding: 48px 32px;
-  background-color: var(--component-background);
-
-  &__content {
-    padding: 24px 40px;
-    background-color: @background-color-light;
-  }
-}
-</style>

From 0df27a39bc54e3845326f4fafdd495a428d72a70 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Thu, 21 Sep 2023 15:32:54 +0800
Subject: [PATCH 02/18] docs: doc

---
 .vscode/settings.json | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.vscode/settings.json b/.vscode/settings.json
index 81f0295e..c7608880 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -126,6 +126,7 @@
   "i18n-ally.enabledFrameworks": ["vue", "react"],
   "cSpell.words": [
     "antd",
+    "antdv",
     "antfu",
     "antv",
     "brotli",

From b808fceb5f7d55ba85579470ed3c813cef48c70e Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Fri, 22 Sep 2023 18:07:20 +0800
Subject: [PATCH 03/18] refactor: use setup

---
 .../VFormDesign/components/ComponentProps.vue | 287 +++++-------
 .../components/FormItemColumnProps.vue        |  48 +-
 .../VFormDesign/components/FormItemProps.vue  |  76 +---
 .../VFormDesign/components/FormNode.vue       |  39 +-
 .../VFormDesign/components/LayoutItem.vue     |  62 +--
 .../VFormDesign/components/PreviewCode.vue    |  80 ++--
 .../VFormDesign/modules/CollapseItem.vue      |  48 +-
 .../modules/FormComponentPanel.vue            |  71 ++-
 .../VFormDesign/modules/PropsPanel.vue        |  28 +-
 .../VFormDesign/modules/Toolbar.vue           | 105 ++---
 .../header/components/lock/LockModal.vue      |  49 +--
 src/layouts/default/sider/MixSider.vue        | 410 ++++++++----------
 12 files changed, 511 insertions(+), 792 deletions(-)

diff --git a/src/components/FormDesign/src/components/VFormDesign/components/ComponentProps.vue b/src/components/FormDesign/src/components/VFormDesign/components/ComponentProps.vue
index c4e537c5..906b2b58 100644
--- a/src/components/FormDesign/src/components/VFormDesign/components/ComponentProps.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/components/ComponentProps.vue
@@ -1,22 +1,9 @@
 <!--
  * @Description: 组件属性控件
 -->
-<script lang="ts">
-import {
-  Checkbox,
-  Col,
-  Empty,
-  Form,
-  FormItem,
-  Input,
-  InputNumber,
-  RadioGroup,
-  Row,
-  Select,
-  Switch,
-} from 'ant-design-vue'
-import RadioButtonGroup from '/@/components/Form/src/components/RadioButtonGroup.vue'
-import { computed, defineComponent, ref, watch } from 'vue'
+<script lang="ts" setup>
+import { Checkbox, Col, Empty, Form, FormItem, Select } from 'ant-design-vue'
+import { computed, ref, watch } from 'vue'
 import { useFormDesignState } from '../../../hooks/useFormDesignState'
 import {
   baseComponentAttrs,
@@ -28,145 +15,116 @@ import { formItemsForEach, remove } from '../../../utils'
 import type { IBaseFormAttrs } from '../config/formItemPropsConfig'
 import FormOptions from './FormOptions.vue'
 
-export default defineComponent({
-  name: 'ComponentProps',
-  components: {
-    FormOptions,
-    Empty,
-    Input,
-    Form,
-    FormItem,
-    Switch,
-    Checkbox,
-    Select,
-    InputNumber,
-    RadioGroup,
-    RadioButtonGroup,
-    Col,
-    Row,
+const { formConfig } = useFormDesignState()
+// 让compuated属性自动更新
+const allOptions = ref([] as Omit<IBaseFormAttrs, 'tag'>[])
+function showControlAttrs(includes: string[] | undefined) {
+  if (!includes)
+    return true
+  return includes.includes(formConfig.value.currentItem!.component)
+}
+
+if (formConfig.value.currentItem) {
+  formConfig.value.currentItem.componentProps
+    = formConfig.value.currentItem.componentProps || {}
+}
+
+watch(
+  () => formConfig.value.currentItem?.field,
+  (_newValue, oldValue) => {
+    formConfig.value.schemas
+      && formItemsForEach(formConfig.value.schemas, (item) => {
+        if (item.link) {
+          const index = item.link.findIndex(linkItem => linkItem === oldValue)
+          index !== -1 && remove(item.link, index)
+        }
+      })
   },
-  setup() {
-    // 让compuated属性自动更新
-
-    const allOptions = ref([] as Omit<IBaseFormAttrs, 'tag'>[])
-    const showControlAttrs = (includes: string[] | undefined) => {
-      if (!includes)
-        return true
-      return includes.includes(formConfig.value.currentItem!.component)
-    }
-
-    const { formConfig } = useFormDesignState()
-
-    if (formConfig.value.currentItem) {
-      formConfig.value.currentItem.componentProps
-          = formConfig.value.currentItem.componentProps || {}
-    }
-
-    watch(
-      () => formConfig.value.currentItem?.field,
-      (_newValue, oldValue) => {
-        formConfig.value.schemas
-            && formItemsForEach(formConfig.value.schemas, (item) => {
-              if (item.link) {
-                const index = item.link.findIndex(linkItem => linkItem === oldValue)
-                index !== -1 && remove(item.link, index)
-              }
-            })
-      },
-    )
+)
+
+watch(
+  () => formConfig.value.currentItem && formConfig.value.currentItem.component,
+  () => {
+    allOptions.value = []
+    baseComponentControlAttrs.forEach((item) => {
+      item.category = 'control'
+      if (!item.includes) {
+        // 如果属性没有include,所有的控件都适用
+
+        allOptions.value.push(item)
+      }
+      else if (item.includes.includes(formConfig.value.currentItem!.component)) {
+        // 如果有include,检查是否包含了当前控件类型
+        allOptions.value.push(item)
+      }
+    })
 
-    watch(
-      () => formConfig.value.currentItem && formConfig.value.currentItem.component,
-      () => {
-        allOptions.value = []
-        baseComponentControlAttrs.forEach((item) => {
-          item.category = 'control'
-          if (!item.includes) {
-            // 如果属性没有include,所有的控件都适用
+    baseComponentCommonAttrs.forEach((item) => {
+      item.category = 'input'
+      if (item.includes) {
+        if (item.includes.includes(formConfig.value.currentItem!.component))
+          allOptions.value.push(item)
+      }
+      else if (item.exclude) {
+        if (!item.exclude.includes(formConfig.value.currentItem!.component))
+          allOptions.value.push(item)
+      }
+      else {
+        allOptions.value.push(item)
+      }
+    })
 
+    baseComponentAttrs[formConfig.value.currentItem!.component]
+      && baseComponentAttrs[formConfig.value.currentItem!.component].forEach(async (item) => {
+        if (item.component) {
+          if (['Switch', 'Checkbox', 'Radio'].includes(item.component)) {
+            item.category = 'control'
             allOptions.value.push(item)
           }
-          else if (item.includes.includes(formConfig.value.currentItem!.component)) {
-            // 如果有include,检查是否包含了当前控件类型
-            allOptions.value.push(item)
-          }
-        })
-
-        baseComponentCommonAttrs.forEach((item) => {
-          item.category = 'input'
-          if (item.includes) {
-            if (item.includes.includes(formConfig.value.currentItem!.component))
-              allOptions.value.push(item)
-          }
-          else if (item.exclude) {
-            if (!item.exclude.includes(formConfig.value.currentItem!.component))
-              allOptions.value.push(item)
-          }
           else {
+            item.category = 'input'
             allOptions.value.push(item)
           }
-        })
-
-        baseComponentAttrs[formConfig.value.currentItem!.component]
-            && baseComponentAttrs[formConfig.value.currentItem!.component].forEach(async (item) => {
-              if (item.component) {
-                if (['Switch', 'Checkbox', 'Radio'].includes(item.component)) {
-                  item.category = 'control'
-                  allOptions.value.push(item)
-                }
-                else {
-                  item.category = 'input'
-                  allOptions.value.push(item)
-                }
-              }
-            })
-      },
-      {
-        immediate: true,
-      },
-    )
-    // 控制性的选项
-    const controlOptions = computed(() => {
-      return allOptions.value.filter((item) => {
-        return item.category === 'control'
+        }
       })
-    })
+  },
+  {
+    immediate: true,
+  },
+)
+// 控制性的选项
+const controlOptions = computed(() => {
+  return allOptions.value.filter((item) => {
+    return item.category === 'control'
+  })
+})
 
-    // 非控制性选择
-    const inputOptions = computed(() => {
-      return allOptions.value.filter((item) => {
-        return item.category === 'input'
-      })
-    })
+// 非控制性选择
+const inputOptions = computed(() => {
+  return allOptions.value.filter((item) => {
+    return item.category === 'input'
+  })
+})
 
-    watch(
-      () => formConfig.value.currentItem!.componentProps,
-      () => {
-        const func = componentPropsFuncs[formConfig.value.currentItem!.component]
-        if (func)
-          func(formConfig.value.currentItem!.componentProps, allOptions.value)
-      },
-      {
-        immediate: true,
-        deep: true,
-      },
-    )
-    const linkOptions = computed(() => {
-      return (
-        formConfig.value.schemas
-          && formConfig.value.schemas
-            .filter(item => item.key !== formConfig.value.currentItem!.key)
-            .map(({ label, field }) => ({ label: `${label}/${field}`, value: field }))
-      )
-    })
-    return {
-      formConfig,
-      showControlAttrs,
-      linkOptions,
-      controlOptions,
-      inputOptions,
-    }
+watch(
+  () => formConfig.value.currentItem!.componentProps,
+  () => {
+    const func = componentPropsFuncs[formConfig.value.currentItem!.component]
+    if (func)
+      func(formConfig.value.currentItem!.componentProps, allOptions.value)
+  },
+  {
+    immediate: true,
+    deep: true,
   },
+)
+const linkOptions = computed(() => {
+  return (
+    formConfig.value.schemas
+    && formConfig.value.schemas
+      .filter(item => item.key !== formConfig.value.currentItem!.key)
+      .map(({ label, field }) => ({ label: `${label}/${field}`, value: field }))
+  )
 })
 </script>
 
@@ -184,27 +142,20 @@ export default defineComponent({
 
             <div v-if="item.children">
               <component
-                v-bind="child.componentProps"
-                :is="child.component"
-                v-for="(child, index) of item.children"
-                :key="index"
-                v-model:value="formConfig.currentItem.componentProps[item.name][index]"
+                v-bind="child.componentProps" :is="child.component" v-for="(child, index) of item.children"
+                :key="index" v-model:value="formConfig.currentItem.componentProps[item.name][index]"
               />
             </div>
             <!--     如果不是数组,则正常处理属性值       -->
             <component
-              v-bind="item.componentProps"
-              :is="item.component"
-              v-else
-              v-model:value="formConfig.currentItem.componentProps[item.name]"
-              class="component-prop"
+              v-bind="item.componentProps" :is="item.component" v-else
+              v-model:value="formConfig.currentItem.componentProps[item.name]" class="component-prop"
             />
           </FormItem>
           <FormItem label="控制属性">
             <Col v-for="item in controlOptions" :key="item.name">
               <Checkbox
-                v-if="showControlAttrs(item.includes)"
-                v-bind="item.componentProps"
+                v-if="showControlAttrs(item.includes)" v-bind="item.componentProps"
                 v-model:checked="formConfig.currentItem.componentProps[item.name]"
               >
                 {{ item.label }}
@@ -213,25 +164,19 @@ export default defineComponent({
           </FormItem>
         </div>
         <FormItem label="关联字段">
-          <Select
-            v-model:value="formConfig.currentItem.link"
-            mode="multiple"
-            :options="linkOptions"
-          />
+          <Select v-model:value="formConfig.currentItem.link" mode="multiple" :options="linkOptions" />
         </FormItem>
 
         <FormItem
-          v-if="
-            [
-              'Select',
-              'CheckboxGroup',
-              'RadioGroup',
-              'TreeSelect',
-              'Cascader',
-              'AutoComplete',
-            ].includes(formConfig.currentItem.component)
-          "
-          label="选项"
+          v-if="[
+            'Select',
+            'CheckboxGroup',
+            'RadioGroup',
+            'TreeSelect',
+            'Cascader',
+            'AutoComplete',
+          ].includes(formConfig.currentItem.component)
+          " label="选项"
         >
           <FormOptions />
         </FormItem>
diff --git a/src/components/FormDesign/src/components/VFormDesign/components/FormItemColumnProps.vue b/src/components/FormDesign/src/components/VFormDesign/components/FormItemColumnProps.vue
index 17c96b68..fc6bcdac 100644
--- a/src/components/FormDesign/src/components/VFormDesign/components/FormItemColumnProps.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/components/FormItemColumnProps.vue
@@ -1,45 +1,20 @@
 <!--
  * @Description: 表单项属性
 -->
-<script lang="ts">
-import { defineComponent } from 'vue'
-import { Checkbox, Empty, Form, FormItem, Input, Select, Slider, Switch } from 'ant-design-vue'
+<script lang="ts" setup>
+import { Empty, Form, FormItem } from 'ant-design-vue'
 import { isArray } from 'lodash-es'
 import { baseItemColumnProps } from '../config/formItemPropsConfig'
 
 import { useFormDesignState } from '../../../hooks/useFormDesignState'
-import RuleProps from './RuleProps.vue'
 
-export default defineComponent({
-  name: 'FormItemProps',
-  components: {
-    RuleProps,
-    Empty,
-    Input,
-    Form,
-    FormItem,
-    Switch,
-    Checkbox,
-    Select,
-    Slider,
-  },
-  // props: {} as PropsOptions,
+const { formConfig } = useFormDesignState()
+function showProps(exclude: string[] | undefined) {
+  if (!exclude)
+    return true
 
-  setup() {
-    const { formConfig } = useFormDesignState()
-    const showProps = (exclude: string[] | undefined) => {
-      if (!exclude)
-        return true
-
-      return isArray(exclude) ? !exclude.includes(formConfig.value.currentItem!.component) : true
-    }
-    return {
-      baseItemColumnProps,
-      formConfig,
-      showProps,
-    }
-  },
-})
+  return isArray(exclude) ? !exclude.includes(formConfig.value.currentItem!.component) : true
+}
 </script>
 
 <template>
@@ -50,11 +25,8 @@ export default defineComponent({
         <div v-for="item of baseItemColumnProps" :key="item.name">
           <FormItem v-if="showProps(item.exclude)" :label="item.label">
             <component
-              v-bind="item.componentProps"
-              :is="item.component"
-              v-if="formConfig.currentItem.colProps"
-              v-model:value="formConfig.currentItem.colProps[item.name]"
-              class="component-props"
+              v-bind="item.componentProps" :is="item.component" v-if="formConfig.currentItem.colProps"
+              v-model:value="formConfig.currentItem.colProps[item.name]" class="component-props"
             />
           </FormItem>
         </div>
diff --git a/src/components/FormDesign/src/components/VFormDesign/components/FormItemProps.vue b/src/components/FormDesign/src/components/VFormDesign/components/FormItemProps.vue
index 4e5127b0..1d4a68d1 100644
--- a/src/components/FormDesign/src/components/VFormDesign/components/FormItemProps.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/components/FormItemProps.vue
@@ -1,8 +1,8 @@
 <!--
  * @Description: 表单项属性,控件属性面板
 -->
-<script lang="ts">
-import { computed, defineComponent, watch } from 'vue'
+<script lang="ts" setup>
+import { computed, watch } from 'vue'
 import {
   Checkbox,
   Col,
@@ -10,9 +10,6 @@ import {
   Form,
   FormItem,
   Input,
-  RadioGroup,
-  Select,
-  Slider,
   Switch,
 } from 'ant-design-vue'
 import { isArray } from 'lodash-es'
@@ -26,61 +23,32 @@ import {
 import { useFormDesignState } from '../../../hooks/useFormDesignState'
 import RuleProps from './RuleProps.vue'
 
-export default defineComponent({
-  name: 'FormItemProps',
-  components: {
-    RuleProps,
-    Empty,
-    Input,
-    Form,
-    FormItem,
-    Switch,
-    Checkbox,
-    Select,
-    Slider,
-    Col,
-    RadioGroup,
-  },
-  // props: {} as PropsOptions,
-
-  setup() {
-    const { formConfig } = useFormDesignState()
+const { formConfig } = useFormDesignState()
 
-    watch(
-      () => formConfig.value,
-      () => {
-        if (formConfig.value.currentItem) {
-          formConfig.value.currentItem.itemProps = formConfig.value.currentItem.itemProps || {}
-          formConfig.value.currentItem.itemProps.labelCol
+watch(
+  () => formConfig.value,
+  () => {
+    if (formConfig.value.currentItem) {
+      formConfig.value.currentItem.itemProps = formConfig.value.currentItem.itemProps || {}
+      formConfig.value.currentItem.itemProps.labelCol
               = formConfig.value.currentItem.itemProps.labelCol || {}
-          formConfig.value.currentItem.itemProps.wrapperCol
+      formConfig.value.currentItem.itemProps.wrapperCol
               = formConfig.value.currentItem.itemProps.wrapperCol || {}
-        }
-      },
-      { deep: true, immediate: true },
-    )
-    const showProps = (exclude: string[] | undefined) => {
-      if (!exclude)
-        return true
-
-      return isArray(exclude) ? !exclude.includes(formConfig.value.currentItem!.component) : true
     }
+  },
+  { deep: true, immediate: true },
+)
+function showProps(exclude: string[] | undefined) {
+  if (!exclude)
+    return true
 
-    const controlPropsList = computed(() => {
-      return baseFormItemControlAttrs.filter((item) => {
-        return showProps(item.exclude)
-      })
-    })
+  return isArray(exclude) ? !exclude.includes(formConfig.value.currentItem!.component) : true
+}
 
-    return {
-      baseFormItemProps,
-      advanceFormItemProps,
-      advanceFormItemColProps,
-      formConfig,
-      controlPropsList,
-      showProps,
-    }
-  },
+const controlPropsList = computed(() => {
+  return baseFormItemControlAttrs.filter((item) => {
+    return showProps(item.exclude)
+  })
 })
 </script>
 
diff --git a/src/components/FormDesign/src/components/VFormDesign/components/FormNode.vue b/src/components/FormDesign/src/components/VFormDesign/components/FormNode.vue
index 877b764c..7a1b04f0 100644
--- a/src/components/FormDesign/src/components/VFormDesign/components/FormNode.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/components/FormNode.vue
@@ -1,42 +1,29 @@
 <!--
  * @Description: 拖拽节点控件
 -->
-<script lang="ts">
+<script lang="ts" setup>
 import type { PropType } from 'vue'
-import { defineComponent, reactive, toRefs } from 'vue'
 import type { IVFormComponent } from '../../../typings/v-form-component'
 import { useFormDesignState } from '../../../hooks/useFormDesignState'
 import VFormItem from '../../VFormItem/index.vue'
 import FormNodeOperate from './FormNodeOperate.vue'
 
-// import VFormItem from '../../VFormItem/vFormItem.vue';
-export default defineComponent({
-  name: 'FormNode',
-  components: {
-    VFormItem,
-    FormNodeOperate,
-  },
-  props: {
+const props = defineProps(
+  { 
     schema: {
       type: Object as PropType<IVFormComponent>,
       required: true,
-    },
-  },
-  setup(props) {
-    const { formConfig, formDesignMethods } = useFormDesignState()
-    const state = reactive({})
-    // 获取 formDesignMethods
-    const handleSelectItem = () => {
-      // 调用 formDesignMethods
-      formDesignMethods.handleSetSelectItem(props.schema)
-    }
-    return {
-      ...toRefs(state),
-      handleSelectItem,
-      formConfig,
-    }
+    }, 
   },
-})
+  
+)
+
+const { formConfig, formDesignMethods } = useFormDesignState()
+// 获取 formDesignMethods
+function handleSelectItem() {
+  // 调用 formDesignMethods
+  formDesignMethods.handleSetSelectItem(props.schema)
+}
 </script>
 
 <template>
diff --git a/src/components/FormDesign/src/components/VFormDesign/components/LayoutItem.vue b/src/components/FormDesign/src/components/VFormDesign/components/LayoutItem.vue
index 76dcaad8..f6b8b843 100644
--- a/src/components/FormDesign/src/components/VFormDesign/components/LayoutItem.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/components/LayoutItem.vue
@@ -3,9 +3,9 @@
  * 千万不要在template下面的第一行加注释,因为这里拖动的第一个元素
 -->
 
-<script lang="ts">
+<script lang="ts" setup>
 import type { PropType } from 'vue'
-import { computed, defineComponent, reactive, toRefs } from 'vue'
+import { computed } from 'vue'
 import draggable from 'vuedraggable'
 import { Col, Row } from 'ant-design-vue'
 import { useFormDesignState } from '../../../hooks/useFormDesignState'
@@ -13,16 +13,8 @@ import type { IVFormComponent } from '../../../typings/v-form-component'
 import FormNode from './FormNode.vue'
 import FormNodeOperate from './FormNodeOperate.vue'
 
-export default defineComponent({
-  name: 'LayoutItem',
-  components: {
-    FormNode,
-    FormNodeOperate,
-    Draggable: draggable,
-    Row,
-    Col,
-  },
-  props: {
+const props = defineProps(
+  {
     schema: {
       type: Object as PropType<IVFormComponent>,
       required: true,
@@ -32,33 +24,23 @@ export default defineComponent({
       required: true,
     },
   },
-  emits: ['dragStart', 'handleColAdd', 'handle-copy', 'handle-delete'],
-  setup(props) {
-    const {
-      formDesignMethods: { handleSetSelectItem },
-      formConfig,
-    } = useFormDesignState()
-    const state = reactive({})
-    const colPropsComputed = computed(() => {
-      const { colProps = {} } = props.schema
-      return colProps
-    })
+)
 
-    const list1 = computed(() => props.schema.columns)
+const emit = defineEmits(['dragStart', 'handleColAdd', 'handle-copy', 'handle-delete'])
 
-    // 计算布局元素,水平模式下为ACol,非水平模式下为div
-    const layoutTag = computed(() => {
-      return formConfig.value.layout === 'horizontal' ? 'Col' : 'div'
-    })
+const Draggable = draggable
 
-    return {
-      ...toRefs(state),
-      colPropsComputed,
-      handleSetSelectItem,
-      layoutTag,
-      list1,
-    }
-  },
+const { formDesignMethods: { handleSetSelectItem }, formConfig } = useFormDesignState()
+const colPropsComputed = computed(() => {
+  const { colProps = {} } = props.schema
+  return colProps
+})
+
+const list1 = computed(() => props.schema.columns)
+
+// 计算布局元素,水平模式下为ACol,非水平模式下为div
+const layoutTag = computed(() => {
+  return formConfig.value.layout === 'horizontal' ? 'Col' : 'div'
 })
 </script>
 
@@ -87,8 +69,8 @@ export default defineComponent({
                   class="drag-move"
                   :schema="element"
                   :current-item="currentItem"
-                  @handle-copy="$emit('handle-copy')"
-                  @handle-delete="$emit('handle-delete')"
+                  @handle-copy="emit('handle-copy')"
+                  @handle-delete="emit('handle-delete')"
                 />
               </template>
             </Draggable>
@@ -102,8 +84,8 @@ export default defineComponent({
       :key="schema.key"
       :schema="schema"
       :current-item="currentItem"
-      @handle-copy="$emit('handle-copy')"
-      @handle-delete="$emit('handle-delete')"
+      @handle-copy="emit('handle-copy')"
+      @handle-delete="emit('handle-delete')"
     />
   </Col>
 </template>
diff --git a/src/components/FormDesign/src/components/VFormDesign/components/PreviewCode.vue b/src/components/FormDesign/src/components/VFormDesign/components/PreviewCode.vue
index 44db4897..4ad6d9d0 100644
--- a/src/components/FormDesign/src/components/VFormDesign/components/PreviewCode.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/components/PreviewCode.vue
@@ -1,16 +1,12 @@
-<script lang="ts">
-import { defineComponent, reactive, ref, toRefs, unref } from 'vue'
+<script lang="ts" setup>
+import { ref, unref } from 'vue'
 import { CodeEditor, MODE } from '@/components/CodeEditor'
 
 import { useCopyToClipboard } from '@/hooks/web/useCopyToClipboard'
 import { useMessage } from '@/hooks/web/useMessage'
 
-export default defineComponent({
-  name: 'PreviewCode',
-  components: {
-    CodeEditor,
-  },
-  props: {
+const props = defineProps(
+  {
     fileFormat: {
       type: String,
       default: 'json',
@@ -20,51 +16,37 @@ export default defineComponent({
       default: '',
     },
   },
-  setup(props) {
-    const state = reactive({
-      open: false,
-    })
-
-    const myEditor = ref(null)
+)
 
-    const exportData = (data: string, fileName = `file.${props.fileFormat}`) => {
-      let content = 'data:text/csv;charset=utf-8,'
-      content += data
-      const encodedUri = encodeURI(content)
-      const actions = document.createElement('a')
-      actions.setAttribute('href', encodedUri)
-      actions.setAttribute('download', fileName)
-      actions.click()
-    }
+const myEditor = ref(null)
 
-    const handleExportJson = () => {
-      exportData(props.editorJson)
-    }
-    const { clipboardRef, copiedRef } = useCopyToClipboard()
-    const { createMessage } = useMessage()
+function exportData(data: string, fileName = `file.${props.fileFormat}`) {
+  let content = 'data:text/csv;charset=utf-8,'
+  content += data
+  const encodedUri = encodeURI(content)
+  const actions = document.createElement('a')
+  actions.setAttribute('href', encodedUri)
+  actions.setAttribute('download', fileName)
+  actions.click()
+}
 
-    const handleCopyJson = () => {
-      // 复制数据
-      const value = props.editorJson
-      if (!value) {
-        createMessage.warning('代码为空!')
-        return
-      }
-      clipboardRef.value = value
-      if (unref(copiedRef))
-        createMessage.warning('复制成功!')
-    }
+function handleExportJson() {
+  exportData(props.editorJson)
+}
+const { clipboardRef, copiedRef } = useCopyToClipboard()
+const { createMessage } = useMessage()
 
-    return {
-      ...toRefs(state),
-      myEditor,
-      exportData,
-      handleCopyJson,
-      handleExportJson,
-      MODE,
-    }
-  },
-})
+function handleCopyJson() {
+  // 复制数据
+  const value = props.editorJson
+  if (!value) {
+    createMessage.warning('代码为空!')
+    return
+  }
+  clipboardRef.value = value
+  if (unref(copiedRef))
+    createMessage.warning('复制成功!')
+}
 </script>
 
 <template>
diff --git a/src/components/FormDesign/src/components/VFormDesign/modules/CollapseItem.vue b/src/components/FormDesign/src/components/VFormDesign/modules/CollapseItem.vue
index acb7e696..fe962397 100644
--- a/src/components/FormDesign/src/components/VFormDesign/modules/CollapseItem.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/modules/CollapseItem.vue
@@ -1,16 +1,13 @@
-<script lang="ts">
-import { defineComponent, reactive } from 'vue'
+<script lang="ts" setup>
 import draggable from 'vuedraggable'
 import type { IVFormComponent } from '../../../typings/v-form-component'
 import { Icon } from '@/components/Icon'
 import { useDesign } from '@/hooks/web/useDesign'
 
-export default defineComponent({
-  name: 'CollapseItem',
-  components: { Draggable: draggable, Icon },
-  props: {
+const props = defineProps(
+  {
     list: {
-      type: [Array],
+      type: Array as unknown as any[],
       default: () => [],
     },
     handleListPush: {
@@ -18,24 +15,23 @@ export default defineComponent({
       default: null,
     },
   },
-  setup(props, { emit }) {
-    const { prefixCls } = useDesign('form-design-collapse-item')
+)
+const emit = defineEmits(['start', 'add-attrs', 'handle-list-push'])
+const Draggable = draggable
 
-    const state = reactive({})
-    const handleStart = (e: any, list1: IVFormComponent[]) => {
-      emit('start', list1[e.oldIndex].component)
-    }
-    const handleAdd = (e: any) => {
-      console.log(e)
-    }
-    // https://github.com/SortableJS/vue.draggable.next
-    // https://github.com/SortableJS/vue.draggable.next/blob/master/example/components/custom-clone.vue
-    const cloneItem = (one) => {
-      return props.handleListPush(one)
-    }
-    return { prefixCls, state, handleStart, handleAdd, cloneItem }
-  },
-})
+const { prefixCls } = useDesign('form-design-collapse-item')
+
+function handleStart(e: any, list1: IVFormComponent[]) {
+  emit('start', list1[e.oldIndex].component)
+}
+function handleAdd(e: any) {
+  console.log(e)
+}
+// https://github.com/SortableJS/vue.draggable.next
+// https://github.com/SortableJS/vue.draggable.next/blob/master/example/components/custom-clone.vue
+function cloneItem(one) {
+  return props.handleListPush(one)
+}
 </script>
 
 <template>
@@ -57,8 +53,8 @@ export default defineComponent({
       <template #item="{ element, index }">
         <li
           class="bs-box text-ellipsis"
-          @dragstart="$emit('add-attrs', list, index)"
-          @click="$emit('handle-list-push', element)"
+          @dragstart="emit('add-attrs', list, index)"
+          @click="emit('handle-list-push', element)"
         >
           <!-- <svg v-if="element.icon.indexOf('icon-') > -1" class="icon" aria-hidden="true">
             <use :xlink:href="`#${element.icon}`" />
diff --git a/src/components/FormDesign/src/components/VFormDesign/modules/FormComponentPanel.vue b/src/components/FormDesign/src/components/VFormDesign/modules/FormComponentPanel.vue
index 91652b25..9c16a3fd 100644
--- a/src/components/FormDesign/src/components/VFormDesign/modules/FormComponentPanel.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/modules/FormComponentPanel.vue
@@ -2,7 +2,7 @@
  * @Description: 中间表单布局面板
  * https://github.com/SortableJS/vue.draggable.next/issues/138
 -->
-<script lang="ts">
+<script lang="ts" setup>
 import draggable from 'vuedraggable'
 import { computed, defineComponent } from 'vue'
 import { cloneDeep } from 'lodash-es'
@@ -10,52 +10,37 @@ import { Empty, Form } from 'ant-design-vue'
 import { useFormDesignState } from '../../../hooks/useFormDesignState'
 import LayoutItem from '../components/LayoutItem.vue'
 
-export default defineComponent({
-  name: 'FormComponentPanel',
-  components: {
-    LayoutItem,
-    Draggable: draggable,
-    Form,
-    Empty,
-  },
-  emits: ['handleSetSelectItem'],
-  setup(_, { emit }) {
-    const { formConfig } = useFormDesignState()
-
-    /**
-     * 拖拽完成事件
-     * @param newIndex
-     */
-    const addItem = ({ newIndex }: any) => {
-      formConfig.value.schemas = formConfig.value.schemas || []
-
-      const schemas = formConfig.value.schemas
-      schemas[newIndex] = cloneDeep(schemas[newIndex])
-      emit('handleSetSelectItem', schemas[newIndex])
-    }
+const emit = defineEmits(['handleSetSelectItem'])
 
-    /**
-     * 拖拽开始事件
-     * @param e {Object} 事件对象
-     */
-    const handleDragStart = (e: any) => {
-      emit('handleSetSelectItem', formConfig.value.schemas[e.oldIndex])
-    }
+const  Draggable = draggable
 
-    // 获取祖先组件传递的currentItem
+const { formConfig } = useFormDesignState()
 
-    // 计算布局元素,水平模式下为ACol,非水平模式下为div
-    const layoutTag = computed(() => {
-      return formConfig.value.layout === 'horizontal' ? 'Col' : 'div'
-    })
+/**
+ * 拖拽完成事件
+ * @param newIndex
+ */
+function addItem({ newIndex }: any) {
+  formConfig.value.schemas = formConfig.value.schemas || []
 
-    return {
-      addItem,
-      handleDragStart,
-      formConfig,
-      layoutTag,
-    }
-  },
+  const schemas = formConfig.value.schemas
+  schemas[newIndex] = cloneDeep(schemas[newIndex])
+  emit('handleSetSelectItem', schemas[newIndex])
+}
+
+/**
+ * 拖拽开始事件
+ * @param e {Object} 事件对象
+ */
+function handleDragStart(e: any) {
+  emit('handleSetSelectItem', formConfig.value.schemas[e.oldIndex])
+}
+
+// 获取祖先组件传递的currentItem
+
+// 计算布局元素,水平模式下为ACol,非水平模式下为div
+const layoutTag = computed(() => {
+  return formConfig.value.layout === 'horizontal' ? 'Col' : 'div'
 })
 </script>
 
diff --git a/src/components/FormDesign/src/components/VFormDesign/modules/PropsPanel.vue b/src/components/FormDesign/src/components/VFormDesign/modules/PropsPanel.vue
index 53bc796c..39f70a44 100644
--- a/src/components/FormDesign/src/components/VFormDesign/modules/PropsPanel.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/modules/PropsPanel.vue
@@ -1,8 +1,8 @@
 <!--
  * @Description: 右侧属性配置面板
 -->
-<script lang="ts">
-import { computed, defineComponent } from 'vue'
+<script lang="ts" setup>
+import { computed } from 'vue'
 import { TabPane, Tabs } from 'ant-design-vue'
 import FormProps from '../components/FormProps.vue'
 import FormItemProps from '../components/FormItemProps.vue'
@@ -15,25 +15,11 @@ type ChangeTabKey = 1 | 2
 export interface IPropsPanel {
   changeTab: (key: ChangeTabKey) => void
 }
-export default defineComponent({
-  name: 'PropsPanel',
-  components: {
-    FormProps,
-    FormItemProps,
-    ComponentProps,
-    ComponentColumnProps,
-    Tabs,
-    TabPane,
-  },
-  setup() {
-    const { formConfig } = useFormDesignState()
-    const slotProps = computed(() => {
-      return customComponents.find(
-        item => item.component === formConfig.value.currentItem?.component,
-      )
-    })
-    return { formConfig, customComponents, slotProps }
-  },
+const { formConfig } = useFormDesignState()
+const slotProps = computed(() => {
+  return customComponents.find(
+    item => item.component === formConfig.value.currentItem?.component,
+  )
 })
 </script>
 
diff --git a/src/components/FormDesign/src/components/VFormDesign/modules/Toolbar.vue b/src/components/FormDesign/src/components/VFormDesign/modules/Toolbar.vue
index a9d482fd..3456f667 100644
--- a/src/components/FormDesign/src/components/VFormDesign/modules/Toolbar.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/modules/Toolbar.vue
@@ -1,8 +1,8 @@
 <!--
  * @Description: 工具栏
 -->
-<script lang="ts">
-import { defineComponent, inject, reactive, toRefs } from 'vue'
+<script lang="ts" setup>
+import { inject, reactive } from 'vue'
 import type { UseRefHistoryReturn } from '@vueuse/core'
 import { Divider, Tooltip } from 'ant-design-vue'
 import type { IFormConfig } from '../../../typings/v-form-component'
@@ -15,62 +15,51 @@ interface IToolbarsConfig {
   event: string
 }
 
-export default defineComponent({
-  name: 'OperatingArea',
-  components: {
-    Tooltip,
-    Icon,
-    Divider,
-  },
-  setup() {
-    const state = reactive<{
-      toolbarsConfigs: IToolbarsConfig[]
-    }>({
-      toolbarsConfigs: [
-        {
-          title: '预览-支持布局',
-          type: 'preview',
-          event: 'handlePreview',
-          icon: 'ant-design:chrome-filled',
-        },
-        {
-          title: '预览-不支持布局',
-          type: 'preview',
-          event: 'handlePreview2',
-          icon: 'ant-design:chrome-filled',
-        },
-        {
-          title: '导入JSON',
-          type: 'importJson',
-          event: 'handleOpenImportJsonModal',
-          icon: 'ant-design:import-outlined',
-        },
-        {
-          title: '生成JSON',
-          type: 'exportJson',
-          event: 'handleOpenJsonModal',
-          icon: 'ant-design:export-outlined',
-        },
-        {
-          title: '生成代码',
-          type: 'exportCode',
-          event: 'handleOpenCodeModal',
-          icon: 'ant-design:code-filled',
-        },
-        {
-          title: '清空',
-          type: 'reset',
-          event: 'handleClearFormItems',
-          icon: 'ant-design:clear-outlined',
-        },
-      ],
-    })
-    const historyRef = inject('historyReturn') as UseRefHistoryReturn<IFormConfig, IFormConfig>
-
-    const { undo, redo, canUndo, canRedo } = historyRef
-    return { ...toRefs(state), undo, redo, canUndo, canRedo }
-  },
+const state = reactive<{
+  toolbarsConfigs: IToolbarsConfig[]
+}>({
+  toolbarsConfigs: [
+    {
+      title: '预览-支持布局',
+      type: 'preview',
+      event: 'handlePreview',
+      icon: 'ant-design:chrome-filled',
+    },
+    {
+      title: '预览-不支持布局',
+      type: 'preview',
+      event: 'handlePreview2',
+      icon: 'ant-design:chrome-filled',
+    },
+    {
+      title: '导入JSON',
+      type: 'importJson',
+      event: 'handleOpenImportJsonModal',
+      icon: 'ant-design:import-outlined',
+    },
+    {
+      title: '生成JSON',
+      type: 'exportJson',
+      event: 'handleOpenJsonModal',
+      icon: 'ant-design:export-outlined',
+    },
+    {
+      title: '生成代码',
+      type: 'exportCode',
+      event: 'handleOpenCodeModal',
+      icon: 'ant-design:code-filled',
+    },
+    {
+      title: '清空',
+      type: 'reset',
+      event: 'handleClearFormItems',
+      icon: 'ant-design:clear-outlined',
+    },
+  ],
 })
+const historyRef = inject('historyReturn') as UseRefHistoryReturn<IFormConfig, IFormConfig>
+
+const { undo, redo, canUndo, canRedo } = historyRef
 </script>
 
 <template>
@@ -78,7 +67,7 @@ export default defineComponent({
     <!-- 头部操作按钮区域 start -->
     <!-- 操作左侧区域 start -->
     <div class="left-btn-box">
-      <Tooltip v-for="item in toolbarsConfigs" :key="item.icon" :title="item.title">
+      <Tooltip v-for="item in state.toolbarsConfigs" :key="item.icon" :title="item.title">
         <a class="toolbar-text" @click="$emit(item.event)">
           <Icon :icon="item.icon" />
         </a>
diff --git a/src/layouts/default/header/components/lock/LockModal.vue b/src/layouts/default/header/components/lock/LockModal.vue
index fa3feb82..81314915 100644
--- a/src/layouts/default/header/components/lock/LockModal.vue
+++ b/src/layouts/default/header/components/lock/LockModal.vue
@@ -1,7 +1,6 @@
 <script lang="ts" setup>
 import { computed } from 'vue'
 import { useI18n } from '@/hooks/web/useI18n'
-import { useDesign } from '@/hooks/web/useDesign'
 import { BasicForm, useForm } from '@/components/Form'
 import { BasicModal, useModalInner } from '@/components/Modal'
 import { useUserStore } from '@/store/modules/user'
@@ -11,7 +10,6 @@ import headerImg from '@/assets/images/header.jpg'
 defineOptions({ name: 'LockModal' })
 
 const { t } = useI18n()
-const { prefixCls } = useDesign('header-lock-modal')
 const userStore = useUserStore()
 const lockStore = useLockStore()
 
@@ -52,18 +50,18 @@ const avatar = computed(() => {
 </script>
 
 <template>
-  <BasicModal :footer="null" width="25%" :title="t('layout.header.lockScreen')" v-bind="$attrs" :class="prefixCls" @register="register">
-    <div :class="`${prefixCls}__entry`">
-      <div :class="`${prefixCls}__header`">
-        <img :src="avatar" :class="`${prefixCls}__header-img`">
-        <p :class="`${prefixCls}__header-name`">
+  <BasicModal :footer="null" width="25%" :title="t('layout.header.lockScreen')" v-bind="$attrs" @register="register">
+    <div class="relative rounded-10 px-8 pb-8 pt-30">
+      <div class="absolute left-[calc(50%-45px)] top-0 w-auto text-center">
+        <img :src="avatar" class="w-18 rounded-50%">
+        <p class="mt-2">
           {{ getRealName }}
         </p>
       </div>
 
       <BasicForm @register="registerForm" />
 
-      <div :class="`${prefixCls}__footer`">
+      <div class="mt-4 text-center">
         <a-button type="primary" block class="mt-2" @click="handleLock">
           {{ t('layout.header.lockScreenBtn') }}
         </a-button>
@@ -71,38 +69,3 @@ const avatar = computed(() => {
     </div>
   </BasicModal>
 </template>
-
-<style lang="less">
-@prefix-cls: ~'@{namespace}-header-lock-modal';
-
-.@{prefix-cls} {
-  &__entry {
-    position: relative;
-    //height: 240px;
-    padding: 130px 30px 30px;
-    border-radius: 10px;
-  }
-
-  &__header {
-    position: absolute;
-    top: 0;
-    left: calc(50% - 45px);
-    width: auto;
-    text-align: center;
-
-    &-img {
-      width: 70px;
-      border-radius: 50%;
-    }
-
-    &-name {
-      margin-top: 5px;
-    }
-  }
-
-  &__footer {
-    margin-top: 16px;
-    text-align: center;
-  }
-}
-</style>
diff --git a/src/layouts/default/sider/MixSider.vue b/src/layouts/default/sider/MixSider.vue
index c0acb3db..abcc0844 100644
--- a/src/layouts/default/sider/MixSider.vue
+++ b/src/layouts/default/sider/MixSider.vue
@@ -1,7 +1,8 @@
-<script lang="ts">
+<script lang="ts" setup>
 import type { CSSProperties } from 'vue'
-import { computed, defineComponent, onMounted, ref, unref, watch } from 'vue'
+import { computed, onMounted, ref, unref, watch } from 'vue'
 import type { RouteLocationNormalized } from 'vue-router'
+import { onClickOutside } from '@vueuse/core'
 import LayoutTrigger from '../trigger/index.vue'
 import { useDragLine } from './useLayoutSider'
 import type { Menu } from '@/router/types'
@@ -16,257 +17,220 @@ import { useDesign } from '@/hooks/web/useDesign'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useGo } from '@/hooks/web/usePage'
 import { SIDE_BAR_MINI_WIDTH, SIDE_BAR_SHOW_TIT_MINI_WIDTH } from '@/enums/appEnum'
-import clickOutside from '@/directives/clickOutside'
 import { getChildrenMenus, getCurrentParentPath, getShallowMenus } from '@/router/menus'
 import { listenerRouteChange } from '@/logics/mitt/routeChange'
 
-export default defineComponent({
-  name: 'LayoutMixSider',
-  components: {
-    ScrollContainer,
-    AppLogo,
-    SimpleMenu,
-    Icon,
-    LayoutTrigger,
-    SimpleMenuTag,
-  },
-  directives: {
-    clickOutside,
-  },
-  setup() {
-    const menuModules = ref<Menu[]>([])
-    const activePath = ref('')
-    const childrenMenus = ref<Menu[]>([])
-    const openMenu = ref(false)
-    const dragBarRef = ref<ElRef>(null)
-    const sideRef = ref<ElRef>(null)
-    const currentRoute = ref<Nullable<RouteLocationNormalized>>(null)
-
-    const { prefixCls } = useDesign('layout-mix-sider')
-    const go = useGo()
-    const { t } = useI18n()
-    const {
-      getMenuWidth,
-      getCanDrag,
-      getCloseMixSidebarOnChange,
-      getMenuTheme,
-      getMixSideTrigger,
-      getRealWidth,
-      getMixSideFixed,
-      mixSideHasChildren,
-      setMenuSetting,
-      getIsMixSidebar,
-      getCollapsed,
-    } = useMenuSetting()
-
-    const { title } = useGlobSetting()
-    const permissionStore = usePermissionStore()
-
-    useDragLine(sideRef, dragBarRef, true)
-
-    const getMenuStyle = computed((): CSSProperties => {
-      return {
-        width: unref(openMenu) ? `${unref(getMenuWidth)}px` : 0,
-        // eslint-disable-next-line @typescript-eslint/no-use-before-define
-        left: `${unref(getMixSideWidth)}px`,
-      }
-    })
-
-    const getIsFixed = computed(() => {
-      // eslint-disable-next-line vue/no-side-effects-in-computed-properties
-      mixSideHasChildren.value = unref(childrenMenus).length > 0
-      const isFixed = unref(getMixSideFixed) && unref(mixSideHasChildren)
-      if (isFixed)
-        // eslint-disable-next-line vue/no-side-effects-in-computed-properties
-        openMenu.value = true
+const wrap = ref(null)
+const menuModules = ref<Menu[]>([])
+const activePath = ref('')
+const childrenMenus = ref<Menu[]>([])
+const openMenu = ref(false)
+const dragBarRef = ref<ElRef>(null)
+const sideRef = ref<ElRef>(null)
+const currentRoute = ref<Nullable<RouteLocationNormalized>>(null)
+
+const { prefixCls } = useDesign('layout-mix-sider')
+const go = useGo()
+const { t } = useI18n()
+const {
+  getMenuWidth,
+  getCanDrag,
+  getCloseMixSidebarOnChange,
+  getMenuTheme,
+  getMixSideTrigger,
+  getRealWidth,
+  getMixSideFixed,
+  mixSideHasChildren,
+  setMenuSetting,
+  getIsMixSidebar,
+  getCollapsed,
+} = useMenuSetting()
+
+const { title } = useGlobSetting()
+const permissionStore = usePermissionStore()
+
+useDragLine(sideRef, dragBarRef, true)
+
+const getMenuStyle = computed((): CSSProperties => {
+  return {
+    width: unref(openMenu) ? `${unref(getMenuWidth)}px` : 0,
+    // eslint-disable-next-line @typescript-eslint/no-use-before-define
+    left: `${unref(getMixSideWidth)}px`,
+  }
+})
 
-      return isFixed
-    })
-
-    const getMixSideWidth = computed(() => {
-      return unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH
-    })
-
-    const getDomStyle = computed((): CSSProperties => {
-      const fixedWidth = unref(getIsFixed) ? unref(getRealWidth) : 0
-      const width = `${unref(getMixSideWidth) + fixedWidth}px`
-      return getWrapCommonStyle(width)
-    })
-
-    const getWrapStyle = computed((): CSSProperties => {
-      const width = `${unref(getMixSideWidth)}px`
-      return getWrapCommonStyle(width)
-    })
-
-    const getMenuEvents = computed(() => {
-      return !unref(getMixSideFixed)
-        ? {
-            onMouseleave: () => {
-              setActive(true)
-              closeMenu()
-            },
-          }
-        : {}
-    })
+const getIsFixed = computed(() => {
+  // eslint-disable-next-line vue/no-side-effects-in-computed-properties
+  mixSideHasChildren.value = unref(childrenMenus).length > 0
+  const isFixed = unref(getMixSideFixed) && unref(mixSideHasChildren)
+  if (isFixed)
+  // eslint-disable-next-line vue/no-side-effects-in-computed-properties
+    openMenu.value = true
 
-    const getShowDragBar = computed(() => unref(getCanDrag))
+  return isFixed
+})
 
-    onMounted(async () => {
-      menuModules.value = await getShallowMenus()
-    })
+const getMixSideWidth = computed(() => {
+  return unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH
+})
 
-    // Menu changes
-    watch(
-      [() => permissionStore.getLastBuildMenuTime, () => permissionStore.getBackMenuList],
-      async () => {
-        menuModules.value = await getShallowMenus()
-      },
-      {
-        immediate: true,
-      },
-    )
+const getDomStyle = computed((): CSSProperties => {
+  const fixedWidth = unref(getIsFixed) ? unref(getRealWidth) : 0
+  const width = `${unref(getMixSideWidth) + fixedWidth}px`
+  return getWrapCommonStyle(width)
+})
 
-    listenerRouteChange((route) => {
-      currentRoute.value = route
-      setActive(true)
-      if (unref(getCloseMixSidebarOnChange))
-        closeMenu()
-    })
-
-    function getWrapCommonStyle(width: string): CSSProperties {
-      return {
-        width,
-        maxWidth: width,
-        minWidth: width,
-        flex: `0 0 ${width}`,
-      }
-    }
+const getWrapStyle = computed((): CSSProperties => {
+  const width = `${unref(getMixSideWidth)}px`
+  return getWrapCommonStyle(width)
+})
 
-    // Process module menu click
-    async function handleModuleClick(path: string, hover = false) {
-      const children = await getChildrenMenus(path)
-      if (unref(activePath) === path) {
-        if (!hover) {
-          if (!unref(openMenu))
-            openMenu.value = true
-          else
-            closeMenu()
-        }
-        else {
-          if (!unref(openMenu))
-            openMenu.value = true
-        }
-        if (!unref(openMenu))
-          setActive()
-      }
-      else {
-        openMenu.value = true
-        activePath.value = path
+const getMenuEvents = computed(() => {
+  return !unref(getMixSideFixed)
+    ? {
+        onMouseleave: () => {
+          setActive(true)
+          closeMenu()
+        },
       }
+    : {}
+})
 
-      if (!children || children.length === 0) {
-        if (!hover)
-          go(path)
-        childrenMenus.value = []
+const getShowDragBar = computed(() => unref(getCanDrag))
+
+onMounted(async () => {
+  menuModules.value = await getShallowMenus()
+})
+
+// Menu changes
+watch(
+  [() => permissionStore.getLastBuildMenuTime, () => permissionStore.getBackMenuList],
+  async () => {
+    menuModules.value = await getShallowMenus()
+  },
+  {
+    immediate: true,
+  },
+)
+
+listenerRouteChange((route) => {
+  currentRoute.value = route
+  setActive(true)
+  if (unref(getCloseMixSidebarOnChange))
+    closeMenu()
+})
+
+function getWrapCommonStyle(width: string): CSSProperties {
+  return {
+    width,
+    maxWidth: width,
+    minWidth: width,
+    flex: `0 0 ${width}`,
+  }
+}
+
+// Process module menu click
+async function handleModuleClick(path: string, hover = false) {
+  const children = await getChildrenMenus(path)
+  if (unref(activePath) === path) {
+    if (!hover) {
+      if (!unref(openMenu))
+        openMenu.value = true
+      else
         closeMenu()
-        return
-      }
-      childrenMenus.value = children
     }
-
-    // Set the currently active menu and submenu
-    async function setActive(setChildren = false) {
-      const path = currentRoute.value?.path
-      if (!path)
-        return
-      activePath.value = await getCurrentParentPath(path)
-      // hanldeModuleClick(parentPath);
-      if (unref(getIsMixSidebar)) {
-        const activeMenu = unref(menuModules).find(item => item.path === unref(activePath))
-        const p = activeMenu?.path
-        if (p) {
-          const children = await getChildrenMenus(p)
-          if (setChildren) {
-            childrenMenus.value = children
-
-            if (unref(getMixSideFixed))
-              openMenu.value = children.length > 0
-          }
-          if (children.length === 0)
-            childrenMenus.value = []
-        }
-      }
+    else {
+      if (!unref(openMenu))
+        openMenu.value = true
     }
+    if (!unref(openMenu))
+      setActive()
+  }
+  else {
+    openMenu.value = true
+    activePath.value = path
+  }
 
-    function handleMenuClick(path: string) {
+  if (!children || children.length === 0) {
+    if (!hover)
       go(path)
-    }
-
-    function handleClickOutside() {
-      setActive(true)
-      closeMenu()
-    }
+    childrenMenus.value = []
+    closeMenu()
+    return
+  }
+  childrenMenus.value = children
+}
 
-    function getItemEvents(item: Menu) {
-      if (unref(getMixSideTrigger) === 'hover') {
-        return {
-          onMouseenter: () => handleModuleClick(item.path, true),
-          onClick: async () => {
-            const children = await getChildrenMenus(item.path)
-            if (item.path && (!children || children.length === 0))
-              go(item.path)
-          },
-        }
-      }
-      return {
-        onClick: () => handleModuleClick(item.path),
+// Set the currently active menu and submenu
+async function setActive(setChildren = false) {
+  const path = currentRoute.value?.path
+  if (!path)
+    return
+  activePath.value = await getCurrentParentPath(path)
+  // hanldeModuleClick(parentPath);
+  if (unref(getIsMixSidebar)) {
+    const activeMenu = unref(menuModules).find(item => item.path === unref(activePath))
+    const p = activeMenu?.path
+    if (p) {
+      const children = await getChildrenMenus(p)
+      if (setChildren) {
+        childrenMenus.value = children
+
+        if (unref(getMixSideFixed))
+          openMenu.value = children.length > 0
       }
+      if (children.length === 0)
+        childrenMenus.value = []
     }
+  }
+}
 
-    function handleFixedMenu() {
-      setMenuSetting({
-        mixSideFixed: !unref(getIsFixed),
-      })
-    }
+function handleMenuClick(path: string) {
+  go(path)
+}
 
-    // Close menu
-    function closeMenu() {
-      if (!unref(getIsFixed))
-        openMenu.value = false
-    }
+function handleClickOutside() {
+  setActive(true)
+  closeMenu()
+}
 
+function getItemEvents(item: Menu) {
+  if (unref(getMixSideTrigger) === 'hover') {
     return {
-      t,
-      prefixCls,
-      menuModules,
-      handleModuleClick,
-      activePath,
-      childrenMenus,
-      getShowDragBar,
-      handleMenuClick,
-      getMenuStyle,
-      handleClickOutside,
-      sideRef,
-      dragBarRef,
-      title,
-      openMenu,
-      getMenuTheme,
-      getItemEvents,
-      getMenuEvents,
-      getDomStyle,
-      handleFixedMenu,
-      getMixSideFixed,
-      getWrapStyle,
-      getCollapsed,
+      onMouseenter: () => handleModuleClick(item.path, true),
+      onClick: async () => {
+        const children = await getChildrenMenus(item.path)
+        if (item.path && (!children || children.length === 0))
+          go(item.path)
+      },
     }
-  },
+  }
+  return {
+    onClick: () => handleModuleClick(item.path),
+  }
+}
+
+function handleFixedMenu() {
+  setMenuSetting({
+    mixSideFixed: !unref(getIsFixed),
+  })
+}
+
+// Close menu
+function closeMenu() {
+  if (!unref(getIsFixed))
+    openMenu.value = false
+}
+
+onClickOutside(wrap, () => {
+  handleClickOutside()
 })
 </script>
 
 <template>
   <div :class="`${prefixCls}-dom`" :style="getDomStyle" />
   <div
-    v-click-outside="handleClickOutside"
+    ref="wrap"
     :style="getWrapStyle"
     :class="[
       prefixCls,

From 5b27f87ef3a24c613472a111c7f4504d92cc8d84 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Fri, 22 Sep 2023 18:08:20 +0800
Subject: [PATCH 04/18] chore: update deps

---
 README.md      |   4 +-
 package.json   |  12 +-
 pnpm-lock.yaml | 323 +++++++++++++++++++++++++------------------------
 3 files changed, 170 insertions(+), 169 deletions(-)

diff --git a/README.md b/README.md
index 517288d9..f24bb958 100644
--- a/README.md
+++ b/README.md
@@ -35,8 +35,8 @@
 | [pinia](https://pinia.vuejs.org/)                                    | Vue 存储库 替代 vuex5 | 2.1.6  |
 | [vueuse](https://vueuse.org/)                                        | 常用工具集            | 10.4.1 |
 | [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化                | 9.4.1  |
-| [vue-router](https://router.vuejs.org/)                              | Vue 路由              | 4.2.4  |
-| [unocss](https://uno.antfu.me/)                                      | 原子 css              | 0.55.7 |
+| [vue-router](https://router.vuejs.org/)                              | Vue 路由              | 4.2.5  |
+| [unocss](https://uno.antfu.me/)                                      | 原子 css              | 0.56.1 |
 | [iconify](https://icon-sets.iconify.design/)                         | 在线图标库            | 3.1.1  |
 
 - ![alt VbenAdmin](https://anncwb.github.io/anncwb/images/preview1.png)
diff --git a/package.json b/package.json
index 104c42e1..8766ca72 100644
--- a/package.json
+++ b/package.json
@@ -76,7 +76,7 @@
     "vue": "^3.3.4",
     "vue-i18n": "^9.4.1",
     "vue-json-pretty": "^2.2.4",
-    "vue-router": "^4.2.4",
+    "vue-router": "^4.2.5",
     "vue-types": "^5.1.1",
     "vuedraggable": "^4.1.0",
     "xlsx": "^0.18.5"
@@ -84,7 +84,7 @@
   "devDependencies": {
     "@commitlint/cli": "^17.7.1",
     "@commitlint/config-conventional": "^17.7.0",
-    "@iconify/json": "^2.2.117",
+    "@iconify/json": "^2.2.119",
     "@purge-icons/generated": "^0.9.0",
     "@types/codemirror": "^5.60.10",
     "@types/crypto-js": "^4.1.2",
@@ -95,7 +95,7 @@
     "@types/nprogress": "^0.2.0",
     "@types/qs": "^6.9.8",
     "@types/sortablejs": "^1.15.2",
-    "@unocss/eslint-config": "^0.56.0",
+    "@unocss/eslint-config": "^0.56.1",
     "@vitejs/plugin-vue": "4.3.4",
     "@vitejs/plugin-vue-jsx": "^3.0.2",
     "@vue/compiler-sfc": "^3.3.4",
@@ -126,9 +126,9 @@
     "stylelint-config-standard": "^34.0.0",
     "stylelint-order": "^6.0.3",
     "stylelint-prettier": "^4.0.2",
-    "terser": "^5.19.4",
+    "terser": "^5.20.0",
     "typescript": "^5.2.2",
-    "unocss": "^0.56.0",
+    "unocss": "^0.56.1",
     "vite": "^4.4.9",
     "vite-plugin-compression": "^0.5.1",
     "vite-plugin-mkcert": "^1.16.0",
@@ -138,7 +138,7 @@
     "vite-plugin-svg-icons": "^2.0.1",
     "vite-vue-plugin-html": "^1.0.2",
     "vue-eslint-parser": "^9.3.1",
-    "vue-tsc": "^1.8.11"
+    "vue-tsc": "^1.8.13"
   },
   "lint-staged": {
     "*.{js,jsx,ts,tsx}": [
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index eff4faa8..63823821 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -96,8 +96,8 @@ dependencies:
     specifier: ^2.2.4
     version: 2.2.4(vue@3.3.4)
   vue-router:
-    specifier: ^4.2.4
-    version: 4.2.4(vue@3.3.4)
+    specifier: ^4.2.5
+    version: 4.2.5(vue@3.3.4)
   vue-types:
     specifier: ^5.1.1
     version: 5.1.1(vue@3.3.4)
@@ -116,8 +116,8 @@ devDependencies:
     specifier: ^17.7.0
     version: 17.7.0
   '@iconify/json':
-    specifier: ^2.2.117
-    version: 2.2.117
+    specifier: ^2.2.119
+    version: 2.2.119
   '@purge-icons/generated':
     specifier: ^0.9.0
     version: 0.9.0
@@ -149,8 +149,8 @@ devDependencies:
     specifier: ^1.15.2
     version: 1.15.2
   '@unocss/eslint-config':
-    specifier: ^0.56.0
-    version: 0.56.0(eslint@8.49.0)(typescript@5.2.2)
+    specifier: ^0.56.1
+    version: 0.56.1(eslint@8.49.0)(typescript@5.2.2)
   '@vitejs/plugin-vue':
     specifier: 4.3.4
     version: 4.3.4(vite@4.4.9)(vue@3.3.4)
@@ -242,17 +242,17 @@ devDependencies:
     specifier: ^4.0.2
     version: 4.0.2(prettier@3.0.3)(stylelint@15.10.3)
   terser:
-    specifier: ^5.19.4
-    version: 5.19.4
+    specifier: ^5.20.0
+    version: 5.20.0
   typescript:
     specifier: ^5.2.2
     version: 5.2.2
   unocss:
-    specifier: ^0.56.0
-    version: 0.56.0(postcss@8.4.30)(rollup@3.29.2)(vite@4.4.9)
+    specifier: ^0.56.1
+    version: 0.56.1(postcss@8.4.30)(rollup@3.29.2)(vite@4.4.9)
   vite:
     specifier: ^4.4.9
-    version: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+    version: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
   vite-plugin-compression:
     specifier: ^0.5.1
     version: 0.5.1(vite@4.4.9)
@@ -278,8 +278,8 @@ devDependencies:
     specifier: ^9.3.1
     version: 9.3.1(eslint@8.49.0)
   vue-tsc:
-    specifier: ^1.8.11
-    version: 1.8.11(typescript@5.2.2)
+    specifier: ^1.8.13
+    version: 1.8.13(typescript@5.2.2)
 
 packages:
 
@@ -2047,8 +2047,8 @@ packages:
     dependencies:
       '@iconify/types': 2.0.0
 
-  /@iconify/json@2.2.117:
-    resolution: {integrity: sha512-JJO8TzYJHq1geopQOOO2B1n5D0brls9RUcgaZ9+B8qpkJ9FZrwLv0gd50lySLqVEruhp8WJg1ujULispbVcOpw==}
+  /@iconify/json@2.2.119:
+    resolution: {integrity: sha512-tYvxJpBds6UgXe6/iq2pW7hblsniDGWuKEwCr8PnSKLmZMilrtzHX7v+pg7FFmV2l2qA2Iw4toMRpe11tWBI4Q==}
     dependencies:
       '@iconify/types': 2.0.0
       pathe: 1.1.1
@@ -2881,32 +2881,32 @@ packages:
       eslint-visitor-keys: 3.4.3
     dev: true
 
-  /@unocss/astro@0.56.0(rollup@3.29.2)(vite@4.4.9):
-    resolution: {integrity: sha512-yBkpp2vc/dH6AiLAZrHC+trpR16VN4SiMVPgiy/UREj9BHJXVwFxFscjqXnuNP1vaxmVEfcvTkph9nJf/+JFjQ==}
+  /@unocss/astro@0.56.1(rollup@3.29.2)(vite@4.4.9):
+    resolution: {integrity: sha512-ivWm69J76DRwCiEFM75qR4WPMCC6nyOrUM5iQDTypwKbBX26XlXcYYCN3DLoQTmWdp5f2BubZXAg3KIdgVxrYg==}
     peerDependencies:
       vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0
     peerDependenciesMeta:
       vite:
         optional: true
     dependencies:
-      '@unocss/core': 0.56.0
-      '@unocss/reset': 0.56.0
-      '@unocss/vite': 0.56.0(rollup@3.29.2)(vite@4.4.9)
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+      '@unocss/core': 0.56.1
+      '@unocss/reset': 0.56.1
+      '@unocss/vite': 0.56.1(rollup@3.29.2)(vite@4.4.9)
+      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - rollup
     dev: true
 
-  /@unocss/cli@0.56.0(rollup@3.29.2):
-    resolution: {integrity: sha512-+SD7Pd6xTHj4lW5vZXtebLnCAdhyjrNWsfBHK8exjZF6PVbJWW3wfZ1cBPqveWvS8/1kqsMp2I3GFORKjBiFoQ==}
+  /@unocss/cli@0.56.1(rollup@3.29.2):
+    resolution: {integrity: sha512-s7lRtPkNw7GXdej3uYKFgfyal3Bq0Ux9oJKQ3rV7ysvY5AMfHs+ayc1EC6vXsAunziJ39dloPrRY5cx1H7abkQ==}
     engines: {node: '>=14'}
     hasBin: true
     dependencies:
       '@ampproject/remapping': 2.2.1
       '@rollup/pluginutils': 5.0.4(rollup@3.29.2)
-      '@unocss/config': 0.56.0
-      '@unocss/core': 0.56.0
-      '@unocss/preset-uno': 0.56.0
+      '@unocss/config': 0.56.1
+      '@unocss/core': 0.56.1
+      '@unocss/preset-uno': 0.56.1
       cac: 6.7.14
       chokidar: 3.5.3
       colorette: 2.0.20
@@ -2919,36 +2919,36 @@ packages:
       - rollup
     dev: true
 
-  /@unocss/config@0.56.0:
-    resolution: {integrity: sha512-TGyh3Ns15rKPRrVmiqcF9BcZ9yC0fixxwUGm49a2rQ91GOKNIZ6O/tX2MHxoncU/Sp2ZkrRreoT8fsEejfHAYg==}
+  /@unocss/config@0.56.1:
+    resolution: {integrity: sha512-ZwKWtbMfg38laUNwjERkiTo3JKCgpw+hZMBqbbr2N4Rhc1ZaT4EJyQmcc/+P05JoNNr+ueYMoCMOCOtn/wuheQ==}
     engines: {node: '>=14'}
     dependencies:
-      '@unocss/core': 0.56.0
+      '@unocss/core': 0.56.1
       unconfig: 0.3.10
     dev: true
 
-  /@unocss/core@0.56.0:
-    resolution: {integrity: sha512-KpaEMCg5XnTK7aQRgwNWoPCAFLEmPGjw+OSZWuMtkGvMr4RwDAVUAqPdGyGOavKMyWs+Is+lxXL5NHy9nhZ2oA==}
+  /@unocss/core@0.56.1:
+    resolution: {integrity: sha512-2qmb/+hQ2CXmIgSqaeL6Pw2reO2MxsZlLMFuu71J8T3+UKrkI9NAwkZ4sdb38EoOisVIr2lvE48uc44XBfaOdg==}
     dev: true
 
-  /@unocss/eslint-config@0.56.0(eslint@8.49.0)(typescript@5.2.2):
-    resolution: {integrity: sha512-TRzCx+5gNwakFY9BXIVTctRcO+h4JB7WdayfwZ5T2eYRB1DLhdiGg2gJTlPtVQV0DzIdza+BCDbg9W+dGiC/lQ==}
+  /@unocss/eslint-config@0.56.1(eslint@8.49.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-ph1w2FO+wCHq0jz0iQyxUbjwLSVjSz6wQ2yd0fCsm6mHNlewWHmu6gD3Grs9j5XDyFJEwz4HZZRHspJanqSJyA==}
     engines: {node: '>=14'}
     dependencies:
-      '@unocss/eslint-plugin': 0.56.0(eslint@8.49.0)(typescript@5.2.2)
+      '@unocss/eslint-plugin': 0.56.1(eslint@8.49.0)(typescript@5.2.2)
     transitivePeerDependencies:
       - eslint
       - supports-color
       - typescript
     dev: true
 
-  /@unocss/eslint-plugin@0.56.0(eslint@8.49.0)(typescript@5.2.2):
-    resolution: {integrity: sha512-hjGWM6eJawYuXcdEB/Tg5hmcT9SnqzMrwSRwPyVhEmaPZV/3pqJWXbrPessMMH0ZeTKhBd4au79Zb7ZmoWcnJA==}
+  /@unocss/eslint-plugin@0.56.1(eslint@8.49.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-WLTybFXK9FJUMmEdUBa4Yj6uZx4qTCThGVej5Rn3XA+5f58zNmcSbipUG5oz16Z/QqYKP8iKhtg5zAQJMi0erg==}
     engines: {node: '>=14'}
     dependencies:
       '@typescript-eslint/utils': 6.7.2(eslint@8.49.0)(typescript@5.2.2)
-      '@unocss/config': 0.56.0
-      '@unocss/core': 0.56.0
+      '@unocss/config': 0.56.1
+      '@unocss/core': 0.56.1
       magic-string: 0.30.3
       synckit: 0.8.5
     transitivePeerDependencies:
@@ -2957,158 +2957,159 @@ packages:
       - typescript
     dev: true
 
-  /@unocss/extractor-arbitrary-variants@0.56.0:
-    resolution: {integrity: sha512-OtdDsief0sqzYkS0GH9+LYUWojOjisjYjk5nLBI9lMfU23l/G76T2BzN8/W19MjUEs80relP4nO/ruefJn0hvw==}
+  /@unocss/extractor-arbitrary-variants@0.56.1:
+    resolution: {integrity: sha512-2vEcVwUTpC0yROjvKGjR3HSE8jaf1cwQqL+Ba5oP+Y4Vrjlf8hqvoSowgVT+wp/ecPH8z82xFNhS+XMOdgXpGA==}
     dependencies:
-      '@unocss/core': 0.56.0
+      '@unocss/core': 0.56.1
     dev: true
 
-  /@unocss/inspector@0.56.0:
-    resolution: {integrity: sha512-YGIyDe0eDzf0XhIHZRxZFV4xGKIA8jGBQ/rOF9k32Z8hyJ3jdJYf7s/ckA6s1kYxFq4qFmznylWeuh8JSUHeMg==}
+  /@unocss/inspector@0.56.1:
+    resolution: {integrity: sha512-PJ3MEwOvUjLaiySPQQKlw0XgwpReNK7c+nDX0D8ZBmUyw3swSn8wSar2cCOLsKLRtKRRp4kz1brM/BaleyYyeg==}
     dependencies:
-      '@unocss/rule-utils': 0.56.0
+      '@unocss/rule-utils': 0.56.1
       gzip-size: 6.0.0
       sirv: 2.0.3
     dev: true
 
-  /@unocss/postcss@0.56.0(postcss@8.4.30):
-    resolution: {integrity: sha512-4wYpu8u8fjEeDvpA7m7Sq2wdIcXdoRSuu2HG/co7uqdXJJD6dQtOgI5Q0ooyPhWNx4w3zBCfaADBxfIcWsZotg==}
+  /@unocss/postcss@0.56.1(postcss@8.4.30):
+    resolution: {integrity: sha512-8jUS5ynopvMbZmdUQhGv+lvKziuAPHHl9LaZzCJ4uHgPOwITNXWTi4dmNbytdYC3iYPQ++8eOph93VPCxdqVsw==}
     engines: {node: '>=14'}
     peerDependencies:
       postcss: ^8.4.21
     dependencies:
-      '@unocss/config': 0.56.0
-      '@unocss/core': 0.56.0
+      '@unocss/config': 0.56.1
+      '@unocss/core': 0.56.1
+      '@unocss/rule-utils': 0.56.1
       css-tree: 2.3.1
       fast-glob: 3.3.1
       magic-string: 0.30.3
       postcss: 8.4.30
     dev: true
 
-  /@unocss/preset-attributify@0.56.0:
-    resolution: {integrity: sha512-0K+dy8Ey081Tgn1beADIrGmO3yhthM5KVqz+E+ni4o9paZg1DrBXnKA1Y8+fK3fEE1LmKK1hGhBrx68gCFX7XA==}
+  /@unocss/preset-attributify@0.56.1:
+    resolution: {integrity: sha512-z+riyM9Fl+aYReg3cgxDRrI52teOL6ebj1UkMOje5sXuhneEQobUkg3k4Oi9NGTdalO5PU/jwcYCNfVksMPWZg==}
     dependencies:
-      '@unocss/core': 0.56.0
+      '@unocss/core': 0.56.1
     dev: true
 
-  /@unocss/preset-icons@0.56.0:
-    resolution: {integrity: sha512-b0WrDmChgk+5db6LSiZkCZ3wUInntFU82bbNSspE3DhCSsaNP0S6vxK6RGlyNuQayodsoW3gqThVuND8KYj7kg==}
+  /@unocss/preset-icons@0.56.1:
+    resolution: {integrity: sha512-Jwyy7i39Hvt4gf+/vtlIcKucNP2y7IV5nF9KPuDnikho4xS/D24z3lbUclrscbH8XGfRcsUzGHI/y+8gD7zZjQ==}
     dependencies:
       '@iconify/utils': 2.1.10
-      '@unocss/core': 0.56.0
+      '@unocss/core': 0.56.1
       ofetch: 1.3.3
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@unocss/preset-mini@0.56.0:
-    resolution: {integrity: sha512-uEdaiWF4RiU+RFtQjiv0R3RDRjNV+OFa3C+xVELLOIROnvb+h/D2wVxC8t8qOuVe8I6cHsGJgWfEpT3ptDhxqQ==}
+  /@unocss/preset-mini@0.56.1:
+    resolution: {integrity: sha512-hOujmUN5kiA7KCkH1mUFf3cStsa3WZTi3g/I91VQ8EM4S6R7aRvME7LBXlb38z68+pckoDLhOhbN7gSg2iZTjA==}
     dependencies:
-      '@unocss/core': 0.56.0
-      '@unocss/extractor-arbitrary-variants': 0.56.0
-      '@unocss/rule-utils': 0.56.0
+      '@unocss/core': 0.56.1
+      '@unocss/extractor-arbitrary-variants': 0.56.1
+      '@unocss/rule-utils': 0.56.1
     dev: true
 
-  /@unocss/preset-tagify@0.56.0:
-    resolution: {integrity: sha512-8FBHa+yPEFQ26BcqgBUrlLX7ThoMPRbH2AjQCk0RpgVhhy6OBweOFXmE0FhcOpNnM6DJadA6vlp3bTXZ0epqVA==}
+  /@unocss/preset-tagify@0.56.1:
+    resolution: {integrity: sha512-cd1McbaEpoerduOt8dA6MOkVZQIutuF3dHyjrI/pXbDtoyzBWjT9MLEeV77Hlz3S09+9cqGZddBBkqo0WGsM0w==}
     dependencies:
-      '@unocss/core': 0.56.0
+      '@unocss/core': 0.56.1
     dev: true
 
-  /@unocss/preset-typography@0.56.0:
-    resolution: {integrity: sha512-CF1dz+00TqTxQSIRkmCaUMk6+bB77z6PWB0VbxxpeYgpxKU1yC247tcBDmrQGhp1NmO4zr9COGEnl/o++OEXmQ==}
+  /@unocss/preset-typography@0.56.1:
+    resolution: {integrity: sha512-3p+dWEtMDe8MSPbUZseS94OpdYbv/pMTs2K1NBysE5BjIEVlyxRNWcZ8FC6risAJ1U0Ouctb6BqP6IA8r9BiWQ==}
     dependencies:
-      '@unocss/core': 0.56.0
-      '@unocss/preset-mini': 0.56.0
+      '@unocss/core': 0.56.1
+      '@unocss/preset-mini': 0.56.1
     dev: true
 
-  /@unocss/preset-uno@0.56.0:
-    resolution: {integrity: sha512-DlTZZ4kS6BEwJTTp5ly86UdhnUhCfgctRDv6gT8LYcji7VInYEPdTA0+Szy7PZtQFeQE8E3kONsiKuoVlwLtPw==}
+  /@unocss/preset-uno@0.56.1:
+    resolution: {integrity: sha512-rNnjpmnfrP/1P462dyELBQHe5NDlFSrJevwjCpAOeFXdO0XCCULpHokuaovZYwesNvzzWu+cZequya38n5hkSw==}
     dependencies:
-      '@unocss/core': 0.56.0
-      '@unocss/preset-mini': 0.56.0
-      '@unocss/preset-wind': 0.56.0
-      '@unocss/rule-utils': 0.56.0
+      '@unocss/core': 0.56.1
+      '@unocss/preset-mini': 0.56.1
+      '@unocss/preset-wind': 0.56.1
+      '@unocss/rule-utils': 0.56.1
     dev: true
 
-  /@unocss/preset-web-fonts@0.56.0:
-    resolution: {integrity: sha512-25BSNm29oOY9N37awVV902cmdGd3e8G1EdVm0kqA7YxwUViSdoej0C1R+i27WsrBPtwpLyulRjrjWgtxM/3E8g==}
+  /@unocss/preset-web-fonts@0.56.1:
+    resolution: {integrity: sha512-SO2ZjrcFSi02QgQT3UVUtIlZE59A92gB1pzmYTMGZhjhmxqq6aghvBKEC00LfnQ200MRtAawgiZ+5Xysi/XsGg==}
     dependencies:
-      '@unocss/core': 0.56.0
+      '@unocss/core': 0.56.1
       ofetch: 1.3.3
     dev: true
 
-  /@unocss/preset-wind@0.56.0:
-    resolution: {integrity: sha512-P978d2+kc/LALmDO8bG00oCvAAA2EGW0mIzoZRM+eb5zWSDEkkSuC+YoiLehbByRkw0voAMgqobWxYIb2GUmfg==}
+  /@unocss/preset-wind@0.56.1:
+    resolution: {integrity: sha512-/fR0eYlmezu6R3wWvN5zVNAfOE6rcC1CsEZKH0SdwchMvNDjJNd0rmAechI2BnVBaa3++H2Cz+0AfCDEP8tsjg==}
     dependencies:
-      '@unocss/core': 0.56.0
-      '@unocss/preset-mini': 0.56.0
-      '@unocss/rule-utils': 0.56.0
+      '@unocss/core': 0.56.1
+      '@unocss/preset-mini': 0.56.1
+      '@unocss/rule-utils': 0.56.1
     dev: true
 
-  /@unocss/reset@0.56.0:
-    resolution: {integrity: sha512-zTvUeN4Dkn+DY8YFHjKd+hfIpqcsNOKOeD0M64fWVjD0LmuuyuFASySYEGjlfvEEUjDiyNg96SnTXyOETYDclg==}
+  /@unocss/reset@0.56.1:
+    resolution: {integrity: sha512-nfzLKv2W9Y3fZLny6lYTroa/YExczGYHsVPCBPGkVt0TrM0yDA+ZKOHbN93b5myY9hzJ3pHTEQmYFsFwzzr6Kg==}
     dev: true
 
-  /@unocss/rule-utils@0.56.0:
-    resolution: {integrity: sha512-ozxI/KlAZmvRlsVy+oysuCXoxXm6141QsYwH1q8heIBBVTOY1jku82VveCfv4ZWrewYkgd27ME7e77ArfGLzyw==}
+  /@unocss/rule-utils@0.56.1:
+    resolution: {integrity: sha512-mmmbx10eELAyhYZqBWlQFPOafnL1hHp2fo18rUbZLedvMJWds3Z23Q/u3VKEpJnCszNkr03BXVwscR5+ZdF4uw==}
     engines: {node: '>=14'}
     dependencies:
-      '@unocss/core': 0.56.0
+      '@unocss/core': 0.56.1
     dev: true
 
-  /@unocss/scope@0.56.0:
-    resolution: {integrity: sha512-zGUxAhHh04cqzBgfsAFjQg4xsna+3Y9ST1G/Lcs3CNzm9GC/SSPwcNzFel+r75Wtx/2WlhjmWCnK5gOzRR3l6Q==}
+  /@unocss/scope@0.56.1:
+    resolution: {integrity: sha512-qIq/JuibrVOAJw/TCUm54XwHRcDImgrb1abZVuaicFh6fjmpdOi/iglYxoFqXS5gusp0m2vNnOLbaBB4LrPf5Q==}
     dev: true
 
-  /@unocss/transformer-attributify-jsx-babel@0.56.0:
-    resolution: {integrity: sha512-wOMAr5TnGOZgc6Pqkdecg3O3x1kH7lsyDQxsTqZz3CjYDr9iJMWdRir3UwQVTxg6Xy/BfRE0Qe7LcFIR0BJPHg==}
+  /@unocss/transformer-attributify-jsx-babel@0.56.1:
+    resolution: {integrity: sha512-8+l4tfifHiSnga3iaxqXfAMgEJG7yLphKPDSm6DHEMUqKeia9rn3V/bABx5KZxpMmnH6FoiYboJL4uf5W58a5Q==}
     dependencies:
-      '@unocss/core': 0.56.0
+      '@unocss/core': 0.56.1
     dev: true
 
-  /@unocss/transformer-attributify-jsx@0.56.0:
-    resolution: {integrity: sha512-g1zc7y/oLsSi6qH2GwdfWwWaG6w/hQaL3XyOJ0hpn86N8qcLbeeH7IJdnrGXX1R/w7Z0t9Lz9lhGb+UP3ymmfQ==}
+  /@unocss/transformer-attributify-jsx@0.56.1:
+    resolution: {integrity: sha512-2dQ7immRBnZJQ9aU+VIiAbcFCycXq8yXG2RPd82Pl0tAV8f5DtLbbuTC5mzo5lGOhuXJ+/u+IpuL9xchjOV7WQ==}
     dependencies:
-      '@unocss/core': 0.56.0
+      '@unocss/core': 0.56.1
     dev: true
 
-  /@unocss/transformer-compile-class@0.56.0:
-    resolution: {integrity: sha512-8+CKMGk5qBe3I1/c8DoggWuhVmZ/6QlTHpLRs5Xt6LS5CF2vrLhjyqMNnBvVcp8OKTeAfv2U6kGKPXFSvSEVUA==}
+  /@unocss/transformer-compile-class@0.56.1:
+    resolution: {integrity: sha512-v3ICzTWj3oQ1S6qkGzg/oyzrk05ZgdcvjYFSZlgBIu2iUJldBhO0+7ZMuDpniaT21GjJvukLwiWrOF4mYyJCyg==}
     dependencies:
-      '@unocss/core': 0.56.0
+      '@unocss/core': 0.56.1
     dev: true
 
-  /@unocss/transformer-directives@0.56.0:
-    resolution: {integrity: sha512-6WthoetYrDDKamuYfsRbX+R3scyomcxA10YV8VlZ19hJIyIhZdCWEoyLccVsS4+uBIZUo0RjhxaxwyYtPa1dBQ==}
+  /@unocss/transformer-directives@0.56.1:
+    resolution: {integrity: sha512-Pwh+JUxxn8ECqpEWETeD38OON5Y2oYAOC1CFKAyXoK22J7f51THoS07z2rZpDNdQA2T/szxenNCdRt72/NJ/pg==}
     dependencies:
-      '@unocss/core': 0.56.0
-      '@unocss/rule-utils': 0.56.0
+      '@unocss/core': 0.56.1
+      '@unocss/rule-utils': 0.56.1
       css-tree: 2.3.1
     dev: true
 
-  /@unocss/transformer-variant-group@0.56.0:
-    resolution: {integrity: sha512-4QLGUPD2ephvrSemIapiL3ckr1xcdcjxk/VZ/SOobLrHyxCLzLaHZz6x7RabCWf2Ub/01xWtLY3eSNIphZ5iSg==}
+  /@unocss/transformer-variant-group@0.56.1:
+    resolution: {integrity: sha512-UwXNcW00R6MjHZajy8lmSfwWDwhnvd+rF9eRGfcJTEzWr+LtEmgw8SJBr7STCB4ZwRE37NIp4oLLl1jF8omGNg==}
     dependencies:
-      '@unocss/core': 0.56.0
+      '@unocss/core': 0.56.1
     dev: true
 
-  /@unocss/vite@0.56.0(rollup@3.29.2)(vite@4.4.9):
-    resolution: {integrity: sha512-QFuX2jHYiNCdzffxVyBuECnkaaQzYkvf+P3VU/yNyUuH9DAzSIBVEpS04dRQQ7IdQiVduIpldL+IgUr/qW+IUA==}
+  /@unocss/vite@0.56.1(rollup@3.29.2)(vite@4.4.9):
+    resolution: {integrity: sha512-IztLc304zP2LYQMsP3yVHmLwXlLUgCY3q6Nkqw6Hpds7l5JXBsE7Q19DtNW+4nDOp9wvWhw7CjQLmoh8d+V0lQ==}
     peerDependencies:
       vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0
     dependencies:
       '@ampproject/remapping': 2.2.1
       '@rollup/pluginutils': 5.0.4(rollup@3.29.2)
-      '@unocss/config': 0.56.0
-      '@unocss/core': 0.56.0
-      '@unocss/inspector': 0.56.0
-      '@unocss/scope': 0.56.0
-      '@unocss/transformer-directives': 0.56.0
+      '@unocss/config': 0.56.1
+      '@unocss/core': 0.56.1
+      '@unocss/inspector': 0.56.1
+      '@unocss/scope': 0.56.1
+      '@unocss/transformer-directives': 0.56.1
       chokidar: 3.5.3
       fast-glob: 3.3.1
       magic-string: 0.30.3
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - rollup
     dev: true
@@ -3168,7 +3169,7 @@ packages:
       '@babel/core': 7.22.17
       '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.22.17)
       '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.22.17)
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
       vue: 3.3.4
     transitivePeerDependencies:
       - supports-color
@@ -3181,7 +3182,7 @@ packages:
       vite: ^4.0.0
       vue: ^3.2.25
     dependencies:
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
       vue: 3.3.4
     dev: true
 
@@ -3264,8 +3265,8 @@ packages:
     resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
     dev: false
 
-  /@vue/language-core@1.8.11(typescript@5.2.2):
-    resolution: {integrity: sha512-+MZOBGqGwfld6hpo0DB47x8eNM0dNqk15ZdfOhj19CpvuYuOWCeVdOEGZunKDyo3QLkTn3kLOSysJzg7FDOQBA==}
+  /@vue/language-core@1.8.13(typescript@5.2.2):
+    resolution: {integrity: sha512-nata2fYBZAkl4QJrU+IcArJCMTHt1VP8ePL/Z7eUPC2AF+Cm7Qgo9ksNCPBzZRh1LYjCaSaqV7njqNogwpsMVg==}
     peerDependencies:
       typescript: '*'
     peerDependenciesMeta:
@@ -3322,11 +3323,11 @@ packages:
   /@vue/shared@3.3.4:
     resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
 
-  /@vue/typescript@1.8.11(typescript@5.2.2):
-    resolution: {integrity: sha512-skUmMDiPUUtu1flPmf2YybF+PX8IzBtMioQOaNn6Ck/RhdrPJGj1AX/7s3Buf9G6ln+/KHR1XQuti/FFxw5XVA==}
+  /@vue/typescript@1.8.13(typescript@5.2.2):
+    resolution: {integrity: sha512-ALJjHFqQ3dgZVCI/ogAS/dZ7JEhIi1N0Em5I7uwabY1p9RDRK3odLsycMHyxZRjm5dLI15c07eeBloHiD2Otlg==}
     dependencies:
       '@volar/typescript': 1.10.1
-      '@vue/language-core': 1.8.11(typescript@5.2.2)
+      '@vue/language-core': 1.8.13(typescript@5.2.2)
     transitivePeerDependencies:
       - typescript
     dev: true
@@ -5969,7 +5970,7 @@ packages:
       entities: 4.5.0
       param-case: 3.0.4
       relateurl: 0.2.7
-      terser: 5.19.4
+      terser: 5.20.0
     dev: true
 
   /html-tags@3.3.1:
@@ -8149,7 +8150,7 @@ packages:
       jest-worker: 26.6.2
       rollup: 2.79.1
       serialize-javascript: 4.0.0
-      terser: 5.19.4
+      terser: 5.20.0
     dev: true
 
   /rollup-plugin-visualizer@5.9.2(rollup@3.29.2):
@@ -8895,8 +8896,8 @@ packages:
       unique-string: 2.0.0
     dev: true
 
-  /terser@5.19.4:
-    resolution: {integrity: sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==}
+  /terser@5.20.0:
+    resolution: {integrity: sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==}
     engines: {node: '>=10'}
     hasBin: true
     dependencies:
@@ -9250,11 +9251,11 @@ packages:
     engines: {node: '>= 10.0.0'}
     dev: true
 
-  /unocss@0.56.0(postcss@8.4.30)(rollup@3.29.2)(vite@4.4.9):
-    resolution: {integrity: sha512-Ge0lMi1zYL2z/NCv0OMeYMUeLsjQGNeohSc/3qumEtGhBNiGrF6sVX80BnJ99fAFsn80nxJepWbCApUmZ/2tJA==}
+  /unocss@0.56.1(postcss@8.4.30)(rollup@3.29.2)(vite@4.4.9):
+    resolution: {integrity: sha512-jjkcyXfW90CUjN4tBV6SrHX9ifi5GQgcwAQlMRB0copJEW3ejM/nyZnRgNexaV7hi7Ao76XMVqCKbOC5B+IuOA==}
     engines: {node: '>=14'}
     peerDependencies:
-      '@unocss/webpack': 0.56.0
+      '@unocss/webpack': 0.56.1
       vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0
     peerDependenciesMeta:
       '@unocss/webpack':
@@ -9262,27 +9263,27 @@ packages:
       vite:
         optional: true
     dependencies:
-      '@unocss/astro': 0.56.0(rollup@3.29.2)(vite@4.4.9)
-      '@unocss/cli': 0.56.0(rollup@3.29.2)
-      '@unocss/core': 0.56.0
-      '@unocss/extractor-arbitrary-variants': 0.56.0
-      '@unocss/postcss': 0.56.0(postcss@8.4.30)
-      '@unocss/preset-attributify': 0.56.0
-      '@unocss/preset-icons': 0.56.0
-      '@unocss/preset-mini': 0.56.0
-      '@unocss/preset-tagify': 0.56.0
-      '@unocss/preset-typography': 0.56.0
-      '@unocss/preset-uno': 0.56.0
-      '@unocss/preset-web-fonts': 0.56.0
-      '@unocss/preset-wind': 0.56.0
-      '@unocss/reset': 0.56.0
-      '@unocss/transformer-attributify-jsx': 0.56.0
-      '@unocss/transformer-attributify-jsx-babel': 0.56.0
-      '@unocss/transformer-compile-class': 0.56.0
-      '@unocss/transformer-directives': 0.56.0
-      '@unocss/transformer-variant-group': 0.56.0
-      '@unocss/vite': 0.56.0(rollup@3.29.2)(vite@4.4.9)
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+      '@unocss/astro': 0.56.1(rollup@3.29.2)(vite@4.4.9)
+      '@unocss/cli': 0.56.1(rollup@3.29.2)
+      '@unocss/core': 0.56.1
+      '@unocss/extractor-arbitrary-variants': 0.56.1
+      '@unocss/postcss': 0.56.1(postcss@8.4.30)
+      '@unocss/preset-attributify': 0.56.1
+      '@unocss/preset-icons': 0.56.1
+      '@unocss/preset-mini': 0.56.1
+      '@unocss/preset-tagify': 0.56.1
+      '@unocss/preset-typography': 0.56.1
+      '@unocss/preset-uno': 0.56.1
+      '@unocss/preset-web-fonts': 0.56.1
+      '@unocss/preset-wind': 0.56.1
+      '@unocss/reset': 0.56.1
+      '@unocss/transformer-attributify-jsx': 0.56.1
+      '@unocss/transformer-attributify-jsx-babel': 0.56.1
+      '@unocss/transformer-compile-class': 0.56.1
+      '@unocss/transformer-directives': 0.56.1
+      '@unocss/transformer-variant-group': 0.56.1
+      '@unocss/vite': 0.56.1(rollup@3.29.2)(vite@4.4.9)
+      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - postcss
       - rollup
@@ -9409,7 +9410,7 @@ packages:
       chalk: 4.1.2
       debug: 4.3.4
       fs-extra: 10.1.0
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -9424,7 +9425,7 @@ packages:
       axios: 1.5.0(debug@4.3.4)
       debug: 4.3.4
       picocolors: 1.0.0
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - encoding
       - supports-color
@@ -9439,7 +9440,7 @@ packages:
       picocolors: 1.0.0
       progress: 2.0.3
       rd: 2.0.1
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
     dev: true
 
   /vite-plugin-purge-icons@0.9.2(vite@4.4.9):
@@ -9451,7 +9452,7 @@ packages:
       '@purge-icons/core': 0.9.1
       '@purge-icons/generated': 0.9.0
       rollup-plugin-purge-icons: 0.9.1
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - encoding
       - supports-color
@@ -9468,7 +9469,7 @@ packages:
       debug: 4.3.4
       fast-glob: 3.3.1
       pretty-bytes: 6.1.1
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
       workbox-build: 7.0.0
       workbox-window: 7.0.0
     transitivePeerDependencies:
@@ -9488,7 +9489,7 @@ packages:
       pathe: 0.2.0
       svg-baker: 1.7.0
       svgo: 2.8.0
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -9510,12 +9511,12 @@ packages:
       html-minifier-terser: 7.2.0
       node-html-parser: 6.1.9
       pathe: 1.1.1
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4)
+      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - rollup
     dev: true
 
-  /vite@4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.19.4):
+  /vite@4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0):
     resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
     engines: {node: ^14.18.0 || >=16.0.0}
     hasBin: true
@@ -9548,7 +9549,7 @@ packages:
       less: 4.2.0
       postcss: 8.4.30
       rollup: 3.29.2
-      terser: 5.19.4
+      terser: 5.20.0
     optionalDependencies:
       fsevents: 2.3.3
     dev: true
@@ -9607,8 +9608,8 @@ packages:
       vue: 3.3.4
     dev: false
 
-  /vue-router@4.2.4(vue@3.3.4):
-    resolution: {integrity: sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==}
+  /vue-router@4.2.5(vue@3.3.4):
+    resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==}
     peerDependencies:
       vue: ^3.2.0
     dependencies:
@@ -9623,14 +9624,14 @@ packages:
       he: 1.2.0
     dev: true
 
-  /vue-tsc@1.8.11(typescript@5.2.2):
-    resolution: {integrity: sha512-BzfiMdPqDHBlysx4g26NkfVHSQwGD/lTRausmxN9sFyjXz34OWfsbkh0YsVkX84Hu65In1fFlxHiG39Tr4Vojg==}
+  /vue-tsc@1.8.13(typescript@5.2.2):
+    resolution: {integrity: sha512-Hl8zUXPVK2KzPtbXeMCN0CSFkwvD96YOtYt9KvJPG9W8QGcNpGk9KHwPuGMxA8blWXSIli7gtsoC+clICEVdVg==}
     hasBin: true
     peerDependencies:
       typescript: '*'
     dependencies:
-      '@vue/language-core': 1.8.11(typescript@5.2.2)
-      '@vue/typescript': 1.8.11(typescript@5.2.2)
+      '@vue/language-core': 1.8.13(typescript@5.2.2)
+      '@vue/typescript': 1.8.13(typescript@5.2.2)
       semver: 7.5.4
       typescript: 5.2.2
     dev: true

From 96501ceb002fe81bf1defc8d75ab4c59521ec83b Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Fri, 22 Sep 2023 18:13:06 +0800
Subject: [PATCH 05/18] fix: eslint

---
 .../Application/src/AppDarkModeToggle.vue     |   2 +-
 .../modules/FormComponentPanel.vue            | 139 ++++++++----------
 2 files changed, 65 insertions(+), 76 deletions(-)

diff --git a/src/components/Application/src/AppDarkModeToggle.vue b/src/components/Application/src/AppDarkModeToggle.vue
index 7cde953f..66ac4690 100644
--- a/src/components/Application/src/AppDarkModeToggle.vue
+++ b/src/components/Application/src/AppDarkModeToggle.vue
@@ -35,7 +35,7 @@ function toggleDarkMode() {
     @click="toggleDarkMode"
   >
     <div
-      class="dark:(transform translateX(calc(100% + 2px))) absolute z-1 h-4.5 w-4.5 rounded-1/2 bg-white will-change-transform"
+      class="absolute z-1 h-4.5 w-4.5 rounded-1/2 bg-white will-change-transform"
     />
     <SvgIcon size="14" name="sun" />
     <SvgIcon size="14" name="moon" />
diff --git a/src/components/FormDesign/src/components/VFormDesign/modules/FormComponentPanel.vue b/src/components/FormDesign/src/components/VFormDesign/modules/FormComponentPanel.vue
index 9c16a3fd..ab950c5b 100644
--- a/src/components/FormDesign/src/components/VFormDesign/modules/FormComponentPanel.vue
+++ b/src/components/FormDesign/src/components/VFormDesign/modules/FormComponentPanel.vue
@@ -4,7 +4,7 @@
 -->
 <script lang="ts" setup>
 import draggable from 'vuedraggable'
-import { computed, defineComponent } from 'vue'
+import { computed } from 'vue'
 import { cloneDeep } from 'lodash-es'
 import { Empty, Form } from 'ant-design-vue'
 import { useFormDesignState } from '../../../hooks/useFormDesignState'
@@ -12,7 +12,7 @@ import LayoutItem from '../components/LayoutItem.vue'
 
 const emit = defineEmits(['handleSetSelectItem'])
 
-const  Draggable = draggable
+const Draggable = draggable
 
 const { formConfig } = useFormDesignState()
 
@@ -46,30 +46,17 @@ const layoutTag = computed(() => {
 
 <template>
   <div class="v-form-container form-panel">
-    <Empty
-      v-show="formConfig.schemas.length === 0"
-      class="empty-text"
-      description="从左侧选择控件添加"
-    />
+    <Empty v-show="formConfig.schemas.length === 0" class="empty-text" description="从左侧选择控件添加" />
     <Form v-bind="formConfig">
       <div class="draggable-box">
         <Draggable
-          v-model="formConfig.schemas"
-          class="list-main ant-row"
-          group="form-draggable"
-          :component-data="{ name: 'list', tag: 'div', type: 'transition-group' }"
-          ghost-class="moving"
-          :animation="180"
-          handle=".drag-move"
-          item-key="key"
-          @add="addItem"
-          @start="handleDragStart"
+          v-model="formConfig.schemas" class="list-main ant-row" group="form-draggable"
+          :component-data="{ name: 'list', tag: 'div', type: 'transition-group' }" ghost-class="moving" :animation="180"
+          handle=".drag-move" item-key="key" @add="addItem" @start="handleDragStart"
         >
           <template #item="{ element }">
             <LayoutItem
-              class="drag-move"
-              :schema="element"
-              :data="formConfig"
+              class="drag-move" :schema="element" :data="formConfig"
               :current-item="formConfig.currentItem || {}"
             />
           </template>
@@ -80,72 +67,74 @@ const layoutTag = computed(() => {
 </template>
 
 <style lang="less" scoped>
-  @import url('../styles/variable.less');
-  @import url('../styles/drag.less');
-
-  .v-form-container {
-    // 内联布局样式
-    .ant-form-inline {
-      .list-main {
-        display: flex;
-        flex-wrap: wrap;
-        align-content: flex-start;
-        justify-content: flex-start;
-
-        .layout-width {
-          width: 100%;
-        }
-      }
+@import url('../styles/variable.less');
+@import url('../styles/drag.less');
+
+.v-form-container {
 
-      .ant-form-item-control-wrapper {
-        min-width: 175px !important;
+  // 内联布局样式
+  .ant-form-inline {
+    .list-main {
+      display: flex;
+      flex-wrap: wrap;
+      align-content: flex-start;
+      justify-content: flex-start;
+
+      .layout-width {
+        width: 100%;
       }
     }
+
+    .ant-form-item-control-wrapper {
+      min-width: 175px !important;
+    }
+  }
+}
+
+.form-panel {
+  position: relative;
+  height: 100%;
+
+  .empty-text {
+    position: absolute;
+    inset: -10% 0 0;
+    z-index: 100;
+    height: 150px;
+    margin: auto;
+    color: #aaa;
   }
 
-  .form-panel {
-    position: relative;
-    height: 100%;
-
-    .empty-text {
-      position: absolute;
-      inset: -10% 0 0;
-      z-index: 100;
-      height: 150px;
-      margin: auto;
-      color: #aaa;
+  .draggable-box {
+    height: calc(100vh - 200px);
+    // width: 100%;
+    overflow: auto;
+
+    .drag-move {
+      min-height: 62px;
+      cursor: move;
     }
 
-    .draggable-box {
-      height: calc(100vh - 200px);
-      // width: 100%;
-      overflow: auto;
+    .list-main {
+
+      // 列表动画
+      .list-enter-active {
+        transition: all 0.5s;
+      }
 
-      .drag-move {
-        min-height: 62px;
-        cursor: move;
+      .list-leave-active {
+        transition: all 0.3s;
       }
 
-      .list-main {
-        // 列表动画
-        .list-enter-active {
-          transition: all 0.5s;
-        }
-
-        .list-leave-active {
-          transition: all 0.3s;
-        }
-
-        .list-enter,
-        .list-leave-to {
-          opacity: 0;
-          transform: translateX(-100px);
-        }
-
-        .list-enter {
-          height: 30px;
-        }
+      .list-enter,
+      .list-leave-to {
+        opacity: 0;
+        transform: translateX(-100px);
+      }
+
+      .list-enter {
+        height: 30px;
       }
     }
   }
+}
 </style>

From b8ac3dd136a0d541d94506c580ec2878fcf66d98 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Sun, 24 Sep 2023 19:55:13 +0800
Subject: [PATCH 06/18] style(TableColumn): fix Column settings container is
 too wide

---
 src/components/Table/src/components/settings/ColumnSetting.vue | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/components/Table/src/components/settings/ColumnSetting.vue b/src/components/Table/src/components/settings/ColumnSetting.vue
index 74460d6f..9763604f 100644
--- a/src/components/Table/src/components/settings/ColumnSetting.vue
+++ b/src/components/Table/src/components/settings/ColumnSetting.vue
@@ -438,6 +438,7 @@ function updateSortOption(column: BasicColumn) {
     }
 
     .ant-checkbox-group {
+      display: inline-block;
       width: 100%;
       min-width: 260px;
       // flex-wrap: wrap;

From e304a37b37d9b095becdf3cffce3ff78dec4d1d2 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Sun, 24 Sep 2023 19:56:35 +0800
Subject: [PATCH 07/18] =?UTF-8?q?feat:=20=E8=A7=A3=E5=86=B3Form=E7=BB=84?=
 =?UTF-8?q?=E4=BB=B6slot=E5=BF=85=E9=A1=BB=E4=BC=A0=E9=80=92component?=
 =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=89=8D=E6=98=BE=E7=A4=BA=E7=9A=84=E9=97=AE?=
 =?UTF-8?q?=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/Form/src/components/FormItem.vue | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/components/Form/src/components/FormItem.vue b/src/components/Form/src/components/FormItem.vue
index 5f5b3c75..0ef96fd3 100644
--- a/src/components/Form/src/components/FormItem.vue
+++ b/src/components/Form/src/components/FormItem.vue
@@ -140,7 +140,8 @@ export default defineComponent({
       const { rulesMessageJoinLabel: globalRulesMessageJoinLabel } = props.formProps
 
       const joinLabel = Reflect.has(props.schema, 'rulesMessageJoinLabel') ? rulesMessageJoinLabel : globalRulesMessageJoinLabel
-      const defaultMsg = `${createPlaceholderMessage(component)}${joinLabel ? label : ''}`
+      const assertLabel = joinLabel ? label : ''
+      const defaultMsg = component ? createPlaceholderMessage(component) + assertLabel : assertLabel
 
       function validator(rule: any, value: any) {
         const msg = rule.message || defaultMsg
@@ -354,8 +355,8 @@ export default defineComponent({
     }
 
     return () => {
-      const { colProps = {}, colSlot, renderColContent, component } = props.schema
-      if (!componentMap.has(component))
+      const { colProps = {}, colSlot, renderColContent, component, slot } = props.schema
+      if (!componentMap.has(component) && !slot)
         return null
 
       const { baseColProps = {} } = props.formProps

From 9dab524b4580f3e2f0411390ce7b1ad66b3195c5 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Sun, 24 Sep 2023 20:33:23 +0800
Subject: [PATCH 08/18] fix: use table

---
 src/components/Table/src/hooks/useCustomRow.ts | 5 +++--
 src/components/Table/src/hooks/useTable.ts     | 4 ++--
 src/components/Table/src/types/table.ts        | 7 ++++---
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/components/Table/src/hooks/useCustomRow.ts b/src/components/Table/src/hooks/useCustomRow.ts
index 90ce9887..2e70e43c 100644
--- a/src/components/Table/src/hooks/useCustomRow.ts
+++ b/src/components/Table/src/hooks/useCustomRow.ts
@@ -1,12 +1,13 @@
 import type { ComputedRef } from 'vue'
 import { unref } from 'vue'
+import type { Key } from 'ant-design-vue/lib/table/interface'
 import type { BasicTableProps } from '../types/table'
 import { ROW_KEY } from '../const'
 import { isFunction, isString } from '@/utils/is'
 
 interface Options {
-  setSelectedRowKeys: (keys: string[]) => void
-  getSelectRowKeys: () => string[]
+  setSelectedRowKeys: (keys: Key[]) => void
+  getSelectRowKeys: () => Key[]
   clearSelectedRowKeys: () => void
   emit: EmitType
   getAutoCreateKey: ComputedRef<boolean | undefined>
diff --git a/src/components/Table/src/hooks/useTable.ts b/src/components/Table/src/hooks/useTable.ts
index 5e8b3c9b..07983fe0 100644
--- a/src/components/Table/src/hooks/useTable.ts
+++ b/src/components/Table/src/hooks/useTable.ts
@@ -163,8 +163,8 @@ export function useTable(tableProps?: Props): [
     scrollTo: (pos: string) => {
       getTableInstance().scrollTo(pos)
     },
-    setShowForm: async (show: boolean) => {
-      await getTableInstance().setShowForm(show)
+    setShowForm: async (flag: boolean) => {
+      await getTableInstance().setShowForm(flag)
     },
     getShowForm: () => {
       return toRaw(getTableInstance().getShowForm())
diff --git a/src/components/Table/src/types/table.ts b/src/components/Table/src/types/table.ts
index d7787871..f8ea22a8 100644
--- a/src/components/Table/src/types/table.ts
+++ b/src/components/Table/src/types/table.ts
@@ -86,7 +86,7 @@ export interface TableActionType {
   expandRows: (keys: (string | number)[]) => void
   collapseAll: () => void
   scrollTo: (pos: string) => void // pos: id | "top" | "bottom"
-  getSelectRowKeys: () => string[]
+  getSelectRowKeys: () => Key[]
   deleteSelectRowByKey: (key: string) => void
   setPagination: (info: Partial<PaginationProps>) => void
   setTableData: <T extends Ref<Recordable<any>[]>>(values: T[]) => void
@@ -108,11 +108,11 @@ export interface TableActionType {
   getCacheColumns: () => BasicColumn[]
   emit?: EmitType
   updateTableData: (index: number, key: string, value: any) => Recordable
-  setShowPagination: (show: boolean) => Promise<void>
+  setShowPagination: (show: boolean) => void
   getShowPagination: () => boolean
   setCacheColumnsByField?: (dataIndex: string | undefined, value: BasicColumn) => void
   setCacheColumns?: (columns: BasicColumn[]) => void
-  setShowForm: (show: boolean) => Promise<void>
+  setShowForm: (flag: boolean) => void
   getShowForm: () => boolean
 }
 
@@ -403,6 +403,7 @@ export interface BasicTableProps<T = any> {
 
 export type CellFormat = string | ((text: string, record: Recordable, index: number) => string | number) | Map<string | number, any>
 
+// eslint-disable-next-line @typescript-eslint/ban-ts-comment
 // @ts-expect-error
 export interface BasicColumn extends ColumnProps<Recordable> {
   children?: BasicColumn[]

From 9c429afec6992d3a035aa39cd82b96660170d306 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Sun, 24 Sep 2023 20:33:32 +0800
Subject: [PATCH 09/18] fix: dark

---
 .../Application/src/AppDarkModeToggle.vue     | 28 +++++++++++++------
 src/components/Modal/src/index.less           |  2 +-
 2 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/src/components/Application/src/AppDarkModeToggle.vue b/src/components/Application/src/AppDarkModeToggle.vue
index 66ac4690..1a51fcad 100644
--- a/src/components/Application/src/AppDarkModeToggle.vue
+++ b/src/components/Application/src/AppDarkModeToggle.vue
@@ -29,14 +29,8 @@ function toggleDarkMode() {
 </script>
 
 <template>
-  <div
-    v-if="getShowDarkModeToggle" :class="getClass"
-    class="relative mr-auto h-6.5 w-12.5 flex cursor-pointer items-center justify-between rounded-4.5 bg-black px-1.5"
-    @click="toggleDarkMode"
-  >
-    <div
-      class="absolute z-1 h-4.5 w-4.5 rounded-1/2 bg-white will-change-transform"
-    />
+  <div v-if="getShowDarkModeToggle" :class="getClass" @click="toggleDarkMode">
+    <div :class="`${prefixCls}-inner`" />
     <SvgIcon size="14" name="sun" />
     <SvgIcon size="14" name="moon" />
   </div>
@@ -52,11 +46,29 @@ html[data-theme='dark'] {
 }
 
 .@{prefix-cls} {
+  position: relative;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  width: 50px;
+  height: 26px;
+  padding: 0 6px;
+  margin-left: auto;
+  cursor: pointer;
+  background-color: #151515;
+  border-radius: 30px;
 
   &-inner {
+    position: absolute;
+    z-index: 1;
+    width: 18px;
+    height: 18px;
+    background-color: #fff;
+    border-radius: 50%;
     transition:
       transform 0.5s,
       background-color 0.5s;
+    will-change: transform;
   }
 
   &--dark {
diff --git a/src/components/Modal/src/index.less b/src/components/Modal/src/index.less
index c26a1a88..0bf614dc 100644
--- a/src/components/Modal/src/index.less
+++ b/src/components/Modal/src/index.less
@@ -70,7 +70,7 @@
   &-close {
     width: auto !important;
     font-weight: normal;
-    background: rgb(255 255 255/ 0%) !important;
+    background: transparent !important;
     outline: none;
   }
 

From 6f671d05934c3573f212ea0d10fcacfa91c7d169 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Sun, 24 Sep 2023 20:33:44 +0800
Subject: [PATCH 10/18] chore: update deps

---
 package.json   |    6 +-
 pnpm-lock.yaml | 1443 +++++++++++++++++++++++-------------------------
 2 files changed, 694 insertions(+), 755 deletions(-)

diff --git a/package.json b/package.json
index 8766ca72..e62ca14d 100644
--- a/package.json
+++ b/package.json
@@ -92,7 +92,7 @@
     "@types/inquirer": "^9.0.3",
     "@types/lodash-es": "^4.17.9",
     "@types/node": "^20.6.0",
-    "@types/nprogress": "^0.2.0",
+    "@types/nprogress": "^0.2.1",
     "@types/qs": "^6.9.8",
     "@types/sortablejs": "^1.15.2",
     "@unocss/eslint-config": "^0.56.1",
@@ -104,7 +104,7 @@
     "cz-git": "^1.7.1",
     "czg": "^1.7.1",
     "dotenv": "^16.3.1",
-    "eslint": "^8.49.0",
+    "eslint": "^8.50.0",
     "esno": "^0.17.0",
     "fs-extra": "^11.1.1",
     "husky": "^8.0.3",
@@ -117,7 +117,7 @@
     "postcss-less": "^6.0.0",
     "prettier": "^3.0.3",
     "rimraf": "^5.0.1",
-    "rollup": "^3.29.2",
+    "rollup": "^3.29.3",
     "rollup-plugin-visualizer": "^5.9.2",
     "stylelint": "^15.10.3",
     "stylelint-config-recess-order": "^4.3.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 63823821..06ea66f9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -138,10 +138,10 @@ devDependencies:
     version: 4.17.9
   '@types/node':
     specifier: ^20.6.0
-    version: 20.6.0
+    version: 20.6.4
   '@types/nprogress':
-    specifier: ^0.2.0
-    version: 0.2.0
+    specifier: ^0.2.1
+    version: 0.2.1
   '@types/qs':
     specifier: ^6.9.8
     version: 6.9.8
@@ -150,7 +150,7 @@ devDependencies:
     version: 1.15.2
   '@unocss/eslint-config':
     specifier: ^0.56.1
-    version: 0.56.1(eslint@8.49.0)(typescript@5.2.2)
+    version: 0.56.1(eslint@8.50.0)(typescript@5.2.2)
   '@vitejs/plugin-vue':
     specifier: 4.3.4
     version: 4.3.4(vite@4.4.9)(vue@3.3.4)
@@ -162,7 +162,7 @@ devDependencies:
     version: 3.3.4
   '@xingyuv/eslint-config':
     specifier: ^0.1.6
-    version: 0.1.6(eslint@8.49.0)(typescript@5.2.2)
+    version: 0.1.6(eslint@8.50.0)(typescript@5.2.2)
   cross-env:
     specifier: ^7.0.3
     version: 7.0.3
@@ -176,8 +176,8 @@ devDependencies:
     specifier: ^16.3.1
     version: 16.3.1
   eslint:
-    specifier: ^8.49.0
-    version: 8.49.0
+    specifier: ^8.50.0
+    version: 8.50.0
   esno:
     specifier: ^0.17.0
     version: 0.17.0
@@ -215,11 +215,11 @@ devDependencies:
     specifier: ^5.0.1
     version: 5.0.1
   rollup:
-    specifier: ^3.29.2
-    version: 3.29.2
+    specifier: ^3.29.3
+    version: 3.29.3
   rollup-plugin-visualizer:
     specifier: ^5.9.2
-    version: 5.9.2(rollup@3.29.2)
+    version: 5.9.2(rollup@3.29.3)
   stylelint:
     specifier: ^15.10.3
     version: 15.10.3(typescript@5.2.2)
@@ -249,10 +249,10 @@ devDependencies:
     version: 5.2.2
   unocss:
     specifier: ^0.56.1
-    version: 0.56.1(postcss@8.4.30)(rollup@3.29.2)(vite@4.4.9)
+    version: 0.56.1(postcss@8.4.30)(rollup@3.29.3)(vite@4.4.9)
   vite:
     specifier: ^4.4.9
-    version: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+    version: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
   vite-plugin-compression:
     specifier: ^0.5.1
     version: 0.5.1(vite@4.4.9)
@@ -273,10 +273,10 @@ devDependencies:
     version: 2.0.1(vite@4.4.9)
   vite-vue-plugin-html:
     specifier: ^1.0.2
-    version: 1.0.2(rollup@3.29.2)(vite@4.4.9)
+    version: 1.0.2(rollup@3.29.3)(vite@4.4.9)
   vue-eslint-parser:
     specifier: ^9.3.1
-    version: 9.3.1(eslint@8.49.0)
+    version: 9.3.1(eslint@8.50.0)
   vue-tsc:
     specifier: ^1.8.13
     version: 1.8.13(typescript@5.2.2)
@@ -349,29 +349,29 @@ packages:
     resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/highlight': 7.22.13
+      '@babel/highlight': 7.22.20
       chalk: 2.4.2
     dev: true
 
-  /@babel/compat-data@7.22.9:
-    resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==}
+  /@babel/compat-data@7.22.20:
+    resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==}
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/core@7.22.17:
-    resolution: {integrity: sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==}
+  /@babel/core@7.22.20:
+    resolution: {integrity: sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@ampproject/remapping': 2.2.1
       '@babel/code-frame': 7.22.13
       '@babel/generator': 7.22.15
       '@babel/helper-compilation-targets': 7.22.15
-      '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17)
+      '@babel/helper-module-transforms': 7.22.20(@babel/core@7.22.20)
       '@babel/helpers': 7.22.15
       '@babel/parser': 7.22.16
       '@babel/template': 7.22.15
-      '@babel/traverse': 7.22.17
-      '@babel/types': 7.22.17
+      '@babel/traverse': 7.22.20
+      '@babel/types': 7.22.19
       convert-source-map: 1.9.0
       debug: 4.3.4
       gensync: 1.0.0-beta.2
@@ -385,7 +385,7 @@ packages:
     resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
       '@jridgewell/gen-mapping': 0.3.3
       '@jridgewell/trace-mapping': 0.3.19
       jsesc: 2.5.2
@@ -395,74 +395,74 @@ packages:
     resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
     dev: true
 
   /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15:
     resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
     dev: true
 
   /@babel/helper-compilation-targets@7.22.15:
     resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/compat-data': 7.22.9
+      '@babel/compat-data': 7.22.20
       '@babel/helper-validator-option': 7.22.15
-      browserslist: 4.21.10
+      browserslist: 4.21.11
       lru-cache: 5.1.1
       semver: 6.3.1
     dev: true
 
-  /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.17):
+  /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-environment-visitor': 7.22.5
+      '@babel/helper-environment-visitor': 7.22.20
       '@babel/helper-function-name': 7.22.5
       '@babel/helper-member-expression-to-functions': 7.22.15
       '@babel/helper-optimise-call-expression': 7.22.5
-      '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.17)
+      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.20)
       '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
       '@babel/helper-split-export-declaration': 7.22.6
       semver: 6.3.1
     dev: true
 
-  /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.22.17):
+  /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-annotate-as-pure': 7.22.5
       regexpu-core: 5.3.2
       semver: 6.3.1
     dev: true
 
-  /@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.22.17):
+  /@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.22.20):
     resolution: {integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==}
     peerDependencies:
       '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-compilation-targets': 7.22.15
       '@babel/helper-plugin-utils': 7.22.5
       debug: 4.3.4
       lodash.debounce: 4.0.8
-      resolve: 1.22.4
+      resolve: 1.22.6
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/helper-environment-visitor@7.22.5:
-    resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==}
+  /@babel/helper-environment-visitor@7.22.20:
+    resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
     engines: {node: '>=6.9.0'}
     dev: true
 
@@ -471,49 +471,49 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/template': 7.22.15
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
     dev: true
 
   /@babel/helper-hoist-variables@7.22.5:
     resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
     dev: true
 
   /@babel/helper-member-expression-to-functions@7.22.15:
     resolution: {integrity: sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
     dev: true
 
   /@babel/helper-module-imports@7.22.15:
     resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
     dev: true
 
-  /@babel/helper-module-transforms@7.22.17(@babel/core@7.22.17):
-    resolution: {integrity: sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==}
+  /@babel/helper-module-transforms@7.22.20(@babel/core@7.22.20):
+    resolution: {integrity: sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-environment-visitor': 7.22.5
+      '@babel/core': 7.22.20
+      '@babel/helper-environment-visitor': 7.22.20
       '@babel/helper-module-imports': 7.22.15
       '@babel/helper-simple-access': 7.22.5
       '@babel/helper-split-export-declaration': 7.22.6
-      '@babel/helper-validator-identifier': 7.22.15
+      '@babel/helper-validator-identifier': 7.22.20
     dev: true
 
   /@babel/helper-optimise-call-expression@7.22.5:
     resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
     dev: true
 
   /@babel/helper-plugin-utils@7.22.5:
@@ -521,26 +521,26 @@ packages:
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/helper-remap-async-to-generator@7.22.17(@babel/core@7.22.17):
-    resolution: {integrity: sha512-bxH77R5gjH3Nkde6/LuncQoLaP16THYPscurp1S8z7S9ZgezCyV3G8Hc+TZiCmY8pz4fp8CvKSgtJMW0FkLAxA==}
+  /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.22.20):
+    resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-environment-visitor': 7.22.5
-      '@babel/helper-wrap-function': 7.22.17
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-wrap-function': 7.22.20
     dev: true
 
-  /@babel/helper-replace-supers@7.22.9(@babel/core@7.22.17):
-    resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==}
+  /@babel/helper-replace-supers@7.22.20(@babel/core@7.22.20):
+    resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-environment-visitor': 7.22.5
+      '@babel/core': 7.22.20
+      '@babel/helper-environment-visitor': 7.22.20
       '@babel/helper-member-expression-to-functions': 7.22.15
       '@babel/helper-optimise-call-expression': 7.22.5
     dev: true
@@ -549,29 +549,29 @@ packages:
     resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
     dev: true
 
   /@babel/helper-skip-transparent-expression-wrappers@7.22.5:
     resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
     dev: true
 
   /@babel/helper-split-export-declaration@7.22.6:
     resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
     dev: true
 
   /@babel/helper-string-parser@7.22.5:
     resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
     engines: {node: '>=6.9.0'}
 
-  /@babel/helper-validator-identifier@7.22.15:
-    resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==}
+  /@babel/helper-validator-identifier@7.22.20:
+    resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
     engines: {node: '>=6.9.0'}
 
   /@babel/helper-validator-option@7.22.15:
@@ -579,13 +579,13 @@ packages:
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/helper-wrap-function@7.22.17:
-    resolution: {integrity: sha512-nAhoheCMlrqU41tAojw9GpVEKDlTS8r3lzFmF0lP52LwblCPbuFSO7nGIZoIcoU5NIm1ABrna0cJExE4Ay6l2Q==}
+  /@babel/helper-wrap-function@7.22.20:
+    resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/helper-function-name': 7.22.5
       '@babel/template': 7.22.15
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
     dev: true
 
   /@babel/helpers@7.22.15:
@@ -593,17 +593,17 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/template': 7.22.15
-      '@babel/traverse': 7.22.17
-      '@babel/types': 7.22.17
+      '@babel/traverse': 7.22.20
+      '@babel/types': 7.22.19
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/highlight@7.22.13:
-    resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==}
+  /@babel/highlight@7.22.20:
+    resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/helper-validator-identifier': 7.22.15
+      '@babel/helper-validator-identifier': 7.22.20
       chalk: 2.4.2
       js-tokens: 4.0.0
     dev: true
@@ -613,872 +613,872 @@ packages:
     engines: {node: '>=6.0.0'}
     hasBin: true
     dependencies:
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
 
-  /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.22.17):
+  /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.22.17):
+  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.13.0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-      '@babel/plugin-transform-optional-chaining': 7.22.15(@babel/core@7.22.17)
+      '@babel/plugin-transform-optional-chaining': 7.22.15(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.17):
+  /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.20):
     resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
     dev: true
 
-  /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.17):
+  /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.20):
     resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.17):
+  /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.20):
     resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.17):
+  /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.17):
+  /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.20):
     resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.17):
+  /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.20):
     resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.17):
+  /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.20):
     resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.17):
+  /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.20):
     resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.17):
+  /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.20):
     resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.17):
+  /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.20):
     resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.17):
+  /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.20):
     resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.17):
+  /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.20):
     resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.17):
+  /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.20):
     resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.17):
+  /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.20):
     resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.17):
+  /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.17):
+  /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.17):
+  /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.20):
     resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-async-generator-functions@7.22.15(@babel/core@7.22.17):
+  /@babel/plugin-transform-async-generator-functions@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-environment-visitor': 7.22.5
+      '@babel/core': 7.22.20
+      '@babel/helper-environment-visitor': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-remap-async-to-generator': 7.22.17(@babel/core@7.22.17)
-      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.17)
+      '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.22.20)
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-module-imports': 7.22.15
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-remap-async-to-generator': 7.22.17(@babel/core@7.22.17)
+      '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-block-scoping@7.22.15(@babel/core@7.22.17):
+  /@babel/plugin-transform-block-scoping@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.22.17):
+  /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.22.20):
     resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.12.0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.17)
+      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-classes@7.22.15(@babel/core@7.22.17):
+  /@babel/plugin-transform-classes@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-annotate-as-pure': 7.22.5
       '@babel/helper-compilation-targets': 7.22.15
-      '@babel/helper-environment-visitor': 7.22.5
+      '@babel/helper-environment-visitor': 7.22.20
       '@babel/helper-function-name': 7.22.5
       '@babel/helper-optimise-call-expression': 7.22.5
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.17)
+      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.20)
       '@babel/helper-split-export-declaration': 7.22.6
       globals: 11.12.0
     dev: true
 
-  /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/template': 7.22.15
     dev: true
 
-  /@babel/plugin-transform-destructuring@7.22.15(@babel/core@7.22.17):
+  /@babel/plugin-transform-destructuring@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.22.17):
+  /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.22.20):
     resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.17)
+      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.22.17):
+  /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.22.20):
     resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.17)
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.22.17):
+  /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-compilation-targets': 7.22.15
       '@babel/helper-function-name': 7.22.5
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.22.17):
+  /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.22.20):
     resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.17)
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.22.17):
+  /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.22.20):
     resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.17)
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-module-transforms': 7.22.20(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.22.17):
+  /@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-module-transforms': 7.22.20(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-simple-access': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-modules-systemjs@7.22.11(@babel/core@7.22.17):
+  /@babel/plugin-transform-modules-systemjs@7.22.11(@babel/core@7.22.20):
     resolution: {integrity: sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-hoist-variables': 7.22.5
-      '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17)
+      '@babel/helper-module-transforms': 7.22.20(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-validator-identifier': 7.22.15
+      '@babel/helper-validator-identifier': 7.22.20
     dev: true
 
-  /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-module-transforms': 7.22.20(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.22.17):
+  /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.22.20):
     resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.17)
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.22.17):
+  /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.22.20):
     resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.17)
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.22.17):
+  /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/compat-data': 7.22.9
-      '@babel/core': 7.22.17
+      '@babel/compat-data': 7.22.20
+      '@babel/core': 7.22.20
       '@babel/helper-compilation-targets': 7.22.15
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.17)
-      '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.17)
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.20)
+      '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.17)
+      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.22.17):
+  /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.22.20):
     resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.17)
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-optional-chaining@7.22.15(@babel/core@7.22.17):
+  /@babel/plugin-transform-optional-chaining@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.17)
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.22.17):
+  /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.22.17):
+  /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.22.20):
     resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.17)
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.22.17):
+  /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.22.20):
     resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
       regenerator-transform: 0.15.2
     dev: true
 
-  /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.22.17):
+  /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.22.20):
     resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.17)
+      '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.20)
     dev: true
 
-  /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.22.17):
+  /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.22.20):
     resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.17):
+  /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.20)
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/preset-env@7.22.15(@babel/core@7.22.17):
-    resolution: {integrity: sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag==}
+  /@babel/preset-env@7.22.20(@babel/core@7.22.20):
+    resolution: {integrity: sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/compat-data': 7.22.9
-      '@babel/core': 7.22.17
+      '@babel/compat-data': 7.22.20
+      '@babel/core': 7.22.20
       '@babel/helper-compilation-targets': 7.22.15
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-validator-option': 7.22.15
-      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.22.17)
-      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.22.17)
-      '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.17)
-      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.17)
-      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.17)
-      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.17)
-      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.17)
-      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.17)
-      '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.17)
-      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.17)
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.17)
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.17)
-      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.17)
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.17)
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.17)
-      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.17)
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.17)
-      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.17)
-      '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.17)
-      '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-async-generator-functions': 7.22.15(@babel/core@7.22.17)
-      '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-block-scoping': 7.22.15(@babel/core@7.22.17)
-      '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.22.17)
-      '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.22.17)
-      '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-destructuring': 7.22.15(@babel/core@7.22.17)
-      '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.22.17)
-      '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.22.17)
-      '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.22.17)
-      '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.22.17)
-      '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.22.17)
-      '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.22.17)
-      '@babel/plugin-transform-modules-systemjs': 7.22.11(@babel/core@7.22.17)
-      '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.22.17)
-      '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.22.17)
-      '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.22.17)
-      '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.22.17)
-      '@babel/plugin-transform-optional-chaining': 7.22.15(@babel/core@7.22.17)
-      '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.17)
-      '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.22.17)
-      '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.22.17)
-      '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.22.17)
-      '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.17)
-      '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.17)
-      '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.22.17)
-      '@babel/types': 7.22.17
-      babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.17)
-      babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.22.17)
-      babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.17)
+      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.22.20)
+      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.22.20)
+      '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.20)
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.20)
+      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.20)
+      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.20)
+      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.20)
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.20)
+      '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.20)
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.20)
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.20)
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.20)
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.20)
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.20)
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.20)
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.20)
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.20)
+      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.20)
+      '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.20)
+      '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-async-generator-functions': 7.22.15(@babel/core@7.22.20)
+      '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-block-scoping': 7.22.15(@babel/core@7.22.20)
+      '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.22.20)
+      '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.22.20)
+      '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-destructuring': 7.22.15(@babel/core@7.22.20)
+      '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.22.20)
+      '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.22.20)
+      '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.22.20)
+      '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.22.20)
+      '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.22.20)
+      '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.22.20)
+      '@babel/plugin-transform-modules-systemjs': 7.22.11(@babel/core@7.22.20)
+      '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.22.20)
+      '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.22.20)
+      '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.22.20)
+      '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.22.20)
+      '@babel/plugin-transform-optional-chaining': 7.22.15(@babel/core@7.22.20)
+      '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.20)
+      '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.22.20)
+      '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.22.20)
+      '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.22.20)
+      '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.20)
+      '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.20)
+      '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.22.20)
+      '@babel/types': 7.22.19
+      babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.20)
+      babel-plugin-polyfill-corejs3: 0.8.4(@babel/core@7.22.20)
+      babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.20)
       core-js-compat: 3.32.2
       semver: 6.3.1
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.22.17):
+  /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.22.20):
     resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
       esutils: 2.0.3
     dev: true
 
@@ -1498,33 +1498,33 @@ packages:
     dependencies:
       '@babel/code-frame': 7.22.13
       '@babel/parser': 7.22.16
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
     dev: true
 
-  /@babel/traverse@7.22.17:
-    resolution: {integrity: sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==}
+  /@babel/traverse@7.22.20:
+    resolution: {integrity: sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/code-frame': 7.22.13
       '@babel/generator': 7.22.15
-      '@babel/helper-environment-visitor': 7.22.5
+      '@babel/helper-environment-visitor': 7.22.20
       '@babel/helper-function-name': 7.22.5
       '@babel/helper-hoist-variables': 7.22.5
       '@babel/helper-split-export-declaration': 7.22.6
       '@babel/parser': 7.22.16
-      '@babel/types': 7.22.17
+      '@babel/types': 7.22.19
       debug: 4.3.4
       globals: 11.12.0
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/types@7.22.17:
-    resolution: {integrity: sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==}
+  /@babel/types@7.22.19:
+    resolution: {integrity: sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/helper-string-parser': 7.22.5
-      '@babel/helper-validator-identifier': 7.22.15
+      '@babel/helper-validator-identifier': 7.22.20
       to-fast-properties: 2.0.0
 
   /@commitlint/cli@17.7.1:
@@ -1615,13 +1615,13 @@ packages:
       '@commitlint/types': 17.4.4
       '@types/node': 20.4.7
       chalk: 4.1.2
-      cosmiconfig: 8.3.5(typescript@5.2.2)
-      cosmiconfig-typescript-loader: 4.4.0(@types/node@20.4.7)(cosmiconfig@8.3.5)(ts-node@10.9.1)(typescript@5.2.2)
+      cosmiconfig: 8.3.6(typescript@5.2.2)
+      cosmiconfig-typescript-loader: 4.4.0(@types/node@20.4.7)(cosmiconfig@8.3.6)(ts-node@10.9.1)(typescript@5.2.2)
       lodash.isplainobject: 4.0.6
       lodash.merge: 4.6.2
       lodash.uniq: 4.5.0
       resolve-from: 5.0.0
-      ts-node: 10.9.1(@types/node@20.6.0)(typescript@5.2.2)
+      ts-node: 10.9.1(@types/node@20.6.4)(typescript@5.2.2)
       typescript: 5.2.2
     transitivePeerDependencies:
       - '@swc/core'
@@ -1758,25 +1758,25 @@ packages:
       jsdoc-type-pratt-parser: 4.0.0
     dev: true
 
-  /@esbuild-kit/cjs-loader@2.4.2:
-    resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==}
+  /@esbuild-kit/cjs-loader@2.4.4:
+    resolution: {integrity: sha512-NfsJX4PdzhwSkfJukczyUiZGc7zNNWZcEAyqeISpDnn0PTfzMJR1aR8xAIPskBejIxBJbIgCCMzbaYa9SXepIg==}
     dependencies:
-      '@esbuild-kit/core-utils': 3.2.3
-      get-tsconfig: 4.7.0
+      '@esbuild-kit/core-utils': 3.3.2
+      get-tsconfig: 4.7.2
     dev: true
 
-  /@esbuild-kit/core-utils@3.2.3:
-    resolution: {integrity: sha512-daTXIDXv6lTpADQYTfY9BgHfL3HjVfY7xD8aOuPWtD1bJdqk9hAtHK5cErBcxcBtjFcfB0B2tftFtW01jTveKw==}
+  /@esbuild-kit/core-utils@3.3.2:
+    resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
     dependencies:
       esbuild: 0.18.20
       source-map-support: 0.5.21
     dev: true
 
-  /@esbuild-kit/esm-loader@2.5.5:
-    resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==}
+  /@esbuild-kit/esm-loader@2.6.5:
+    resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
     dependencies:
-      '@esbuild-kit/core-utils': 3.2.3
-      get-tsconfig: 4.7.0
+      '@esbuild-kit/core-utils': 3.3.2
+      get-tsconfig: 4.7.2
     dev: true
 
   /@esbuild/android-arm64@0.18.20:
@@ -1977,18 +1977,18 @@ packages:
     dev: true
     optional: true
 
-  /@eslint-community/eslint-utils@4.4.0(eslint@8.49.0):
+  /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0):
     resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
     dependencies:
-      eslint: 8.49.0
+      eslint: 8.50.0
       eslint-visitor-keys: 3.4.3
     dev: true
 
-  /@eslint-community/regexpp@4.8.0:
-    resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==}
+  /@eslint-community/regexpp@4.8.1:
+    resolution: {integrity: sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
     dev: true
 
@@ -1999,7 +1999,7 @@ packages:
       ajv: 6.12.6
       debug: 4.3.4
       espree: 9.6.1
-      globals: 13.21.0
+      globals: 13.22.0
       ignore: 5.2.4
       import-fresh: 3.3.0
       js-yaml: 4.1.0
@@ -2009,8 +2009,8 @@ packages:
       - supports-color
     dev: true
 
-  /@eslint/js@8.49.0:
-    resolution: {integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==}
+  /@eslint/js@8.50.0:
+    resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
@@ -2212,8 +2212,8 @@ packages:
       - encoding
     dev: true
 
-  /@octokit/openapi-types@18.0.0:
-    resolution: {integrity: sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==}
+  /@octokit/openapi-types@18.1.1:
+    resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==}
     dev: true
 
   /@octokit/plugin-paginate-rest@6.1.2(@octokit/core@4.2.4):
@@ -2287,13 +2287,13 @@ packages:
   /@octokit/types@10.0.0:
     resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==}
     dependencies:
-      '@octokit/openapi-types': 18.0.0
+      '@octokit/openapi-types': 18.1.1
     dev: true
 
   /@octokit/types@9.3.2:
     resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==}
     dependencies:
-      '@octokit/openapi-types': 18.0.0
+      '@octokit/openapi-types': 18.1.1
     dev: true
 
   /@pkgjs/parseargs@0.11.0:
@@ -2338,7 +2338,7 @@ packages:
       '@iconify/iconify': 3.1.1
     dev: true
 
-  /@rollup/plugin-babel@5.3.1(@babel/core@7.22.17)(rollup@2.79.1):
+  /@rollup/plugin-babel@5.3.1(@babel/core@7.22.20)(rollup@2.79.1):
     resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==}
     engines: {node: '>= 10.0.0'}
     peerDependencies:
@@ -2349,7 +2349,7 @@ packages:
       '@types/babel__core':
         optional: true
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-module-imports': 7.22.15
       '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
       rollup: 2.79.1
@@ -2366,7 +2366,7 @@ packages:
       builtin-modules: 3.3.0
       deepmerge: 4.3.1
       is-module: 1.0.0
-      resolve: 1.22.4
+      resolve: 1.22.6
       rollup: 2.79.1
     dev: true
 
@@ -2392,7 +2392,7 @@ packages:
       rollup: 2.79.1
     dev: true
 
-  /@rollup/pluginutils@5.0.4(rollup@3.29.2):
+  /@rollup/pluginutils@5.0.4(rollup@3.29.3):
     resolution: {integrity: sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2401,10 +2401,10 @@ packages:
       rollup:
         optional: true
     dependencies:
-      '@types/estree': 1.0.1
+      '@types/estree': 1.0.2
       estree-walker: 2.0.2
       picomatch: 2.3.1
-      rollup: 3.29.2
+      rollup: 3.29.3
     dev: true
 
   /@simonwep/pickr@1.8.2:
@@ -2425,17 +2425,17 @@ packages:
       graphemer: 1.4.0
     dev: true
 
-  /@stylistic/eslint-plugin-ts@0.0.3(eslint@8.49.0)(typescript@5.2.2):
+  /@stylistic/eslint-plugin-ts@0.0.3(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-G/jZ+XHlZtkxABOXswJNTmN4h8qNmECTjPLkWPMykPlfQeD1RSpBMEQHiJHZ3GAxnEcqAgi7CNA1FTvGWz6qwQ==}
     peerDependencies:
       eslint: '*'
       typescript: '*'
     dependencies:
       '@stylistic/eslint-plugin-js': 0.0.3
-      '@typescript-eslint/scope-manager': 6.7.0
-      '@typescript-eslint/type-utils': 6.7.0(eslint@8.49.0)(typescript@5.2.2)
-      '@typescript-eslint/utils': 6.7.0(eslint@8.49.0)(typescript@5.2.2)
-      eslint: 8.49.0
+      '@typescript-eslint/scope-manager': 6.7.2
+      '@typescript-eslint/type-utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+      '@typescript-eslint/utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+      eslint: 8.50.0
       graphemer: 1.4.0
       semver: 7.5.4
       typescript: 5.2.2
@@ -2449,7 +2449,7 @@ packages:
       ejs: 3.1.9
       json5: 2.2.3
       magic-string: 0.25.9
-      string.prototype.matchall: 4.0.9
+      string.prototype.matchall: 4.0.10
     dev: true
 
   /@trysound/sax@0.2.0:
@@ -2476,7 +2476,7 @@ packages:
   /@types/codemirror@5.60.10:
     resolution: {integrity: sha512-ZTA3teiCWKT8HUUofqlGPlShu5ojdIajizsS0HpH6GL0/iEdjRt7fXbCLHHqKYP5k7dC/HnnWIjZAiELUwBdjQ==}
     dependencies:
-      '@types/tern': 0.23.4
+      '@types/tern': 0.23.5
     dev: true
 
   /@types/crypto-js@4.1.2:
@@ -2487,42 +2487,42 @@ packages:
     resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
     dev: true
 
-  /@types/estree@1.0.1:
-    resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
+  /@types/estree@1.0.2:
+    resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==}
     dev: true
 
   /@types/fs-extra@11.0.2:
     resolution: {integrity: sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==}
     dependencies:
-      '@types/jsonfile': 6.1.1
-      '@types/node': 20.6.0
+      '@types/jsonfile': 6.1.2
+      '@types/node': 20.6.4
     dev: true
 
   /@types/inquirer@9.0.3:
     resolution: {integrity: sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw==}
     dependencies:
-      '@types/through': 0.0.30
+      '@types/through': 0.0.31
       rxjs: 7.8.1
     dev: true
 
-  /@types/json-schema@7.0.12:
-    resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==}
+  /@types/json-schema@7.0.13:
+    resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==}
     dev: true
 
-  /@types/jsonfile@6.1.1:
-    resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==}
+  /@types/jsonfile@6.1.2:
+    resolution: {integrity: sha512-8t92P+oeW4d/CRQfJaSqEwXujrhH4OEeHRjGU3v1Q8mUS8GPF3yiX26sw4svv6faL2HfBtGTe2xWIoVgN3dy9w==}
     dependencies:
-      '@types/node': 20.6.0
+      '@types/node': 20.6.4
     dev: true
 
   /@types/lodash-es@4.17.9:
     resolution: {integrity: sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==}
     dependencies:
-      '@types/lodash': 4.14.198
+      '@types/lodash': 4.14.199
     dev: true
 
-  /@types/lodash@4.14.198:
-    resolution: {integrity: sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==}
+  /@types/lodash@4.14.199:
+    resolution: {integrity: sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==}
     dev: true
 
   /@types/mdast@3.0.12:
@@ -2543,16 +2543,16 @@ packages:
     resolution: {integrity: sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==}
     dev: true
 
-  /@types/node@20.6.0:
-    resolution: {integrity: sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==}
+  /@types/node@20.6.4:
+    resolution: {integrity: sha512-nU6d9MPY0NBUMiE/nXd2IIoC4OLvsLpwAjheoAeuzgvDZA1Cb10QYg+91AF6zQiKWRN5i1m07x6sMe0niBznoQ==}
     dev: true
 
-  /@types/normalize-package-data@2.4.1:
-    resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
+  /@types/normalize-package-data@2.4.2:
+    resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==}
     dev: true
 
-  /@types/nprogress@0.2.0:
-    resolution: {integrity: sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==}
+  /@types/nprogress@0.2.1:
+    resolution: {integrity: sha512-TYuyVnp+nOnimgdOydDIDYIxv2kSeuJZw4tF0p/KG7hpzcMF1WkHaREwM8O4blqfT1F7rq0nht6Ko2KVUfWzBA==}
     dev: true
 
   /@types/qs@6.9.8:
@@ -2562,11 +2562,11 @@ packages:
   /@types/resolve@1.17.1:
     resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
     dependencies:
-      '@types/node': 20.6.0
+      '@types/node': 20.6.4
     dev: true
 
-  /@types/semver@7.5.1:
-    resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==}
+  /@types/semver@7.5.2:
+    resolution: {integrity: sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==}
     dev: true
 
   /@types/sortablejs@1.15.2:
@@ -2576,23 +2576,23 @@ packages:
   /@types/svgo@2.6.4:
     resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==}
     dependencies:
-      '@types/node': 20.6.0
+      '@types/node': 20.6.4
     dev: true
 
-  /@types/tern@0.23.4:
-    resolution: {integrity: sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==}
+  /@types/tern@0.23.5:
+    resolution: {integrity: sha512-POau56wDk3TQ0mQ0qG7XDzv96U5whSENZ9lC0htDvEH+9YUREo+J2U+apWcVRgR2UydEE70JXZo44goG+akTNQ==}
     dependencies:
-      '@types/estree': 1.0.1
+      '@types/estree': 1.0.2
     dev: true
 
-  /@types/through@0.0.30:
-    resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==}
+  /@types/through@0.0.31:
+    resolution: {integrity: sha512-LpKpmb7FGevYgXnBXYs6HWnmiFyVG07Pt1cnbgM1IhEacITTiUaBXXvOR3Y50ksaJWGSfhbEvQFivQEFGCC55w==}
     dependencies:
-      '@types/node': 20.6.0
+      '@types/node': 20.6.4
     dev: true
 
-  /@types/trusted-types@2.0.3:
-    resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==}
+  /@types/trusted-types@2.0.4:
+    resolution: {integrity: sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==}
     dev: true
 
   /@types/unist@2.0.8:
@@ -2607,7 +2607,7 @@ packages:
     resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==}
     dev: false
 
-  /@typescript-eslint/eslint-plugin@6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.49.0)(typescript@5.2.2):
+  /@typescript-eslint/eslint-plugin@6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==}
     engines: {node: ^16.0.0 || >=18.0.0}
     peerDependencies:
@@ -2618,14 +2618,14 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@eslint-community/regexpp': 4.8.0
-      '@typescript-eslint/parser': 6.7.2(eslint@8.49.0)(typescript@5.2.2)
+      '@eslint-community/regexpp': 4.8.1
+      '@typescript-eslint/parser': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
       '@typescript-eslint/scope-manager': 6.7.2
-      '@typescript-eslint/type-utils': 6.7.2(eslint@8.49.0)(typescript@5.2.2)
-      '@typescript-eslint/utils': 6.7.2(eslint@8.49.0)(typescript@5.2.2)
+      '@typescript-eslint/type-utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+      '@typescript-eslint/utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
       '@typescript-eslint/visitor-keys': 6.7.2
       debug: 4.3.4
-      eslint: 8.49.0
+      eslint: 8.50.0
       graphemer: 1.4.0
       ignore: 5.2.4
       natural-compare: 1.4.0
@@ -2636,7 +2636,7 @@ packages:
       - supports-color
     dev: true
 
-  /@typescript-eslint/parser@6.7.2(eslint@8.49.0)(typescript@5.2.2):
+  /@typescript-eslint/parser@6.7.2(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==}
     engines: {node: ^16.0.0 || >=18.0.0}
     peerDependencies:
@@ -2651,7 +2651,7 @@ packages:
       '@typescript-eslint/typescript-estree': 6.7.2(typescript@5.2.2)
       '@typescript-eslint/visitor-keys': 6.7.2
       debug: 4.3.4
-      eslint: 8.49.0
+      eslint: 8.50.0
       typescript: 5.2.2
     transitivePeerDependencies:
       - supports-color
@@ -2665,14 +2665,6 @@ packages:
       '@typescript-eslint/visitor-keys': 5.62.0
     dev: true
 
-  /@typescript-eslint/scope-manager@6.7.0:
-    resolution: {integrity: sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA==}
-    engines: {node: ^16.0.0 || >=18.0.0}
-    dependencies:
-      '@typescript-eslint/types': 6.7.0
-      '@typescript-eslint/visitor-keys': 6.7.0
-    dev: true
-
   /@typescript-eslint/scope-manager@6.7.2:
     resolution: {integrity: sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==}
     engines: {node: ^16.0.0 || >=18.0.0}
@@ -2681,27 +2673,7 @@ packages:
       '@typescript-eslint/visitor-keys': 6.7.2
     dev: true
 
-  /@typescript-eslint/type-utils@6.7.0(eslint@8.49.0)(typescript@5.2.2):
-    resolution: {integrity: sha512-f/QabJgDAlpSz3qduCyQT0Fw7hHpmhOzY/Rv6zO3yO+HVIdPfIWhrQoAyG+uZVtWAIS85zAyzgAFfyEr+MgBpg==}
-    engines: {node: ^16.0.0 || >=18.0.0}
-    peerDependencies:
-      eslint: ^7.0.0 || ^8.0.0
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-    dependencies:
-      '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.2.2)
-      '@typescript-eslint/utils': 6.7.0(eslint@8.49.0)(typescript@5.2.2)
-      debug: 4.3.4
-      eslint: 8.49.0
-      ts-api-utils: 1.0.3(typescript@5.2.2)
-      typescript: 5.2.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /@typescript-eslint/type-utils@6.7.2(eslint@8.49.0)(typescript@5.2.2):
+  /@typescript-eslint/type-utils@6.7.2(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==}
     engines: {node: ^16.0.0 || >=18.0.0}
     peerDependencies:
@@ -2712,9 +2684,9 @@ packages:
         optional: true
     dependencies:
       '@typescript-eslint/typescript-estree': 6.7.2(typescript@5.2.2)
-      '@typescript-eslint/utils': 6.7.2(eslint@8.49.0)(typescript@5.2.2)
+      '@typescript-eslint/utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
       debug: 4.3.4
-      eslint: 8.49.0
+      eslint: 8.50.0
       ts-api-utils: 1.0.3(typescript@5.2.2)
       typescript: 5.2.2
     transitivePeerDependencies:
@@ -2726,11 +2698,6 @@ packages:
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
-  /@typescript-eslint/types@6.7.0:
-    resolution: {integrity: sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q==}
-    engines: {node: ^16.0.0 || >=18.0.0}
-    dev: true
-
   /@typescript-eslint/types@6.7.2:
     resolution: {integrity: sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==}
     engines: {node: ^16.0.0 || >=18.0.0}
@@ -2757,27 +2724,6 @@ packages:
       - supports-color
     dev: true
 
-  /@typescript-eslint/typescript-estree@6.7.0(typescript@5.2.2):
-    resolution: {integrity: sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ==}
-    engines: {node: ^16.0.0 || >=18.0.0}
-    peerDependencies:
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-    dependencies:
-      '@typescript-eslint/types': 6.7.0
-      '@typescript-eslint/visitor-keys': 6.7.0
-      debug: 4.3.4
-      globby: 11.1.0
-      is-glob: 4.0.3
-      semver: 7.5.4
-      ts-api-utils: 1.0.3(typescript@5.2.2)
-      typescript: 5.2.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@typescript-eslint/typescript-estree@6.7.2(typescript@5.2.2):
     resolution: {integrity: sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==}
     engines: {node: ^16.0.0 || >=18.0.0}
@@ -2799,19 +2745,19 @@ packages:
       - supports-color
     dev: true
 
-  /@typescript-eslint/utils@5.62.0(eslint@8.49.0)(typescript@5.2.2):
+  /@typescript-eslint/utils@5.62.0(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
-      '@types/json-schema': 7.0.12
-      '@types/semver': 7.5.1
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0)
+      '@types/json-schema': 7.0.13
+      '@types/semver': 7.5.2
       '@typescript-eslint/scope-manager': 5.62.0
       '@typescript-eslint/types': 5.62.0
       '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2)
-      eslint: 8.49.0
+      eslint: 8.50.0
       eslint-scope: 5.1.1
       semver: 7.5.4
     transitivePeerDependencies:
@@ -2819,38 +2765,19 @@ packages:
       - typescript
     dev: true
 
-  /@typescript-eslint/utils@6.7.0(eslint@8.49.0)(typescript@5.2.2):
-    resolution: {integrity: sha512-MfCq3cM0vh2slSikQYqK2Gq52gvOhe57vD2RM3V4gQRZYX4rDPnKLu5p6cm89+LJiGlwEXU8hkYxhqqEC/V3qA==}
-    engines: {node: ^16.0.0 || >=18.0.0}
-    peerDependencies:
-      eslint: ^7.0.0 || ^8.0.0
-    dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
-      '@types/json-schema': 7.0.12
-      '@types/semver': 7.5.1
-      '@typescript-eslint/scope-manager': 6.7.0
-      '@typescript-eslint/types': 6.7.0
-      '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.2.2)
-      eslint: 8.49.0
-      semver: 7.5.4
-    transitivePeerDependencies:
-      - supports-color
-      - typescript
-    dev: true
-
-  /@typescript-eslint/utils@6.7.2(eslint@8.49.0)(typescript@5.2.2):
+  /@typescript-eslint/utils@6.7.2(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==}
     engines: {node: ^16.0.0 || >=18.0.0}
     peerDependencies:
       eslint: ^7.0.0 || ^8.0.0
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
-      '@types/json-schema': 7.0.12
-      '@types/semver': 7.5.1
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0)
+      '@types/json-schema': 7.0.13
+      '@types/semver': 7.5.2
       '@typescript-eslint/scope-manager': 6.7.2
       '@typescript-eslint/types': 6.7.2
       '@typescript-eslint/typescript-estree': 6.7.2(typescript@5.2.2)
-      eslint: 8.49.0
+      eslint: 8.50.0
       semver: 7.5.4
     transitivePeerDependencies:
       - supports-color
@@ -2865,14 +2792,6 @@ packages:
       eslint-visitor-keys: 3.4.3
     dev: true
 
-  /@typescript-eslint/visitor-keys@6.7.0:
-    resolution: {integrity: sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ==}
-    engines: {node: ^16.0.0 || >=18.0.0}
-    dependencies:
-      '@typescript-eslint/types': 6.7.0
-      eslint-visitor-keys: 3.4.3
-    dev: true
-
   /@typescript-eslint/visitor-keys@6.7.2:
     resolution: {integrity: sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==}
     engines: {node: ^16.0.0 || >=18.0.0}
@@ -2881,7 +2800,7 @@ packages:
       eslint-visitor-keys: 3.4.3
     dev: true
 
-  /@unocss/astro@0.56.1(rollup@3.29.2)(vite@4.4.9):
+  /@unocss/astro@0.56.1(rollup@3.29.3)(vite@4.4.9):
     resolution: {integrity: sha512-ivWm69J76DRwCiEFM75qR4WPMCC6nyOrUM5iQDTypwKbBX26XlXcYYCN3DLoQTmWdp5f2BubZXAg3KIdgVxrYg==}
     peerDependencies:
       vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0
@@ -2891,19 +2810,19 @@ packages:
     dependencies:
       '@unocss/core': 0.56.1
       '@unocss/reset': 0.56.1
-      '@unocss/vite': 0.56.1(rollup@3.29.2)(vite@4.4.9)
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+      '@unocss/vite': 0.56.1(rollup@3.29.3)(vite@4.4.9)
+      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - rollup
     dev: true
 
-  /@unocss/cli@0.56.1(rollup@3.29.2):
+  /@unocss/cli@0.56.1(rollup@3.29.3):
     resolution: {integrity: sha512-s7lRtPkNw7GXdej3uYKFgfyal3Bq0Ux9oJKQ3rV7ysvY5AMfHs+ayc1EC6vXsAunziJ39dloPrRY5cx1H7abkQ==}
     engines: {node: '>=14'}
     hasBin: true
     dependencies:
       '@ampproject/remapping': 2.2.1
-      '@rollup/pluginutils': 5.0.4(rollup@3.29.2)
+      '@rollup/pluginutils': 5.0.4(rollup@3.29.3)
       '@unocss/config': 0.56.1
       '@unocss/core': 0.56.1
       '@unocss/preset-uno': 0.56.1
@@ -2931,22 +2850,22 @@ packages:
     resolution: {integrity: sha512-2qmb/+hQ2CXmIgSqaeL6Pw2reO2MxsZlLMFuu71J8T3+UKrkI9NAwkZ4sdb38EoOisVIr2lvE48uc44XBfaOdg==}
     dev: true
 
-  /@unocss/eslint-config@0.56.1(eslint@8.49.0)(typescript@5.2.2):
+  /@unocss/eslint-config@0.56.1(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-ph1w2FO+wCHq0jz0iQyxUbjwLSVjSz6wQ2yd0fCsm6mHNlewWHmu6gD3Grs9j5XDyFJEwz4HZZRHspJanqSJyA==}
     engines: {node: '>=14'}
     dependencies:
-      '@unocss/eslint-plugin': 0.56.1(eslint@8.49.0)(typescript@5.2.2)
+      '@unocss/eslint-plugin': 0.56.1(eslint@8.50.0)(typescript@5.2.2)
     transitivePeerDependencies:
       - eslint
       - supports-color
       - typescript
     dev: true
 
-  /@unocss/eslint-plugin@0.56.1(eslint@8.49.0)(typescript@5.2.2):
+  /@unocss/eslint-plugin@0.56.1(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-WLTybFXK9FJUMmEdUBa4Yj6uZx4qTCThGVej5Rn3XA+5f58zNmcSbipUG5oz16Z/QqYKP8iKhtg5zAQJMi0erg==}
     engines: {node: '>=14'}
     dependencies:
-      '@typescript-eslint/utils': 6.7.2(eslint@8.49.0)(typescript@5.2.2)
+      '@typescript-eslint/utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
       '@unocss/config': 0.56.1
       '@unocss/core': 0.56.1
       magic-string: 0.30.3
@@ -3094,13 +3013,13 @@ packages:
       '@unocss/core': 0.56.1
     dev: true
 
-  /@unocss/vite@0.56.1(rollup@3.29.2)(vite@4.4.9):
+  /@unocss/vite@0.56.1(rollup@3.29.3)(vite@4.4.9):
     resolution: {integrity: sha512-IztLc304zP2LYQMsP3yVHmLwXlLUgCY3q6Nkqw6Hpds7l5JXBsE7Q19DtNW+4nDOp9wvWhw7CjQLmoh8d+V0lQ==}
     peerDependencies:
       vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0
     dependencies:
       '@ampproject/remapping': 2.2.1
-      '@rollup/pluginutils': 5.0.4(rollup@3.29.2)
+      '@rollup/pluginutils': 5.0.4(rollup@3.29.3)
       '@unocss/config': 0.56.1
       '@unocss/core': 0.56.1
       '@unocss/inspector': 0.56.1
@@ -3109,7 +3028,7 @@ packages:
       chokidar: 3.5.3
       fast-glob: 3.3.1
       magic-string: 0.30.3
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - rollup
     dev: true
@@ -3166,10 +3085,10 @@ packages:
       vite: ^4.0.0
       vue: ^3.0.0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.22.17)
-      '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.22.17)
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+      '@babel/core': 7.22.20
+      '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.22.20)
+      '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.22.20)
+      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
       vue: 3.3.4
     transitivePeerDependencies:
       - supports-color
@@ -3182,7 +3101,7 @@ packages:
       vite: ^4.0.0
       vue: ^3.2.25
     dependencies:
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
       vue: 3.3.4
     dev: true
 
@@ -3208,17 +3127,17 @@ packages:
     resolution: {integrity: sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==}
     dev: true
 
-  /@vue/babel-plugin-jsx@1.1.5(@babel/core@7.22.17):
+  /@vue/babel-plugin-jsx@1.1.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.17
+      '@babel/core': 7.22.20
       '@babel/helper-module-imports': 7.22.15
-      '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.17)
+      '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.20)
       '@babel/template': 7.22.15
-      '@babel/traverse': 7.22.17
-      '@babel/types': 7.22.17
+      '@babel/traverse': 7.22.20
+      '@babel/types': 7.22.19
       '@vue/babel-helper-vue-transform-on': 1.1.5
       camelcase: 6.3.0
       html-tags: 3.3.1
@@ -3357,26 +3276,26 @@ packages:
       - vue
     dev: false
 
-  /@xingyuv/eslint-config-basic@0.1.6(@typescript-eslint/eslint-plugin@6.7.2)(@typescript-eslint/parser@6.7.2)(eslint@8.49.0)(typescript@5.2.2):
+  /@xingyuv/eslint-config-basic@0.1.6(@typescript-eslint/eslint-plugin@6.7.2)(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-JTwjfotgqyiBkgRX4eQmnEYMhYYIkclQCvddswnfLWsI9XrGz/78Jzc/J+VHCeLCBAuUvhVlOYQpNEg7PJ85ww==}
     peerDependencies:
       eslint: '>=7.4.0'
     dependencies:
       '@stylistic/eslint-plugin-js': 0.0.3
-      eslint: 8.49.0
-      eslint-plugin-eslint-comments: 3.2.0(eslint@8.49.0)
+      eslint: 8.50.0
+      eslint-plugin-eslint-comments: 3.2.0(eslint@8.50.0)
       eslint-plugin-html: 7.1.0
-      eslint-plugin-import: /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.7.2)(eslint@8.49.0)
-      eslint-plugin-jsdoc: 46.8.1(eslint@8.49.0)
-      eslint-plugin-jsonc: 2.9.0(eslint@8.49.0)
-      eslint-plugin-markdown: 3.0.1(eslint@8.49.0)
-      eslint-plugin-n: 16.1.0(eslint@8.49.0)
+      eslint-plugin-import: /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)
+      eslint-plugin-jsdoc: 46.8.2(eslint@8.50.0)
+      eslint-plugin-jsonc: 2.9.0(eslint@8.50.0)
+      eslint-plugin-markdown: 3.0.1(eslint@8.50.0)
+      eslint-plugin-n: 16.1.0(eslint@8.50.0)
       eslint-plugin-no-only-tests: 3.1.0
-      eslint-plugin-promise: 6.1.1(eslint@8.49.0)
-      eslint-plugin-unicorn: 48.0.1(eslint@8.49.0)
-      eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.7.2)(eslint@8.49.0)
-      eslint-plugin-xingyuv: 0.1.6(eslint@8.49.0)(typescript@5.2.2)
-      eslint-plugin-yml: 1.9.0(eslint@8.49.0)
+      eslint-plugin-promise: 6.1.1(eslint@8.50.0)
+      eslint-plugin-unicorn: 48.0.1(eslint@8.50.0)
+      eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.7.2)(eslint@8.50.0)
+      eslint-plugin-xingyuv: 0.1.6(eslint@8.50.0)(typescript@5.2.2)
+      eslint-plugin-yml: 1.9.0(eslint@8.50.0)
       jsonc-eslint-parser: 2.3.0
       yaml-eslint-parser: 1.2.2
     transitivePeerDependencies:
@@ -3388,18 +3307,18 @@ packages:
       - typescript
     dev: true
 
-  /@xingyuv/eslint-config-ts@0.1.6(eslint@8.49.0)(typescript@5.2.2):
+  /@xingyuv/eslint-config-ts@0.1.6(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-Lr4VwHMaO0iBtkRztiypyUCOaBbc8ToSiXPy1M+vhSkMNGyAyln5u61o/Er8bMwSuY5x5YtcsFA5PTapT897zg==}
     peerDependencies:
       eslint: '>=7.4.0'
       typescript: '>=3.9'
     dependencies:
-      '@stylistic/eslint-plugin-ts': 0.0.3(eslint@8.49.0)(typescript@5.2.2)
-      '@typescript-eslint/eslint-plugin': 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.49.0)(typescript@5.2.2)
-      '@typescript-eslint/parser': 6.7.2(eslint@8.49.0)(typescript@5.2.2)
-      '@xingyuv/eslint-config-basic': 0.1.6(@typescript-eslint/eslint-plugin@6.7.2)(@typescript-eslint/parser@6.7.2)(eslint@8.49.0)(typescript@5.2.2)
-      eslint: 8.49.0
-      eslint-plugin-jest: 27.4.0(@typescript-eslint/eslint-plugin@6.7.2)(eslint@8.49.0)(typescript@5.2.2)
+      '@stylistic/eslint-plugin-ts': 0.0.3(eslint@8.50.0)(typescript@5.2.2)
+      '@typescript-eslint/eslint-plugin': 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
+      '@typescript-eslint/parser': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+      '@xingyuv/eslint-config-basic': 0.1.6(@typescript-eslint/eslint-plugin@6.7.2)(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
+      eslint: 8.50.0
+      eslint-plugin-jest: 27.4.0(@typescript-eslint/eslint-plugin@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
       typescript: 5.2.2
     transitivePeerDependencies:
       - eslint-import-resolver-typescript
@@ -3408,15 +3327,15 @@ packages:
       - supports-color
     dev: true
 
-  /@xingyuv/eslint-config-vue@0.1.6(@typescript-eslint/eslint-plugin@6.7.2)(@typescript-eslint/parser@6.7.2)(eslint@8.49.0)(typescript@5.2.2):
+  /@xingyuv/eslint-config-vue@0.1.6(@typescript-eslint/eslint-plugin@6.7.2)(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-swe4T0yG9FEGWuLInpXAZgQuxsRrkk/UfCfo8hc9Y/WOtNe2JqIaqh5EJhr7ERtRzpGeCnqVzm5+udd0dhxivA==}
     peerDependencies:
       eslint: '>=7.4.0'
     dependencies:
-      '@xingyuv/eslint-config-basic': 0.1.6(@typescript-eslint/eslint-plugin@6.7.2)(@typescript-eslint/parser@6.7.2)(eslint@8.49.0)(typescript@5.2.2)
-      '@xingyuv/eslint-config-ts': 0.1.6(eslint@8.49.0)(typescript@5.2.2)
-      eslint: 8.49.0
-      eslint-plugin-vue: 9.17.0(eslint@8.49.0)
+      '@xingyuv/eslint-config-basic': 0.1.6(@typescript-eslint/eslint-plugin@6.7.2)(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
+      '@xingyuv/eslint-config-ts': 0.1.6(eslint@8.50.0)(typescript@5.2.2)
+      eslint: 8.50.0
+      eslint-plugin-vue: 9.17.0(eslint@8.50.0)
       local-pkg: 0.4.3
     transitivePeerDependencies:
       - '@typescript-eslint/eslint-plugin'
@@ -3428,24 +3347,24 @@ packages:
       - typescript
     dev: true
 
-  /@xingyuv/eslint-config@0.1.6(eslint@8.49.0)(typescript@5.2.2):
+  /@xingyuv/eslint-config@0.1.6(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-ka4tHMcHDlIaBUaD95PsprWif2VZAqfRUvd/ft1rtpQEq7py5zAGLXRDXzdveafhUKdDDuT9mdjbDDD4qYQgAA==}
     peerDependencies:
       eslint: '>=7.4.0'
     dependencies:
-      '@typescript-eslint/eslint-plugin': 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.49.0)(typescript@5.2.2)
-      '@typescript-eslint/parser': 6.7.2(eslint@8.49.0)(typescript@5.2.2)
-      '@xingyuv/eslint-config-vue': 0.1.6(@typescript-eslint/eslint-plugin@6.7.2)(@typescript-eslint/parser@6.7.2)(eslint@8.49.0)(typescript@5.2.2)
-      eslint: 8.49.0
-      eslint-plugin-eslint-comments: 3.2.0(eslint@8.49.0)
+      '@typescript-eslint/eslint-plugin': 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
+      '@typescript-eslint/parser': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
+      '@xingyuv/eslint-config-vue': 0.1.6(@typescript-eslint/eslint-plugin@6.7.2)(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
+      eslint: 8.50.0
+      eslint-plugin-eslint-comments: 3.2.0(eslint@8.50.0)
       eslint-plugin-html: 7.1.0
-      eslint-plugin-import: /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.7.2)(eslint@8.49.0)
-      eslint-plugin-jsonc: 2.9.0(eslint@8.49.0)
-      eslint-plugin-n: 16.1.0(eslint@8.49.0)
-      eslint-plugin-promise: 6.1.1(eslint@8.49.0)
-      eslint-plugin-unicorn: 48.0.1(eslint@8.49.0)
-      eslint-plugin-vue: 9.17.0(eslint@8.49.0)
-      eslint-plugin-yml: 1.9.0(eslint@8.49.0)
+      eslint-plugin-import: /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)
+      eslint-plugin-jsonc: 2.9.0(eslint@8.50.0)
+      eslint-plugin-n: 16.1.0(eslint@8.50.0)
+      eslint-plugin-promise: 6.1.1(eslint@8.50.0)
+      eslint-plugin-unicorn: 48.0.1(eslint@8.50.0)
+      eslint-plugin-vue: 9.17.0(eslint@8.50.0)
+      eslint-plugin-yml: 1.9.0(eslint@8.50.0)
       jsonc-eslint-parser: 2.3.0
       yaml-eslint-parser: 1.2.2
     transitivePeerDependencies:
@@ -3677,8 +3596,8 @@ packages:
     dependencies:
       array-buffer-byte-length: 1.0.0
       call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.22.1
+      define-properties: 1.2.1
+      es-abstract: 1.22.2
       get-intrinsic: 1.2.1
       is-array-buffer: 3.0.2
       is-shared-array-buffer: 1.0.2
@@ -3733,7 +3652,7 @@ packages:
   /axios@0.26.1(debug@4.3.4):
     resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==}
     dependencies:
-      follow-redirects: 1.15.2(debug@4.3.4)
+      follow-redirects: 1.15.3(debug@4.3.4)
     transitivePeerDependencies:
       - debug
     dev: true
@@ -3741,44 +3660,44 @@ packages:
   /axios@1.5.0(debug@4.3.4):
     resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==}
     dependencies:
-      follow-redirects: 1.15.2(debug@4.3.4)
+      follow-redirects: 1.15.3(debug@4.3.4)
       form-data: 4.0.0
       proxy-from-env: 1.1.0
     transitivePeerDependencies:
       - debug
 
-  /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.22.17):
+  /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.22.20):
     resolution: {integrity: sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==}
     peerDependencies:
       '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
     dependencies:
-      '@babel/compat-data': 7.22.9
-      '@babel/core': 7.22.17
-      '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.17)
+      '@babel/compat-data': 7.22.20
+      '@babel/core': 7.22.20
+      '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.20)
       semver: 6.3.1
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /babel-plugin-polyfill-corejs3@0.8.3(@babel/core@7.22.17):
-    resolution: {integrity: sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==}
+  /babel-plugin-polyfill-corejs3@0.8.4(@babel/core@7.22.20):
+    resolution: {integrity: sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==}
     peerDependencies:
       '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.20)
       core-js-compat: 3.32.2
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.22.17):
+  /babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.22.20):
     resolution: {integrity: sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==}
     peerDependencies:
       '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
     dependencies:
-      '@babel/core': 7.22.17
-      '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.20)
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -3897,15 +3816,15 @@ packages:
       fill-range: 7.0.1
     dev: true
 
-  /browserslist@4.21.10:
-    resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==}
+  /browserslist@4.21.11:
+    resolution: {integrity: sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==}
     engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
     hasBin: true
     dependencies:
-      caniuse-lite: 1.0.30001532
-      electron-to-chromium: 1.4.513
+      caniuse-lite: 1.0.30001538
+      electron-to-chromium: 1.4.528
       node-releases: 2.0.13
-      update-browserslist-db: 1.0.11(browserslist@4.21.10)
+      update-browserslist-db: 1.0.13(browserslist@4.21.11)
     dev: true
 
   /buffer-from@1.1.2:
@@ -4004,8 +3923,8 @@ packages:
     engines: {node: '>=10'}
     dev: true
 
-  /caniuse-lite@1.0.30001532:
-    resolution: {integrity: sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==}
+  /caniuse-lite@1.0.30001538:
+    resolution: {integrity: sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==}
     dev: true
 
   /cfb@1.2.2:
@@ -4123,8 +4042,8 @@ packages:
       restore-cursor: 4.0.0
     dev: true
 
-  /cli-spinners@2.9.0:
-    resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==}
+  /cli-spinners@2.9.1:
+    resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==}
     engines: {node: '>=6'}
     dev: true
 
@@ -4313,7 +4232,7 @@ packages:
   /core-js-compat@3.32.2:
     resolution: {integrity: sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==}
     dependencies:
-      browserslist: 4.21.10
+      browserslist: 4.21.11
     dev: true
 
   /core-js@3.32.2:
@@ -4329,7 +4248,7 @@ packages:
       vary: 1.1.2
     dev: true
 
-  /cosmiconfig-typescript-loader@4.4.0(@types/node@20.4.7)(cosmiconfig@8.3.5)(ts-node@10.9.1)(typescript@5.2.2):
+  /cosmiconfig-typescript-loader@4.4.0(@types/node@20.4.7)(cosmiconfig@8.3.6)(ts-node@10.9.1)(typescript@5.2.2):
     resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==}
     engines: {node: '>=v14.21.3'}
     peerDependencies:
@@ -4339,13 +4258,13 @@ packages:
       typescript: '>=4'
     dependencies:
       '@types/node': 20.4.7
-      cosmiconfig: 8.3.5(typescript@5.2.2)
-      ts-node: 10.9.1(@types/node@20.6.0)(typescript@5.2.2)
+      cosmiconfig: 8.3.6(typescript@5.2.2)
+      ts-node: 10.9.1(@types/node@20.6.4)(typescript@5.2.2)
       typescript: 5.2.2
     dev: true
 
-  /cosmiconfig@8.3.5(typescript@5.2.2):
-    resolution: {integrity: sha512-A5Xry3xfS96wy2qbiLkQLAg4JUrR2wvfybxj6yqLmrUfMAvhS3MZxIP2oQn0grgYIvJqzpeTEWu4vK0t+12NNw==}
+  /cosmiconfig@8.3.6(typescript@5.2.2):
+    resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
     engines: {node: '>=14'}
     peerDependencies:
       typescript: '>=4.9.5'
@@ -4590,6 +4509,15 @@ packages:
       clone: 1.0.4
     dev: true
 
+  /define-data-property@1.1.0:
+    resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      get-intrinsic: 1.2.1
+      gopd: 1.0.1
+      has-property-descriptors: 1.0.0
+    dev: true
+
   /define-lazy-prop@2.0.0:
     resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
     engines: {node: '>=8'}
@@ -4600,10 +4528,11 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
-  /define-properties@1.2.0:
-    resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
+  /define-properties@1.2.1:
+    resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
     engines: {node: '>= 0.4'}
     dependencies:
+      define-data-property: 1.1.0
       has-property-descriptors: 1.0.0
       object-keys: 1.1.1
     dev: true
@@ -4809,8 +4738,8 @@ packages:
       jake: 10.8.7
     dev: true
 
-  /electron-to-chromium@1.4.513:
-    resolution: {integrity: sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw==}
+  /electron-to-chromium@1.4.528:
+    resolution: {integrity: sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==}
     dev: true
 
   /element-kit@1.0.6:
@@ -4862,8 +4791,8 @@ packages:
       is-arrayish: 0.2.1
     dev: true
 
-  /es-abstract@1.22.1:
-    resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==}
+  /es-abstract@1.22.2:
+    resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==}
     engines: {node: '>= 0.4'}
     dependencies:
       array-buffer-byte-length: 1.0.0
@@ -4893,7 +4822,7 @@ packages:
       object-inspect: 1.12.3
       object-keys: 1.1.1
       object.assign: 4.1.4
-      regexp.prototype.flags: 1.5.0
+      regexp.prototype.flags: 1.5.1
       safe-array-concat: 1.0.1
       safe-regex-test: 1.0.0
       string.prototype.trim: 1.2.8
@@ -4980,12 +4909,12 @@ packages:
     dependencies:
       debug: 3.2.7
       is-core-module: 2.13.0
-      resolve: 1.22.4
+      resolve: 1.22.6
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-node@0.3.9)(eslint@8.49.0):
+  /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-node@0.3.9)(eslint@8.50.0):
     resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
     engines: {node: '>=4'}
     peerDependencies:
@@ -5006,33 +4935,33 @@ packages:
       eslint-import-resolver-webpack:
         optional: true
     dependencies:
-      '@typescript-eslint/parser': 6.7.2(eslint@8.49.0)(typescript@5.2.2)
+      '@typescript-eslint/parser': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
       debug: 3.2.7
-      eslint: 8.49.0
+      eslint: 8.50.0
       eslint-import-resolver-node: 0.3.9
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /eslint-plugin-es-x@7.2.0(eslint@8.49.0):
+  /eslint-plugin-es-x@7.2.0(eslint@8.50.0):
     resolution: {integrity: sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
       eslint: '>=8'
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
-      '@eslint-community/regexpp': 4.8.0
-      eslint: 8.49.0
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0)
+      '@eslint-community/regexpp': 4.8.1
+      eslint: 8.50.0
     dev: true
 
-  /eslint-plugin-eslint-comments@3.2.0(eslint@8.49.0):
+  /eslint-plugin-eslint-comments@3.2.0(eslint@8.50.0):
     resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==}
     engines: {node: '>=6.5.0'}
     peerDependencies:
       eslint: '>=4.19.1'
     dependencies:
       escape-string-regexp: 1.0.5
-      eslint: 8.49.0
+      eslint: 8.50.0
       ignore: 5.2.4
     dev: true
 
@@ -5042,7 +4971,7 @@ packages:
       htmlparser2: 8.0.2
     dev: true
 
-  /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.7.2)(eslint@8.49.0):
+  /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.7.2)(eslint@8.50.0):
     resolution: {integrity: sha512-a4oVt0j3ixNhGhvV4XF6NS7OWRFK2rrJ0Q5C4S2dSRb8FxZi31J0uUd5WJLL58wnVJ/OiQ1BxiXnFA4dWQO1Cg==}
     engines: {node: '>=12'}
     peerDependencies:
@@ -5050,13 +4979,13 @@ packages:
     dependencies:
       debug: 3.2.7
       doctrine: 2.1.0
-      eslint: 8.49.0
+      eslint: 8.50.0
       eslint-import-resolver-node: 0.3.9
-      eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-node@0.3.9)(eslint@8.49.0)
-      get-tsconfig: 4.7.0
+      eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-node@0.3.9)(eslint@8.50.0)
+      get-tsconfig: 4.7.2
       is-glob: 4.0.3
       minimatch: 3.1.2
-      resolve: 1.22.4
+      resolve: 1.22.6
       semver: 7.5.4
     transitivePeerDependencies:
       - '@typescript-eslint/parser'
@@ -5065,7 +4994,7 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-plugin-jest@27.4.0(@typescript-eslint/eslint-plugin@6.7.2)(eslint@8.49.0)(typescript@5.2.2):
+  /eslint-plugin-jest@27.4.0(@typescript-eslint/eslint-plugin@6.7.2)(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-ukVeKmMPAUA5SWjHenvyyXnirKfHKMdOsTZdn5tZx5EW05HGVQwBohigjFZGGj3zuv1cV6hc82FvWv6LdIbkgg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
@@ -5078,16 +5007,16 @@ packages:
       jest:
         optional: true
     dependencies:
-      '@typescript-eslint/eslint-plugin': 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.49.0)(typescript@5.2.2)
-      '@typescript-eslint/utils': 5.62.0(eslint@8.49.0)(typescript@5.2.2)
-      eslint: 8.49.0
+      '@typescript-eslint/eslint-plugin': 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
+      '@typescript-eslint/utils': 5.62.0(eslint@8.50.0)(typescript@5.2.2)
+      eslint: 8.50.0
     transitivePeerDependencies:
       - supports-color
       - typescript
     dev: true
 
-  /eslint-plugin-jsdoc@46.8.1(eslint@8.49.0):
-    resolution: {integrity: sha512-uTce7IBluPKXIQMWJkIwFsI1gv7sZRmLjctca2K5DIxPi8fSBj9f4iru42XmGwuiMyH2f3nfc60sFmnSGv4Z/A==}
+  /eslint-plugin-jsdoc@46.8.2(eslint@8.50.0):
+    resolution: {integrity: sha512-5TSnD018f3tUJNne4s4gDWQflbsgOycIKEUBoCLn6XtBMgNHxQFmV8vVxUtiPxAQq8lrX85OaSG/2gnctxw9uQ==}
     engines: {node: '>=16'}
     peerDependencies:
       eslint: ^7.0.0 || ^8.0.0
@@ -5097,7 +5026,7 @@ packages:
       comment-parser: 1.4.0
       debug: 4.3.4
       escape-string-regexp: 4.0.0
-      eslint: 8.49.0
+      eslint: 8.50.0
       esquery: 1.5.0
       is-builtin-module: 3.2.1
       semver: 7.5.4
@@ -5106,45 +5035,45 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-plugin-jsonc@2.9.0(eslint@8.49.0):
+  /eslint-plugin-jsonc@2.9.0(eslint@8.50.0):
     resolution: {integrity: sha512-RK+LeONVukbLwT2+t7/OY54NJRccTXh/QbnXzPuTLpFMVZhPuq1C9E07+qWenGx7rrQl0kAalAWl7EmB+RjpGA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: '>=6.0.0'
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
-      eslint: 8.49.0
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0)
+      eslint: 8.50.0
       jsonc-eslint-parser: 2.3.0
       natural-compare: 1.4.0
     dev: true
 
-  /eslint-plugin-markdown@3.0.1(eslint@8.49.0):
+  /eslint-plugin-markdown@3.0.1(eslint@8.50.0):
     resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
     dependencies:
-      eslint: 8.49.0
+      eslint: 8.50.0
       mdast-util-from-markdown: 0.8.5
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /eslint-plugin-n@16.1.0(eslint@8.49.0):
+  /eslint-plugin-n@16.1.0(eslint@8.50.0):
     resolution: {integrity: sha512-3wv/TooBst0N4ND+pnvffHuz9gNPmk/NkLwAxOt2JykTl/hcuECe6yhTtLJcZjIxtZwN+GX92ACp/QTLpHA3Hg==}
     engines: {node: '>=16.0.0'}
     peerDependencies:
       eslint: '>=7.0.0'
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0)
       builtins: 5.0.1
-      eslint: 8.49.0
-      eslint-plugin-es-x: 7.2.0(eslint@8.49.0)
-      get-tsconfig: 4.7.0
+      eslint: 8.50.0
+      eslint-plugin-es-x: 7.2.0(eslint@8.50.0)
+      get-tsconfig: 4.7.2
       ignore: 5.2.4
       is-core-module: 2.13.0
       minimatch: 3.1.2
-      resolve: 1.22.4
+      resolve: 1.22.6
       semver: 7.5.4
     dev: true
 
@@ -5153,26 +5082,26 @@ packages:
     engines: {node: '>=5.0.0'}
     dev: true
 
-  /eslint-plugin-promise@6.1.1(eslint@8.49.0):
+  /eslint-plugin-promise@6.1.1(eslint@8.50.0):
     resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^7.0.0 || ^8.0.0
     dependencies:
-      eslint: 8.49.0
+      eslint: 8.50.0
     dev: true
 
-  /eslint-plugin-unicorn@48.0.1(eslint@8.49.0):
+  /eslint-plugin-unicorn@48.0.1(eslint@8.50.0):
     resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==}
     engines: {node: '>=16'}
     peerDependencies:
       eslint: '>=8.44.0'
     dependencies:
-      '@babel/helper-validator-identifier': 7.22.15
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
+      '@babel/helper-validator-identifier': 7.22.20
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0)
       ci-info: 3.8.0
       clean-regexp: 1.0.0
-      eslint: 8.49.0
+      eslint: 8.50.0
       esquery: 1.5.0
       indent-string: 4.0.0
       is-builtin-module: 3.2.1
@@ -5186,7 +5115,7 @@ packages:
       strip-indent: 3.0.0
     dev: true
 
-  /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.7.2)(eslint@8.49.0):
+  /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.7.2)(eslint@8.50.0):
     resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -5196,47 +5125,47 @@ packages:
       '@typescript-eslint/eslint-plugin':
         optional: true
     dependencies:
-      '@typescript-eslint/eslint-plugin': 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.49.0)(typescript@5.2.2)
-      eslint: 8.49.0
+      '@typescript-eslint/eslint-plugin': 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
+      eslint: 8.50.0
       eslint-rule-composer: 0.3.0
     dev: true
 
-  /eslint-plugin-vue@9.17.0(eslint@8.49.0):
+  /eslint-plugin-vue@9.17.0(eslint@8.50.0):
     resolution: {integrity: sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==}
     engines: {node: ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
-      eslint: 8.49.0
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0)
+      eslint: 8.50.0
       natural-compare: 1.4.0
       nth-check: 2.1.1
       postcss-selector-parser: 6.0.13
       semver: 7.5.4
-      vue-eslint-parser: 9.3.1(eslint@8.49.0)
+      vue-eslint-parser: 9.3.1(eslint@8.50.0)
       xml-name-validator: 4.0.0
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /eslint-plugin-xingyuv@0.1.6(eslint@8.49.0)(typescript@5.2.2):
+  /eslint-plugin-xingyuv@0.1.6(eslint@8.50.0)(typescript@5.2.2):
     resolution: {integrity: sha512-ZKb+0FFVj/EpjuHRJBh5kjjKVrkTVpZWDO9PxtcWxee3a5+dQefNzN2Gltvbu03E/RsTP2pczEDa9Li4YtBfxA==}
     dependencies:
-      '@typescript-eslint/utils': 6.7.2(eslint@8.49.0)(typescript@5.2.2)
+      '@typescript-eslint/utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
     transitivePeerDependencies:
       - eslint
       - supports-color
       - typescript
     dev: true
 
-  /eslint-plugin-yml@1.9.0(eslint@8.49.0):
+  /eslint-plugin-yml@1.9.0(eslint@8.50.0):
     resolution: {integrity: sha512-ayuC57WyVQ5+QZ02y62GiB//5+zsiyzUGxUX/mrhLni+jfsKA4KoITjkbR65iUdjjhWpyTJHPcAIFLKQIOwgsw==}
     engines: {node: ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: '>=6.0.0'
     dependencies:
       debug: 4.3.4
-      eslint: 8.49.0
+      eslint: 8.50.0
       lodash: 4.17.21
       natural-compare: 1.4.0
       yaml-eslint-parser: 1.2.2
@@ -5270,15 +5199,15 @@ packages:
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
-  /eslint@8.49.0:
-    resolution: {integrity: sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==}
+  /eslint@8.50.0:
+    resolution: {integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     hasBin: true
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
-      '@eslint-community/regexpp': 4.8.0
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0)
+      '@eslint-community/regexpp': 4.8.1
       '@eslint/eslintrc': 2.1.2
-      '@eslint/js': 8.49.0
+      '@eslint/js': 8.50.0
       '@humanwhocodes/config-array': 0.11.11
       '@humanwhocodes/module-importer': 1.0.1
       '@nodelib/fs.walk': 1.2.8
@@ -5297,7 +5226,7 @@ packages:
       file-entry-cache: 6.0.1
       find-up: 5.0.0
       glob-parent: 6.0.2
-      globals: 13.21.0
+      globals: 13.22.0
       graphemer: 1.4.0
       ignore: 5.2.4
       imurmurhash: 0.1.4
@@ -5320,7 +5249,7 @@ packages:
     resolution: {integrity: sha512-w78cQGlptQfsBYfootUCitsKS+MD74uR5L6kNsvwVkJsfzEepIafbvWsx2xK4rcFP4IUftt4F6J8EhagUxX+Bg==}
     hasBin: true
     dependencies:
-      tsx: 3.12.8
+      tsx: 3.12.10
     dev: true
 
   /espree@9.6.1:
@@ -5557,17 +5486,17 @@ packages:
     resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==}
     engines: {node: '>=12.0.0'}
     dependencies:
-      flatted: 3.2.7
+      flatted: 3.2.9
       keyv: 4.5.3
       rimraf: 3.0.2
     dev: true
 
-  /flatted@3.2.7:
-    resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
+  /flatted@3.2.9:
+    resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
     dev: true
 
-  /follow-redirects@1.15.2(debug@4.3.4):
-    resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
+  /follow-redirects@1.15.3(debug@4.3.4):
+    resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==}
     engines: {node: '>=4.0'}
     peerDependencies:
       debug: '*'
@@ -5664,8 +5593,8 @@ packages:
     engines: {node: '>= 0.4'}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.22.1
+      define-properties: 1.2.1
+      es-abstract: 1.22.2
       functions-have-names: 1.2.3
     dev: true
 
@@ -5708,8 +5637,8 @@ packages:
       get-intrinsic: 1.2.1
     dev: true
 
-  /get-tsconfig@4.7.0:
-    resolution: {integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==}
+  /get-tsconfig@4.7.2:
+    resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==}
     dependencies:
       resolve-pkg-maps: 1.0.0
     dev: true
@@ -5745,8 +5674,8 @@ packages:
       is-glob: 4.0.3
     dev: true
 
-  /glob@10.3.4:
-    resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==}
+  /glob@10.3.6:
+    resolution: {integrity: sha512-mEfImdc/fiYHEcF6pHFfD2b/KrdFB1qH9mRe5vI5HROF8G51SWxQJ2V56Ezl6ZL9y86gsxQ1Lgo2S746KGUPSQ==}
     engines: {node: '>=16 || 14 >=14.17'}
     hasBin: true
     dependencies:
@@ -5803,8 +5732,8 @@ packages:
     engines: {node: '>=4'}
     dev: true
 
-  /globals@13.21.0:
-    resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==}
+  /globals@13.22.0:
+    resolution: {integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==}
     engines: {node: '>=8'}
     dependencies:
       type-fest: 0.20.2
@@ -5814,7 +5743,7 @@ packages:
     resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
     engines: {node: '>= 0.4'}
     dependencies:
-      define-properties: 1.2.0
+      define-properties: 1.2.1
     dev: true
 
   /globby@11.1.0:
@@ -6517,7 +6446,7 @@ packages:
     resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
     engines: {node: '>= 10.13.0'}
     dependencies:
-      '@types/node': 20.6.0
+      '@types/node': 20.6.4
       merge-stream: 2.0.0
       supports-color: 7.2.0
     dev: true
@@ -7280,8 +7209,8 @@ packages:
       whatwg-url: 5.0.0
     dev: true
 
-  /node-html-parser@6.1.9:
-    resolution: {integrity: sha512-nQ+MRf0PmRTLcMalVqMsWvceSaBydBCBlnQSL78HVk/E8e0Aazyao4SI9aB67XAAgOgHMsw7q5dJBUPPt9XE3g==}
+  /node-html-parser@6.1.10:
+    resolution: {integrity: sha512-6/uWdWxjQWQ7tMcFK2wWlrflsQUzh1HsEzlIf2j5+TtzfhT2yUvg3DwZYAmjEHeR3uX74ko7exjHW69J0tOzIg==}
     dependencies:
       css-select: 5.1.0
       he: 1.2.0
@@ -7295,7 +7224,7 @@ packages:
     resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
     dependencies:
       hosted-git-info: 2.8.9
-      resolve: 1.22.4
+      resolve: 1.22.6
       semver: 5.7.2
       validate-npm-package-license: 3.0.4
     dev: true
@@ -7373,7 +7302,7 @@ packages:
     engines: {node: '>= 0.4'}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
+      define-properties: 1.2.1
       has-symbols: 1.0.3
       object-keys: 1.1.1
     dev: true
@@ -7451,7 +7380,7 @@ packages:
       bl: 4.1.0
       chalk: 4.1.2
       cli-cursor: 3.1.0
-      cli-spinners: 2.9.0
+      cli-spinners: 2.9.1
       is-interactive: 1.0.0
       is-unicode-supported: 0.1.0
       log-symbols: 4.1.0
@@ -7904,7 +7833,7 @@ packages:
     resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
     engines: {node: '>=8'}
     dependencies:
-      '@types/normalize-package-data': 2.4.1
+      '@types/normalize-package-data': 2.4.2
       normalize-package-data: 2.5.0
       parse-json: 5.2.0
       type-fest: 0.6.0
@@ -7914,7 +7843,7 @@ packages:
     resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==}
     engines: {node: '>=12'}
     dependencies:
-      '@types/normalize-package-data': 2.4.1
+      '@types/normalize-package-data': 2.4.2
       normalize-package-data: 3.0.3
       parse-json: 5.2.0
       type-fest: 1.4.0
@@ -7952,8 +7881,8 @@ packages:
       strip-indent: 4.0.0
     dev: true
 
-  /regenerate-unicode-properties@10.1.0:
-    resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==}
+  /regenerate-unicode-properties@10.1.1:
+    resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==}
     engines: {node: '>=4'}
     dependencies:
       regenerate: 1.4.2
@@ -7985,13 +7914,13 @@ packages:
     hasBin: true
     dev: true
 
-  /regexp.prototype.flags@1.5.0:
-    resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==}
+  /regexp.prototype.flags@1.5.1:
+    resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
     engines: {node: '>= 0.4'}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
-      functions-have-names: 1.2.3
+      define-properties: 1.2.1
+      set-function-name: 2.0.1
     dev: true
 
   /regexpu-core@5.3.2:
@@ -8000,7 +7929,7 @@ packages:
     dependencies:
       '@babel/regjsgen': 0.8.0
       regenerate: 1.4.2
-      regenerate-unicode-properties: 10.1.0
+      regenerate-unicode-properties: 10.1.1
       regjsparser: 0.9.1
       unicode-match-property-ecmascript: 2.0.0
       unicode-match-property-value-ecmascript: 2.1.0
@@ -8075,8 +8004,8 @@ packages:
     deprecated: https://github.com/lydell/resolve-url#deprecated
     dev: true
 
-  /resolve@1.22.4:
-    resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==}
+  /resolve@1.22.6:
+    resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==}
     hasBin: true
     dependencies:
       is-core-module: 2.13.0
@@ -8126,7 +8055,7 @@ packages:
     engines: {node: '>=14'}
     hasBin: true
     dependencies:
-      glob: 10.3.4
+      glob: 10.3.6
     dev: true
 
   /rollup-plugin-purge-icons@0.9.1:
@@ -8153,7 +8082,7 @@ packages:
       terser: 5.20.0
     dev: true
 
-  /rollup-plugin-visualizer@5.9.2(rollup@3.29.2):
+  /rollup-plugin-visualizer@5.9.2(rollup@3.29.3):
     resolution: {integrity: sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==}
     engines: {node: '>=14'}
     hasBin: true
@@ -8165,7 +8094,7 @@ packages:
     dependencies:
       open: 8.4.2
       picomatch: 2.3.1
-      rollup: 3.29.2
+      rollup: 3.29.3
       source-map: 0.7.4
       yargs: 17.7.2
     dev: true
@@ -8178,8 +8107,8 @@ packages:
       fsevents: 2.3.3
     dev: true
 
-  /rollup@3.29.2:
-    resolution: {integrity: sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==}
+  /rollup@3.29.3:
+    resolution: {integrity: sha512-T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg==}
     engines: {node: '>=14.18.0', npm: '>=8.0.0'}
     hasBin: true
     optionalDependencies:
@@ -8290,6 +8219,15 @@ packages:
       randombytes: 2.1.0
     dev: true
 
+  /set-function-name@2.0.1:
+    resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      define-data-property: 1.1.0
+      functions-have-names: 1.2.3
+      has-property-descriptors: 1.0.0
+    dev: true
+
   /set-value@2.0.1:
     resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
     engines: {node: '>=0.10.0'}
@@ -8461,7 +8399,7 @@ packages:
     resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
     dependencies:
       spdx-expression-parse: 3.0.1
-      spdx-license-ids: 3.0.13
+      spdx-license-ids: 3.0.15
     dev: true
 
   /spdx-exceptions@2.3.0:
@@ -8472,11 +8410,11 @@ packages:
     resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
     dependencies:
       spdx-exceptions: 2.3.0
-      spdx-license-ids: 3.0.13
+      spdx-license-ids: 3.0.15
     dev: true
 
-  /spdx-license-ids@3.0.13:
-    resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==}
+  /spdx-license-ids@3.0.15:
+    resolution: {integrity: sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==}
     dev: true
 
   /split-string@3.1.0:
@@ -8540,16 +8478,17 @@ packages:
       strip-ansi: 7.1.0
     dev: true
 
-  /string.prototype.matchall@4.0.9:
-    resolution: {integrity: sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==}
+  /string.prototype.matchall@4.0.10:
+    resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.22.1
+      define-properties: 1.2.1
+      es-abstract: 1.22.2
       get-intrinsic: 1.2.1
       has-symbols: 1.0.3
       internal-slot: 1.0.5
-      regexp.prototype.flags: 1.5.0
+      regexp.prototype.flags: 1.5.1
+      set-function-name: 2.0.1
       side-channel: 1.0.4
     dev: true
 
@@ -8558,24 +8497,24 @@ packages:
     engines: {node: '>= 0.4'}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.22.1
+      define-properties: 1.2.1
+      es-abstract: 1.22.2
     dev: true
 
   /string.prototype.trimend@1.0.7:
     resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.22.1
+      define-properties: 1.2.1
+      es-abstract: 1.22.2
     dev: true
 
   /string.prototype.trimstart@1.0.7:
     resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.22.1
+      define-properties: 1.2.1
+      es-abstract: 1.22.2
     dev: true
 
   /string@3.3.3:
@@ -8742,7 +8681,7 @@ packages:
       '@csstools/selector-specificity': 3.0.0(postcss-selector-parser@6.0.13)
       balanced-match: 2.0.0
       colord: 2.9.3
-      cosmiconfig: 8.3.5(typescript@5.2.2)
+      cosmiconfig: 8.3.6(typescript@5.2.2)
       css-functions-list: 3.2.0
       css-tree: 2.3.1
       debug: 4.3.4
@@ -9021,7 +8960,7 @@ packages:
       typescript: 5.2.2
     dev: true
 
-  /ts-node@10.9.1(@types/node@20.6.0)(typescript@5.2.2):
+  /ts-node@10.9.1(@types/node@20.6.4)(typescript@5.2.2):
     resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
     hasBin: true
     peerDependencies:
@@ -9040,7 +8979,7 @@ packages:
       '@tsconfig/node12': 1.0.11
       '@tsconfig/node14': 1.0.3
       '@tsconfig/node16': 1.0.4
-      '@types/node': 20.6.0
+      '@types/node': 20.6.4
       acorn: 8.10.0
       acorn-walk: 8.2.0
       arg: 4.1.3
@@ -9074,13 +9013,13 @@ packages:
       typescript: 5.2.2
     dev: true
 
-  /tsx@3.12.8:
-    resolution: {integrity: sha512-Lt9KYaRGF023tlLInPj8rgHwsZU8qWLBj4iRXNWxTfjIkU7canGL806AqKear1j722plHuiYNcL2ZCo6uS9UJA==}
+  /tsx@3.12.10:
+    resolution: {integrity: sha512-2+46h4xvUt1aLDNvk5YBT8Uzw+b7BolGbn7iSMucYqCXZiDc+1IMghLVdw8kKjING32JFOeO+Am9posvjkeclA==}
     hasBin: true
     dependencies:
-      '@esbuild-kit/cjs-loader': 2.4.2
-      '@esbuild-kit/core-utils': 3.2.3
-      '@esbuild-kit/esm-loader': 2.5.5
+      '@esbuild-kit/cjs-loader': 2.4.4
+      '@esbuild-kit/core-utils': 3.3.2
+      '@esbuild-kit/esm-loader': 2.6.5
     optionalDependencies:
       fsevents: 2.3.3
     dev: true
@@ -9251,7 +9190,7 @@ packages:
     engines: {node: '>= 10.0.0'}
     dev: true
 
-  /unocss@0.56.1(postcss@8.4.30)(rollup@3.29.2)(vite@4.4.9):
+  /unocss@0.56.1(postcss@8.4.30)(rollup@3.29.3)(vite@4.4.9):
     resolution: {integrity: sha512-jjkcyXfW90CUjN4tBV6SrHX9ifi5GQgcwAQlMRB0copJEW3ejM/nyZnRgNexaV7hi7Ao76XMVqCKbOC5B+IuOA==}
     engines: {node: '>=14'}
     peerDependencies:
@@ -9263,8 +9202,8 @@ packages:
       vite:
         optional: true
     dependencies:
-      '@unocss/astro': 0.56.1(rollup@3.29.2)(vite@4.4.9)
-      '@unocss/cli': 0.56.1(rollup@3.29.2)
+      '@unocss/astro': 0.56.1(rollup@3.29.3)(vite@4.4.9)
+      '@unocss/cli': 0.56.1(rollup@3.29.3)
       '@unocss/core': 0.56.1
       '@unocss/extractor-arbitrary-variants': 0.56.1
       '@unocss/postcss': 0.56.1(postcss@8.4.30)
@@ -9282,8 +9221,8 @@ packages:
       '@unocss/transformer-compile-class': 0.56.1
       '@unocss/transformer-directives': 0.56.1
       '@unocss/transformer-variant-group': 0.56.1
-      '@unocss/vite': 0.56.1(rollup@3.29.2)(vite@4.4.9)
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+      '@unocss/vite': 0.56.1(rollup@3.29.3)(vite@4.4.9)
+      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - postcss
       - rollup
@@ -9308,13 +9247,13 @@ packages:
     engines: {node: '>=4'}
     dev: true
 
-  /update-browserslist-db@1.0.11(browserslist@4.21.10):
-    resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
+  /update-browserslist-db@1.0.13(browserslist@4.21.11):
+    resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
     hasBin: true
     peerDependencies:
       browserslist: '>= 4.21.0'
     dependencies:
-      browserslist: 4.21.10
+      browserslist: 4.21.11
       escalade: 3.1.1
       picocolors: 1.0.0
     dev: true
@@ -9410,7 +9349,7 @@ packages:
       chalk: 4.1.2
       debug: 4.3.4
       fs-extra: 10.1.0
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -9425,7 +9364,7 @@ packages:
       axios: 1.5.0(debug@4.3.4)
       debug: 4.3.4
       picocolors: 1.0.0
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - encoding
       - supports-color
@@ -9440,7 +9379,7 @@ packages:
       picocolors: 1.0.0
       progress: 2.0.3
       rd: 2.0.1
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
     dev: true
 
   /vite-plugin-purge-icons@0.9.2(vite@4.4.9):
@@ -9452,7 +9391,7 @@ packages:
       '@purge-icons/core': 0.9.1
       '@purge-icons/generated': 0.9.0
       rollup-plugin-purge-icons: 0.9.1
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - encoding
       - supports-color
@@ -9469,7 +9408,7 @@ packages:
       debug: 4.3.4
       fast-glob: 3.3.1
       pretty-bytes: 6.1.1
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
       workbox-build: 7.0.0
       workbox-window: 7.0.0
     transitivePeerDependencies:
@@ -9489,17 +9428,17 @@ packages:
       pathe: 0.2.0
       svg-baker: 1.7.0
       svgo: 2.8.0
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /vite-vue-plugin-html@1.0.2(rollup@3.29.2)(vite@4.4.9):
+  /vite-vue-plugin-html@1.0.2(rollup@3.29.3)(vite@4.4.9):
     resolution: {integrity: sha512-MADzWRhKRXQDefI2ttVukx5NMMh+Wh9S2bhmXW4Kce4F4IfTgy5dain6KYZvS5NtqMXiTj/bURPpdaAxwrQ9DA==}
     peerDependencies:
       vite: '>=4.2.0'
     dependencies:
-      '@rollup/pluginutils': 5.0.4(rollup@3.29.2)
+      '@rollup/pluginutils': 5.0.4(rollup@3.29.3)
       colorette: 2.0.20
       connect-history-api-fallback: 2.0.0
       consola: 3.2.3
@@ -9509,14 +9448,14 @@ packages:
       fast-glob: 3.3.1
       fs-extra: 11.1.1
       html-minifier-terser: 7.2.0
-      node-html-parser: 6.1.9
+      node-html-parser: 6.1.10
       pathe: 1.1.1
-      vite: 4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - rollup
     dev: true
 
-  /vite@4.4.9(@types/node@20.6.0)(less@4.2.0)(terser@5.20.0):
+  /vite@4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0):
     resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
     engines: {node: ^14.18.0 || >=16.0.0}
     hasBin: true
@@ -9544,11 +9483,11 @@ packages:
       terser:
         optional: true
     dependencies:
-      '@types/node': 20.6.0
+      '@types/node': 20.6.4
       esbuild: 0.18.20
       less: 4.2.0
       postcss: 8.4.30
-      rollup: 3.29.2
+      rollup: 3.29.3
       terser: 5.20.0
     optionalDependencies:
       fsevents: 2.3.3
@@ -9569,14 +9508,14 @@ packages:
       vue: 3.3.4
     dev: false
 
-  /vue-eslint-parser@9.3.1(eslint@8.49.0):
+  /vue-eslint-parser@9.3.1(eslint@8.50.0):
     resolution: {integrity: sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==}
     engines: {node: ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: '>=6.0.0'
     dependencies:
       debug: 4.3.4
-      eslint: 8.49.0
+      eslint: 8.50.0
       eslint-scope: 7.2.2
       eslint-visitor-keys: 3.4.3
       espree: 9.6.1
@@ -9776,10 +9715,10 @@ packages:
     engines: {node: '>=16.0.0'}
     dependencies:
       '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0)
-      '@babel/core': 7.22.17
-      '@babel/preset-env': 7.22.15(@babel/core@7.22.17)
+      '@babel/core': 7.22.20
+      '@babel/preset-env': 7.22.20(@babel/core@7.22.20)
       '@babel/runtime': 7.22.15
-      '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.17)(rollup@2.79.1)
+      '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.20)(rollup@2.79.1)
       '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1)
       '@rollup/plugin-replace': 2.4.2(rollup@2.79.1)
       '@surma/rollup-plugin-off-main-thread': 2.2.3
@@ -9900,7 +9839,7 @@ packages:
   /workbox-window@7.0.0:
     resolution: {integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==}
     dependencies:
-      '@types/trusted-types': 2.0.3
+      '@types/trusted-types': 2.0.4
       workbox-core: 7.0.0
     dev: true
 

From efe71b9d8ec21daf46f631e62821c2adbc4055d0 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Mon, 25 Sep 2023 16:32:19 +0800
Subject: [PATCH 11/18] feat: use unocss

---
 .vscode/settings.json                         |  1 +
 .../VirtualScroll/src/VirtualScroll.vue       |  2 +-
 src/layouts/default/feature/index.vue         | 40 ++++---------------
 .../setting/components/SettingFooter.vue      |  4 +-
 src/layouts/default/setting/index.vue         |  2 +-
 5 files changed, 12 insertions(+), 37 deletions(-)

diff --git a/.vscode/settings.json b/.vscode/settings.json
index c7608880..4b294f99 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -157,6 +157,7 @@
     "vben",
     "vditor",
     "videojs",
+    "vite",
     "vitejs",
     "vuedraggable",
     "vueuse",
diff --git a/src/components/VirtualScroll/src/VirtualScroll.vue b/src/components/VirtualScroll/src/VirtualScroll.vue
index b26e882f..bc0a5e04 100644
--- a/src/components/VirtualScroll/src/VirtualScroll.vue
+++ b/src/components/VirtualScroll/src/VirtualScroll.vue
@@ -104,7 +104,7 @@ export default defineComponent({
       if (!wrapEl)
         return 0
 
-      const height = Number.parseInt(props.height || 0, 10) || wrapEl.clientHeight
+      const height = Number.parseInt(`${props.height || 0}`, 10) || wrapEl.clientHeight
 
       return first + Math.ceil(height / unref(getItemHeightRef))
     }
diff --git a/src/layouts/default/feature/index.vue b/src/layouts/default/feature/index.vue
index 61946232..9aedecd0 100644
--- a/src/layouts/default/feature/index.vue
+++ b/src/layouts/default/feature/index.vue
@@ -6,7 +6,6 @@ import { computed, unref } from 'vue'
 import { SettingButtonPositionEnum } from '@/enums/appEnum'
 import { useHeaderSetting } from '@/hooks/setting/useHeaderSetting'
 import { useRootSetting } from '@/hooks/setting/useRootSetting'
-import { useDesign } from '@/hooks/web/useDesign'
 import { useUserStoreWithOut } from '@/store/modules/user'
 import { createAsyncComponent } from '@/utils/factory/createAsyncComponent'
 import SessionTimeoutLogin from '@/views/base/login/SessionTimeoutLogin.vue'
@@ -18,11 +17,10 @@ const LayoutLockPage = createAsyncComponent(() => import('@/views/base/lock/inde
 const SettingDrawer = createAsyncComponent(() => import('@/layouts/default/setting/index.vue'))
 
 const { getUseOpenBackTop, getShowSettingButton, getSettingButtonPosition, getFullContent }
-    = useRootSetting()
+  = useRootSetting()
 
 const getTarget = () => document.body
 const userStore = useUserStoreWithOut()
-const { prefixCls } = useDesign('setting-drawer-feature')
 const { getShowHeader } = useHeaderSetting()
 
 const getIsSessionTimeout = computed(() => userStore.getSessionTimeout)
@@ -44,41 +42,17 @@ const getIsFixedSettingDrawer = computed(() => {
   <LayoutLockPage />
   <FloatButton.BackTop v-if="getUseOpenBackTop" :target="getTarget" />
   <FloatButton
-    shape="circle"
-    type="primary"
-    :badge="{ dot: true }"
-    :style="{
+    shape="circle" type="primary" :badge="{ dot: true }" :style="{
       right: '64px',
-    }"
-    @click="openWindow(SITE_URL)"
+    }" @click="openWindow(SITE_URL)"
   >
     <template #icon>
       <QuestionCircleOutlined />
     </template>
   </FloatButton>
-  <SettingDrawer v-if="getIsFixedSettingDrawer" :class="prefixCls" />
+  <SettingDrawer
+    v-if="getIsFixedSettingDrawer"
+    class="absolute top-[45%] z-10 flex cursor-pointer items-center justify-items-center rounded-l-md rounded-r-none p-2.5"
+  />
   <SessionTimeoutLogin v-if="getIsSessionTimeout" />
 </template>
-
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-setting-drawer-feature';
-
-  .@{prefix-cls} {
-    position: absolute;
-    top: 45%;
-    right: 0;
-    z-index: 10;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    padding: 10px;
-    color: @white;
-    cursor: pointer;
-    border-radius: 6px 0 0 6px;
-
-    svg {
-      width: 1em;
-      height: 1em;
-    }
-  }
-</style>
diff --git a/src/layouts/default/setting/components/SettingFooter.vue b/src/layouts/default/setting/components/SettingFooter.vue
index 80910a43..266c61ec 100644
--- a/src/layouts/default/setting/components/SettingFooter.vue
+++ b/src/layouts/default/setting/components/SettingFooter.vue
@@ -67,12 +67,12 @@ function handleClearAndRedo() {
       {{ t('layout.setting.copyBtn') }}
     </a-button>
 
-    <a-button color="warning" block class="my-3" @click="handleResetSetting">
+    <a-button block class="my-3" @click="handleResetSetting">
       <RedoOutlined class="mr-2" />
       {{ t('common.resetText') }}
     </a-button>
 
-    <a-button color="error" block @click="handleClearAndRedo">
+    <a-button type="primary" danger block @click="handleClearAndRedo">
       <RedoOutlined class="mr-2" />
       {{ t('layout.setting.clearBtn') }}
     </a-button>
diff --git a/src/layouts/default/setting/index.vue b/src/layouts/default/setting/index.vue
index dd585295..0ddff896 100644
--- a/src/layouts/default/setting/index.vue
+++ b/src/layouts/default/setting/index.vue
@@ -11,7 +11,7 @@ const [register, { openDrawer }] = useDrawer()
 
 <template>
   <div @click="openDrawer(true)">
-    <Icon icon="ion:settings-outline" />
+    <Icon class="h-4 w-4" icon="ion:settings-outline" />
     <SettingDrawer @register="register" />
   </div>
 </template>

From 1e3cb0c885ab20c3b36b5b7f5fe3e17a997fecbe Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Mon, 25 Sep 2023 17:32:16 +0800
Subject: [PATCH 12/18] fix: eslint

---
 src/components/Form/src/hooks/useAutoFocus.ts |  2 +-
 src/components/Form/src/hooks/useForm.ts      |  2 +-
 .../Form/src/hooks/useFormEvents.ts           |  2 ++
 .../SimpleMenu/src/components/Menu.vue        |  2 --
 src/components/Table/src/BasicTable.vue       |  1 +
 src/components/Table/src/hooks/useTable.ts    |  1 +
 src/layouts/default/sider/MixSider.vue        | 22 +++++++++++--------
 src/router/types.ts                           |  1 +
 src/store/modules/multipleTab.ts              |  1 +
 src/utils/domUtils.ts                         |  3 +++
 src/utils/index.ts                            |  3 +++
 src/utils/props.ts                            |  3 +--
 12 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/src/components/Form/src/hooks/useAutoFocus.ts b/src/components/Form/src/hooks/useAutoFocus.ts
index f291d6ce..1e26d24d 100644
--- a/src/components/Form/src/hooks/useAutoFocus.ts
+++ b/src/components/Form/src/hooks/useAutoFocus.ts
@@ -8,7 +8,7 @@ interface UseAutoFocusContext {
   isInitedDefault: Ref<boolean>
   formElRef: Ref<FormActionType>
 }
-export async function useAutoFocus({ getSchema, getProps, formElRef, isInitedDefault }: UseAutoFocusContext) {
+export function useAutoFocus({ getSchema, getProps, formElRef, isInitedDefault }: UseAutoFocusContext) {
   watchEffect(async () => {
     if (unref(isInitedDefault) || !unref(getProps).autoFocusFirstItem)
       return
diff --git a/src/components/Form/src/hooks/useForm.ts b/src/components/Form/src/hooks/useForm.ts
index 85ad707c..0103244a 100644
--- a/src/components/Form/src/hooks/useForm.ts
+++ b/src/components/Form/src/hooks/useForm.ts
@@ -78,7 +78,7 @@ export function useForm(props?: Props): UseFormReturnType {
     },
 
     removeSchemaByField: async (field: string | string[]) => {
-      unref(formRef)?.removeSchemaByField(field)
+      await unref(formRef)?.removeSchemaByField(field)
     },
 
     // TODO promisify
diff --git a/src/components/Form/src/hooks/useFormEvents.ts b/src/components/Form/src/hooks/useFormEvents.ts
index d2ce15c2..984e3e3a 100644
--- a/src/components/Form/src/hooks/useFormEvents.ts
+++ b/src/components/Form/src/hooks/useFormEvents.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/require-await */
 import type { ComputedRef, Ref } from 'vue'
 import type { NamePath } from 'ant-design-vue/lib/form/interface'
 import { nextTick, toRaw, unref } from 'vue'
@@ -89,6 +90,7 @@ export function useFormEvents({
       const defaultValueObj = schema?.defaultValueObj
       const fieldKeys = Object.keys(defaultValueObj || {})
       if (fieldKeys.length) {
+        // eslint-disable-next-line array-callback-return
         fieldKeys.map((field) => {
           formModel[field] = defaultValueObj![field]
         })
diff --git a/src/components/SimpleMenu/src/components/Menu.vue b/src/components/SimpleMenu/src/components/Menu.vue
index 962eaeb3..5a03c744 100644
--- a/src/components/SimpleMenu/src/components/Menu.vue
+++ b/src/components/SimpleMenu/src/components/Menu.vue
@@ -6,8 +6,6 @@ import { useDesign } from '@/hooks/web/useDesign'
 import { propTypes } from '@/utils/propTypes'
 import mitt from '@/utils/mitt'
 
-defineOptions({ name: 'Menu' })
-
 const props = defineProps({
   theme: propTypes.oneOf(['light', 'dark']).def('light'),
   activeName: propTypes.oneOfType([propTypes.string, propTypes.number]),
diff --git a/src/components/Table/src/BasicTable.vue b/src/components/Table/src/BasicTable.vue
index 0e79bd6b..38397f83 100644
--- a/src/components/Table/src/BasicTable.vue
+++ b/src/components/Table/src/BasicTable.vue
@@ -1,3 +1,4 @@
+<!-- eslint-disable no-useless-call -->
 <script lang="ts" setup>
 import { computed, inject, ref, toRaw, unref, useAttrs, useSlots, watchEffect } from 'vue'
 import { Table } from 'ant-design-vue'
diff --git a/src/components/Table/src/hooks/useTable.ts b/src/components/Table/src/hooks/useTable.ts
index 07983fe0..7df75d07 100644
--- a/src/components/Table/src/hooks/useTable.ts
+++ b/src/components/Table/src/hooks/useTable.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/await-thenable */
 import type { WatchStopHandle } from 'vue'
 import { onUnmounted, ref, toRaw, unref, watch } from 'vue'
 import type { BasicColumn, BasicTableProps, FetchParams, TableActionType } from '../types/table'
diff --git a/src/layouts/default/sider/MixSider.vue b/src/layouts/default/sider/MixSider.vue
index abcc0844..2285ee07 100644
--- a/src/layouts/default/sider/MixSider.vue
+++ b/src/layouts/default/sider/MixSider.vue
@@ -1,3 +1,4 @@
+<!-- eslint-disable vue/no-side-effects-in-computed-properties -->
 <script lang="ts" setup>
 import type { CSSProperties } from 'vue'
 import { computed, onMounted, ref, unref, watch } from 'vue'
@@ -51,28 +52,27 @@ const permissionStore = usePermissionStore()
 
 useDragLine(sideRef, dragBarRef, true)
 
+const getMixSideWidth = computed(() => {
+  return unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH
+})
+
 const getMenuStyle = computed((): CSSProperties => {
   return {
     width: unref(openMenu) ? `${unref(getMenuWidth)}px` : 0,
-    // eslint-disable-next-line @typescript-eslint/no-use-before-define
     left: `${unref(getMixSideWidth)}px`,
   }
 })
 
 const getIsFixed = computed(() => {
-  // eslint-disable-next-line vue/no-side-effects-in-computed-properties
   mixSideHasChildren.value = unref(childrenMenus).length > 0
   const isFixed = unref(getMixSideFixed) && unref(mixSideHasChildren)
   if (isFixed)
-  // eslint-disable-next-line vue/no-side-effects-in-computed-properties
     openMenu.value = true
 
   return isFixed
 })
 
-const getMixSideWidth = computed(() => {
-  return unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH
-})
+
 
 const getDomStyle = computed((): CSSProperties => {
   const fixedWidth = unref(getIsFixed) ? unref(getRealWidth) : 0
@@ -292,6 +292,7 @@ onClickOutside(wrap, () => {
 <style lang="less">
 @prefix-cls: ~'@{namespace}-layout-mix-sider';
 @width: 80px;
+
 .@{prefix-cls} {
   position: fixed;
   top: 0;
@@ -326,7 +327,7 @@ onClickOutside(wrap, () => {
     }
 
     &.open {
-      > .scrollbar {
+      >.scrollbar {
         border-right: 1px solid rgb(238 238 238);
       }
     }
@@ -341,6 +342,7 @@ onClickOutside(wrap, () => {
         }
       }
     }
+
     .@{prefix-cls}-menu-list {
       &__content {
         box-shadow: 0 0 4px 0 rgb(0 0 0 / 10%);
@@ -364,10 +366,11 @@ onClickOutside(wrap, () => {
         border-bottom: 1px solid var(--sider-dark-lighten-bg-color);
       }
 
-      > .scrollbar {
+      >.scrollbar {
         border-right: 1px solid var(--sider-dark-lighten-bg-color);
       }
     }
+
     .@{prefix-cls}-menu-list {
       background-color: var(--sider-dark-bg-color);
 
@@ -379,7 +382,7 @@ onClickOutside(wrap, () => {
     }
   }
 
-  > .scrollbar {
+  >.scrollbar {
     height: calc(100% - @header-height - 38px);
   }
 
@@ -408,6 +411,7 @@ onClickOutside(wrap, () => {
       &:hover {
         color: @white;
       }
+
       // &:hover,
       &--active {
         font-weight: 700;
diff --git a/src/router/types.ts b/src/router/types.ts
index 253da3b6..e48d9170 100644
--- a/src/router/types.ts
+++ b/src/router/types.ts
@@ -4,6 +4,7 @@ import type { RoleEnum } from '@/enums/roleEnum'
 
 export type Component<T = any> = ReturnType<typeof defineComponent> | (() => Promise<typeof import('*.vue')>) | (() => Promise<T>)
 
+// eslint-disable-next-line @typescript-eslint/ban-ts-comment
 // @ts-expect-error
 export interface AppRouteRecordRaw extends Omit<RouteRecordRaw, 'meta'> {
   keepAlive?: boolean
diff --git a/src/store/modules/multipleTab.ts b/src/store/modules/multipleTab.ts
index 152f3006..dd710eea 100644
--- a/src/store/modules/multipleTab.ts
+++ b/src/store/modules/multipleTab.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/unbound-method */
 import type { RouteLocationNormalized, RouteLocationRaw, Router } from 'vue-router'
 
 import { toRaw, unref } from 'vue'
diff --git a/src/utils/domUtils.ts b/src/utils/domUtils.ts
index 043a61b5..e627afa5 100644
--- a/src/utils/domUtils.ts
+++ b/src/utils/domUtils.ts
@@ -158,13 +158,16 @@ export function once(el: HTMLElement, event: string, fn: EventListener): void {
 
 export function useRafThrottle<T extends FunctionArgs>(fn: T): T {
   let locked = false
+  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
   // @ts-expect-error
   return function (...args: any[]) {
     if (locked)
       return
     locked = true
     window.requestAnimationFrame(() => {
+      // eslint-disable-next-line @typescript-eslint/ban-ts-comment
       // @ts-expect-error
+      // eslint-disable-next-line @typescript-eslint/no-invalid-this 
       fn.apply(this, args)
       locked = false
     })
diff --git a/src/utils/index.ts b/src/utils/index.ts
index 95897562..1b243893 100644
--- a/src/utils/index.ts
+++ b/src/utils/index.ts
@@ -164,6 +164,9 @@ export function simpleDebounce(fn, delay = 100) {
       clearTimeout(timer)
 
     timer = setTimeout(() => {
+      // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+      // @ts-expect-error
+      // eslint-disable-next-line @typescript-eslint/no-invalid-this
       fn.apply(this, args)
     }, delay)
   }
diff --git a/src/utils/props.ts b/src/utils/props.ts
index 64981a8f..f30966d6 100644
--- a/src/utils/props.ts
+++ b/src/utils/props.ts
@@ -34,8 +34,7 @@ type _BuildPropType<T, V, C> =
 export type BuildPropType<T, V, C> = _BuildPropType<IfUnknown<T, never>, IfUnknown<V, never>, IfUnknown<C, never>>
 
 type _BuildPropDefault<T, D> = [T] extends [
-  // eslint-disable-next-line @typescript-eslint/ban-types
-  Record<string, unknown> | Array<any> | Function,
+  Record<string, unknown> | Array<any> | Fn,
 ]
   ? D
   : D extends () => T

From 2e06c047ff751632f8555024651a032fcd195ca5 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Mon, 25 Sep 2023 17:32:28 +0800
Subject: [PATCH 13/18] chore: update deps

---
 .vscode/settings.json |  31 ------
 package.json          |   8 +-
 pnpm-lock.yaml        | 252 +++++++++++++++++++++---------------------
 3 files changed, 130 insertions(+), 161 deletions(-)

diff --git a/.vscode/settings.json b/.vscode/settings.json
index 4b294f99..1d75990f 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -84,37 +84,6 @@
     "jsonc",
     "yaml"
   ],
-  "[javascriptreact]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[typescript]": {
-    "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
-  },
-  "[typescriptreact]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[html]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[css]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[less]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[scss]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[markdown]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[vue]": {
-    "editor.codeActionsOnSave": {
-      "source.fixAll.eslint": true,
-      "source.organizeImports": false,
-      "source.fixAll.stylelint": true
-    }
-  },
   "i18n-ally.localesPaths": ["src/locales/lang"],
   "i18n-ally.keystyle": "nested",
   "i18n-ally.sortKeys": true,
diff --git a/package.json b/package.json
index e62ca14d..60680123 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "yudao-ui-admin-vben",
-  "version": "1.8.1-snapshot",
+  "version": "1.8.2-snapshot",
   "packageManager": "pnpm@8.6.0",
   "author": {
     "name": "xingyuv",
@@ -84,7 +84,7 @@
   "devDependencies": {
     "@commitlint/cli": "^17.7.1",
     "@commitlint/config-conventional": "^17.7.0",
-    "@iconify/json": "^2.2.119",
+    "@iconify/json": "^2.2.120",
     "@purge-icons/generated": "^0.9.0",
     "@types/codemirror": "^5.60.10",
     "@types/crypto-js": "^4.1.2",
@@ -95,7 +95,7 @@
     "@types/nprogress": "^0.2.1",
     "@types/qs": "^6.9.8",
     "@types/sortablejs": "^1.15.2",
-    "@unocss/eslint-config": "^0.56.1",
+    "@unocss/eslint-config": "^0.56.2",
     "@vitejs/plugin-vue": "4.3.4",
     "@vitejs/plugin-vue-jsx": "^3.0.2",
     "@vue/compiler-sfc": "^3.3.4",
@@ -128,7 +128,7 @@
     "stylelint-prettier": "^4.0.2",
     "terser": "^5.20.0",
     "typescript": "^5.2.2",
-    "unocss": "^0.56.1",
+    "unocss": "^0.56.2",
     "vite": "^4.4.9",
     "vite-plugin-compression": "^0.5.1",
     "vite-plugin-mkcert": "^1.16.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 06ea66f9..1b02e21c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -116,8 +116,8 @@ devDependencies:
     specifier: ^17.7.0
     version: 17.7.0
   '@iconify/json':
-    specifier: ^2.2.119
-    version: 2.2.119
+    specifier: ^2.2.120
+    version: 2.2.120
   '@purge-icons/generated':
     specifier: ^0.9.0
     version: 0.9.0
@@ -149,8 +149,8 @@ devDependencies:
     specifier: ^1.15.2
     version: 1.15.2
   '@unocss/eslint-config':
-    specifier: ^0.56.1
-    version: 0.56.1(eslint@8.50.0)(typescript@5.2.2)
+    specifier: ^0.56.2
+    version: 0.56.2(eslint@8.50.0)(typescript@5.2.2)
   '@vitejs/plugin-vue':
     specifier: 4.3.4
     version: 4.3.4(vite@4.4.9)(vue@3.3.4)
@@ -248,8 +248,8 @@ devDependencies:
     specifier: ^5.2.2
     version: 5.2.2
   unocss:
-    specifier: ^0.56.1
-    version: 0.56.1(postcss@8.4.30)(rollup@3.29.3)(vite@4.4.9)
+    specifier: ^0.56.2
+    version: 0.56.2(postcss@8.4.30)(rollup@3.29.3)(vite@4.4.9)
   vite:
     specifier: ^4.4.9
     version: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
@@ -2047,8 +2047,8 @@ packages:
     dependencies:
       '@iconify/types': 2.0.0
 
-  /@iconify/json@2.2.119:
-    resolution: {integrity: sha512-tYvxJpBds6UgXe6/iq2pW7hblsniDGWuKEwCr8PnSKLmZMilrtzHX7v+pg7FFmV2l2qA2Iw4toMRpe11tWBI4Q==}
+  /@iconify/json@2.2.120:
+    resolution: {integrity: sha512-vxE3fNGgQEEu2nvMuR/g4Cu/CxPpQWjc3cwsk/KY3iTN4hLKL0lnBsi1GmQL1ITSsyib2f72h329j+D9S9esbg==}
     dependencies:
       '@iconify/types': 2.0.0
       pathe: 1.1.1
@@ -2800,32 +2800,32 @@ packages:
       eslint-visitor-keys: 3.4.3
     dev: true
 
-  /@unocss/astro@0.56.1(rollup@3.29.3)(vite@4.4.9):
-    resolution: {integrity: sha512-ivWm69J76DRwCiEFM75qR4WPMCC6nyOrUM5iQDTypwKbBX26XlXcYYCN3DLoQTmWdp5f2BubZXAg3KIdgVxrYg==}
+  /@unocss/astro@0.56.2(rollup@3.29.3)(vite@4.4.9):
+    resolution: {integrity: sha512-IwkTODLjxeTZRM6vIU7neGglMt68nXXejRxDThDNzLZ0DfCUGkrfBr/K+k0c5oRGCu6389slphkhTwF/Zxt+jw==}
     peerDependencies:
       vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0
     peerDependenciesMeta:
       vite:
         optional: true
     dependencies:
-      '@unocss/core': 0.56.1
-      '@unocss/reset': 0.56.1
-      '@unocss/vite': 0.56.1(rollup@3.29.3)(vite@4.4.9)
+      '@unocss/core': 0.56.2
+      '@unocss/reset': 0.56.2
+      '@unocss/vite': 0.56.2(rollup@3.29.3)(vite@4.4.9)
       vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - rollup
     dev: true
 
-  /@unocss/cli@0.56.1(rollup@3.29.3):
-    resolution: {integrity: sha512-s7lRtPkNw7GXdej3uYKFgfyal3Bq0Ux9oJKQ3rV7ysvY5AMfHs+ayc1EC6vXsAunziJ39dloPrRY5cx1H7abkQ==}
+  /@unocss/cli@0.56.2(rollup@3.29.3):
+    resolution: {integrity: sha512-HLb2fC8waIxygG2/QTT0WEZjndwBHgRzEz+Vlb1s+mz4UGnmCA6hgsRLaop0Bdi+gVnmJv+bi2/nbJ+jlTFXYQ==}
     engines: {node: '>=14'}
     hasBin: true
     dependencies:
       '@ampproject/remapping': 2.2.1
       '@rollup/pluginutils': 5.0.4(rollup@3.29.3)
-      '@unocss/config': 0.56.1
-      '@unocss/core': 0.56.1
-      '@unocss/preset-uno': 0.56.1
+      '@unocss/config': 0.56.2
+      '@unocss/core': 0.56.2
+      '@unocss/preset-uno': 0.56.2
       cac: 6.7.14
       chokidar: 3.5.3
       colorette: 2.0.20
@@ -2838,36 +2838,36 @@ packages:
       - rollup
     dev: true
 
-  /@unocss/config@0.56.1:
-    resolution: {integrity: sha512-ZwKWtbMfg38laUNwjERkiTo3JKCgpw+hZMBqbbr2N4Rhc1ZaT4EJyQmcc/+P05JoNNr+ueYMoCMOCOtn/wuheQ==}
+  /@unocss/config@0.56.2:
+    resolution: {integrity: sha512-dIm7ARnqSgyMs1urXTeqlLUAbifAhllnSh1ZiUmh7c+ThcXcTYAD6xtosSA2SXJU94D6pRCaMhuoRix9j6asZw==}
     engines: {node: '>=14'}
     dependencies:
-      '@unocss/core': 0.56.1
+      '@unocss/core': 0.56.2
       unconfig: 0.3.10
     dev: true
 
-  /@unocss/core@0.56.1:
-    resolution: {integrity: sha512-2qmb/+hQ2CXmIgSqaeL6Pw2reO2MxsZlLMFuu71J8T3+UKrkI9NAwkZ4sdb38EoOisVIr2lvE48uc44XBfaOdg==}
+  /@unocss/core@0.56.2:
+    resolution: {integrity: sha512-44pqqOgO9Lxg9WHpz5RYJ8PvnuEyoc5WuntmPkIeQcoIBArgAleAMKuDQ53MLsF+M1fwz6oBeWDk8ASO6Wd/kw==}
     dev: true
 
-  /@unocss/eslint-config@0.56.1(eslint@8.50.0)(typescript@5.2.2):
-    resolution: {integrity: sha512-ph1w2FO+wCHq0jz0iQyxUbjwLSVjSz6wQ2yd0fCsm6mHNlewWHmu6gD3Grs9j5XDyFJEwz4HZZRHspJanqSJyA==}
+  /@unocss/eslint-config@0.56.2(eslint@8.50.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-63qzwai0DVArrjpabn6Em8jqsssIrWngqB53olDWCLJ7MzwFKMPWb6fsWkl3Eab7YYcUiOzxsdIeolFnmGIgtw==}
     engines: {node: '>=14'}
     dependencies:
-      '@unocss/eslint-plugin': 0.56.1(eslint@8.50.0)(typescript@5.2.2)
+      '@unocss/eslint-plugin': 0.56.2(eslint@8.50.0)(typescript@5.2.2)
     transitivePeerDependencies:
       - eslint
       - supports-color
       - typescript
     dev: true
 
-  /@unocss/eslint-plugin@0.56.1(eslint@8.50.0)(typescript@5.2.2):
-    resolution: {integrity: sha512-WLTybFXK9FJUMmEdUBa4Yj6uZx4qTCThGVej5Rn3XA+5f58zNmcSbipUG5oz16Z/QqYKP8iKhtg5zAQJMi0erg==}
+  /@unocss/eslint-plugin@0.56.2(eslint@8.50.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-dEH1JgILVnQ9RMjj5zurZ0LTwlgQMoIaLMn/ZDM3Htb5Rw3WllG0JwLGzxOQaWG4E0y9HRmuQSmuJZ/xCuSi8w==}
     engines: {node: '>=14'}
     dependencies:
       '@typescript-eslint/utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2)
-      '@unocss/config': 0.56.1
-      '@unocss/core': 0.56.1
+      '@unocss/config': 0.56.2
+      '@unocss/core': 0.56.2
       magic-string: 0.30.3
       synckit: 0.8.5
     transitivePeerDependencies:
@@ -2876,155 +2876,155 @@ packages:
       - typescript
     dev: true
 
-  /@unocss/extractor-arbitrary-variants@0.56.1:
-    resolution: {integrity: sha512-2vEcVwUTpC0yROjvKGjR3HSE8jaf1cwQqL+Ba5oP+Y4Vrjlf8hqvoSowgVT+wp/ecPH8z82xFNhS+XMOdgXpGA==}
+  /@unocss/extractor-arbitrary-variants@0.56.2:
+    resolution: {integrity: sha512-mDuCk5S2j3lmtflzibMUKtkdPXUycuNMw0FRtTobjl1p6V1TcJaN6SrL8+voIwLn+PffLWibuNljyal0BC/sMw==}
     dependencies:
-      '@unocss/core': 0.56.1
+      '@unocss/core': 0.56.2
     dev: true
 
-  /@unocss/inspector@0.56.1:
-    resolution: {integrity: sha512-PJ3MEwOvUjLaiySPQQKlw0XgwpReNK7c+nDX0D8ZBmUyw3swSn8wSar2cCOLsKLRtKRRp4kz1brM/BaleyYyeg==}
+  /@unocss/inspector@0.56.2:
+    resolution: {integrity: sha512-VqmmFpHwlbRiQw5I//oF3o7xHtaZOk6m9xHW6hxVuAkRNFPNFR73hToilfQgkvrt0Qw/rEzDsLYMvI1LuWpvKg==}
     dependencies:
-      '@unocss/rule-utils': 0.56.1
+      '@unocss/rule-utils': 0.56.2
       gzip-size: 6.0.0
       sirv: 2.0.3
     dev: true
 
-  /@unocss/postcss@0.56.1(postcss@8.4.30):
-    resolution: {integrity: sha512-8jUS5ynopvMbZmdUQhGv+lvKziuAPHHl9LaZzCJ4uHgPOwITNXWTi4dmNbytdYC3iYPQ++8eOph93VPCxdqVsw==}
+  /@unocss/postcss@0.56.2(postcss@8.4.30):
+    resolution: {integrity: sha512-mqNEQflEGxaYeqEJuMlFrlnzj1I9O5yvUEhux4EDy0hkqojCldwtjAosJ9jeBU/Sutr/YjWDOQ2+SU0Ei58Rxg==}
     engines: {node: '>=14'}
     peerDependencies:
       postcss: ^8.4.21
     dependencies:
-      '@unocss/config': 0.56.1
-      '@unocss/core': 0.56.1
-      '@unocss/rule-utils': 0.56.1
+      '@unocss/config': 0.56.2
+      '@unocss/core': 0.56.2
+      '@unocss/rule-utils': 0.56.2
       css-tree: 2.3.1
       fast-glob: 3.3.1
       magic-string: 0.30.3
       postcss: 8.4.30
     dev: true
 
-  /@unocss/preset-attributify@0.56.1:
-    resolution: {integrity: sha512-z+riyM9Fl+aYReg3cgxDRrI52teOL6ebj1UkMOje5sXuhneEQobUkg3k4Oi9NGTdalO5PU/jwcYCNfVksMPWZg==}
+  /@unocss/preset-attributify@0.56.2:
+    resolution: {integrity: sha512-kH7IMjShgkXfL6DMznsHyDIZ1NGRQK2CFZUUCyBORckhKd2mFTzeycnTkYnsGG0bDoakGiBcpIMzX4fS7vQrpw==}
     dependencies:
-      '@unocss/core': 0.56.1
+      '@unocss/core': 0.56.2
     dev: true
 
-  /@unocss/preset-icons@0.56.1:
-    resolution: {integrity: sha512-Jwyy7i39Hvt4gf+/vtlIcKucNP2y7IV5nF9KPuDnikho4xS/D24z3lbUclrscbH8XGfRcsUzGHI/y+8gD7zZjQ==}
+  /@unocss/preset-icons@0.56.2:
+    resolution: {integrity: sha512-aXeClNH/3744cIhICT61PPpfsKX5c8J70p9nj2F2cTYE4K3XlfjyAbUnVpEYz0G/mkJsA5X36t1TWGRC8/L9Cg==}
     dependencies:
       '@iconify/utils': 2.1.10
-      '@unocss/core': 0.56.1
+      '@unocss/core': 0.56.2
       ofetch: 1.3.3
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@unocss/preset-mini@0.56.1:
-    resolution: {integrity: sha512-hOujmUN5kiA7KCkH1mUFf3cStsa3WZTi3g/I91VQ8EM4S6R7aRvME7LBXlb38z68+pckoDLhOhbN7gSg2iZTjA==}
+  /@unocss/preset-mini@0.56.2:
+    resolution: {integrity: sha512-vAVf6bkkg/rr3/xsTRJDNHHfhSr3ypzEf7pRX4ay9lZraCCF/L+WUPPY/ZppV6ZMqnBxoineGad2Ph82cONwFA==}
     dependencies:
-      '@unocss/core': 0.56.1
-      '@unocss/extractor-arbitrary-variants': 0.56.1
-      '@unocss/rule-utils': 0.56.1
+      '@unocss/core': 0.56.2
+      '@unocss/extractor-arbitrary-variants': 0.56.2
+      '@unocss/rule-utils': 0.56.2
     dev: true
 
-  /@unocss/preset-tagify@0.56.1:
-    resolution: {integrity: sha512-cd1McbaEpoerduOt8dA6MOkVZQIutuF3dHyjrI/pXbDtoyzBWjT9MLEeV77Hlz3S09+9cqGZddBBkqo0WGsM0w==}
+  /@unocss/preset-tagify@0.56.2:
+    resolution: {integrity: sha512-Z9yj5LyF7pw9lFaxagEX6JxDm0P0/50GF3zXapVsAdNfqG+868vQxgu7VI2G556Kd3zeUNuQhiAWkv9PZY8UJw==}
     dependencies:
-      '@unocss/core': 0.56.1
+      '@unocss/core': 0.56.2
     dev: true
 
-  /@unocss/preset-typography@0.56.1:
-    resolution: {integrity: sha512-3p+dWEtMDe8MSPbUZseS94OpdYbv/pMTs2K1NBysE5BjIEVlyxRNWcZ8FC6risAJ1U0Ouctb6BqP6IA8r9BiWQ==}
+  /@unocss/preset-typography@0.56.2:
+    resolution: {integrity: sha512-pyhH9M4yu0pzot0OWiZ0qRjVpVmIWppsuZw/mnrKzzD+FwfMRGfys885Fqu9E0vdCP3PnkkpSHqpLmm7L7S/Qg==}
     dependencies:
-      '@unocss/core': 0.56.1
-      '@unocss/preset-mini': 0.56.1
+      '@unocss/core': 0.56.2
+      '@unocss/preset-mini': 0.56.2
     dev: true
 
-  /@unocss/preset-uno@0.56.1:
-    resolution: {integrity: sha512-rNnjpmnfrP/1P462dyELBQHe5NDlFSrJevwjCpAOeFXdO0XCCULpHokuaovZYwesNvzzWu+cZequya38n5hkSw==}
+  /@unocss/preset-uno@0.56.2:
+    resolution: {integrity: sha512-fHBc4eCDX8QBnypDVpUVxaZFtE7zkbry+lTBPqhTZZojX9bvInLv5+KJohDmWfONO3qFB0qYTXfSemuux2XwZw==}
     dependencies:
-      '@unocss/core': 0.56.1
-      '@unocss/preset-mini': 0.56.1
-      '@unocss/preset-wind': 0.56.1
-      '@unocss/rule-utils': 0.56.1
+      '@unocss/core': 0.56.2
+      '@unocss/preset-mini': 0.56.2
+      '@unocss/preset-wind': 0.56.2
+      '@unocss/rule-utils': 0.56.2
     dev: true
 
-  /@unocss/preset-web-fonts@0.56.1:
-    resolution: {integrity: sha512-SO2ZjrcFSi02QgQT3UVUtIlZE59A92gB1pzmYTMGZhjhmxqq6aghvBKEC00LfnQ200MRtAawgiZ+5Xysi/XsGg==}
+  /@unocss/preset-web-fonts@0.56.2:
+    resolution: {integrity: sha512-ebrl3/UK3DLNwYfqR67zQG+3fWRazG08H4531C2ileYgwX5+j1Lg/H4OBWm9dz9is04+1hyyZB5glr9Gxlm20Q==}
     dependencies:
-      '@unocss/core': 0.56.1
+      '@unocss/core': 0.56.2
       ofetch: 1.3.3
     dev: true
 
-  /@unocss/preset-wind@0.56.1:
-    resolution: {integrity: sha512-/fR0eYlmezu6R3wWvN5zVNAfOE6rcC1CsEZKH0SdwchMvNDjJNd0rmAechI2BnVBaa3++H2Cz+0AfCDEP8tsjg==}
+  /@unocss/preset-wind@0.56.2:
+    resolution: {integrity: sha512-wHkdgt8SGe2Xe8DUaXTf/FJKqAak5wLIr0wQlOT9yYBnFraUCSqPAcXykHcevxvPXAxnAof9C2oN58kPtk8NnA==}
     dependencies:
-      '@unocss/core': 0.56.1
-      '@unocss/preset-mini': 0.56.1
-      '@unocss/rule-utils': 0.56.1
+      '@unocss/core': 0.56.2
+      '@unocss/preset-mini': 0.56.2
+      '@unocss/rule-utils': 0.56.2
     dev: true
 
-  /@unocss/reset@0.56.1:
-    resolution: {integrity: sha512-nfzLKv2W9Y3fZLny6lYTroa/YExczGYHsVPCBPGkVt0TrM0yDA+ZKOHbN93b5myY9hzJ3pHTEQmYFsFwzzr6Kg==}
+  /@unocss/reset@0.56.2:
+    resolution: {integrity: sha512-RFI5XXb0Oc0WyarL6x4gti3/bKPqY9LKB/kHoEx05aZhFFtz1GzUYzqFdDakieS6FM2Jc1IFWpeC6Y3b7xce8A==}
     dev: true
 
-  /@unocss/rule-utils@0.56.1:
-    resolution: {integrity: sha512-mmmbx10eELAyhYZqBWlQFPOafnL1hHp2fo18rUbZLedvMJWds3Z23Q/u3VKEpJnCszNkr03BXVwscR5+ZdF4uw==}
+  /@unocss/rule-utils@0.56.2:
+    resolution: {integrity: sha512-cG2DtKSjaJOety1ELqbQeavQvpX6CZbrbrANR53671Y4SE+S1QAL/muqr61HI0gFveLidqws5dIQq/8SaZPCyg==}
     engines: {node: '>=14'}
     dependencies:
-      '@unocss/core': 0.56.1
+      '@unocss/core': 0.56.2
     dev: true
 
-  /@unocss/scope@0.56.1:
-    resolution: {integrity: sha512-qIq/JuibrVOAJw/TCUm54XwHRcDImgrb1abZVuaicFh6fjmpdOi/iglYxoFqXS5gusp0m2vNnOLbaBB4LrPf5Q==}
+  /@unocss/scope@0.56.2:
+    resolution: {integrity: sha512-8QvO3HlUVe97faBNpkB9i0BVjjqAU0T4ohK/yhG1AIUYhqfXRY5vh22TJxPIqAsNXbF4cUfxvZg1oSi8S6gmqQ==}
     dev: true
 
-  /@unocss/transformer-attributify-jsx-babel@0.56.1:
-    resolution: {integrity: sha512-8+l4tfifHiSnga3iaxqXfAMgEJG7yLphKPDSm6DHEMUqKeia9rn3V/bABx5KZxpMmnH6FoiYboJL4uf5W58a5Q==}
+  /@unocss/transformer-attributify-jsx-babel@0.56.2:
+    resolution: {integrity: sha512-lMv8YWVTPpioDVDc25FurJFvNuDLswoUjVobshQ3KhoLOlJUruQ2MX3admzBHvEtWqdi2SXWlwKQRRqKuZ69/A==}
     dependencies:
-      '@unocss/core': 0.56.1
+      '@unocss/core': 0.56.2
     dev: true
 
-  /@unocss/transformer-attributify-jsx@0.56.1:
-    resolution: {integrity: sha512-2dQ7immRBnZJQ9aU+VIiAbcFCycXq8yXG2RPd82Pl0tAV8f5DtLbbuTC5mzo5lGOhuXJ+/u+IpuL9xchjOV7WQ==}
+  /@unocss/transformer-attributify-jsx@0.56.2:
+    resolution: {integrity: sha512-0k4uNM3tSTmDSPCW54/psSFCqF/ACpEGMHUTJaPzDNyHQZTjLe5JafytWJ0IgFKiycMkpvj8Xzzx+YVBNd6F/A==}
     dependencies:
-      '@unocss/core': 0.56.1
+      '@unocss/core': 0.56.2
     dev: true
 
-  /@unocss/transformer-compile-class@0.56.1:
-    resolution: {integrity: sha512-v3ICzTWj3oQ1S6qkGzg/oyzrk05ZgdcvjYFSZlgBIu2iUJldBhO0+7ZMuDpniaT21GjJvukLwiWrOF4mYyJCyg==}
+  /@unocss/transformer-compile-class@0.56.2:
+    resolution: {integrity: sha512-iTagdlcnB3uvH40nGCsvxWNxt1ubEEfxOnCXM3jgfzNRmiqjMI6iRNp7X7+DwVPv3VeXratnWqOg9MZvp/TE3A==}
     dependencies:
-      '@unocss/core': 0.56.1
+      '@unocss/core': 0.56.2
     dev: true
 
-  /@unocss/transformer-directives@0.56.1:
-    resolution: {integrity: sha512-Pwh+JUxxn8ECqpEWETeD38OON5Y2oYAOC1CFKAyXoK22J7f51THoS07z2rZpDNdQA2T/szxenNCdRt72/NJ/pg==}
+  /@unocss/transformer-directives@0.56.2:
+    resolution: {integrity: sha512-yZkGBfdp+HMAJaTqUF0tYV3aYMcBMJUl6AgACz2ziXLmcjlKHwqHmryqSDrBZBj8sdQieBfLvWlaAMQ7Zgjw+Q==}
     dependencies:
-      '@unocss/core': 0.56.1
-      '@unocss/rule-utils': 0.56.1
+      '@unocss/core': 0.56.2
+      '@unocss/rule-utils': 0.56.2
       css-tree: 2.3.1
     dev: true
 
-  /@unocss/transformer-variant-group@0.56.1:
-    resolution: {integrity: sha512-UwXNcW00R6MjHZajy8lmSfwWDwhnvd+rF9eRGfcJTEzWr+LtEmgw8SJBr7STCB4ZwRE37NIp4oLLl1jF8omGNg==}
+  /@unocss/transformer-variant-group@0.56.2:
+    resolution: {integrity: sha512-9d0z1Rr07rloQqeoCoM7ChhSzZJ+Pj/kcRhi8Jd5O27xEfopYnzf27+2KPYyLSumGay0TgJmSjmg5H2rx6/P6A==}
     dependencies:
-      '@unocss/core': 0.56.1
+      '@unocss/core': 0.56.2
     dev: true
 
-  /@unocss/vite@0.56.1(rollup@3.29.3)(vite@4.4.9):
-    resolution: {integrity: sha512-IztLc304zP2LYQMsP3yVHmLwXlLUgCY3q6Nkqw6Hpds7l5JXBsE7Q19DtNW+4nDOp9wvWhw7CjQLmoh8d+V0lQ==}
+  /@unocss/vite@0.56.2(rollup@3.29.3)(vite@4.4.9):
+    resolution: {integrity: sha512-kM+wc2JvhCIsU08sdyM7ho+nyJ+NfA1rfrsg/pQy2o7PY7pEjSl4ownDA4hDgX4PdmxHCQD/xZCK2/El9nLVlA==}
     peerDependencies:
       vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0
     dependencies:
       '@ampproject/remapping': 2.2.1
       '@rollup/pluginutils': 5.0.4(rollup@3.29.3)
-      '@unocss/config': 0.56.1
-      '@unocss/core': 0.56.1
-      '@unocss/inspector': 0.56.1
-      '@unocss/scope': 0.56.1
-      '@unocss/transformer-directives': 0.56.1
+      '@unocss/config': 0.56.2
+      '@unocss/core': 0.56.2
+      '@unocss/inspector': 0.56.2
+      '@unocss/scope': 0.56.2
+      '@unocss/transformer-directives': 0.56.2
       chokidar: 3.5.3
       fast-glob: 3.3.1
       magic-string: 0.30.3
@@ -9190,11 +9190,11 @@ packages:
     engines: {node: '>= 10.0.0'}
     dev: true
 
-  /unocss@0.56.1(postcss@8.4.30)(rollup@3.29.3)(vite@4.4.9):
-    resolution: {integrity: sha512-jjkcyXfW90CUjN4tBV6SrHX9ifi5GQgcwAQlMRB0copJEW3ejM/nyZnRgNexaV7hi7Ao76XMVqCKbOC5B+IuOA==}
+  /unocss@0.56.2(postcss@8.4.30)(rollup@3.29.3)(vite@4.4.9):
+    resolution: {integrity: sha512-ZEj8/9OVv6zyuwSVWRGDULHeUdFgTnUAN3Hn8prysfbCI4x06xzsu46xLV9SoHE4eOJ1eSUs7YaJHGKFOocsQQ==}
     engines: {node: '>=14'}
     peerDependencies:
-      '@unocss/webpack': 0.56.1
+      '@unocss/webpack': 0.56.2
       vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0
     peerDependenciesMeta:
       '@unocss/webpack':
@@ -9202,26 +9202,26 @@ packages:
       vite:
         optional: true
     dependencies:
-      '@unocss/astro': 0.56.1(rollup@3.29.3)(vite@4.4.9)
-      '@unocss/cli': 0.56.1(rollup@3.29.3)
-      '@unocss/core': 0.56.1
-      '@unocss/extractor-arbitrary-variants': 0.56.1
-      '@unocss/postcss': 0.56.1(postcss@8.4.30)
-      '@unocss/preset-attributify': 0.56.1
-      '@unocss/preset-icons': 0.56.1
-      '@unocss/preset-mini': 0.56.1
-      '@unocss/preset-tagify': 0.56.1
-      '@unocss/preset-typography': 0.56.1
-      '@unocss/preset-uno': 0.56.1
-      '@unocss/preset-web-fonts': 0.56.1
-      '@unocss/preset-wind': 0.56.1
-      '@unocss/reset': 0.56.1
-      '@unocss/transformer-attributify-jsx': 0.56.1
-      '@unocss/transformer-attributify-jsx-babel': 0.56.1
-      '@unocss/transformer-compile-class': 0.56.1
-      '@unocss/transformer-directives': 0.56.1
-      '@unocss/transformer-variant-group': 0.56.1
-      '@unocss/vite': 0.56.1(rollup@3.29.3)(vite@4.4.9)
+      '@unocss/astro': 0.56.2(rollup@3.29.3)(vite@4.4.9)
+      '@unocss/cli': 0.56.2(rollup@3.29.3)
+      '@unocss/core': 0.56.2
+      '@unocss/extractor-arbitrary-variants': 0.56.2
+      '@unocss/postcss': 0.56.2(postcss@8.4.30)
+      '@unocss/preset-attributify': 0.56.2
+      '@unocss/preset-icons': 0.56.2
+      '@unocss/preset-mini': 0.56.2
+      '@unocss/preset-tagify': 0.56.2
+      '@unocss/preset-typography': 0.56.2
+      '@unocss/preset-uno': 0.56.2
+      '@unocss/preset-web-fonts': 0.56.2
+      '@unocss/preset-wind': 0.56.2
+      '@unocss/reset': 0.56.2
+      '@unocss/transformer-attributify-jsx': 0.56.2
+      '@unocss/transformer-attributify-jsx-babel': 0.56.2
+      '@unocss/transformer-compile-class': 0.56.2
+      '@unocss/transformer-directives': 0.56.2
+      '@unocss/transformer-variant-group': 0.56.2
+      '@unocss/vite': 0.56.2(rollup@3.29.3)(vite@4.4.9)
       vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - postcss

From e0f5b4ff155e56165de886b18095e46d825640bb Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Mon, 25 Sep 2023 19:48:37 +0800
Subject: [PATCH 14/18] fix: menu

---
 src/components/SimpleMenu/src/components/Menu.vue | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/components/SimpleMenu/src/components/Menu.vue b/src/components/SimpleMenu/src/components/Menu.vue
index 5a03c744..884437dd 100644
--- a/src/components/SimpleMenu/src/components/Menu.vue
+++ b/src/components/SimpleMenu/src/components/Menu.vue
@@ -6,6 +6,9 @@ import { useDesign } from '@/hooks/web/useDesign'
 import { propTypes } from '@/utils/propTypes'
 import mitt from '@/utils/mitt'
 
+// eslint-disable-next-line vue/no-reserved-component-names
+defineOptions({ name: 'Menu' })
+
 const props = defineProps({
   theme: propTypes.oneOf(['light', 'dark']).def('light'),
   activeName: propTypes.oneOfType([propTypes.string, propTypes.number]),

From f4b012eaafabe51148dd3758f1a531a30e7bafe7 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Tue, 26 Sep 2023 09:39:51 +0800
Subject: [PATCH 15/18] fix: button bg color

---
 src/components/Button/src/BasicButton.vue     |  5 +--
 src/components/Button/src/props.ts            |  6 +--
 src/components/CountDown/src/CountButton.vue  |  6 ++-
 .../CountDown/src/CountdownInput.vue          |  2 +-
 src/views/base/login/ForgetPasswordForm.vue   | 10 ++---
 src/views/base/login/LoginForm.vue            | 38 +++++++++----------
 src/views/base/login/MobileForm.vue           | 10 ++---
 src/views/base/login/QrCodeForm.vue           |  6 +--
 src/views/base/login/RegisterForm.vue         | 10 ++---
 src/views/base/login/SSOForm.vue              | 14 +++----
 10 files changed, 52 insertions(+), 55 deletions(-)

diff --git a/src/components/Button/src/BasicButton.vue b/src/components/Button/src/BasicButton.vue
index bc0d535f..c3490fde 100644
--- a/src/components/Button/src/BasicButton.vue
+++ b/src/components/Button/src/BasicButton.vue
@@ -11,10 +11,9 @@ const props = defineProps(buttonProps)
 // get component class
 const attrs = useAttrs({ excludeDefaultKeys: false })
 const getButtonClass = computed(() => {
-  const { color, disabled } = props
+  const { disabled } = props
   return [
     {
-      [`ant-btn-${color}`]: !!color,
       'is-disabled': disabled,
     },
   ]
@@ -25,7 +24,7 @@ const getBindValue = computed(() => ({ ...unref(attrs), ...props }))
 </script>
 
 <template>
-  <Button v-bind="getBindValue" :class="getButtonClass" @click="onClick">
+  <Button v-bind="getBindValue" :style="{ backgroundColor: color }" :class="getButtonClass" @click="onClick">
     <template #default="data">
       <Icon v-if="preIcon" :icon="preIcon" :size="iconSize" />
       <slot v-bind="data || {}" />
diff --git a/src/components/Button/src/props.ts b/src/components/Button/src/props.ts
index d2a9a5ba..a50d8f4c 100644
--- a/src/components/Button/src/props.ts
+++ b/src/components/Button/src/props.ts
@@ -1,10 +1,6 @@
-const validColors = ['primary', 'error', 'warning', 'success', ''] as const
-type ButtonColorType = (typeof validColors)[number]
-
 export const buttonProps = {
   color: {
-    type: String as PropType<ButtonColorType>,
-    validator: v => validColors.includes(v),
+    type: String,
     default: '',
   },
   loading: { type: Boolean },
diff --git a/src/components/CountDown/src/CountButton.vue b/src/components/CountDown/src/CountButton.vue
index 20b89813..a1787f4f 100644
--- a/src/components/CountDown/src/CountButton.vue
+++ b/src/components/CountDown/src/CountButton.vue
@@ -11,7 +11,7 @@ const props = defineProps({
   value: { type: [Object, Number, String, Array] },
   count: { type: Number, default: 60 },
   beforeStartFunc: {
-    type: Function as PropType<() => Promise<boolean>>,
+    type: Function as PropType<() => Promise<any>>,
     default: null,
   },
 })
@@ -38,7 +38,9 @@ async function handleStart() {
     loading.value = true
     try {
       const canStart = await beforeStartFunc()
-      canStart && start()
+      if (canStart) 
+        start()
+      
     }
     finally {
       loading.value = false
diff --git a/src/components/CountDown/src/CountdownInput.vue b/src/components/CountDown/src/CountdownInput.vue
index 2ad29e43..4a5f6174 100644
--- a/src/components/CountDown/src/CountdownInput.vue
+++ b/src/components/CountDown/src/CountdownInput.vue
@@ -10,7 +10,7 @@ const props = defineProps({
   size: { type: String, validator: (v: string) => ['default', 'large', 'small'].includes(v) },
   count: { type: Number, default: 60 },
   sendCodeApi: {
-    type: Function as PropType<() => Promise<boolean>>,
+    type: Function as PropType<() => Promise<any>>,
     default: null,
   },
 })
diff --git a/src/views/base/login/ForgetPasswordForm.vue b/src/views/base/login/ForgetPasswordForm.vue
index 0f11384f..f262d0d7 100644
--- a/src/views/base/login/ForgetPasswordForm.vue
+++ b/src/views/base/login/ForgetPasswordForm.vue
@@ -1,6 +1,6 @@
 <script lang="ts" setup>
 import { computed, reactive, ref, unref } from 'vue'
-import { Button, Form, Input } from 'ant-design-vue'
+import { Form, Input } from 'ant-design-vue'
 import LoginFormTitle from './LoginFormTitle.vue'
 import { LoginStateEnum, useFormRules, useLoginState } from './useLogin'
 import { CountdownInput } from '@/components/CountDown'
@@ -46,12 +46,12 @@ async function handleReset() {
       </FormItem>
 
       <FormItem class="enter-x">
-        <Button type="primary" size="large" block :loading="loading" @click="handleReset">
+        <a-button type="primary" size="large" block :loading="loading" @click="handleReset">
           {{ t('common.resetText') }}
-        </Button>
-        <Button size="large" block class="mt-4" @click="handleBackLogin">
+        </a-button>
+        <a-button size="large" block class="mt-4" @click="handleBackLogin">
           {{ t('sys.login.backSignIn') }}
-        </Button>
+        </a-button>
       </FormItem>
     </Form>
   </template>
diff --git a/src/views/base/login/LoginForm.vue b/src/views/base/login/LoginForm.vue
index e6cb9433..358665f1 100644
--- a/src/views/base/login/LoginForm.vue
+++ b/src/views/base/login/LoginForm.vue
@@ -1,7 +1,7 @@
 <script lang="ts" setup>
 import { computed, reactive, ref, unref } from 'vue'
 
-import { Button, Checkbox, Col, Divider, Form, Input, Row } from 'ant-design-vue'
+import { Checkbox, Col, Divider, Form, Input, Row } from 'ant-design-vue'
 import { AlipayCircleFilled, GithubFilled, WechatFilled } from '@ant-design/icons-vue'
 import LoginFormTitle from './LoginFormTitle.vue'
 
@@ -147,31 +147,31 @@ async function handleLogin(params) {
       <Col :span="12">
         <FormItem :style="{ 'text-align': 'right' }">
           <!-- No logic, you need to deal with it yourself -->
-          <Button type="link" size="small" @click="setLoginState(LoginStateEnum.RESET_PASSWORD)">
+          <a-button type="link" size="small" @click="setLoginState(LoginStateEnum.RESET_PASSWORD)">
             {{ t('sys.login.forgetPassword') }}
-          </Button>
+          </a-button>
         </FormItem>
       </Col>
     </Row>
 
     <FormItem class="enter-x">
-      <Button type="primary" size="large" block :loading="loading" @click="getCode">
+      <a-button type="primary" size="large" block :loading="loading" @click="getCode">
         {{ t('sys.login.loginButton') }}
-      </Button>
-      <!-- <Button size="large" class="mt-4 enter-x" block @click="handleRegister">
+      </a-button>
+      <!-- <a-button size="large" class="mt-4 enter-x" block @click="handleRegister">
         {{ t('sys.login.registerButton') }}
-      </Button> -->
+      </a-button> -->
     </FormItem>
     <Row class="enter-x" :gutter="[16, 16]">
       <Col :md="8" :xs="24">
-        <Button block @click="setLoginState(LoginStateEnum.MOBILE)">
+        <a-button block @click="setLoginState(LoginStateEnum.MOBILE)">
           {{ t('sys.login.mobileSignInFormTitle') }}
-        </Button>
+        </a-button>
       </Col>
       <Col :md="8" :xs="24">
-        <Button block @click="setLoginState(LoginStateEnum.QR_CODE)">
+        <a-button block @click="setLoginState(LoginStateEnum.QR_CODE)">
           {{ t('sys.login.qrSignInFormTitle') }}
-        </Button>
+        </a-button>
       </Col>
       <Col :md="8" :xs="24">
         <a-button block @click="setLoginState(LoginStateEnum.REGISTER)">
@@ -197,18 +197,18 @@ async function handleLogin(params) {
       萌新必读
     </Divider>
     <div class="enter-x flex justify-evenly" :class="`${prefixCls}-sign-in-way`">
-      <Button href="https://doc.iocoder.cn/" target="_blank">
+      <a-button href="https://doc.iocoder.cn/" target="_blank">
         📚开发指南
-      </Button>
-      <Button href="https://doc.iocoder.cn/video/" target="_blank" style="padding-left: 10px">
+      </a-button>
+      <a-button href="https://doc.iocoder.cn/video/" target="_blank" class="pl-2">
         🔥视频教程
-      </Button>
-      <Button href="https://www.iocoder.cn/Interview/good-collection/" target="_blank" style="padding-left: 10px">
+      </a-button>
+      <a-button href="https://www.iocoder.cn/Interview/good-collection/" target="_blank" class="pl-2">
         ⚡面试手册
-      </Button>
-      <Button href="http://static.yudao.iocoder.cn/mp/xinyu370.jpeg" target="_blank" style="padding-left: 10px">
+      </a-button>
+      <a-button href="http://static.yudao.iocoder.cn/mp/xinyu370.jpeg" target="_blank" class="pl-2">
         🤝外包咨询
-      </Button>
+      </a-button>
     </div>
   </Form>
   <Verify ref="verify" mode="pop" :captcha-type="captchaType" :img-size="{ width: '400px', height: '200px' }" @success="handleLogin" />
diff --git a/src/views/base/login/MobileForm.vue b/src/views/base/login/MobileForm.vue
index da563a4a..2cf470e7 100644
--- a/src/views/base/login/MobileForm.vue
+++ b/src/views/base/login/MobileForm.vue
@@ -1,6 +1,6 @@
 <script lang="ts" setup>
 import { computed, reactive, ref, unref } from 'vue'
-import { Button, Form, Input } from 'ant-design-vue'
+import { Form, Input } from 'ant-design-vue'
 import LoginFormTitle from './LoginFormTitle.vue'
 import { LoginStateEnum, useFormRules, useFormValid, useLoginState } from './useLogin'
 import { CountdownInput } from '@/components/CountDown'
@@ -142,12 +142,12 @@ async function getSmsCode() {
       </FormItem>
 
       <FormItem class="enter-x">
-        <Button type="primary" size="large" block :loading="loading" @click="getCode">
+        <a-button type="primary" size="large" block :loading="loading" @click="getCode">
           {{ t('sys.login.loginButton') }}
-        </Button>
-        <Button size="large" block class="mt-4" @click="handleBackLogin">
+        </a-button>
+        <a-button size="large" block class="mt-4" @click="handleBackLogin">
           {{ t('sys.login.backSignIn') }}
-        </Button>
+        </a-button>
       </FormItem>
     </Form>
     <Verify ref="verify" mode="pop" :captcha-type="captchaType" :img-size="{ width: '400px', height: '200px' }" @success="handleLogin" />
diff --git a/src/views/base/login/QrCodeForm.vue b/src/views/base/login/QrCodeForm.vue
index 89889070..4118ec07 100644
--- a/src/views/base/login/QrCodeForm.vue
+++ b/src/views/base/login/QrCodeForm.vue
@@ -1,6 +1,6 @@
 <script lang="ts" setup>
 import { computed, unref } from 'vue'
-import { Button, Divider, Popover, QRCode } from 'ant-design-vue'
+import { Divider, Popover, QRCode } from 'ant-design-vue'
 import LoginFormTitle from './LoginFormTitle.vue'
 import { LoginStateEnum, useLoginState } from './useLogin'
 import { useI18n } from '@/hooks/web/useI18n'
@@ -28,9 +28,9 @@ const getShow = computed(() => unref(getLoginState) === LoginStateEnum.QR_CODE)
       <Divider class="enter-x">
         {{ t('sys.login.scanSign') }}
       </Divider>
-      <Button size="large" block class="enter-x mt-4" @click="handleBackLogin">
+      <a-button size="large" block class="enter-x mt-4" @click="handleBackLogin">
         {{ t('sys.login.backSignIn') }}
-      </Button>
+      </a-button>
     </div>
   </div>
 </template>
diff --git a/src/views/base/login/RegisterForm.vue b/src/views/base/login/RegisterForm.vue
index b94a1dcc..4215ad57 100644
--- a/src/views/base/login/RegisterForm.vue
+++ b/src/views/base/login/RegisterForm.vue
@@ -1,6 +1,6 @@
 <script lang="ts" setup>
 import { computed, reactive, ref, unref } from 'vue'
-import { Button, Checkbox, Form, Input } from 'ant-design-vue'
+import { Checkbox, Form, Input } from 'ant-design-vue'
 import LoginFormTitle from './LoginFormTitle.vue'
 import { LoginStateEnum, useFormRules, useFormValid, useLoginState } from './useLogin'
 import { StrengthMeter } from '@/components/StrengthMeter'
@@ -69,12 +69,12 @@ async function handleRegister() {
         </Checkbox>
       </FormItem>
 
-      <Button type="primary" class="enter-x" size="large" block :loading="loading" @click="handleRegister">
+      <a-button type="primary" class="enter-x" size="large" block :loading="loading" @click="handleRegister">
         {{ t('sys.login.registerButton') }}
-      </Button>
-      <Button size="large" block class="enter-x mt-4" @click="handleBackLogin">
+      </a-button>
+      <a-button size="large" block class="enter-x mt-4" @click="handleBackLogin">
         {{ t('sys.login.backSignIn') }}
-      </Button>
+      </a-button>
     </Form>
   </div>
 </template>
diff --git a/src/views/base/login/SSOForm.vue b/src/views/base/login/SSOForm.vue
index e765a10e..f33eb55c 100644
--- a/src/views/base/login/SSOForm.vue
+++ b/src/views/base/login/SSOForm.vue
@@ -1,7 +1,7 @@
 <script lang="ts" setup>
 import { onMounted, reactive, ref } from 'vue'
 import { useRoute } from 'vue-router'
-import { Button, Checkbox, Col, Form, Row } from 'ant-design-vue'
+import { Checkbox, Col, Form, Row } from 'ant-design-vue'
 
 import { useFormValid, useLoginState } from './useLogin'
 import { useI18n } from '@/hooks/web/useI18n'
@@ -178,9 +178,9 @@ onMounted(() => {
           <FormItem>
             <!-- No logic, you need to deal with it yourself -->
             <Checkbox :checked="scope" size="small">
-              <Button type="link" size="small">
+              <a-button type="link" size="small">
                 {{ formatScope(scope) }}
-              </Button>
+              </a-button>
             </Checkbox>
           </FormItem>
         </template>
@@ -188,12 +188,12 @@ onMounted(() => {
     </Row>
 
     <FormItem class="enter-x">
-      <Button type="primary" size="large" block :loading="loading" @click="handleAuthorize(true)">
+      <a-button type="primary" size="large" block :loading="loading" @click="handleAuthorize(true)">
         {{ t('sys.login.loginButton') }}
-      </Button>
-      <Button size="large" class="enter-x mt-4" block @click="handleBackLogin">
+      </a-button>
+      <a-button size="large" class="enter-x mt-4" block @click="handleBackLogin">
         {{ t('common.cancelText') }}
-      </Button>
+      </a-button>
     </FormItem>
   </Form>
 </template>

From 30e3ad9c178987b06fd9f8074b3a0eb8412eb099 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Tue, 26 Sep 2023 09:43:27 +0800
Subject: [PATCH 16/18] chore: update deps

---
 package.json   |  12 +++---
 pnpm-lock.yaml | 112 ++++++++++++++++++++++++-------------------------
 2 files changed, 62 insertions(+), 62 deletions(-)

diff --git a/package.json b/package.json
index 60680123..ecb1f507 100644
--- a/package.json
+++ b/package.json
@@ -56,7 +56,7 @@
     "ant-design-vue": "^4.0.3",
     "axios": "^1.5.0",
     "benz-amr-recorder": "^1.1.5",
-    "codemirror": "^5.65.3",
+    "codemirror": "5.65.3",
     "cron-parser": "^4.9.0",
     "cropperjs": "^1.6.1",
     "crypto-js": "^4.1.1",
@@ -70,7 +70,7 @@
     "qs": "^6.11.2",
     "resize-observer-polyfill": "^1.5.1",
     "sortablejs": "^1.15.0",
-    "tinymce": "^5.10.7",
+    "tinymce": "5.10.7",
     "vditor": "^3.9.5",
     "video-js": "^0.7.0",
     "vue": "^3.3.4",
@@ -91,10 +91,10 @@
     "@types/fs-extra": "^11.0.2",
     "@types/inquirer": "^9.0.3",
     "@types/lodash-es": "^4.17.9",
-    "@types/node": "^20.6.0",
+    "@types/node": "^20.7.0",
     "@types/nprogress": "^0.2.1",
     "@types/qs": "^6.9.8",
-    "@types/sortablejs": "^1.15.2",
+    "@types/sortablejs": "^1.15.3",
     "@unocss/eslint-config": "^0.56.2",
     "@vitejs/plugin-vue": "4.3.4",
     "@vitejs/plugin-vue-jsx": "^3.0.2",
@@ -116,7 +116,7 @@
     "postcss-html": "^1.5.0",
     "postcss-less": "^6.0.0",
     "prettier": "^3.0.3",
-    "rimraf": "^5.0.1",
+    "rimraf": "^5.0.4",
     "rollup": "^3.29.3",
     "rollup-plugin-visualizer": "^5.9.2",
     "stylelint": "^15.10.3",
@@ -138,7 +138,7 @@
     "vite-plugin-svg-icons": "^2.0.1",
     "vite-vue-plugin-html": "^1.0.2",
     "vue-eslint-parser": "^9.3.1",
-    "vue-tsc": "^1.8.13"
+    "vue-tsc": "^1.8.14"
   },
   "lint-staged": {
     "*.{js,jsx,ts,tsx}": [
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1b02e21c..6c5d8ab4 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -36,8 +36,8 @@ dependencies:
     specifier: ^1.1.5
     version: 1.1.5
   codemirror:
-    specifier: ^5.65.3
-    version: 5.65.15
+    specifier: 5.65.3
+    version: 5.65.3
   cron-parser:
     specifier: ^4.9.0
     version: 4.9.0
@@ -78,7 +78,7 @@ dependencies:
     specifier: ^1.15.0
     version: 1.15.0
   tinymce:
-    specifier: ^5.10.7
+    specifier: 5.10.7
     version: 5.10.7
   vditor:
     specifier: ^3.9.5
@@ -137,8 +137,8 @@ devDependencies:
     specifier: ^4.17.9
     version: 4.17.9
   '@types/node':
-    specifier: ^20.6.0
-    version: 20.6.4
+    specifier: ^20.7.0
+    version: 20.7.0
   '@types/nprogress':
     specifier: ^0.2.1
     version: 0.2.1
@@ -146,8 +146,8 @@ devDependencies:
     specifier: ^6.9.8
     version: 6.9.8
   '@types/sortablejs':
-    specifier: ^1.15.2
-    version: 1.15.2
+    specifier: ^1.15.3
+    version: 1.15.3
   '@unocss/eslint-config':
     specifier: ^0.56.2
     version: 0.56.2(eslint@8.50.0)(typescript@5.2.2)
@@ -212,8 +212,8 @@ devDependencies:
     specifier: ^3.0.3
     version: 3.0.3
   rimraf:
-    specifier: ^5.0.1
-    version: 5.0.1
+    specifier: ^5.0.4
+    version: 5.0.4
   rollup:
     specifier: ^3.29.3
     version: 3.29.3
@@ -252,7 +252,7 @@ devDependencies:
     version: 0.56.2(postcss@8.4.30)(rollup@3.29.3)(vite@4.4.9)
   vite:
     specifier: ^4.4.9
-    version: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+    version: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
   vite-plugin-compression:
     specifier: ^0.5.1
     version: 0.5.1(vite@4.4.9)
@@ -278,8 +278,8 @@ devDependencies:
     specifier: ^9.3.1
     version: 9.3.1(eslint@8.50.0)
   vue-tsc:
-    specifier: ^1.8.13
-    version: 1.8.13(typescript@5.2.2)
+    specifier: ^1.8.14
+    version: 1.8.14(typescript@5.2.2)
 
 packages:
 
@@ -1621,7 +1621,7 @@ packages:
       lodash.merge: 4.6.2
       lodash.uniq: 4.5.0
       resolve-from: 5.0.0
-      ts-node: 10.9.1(@types/node@20.6.4)(typescript@5.2.2)
+      ts-node: 10.9.1(@types/node@20.7.0)(typescript@5.2.2)
       typescript: 5.2.2
     transitivePeerDependencies:
       - '@swc/core'
@@ -2495,7 +2495,7 @@ packages:
     resolution: {integrity: sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==}
     dependencies:
       '@types/jsonfile': 6.1.2
-      '@types/node': 20.6.4
+      '@types/node': 20.7.0
     dev: true
 
   /@types/inquirer@9.0.3:
@@ -2512,7 +2512,7 @@ packages:
   /@types/jsonfile@6.1.2:
     resolution: {integrity: sha512-8t92P+oeW4d/CRQfJaSqEwXujrhH4OEeHRjGU3v1Q8mUS8GPF3yiX26sw4svv6faL2HfBtGTe2xWIoVgN3dy9w==}
     dependencies:
-      '@types/node': 20.6.4
+      '@types/node': 20.7.0
     dev: true
 
   /@types/lodash-es@4.17.9:
@@ -2543,8 +2543,8 @@ packages:
     resolution: {integrity: sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==}
     dev: true
 
-  /@types/node@20.6.4:
-    resolution: {integrity: sha512-nU6d9MPY0NBUMiE/nXd2IIoC4OLvsLpwAjheoAeuzgvDZA1Cb10QYg+91AF6zQiKWRN5i1m07x6sMe0niBznoQ==}
+  /@types/node@20.7.0:
+    resolution: {integrity: sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==}
     dev: true
 
   /@types/normalize-package-data@2.4.2:
@@ -2562,21 +2562,21 @@ packages:
   /@types/resolve@1.17.1:
     resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
     dependencies:
-      '@types/node': 20.6.4
+      '@types/node': 20.7.0
     dev: true
 
   /@types/semver@7.5.2:
     resolution: {integrity: sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==}
     dev: true
 
-  /@types/sortablejs@1.15.2:
-    resolution: {integrity: sha512-mOIv/EnPMzAZAVbuh9uGjOZ1BBdimP9Y6IPGntsvQJtko5yapSDKB7GwB3AOlF5N3bkpk4sBwQRpS3aEkiUbaA==}
+  /@types/sortablejs@1.15.3:
+    resolution: {integrity: sha512-v+zh6TZP/cLeMUK0MDx1onp8e7Jk2/4iTQ7sb/n80rTAvBm14yJkpOEfJdrTCkHiF7IZbPjxGX2NRJfogRoYIg==}
     dev: true
 
   /@types/svgo@2.6.4:
     resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==}
     dependencies:
-      '@types/node': 20.6.4
+      '@types/node': 20.7.0
     dev: true
 
   /@types/tern@0.23.5:
@@ -2588,7 +2588,7 @@ packages:
   /@types/through@0.0.31:
     resolution: {integrity: sha512-LpKpmb7FGevYgXnBXYs6HWnmiFyVG07Pt1cnbgM1IhEacITTiUaBXXvOR3Y50ksaJWGSfhbEvQFivQEFGCC55w==}
     dependencies:
-      '@types/node': 20.6.4
+      '@types/node': 20.7.0
     dev: true
 
   /@types/trusted-types@2.0.4:
@@ -2811,7 +2811,7 @@ packages:
       '@unocss/core': 0.56.2
       '@unocss/reset': 0.56.2
       '@unocss/vite': 0.56.2(rollup@3.29.3)(vite@4.4.9)
-      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - rollup
     dev: true
@@ -3028,7 +3028,7 @@ packages:
       chokidar: 3.5.3
       fast-glob: 3.3.1
       magic-string: 0.30.3
-      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - rollup
     dev: true
@@ -3088,7 +3088,7 @@ packages:
       '@babel/core': 7.22.20
       '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.22.20)
       '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.22.20)
-      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
       vue: 3.3.4
     transitivePeerDependencies:
       - supports-color
@@ -3101,7 +3101,7 @@ packages:
       vite: ^4.0.0
       vue: ^3.2.25
     dependencies:
-      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
       vue: 3.3.4
     dev: true
 
@@ -3184,8 +3184,8 @@ packages:
     resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
     dev: false
 
-  /@vue/language-core@1.8.13(typescript@5.2.2):
-    resolution: {integrity: sha512-nata2fYBZAkl4QJrU+IcArJCMTHt1VP8ePL/Z7eUPC2AF+Cm7Qgo9ksNCPBzZRh1LYjCaSaqV7njqNogwpsMVg==}
+  /@vue/language-core@1.8.14(typescript@5.2.2):
+    resolution: {integrity: sha512-15GGOkUP/AgE/jzGdUMtOaQ+XPokrP+Q5Z0DS3aun3i72E6MjFvwB7E2k/ap0mABjdRCRjoVPnsMF1+TkzGqQg==}
     peerDependencies:
       typescript: '*'
     peerDependenciesMeta:
@@ -3242,11 +3242,11 @@ packages:
   /@vue/shared@3.3.4:
     resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
 
-  /@vue/typescript@1.8.13(typescript@5.2.2):
-    resolution: {integrity: sha512-ALJjHFqQ3dgZVCI/ogAS/dZ7JEhIi1N0Em5I7uwabY1p9RDRK3odLsycMHyxZRjm5dLI15c07eeBloHiD2Otlg==}
+  /@vue/typescript@1.8.14(typescript@5.2.2):
+    resolution: {integrity: sha512-ZNV6MkYNCNNyYSty/uvlChxftOUhpeTr3TkoMkwhovjXQERM3IBCP2lcOLnT6gb7dQ9vdN7dI5kPf8PYPmbkUA==}
     dependencies:
       '@volar/typescript': 1.10.1
-      '@vue/language-core': 1.8.13(typescript@5.2.2)
+      '@vue/language-core': 1.8.14(typescript@5.2.2)
     transitivePeerDependencies:
       - typescript
     dev: true
@@ -4079,8 +4079,8 @@ packages:
     engines: {node: '>=0.8'}
     dev: true
 
-  /codemirror@5.65.15:
-    resolution: {integrity: sha512-YC4EHbbwQeubZzxLl5G4nlbLc1T21QTrKGaOal/Pkm9dVDMZXMH7+ieSPEOZCtO9I68i8/oteJKOxzHC2zR+0g==}
+  /codemirror@5.65.3:
+    resolution: {integrity: sha512-kCC0iwGZOVZXHEKW3NDTObvM7pTIyowjty4BUqeREROc/3I6bWbgZDA3fGDwlA+rbgRjvnRnfqs9SfXynel1AQ==}
     dev: false
 
   /codepage@1.15.0:
@@ -4259,7 +4259,7 @@ packages:
     dependencies:
       '@types/node': 20.4.7
       cosmiconfig: 8.3.6(typescript@5.2.2)
-      ts-node: 10.9.1(@types/node@20.6.4)(typescript@5.2.2)
+      ts-node: 10.9.1(@types/node@20.7.0)(typescript@5.2.2)
       typescript: 5.2.2
     dev: true
 
@@ -5674,8 +5674,8 @@ packages:
       is-glob: 4.0.3
     dev: true
 
-  /glob@10.3.6:
-    resolution: {integrity: sha512-mEfImdc/fiYHEcF6pHFfD2b/KrdFB1qH9mRe5vI5HROF8G51SWxQJ2V56Ezl6ZL9y86gsxQ1Lgo2S746KGUPSQ==}
+  /glob@10.3.7:
+    resolution: {integrity: sha512-wCMbE1m9Nx5yD9LYtgsVWq5VhHlk5WzJirw594qZR6AIvQYuHrdDtIktUVjQItalD53y7dqoedu9xP0u0WaxIQ==}
     engines: {node: '>=16 || 14 >=14.17'}
     hasBin: true
     dependencies:
@@ -6446,7 +6446,7 @@ packages:
     resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
     engines: {node: '>= 10.13.0'}
     dependencies:
-      '@types/node': 20.6.4
+      '@types/node': 20.7.0
       merge-stream: 2.0.0
       supports-color: 7.2.0
     dev: true
@@ -8050,12 +8050,12 @@ packages:
       glob: 7.2.3
     dev: true
 
-  /rimraf@5.0.1:
-    resolution: {integrity: sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==}
+  /rimraf@5.0.4:
+    resolution: {integrity: sha512-rizQI/o/YAMM1us0Zyax0uRfIK39XR52EAjjOi0fzMolpGp0onj6CWzBAXuOx6+6Xi9Rgi0d9tUZojhJerLUmQ==}
     engines: {node: '>=14'}
     hasBin: true
     dependencies:
-      glob: 10.3.6
+      glob: 10.3.7
     dev: true
 
   /rollup-plugin-purge-icons@0.9.1:
@@ -8960,7 +8960,7 @@ packages:
       typescript: 5.2.2
     dev: true
 
-  /ts-node@10.9.1(@types/node@20.6.4)(typescript@5.2.2):
+  /ts-node@10.9.1(@types/node@20.7.0)(typescript@5.2.2):
     resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
     hasBin: true
     peerDependencies:
@@ -8979,7 +8979,7 @@ packages:
       '@tsconfig/node12': 1.0.11
       '@tsconfig/node14': 1.0.3
       '@tsconfig/node16': 1.0.4
-      '@types/node': 20.6.4
+      '@types/node': 20.7.0
       acorn: 8.10.0
       acorn-walk: 8.2.0
       arg: 4.1.3
@@ -9222,7 +9222,7 @@ packages:
       '@unocss/transformer-directives': 0.56.2
       '@unocss/transformer-variant-group': 0.56.2
       '@unocss/vite': 0.56.2(rollup@3.29.3)(vite@4.4.9)
-      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - postcss
       - rollup
@@ -9349,7 +9349,7 @@ packages:
       chalk: 4.1.2
       debug: 4.3.4
       fs-extra: 10.1.0
-      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -9364,7 +9364,7 @@ packages:
       axios: 1.5.0(debug@4.3.4)
       debug: 4.3.4
       picocolors: 1.0.0
-      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - encoding
       - supports-color
@@ -9379,7 +9379,7 @@ packages:
       picocolors: 1.0.0
       progress: 2.0.3
       rd: 2.0.1
-      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
     dev: true
 
   /vite-plugin-purge-icons@0.9.2(vite@4.4.9):
@@ -9391,7 +9391,7 @@ packages:
       '@purge-icons/core': 0.9.1
       '@purge-icons/generated': 0.9.0
       rollup-plugin-purge-icons: 0.9.1
-      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - encoding
       - supports-color
@@ -9408,7 +9408,7 @@ packages:
       debug: 4.3.4
       fast-glob: 3.3.1
       pretty-bytes: 6.1.1
-      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
       workbox-build: 7.0.0
       workbox-window: 7.0.0
     transitivePeerDependencies:
@@ -9428,7 +9428,7 @@ packages:
       pathe: 0.2.0
       svg-baker: 1.7.0
       svgo: 2.8.0
-      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -9450,12 +9450,12 @@ packages:
       html-minifier-terser: 7.2.0
       node-html-parser: 6.1.10
       pathe: 1.1.1
-      vite: 4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0)
+      vite: 4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0)
     transitivePeerDependencies:
       - rollup
     dev: true
 
-  /vite@4.4.9(@types/node@20.6.4)(less@4.2.0)(terser@5.20.0):
+  /vite@4.4.9(@types/node@20.7.0)(less@4.2.0)(terser@5.20.0):
     resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
     engines: {node: ^14.18.0 || >=16.0.0}
     hasBin: true
@@ -9483,7 +9483,7 @@ packages:
       terser:
         optional: true
     dependencies:
-      '@types/node': 20.6.4
+      '@types/node': 20.7.0
       esbuild: 0.18.20
       less: 4.2.0
       postcss: 8.4.30
@@ -9563,14 +9563,14 @@ packages:
       he: 1.2.0
     dev: true
 
-  /vue-tsc@1.8.13(typescript@5.2.2):
-    resolution: {integrity: sha512-Hl8zUXPVK2KzPtbXeMCN0CSFkwvD96YOtYt9KvJPG9W8QGcNpGk9KHwPuGMxA8blWXSIli7gtsoC+clICEVdVg==}
+  /vue-tsc@1.8.14(typescript@5.2.2):
+    resolution: {integrity: sha512-nlxsS8pbTCVho2Yqc4fvygDrXsdzftYdBHH2EO5m9KHjJYwYo8LtGGJ3XVl9ayqZlt+WfuzUD6Hts7va7+wdUQ==}
     hasBin: true
     peerDependencies:
       typescript: '*'
     dependencies:
-      '@vue/language-core': 1.8.13(typescript@5.2.2)
-      '@vue/typescript': 1.8.13(typescript@5.2.2)
+      '@vue/language-core': 1.8.14(typescript@5.2.2)
+      '@vue/typescript': 1.8.14(typescript@5.2.2)
       semver: 7.5.4
       typescript: 5.2.2
     dev: true

From a710ffc8c38a3c72590616a936089d1eb89fed59 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Tue, 26 Sep 2023 10:02:35 +0800
Subject: [PATCH 17/18] chore: setting

---
 .vscode/settings.json | 34 ++++++++++++++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)

diff --git a/.vscode/settings.json b/.vscode/settings.json
index 1d75990f..1ece3ed3 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -84,6 +84,37 @@
     "jsonc",
     "yaml"
   ],
+  "[javascriptreact]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[typescript]": {
+    "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
+  },
+  "[typescriptreact]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[html]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[css]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[less]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[scss]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[markdown]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[vue]": {
+    "editor.codeActionsOnSave": {
+      "source.fixAll.eslint": true,
+      "source.organizeImports": false,
+      "source.fixAll.stylelint": true
+    }
+  },
   "i18n-ally.localesPaths": ["src/locales/lang"],
   "i18n-ally.keystyle": "nested",
   "i18n-ally.sortKeys": true,
@@ -126,7 +157,6 @@
     "vben",
     "vditor",
     "videojs",
-    "vite",
     "vitejs",
     "vuedraggable",
     "vueuse",
@@ -141,7 +171,7 @@
     "*.ts": "$(capture).test.ts, $(capture).test.tsx",
     "*.tsx": "$(capture).test.ts, $(capture).test.tsx",
     "*.env": "$(capture).env.*",
-    "package.json": ".hintrc,pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
+    "package.json": ".hintrc,pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.gitignore,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
   },
   "eslint.codeAction.showDocumentation": {
     "enable": true

From d15e75bb3f6ab3de3b945facc268fc6bb2040947 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Tue, 26 Sep 2023 10:02:52 +0800
Subject: [PATCH 18/18] fix: button color

---
 src/components/Button/src/BasicButton.vue | 27 +++++++++++++++++++----
 src/components/Button/src/props.ts        |  6 ++++-
 src/views/base/login/LoginForm.vue        | 10 +++++++--
 3 files changed, 36 insertions(+), 7 deletions(-)

diff --git a/src/components/Button/src/BasicButton.vue b/src/components/Button/src/BasicButton.vue
index c3490fde..9072c56a 100644
--- a/src/components/Button/src/BasicButton.vue
+++ b/src/components/Button/src/BasicButton.vue
@@ -1,13 +1,14 @@
 <script lang="ts" setup>
-import { Button } from 'ant-design-vue'
+import { Button, theme } from 'ant-design-vue'
 import { computed, unref } from 'vue'
 import { buttonProps } from './props'
-import { Icon } from '@/components/Icon'
 import { useAttrs } from '@/hooks/core/useAttrs'
+import { Icon } from '@/components/Icon'
 
 defineOptions({ name: 'AButton', extends: Button, indeterminate: false })
-
 const props = defineProps(buttonProps)
+const { useToken } = theme
+const { token } = useToken()
 // get component class
 const attrs = useAttrs({ excludeDefaultKeys: false })
 const getButtonClass = computed(() => {
@@ -24,7 +25,25 @@ const getBindValue = computed(() => ({ ...unref(attrs), ...props }))
 </script>
 
 <template>
-  <Button v-bind="getBindValue" :style="{ backgroundColor: color }" :class="getButtonClass" @click="onClick">
+  <Button
+    v-bind="getBindValue" :style="{
+      backgroundColor: color
+        ? (
+          color === 'primary'
+            ? token.colorPrimary
+            : (
+              color === 'error'
+                ? token.colorError
+                : (
+                  color === 'warning'
+                    ? token.colorWarning
+                    : (color === 'success' ? token.colorSuccess : '')
+                )
+            )
+        )
+        : '',
+    }" :class="getButtonClass" @click="onClick"
+  >
     <template #default="data">
       <Icon v-if="preIcon" :icon="preIcon" :size="iconSize" />
       <slot v-bind="data || {}" />
diff --git a/src/components/Button/src/props.ts b/src/components/Button/src/props.ts
index a50d8f4c..d2a9a5ba 100644
--- a/src/components/Button/src/props.ts
+++ b/src/components/Button/src/props.ts
@@ -1,6 +1,10 @@
+const validColors = ['primary', 'error', 'warning', 'success', ''] as const
+type ButtonColorType = (typeof validColors)[number]
+
 export const buttonProps = {
   color: {
-    type: String,
+    type: String as PropType<ButtonColorType>,
+    validator: v => validColors.includes(v),
     default: '',
   },
   loading: { type: Boolean },
diff --git a/src/views/base/login/LoginForm.vue b/src/views/base/login/LoginForm.vue
index 358665f1..1e53d162 100644
--- a/src/views/base/login/LoginForm.vue
+++ b/src/views/base/login/LoginForm.vue
@@ -112,7 +112,10 @@ async function handleLogin(params) {
 
 <template>
   <LoginFormTitle v-show="getShow" class="enter-x" />
-  <Form v-show="getShow" ref="formRef" class="enter-x p-4" :model="formData" :rules="getFormRules" @keypress.enter="handleLogin">
+  <Form
+    v-show="getShow" ref="formRef" class="enter-x p-4" :model="formData" :rules="getFormRules"
+    @keypress.enter="handleLogin"
+  >
     <FormItem name="tenantName" class="enter-x">
       <Input
         v-if="tenantEnable === 'true'"
@@ -123,7 +126,10 @@ async function handleLogin(params) {
       />
     </FormItem>
     <FormItem name="username" class="enter-x">
-      <Input v-model:value="formData.username" size="large" :placeholder="t('sys.login.userName')" class="fix-auto-fill" />
+      <Input
+        v-model:value="formData.username" size="large" :placeholder="t('sys.login.userName')"
+        class="fix-auto-fill"
+      />
     </FormItem>
     <FormItem name="password" class="enter-x">
       <InputPassword