Browse Source

fix: fix known issues. fixed #59,fixed #61, fixed #67, fixed #68 [deploy]

vince 9 months ago
parent
commit
66fd052709

+ 1 - 1
.github/workflows/deploy.yml

@@ -8,7 +8,7 @@ on:
 jobs:
   deploy-push-ftp:
     name: Deploy Push Ftp
-    if: github.actor != 'dependabot[bot]' && !contains(github.event.head_commit.message, '[skip ci]')
+    if: github.actor != 'dependabot[bot]' && !contains(github.event.head_commit.message, '[skip ci]') && contains(github.event.head_commit.message, '[deploy]')
     runs-on: ubuntu-latest
     strategy:
       matrix:

+ 1 - 1
apps/web-antd/.env

@@ -1,5 +1,5 @@
 # 应用标题
-VITE_GLOB_APP_TITLE=Vben Admin
+VITE_APP_TITLE=Vben Admin
 
 # 应用命名空间,用于缓存、store等功能的前缀,确保隔离
 VITE_APP_NAMESPACE=vben-web-antd

+ 2 - 2
apps/web-antd/index.html

@@ -11,8 +11,8 @@
       name="viewport"
       content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0"
     />
-    <!-- 由 vite 注入 VITE_GLOB_APP_TITLE 变量,在 .env 文件内配置 -->
-    <title><%= VITE_GLOB_APP_TITLE %></title>
+    <!-- 由 vite 注入 VITE_APP_TITLE 变量,在 .env 文件内配置 -->
+    <title><%= VITE_APP_TITLE %></title>
     <link rel="icon" href="/favicon.ico" />
     <script>
       // 生产环境下注入百度统计

+ 0 - 6
apps/web-antd/src/preferences.ts

@@ -1,15 +1,9 @@
-import { useAppConfig } from '@vben/hooks';
 import { defineOverridesPreferences } from '@vben/preferences';
 
-const { appTitle } = useAppConfig(import.meta.env, import.meta.env.PROD);
-
 /**
  * @description 项目配置文件
  * 只需要覆盖项目中的一部分配置,不需要的配置不用覆盖,会自动使用默认配置
  */
 export const overridesPreferences = defineOverridesPreferences({
   // overrides
-  app: {
-    name: appTitle,
-  },
 });

+ 2 - 16
apps/web-antd/vite.config.mts

