Forráskód Böngészése

chore: update deps

vben 9 hónapja
szülő
commit
f7b97e8a83
47 módosított fájl, 569 hozzáadás és 322 törlés
  1. 5 5
      apps/antd-view/src/router/guard/access.ts
  2. 4 0
      apps/antd-view/src/router/guard/index.ts
  3. 21 13
      apps/antd-view/src/router/routes/_essential.ts
  4. 4 25
      apps/antd-view/src/router/routes/index.ts
  5. 29 0
      apps/antd-view/src/router/routes/modules/root.ts
  6. 3 0
      apps/antd-view/src/views/_essential/README.md
  7. 0 0
      apps/antd-view/src/views/_essential/authentication/code-login.vue
  8. 0 0
      apps/antd-view/src/views/_essential/authentication/forget-password.vue
  9. 0 0
      apps/antd-view/src/views/_essential/authentication/login.vue
  10. 0 0
      apps/antd-view/src/views/_essential/authentication/qrcode-login.vue
  11. 0 0
      apps/antd-view/src/views/_essential/authentication/register.vue
  12. 0 0
      apps/antd-view/src/views/_essential/fallback/.gitkeep
  13. 1 1
      internal/lint-configs/eslint-config/package.json
  14. 28 0
      internal/lint-configs/eslint-config/src/configs/disableds.ts
  15. 3 1
      internal/lint-configs/eslint-config/src/configs/ignores.ts
  16. 1 0
      internal/lint-configs/eslint-config/src/configs/index.ts
  17. 2 0
      internal/lint-configs/eslint-config/src/index.ts
  18. 1 1
      internal/lint-configs/prettier-config/package.json
  19. 1 1
      internal/tailwind-config/package.json
  20. 1 1
      internal/tsconfig/package.json
  21. 3 3
      internal/vite-config/package.json
  22. 4 4
      package.json
  23. 4 0
      packages/@vben-core/shared/typings/src/preference.ts
  24. 1 1
      packages/@vben-core/uikit/layout-ui/src/components/layout-header.vue
  25. 3 13
      packages/@vben-core/uikit/layout-ui/src/components/layout-side.vue
  26. 10 0
      packages/@vben-core/uikit/layout-ui/src/vben-layout.ts
  27. 22 13
      packages/@vben-core/uikit/layout-ui/src/vben-layout.vue
  28. 2 1
      packages/@vben-core/uikit/shadcn-ui/src/components/back-top/back-top.vue
  29. 1 0
      packages/@vben-core/uikit/shadcn-ui/src/components/back-top/backtop.ts
  30. 46 0
      packages/@vben-core/uikit/shadcn-ui/src/components/floating-button-group/floating-button-group.vue
  31. 1 0
      packages/@vben-core/uikit/shadcn-ui/src/components/floating-button-group/index.ts
  32. 1 0
      packages/@vben-core/uikit/shadcn-ui/src/components/index.ts
  33. 3 6
      packages/@vben-core/uikit/shadcn-ui/src/components/logo/logo.vue
  34. 1 0
      packages/@vben-core/uikit/shadcn-ui/src/styles/index.css
  35. 9 2
      packages/business/layouts/src/basic/layout.vue
  36. 3 3
      packages/business/layouts/src/basic/tabs/tabs-toolbar.vue
  37. 11 0
      packages/constants/src/_essential.ts
  38. 1 0
      packages/constants/src/index.ts
  39. 6 1
      packages/constants/src/vben.ts
  40. 53 48
      packages/locales/src/langs/en-US.yaml
  41. 53 48
      packages/locales/src/langs/zh-CN.yaml
  42. 4 2
      packages/preference/src/config.ts
  43. 0 0
      packages/types/src/ui.d.ts
  44. 190 126
      pnpm-lock.yaml
  45. 28 0
      scripts/update-dependencies
  46. 0 2
      scripts/vsh/src/lint/index.ts
  47. 5 1
      turbo.json

+ 5 - 5
apps/antd-view/src/router/guard/access.ts

@@ -2,13 +2,12 @@ import type { ExRouteRecordRaw, MenuRecordRaw } from '@vben/types';
 
 import type { RouteRecordRaw, Router } from 'vue-router';
 
+import { LOGIN_PATH } from '@vben/constants';
 import { useAccessStore } from '@vben/stores';
 import { filterTree, mapTree, traverseTreeValues } from '@vben/utils';
 
-import { dynamicRoutes } from '../routes';
+import { dynamicRoutes } from '@/router/routes';
 
-// 登录页面路由 path
-const LOGIN_ROUTE_PATH = '/auth/login';
 // 不需要权限的页面白名单
 const WHITE_ROUTE_NAMES = new Set<string>([]);
 
@@ -29,14 +28,15 @@ function configAccessGuard(router: Router) {
       }
 
       // 白名单路由列表检查
+      // TODO: 不是很需要,通过 ignoreAccess 也可以做到,考虑删除
       if (WHITE_ROUTE_NAMES.has(to.name as string)) {
         return true;
       }
 
       // 没有访问权限,跳转登录页面