@@ -1,24 +1,10 @@
-import {
-  defaultImportmapOptions,
-  defineConfig,
-  getDefaultPwaOptions,
-  loadAndConvertEnv,
-} from '@vben/vite-config';
+import { defineConfig } from '@vben/vite-config';
 
 export default defineConfig(async () => {
-  const { appTitle, base, port, ...envConfig } = await loadAndConvertEnv();
   return {
-    application: {
-      ...envConfig,
-      importmap: false,
-      importmapOptions: defaultImportmapOptions,
-      pwa: false,
-      pwaOptions: getDefaultPwaOptions(appTitle),
-    },
+    application: {},
     vite: {
-      base,
       server: {
-        port,
         proxy: {
           '/api': {
             changeOrigin: true,

+ 7 - 0
internal/vite-config/src/config/application.ts

@@ -8,11 +8,14 @@ import { findMonorepoRoot } from '@vben/node-utils';
 
 import { defineConfig, loadEnv, mergeConfig } from 'vite';
 
+import { getDefaultPwaOptions } from '../options';
 import { loadApplicationPlugins } from '../plugins';
+import { loadAndConvertEnv } from '../utils/env';
 import { getCommonConfig } from './common';
 
 function defineApplicationConfig(userConfigPromise: DefineApplicationOptions) {
   return defineConfig(async (config) => {
+    const { appTitle, base, port, ...envConfig } = await loadAndConvertEnv();
     const options = await userConfigPromise?.(config);
     const { command, mode } = config;
     const { application = {}, vite = {} } = options || {};
@@ -40,12 +43,15 @@ function defineApplicationConfig(userConfigPromise: DefineApplicationOptions) {
         'Vben Admin Docs': 'https://docs.vben.pro',
       },
       pwa: true,
+      pwaOptions: getDefaultPwaOptions(appTitle),
+      ...envConfig,
       ...application,
     });
 
     const { injectGlobalScss = true } = application;
 
     const applicationConfig: UserConfig = {
+      base,
       build: {
         rollupOptions: {
           output: {
@@ -69,6 +75,7 @@ function defineApplicationConfig(userConfigPromise: DefineApplicationOptions) {
       plugins,
       server: {
         host: true,
+        port,
         warmup: {
           // 预热文件
           clientFiles: ['./index.html', './src/{views,layouts}/*'],

+ 1 - 1
internal/vite-config/src/options.ts

@@ -28,7 +28,7 @@ const getDefaultPwaOptions = (name: string): Partial<PwaPluginOptions> => ({
 const defaultImportmapOptions: ImportmapPluginOptions = {
   // 通过 Importmap CDN 方式引入,
   // 目前只有esm.sh源兼容性好一点,jspm.io对于 esm 入口要求高
-  defaultProvider: 'esm.sh',
+  defaultProvider: 'jspm.io',
   importmap: [
     { name: 'vue' },
     { name: 'pinia' },

+ 1 - 1
internal/vite-config/src/plugins/inject-app-loading/default-loading-antd.html

@@ -110,5 +110,5 @@
 </style>
 <div class="loading" id="__app-loading__">
   <span class="dot dot-spin"><i></i><i></i><i></i><i></i></span>
-  <div class="title"><%= VITE_GLOB_APP_TITLE %></div>
+  <div class="title"><%= VITE_APP_TITLE %></div>
 </div>

+ 1 - 1
internal/vite-config/src/plugins/inject-app-loading/default-loading.html

@@ -109,5 +109,5 @@
 </style>
 <div class="loading" id="__app-loading__">
   <div class="loader"></div>
-  <div class="title"><%= VITE_GLOB_APP_TITLE %></div>
+  <div class="title"><%= VITE_APP_TITLE %></div>
 </div>

+ 2 - 2
internal/vite-config/src/utils/env.ts

@@ -64,10 +64,10 @@ async function loadAndConvertEnv(
 > {
   const envConfig = await loadEnv(match, confFiles);
   const {
+    VITE_APP_TITLE,
     VITE_BASE,
     VITE_COMPRESS,
     VITE_DEVTOOLS,
-    VITE_GLOB_APP_TITLE,
     VITE_INJECT_APP_LOADING,
     VITE_NITRO_MOCK,
     VITE_PORT,
@@ -80,7 +80,7 @@ async function loadAndConvertEnv(
     .filter((item) => item === 'brotli' || item === 'gzip');
 
   return {
-    appTitle: VITE_GLOB_APP_TITLE ?? 'Vben Admin',
+    appTitle: VITE_APP_TITLE ?? 'Vben Admin',
     base: VITE_BASE || '/',
     compress: !!compress,
     compressTypes: compressTypes as ('brotli' | 'gzip')[],

+ 4 - 10
package.json

@@ -31,14 +31,13 @@
     "build:analyze": "turbo build:analyze",
     "build:docker": "./build-local-docker-image.sh",
     "changeset": "pnpm exec changeset",
-    "check": "pnpm run check:dep && pnpm run check:circular && pnpm run check:type && pnpm run check:cspell",
+    "check": "pnpm run check:circular && pnpm run check:dep && pnpm run check:type",
     "check:circular": "vsh check-circular",
-    "check:cspell": "cspell lint \"**/*.ts\"  \"**/README.md\" \".changeset/*.md\" --no-progress",
     "check:dep": "vsh check-dep",
     "check:type": "turbo run typecheck",
     "clean": "vsh clean",
     "commit": "czg",
-    "dev": "cross-env TURBO_UI=1 turbo run dev",
+    "dev": "cross-env turbo run dev",
     "dev:docs": "pnpm -F @vben/website run docs:dev",
     "format": "vsh lint --format",
     "lint": "vsh lint",
@@ -56,7 +55,7 @@
     "@changesets/cli": "^2.27.7",
     "@ls-lint/ls-lint": "^2.2.3",
     "@types/jsdom": "^21.1.7",
-    "@types/node": "^20.14.12",
+    "@types/node": "^22.0.0",
     "@vben/commitlint-config": "workspace:*",
     "@vben/eslint-config": "workspace:*",
     "@vben/lint-staged-config": "workspace:*",
@@ -95,11 +94,6 @@
       "canvas",
       "node-gyp",
       "playwright"
-    ],
-    "updateConfig": {
-      "ignoreDependencies": [
-        "zx"
-      ]
-    }
+    ]
   }
 }

+ 1 - 1
packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb-background.vue

@@ -31,7 +31,7 @@ function handleClick(path?: string) {
       >
         <li>
           <a href="javascript:void 0" @click.stop="handleClick(item.path)">
-            <span class="flex-center h-full">
+            <span class="flex-center z-10 h-full">
               <VbenIcon
                 v-if="item.icon && showIcon"
                 :icon="item.icon"

+ 6 - 1
packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/scrollbar.vue

@@ -11,6 +11,7 @@ import { cn } from '@vben-core/toolkit';
 interface Props {
   class?: HTMLAttributes['class'];
   horizontal?: boolean;
+  scrollBarClass?: HTMLAttributes['class'];
   shadow?: boolean;
   shadowBorder?: boolean;
 }
@@ -58,7 +59,11 @@ function handleScroll(event: Event) {
       }"
       class="scrollbar-bottom-shadow pointer-events-none absolute bottom-0 z-10 h-12 w-full opacity-0 transition-opacity duration-300 ease-in-out will-change-[opacity]"
     ></div>
-    <ScrollBar v-if="horizontal" orientation="horizontal" />
+    <ScrollBar
+      v-if="horizontal"
+      :class="scrollBarClass"
+      orientation="horizontal"
+    />
   </ScrollArea>
 </template>
 

+ 5 - 1
packages/@core/ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue

@@ -71,7 +71,11 @@ function scrollIntoView() {
 
 <template>
   <div :style="style" class="tabs-chrome size-full flex-1 overflow-hidden pt-1">
-    <VbenScrollbar class="tabs-chrome__scrollbar h-full" horizontal>
+    <VbenScrollbar
+      class="tabs-chrome__scrollbar h-full"
+      horizontal
+      scroll-bar-class="z-10"
+    >
       <!-- footer -> 4px -->
       <div
         ref="contentRef"

+ 5 - 1
packages/@core/ui-kit/tabs-ui/src/components/tabs/tabs.vue

@@ -72,7 +72,11 @@ function scrollIntoView() {
 
 <template>
   <div class="h-full flex-1 overflow-hidden">
-    <VbenScrollbar class="tabs-scrollbar h-full" horizontal>
+    <VbenScrollbar
+      class="tabs-scrollbar h-full"
+      horizontal
+      scroll-bar-class="z-10"
+    >
       <div
         :class="contentClass"
         class="relative !flex h-full w-max items-center"

+ 10 - 2
packages/@core/ui-kit/tabs-ui/src/tabs-view.vue

@@ -45,6 +45,11 @@ async function initTabsSortable() {
 
   const el = document.querySelectorAll(`.${contentClass}`)?.[0] as HTMLElement;
 
+  const resetElState = () => {
+    el.style.cursor = 'default';
+    el.classList.remove('dragging');
+  };
+
   const { initializeSortable } = useSortable(el, {
     filter: (_evt, target: HTMLElement) => {
       const parent = findParentElement(target);
@@ -57,16 +62,20 @@ async function initTabsSortable() {
       const { srcElement } = (evt as any).originalEvent;
 
       if (!srcElement) {
+        resetElState();
         return;
       }
 
       const srcParent = findParentElement(srcElement);
 
       if (!srcParent) {
+        resetElState();
         return;
       }
 
       if (!srcParent.classList.contains('dragable')) {
+        resetElState();
+
         return;
       }
 
@@ -79,8 +88,7 @@ async function initTabsSortable() {
       ) {
         emit('sortTabs', oldIndex, newIndex);
       }
-      el.classList.remove('dragging');
-      el.style.cursor = 'default';
+      resetElState();
     },
     onMove(evt) {
       const parent = findParentElement(evt.related);

+ 1 - 2
packages/effects/hooks/src/use-app-config.ts

@@ -15,10 +15,9 @@ export function useAppConfig(
     ? window._VBEN_ADMIN_PRO_APP_CONF_
     : (env as VbenAdminProAppConfigRaw);
 
-  const { VITE_GLOB_API_URL, VITE_GLOB_APP_TITLE } = config;
+  const { VITE_GLOB_API_URL } = config;
 
   return {
     apiURL: VITE_GLOB_API_URL,
-    appTitle: VITE_GLOB_APP_TITLE,
   };
 }

+ 8 - 3
packages/stores/src/modules/tabbar.ts

@@ -121,7 +121,10 @@ export const useCoreTabbarStore = defineStore('core-tabbar', {
       } else {
         // 页面已经存在,不重复添加选项卡,只更新选项卡参数
         const currentTab = toRaw(this.tabs)[tabIndex];
-        this.tabs.splice(tabIndex, 1, { ...currentTab, ...tab });
+        if (!currentTab.meta.affixTab) {
+          const mergedTab = { ...currentTab, ...tab };
+          this.tabs.splice(tabIndex, 1, mergedTab);
+        }
       }
       this.updateCacheTab();
     },
@@ -269,7 +272,8 @@ export const useCoreTabbarStore = defineStore('core-tabbar', {
       );
       if (index !== -1) {
         tab.meta.affixTab = true;
-        this.addTab(tab);
+        // this.addTab(tab);
+        this.tabs.splice(index, 1, tab);
       }
     },
 
@@ -369,7 +373,8 @@ export const useCoreTabbarStore = defineStore('core-tabbar', {
 
       if (index !== -1) {
         tab.meta.affixTab = false;
-        this.addTab(tab);
+        // this.addTab(tab);
+        this.tabs.splice(index, 1, tab);
       }
     },
 

+ 0 - 2
packages/types/global.d.ts

@@ -8,12 +8,10 @@ declare module 'vue-router' {
 
 export interface VbenAdminProAppConfigRaw {
   VITE_GLOB_API_URL: string;
-  VITE_GLOB_APP_TITLE: string;
 }
 
 export interface ApplicationConfig {
   apiURL: string;
-  appTitle: string;
 }
 
 declare global {

+ 96 - 83
pnpm-lock.yaml

@@ -26,8 +26,8 @@ importers:
         specifier: ^21.1.7
         version: 21.1.7
       '@types/node':
-        specifier: ^20.14.12
-        version: 20.14.12
+        specifier: ^22.0.0
+        version: 22.0.0
       '@vben/commitlint-config':
         specifier: workspace:*
         version: link:internal/lint-configs/commitlint-config
@@ -87,10 +87,10 @@ importers:
         version: 2.0.0(sass@1.77.8)(typescript@5.5.4)(vue-tsc@2.0.29(typescript@5.5.4))
       vite:
         specifier: ^5.3.5
-        version: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+        version: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
       vitest:
         specifier: ^2.0.4
-        version: 2.0.4(@types/node@20.14.12)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.3)
+        version: 2.0.4(@types/node@22.0.0)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.3)
       vue-tsc:
         specifier: ^2.0.29
         version: 2.0.29(typescript@5.5.4)
@@ -168,7 +168,7 @@ importers:
     dependencies:
       '@commitlint/cli':
         specifier: ^19.3.0
-        version: 19.3.0(@types/node@20.14.12)(typescript@5.5.4)
+        version: 19.3.0(@types/node@22.0.0)(typescript@5.5.4)
       '@commitlint/config-conventional':
         specifier: ^19.2.2
         version: 19.2.2
@@ -247,7 +247,7 @@ importers:
         version: 4.0.1(@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)
       eslint-plugin-vitest:
         specifier: ^0.5.4
-        version: 0.5.4(@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)(vitest@2.0.4(@types/node@20.14.12)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.3))
+        version: 0.5.4(@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)(vitest@2.0.4(@types/node@22.0.0)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.3))
       eslint-plugin-vue:
         specifier: ^9.27.0
         version: 9.27.0(eslint@9.8.0)
@@ -408,7 +408,7 @@ importers:
         version: link:../../packages/types
       vite:
         specifier: ^5.3.5
-        version: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+        version: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
 
   internal/vite-config:
     dependencies:
@@ -432,13 +432,13 @@ importers:
         version: 2.0.2
       vite-plugin-lib-inject-css:
         specifier: ^2.1.1
-        version: 2.1.1(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))
+        version: 2.1.1(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))
       vite-plugin-pwa:
         specifier: ^0.20.1
-        version: 0.20.1(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(workbox-build@7.1.1)(workbox-window@7.1.0)
+        version: 0.20.1(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))(workbox-build@7.1.1)(workbox-window@7.1.0)
       vite-plugin-vue-devtools:
         specifier: ^7.3.7
-        version: 7.3.7(rollup@4.19.1)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))
+        version: 7.3.7(rollup@4.19.1)(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))
     devDependencies:
       '@types/html-minifier-terser':
         specifier: ^7.0.2
@@ -448,10 +448,10 @@ importers:
         version: link:../node-utils
       '@vitejs/plugin-vue':
         specifier: ^5.1.1
-        version: 5.1.1(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))
+        version: 5.1.1(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))
       '@vitejs/plugin-vue-jsx':
         specifier: ^4.0.0
-        version: 4.0.0(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))
+        version: 4.0.0(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))
       dayjs:
         specifier: ^1.11.12
         version: 1.11.12
@@ -469,16 +469,16 @@ importers:
         version: 1.77.8
       vite:
         specifier: ^5.3.5
-        version: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+        version: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
       vite-plugin-compression:
         specifier: ^0.5.1
-        version: 0.5.1(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))
+        version: 0.5.1(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))
       vite-plugin-dts:
         specifier: 4.0.0-beta.1
-        version: 4.0.0-beta.1(@types/node@20.14.12)(rollup@4.19.1)(typescript@5.5.4)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))
+        version: 4.0.0-beta.1(@types/node@22.0.0)(rollup@4.19.1)(typescript@5.5.4)(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))
       vite-plugin-html:
         specifier: ^3.2.2
-        version: 3.2.2(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))
+        version: 3.2.2(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))
 
   packages/@core/hooks:
     dependencies:
@@ -946,7 +946,7 @@ importers:
     devDependencies:
       vitepress:
         specifier: ^1.3.1
-        version: 1.3.1(@algolia/client-search@4.24.0)(@types/node@20.14.12)(async-validator@4.2.5)(axios@1.7.2)(nprogress@0.2.0)(postcss@8.4.40)(qrcode@1.5.3)(sass@1.77.8)(search-insights@2.15.0)(sortablejs@1.15.2)(terser@5.31.3)(typescript@5.5.4)
+        version: 1.3.1(@algolia/client-search@4.24.0)(@types/node@22.0.0)(async-validator@4.2.5)(axios@1.7.2)(nprogress@0.2.0)(postcss@8.4.40)(qrcode@1.5.3)(sass@1.77.8)(search-insights@2.15.0)(sortablejs@1.15.2)(terser@5.31.3)(typescript@5.5.4)
       vue:
         specifier: ^3.4.34
         version: 3.4.34(typescript@5.5.4)
@@ -3672,6 +3672,9 @@ packages:
   '@types/node@20.14.12':
     resolution: {integrity: sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==}
 
+  '@types/node@22.0.0':
+    resolution: {integrity: sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==}
+
   '@types/normalize-package-data@2.4.4':
     resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
 
@@ -8636,6 +8639,9 @@ packages:
   undici-types@5.26.5:
     resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
 
+  undici-types@6.11.1:
+    resolution: {integrity: sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==}
+
   undici@5.28.4:
     resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==}
     engines: {node: '>=14.0'}
@@ -10475,11 +10481,11 @@ snapshots:
     dependencies:
       mime: 3.0.0
 
-  '@commitlint/cli@19.3.0(@types/node@20.14.12)(typescript@5.5.4)':
+  '@commitlint/cli@19.3.0(@types/node@22.0.0)(typescript@5.5.4)':
     dependencies:
       '@commitlint/format': 19.3.0
       '@commitlint/lint': 19.2.2
-      '@commitlint/load': 19.2.0(@types/node@20.14.12)(typescript@5.5.4)
+      '@commitlint/load': 19.2.0(@types/node@22.0.0)(typescript@5.5.4)
       '@commitlint/read': 19.2.1
       '@commitlint/types': 19.0.3
       execa: 8.0.1
@@ -10526,7 +10532,7 @@ snapshots:
       '@commitlint/rules': 19.0.3
       '@commitlint/types': 19.0.3
 
-  '@commitlint/load@19.2.0(@types/node@20.14.12)(typescript@5.5.4)':
+  '@commitlint/load@19.2.0(@types/node@22.0.0)(typescript@5.5.4)':
     dependencies:
       '@commitlint/config-validator': 19.0.3
       '@commitlint/execute-rule': 19.0.0
@@ -10534,7 +10540,7 @@ snapshots:
       '@commitlint/types': 19.0.3
       chalk: 5.3.0
       cosmiconfig: 9.0.0(typescript@5.5.4)
-      cosmiconfig-typescript-loader: 5.0.0(@types/node@20.14.12)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4)
+      cosmiconfig-typescript-loader: 5.0.0(@types/node@22.0.0)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4)
       lodash.isplainobject: 4.0.6
       lodash.merge: 4.6.2
       lodash.uniq: 4.5.0
@@ -11565,23 +11571,23 @@ snapshots:
       - encoding
       - supports-color
 
-  '@microsoft/api-extractor-model@7.29.3(@types/node@20.14.12)':
+  '@microsoft/api-extractor-model@7.29.3(@types/node@22.0.0)':
     dependencies:
       '@microsoft/tsdoc': 0.15.0
       '@microsoft/tsdoc-config': 0.17.0
-      '@rushstack/node-core-library': 5.5.0(@types/node@20.14.12)
+      '@rushstack/node-core-library': 5.5.0(@types/node@22.0.0)
     transitivePeerDependencies:
       - '@types/node'
 
-  '@microsoft/api-extractor@7.47.2(@types/node@20.14.12)':
+  '@microsoft/api-extractor@7.47.2(@types/node@22.0.0)':
     dependencies:
-      '@microsoft/api-extractor-model': 7.29.3(@types/node@20.14.12)
+      '@microsoft/api-extractor-model': 7.29.3(@types/node@22.0.0)
       '@microsoft/tsdoc': 0.15.0
       '@microsoft/tsdoc-config': 0.17.0
-      '@rushstack/node-core-library': 5.5.0(@types/node@20.14.12)
+      '@rushstack/node-core-library': 5.5.0(@types/node@22.0.0)
       '@rushstack/rig-package': 0.5.2
-      '@rushstack/terminal': 0.13.2(@types/node@20.14.12)
-      '@rushstack/ts-command-line': 4.22.2(@types/node@20.14.12)
+      '@rushstack/terminal': 0.13.2(@types/node@22.0.0)
+      '@rushstack/ts-command-line': 4.22.2(@types/node@22.0.0)
       lodash: 4.17.21
       minimatch: 3.0.8
       resolve: 1.22.8
@@ -11991,7 +11997,7 @@ snapshots:
   '@rollup/rollup-win32-x64-msvc@4.19.1':
     optional: true
 
-  '@rushstack/node-core-library@5.5.0(@types/node@20.14.12)':
+  '@rushstack/node-core-library@5.5.0(@types/node@22.0.0)':
     dependencies:
       ajv: 8.13.0
       ajv-draft-04: 1.0.0(ajv@8.13.0)
@@ -12002,23 +12008,23 @@ snapshots:
       resolve: 1.22.8
       semver: 7.5.4
     optionalDependencies:
-      '@types/node': 20.14.12
+      '@types/node': 22.0.0
 
   '@rushstack/rig-package@0.5.2':
     dependencies:
       resolve: 1.22.8
       strip-json-comments: 3.1.1
 
-  '@rushstack/terminal@0.13.2(@types/node@20.14.12)':
+  '@rushstack/terminal@0.13.2(@types/node@22.0.0)':
     dependencies:
-      '@rushstack/node-core-library': 5.5.0(@types/node@20.14.12)
+      '@rushstack/node-core-library': 5.5.0(@types/node@22.0.0)
       supports-color: 8.1.1
     optionalDependencies:
-      '@types/node': 20.14.12
+      '@types/node': 22.0.0
 
-  '@rushstack/ts-command-line@4.22.2(@types/node@20.14.12)':
+  '@rushstack/ts-command-line@4.22.2(@types/node@22.0.0)':
     dependencies:
-      '@rushstack/terminal': 0.13.2(@types/node@20.14.12)
+      '@rushstack/terminal': 0.13.2(@types/node@22.0.0)
       '@types/argparse': 1.0.38
       argparse: 1.0.10
       string-argv: 0.3.2
@@ -12092,7 +12098,7 @@ snapshots:
 
   '@types/conventional-commits-parser@5.0.0':
     dependencies:
-      '@types/node': 20.14.12
+      '@types/node': 22.0.0
 
   '@types/eslint@8.56.11':
     dependencies:
@@ -12111,7 +12117,7 @@ snapshots:
   '@types/fs-extra@11.0.4':
     dependencies:
       '@types/jsonfile': 6.1.4
-      '@types/node': 20.14.12
+      '@types/node': 22.0.0
 
   '@types/hast@3.0.4':
     dependencies:
@@ -12121,11 +12127,11 @@ snapshots:
 
   '@types/http-proxy@1.17.14':
     dependencies:
-      '@types/node': 20.14.12
+      '@types/node': 22.0.0
 
   '@types/jsdom@21.1.7':
     dependencies:
-      '@types/node': 20.14.12
+      '@types/node': 22.0.0
       '@types/tough-cookie': 4.0.5
       parse5: 7.1.2
 
@@ -12133,7 +12139,7 @@ snapshots:
 
   '@types/jsonfile@6.1.4':
     dependencies:
-      '@types/node': 20.14.12
+      '@types/node': 22.0.0
 
   '@types/linkify-it@5.0.0': {}
 
@@ -12167,6 +12173,11 @@ snapshots:
   '@types/node@20.14.12':
     dependencies:
       undici-types: 5.26.5
+    optional: true
+
+  '@types/node@22.0.0':
+    dependencies:
+      undici-types: 6.11.1
 
   '@types/normalize-package-data@2.4.4': {}
 
@@ -12299,19 +12310,19 @@ snapshots:
       - encoding
       - supports-color
 
-  '@vitejs/plugin-vue-jsx@4.0.0(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))':
+  '@vitejs/plugin-vue-jsx@4.0.0(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))':
     dependencies:
       '@babel/core': 7.24.9
       '@babel/plugin-transform-typescript': 7.24.8(@babel/core@7.24.9)
       '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.9)
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
       vue: 3.4.34(typescript@5.5.4)
     transitivePeerDependencies:
       - supports-color
 
-  '@vitejs/plugin-vue@5.1.1(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))':
+  '@vitejs/plugin-vue@5.1.1(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))':
     dependencies:
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
       vue: 3.4.34(typescript@5.5.4)
 
   '@vitest/expect@2.0.4':
@@ -12484,14 +12495,14 @@ snapshots:
     dependencies:
       '@vue/devtools-kit': 7.3.6
 
-  '@vue/devtools-core@7.3.7(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))':
+  '@vue/devtools-core@7.3.7(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))':
     dependencies:
       '@vue/devtools-kit': 7.3.7
       '@vue/devtools-shared': 7.3.7
       mitt: 3.0.1
       nanoid: 3.3.7
       pathe: 1.1.2
-      vite-hot-client: 0.2.3(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))
+      vite-hot-client: 0.2.3(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))
       vue: 3.4.34(typescript@5.5.4)
     transitivePeerDependencies:
       - vite
@@ -13319,9 +13330,9 @@ snapshots:
 
   core-util-is@1.0.3: {}
 
-  cosmiconfig-typescript-loader@5.0.0(@types/node@20.14.12)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4):
+  cosmiconfig-typescript-loader@5.0.0(@types/node@22.0.0)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4):
     dependencies:
-      '@types/node': 20.14.12
+      '@types/node': 22.0.0
       cosmiconfig: 9.0.0(typescript@5.5.4)
       jiti: 1.21.6
       typescript: 5.5.4
@@ -14215,13 +14226,13 @@ snapshots:
     optionalDependencies:
       '@typescript-eslint/eslint-plugin': 7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)
 
-  eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)(vitest@2.0.4(@types/node@20.14.12)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.3)):
+  eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)(vitest@2.0.4(@types/node@22.0.0)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.3)):
     dependencies:
       '@typescript-eslint/utils': 7.17.0(eslint@9.8.0)(typescript@5.5.4)
       eslint: 9.8.0
     optionalDependencies:
       '@typescript-eslint/eslint-plugin': 7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)
-      vitest: 2.0.4(@types/node@20.14.12)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.3)
+      vitest: 2.0.4(@types/node@22.0.0)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.3)
     transitivePeerDependencies:
       - supports-color
       - typescript
@@ -17745,6 +17756,8 @@ snapshots:
 
   undici-types@5.26.5: {}
 
+  undici-types@6.11.1: {}
+
   undici@5.28.4:
     dependencies:
       '@fastify/busboy': 2.1.1
@@ -17904,17 +17917,17 @@ snapshots:
       spdx-correct: 3.2.0
       spdx-expression-parse: 3.0.1
 
-  vite-hot-client@0.2.3(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)):
+  vite-hot-client@0.2.3(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)):
     dependencies:
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
 
-  vite-node@2.0.4(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3):
+  vite-node@2.0.4(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3):
     dependencies:
       cac: 6.7.14
       debug: 4.3.5
       pathe: 1.1.2
       tinyrainbow: 1.2.0
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
     transitivePeerDependencies:
       - '@types/node'
       - less
@@ -17925,18 +17938,18 @@ snapshots:
       - supports-color
       - terser
 
-  vite-plugin-compression@0.5.1(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)):
+  vite-plugin-compression@0.5.1(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)):
     dependencies:
       chalk: 4.1.2
       debug: 4.3.5
       fs-extra: 10.1.0
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
     transitivePeerDependencies:
       - supports-color
 