-      if (to.fullPath !== LOGIN_ROUTE_PATH) {
+      if (to.fullPath !== LOGIN_PATH) {
         return {
-          path: LOGIN_ROUTE_PATH,
+          path: LOGIN_PATH,
           // 如不需要,直接删除 query
           query: { redirect: encodeURIComponent(to.fullPath) },
           // 携带当前跳转的页面,登录后重新跳转该页面

+ 4 - 0
apps/antd-view/src/router/guard/index.ts

@@ -12,9 +12,11 @@ import { configAccessGuard } from './access';
  * @param router
  */
 function configCommonGuard(router: Router) {
+  // 记录已经加载的页面
   const loadedPaths = new Set<string>();
 
   router.beforeEach(async (to) => {
+    // 页面加载进度条
     if (preference.pageProgress) {
       startProgress();
     }
@@ -25,6 +27,8 @@ function configCommonGuard(router: Router) {
   router.afterEach((to) => {
     // 记录页面是否加载,如果已经加载,后续的页面切换动画等效果不在重复执行
     loadedPaths.add(to.path);
+
+    // 关闭页面加载进度条
     if (preference.pageProgress) {
       stopProgress();
     }

+ 21 - 13
apps/antd-view/src/router/routes/builtin.ts → apps/antd-view/src/router/routes/_essential.ts

@@ -2,9 +2,12 @@ import type { RouteRecordRaw } from 'vue-router';
 
 import { AuthPageLayout } from '@/layouts';
 import { Fallback } from '@vben/common-ui';
+import { $t } from '@vben/locales';
 
-/** 静态路由列表,访问这些页面可以不需要权限 */
-const builtinRoutes: RouteRecordRaw[] = [
+import Login from '@/views/_essential/authentication/login.vue';
+
+/** 基本路由,这些路由是必须存在的 */
+const essentialRoutes: RouteRecordRaw[] = [
   {
     component: AuthPageLayout,
     meta: {
@@ -16,46 +19,50 @@ const builtinRoutes: RouteRecordRaw[] = [
       {
         name: 'Login',
         path: 'login',
-        component: () => import('@/views/authentication/login.vue'),
+        component: Login,
         meta: {
           ignoreAccess: true,
-          title: 'Login',
+          title: $t('page.login'),
         },
       },
       {
         name: 'CodeLogin',
         path: 'code-login',
-        component: () => import('@/views/authentication/code-login.vue'),
+        component: () =>
+          import('@/views/_essential/authentication/code-login.vue'),
         meta: {
           ignoreAccess: true,
-          title: 'CodeLogin',
+          title: $t('page.code-login'),
         },
       },
       {
         name: 'QrCodeLogin',
         path: 'qrcode-login',
-        component: () => import('@/views/authentication/qrcode-login.vue'),
+        component: () =>
+          import('@/views/_essential/authentication/qrcode-login.vue'),
         meta: {
           ignoreAccess: true,
-          title: 'QrCodeLogin',
+          title: $t('page.qrcode-login'),
         },
       },
       {
         name: 'ForgetPassword',
         path: 'forget-password',
-        component: () => import('@/views/authentication/forget-password.vue'),
+        component: () =>
+          import('@/views/_essential/authentication/forget-password.vue'),
         meta: {
           ignoreAccess: true,
-          title: 'ForgetPassword',
+          title: $t('page.forget-password'),
         },
       },
       {
         name: 'Register',
         path: 'register',
-        component: () => import('@/views/authentication/register.vue'),
+        component: () =>
+          import('@/views/_essential/authentication/register.vue'),
         meta: {
           ignoreAccess: true,
-          title: 'Register',
+          title: $t('page.register'),
         },
       },
     ],
@@ -67,6 +74,7 @@ const builtinRoutes: RouteRecordRaw[] = [
       hideInBreadcrumb: true,
       hideInMenu: true,
       hideInTab: true,
+      ignoreAccess: true,
       title: 'Fallback',
     },
     name: 'Fallback',
@@ -74,4 +82,4 @@ const builtinRoutes: RouteRecordRaw[] = [
   },
 ];
 
-export { builtinRoutes };
+export { essentialRoutes };

+ 4 - 25
apps/antd-view/src/router/routes/index.ts

@@ -1,36 +1,15 @@
 import type { RouteRecordRaw } from 'vue-router';
 
-import { BasicLayout } from '@/layouts';
-
-import { builtinRoutes } from './builtin';
+import { essentialRoutes } from './_essential';
 import { nestedRoutes } from './modules/nested';
 import { outsideRoutes } from './modules/outside';
+import { rootRoutes } from './modules/root';
 import { vbenRoutes } from './modules/vben';
 
 /** 动态路由 */
 const dynamicRoutes: RouteRecordRaw[] = [
   // 根路由
-  {
-    component: BasicLayout,
-    meta: {
-      hideChildrenInMenu: true,
-      title: '首页',
-    },
-    name: 'Home',
-    path: '/',
-    redirect: '/welcome',
-    children: [
-      {
-        name: 'Welcome',
-        path: '/welcome',
-        component: () => import('@/views/dashboard/index.vue'),
-        meta: {
-          affixTab: true,
-          title: 'Welcome',
-        },
-      },
-    ],
-  },
+  ...rootRoutes,
   ...nestedRoutes,
   ...outsideRoutes,
   ...vbenRoutes,
@@ -40,6 +19,6 @@ const dynamicRoutes: RouteRecordRaw[] = [
 const externalRoutes: RouteRecordRaw[] = [];
 
 /** 静态路由列表,访问这些页面可以不需要权限 */
-const staticRoutes: RouteRecordRaw[] = [...builtinRoutes];
+const staticRoutes: RouteRecordRaw[] = [...essentialRoutes];
 
 export { dynamicRoutes, externalRoutes, staticRoutes };

+ 29 - 0
apps/antd-view/src/router/routes/modules/root.ts

@@ -0,0 +1,29 @@
+import type { RouteRecordRaw } from 'vue-router';
+
+import { BasicLayout } from '@/layouts';
+
+const rootRoutes: RouteRecordRaw[] = [
+  {
+    component: BasicLayout,
+    meta: {
+      hideChildrenInMenu: true,
+      title: '首页',
+    },
+    name: 'Home',
+    path: '/',
+    redirect: '/welcome',
+    children: [
+      {
+        name: 'Welcome',
+        path: '/welcome',
+        component: () => import('@/views/dashboard/index.vue'),
+        meta: {
+          affixTab: true,
+          title: 'Welcome',
+        },
+      },
+    ],
+  },
+];
+
+export { rootRoutes };

+ 3 - 0
apps/antd-view/src/views/_essential/README.md

@@ -0,0 +1,3 @@
+# \_essential
+
+此目录包含应用程序正常运行所需的基本视图。这些视图是应用程序布局中使用的视图。

+ 0 - 0
apps/antd-view/src/views/authentication/code-login.vue → apps/antd-view/src/views/_essential/authentication/code-login.vue


+ 0 - 0
apps/antd-view/src/views/authentication/forget-password.vue → apps/antd-view/src/views/_essential/authentication/forget-password.vue


+ 0 - 0
apps/antd-view/src/views/authentication/login.vue → apps/antd-view/src/views/_essential/authentication/login.vue


+ 0 - 0
apps/antd-view/src/views/authentication/qrcode-login.vue → apps/antd-view/src/views/_essential/authentication/qrcode-login.vue


+ 0 - 0
apps/antd-view/src/views/authentication/register.vue → apps/antd-view/src/views/_essential/authentication/register.vue


+ 0 - 0
apps/antd-view/src/views/_essential/fallback/.gitkeep


+ 1 - 1
internal/lint-configs/eslint-config/package.json

@@ -41,7 +41,7 @@
     "eslint-config-prettier": "^9.1.0",
     "eslint-plugin-eslint-comments": "^3.2.0",
     "eslint-plugin-i": "^2.29.1",
-    "eslint-plugin-jsdoc": "^48.2.6",
+    "eslint-plugin-jsdoc": "^48.2.7",
     "eslint-plugin-jsonc": "^2.16.0",
     "eslint-plugin-n": "^17.7.0",
     "eslint-plugin-no-only-tests": "^3.1.0",

+ 28 - 0
internal/lint-configs/eslint-config/src/configs/disableds.ts

@@ -0,0 +1,28 @@
+import type { Linter } from 'eslint';
+
+export async function disableds(): Promise<Linter.FlatConfig[]> {
+  return [
+    {
+      files: ['**/__tests__/**/*.?([cm])[jt]s?(x)'],
+      name: 'disables/test',
+      rules: {
+        '@typescript-eslint/ban-ts-comment': 'off',
+        'no-console': 'off',
+      },
+    },
+    {
+      files: ['**/*.d.ts'],
+      name: 'disables/dts',
+      rules: {
+        '@typescript-eslint/triple-slash-reference': 'off',
+      },
+    },
+    {
+      files: ['**/*.js', '**/*.mjs', '**/*.cjs'],
+      name: 'disables/js',
+      rules: {
+        '@typescript-eslint/explicit-module-boundary-types': 'off',
+      },
+    },
+  ];
+}

+ 3 - 1
internal/lint-configs/eslint-config/src/configs/ignores.ts

@@ -19,7 +19,6 @@ export async function ignores(): Promise<Linter.FlatConfig[]> {
         '**/tmp',
         '**/.tmp',
         '**/.history',
-        '**/.vitepress/cache',
         '**/.nuxt',
         '**/.next',
         '**/.vercel',
@@ -33,6 +32,9 @@ export async function ignores(): Promise<Linter.FlatConfig[]> {
         '**/*.min.*',
         '**/LICENSE*',
         '**/__snapshots__',
+        '**/*.snap',
+        '**/fixtures/**',
+        '**/.vitepress/cache/**',
         '**/auto-import?(s).d.ts',
         '**/components.d.ts',
         '**/vite.config.mts.*',

+ 1 - 0
internal/lint-configs/eslint-config/src/configs/index.ts

@@ -1,5 +1,6 @@
 export * from './command';
 export * from './comments';
+export * from './disableds';
 export * from './ignores';
 export * from './import';
 export * from './javascript';

+ 2 - 0
internal/lint-configs/eslint-config/src/index.ts

@@ -3,6 +3,7 @@ import type { Linter } from 'eslint';
 import {
   command,
   comments,
+  disableds,
   ignores,
   importPluginConfig,
   javascript,
@@ -35,6 +36,7 @@ async function defineConfig(config: FlatConfig[] = []) {
     prettier(),
     typescript(),
     jsonc(),
+    disableds(),
     importPluginConfig(),
     node(),
     perfectionist(),

+ 1 - 1
internal/lint-configs/prettier-config/package.json

@@ -32,6 +32,6 @@
   },
   "dependencies": {
     "prettier": "^3.2.5",
-    "prettier-plugin-tailwindcss": "^0.5.14"
+    "prettier-plugin-tailwindcss": "^0.6.0"
   }
 }

+ 1 - 1
internal/tailwind-config/package.json

@@ -45,7 +45,7 @@
     "./*": "./*"
   },
   "dependencies": {
-    "@iconify/json": "^2.2.214",
+    "@iconify/json": "^2.2.215",
     "@iconify/tailwind": "^1.1.1",
     "@tailwindcss/forms": "^0.5.7",
     "@tailwindcss/nesting": "0.0.0-insiders.565cd3e",

+ 1 - 1
internal/tsconfig/package.json

@@ -20,6 +20,6 @@
   ],
   "dependencies": {
     "@vben/types": "workspace:*",
-    "vite": "5.2.11"
+    "vite": "6.0.0-alpha.17"
   }
 }

+ 3 - 3
internal/vite-config/package.json

@@ -42,13 +42,13 @@
     "@types/html-minifier-terser": "^7.0.2",
     "@vben/node-utils": "workspace:*",
     "@vitejs/plugin-vue": "^5.0.4",
-    "@vitejs/plugin-vue-jsx": "^3.1.0",
+    "@vitejs/plugin-vue-jsx": "^4.0.0",
     "dayjs": "^1.11.11",
     "dotenv": "^16.4.5",
     "rollup-plugin-visualizer": "^5.12.0",
-    "sass": "^1.77.2",
+    "sass": "^1.77.4",
     "unplugin-turbo-console": "^1.8.6",
-    "vite": "5.2.11",
+    "vite": "6.0.0-alpha.17",
     "vite-plugin-compression": "^0.5.1",
     "vite-plugin-dts": "^3.9.1",
     "vite-plugin-html": "^3.2.2",

+ 4 - 4
package.json

@@ -46,8 +46,8 @@
   "devDependencies": {
     "@changesets/cli": "^2.27.5",
     "@ls-lint/ls-lint": "^2.2.3",
-    "@types/jsdom": "^21.1.6",
-    "@types/node": "^20.12.12",
+    "@types/jsdom": "^21.1.7",
+    "@types/node": "^20.12.13",
     "@vben/commitlint-config": "workspace:*",
     "@vben/eslint-config": "workspace:*",
     "@vben/lint-staged-config": "workspace:*",
@@ -67,7 +67,7 @@
     "turbo": "^1.13.3",
     "typescript": "^5.4.5",
     "unbuild": "^2.0.0",
-    "vite": "5.2.11",
+    "vite": "6.0.0-alpha.17",
     "vitest": "^2.0.0-beta.3",
     "vue-tsc": "^2.0.19"
   },
@@ -75,7 +75,7 @@
     "node": ">=18.7.0",
     "pnpm": ">=8.5.0"
   },
-  "packageManager": "pnpm@9.1.3",
+  "packageManager": "pnpm@9.1.4",
   "pnpm": {
     "overrides": {
       "@ctrl/tinycolor": "4.1.0",

+ 4 - 0
packages/@vben-core/shared/typings/src/preference.ts

@@ -61,6 +61,8 @@ interface Preference {
   footerFixed: boolean;
   /** 页脚是否可见 */
   footerVisible: boolean;
+  /** 顶栏是否隐藏 */
+  headerHidden: boolean;
   /** header显示模式 */
   headerMode: LayoutHeaderMode;
   /** 顶栏是否可见 */
@@ -103,6 +105,8 @@ interface Preference {
   sideExpandOnHover: boolean;
   /** 侧边栏扩展区域是否折叠 */
   sideExtraCollapse: boolean;
+  /** 侧边栏是否隐藏 */
+  sideHidden: boolean;
   /** 侧边栏是否可见 */
   sideVisible: boolean;
   /** 侧边栏宽度 */

+ 1 - 1
packages/@vben-core/uikit/layout-ui/src/components/layout-header.vue

@@ -112,7 +112,7 @@ function handleOpenMenu() {
 <template>
   <header
     :style="style"
-    class="border-border top-0 flex w-full flex-[0_0_auto] items-center border-b"
+    class="border-border top-0 flex w-full flex-[0_0_auto] items-center border-b transition-[margin-top] duration-200"
   >
     <div v-if="slots.logo" :style="logoStyle">
       <slot name="logo"></slot>

+ 3 - 13
packages/@vben-core/uikit/layout-ui/src/components/layout-side.vue

@@ -136,11 +136,11 @@ const style = computed((): CSSProperties => {
 });
 
 const extraStyle = computed((): CSSProperties => {
-  const { extraBackgroundColor, extraWidth, width, zIndex } = props;
+  const { extraBackgroundColor, extraWidth, show, width, zIndex } = props;
   return {
     backgroundColor: extraBackgroundColor,
     left: `${width}px`,
-    width: extraVisible.value ? `${extraWidth}px` : 0,
+    width: extraVisible.value && show ? `${extraWidth}px` : 0,
     zIndex,
   };
 });
@@ -156,9 +156,6 @@ const extraTitleStyle = computed((): CSSProperties => {
 const contentWidthStyle = computed((): CSSProperties => {
   const { collapseWidth, fixedExtra, isSideMixed, mixedWidth } = props;
   if (isSideMixed && fixedExtra) {
-    // if (!extraVisible.value) {
-    //   return {};
-    // }
     return { width: `${collapse.value ? collapseWidth : mixedWidth}px` };
   }
   return {};
@@ -204,14 +201,6 @@ watchEffect(() => {
   extraVisible.value = props.fixedExtra ? true : extraVisible.value;
 });
 
-// onClickOutside(asideRef, (event) => {
-//   const { fixedExtra, width } = props;
-//   // 防止点击 aside 区域关闭
-//   if (!fixedExtra && event.clientX >= width && extraVisible.value) {
-//     extraVisible.value = false;
-//   }
-// });
-
 function calcMenuWidthStyle(isHiddenDom: boolean): CSSProperties {
   const { backgroundColor, extraWidth, fixedExtra, isSideMixed, show, width } =
     props;
@@ -294,6 +283,7 @@ function handleScroll(event: Event) {
       v-if="isSideMixed"
       ref="asideRef"
       :class="e('extra')"
+      class="transition-[width] duration-200"
       :style="extraStyle"
     >
       <SideCollapseButton

+ 10 - 0
packages/@vben-core/uikit/layout-ui/src/vben-layout.ts

@@ -77,6 +77,11 @@ interface VbenLayoutProps {
    * @default 10
    */
   headerHeightOffset?: number;
+  /**
+   * 顶栏是否隐藏
+   * @default false
+   */
+  headerHidden?: boolean;
   /**
    * header 显示模式
    * @default 'fixed'
@@ -117,6 +122,11 @@ interface VbenLayoutProps {
    * @default 48
    */
   sideCollapseWidth?: number;
+  /**
+   * 侧边栏是否隐藏
+   * @default false
+   */
+  sideHidden?: boolean;
   /**
    * 混合侧边扩展区域是否可见
    * @default false

+ 22 - 13
packages/@vben-core/uikit/layout-ui/src/vben-layout.vue

@@ -33,6 +33,7 @@ const props = withDefaults(defineProps<Props>(), {
   // headerBackgroundColor: 'hsl(var(--color-background))',
   headerHeight: 50,
   headerHeightOffset: 10,
+  headerHidden: false,
 
   headerMode: 'fixed',
   headerVisible: true,
@@ -41,6 +42,7 @@ const props = withDefaults(defineProps<Props>(), {
   sideCollapseShowTitle: false,
   // sideCollapse: false,
   sideCollapseWidth: 60,
+  sideHidden: false,
   sideMixedWidth: 80,
   sideSemiDark: true,
   sideTheme: 'dark',
@@ -68,7 +70,7 @@ const { y: mouseY } = useMouse({ type: 'client' });
 
 // side是否处于hover状态展开菜单中
 const sideExpandOnHovering = ref(false);
-const sideHidden = ref(false);
+// const sideHidden = ref(false);
 const headerIsHidden = ref(false);
 
 const realLayout = computed(() => {
@@ -104,11 +106,11 @@ const isHeaderAuto = computed(() => props.headerMode === 'auto');
  * header区域高度
  */
 const getHeaderHeight = computed(() => {
-  const { headerHeight, headerHeightOffset, headerVisible } = props;
+  const { headerHeight, headerHeightOffset } = props;
 
-  if (!headerVisible) {
-    return 0;
-  }
+  // if (!headerVisible) {
+  //   return 0;
+  // }
 
   // 顶部存在导航时,增加10
   const offset = isMixedNav.value || isHeaderNav.value ? headerHeightOffset : 0;
@@ -118,7 +120,7 @@ const getHeaderHeight = computed(() => {
 
 const headerWrapperHeight = computed(() => {
   let height = 0;
-  if (props.headerVisible) {
+  if (props.headerVisible && !props.headerHidden) {
     height += getHeaderHeight.value;
   }
   if (props.tabsVisible) {
@@ -154,12 +156,16 @@ const sidePaddingTop = computed(() => {
  * 动态获取侧边宽度
  */
 const getSideWidth = computed(() => {
-  const { isMobile, sideMixedWidth, sideWidth } = props;
+  const { isMobile, sideHidden, sideMixedWidth, sideWidth } = props;
   let width = 0;
 
+  if (sideHidden) {
+    return width;
+  }
+
   if (
     !sideVisibleState.value ||
-    (sideHidden.value && !isSideMixedNav.value && !isMixedNav.value)
+    (sideHidden && !isSideMixedNav.value && !isMixedNav.value)
   ) {
     return width;
   }
@@ -190,6 +196,9 @@ const isSideMode = computed(() =>
 );
 
 const showSide = computed(() => {
+  // if (isMixedNav.value && !props.sideHidden) {
+  //   return false;
+  // }
   return isSideMode.value && sideVisible.value;
 });
 
@@ -441,7 +450,7 @@ function handleClickMask() {
 
 function handleToggleMenu() {
   // sideVisible.value = !sideVisible.value;
-  sideHidden.value = !sideHidden.value;
+  // sideHidden.value = !sideHidden.value;
 }
 
 function handleOpenMenu() {
@@ -452,7 +461,7 @@ function handleOpenMenu() {
 <template>
   <div class="relative flex min-h-full w-full">
     <slot name="preference"></slot>
-    <slot name="back-top"></slot>
+    <slot name="floating-button-group"></slot>
     <LayoutSide
       v-if="sideVisibleState"
       v-model:collapse="sideCollapse"
@@ -498,13 +507,13 @@ function handleOpenMenu() {
     >
       <div
         :style="headerWrapperStyle"
-        class="overflow-hidden transition-all duration-200 ease-in-out"
+        class="overflow-hidden transition-all duration-200"
       >
         <LayoutHeader
           v-if="headerVisible"
           :full-width="!isSideMode"
           :height="getHeaderHeight"
-          :show="!fullContent"
+          :show="!fullContent && !headerHidden"
           :side-hidden="sideHidden"
           :show-toggle-btn="showHeaderToggleButton"
           :width="mainStyle.width"
@@ -531,7 +540,7 @@ function handleOpenMenu() {
 
       <!-- </div> -->
       <LayoutContent
-        class="transition-[margin-top] duration-300 ease-in"
+        class="transition-[margin-top] duration-200"
         :style="contentStyle"
         :content-compact="contentCompact"
         :content-compact-width="contentCompactWidth"

+ 2 - 1
packages/@vben-core/uikit/shadcn-ui/src/components/back-top/back-top.vue

@@ -14,6 +14,7 @@ defineOptions({ name: 'BackTop' });
 
 const props = withDefaults(defineProps<Props>(), {
   bottom: 40,
+  isGroup: false,
   right: 40,
   target: '',
   visibilityHeight: 200,
@@ -31,7 +32,7 @@ const { handleClick, visible } = useBackTop(props);
     <VbenButton
       v-if="visible"
       :style="backTopStyle"
-      class="bg-accent fixed bottom-5 right-5 h-10 w-10 rounded-full"
+      class="bg-accent data fixed bottom-10 right-5 h-10 w-10 rounded-full"
       size="icon"
       variant="icon"
       @click="handleClick"

+ 1 - 0
packages/@vben-core/uikit/shadcn-ui/src/components/back-top/backtop.ts

@@ -31,6 +31,7 @@ export const backtopProps = {
 
 export interface BacktopProps {
   bottom?: number;
+  isGroup?: boolean;
   right?: number;
   target?: string;
   visibilityHeight?: number;

+ 46 - 0
packages/@vben-core/uikit/shadcn-ui/src/components/floating-button-group/floating-button-group.vue

@@ -0,0 +1,46 @@
+<script setup>
+import { ref } from 'vue';
+
+const isMenuOpen = ref(false);
+const menuItems = ref(['1', '2', '3', '4']);
+
+const toggleMenu = () => {
+  isMenuOpen.value = !isMenuOpen.value;
+};
+
+const handleMenuItemClick = (_item) => {
+  // console.log(111, item);
+};
+</script>
+
+<template>
+  <div class="fixed bottom-5 right-5 flex flex-col-reverse items-center gap-2">
+    <button
+      class="flex h-12 w-12 items-center justify-center rounded-full bg-blue-500 text-xl text-white transition-transform duration-300"
+      :class="{ 'rotate-45': isMenuOpen }"
+      @click="toggleMenu"
+    >
+      ✖
+    </button>
+    <div
+      class="absolute bottom-16 right-0 flex flex-col-reverse gap-2 transition-all duration-300"
+      :class="{
+        'visible translate-y-0 opacity-100': isMenuOpen,
+        'invisible translate-y-2 opacity-0': !isMenuOpen,
+      }"
+    >
+      <button
+        v-for="(item, index) in menuItems"
+        :key="index"
+        class="flex h-12 w-12 items-center justify-center rounded-full bg-blue-500 text-xl text-white"
+        @click="handleMenuItemClick(item)"
+      >
+        {{ item }}
+      </button>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+/* 可以在这里添加任何需要的额外样式 */
+</style>

+ 1 - 0
packages/@vben-core/uikit/shadcn-ui/src/components/floating-button-group/index.ts

@@ -0,0 +1 @@
+export { default as VbenFloatingButtonGroup } from './floating-button-group.vue';

+ 1 - 0
packages/@vben-core/uikit/shadcn-ui/src/components/index.ts

@@ -7,6 +7,7 @@ export * from './button';
 export * from './checkbox';
 export * from './context-menu';
 export * from './dropdown-menu';
+export * from './floating-button-group';
 export * from './full-screen';
 export * from './hover-card';
 export * from './icon';

+ 3 - 6
packages/@vben-core/uikit/shadcn-ui/src/components/logo/logo.vue

@@ -1,8 +1,6 @@
 <script setup lang="ts">
 import { computed } from 'vue';
 
-import { VbenAvatar } from '../avatar';
-
 interface Props {
   /**
    * Logo 图标 alt
@@ -42,7 +40,7 @@ const props = withDefaults(defineProps<Props>(), {
   alt: 'Vben',
   collapse: false,
   href: 'javascript:void 0',
-  logoSize: 32,
+  logoSize: 36,
   src: '',
   text: '',
   theme: 'light',
@@ -59,13 +57,12 @@ const logoClass = computed(() => {
       class="flex h-full items-center gap-2 overflow-hidden px-3 font-semibold leading-normal transition-all duration-500"
       :class="$attrs.class"
     >
-      <VbenAvatar
+      <img
         v-if="src"
         :src="src"
         :alt="alt"
-        :height="logoSize"
         :width="logoSize"
-        class="relative size-9 rounded-none bg-transparent"
+        class="relative rounded-none bg-transparent"
       />
       <span
         v-if="!collapse"

+ 1 - 0
packages/@vben-core/uikit/shadcn-ui/src/styles/index.css

@@ -33,6 +33,7 @@
   opacity: 0;
   transform: translateX(30px) skewX(-30deg);
 }
+
 /*
 .breadcrumb-transition-move,
 .breadcrumb-transition-enter-active {

+ 9 - 2
packages/business/layouts/src/basic/layout.vue

@@ -1,6 +1,10 @@
 <script lang="ts" setup>
 import { VbenAdminLayout } from '@vben-core/layout-ui';
-import { VbenBackTop, VbenLogo } from '@vben-core/shadcn-ui';
+import {
+  VbenBackTop,
+  // VbenFloatingButtonGroup,
+  VbenLogo,
+} from '@vben-core/shadcn-ui';
 import { mapTree } from '@vben-core/toolkit';
 import { MenuRecordRaw } from '@vben-core/typings';
 
@@ -107,9 +111,11 @@ function wrapperMenus(menus: MenuRecordRaw[]) {
     :footer-fixed="preference.footerFixed"
     :side-semi-dark="preference.semiDarkMenu"
     :side-theme="theme"
+    :side-hidden="preference.sideHidden"
     :side-visible="sideVisible"
     :footer-visible="preference.footerVisible"
     :header-visible="preference.headerVisible"
+    :header-hidden="preference.headerHidden"
     :side-width="preference.sideWidth"
     :tabs-visible="preference.tabsVisible"
     :side-expand-on-hover="preference.sideExpandOnHover"
@@ -131,8 +137,9 @@ function wrapperMenus(menus: MenuRecordRaw[]) {
       <PreferenceWidget />
     </template>
 
-    <template #back-top>
+    <template #floating-button-group>
       <VbenBackTop />
+      <!-- <VbenFloatingButtonGroup /> -->
     </template>
 
     <!-- logo -->

+ 3 - 3
packages/business/layouts/src/basic/tabs/tabs-toolbar.vue

@@ -17,8 +17,8 @@ const menus = computed(() => {
 
 function handleScreenChange(screen: boolean) {
   updatePreference({
-    headerVisible: !screen,
-    sideVisible: !screen,
+    headerHidden: !!screen,
+    sideHidden: !!screen,
   });
 }
 </script>
@@ -27,7 +27,7 @@ function handleScreenChange(screen: boolean) {
   <div class="flex-center h-full">
     <TabsMore :menus="menus" />
     <TabsScreen
-      :screen="!preference.headerVisible && !preference.sideVisible"
+      :screen="preference.sideHidden && preference.sideHidden"
       @change="handleScreenChange"
       @update:screen="handleScreenChange"
     />

+ 11 - 0
packages/constants/src/_essential.ts

@@ -0,0 +1,11 @@
+/**
+ * @zh_CN 登陆页面 url 地址
+ */
+const LOGIN_PATH = '/auth/login';
+
+/**
+ *  @zh_CN 登陆页面路由名称
+ */
+const LOGIN_NAME = 'Login';
+
+export { LOGIN_NAME, LOGIN_PATH };

+ 1 - 0
packages/constants/src/index.ts

@@ -1 +1,2 @@
+export * from './_essential';
 export * from './vben';

+ 6 - 1
packages/constants/src/vben.ts

@@ -1 +1,6 @@
-export const VBEN_GITHUB_URL = 'https://github.com/vbenjs/vue-vben-admin';
+/**
+ * @zh_CN GITHUB 仓库地址
+ */
+const VBEN_GITHUB_URL = 'https://github.com/vbenjs/vue-vben-admin';
+
+export { VBEN_GITHUB_URL };

+ 53 - 48
packages/locales/src/langs/en-US.yaml

@@ -38,6 +38,59 @@ search:
   no-recent: No recent searches
   recent: Recent
 
+authentication:
+  layout-title: Plug-and-play backend system
+  layout-desc: Efficient, versatile frontend template
+  login-success: Login successful
+  login-success-desc: Welcome back
+  welcome-back: Welcome Back
+  login-subtitle: Enter your account details to manage your projects
+  username: Username
+  password: Password
+  username-tip: Username is required
+  password-tip: Password is required
+  account-tip: Don't have an account yet?
+  create-an-account: Create an account
+  create-account: Create account
+  already-account: Already have an account?
+  remember-me: Remember Me
+  sign-up: Sign Up
+  sign-up-subtitle: Make managing your applications simple and fun
+  comfirm-password: Comfirm Password
+  comfirm-password-tip: The passwords entered twice do not match
+  sign-up-agree: I agree to
+  sign-up-privacy-policy: Privacy-policy
+  sign-up-terms: Terms
+  sign-up-agree-tip: Please agree to the Privacy Policy and Terms
+  go-login: Login instead
+  password-strength: Use 8 or more characters with a mix of letters, numbers & symbols
+  forget-password: Forget Password?
+  forget-password-subtitle: Enter your email and we'll send you instructions to reset your password
+  email-tip: Email is required
+  send-reset-link: Send Reset Link
+  email: Email
+  qrcode-subtitle: Please scan the QR code to log in on your mobile device
+  qrcode-prompt: Scanning the code to complete the login
+  qrcode-login: QR Login
+  code-subtitle: Please enter your phone number to start managing your projects
+  code: Security code
+  code-tip: Security code is required
+  mobile: Mobile
+  mobile-login: Mobile Login
+  mobile-tip: Mobile is required
+  send-code: Get Security code
+  send-text: "Reacquire in {0}s"
+  third-party-login: Or continue with
+
+page:
+  about: About
+  document: Document
+  login: Login
+  register: Register
+  code-login: Code Login
+  qrcode-login: Qrcode Login
+  forget-password: Forget Password
+
 preference:
   preferences: Preferences
   preferences-subtitle: Customize Preferences & Preview in Real Time
@@ -111,51 +164,3 @@ preference:
   footer-visible: Display Footer
   logo-visible: Display Logo
   reset-tip: The data has changed, click to reset
-
-authentication:
-  layout-title: Plug-and-play backend system
-  layout-desc: Efficient, versatile frontend template
-  login-success: Login successful
-  login-success-desc: Welcome back
-  welcome-back: Welcome Back
-  login-subtitle: Enter your account details to manage your projects
-  username: Username
-  password: Password
-  username-tip: Username is required
-  password-tip: Password is required
-  account-tip: Don't have an account yet?
-  create-an-account: Create an account
-  create-account: Create account
-  already-account: Already have an account?
-  remember-me: Remember Me
-  sign-up: Sign Up
-  sign-up-subtitle: Make managing your applications simple and fun
-  comfirm-password: Comfirm Password
-  comfirm-password-tip: The passwords entered twice do not match
-  sign-up-agree: I agree to
-  sign-up-privacy-policy: Privacy-policy
-  sign-up-terms: Terms
-  sign-up-agree-tip: Please agree to the Privacy Policy and Terms
-  go-login: Login instead
-  password-strength: Use 8 or more characters with a mix of letters, numbers & symbols
-  forget-password: Forget Password?
-  forget-password-subtitle: Enter your email and we'll send you instructions to reset your password
-  email-tip: Email is required
-  send-reset-link: Send Reset Link
-  email: Email
-  qrcode-subtitle: Please scan the QR code to log in on your mobile device
-  qrcode-prompt: Scanning the code to complete the login
-  qrcode-login: QR Login
-  code-subtitle: Please enter your phone number to start managing your projects
-  code: Security code
-  code-tip: Security code is required
-  mobile: Mobile
-  mobile-login: Mobile Login
-  mobile-tip: Mobile is required
-  send-code: Get Security code
-  send-text: "Reacquire in {0}s"
-  third-party-login: Or continue with
-
-page:
-  about: About
-  document: Document

+ 53 - 48
packages/locales/src/langs/zh-CN.yaml

@@ -37,6 +37,59 @@ search:
   no-recent: 没有搜索历史
   recent: 搜索历史
 
+authentication:
+  layout-title: 开箱即用的大型中后台管理系统
+  layout-desc: 工程化、高性能、跨组件库的前端模版
+  login-success: 登录成功
+  login-success-desc: 欢迎回来
+  welcome-back: 欢迎回来
+  login-subtitle: 请输入您的帐户信息以开始管理您的项目
+  username: 账号
+  password: 密码
+  username-tip: 请输入用户名
+  password-tip: 请输入用户名
+  remember-me: 记住账号
+  create-an-account: 创建一个账号
+  create-account: 创建账号
+  already-account: 已经有账号了?
+  account-tip: 还没有账号?
+  sign-up: 注册
+  sign-up-subtitle: 让您的应用程序管理变得简单而有趣
+  comfirm-password: 确认密码
+  comfirm-password-tip: 两次输入的密码不一致
+  sign-up-agree: 我同意
+  sign-up-privacy-policy: 隐私政策
+  sign-up-terms: 条款
+  sign-up-agree-tip: 请同意隐私政策和条款
+  go-login: 去登录
+  password-strength: 使用 8 个或更多字符,混合字母、数字和符号
+  forget-password: 忘记密码?
+  forget-password-subtitle: 输入您的电子邮件,我们将向您发送重置密码的连接
+  email-tip: 请输入邮箱
+  send-reset-link: 发送重置链接
+  email: 邮箱
+  qrcode-subtitle: 请用手机扫描二维码登录
+  qrcode-prompt: 扫码后点击 '确认',即可完成登录
+  qrcode-login: 扫码登录
+  code-subtitle: 请输入您的手机号码以开始管理您的项目
+  code: 验证码
+  code-tip: 请输入验证码
+  mobile: 手机号码
+  mobile-login: 手机号登录
+  mobile-tip: 请输入手机号码
+  send-code: 获取验证码
+  send-text: "{0}秒后重新获取"
+  third-party-login: 其他登录方式
+
+page:
+  about: 关于
+  document: 文档
+  login: 登陆
+  register: 注册
+  code-login: 验证码登陆
+  qrcode-login: 二维码登陆
+  forget-password: 忘记密码
+
 preference:
   preferences: 偏好设置
   preferences-subtitle: 自定义偏好设置 & 实时预览
@@ -110,51 +163,3 @@ preference:
   footer-fixed: 固定在底部
   logo-visible: 显示 Logo
   reset-tip: 数据有变化,点击可进行重置
-
-authentication:
-  layout-title: 开箱即用的大型中后台管理系统
-  layout-desc: 工程化、高性能、跨组件库的前端模版
-  login-success: 登录成功
-  login-success-desc: 欢迎回来
-  welcome-back: 欢迎回来
-  login-subtitle: 请输入您的帐户信息以开始管理您的项目
-  username: 账号
-  password: 密码
-  username-tip: 请输入用户名
-  password-tip: 请输入用户名
-  remember-me: 记住账号
-  create-an-account: 创建一个账号
-  create-account: 创建账号
-  already-account: 已经有账号了?
-  account-tip: 还没有账号?
-  sign-up: 注册
-  sign-up-subtitle: 让您的应用程序管理变得简单而有趣
-  comfirm-password: 确认密码
-  comfirm-password-tip: 两次输入的密码不一致
-  sign-up-agree: 我同意
-  sign-up-privacy-policy: 隐私政策
-  sign-up-terms: 条款
-  sign-up-agree-tip: 请同意隐私政策和条款
-  go-login: 去登录
-  password-strength: 使用 8 个或更多字符,混合字母、数字和符号
-  forget-password: 忘记密码?
-  forget-password-subtitle: 输入您的电子邮件,我们将向您发送重置密码的连接
-  email-tip: 请输入邮箱
-  send-reset-link: 发送重置链接
-  email: 邮箱
-  qrcode-subtitle: 请用手机扫描二维码登录
-  qrcode-prompt: 扫码后点击 '确认',即可完成登录
-  qrcode-login: 扫码登录
-  code-subtitle: 请输入您的手机号码以开始管理您的项目
-  code: 验证码
-  code-tip: 请输入验证码
-  mobile: 手机号码
-  mobile-login: 手机号登录
-  mobile-tip: 请输入手机号码
-  send-code: 获取验证码
-  send-text: "{0}秒后重新获取"
-  third-party-login: 其他登录方式
-
-page:
-  about: 关于
-  document: 文档

+ 4 - 2
packages/preference/src/config.ts

@@ -15,17 +15,18 @@ const defaultPreference: Preference = {
   contentCompact: 'wide',
   copyright: 'Copyright © 2024 Vben Admin PRO',
   defaultAvatar:
-    'https://cdn.jsdelivr.net/gh/vbenjs/vben-cdn-static@0.1.2/vben-admin/pro-avatar.webp',
+    'https://cdn.jsdelivr.net/npm/@vbenjs/static-source@0.1.0/source/avatar-v1.webp',
   dynamicTitle: true,
   footerFixed: true,
   footerVisible: true,
+  headerHidden: false,
   headerMode: 'fixed',
   headerVisible: true,
   isMobile: false,
   keepAlive: true,
   layout: 'side-nav',
   locale: 'zh-CN',
-  logo: 'https://cdn.jsdelivr.net/gh/vbenjs/vben-cdn-static@0.1.2/vben-admin/admin-logo.png',
+  logo: 'https://cdn.jsdelivr.net/npm/@vbenjs/static-source@0.1.0/source/logo-v1.webp',
   logoVisible: true,
   navigationAccordion: true,
   navigationSplit: true,
@@ -40,6 +41,7 @@ const defaultPreference: Preference = {
   sideCollapseShowTitle: true,
   sideExpandOnHover: true,
   sideExtraCollapse: true,
+  sideHidden: false,
   sideVisible: true,
   sideWidth: 240,
   tabsIcon: true,

+ 0 - 0
packages/types/src/ui.ts → packages/types/src/ui.d.ts


+ 190 - 126
pnpm-lock.yaml

@@ -20,11 +20,11 @@ importers:
         specifier: ^2.2.3
         version: 2.2.3
       '@types/jsdom':
-        specifier: ^21.1.6
-        version: 21.1.6
+        specifier: ^21.1.7
+        version: 21.1.7
       '@types/node':
-        specifier: ^20.12.12
-        version: 20.12.12
+        specifier: ^20.12.13
+        version: 20.12.13
       '@vben/commitlint-config':
         specifier: workspace:*
         version: link:internal/lint-configs/commitlint-config
@@ -81,13 +81,13 @@ importers:
         version: 5.4.5
       unbuild:
         specifier: ^2.0.0
-        version: 2.0.0(sass@1.77.2)(typescript@5.4.5)(vue-tsc@2.0.19(typescript@5.4.5))
+        version: 2.0.0(sass@1.77.4)(typescript@5.4.5)(vue-tsc@2.0.19(typescript@5.4.5))
       vite:
-        specifier: 5.2.11
-        version: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+        specifier: 6.0.0-alpha.17
+        version: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
       vitest:
         specifier: ^2.0.0-beta.3
-        version: 2.0.0-beta.3(@types/node@20.12.12)(jsdom@24.1.0)(sass@1.77.2)(terser@5.31.0)
+        version: 2.0.0-beta.3(@types/node@20.12.13)(jsdom@24.1.0)(sass@1.77.4)(terser@5.31.0)
       vue-tsc:
         specifier: ^2.0.19
         version: 2.0.19(typescript@5.4.5)
@@ -148,13 +148,13 @@ importers:
     devDependencies:
       vite-plugin-mock:
         specifier: ^3.0.2
-        version: 3.0.2(esbuild@0.20.2)(mockjs@1.1.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
+        version: 3.0.2(esbuild@0.20.2)(mockjs@1.1.0)(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))
 
   internal/lint-configs/commitlint-config:
     dependencies:
       '@commitlint/cli':
         specifier: ^19.3.0
-        version: 19.3.0(@types/node@20.12.12)(typescript@5.4.5)
+        version: 19.3.0(@types/node@20.12.13)(typescript@5.4.5)
       '@commitlint/config-conventional':
         specifier: ^19.2.2
         version: 19.2.2
@@ -199,8 +199,8 @@ importers:
         specifier: ^2.29.1
         version: 2.29.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)
       eslint-plugin-jsdoc:
-        specifier: ^48.2.6
-        version: 48.2.6(eslint@8.57.0)
+        specifier: ^48.2.7
+        version: 48.2.7(eslint@8.57.0)
       eslint-plugin-jsonc:
         specifier: ^2.16.0
         version: 2.16.0(eslint@8.57.0)
@@ -227,7 +227,7 @@ importers:
         version: 4.0.0(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)
       eslint-plugin-vitest:
         specifier: ^0.5.4
-        version: 0.5.4(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@2.0.0-beta.3(@types/node@20.12.12)(jsdom@24.1.0)(sass@1.77.2)(terser@5.31.0))
+        version: 0.5.4(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@2.0.0-beta.3(@types/node@20.12.13)(jsdom@24.1.0)(sass@1.77.4)(terser@5.31.0))
       eslint-plugin-vue:
         specifier: ^9.26.0
         version: 9.26.0(eslint@8.57.0)
@@ -253,8 +253,8 @@ importers:
         specifier: ^3.2.5
         version: 3.2.5
       prettier-plugin-tailwindcss:
-        specifier: ^0.5.14
-        version: 0.5.14(prettier@3.2.5)
+        specifier: ^0.6.0
+        version: 0.6.0(prettier@3.2.5)
 
   internal/lint-configs/stylelint-config:
     dependencies:
@@ -332,8 +332,8 @@ importers:
   internal/tailwind-config:
     dependencies:
       '@iconify/json':
-        specifier: ^2.2.214
-        version: 2.2.214
+        specifier: ^2.2.215
+        version: 2.2.215
       '@iconify/tailwind':
         specifier: ^1.1.1
         version: 1.1.1
@@ -384,8 +384,8 @@ importers:
         specifier: workspace:*
         version: link:../../packages/types
       vite:
-        specifier: 5.2.11
-        version: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+        specifier: 6.0.0-alpha.17
+        version: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
 
   internal/vite-config:
     dependencies:
@@ -406,10 +406,10 @@ importers:
         version: 2.0.2
       vite-plugin-lib-inject-css:
         specifier: ^2.1.1
-        version: 2.1.1(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
+        version: 2.1.1(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))
       vite-plugin-vue-devtools:
         specifier: ^7.2.1
-        version: 7.2.1(rollup@4.18.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
+        version: 7.2.1(rollup@4.18.0)(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
     devDependencies:
       '@types/html-minifier-terser':
         specifier: ^7.0.2
@@ -419,10 +419,10 @@ importers:
         version: link:../node-utils
       '@vitejs/plugin-vue':
         specifier: ^5.0.4
-        version: 5.0.4(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
+        version: 5.0.4(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
       '@vitejs/plugin-vue-jsx':
-        specifier: ^3.1.0
-        version: 3.1.0(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
+        specifier: ^4.0.0
+        version: 4.0.0(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
       dayjs:
         specifier: ^1.11.11
         version: 1.11.11
@@ -433,26 +433,26 @@ importers:
         specifier: ^5.12.0
         version: 5.12.0(rollup@4.18.0)
       sass:
-        specifier: ^1.77.2
-        version: 1.77.2
+        specifier: ^1.77.4
+        version: 1.77.4
       unplugin-turbo-console:
         specifier: ^1.8.6
-        version: 1.8.6(esbuild@0.20.2)(rollup@4.18.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
+        version: 1.8.6(esbuild@0.20.2)(rollup@4.18.0)(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
       vite:
-        specifier: 5.2.11
-        version: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+        specifier: 6.0.0-alpha.17
+        version: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
       vite-plugin-compression:
         specifier: ^0.5.1
-        version: 0.5.1(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
+        version: 0.5.1(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))
       vite-plugin-dts:
         specifier: ^3.9.1
-        version: 3.9.1(@types/node@20.12.12)(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
+        version: 3.9.1(@types/node@20.12.13)(rollup@4.18.0)(typescript@5.4.5)(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))
       vite-plugin-html:
         specifier: ^3.2.2
-        version: 3.2.2(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
+        version: 3.2.2(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))
       vite-plugin-mock:
         specifier: ^3.0.2
-        version: 3.0.2(esbuild@0.20.2)(mockjs@1.1.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
+        version: 3.0.2(esbuild@0.20.2)(mockjs@1.1.0)(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))
 
   packages/@vben-core/shared/chche: {}
 
@@ -812,7 +812,7 @@ importers:
     devDependencies:
       vitepress:
         specifier: ^1.2.2
-        version: 1.2.2(@algolia/client-search@4.23.3)(@types/node@20.12.12)(async-validator@4.2.5)(axios@1.7.2)(nprogress@0.2.0)(postcss@8.4.38)(qrcode@1.5.3)(sass@1.77.2)(search-insights@2.14.0)(terser@5.31.0)(typescript@5.4.5)
+        version: 1.2.2(@algolia/client-search@4.23.3)(@types/node@20.12.13)(async-validator@4.2.5)(axios@1.7.2)(nprogress@0.2.0)(postcss@8.4.38)(qrcode@1.5.3)(sass@1.77.4)(search-insights@2.14.0)(terser@5.31.0)(typescript@5.4.5)
       vue:
         specifier: 3.4.27
         version: 3.4.27(typescript@5.4.5)
@@ -1596,6 +1596,10 @@ packages:
     resolution: {integrity: sha512-Q1CnsQrytI3TlCB1IVWXWeqUIPGVEKGaE7IbVdt13Nq/3i0JESAkQQERrfiQkmlpijl+++qyqPgaS31Bvc1jRQ==}
     engines: {node: '>=16'}
 
+  '@es-joy/jsdoccomment@0.43.1':
+    resolution: {integrity: sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==}
+    engines: {node: '>=16'}
+
   '@esbuild/aix-ppc64@0.19.12':
     resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
     engines: {node: '>=12'}
@@ -1924,8 +1928,8 @@ packages:
   '@humanwhocodes/object-schema@2.0.3':
     resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
 
-  '@iconify/json@2.2.214':
-    resolution: {integrity: sha512-EVdAczIPBz1gcXVSHrEe0vBl6x4lcG7Dw95tO0o/h2SPTXKigEvV1cufe8yFFNuBHKqv/n1XTwqCZX0ontKTtw==}
+  '@iconify/json@2.2.215':
+    resolution: {integrity: sha512-uXEk3uB5pqNQmYw004lDQwaRVHbNKTDvHkOI0x24QvOGPqhQ+CbcWUlT/fOnwcjwPjsHxeAgUpwKz84sh0jpDg==}
 
   '@iconify/tailwind@1.1.1':
     resolution: {integrity: sha512-4mmA//qjZigv7D4KlqcVSYTqfRIJzyts2/lSCAJfCL0rVMIE76+ifJnaE5jxCo1+nYGBF8FsFo0qFOs+sX4EnA==}
@@ -2360,8 +2364,8 @@ packages:
   '@types/js-cookie@3.0.6':
     resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==}
 
-  '@types/jsdom@21.1.6':
-    resolution: {integrity: sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw==}
+  '@types/jsdom@21.1.7':
+    resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==}
 
   '@types/json-schema@7.0.15':
     resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -2393,6 +2397,9 @@ packages:
   '@types/node@20.12.12':
     resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==}
 
+  '@types/node@20.12.13':
+    resolution: {integrity: sha512-gBGeanV41c1L171rR7wjbMiEpEI/l5XFQdLLfhr/REwpgDy/4U8y89+i8kRiLzDyZdOkXh+cRaTetUnCYutoXA==}
+
   '@types/normalize-package-data@2.4.4':
     resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
 
@@ -2487,11 +2494,11 @@ packages:
   '@ungap/structured-clone@1.2.0':
     resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
 
-  '@vitejs/plugin-vue-jsx@3.1.0':
-    resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==}
-    engines: {node: ^14.18.0 || >=16.0.0}
+  '@vitejs/plugin-vue-jsx@4.0.0':
+    resolution: {integrity: sha512-A+6wL2AdQhDsLsDnY+2v4rRDI1HLJGIMc97a8FURO9tqKsH5QvjWrzsa5DH3NlZsM742W2wODl2fF+bfcTWtXw==}
+    engines: {node: ^18.0.0 || >=20.0.0}
     peerDependencies:
-      vite: ^4.0.0 || ^5.0.0
+      vite: ^5.0.0
       vue: 3.4.27
 
   '@vitejs/plugin-vue@5.0.4':
@@ -3750,8 +3757,8 @@ packages:
     peerDependencies:
       eslint: ^7.2.0 || ^8
 
-  eslint-plugin-jsdoc@48.2.6:
-    resolution: {integrity: sha512-GNk9jtpYmoEVeD/U6yYYmd6T8vSOoPs7CL8ZeX85iD8P3qifDdLQGze6+cw9boobDthmYnnxvIoHrhuSffj09g==}
+  eslint-plugin-jsdoc@48.2.7:
+    resolution: {integrity: sha512-fYj3roTnkFL9OFFTB129rico8lerC5G8Vp2ZW9SjO9RNWG0exVvI+i/Y8Bpm1ufjR0uvT38xtoab/U0Hp8Ybog==}
     engines: {node: '>=18'}
     peerDependencies:
       eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
@@ -5881,8 +5888,8 @@ packages:
     resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
     engines: {node: '>=6.0.0'}
 
-  prettier-plugin-tailwindcss@0.5.14:
-    resolution: {integrity: sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==}
+  prettier-plugin-tailwindcss@0.6.0:
+    resolution: {integrity: sha512-l5F3iG54XbOq/2DOPP/YA+c6VE3/qXrcBccntq2v7PSxtEc+J6SwsuTyDHxoFK1+jAlcU/hECBfzn6MON6ENBg==}
     engines: {node: '>=14.21.3'}
     peerDependencies:
       '@ianvs/prettier-plugin-sort-imports': '*'
@@ -6239,8 +6246,8 @@ packages:
   safer-buffer@2.1.2:
     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
 
-  sass@1.77.2:
-    resolution: {integrity: sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==}
+  sass@1.77.4:
+    resolution: {integrity: sha512-vcF3Ckow6g939GMA4PeU7b2K/9FALXk2KF9J87txdHzXbUF9XRQRwSxcAs/fGaTnJeBFd7UoV22j3lzMLdM0Pw==}
     engines: {node: '>=14.0.0'}
     hasBin: true
 
@@ -7077,6 +7084,34 @@ packages:
       terser:
         optional: true
 
+  vite@6.0.0-alpha.17:
+    resolution: {integrity: sha512-zWeYzZLJ1zesnCeUXA39hSJtXSkgaYl3dPaBis4aFBy1PwvbAbYcNeGt40XJdmqwEdm0aoIy8b7H6Hy29FiIwA==}
+    engines: {node: ^18.0.0 || >=20.0.0}
+    hasBin: true
+    peerDependencies:
+      '@types/node': ^18.0.0 || >=20.0.0
+      less: '*'
+      lightningcss: ^1.21.0
+      sass: '*'
+      stylus: '*'
+      sugarss: '*'
+      terser: ^5.4.0
+    peerDependenciesMeta:
+      '@types/node':
+        optional: true
+      less:
+        optional: true
+      lightningcss:
+        optional: true
+      sass:
+        optional: true
+      stylus:
+        optional: true
+      sugarss:
+        optional: true
+      terser:
+        optional: true
+
   vitepress@1.2.2:
     resolution: {integrity: sha512-uZ3nXR5NY4nYj3RJWCo5jev9qlNZAQo5SUXu1U0QSUx84cUm/o7hCTDVjZ4njVSVui+PsV1oAbdQOg8ygbaf4w==}
     hasBin: true
@@ -7976,11 +8011,11 @@ snapshots:
       human-id: 1.0.2
       prettier: 2.8.8
 
-  '@commitlint/cli@19.3.0(@types/node@20.12.12)(typescript@5.4.5)':
+  '@commitlint/cli@19.3.0(@types/node@20.12.13)(typescript@5.4.5)':
     dependencies:
       '@commitlint/format': 19.3.0
       '@commitlint/lint': 19.2.2
-      '@commitlint/load': 19.2.0(@types/node@20.12.12)(typescript@5.4.5)
+      '@commitlint/load': 19.2.0(@types/node@20.12.13)(typescript@5.4.5)
       '@commitlint/read': 19.2.1
       '@commitlint/types': 19.0.3
       execa: 8.0.1
@@ -8027,7 +8062,7 @@ snapshots:
       '@commitlint/rules': 19.0.3
       '@commitlint/types': 19.0.3
 
-  '@commitlint/load@19.2.0(@types/node@20.12.12)(typescript@5.4.5)':
+  '@commitlint/load@19.2.0(@types/node@20.12.13)(typescript@5.4.5)':
     dependencies:
       '@commitlint/config-validator': 19.0.3
       '@commitlint/execute-rule': 19.0.0
@@ -8035,7 +8070,7 @@ snapshots:
       '@commitlint/types': 19.0.3
       chalk: 5.3.0
       cosmiconfig: 9.0.0(typescript@5.4.5)
-      cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.12)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5)
+      cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.13)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5)
       lodash.isplainobject: 4.0.6
       lodash.merge: 4.6.2
       lodash.uniq: 4.5.0
@@ -8358,6 +8393,15 @@ snapshots:
       esquery: 1.5.0
       jsdoc-type-pratt-parser: 4.0.0
 
+  '@es-joy/jsdoccomment@0.43.1':
+    dependencies:
+      '@types/eslint': 8.56.10
+      '@types/estree': 1.0.5
+      '@typescript-eslint/types': 7.11.0
+      comment-parser: 1.4.1
+      esquery: 1.5.0
+      jsdoc-type-pratt-parser: 4.0.0
+
   '@esbuild/aix-ppc64@0.19.12':
     optional: true
 
@@ -8569,7 +8613,7 @@ snapshots:
 
   '@humanwhocodes/object-schema@2.0.3': {}
 
-  '@iconify/json@2.2.214':
+  '@iconify/json@2.2.215':
     dependencies:
       '@iconify/types': 2.0.0
       pathe: 1.1.2
@@ -8734,23 +8778,23 @@ snapshots:
       jju: 1.4.0
       read-yaml-file: 1.1.0
 
-  '@microsoft/api-extractor-model@7.28.13(@types/node@20.12.12)':
+  '@microsoft/api-extractor-model@7.28.13(@types/node@20.12.13)':
     dependencies:
       '@microsoft/tsdoc': 0.14.2
       '@microsoft/tsdoc-config': 0.16.2
-      '@rushstack/node-core-library': 4.0.2(@types/node@20.12.12)
+      '@rushstack/node-core-library': 4.0.2(@types/node@20.12.13)
     transitivePeerDependencies:
       - '@types/node'
 
-  '@microsoft/api-extractor@7.43.0(@types/node@20.12.12)':
+  '@microsoft/api-extractor@7.43.0(@types/node@20.12.13)':
     dependencies:
-      '@microsoft/api-extractor-model': 7.28.13(@types/node@20.12.12)
+      '@microsoft/api-extractor-model': 7.28.13(@types/node@20.12.13)
       '@microsoft/tsdoc': 0.14.2
       '@microsoft/tsdoc-config': 0.16.2
-      '@rushstack/node-core-library': 4.0.2(@types/node@20.12.12)
+      '@rushstack/node-core-library': 4.0.2(@types/node@20.12.13)
       '@rushstack/rig-package': 0.5.2
-      '@rushstack/terminal': 0.10.0(@types/node@20.12.12)
-      '@rushstack/ts-command-line': 4.19.1(@types/node@20.12.12)
+      '@rushstack/terminal': 0.10.0(@types/node@20.12.13)
+      '@rushstack/ts-command-line': 4.19.1(@types/node@20.12.13)
       lodash: 4.17.21
       minimatch: 3.0.8
       resolve: 1.22.8
@@ -8926,7 +8970,7 @@ snapshots:
   '@rollup/rollup-win32-x64-msvc@4.18.0':
     optional: true
 
-  '@rushstack/node-core-library@4.0.2(@types/node@20.12.12)':
+  '@rushstack/node-core-library@4.0.2(@types/node@20.12.13)':
     dependencies:
       fs-extra: 7.0.1
       import-lazy: 4.0.0
@@ -8935,23 +8979,23 @@ snapshots:
       semver: 7.5.4
       z-schema: 5.0.5
     optionalDependencies:
-      '@types/node': 20.12.12
+      '@types/node': 20.12.13
 
   '@rushstack/rig-package@0.5.2':
     dependencies:
       resolve: 1.22.8
       strip-json-comments: 3.1.1
 
-  '@rushstack/terminal@0.10.0(@types/node@20.12.12)':
+  '@rushstack/terminal@0.10.0(@types/node@20.12.13)':
     dependencies:
-      '@rushstack/node-core-library': 4.0.2(@types/node@20.12.12)
+      '@rushstack/node-core-library': 4.0.2(@types/node@20.12.13)
       supports-color: 8.1.1
     optionalDependencies:
-      '@types/node': 20.12.12
+      '@types/node': 20.12.13
 
-  '@rushstack/ts-command-line@4.19.1(@types/node@20.12.12)':
+  '@rushstack/ts-command-line@4.19.1(@types/node@20.12.13)':
     dependencies:
-      '@rushstack/terminal': 0.10.0(@types/node@20.12.12)
+      '@rushstack/terminal': 0.10.0(@types/node@20.12.13)
       '@types/argparse': 1.0.38
       argparse: 1.0.10
       string-argv: 0.3.2
@@ -9029,7 +9073,7 @@ snapshots:
 
   '@types/conventional-commits-parser@5.0.0':
     dependencies:
-      '@types/node': 20.12.12
+      '@types/node': 20.12.13
 
   '@types/eslint@8.56.10':
     dependencies:
@@ -9041,7 +9085,7 @@ snapshots:
   '@types/fs-extra@11.0.4':
     dependencies:
       '@types/jsonfile': 6.1.4
-      '@types/node': 20.12.12
+      '@types/node': 20.12.13
 
   '@types/html-minifier-terser@7.0.2': {}
 
@@ -9049,9 +9093,9 @@ snapshots:
 
   '@types/js-cookie@3.0.6': {}
 
-  '@types/jsdom@21.1.6':
+  '@types/jsdom@21.1.7':
     dependencies:
-      '@types/node': 20.12.12
+      '@types/node': 20.12.13
       '@types/tough-cookie': 4.0.5
       parse5: 7.1.2
 
@@ -9059,7 +9103,7 @@ snapshots:
 
   '@types/jsonfile@6.1.4':
     dependencies:
-      '@types/node': 20.12.12
+      '@types/node': 20.12.13
 
   '@types/linkify-it@5.0.0': {}
 
@@ -9084,6 +9128,10 @@ snapshots:
     dependencies:
       undici-types: 5.26.5
 
+  '@types/node@20.12.13':
+    dependencies:
+      undici-types: 5.26.5
+
   '@types/normalize-package-data@2.4.4': {}
 
   '@types/nprogress@0.2.3': {}
@@ -9193,19 +9241,24 @@ snapshots:
 
   '@ungap/structured-clone@1.2.0': {}
 
-  '@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))':
+  '@vitejs/plugin-vue-jsx@4.0.0(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))':
     dependencies:
       '@babel/core': 7.24.6
       '@babel/plugin-transform-typescript': 7.24.6(@babel/core@7.24.6)
       '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.6)
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
       vue: 3.4.27(typescript@5.4.5)
     transitivePeerDependencies:
       - supports-color
 
-  '@vitejs/plugin-vue@5.0.4(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))':
+  '@vitejs/plugin-vue@5.0.4(vite@5.2.11(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))':
+    dependencies:
+      vite: 5.2.11(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
+      vue: 3.4.27(typescript@5.4.5)
+
+  '@vitejs/plugin-vue@5.0.4(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))':
     dependencies:
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
       vue: 3.4.27(typescript@5.4.5)
 
   '@vitest/expect@2.0.0-beta.3':
@@ -9330,14 +9383,14 @@ snapshots:
     transitivePeerDependencies:
       - vue
 
-  '@vue/devtools-core@7.2.1(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))':
+  '@vue/devtools-core@7.2.1(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))':
     dependencies:
       '@vue/devtools-kit': 7.2.1(vue@3.4.27(typescript@5.4.5))
       '@vue/devtools-shared': 7.2.1
       mitt: 3.0.1
       nanoid: 3.3.7
       pathe: 1.1.2
-      vite-hot-client: 0.2.3(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
+      vite-hot-client: 0.2.3(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))
     transitivePeerDependencies:
       - vite
       - vue
@@ -10035,9 +10088,9 @@ snapshots:
 
   core-js@3.37.1: {}
 
-  cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.12)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5):
+  cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.13)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5):
     dependencies:
-      '@types/node': 20.12.12
+      '@types/node': 20.12.13
       cosmiconfig: 9.0.0(typescript@5.4.5)
       jiti: 1.21.0
       typescript: 5.4.5
@@ -10681,9 +10734,9 @@ snapshots:
       - eslint-import-resolver-webpack
       - supports-color
 
-  eslint-plugin-jsdoc@48.2.6(eslint@8.57.0):
+  eslint-plugin-jsdoc@48.2.7(eslint@8.57.0):
     dependencies:
-      '@es-joy/jsdoccomment': 0.43.0
+      '@es-joy/jsdoccomment': 0.43.1
       are-docs-informative: 0.0.2
       comment-parser: 1.4.1
       debug: 4.3.4
@@ -10782,13 +10835,13 @@ snapshots:
     optionalDependencies:
       '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
 
-  eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@2.0.0-beta.3(@types/node@20.12.12)(jsdom@24.1.0)(sass@1.77.2)(terser@5.31.0)):
+  eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@2.0.0-beta.3(@types/node@20.12.13)(jsdom@24.1.0)(sass@1.77.4)(terser@5.31.0)):
     dependencies:
       '@typescript-eslint/utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5)
       eslint: 8.57.0
     optionalDependencies:
       '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
-      vitest: 2.0.0-beta.3(@types/node@20.12.12)(jsdom@24.1.0)(sass@1.77.2)(terser@5.31.0)
+      vitest: 2.0.0-beta.3(@types/node@20.12.13)(jsdom@24.1.0)(sass@1.77.4)(terser@5.31.0)
     transitivePeerDependencies:
       - supports-color
       - typescript
@@ -12074,7 +12127,7 @@ snapshots:
 
   mkdirp@1.0.4: {}
 
-  mkdist@1.5.1(sass@1.77.2)(typescript@5.4.5)(vue-tsc@2.0.19(typescript@5.4.5)):
+  mkdist@1.5.1(sass@1.77.4)(typescript@5.4.5)(vue-tsc@2.0.19(typescript@5.4.5)):
     dependencies:
       autoprefixer: 10.4.19(postcss@8.4.38)
       citty: 0.1.6
@@ -12092,7 +12145,7 @@ snapshots:
       postcss-nested: 6.0.1(postcss@8.4.38)
       semver: 7.6.2
     optionalDependencies:
-      sass: 1.77.2
+      sass: 1.77.4
       typescript: 5.4.5
       vue-tsc: 2.0.19(typescript@5.4.5)
 
@@ -12892,7 +12945,7 @@ snapshots:
     dependencies:
       fast-diff: 1.3.0
 
-  prettier-plugin-tailwindcss@0.5.14(prettier@3.2.5):
+  prettier-plugin-tailwindcss@0.6.0(prettier@3.2.5):
     dependencies:
       prettier: 3.2.5
 
@@ -13204,7 +13257,7 @@ snapshots:
 
   safer-buffer@2.1.2: {}
 
-  sass@1.77.2:
+  sass@1.77.4:
     dependencies:
       chokidar: 3.6.0
       immutable: 4.3.6
@@ -13889,7 +13942,7 @@ snapshots:
       has-symbols: 1.0.3
       which-boxed-primitive: 1.0.2
 
-  unbuild@2.0.0(sass@1.77.2)(typescript@5.4.5)(vue-tsc@2.0.19(typescript@5.4.5)):
+  unbuild@2.0.0(sass@1.77.4)(typescript@5.4.5)(vue-tsc@2.0.19(typescript@5.4.5)):
     dependencies:
       '@rollup/plugin-alias': 5.1.0(rollup@3.29.4)
       '@rollup/plugin-commonjs': 25.0.8(rollup@3.29.4)
@@ -13906,7 +13959,7 @@ snapshots:
       hookable: 5.5.3
       jiti: 1.21.0
       magic-string: 0.30.10
-      mkdist: 1.5.1(sass@1.77.2)(typescript@5.4.5)(vue-tsc@2.0.19(typescript@5.4.5))
+      mkdist: 1.5.1(sass@1.77.4)(typescript@5.4.5)(vue-tsc@2.0.19(typescript@5.4.5))
       mlly: 1.7.0
       pathe: 1.1.2
       pkg-types: 1.1.1
@@ -13962,7 +14015,7 @@ snapshots:
 
   unpipe@1.0.0: {}
 
-  unplugin-turbo-console@1.8.6(esbuild@0.20.2)(rollup@4.18.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5)):
+  unplugin-turbo-console@1.8.6(esbuild@0.20.2)(rollup@4.18.0)(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5)):
     dependencies:
       '@rollup/pluginutils': 5.1.0(rollup@4.18.0)
       ast-kit: 0.12.1
@@ -13975,7 +14028,7 @@ snapshots:
     optionalDependencies:
       esbuild: 0.20.2
       rollup: 4.18.0
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
       vue: 3.4.27(typescript@5.4.5)
     transitivePeerDependencies:
       - uWebSockets.js
@@ -14040,17 +14093,17 @@ snapshots:
 
   validator@13.12.0: {}
 
-  vite-hot-client@0.2.3(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)):
+  vite-hot-client@0.2.3(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)):
     dependencies:
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
 
-  vite-node@2.0.0-beta.3(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0):
+  vite-node@2.0.0-beta.3(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0):
     dependencies:
       cac: 6.7.14
       debug: 4.3.4
       pathe: 1.1.2
       picocolors: 1.0.1
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 5.2.11(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
     transitivePeerDependencies:
       - '@types/node'
       - less
@@ -14061,18 +14114,18 @@ snapshots:
       - supports-color
       - terser
 
-  vite-plugin-compression@0.5.1(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)):
+  vite-plugin-compression@0.5.1(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)):
     dependencies:
       chalk: 4.1.2
       debug: 4.3.4
       fs-extra: 10.1.0
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
     transitivePeerDependencies:
       - supports-color
 
-  vite-plugin-dts@3.9.1(@types/node@20.12.12)(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)):
+  vite-plugin-dts@3.9.1(@types/node@20.12.13)(rollup@4.18.0)(typescript@5.4.5)(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)):
     dependencies:
-      '@microsoft/api-extractor': 7.43.0(@types/node@20.12.12)
+      '@microsoft/api-extractor': 7.43.0(@types/node@20.12.13)
       '@rollup/pluginutils': 5.1.0(rollup@4.18.0)
       '@vue/language-core': 1.8.27(typescript@5.4.5)
       debug: 4.3.4
@@ -14081,13 +14134,13 @@ snapshots:
       typescript: 5.4.5
       vue-tsc: 1.8.27(typescript@5.4.5)
     optionalDependencies:
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
     transitivePeerDependencies:
       - '@types/node'
       - rollup
       - supports-color
 
-  vite-plugin-html@3.2.2(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)):
+  vite-plugin-html@3.2.2(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)):
     dependencies:
       '@rollup/pluginutils': 4.2.1
       colorette: 2.0.20
@@ -14101,9 +14154,9 @@ snapshots:
       html-minifier-terser: 6.1.0
       node-html-parser: 5.4.2
       pathe: 0.2.0
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
 
-  vite-plugin-inspect@0.8.4(rollup@4.18.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)):
+  vite-plugin-inspect@0.8.4(rollup@4.18.0)(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)):
     dependencies:
       '@antfu/utils': 0.7.8
       '@rollup/pluginutils': 5.1.0(rollup@4.18.0)
@@ -14114,19 +14167,19 @@ snapshots:
       perfect-debounce: 1.0.0
       picocolors: 1.0.1
       sirv: 2.0.4
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  vite-plugin-lib-inject-css@2.1.1(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)):
+  vite-plugin-lib-inject-css@2.1.1(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)):
     dependencies:
       '@ast-grep/napi': 0.22.4
       magic-string: 0.30.10
       picocolors: 1.0.1
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
 
-  vite-plugin-mock@3.0.2(esbuild@0.20.2)(mockjs@1.1.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)):
+  vite-plugin-mock@3.0.2(esbuild@0.20.2)(mockjs@1.1.0)(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)):
     dependencies:
       bundle-require: 4.1.0(esbuild@0.20.2)
       chokidar: 3.6.0
@@ -14137,27 +14190,27 @@ snapshots:
       mockjs: 1.1.0
       path-to-regexp: 6.2.2
       picocolors: 1.0.1
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
     transitivePeerDependencies:
       - supports-color
 
-  vite-plugin-vue-devtools@7.2.1(rollup@4.18.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5)):
+  vite-plugin-vue-devtools@7.2.1(rollup@4.18.0)(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5)):
     dependencies:
-      '@vue/devtools-core': 7.2.1(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
+      '@vue/devtools-core': 7.2.1(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
       '@vue/devtools-kit': 7.2.1(vue@3.4.27(typescript@5.4.5))
       '@vue/devtools-shared': 7.2.1
       execa: 8.0.1
       sirv: 2.0.4
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
-      vite-plugin-inspect: 0.8.4(rollup@4.18.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
-      vite-plugin-vue-inspector: 5.1.2(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
+      vite: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
+      vite-plugin-inspect: 0.8.4(rollup@4.18.0)(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))
+      vite-plugin-vue-inspector: 5.1.2(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))
     transitivePeerDependencies:
       - '@nuxt/kit'
       - rollup
       - supports-color
       - vue
 
-  vite-plugin-vue-inspector@5.1.2(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)):
+  vite-plugin-vue-inspector@5.1.2(vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)):
     dependencies:
       '@babel/core': 7.24.6
       '@babel/plugin-proposal-decorators': 7.24.6(@babel/core@7.24.6)
@@ -14168,29 +14221,40 @@ snapshots:
       '@vue/compiler-dom': 3.4.27
       kolorist: 1.8.0
       magic-string: 0.30.10
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
     transitivePeerDependencies:
       - supports-color
 
-  vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0):
+  vite@5.2.11(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0):
     dependencies:
       esbuild: 0.20.2
       postcss: 8.4.38
       rollup: 4.18.0
     optionalDependencies:
-      '@types/node': 20.12.12
+      '@types/node': 20.12.13
+      fsevents: 2.3.3
+      sass: 1.77.4
+      terser: 5.31.0
+
+  vite@6.0.0-alpha.17(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0):
+    dependencies:
+      esbuild: 0.20.2
+      postcss: 8.4.38
+      rollup: 4.18.0
+    optionalDependencies:
+      '@types/node': 20.12.13
       fsevents: 2.3.3
-      sass: 1.77.2
+      sass: 1.77.4
       terser: 5.31.0
 
-  vitepress@1.2.2(@algolia/client-search@4.23.3)(@types/node@20.12.12)(async-validator@4.2.5)(axios@1.7.2)(nprogress@0.2.0)(postcss@8.4.38)(qrcode@1.5.3)(sass@1.77.2)(search-insights@2.14.0)(terser@5.31.0)(typescript@5.4.5):
+  vitepress@1.2.2(@algolia/client-search@4.23.3)(@types/node@20.12.13)(async-validator@4.2.5)(axios@1.7.2)(nprogress@0.2.0)(postcss@8.4.38)(qrcode@1.5.3)(sass@1.77.4)(search-insights@2.14.0)(terser@5.31.0)(typescript@5.4.5):
     dependencies:
       '@docsearch/css': 3.6.0
       '@docsearch/js': 3.6.0(@algolia/client-search@4.23.3)(search-insights@2.14.0)
       '@shikijs/core': 1.6.1
       '@shikijs/transformers': 1.6.1
       '@types/markdown-it': 14.1.1
-      '@vitejs/plugin-vue': 5.0.4(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
+      '@vitejs/plugin-vue': 5.0.4(vite@5.2.11(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
       '@vue/devtools-api': 7.2.1(vue@3.4.27(typescript@5.4.5))
       '@vue/shared': 3.4.27
       '@vueuse/core': 10.10.0(vue@3.4.27(typescript@5.4.5))
@@ -14199,7 +14263,7 @@ snapshots:
       mark.js: 8.11.1
       minisearch: 6.3.0
       shiki: 1.6.1
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 5.2.11(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
       vue: 3.4.27(typescript@5.4.5)
     optionalDependencies:
       postcss: 8.4.38
@@ -14230,7 +14294,7 @@ snapshots:
       - typescript
       - universal-cookie
 
-  vitest@2.0.0-beta.3(@types/node@20.12.12)(jsdom@24.1.0)(sass@1.77.2)(terser@5.31.0):
+  vitest@2.0.0-beta.3(@types/node@20.12.13)(jsdom@24.1.0)(sass@1.77.4)(terser@5.31.0):
     dependencies:
       '@vitest/expect': 2.0.0-beta.3
       '@vitest/runner': 2.0.0-beta.3
@@ -14246,11 +14310,11 @@ snapshots:
       std-env: 3.7.0
       tinybench: 2.8.0
       tinypool: 0.9.0
-      vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
-      vite-node: 2.0.0-beta.3(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+      vite: 5.2.11(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
+      vite-node: 2.0.0-beta.3(@types/node@20.12.13)(sass@1.77.4)(terser@5.31.0)
       why-is-node-running: 2.2.2
     optionalDependencies:
-      '@types/node': 20.12.12
+      '@types/node': 20.12.13
       jsdom: 24.1.0
     transitivePeerDependencies:
       - less

+ 28 - 0
scripts/update-dependencies

@@ -0,0 +1,28 @@
+// #!/bin/bash
+
+// #/ Usage: script/update-dependencies
+// #/ Create a branch to update a dependency.
+
+// # Delete update-dependencies branch if it exists
+// if git branch | grep -q "update-dependencies"; then
+//   echo "Deleting update-dependencies branch 🗑"
+//   git branch -D update-dependencies
+//   echo "Branch deleted 🎉"
+// fi
+
+// # Create update-dependencies branch
+// echo "Creating update-dependencies branch 🌱"
+// git checkout -b update-dependencies
+// echo "Branch created 🎉"
+
+// # Update dependencies in package.json
+// echo "Updating dependencies in package.json 📦"
+// pnpm update --interactive --recursive --latest
+// # Clean up pnpm-lock.yaml file and install dependencies
+// script/clean && pnpm install
+// # Git operations
+// git add -A
+// git commit -am "chore: update dependencies 📦"
+// git push origin update-dependencies
+// gh pr create --fill
+// echo "Dependencies updated 🎉"

+ 0 - 2
scripts/vsh/src/lint/index.ts

@@ -15,7 +15,6 @@ async function runLint({ format }: LintCommandOptions) {
     await $`stylelint "**/*.{vue,css,less.scss}" --cache --fix`;
     await $`eslint . --cache --fix`;
     await $`prettier . --write --cache`;
-    // await $`vsh publint --check`;
     return;
   }
 
@@ -24,7 +23,6 @@ async function runLint({ format }: LintCommandOptions) {
     // $`ls-lint`,
     $`prettier . --ignore-unknown --check --cache`,
     $`stylelint "**/*.{vue,css,less.scss}" --cache`,
-    // $`vsh publint --check`,
   ]);
 }
 

+ 5 - 1
turbo.json

@@ -25,6 +25,10 @@
       "cache": false,
       "persistent": true
     },
-    "typecheck": {}
+    "typecheck": {
+      "outputs": [],
+      "outputMode": "errors-only"
+      // "outputMode": "new-only"
+    }
   }
 }