-  vite-plugin-dts@4.0.0-beta.1(@types/node@20.14.12)(rollup@4.19.1)(typescript@5.5.4)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)):
+  vite-plugin-dts@4.0.0-beta.1(@types/node@22.0.0)(rollup@4.19.1)(typescript@5.5.4)(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)):
     dependencies:
-      '@microsoft/api-extractor': 7.47.2(@types/node@20.14.12)
+      '@microsoft/api-extractor': 7.47.2(@types/node@22.0.0)
       '@rollup/pluginutils': 5.1.0(rollup@4.19.1)
       '@volar/typescript': 2.3.4
       '@vue/language-core': 2.0.19(typescript@5.5.4)
@@ -17948,13 +17961,13 @@ snapshots:
       typescript: 5.5.4
       vue-tsc: 2.0.19(typescript@5.5.4)
     optionalDependencies:
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
     transitivePeerDependencies:
       - '@types/node'
       - rollup
       - supports-color
 
-  vite-plugin-html@3.2.2(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)):
+  vite-plugin-html@3.2.2(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)):
     dependencies:
       '@rollup/pluginutils': 4.2.1
       colorette: 2.0.20
@@ -17968,9 +17981,9 @@ snapshots:
       html-minifier-terser: 6.1.0
       node-html-parser: 5.4.2
       pathe: 0.2.0
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
 
-  vite-plugin-inspect@0.8.5(rollup@4.19.1)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)):
+  vite-plugin-inspect@0.8.5(rollup@4.19.1)(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)):
     dependencies:
       '@antfu/utils': 0.7.10
       '@rollup/pluginutils': 5.1.0(rollup@4.19.1)
@@ -17981,46 +17994,46 @@ snapshots:
       perfect-debounce: 1.0.0
       picocolors: 1.0.1
       sirv: 2.0.4
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  vite-plugin-lib-inject-css@2.1.1(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)):
+  vite-plugin-lib-inject-css@2.1.1(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)):
     dependencies:
       '@ast-grep/napi': 0.22.6
       magic-string: 0.30.10
       picocolors: 1.0.1
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
 
-  vite-plugin-pwa@0.20.1(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(workbox-build@7.1.1)(workbox-window@7.1.0):
+  vite-plugin-pwa@0.20.1(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))(workbox-build@7.1.1)(workbox-window@7.1.0):
     dependencies:
       debug: 4.3.5
       pretty-bytes: 6.1.1
       tinyglobby: 0.2.0
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
       workbox-build: 7.1.1
       workbox-window: 7.1.0
     transitivePeerDependencies:
       - supports-color
 
-  vite-plugin-vue-devtools@7.3.7(rollup@4.19.1)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4)):
+  vite-plugin-vue-devtools@7.3.7(rollup@4.19.1)(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4)):
     dependencies:
-      '@vue/devtools-core': 7.3.7(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))
+      '@vue/devtools-core': 7.3.7(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))
       '@vue/devtools-kit': 7.3.7
       '@vue/devtools-shared': 7.3.7
       execa: 8.0.1
       sirv: 2.0.4
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
-      vite-plugin-inspect: 0.8.5(rollup@4.19.1)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))
-      vite-plugin-vue-inspector: 5.1.3(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
+      vite-plugin-inspect: 0.8.5(rollup@4.19.1)(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))
+      vite-plugin-vue-inspector: 5.1.3(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))
     transitivePeerDependencies:
       - '@nuxt/kit'
       - rollup
       - supports-color
       - vue
 
-  vite-plugin-vue-inspector@5.1.3(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)):
+  vite-plugin-vue-inspector@5.1.3(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)):
     dependencies:
       '@babel/core': 7.24.9
       '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.24.9)
@@ -18031,29 +18044,29 @@ snapshots:
       '@vue/compiler-dom': 3.4.33
       kolorist: 1.8.0
       magic-string: 0.30.10
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
     transitivePeerDependencies:
       - supports-color
 
-  vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3):
+  vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3):
     dependencies:
       esbuild: 0.21.5
       postcss: 8.4.40
       rollup: 4.19.0
     optionalDependencies:
-      '@types/node': 20.14.12
+      '@types/node': 22.0.0
       fsevents: 2.3.3
       sass: 1.77.8
       terser: 5.31.3
 
-  vitepress@1.3.1(@algolia/client-search@4.24.0)(@types/node@20.14.12)(async-validator@4.2.5)(axios@1.7.2)(nprogress@0.2.0)(postcss@8.4.40)(qrcode@1.5.3)(sass@1.77.8)(search-insights@2.15.0)(sortablejs@1.15.2)(terser@5.31.3)(typescript@5.5.4):
+  vitepress@1.3.1(@algolia/client-search@4.24.0)(@types/node@22.0.0)(async-validator@4.2.5)(axios@1.7.2)(nprogress@0.2.0)(postcss@8.4.40)(qrcode@1.5.3)(sass@1.77.8)(search-insights@2.15.0)(sortablejs@1.15.2)(terser@5.31.3)(typescript@5.5.4):
     dependencies:
       '@docsearch/css': 3.6.1
       '@docsearch/js': 3.6.1(@algolia/client-search@4.24.0)(search-insights@2.15.0)
       '@shikijs/core': 1.11.0
       '@shikijs/transformers': 1.11.0
       '@types/markdown-it': 14.1.1
-      '@vitejs/plugin-vue': 5.1.1(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))
+      '@vitejs/plugin-vue': 5.1.1(vite@5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34(typescript@5.5.4))
       '@vue/devtools-api': 7.3.6
       '@vue/shared': 3.4.34
       '@vueuse/core': 10.11.0(vue@3.4.34(typescript@5.5.4))
@@ -18062,7 +18075,7 @@ snapshots:
       mark.js: 8.11.1
       minisearch: 7.1.0
       shiki: 1.11.0
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
       vue: 3.4.34(typescript@5.5.4)
     optionalDependencies:
       postcss: 8.4.40
@@ -18093,7 +18106,7 @@ snapshots:
       - typescript
       - universal-cookie
 
-  vitest@2.0.4(@types/node@20.14.12)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.3):
+  vitest@2.0.4(@types/node@22.0.0)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.3):
     dependencies:
       '@ampproject/remapping': 2.3.0
       '@vitest/expect': 2.0.4
@@ -18111,11 +18124,11 @@ snapshots:
       tinybench: 2.8.0
       tinypool: 1.0.0
       tinyrainbow: 1.2.0
-      vite: 5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
-      vite-node: 2.0.4(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3)
+      vite: 5.3.5(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
+      vite-node: 2.0.4(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
       why-is-node-running: 2.3.0
     optionalDependencies:
-      '@types/node': 20.14.12
+      '@types/node': 22.0.0
       jsdom: 24.1.1
     transitivePeerDependencies:
       - less

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

@@ -20,6 +20,7 @@ async function runLint({ format }: LintCommandOptions) {
   }
   $.verbose = true;
   await Promise.all([
+    $`cspell lint "**/*.ts"  "**/README.md" ".changeset/*.md" --no-progress`,
     $`eslint . --cache`,
     // $`ls-lint`,
     $`prettier . --ignore-unknown --check --cache`,

+ 1 - 1
website/src/commercial/technical-support.md

@@ -18,7 +18,7 @@
 
 ::: tip
 
-因为微信群人数有限制,加微信群前,你可以通过[赞助](../sponsor/personal.md)任意金额,并备注 `加入微信群`,作者会将你拉入微信群。也可以主动发送截图给作者
+因为微信群人数有限制,加微信群前,你可以通过[赞助](../sponsor/personal.md)任意金额,以主动发送截图给作者,备注`加入微信群`即可
 
 :::
 

+ 3 - 3
website/src/guide/essentials/concept.md

@@ -26,7 +26,7 @@
 
 在 `package.json` 中引入包:
 
-```json
+```json {3}
 {
   "dependencies": {
     "@vben/utils": "workspace:*"
@@ -46,7 +46,7 @@ import { isString } from '@vben/utils';
 
 在项目中,你可以看到一些 `#` 开头的路径,例如: `#/api`、`#/views`, 这些路径都是别名,用于快速定位到某个目录。它不是通过 `vite` 的 `alias` 实现的,而是通过 `Node.js` 本身的 [subpath imports](https://nodejs.org/api/packages.html#subpath-imports) 原理。只需要在 `package.json` 中配置 `imports` 字段即可。
 
-```json
+```json {3}
 {
   "imports": {
     "#/*": "./src/*"
@@ -56,7 +56,7 @@ import { isString } from '@vben/utils';
 
 为了 IDE 能够识别这些别名,我们还需要在`tsconfig.json`内配置:
 
-```json
+```json {5}
 {
   "compilerOptions": {
     "baseUrl": ".",

+ 1 - 3
website/src/guide/essentials/development.md

@@ -55,11 +55,9 @@ npm 脚本是项目常见的配置,用于执行一些常见的任务,比如
     // changeset 版本管理
     "changeset": "pnpm exec changeset",
     // 检查项目各种问题
-    "check": "pnpm run check:dep && pnpm run check:circular && pnpm run check:type && pnpm run check:cspell",
+    "check": "pnpm run check:circular && pnpm run check:dep && pnpm run check:type",,
     // 检查循环引用
     "check:circular": "vsh check-circular",
-    // 检查拼写
-    "check:cspell": "cspell lint \"**/*.ts\"  \"**/README.md\" \".changeset/*.md\" --no-progress",
     // 检查依赖
     "check:dep": "vsh check-dep",
     // 检查类型

+ 1 - 9
website/src/guide/essentials/settings.md

@@ -31,7 +31,7 @@
 
 ```bash [.env]
 # 应用标题
-VITE_GLOB_APP_TITLE=Vben Admin
+VITE_APP_TITLE=Vben Admin
 
 # 应用命名空间,用于缓存、store等功能的前缀,确保隔离
 VITE_APP_NAMESPACE=vben-web-antd
@@ -88,7 +88,6 @@ VITE_INJECT_APP_LOADING=true
 ```ts
 window._VBEN_ADMIN_PRO_APP_CONF_ = {
   VITE_GLOB_API_URL: 'https://mock-napi.vben.pro/api',
-  VITE_GLOB_APP_TITLE: 'Vben Admin',
 };
 Object.freeze(window._VBEN_ADMIN_PRO_APP_CONF_);
 Object.defineProperty(window, '_VBEN_ADMIN_PRO_APP_CONF_', {
@@ -124,13 +123,11 @@ const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD);
   ```ts
   export interface VbenAdminProAppConfigRaw {
     VITE_GLOB_API_URL: string;
-    VITE_GLOB_APP_TITLE: string;
     VITE_GLOB_OTHER_API_URL: string; // [!code ++]
   }
 
   export interface ApplicationConfig {
     apiURL: string;
-    appTitle: string;
     otherApiURL: string; // [!code ++]
   }
   ```
@@ -159,17 +156,12 @@ const { otherApiURL } = useAppConfig(import.meta.env, import.meta.env.PROD);
 import { useAppConfig } from '@vben/hooks';
 import { defineOverridesPreferences } from '@vben/preferences';
 
-const { appTitle } = useAppConfig(import.meta.env, import.meta.env.PROD);
-
 /**
  * @description 项目配置文件
  * 只需要覆盖项目中的一部分配置,不需要的配置不用覆盖,会自动使用默认配置
  */
 export const overridesPreferences = defineOverridesPreferences({
   // overrides
-  app: {
-    name: appTitle,
-  },
 });
 ```
 

+ 2 - 2
website/src/guide/in-depth/loading.md

@@ -22,7 +22,7 @@ VITE_INJECT_APP_LOADING=false
 
 ::: tip
 
-- 你可以使用跟`index.html`一样的语法,比如`VITE_GLOB_APP_TITLE`变量,来获取应用的标题。
+- 你可以使用跟`index.html`一样的语法,比如`VITE_APP_TITLE`变量,来获取应用的标题。
 - 必须保证有一个`id="__app-loading__"`的元素。
 - 必须保证有一个`style[data-app-loading="inject-css"]`的元素。
 
@@ -32,6 +32,6 @@ VITE_INJECT_APP_LOADING=false
 </style>
 <div id="__app-loading__">
   <!-- ... -->
-  <div class="title"><%= VITE_GLOB_APP_TITLE %></div>
+  <div class="title"><%= VITE_APP_TITLE %></div>
 </div>
 ```