Browse Source

chore: update locale

vben 8 months ago
parent
commit
c58aa26dbf
35 changed files with 531 additions and 523 deletions
  1. 3 3
      apps/web-antd/src/apis/modules/user.ts
  2. 2 2
      apps/web-antd/src/forward/request/index.ts
  3. 235 0
      apps/web-antd/src/router/routes/modules/demos.ts
  4. 0 59
      apps/web-antd/src/router/routes/modules/fallback.ts
  5. 0 98
      apps/web-antd/src/router/routes/modules/nested.ts
  6. 0 86
      apps/web-antd/src/router/routes/modules/outside.ts
  7. 3 1
      apps/web-antd/src/router/routes/modules/vben.ts
  8. 1 1
      apps/web-antd/src/views/_essential/fallback/coming-soon.vue
  9. 1 1
      apps/web-antd/src/views/demos/nested/menu-1.vue
  10. 1 1
      apps/web-antd/src/views/demos/nested/menu-2-1.vue
  11. 1 1
      apps/web-antd/src/views/demos/nested/menu-3-1.vue
  12. 1 1
      apps/web-antd/src/views/demos/nested/menu-3-2-1.vue
  13. 2 2
      apps/web-antd/vite.config.mts
  14. 1 1
      internal/node-utils/package.json
  15. 1 1
      internal/tailwind-config/package.json
  16. 1 1
      package.json
  17. 2 2
      packages/business/layouts/src/authentication/authentication.vue
  18. 3 3
      packages/business/layouts/src/authentication/widgets/layout-toggle.vue
  19. 2 2
      packages/business/layouts/src/basic/content/use-content-spinner.ts
  20. 1 1
      packages/business/universal-ui/src/fallback/fallback.ts
  21. 6 4
      packages/business/universal-ui/src/fallback/fallback.vue
  22. 0 0
      packages/business/universal-ui/src/fallback/icons/icon-comming-soon.vue
  23. 5 5
      packages/business/widgets/src/global-search/global-search.vue
  24. 3 3
      packages/business/widgets/src/global-search/search-panel.vue
  25. 1 1
      packages/business/widgets/src/preferences/blocks/layout/interface-control.vue
  26. 4 4
      packages/business/widgets/src/preferences/blocks/layout/navigation.vue
  27. 2 2
      packages/business/widgets/src/preferences/blocks/layout/tabbar.vue
  28. 15 15
      packages/business/widgets/src/preferences/blocks/theme/builtin.vue
  29. 2 2
      packages/business/widgets/src/preferences/blocks/theme/color-mode.vue
  30. 3 3
      packages/business/widgets/src/preferences/blocks/theme/theme.vue
  31. 3 3
      packages/business/widgets/src/preferences/preferences.vue
  32. 2 2
      packages/business/widgets/src/theme-toggle/theme-toggle.vue
  33. 89 83
      packages/locales/src/langs/en-US.yaml
  34. 91 85
      packages/locales/src/langs/zh-CN.yaml
  35. 44 44
      pnpm-lock.yaml

+ 3 - 3
apps/web-antd/src/apis/modules/user.ts

@@ -2,20 +2,20 @@ import type { UserInfo } from '@vben/types';
 
 import type { UserApiType } from '../types';
 
-import { request } from '#/forward';
+import { get, post } from '#/forward';
 
 /**
  * 登录
  */
 async function userLogin(data: UserApiType.LoginParams) {
-  return request<UserApiType.LoginResult>('/login', { data, method: 'post' });
+  return post<UserApiType.LoginResult>('/login', data);
 }
 
 /**
  * 获取用户信息
  */
 async function getUserInfo() {
-  return request<UserInfo>('/getUserInfo', { method: 'get' });
+  return get<UserInfo>('/getUserInfo');
 }
 
 export { getUserInfo, userLogin };

+ 2 - 2
apps/web-antd/src/forward/request/index.ts

@@ -81,9 +81,9 @@ function setupRequestInterceptors(client: RequestClient) {
   );
 }
 
-const { request } = createRequestClient();
+const { get, post, request } = createRequestClient();
 
 // 其他配置的请求方法
 // const { request: xxxRequest } = createRequest();
 
-export { request };
+export { get, post, request };

+ 235 - 0
apps/web-antd/src/router/routes/modules/demos.ts

@@ -0,0 +1,235 @@
+import type { RouteRecordRaw } from 'vue-router';
+
+import { $t } from '@vben/locales/helper';
+
+import { BasicLayout, IFrameView } from '#/layouts';
+
+const routes: RouteRecordRaw[] = [
+  {
+    component: BasicLayout,
+    meta: {
+      icon: 'ic:baseline-view-in-ar',
+      keepAlive: true,
+      order: 1000,
+      title: $t('page.demos.title'),
+    },
+    name: 'Demos',
+    path: '/demos',
+    redirect: '/demos/fallback/403',
+    children: [
+      {
+        meta: {
+          icon: 'mdi:lightbulb-error-outline',
+          title: $t('page.demos.fallback.title'),
+        },
+        name: 'FallbackLayout',
+        path: '/fallback',
+        redirect: '/fallback/403',
+        children: [
+          {
+            name: 'Fallback403',
+            path: '403',
+            component: () =>
+              import('#/views/_essential/fallback/forbidden.vue'),
+            meta: {
+              icon: 'mdi:do-not-disturb-alt',
+              title: '403',
+            },
+          },
+          {
+            name: 'Fallback404',
+            path: '404',
+            component: () =>
+              import('#/views/_essential/fallback/not-found.vue'),
+            meta: {
+              icon: 'mdi:table-off',
+              title: '404',
+            },
+          },
+          {
+            name: 'Fallback500',
+            path: '500',
+            component: () =>
+              import('#/views/_essential/fallback/internal-error.vue'),
+            meta: {
+              icon: 'mdi:server-network-off',
+              title: '500',
+            },
+          },
+          {
+            name: 'FallbackOffline',
+            path: 'offline',
+            component: () => import('#/views/_essential/fallback/offline.vue'),
+            meta: {
+              icon: 'mdi:offline',
+              title: $t('fallback.offline'),
+            },
+          },
+        ],
+      },
+      {
+        meta: {
+          icon: 'ic:round-settings-input-composite',
+          title: $t('page.demos.outside.title'),
+        },
+        name: 'Outside',
+        path: '/outside',
+        redirect: '/outside/iframe',
+        children: [
+          {
+            name: 'iframe',
+            path: 'iframe',
+            meta: {
+              icon: 'mdi:newspaper-variant-outline',
+              title: $t('page.demos.outside.embedded'),
+            },
+            redirect: '/outside/iframe/vue-document',
+            children: [
+              {
+                name: 'VueDocument',
+                path: 'vue-document',
+                component: IFrameView,
+                meta: {
+                  icon: 'logos:vue',
+                  iframeSrc: 'https://cn.vuejs.org/',
+                  keepAlive: true,
+                  title: 'Vue',
+                },
+              },
+              {
+                name: 'Tailwindcss',
+                path: 'tailwindcss',
+                component: IFrameView,
+                meta: {
+                  icon: 'devicon:tailwindcss',
+                  iframeSrc: 'https://tailwindcss.com/',
+                  // keepAlive: true,
+                  title: 'Tailwindcss',
+                },
+              },
+            ],
+          },
+          {
+            name: 'ExternalLink',
+            path: 'external-link',
+            meta: {
+              icon: 'mdi:newspaper-variant-multiple-outline',
+              title: $t('page.demos.outside.external-link'),
+            },
+            redirect: '/outside/external-link/vite',
+            children: [
+              {
+                name: 'Vite',
+                path: 'vite',
+                component: IFrameView,
+                meta: {
+                  icon: 'logos:vitejs',
+                  link: 'https://vitejs.dev/',
+                  title: 'Vite',
+                },
+              },
+              {
+                name: 'VueUse',
+                path: 'vue-use',
+                component: IFrameView,
+                meta: {
+                  icon: 'logos:vueuse',
+                  link: 'https://vueuse.org',
+                  title: 'VueUse',
+                },
+              },
+            ],
+          },
+        ],
+      },
+      {
+        meta: {
+          icon: 'ic:round-menu',
+          title: $t('page.demos.nested.title'),
+        },
+        name: 'Nested',
+        path: 'nested',
+        redirect: '/demos/nested/menu1',
+        children: [
+          {
+            name: 'Menu1',
+            path: 'menu1',
+            component: () => import('#/views/demos/nested/menu-1.vue'),
+            meta: {
+              icon: 'ic:round-menu',
+              keepAlive: true,
+              title: $t('page.demos.nested.menu1'),
+            },
+          },
+          {
+            name: 'Menu2',
+            path: 'menu2',
+            meta: {
+              icon: 'ic:round-menu',
+              keepAlive: true,
+              title: $t('page.demos.nested.menu2'),
+            },
+            redirect: '/nested/menu2/menu2-1',
+            children: [
+              {
+                name: 'Menu21',
+                path: 'menu2-1',
+                component: () => import('#/views/demos/nested/menu-2-1.vue'),
+                meta: {
+                  icon: 'ic:round-menu',
+                  keepAlive: true,
+                  title: $t('page.demos.nested.menu21'),
+                },
+              },
+            ],
+          },
+          {
+            name: 'Menu3',
+            path: 'menu3',
+            meta: {
+              icon: 'ic:round-menu',
+              title: $t('page.demos.nested.menu3'),
+            },
+            redirect: '/nested/menu3/menu3-1',
+            children: [
+              {
+                name: 'Menu31',
+                path: 'menu3-1',
+                component: () => import('#/views/demos/nested/menu-3-1.vue'),
+                meta: {
+                  icon: 'ic:round-menu',
+                  keepAlive: true,
+                  title: $t('page.demos.nested.menu31'),
+                },
+              },
+              {
+                name: 'Menu32',
+                path: 'menu3-2',
+                meta: {
+                  icon: 'ic:round-menu',
+                  title: $t('page.demos.nested.menu32'),
+                },
+                redirect: '/nested/menu3/menu3-2/menu3-2-1',
+                children: [
+                  {
+                    name: 'Menu321',
+                    path: 'menu3-2-1',
+                    component: () =>
+                      import('#/views/demos/nested/menu-3-2-1.vue'),
+                    meta: {
+                      icon: 'ic:round-menu',
+                      keepAlive: true,
+                      title: $t('page.demos.nested.menu321'),
+                    },
+                  },
+                ],
+              },
+            ],
+          },
+        ],
+      },
+    ],
+  },
+];
+
+export default routes;

+ 0 - 59
apps/web-antd/src/router/routes/modules/fallback.ts

@@ -1,59 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import { $t } from '@vben/locales/helper';
-
-import { BasicLayout } from '#/layouts';
-
-const routes: RouteRecordRaw[] = [
-  {
-    component: BasicLayout,
-    meta: {
-      icon: 'mdi:lightbulb-error-outline',
-      title: $t('page.fallback.title'),
-    },
-    name: 'FallbackLayout',
-    path: '/fallback',
-    redirect: '/fallback/403',
-    children: [
-      {
-        name: 'Fallback403',
-        path: '403',
-        component: () => import('#/views/_essential/fallback/forbidden.vue'),
-        meta: {
-          icon: 'mdi:do-not-disturb-alt',
-          title: '403',
-        },
-      },
-      {
-        name: 'Fallback404',
-        path: '404',
-        component: () => import('#/views/_essential/fallback/not-found.vue'),
-        meta: {
-          icon: 'mdi:table-off',
-          title: '404',
-        },
-      },
-      {
-        name: 'Fallback500',
-        path: '500',
-        component: () =>
-          import('#/views/_essential/fallback/internal-error.vue'),
-        meta: {
-          icon: 'mdi:server-network-off',
-          title: '500',
-        },
-      },
-      {
-        name: 'FallbackOffline',
-        path: 'offline',
-        component: () => import('#/views/_essential/fallback/offline.vue'),
-        meta: {
-          icon: 'mdi:offline',
-          title: $t('fallback.offline'),
-        },
-      },
-    ],
-  },
-];
-
-export default routes;

+ 0 - 98
apps/web-antd/src/router/routes/modules/nested.ts

@@ -1,98 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import { $t } from '@vben/locales/helper';
-
-import { BasicLayout } from '#/layouts';
-
-const routes: RouteRecordRaw[] = [
-  {
-    component: BasicLayout,
-    meta: {
-      icon: 'ic:round-menu',
-      keepAlive: true,
-      order: 1000,
-      title: $t('page.nested.title'),
-    },
-    name: 'Nested',
-    path: '/nested',
-    redirect: '/nested/menu1',
-    children: [
-      {
-        name: 'Menu1',
-        path: 'menu1',
-        component: () => import('#/views/nested/menu-1.vue'),
-        meta: {
-          icon: 'ic:round-menu',
-          keepAlive: true,
-          title: $t('page.nested.menu1'),
-        },
-      },
-      {
-        name: 'Menu2',
-        path: 'menu2',
-        meta: {
-          icon: 'ic:round-menu',
-          keepAlive: true,
-          title: $t('page.nested.menu2'),
-        },
-        redirect: '/nested/menu2/menu2-1',
-        children: [
-          {
-            name: 'Menu21',
-            path: 'menu2-1',
-            component: () => import('#/views/nested/menu-2-1.vue'),
-            meta: {
-              icon: 'ic:round-menu',
-              keepAlive: true,
-              title: $t('page.nested.menu21'),
-            },
-          },
-        ],
-      },
-      {
-        name: 'Menu3',
-        path: 'menu3',
-        meta: {
-          icon: 'ic:round-menu',
-          title: $t('page.nested.menu3'),
-        },
-        redirect: '/nested/menu3/menu3-1',
-        children: [
-          {
-            name: 'Menu31',
-            path: 'menu3-1',
-            component: () => import('#/views/nested/menu-3-1.vue'),
-            meta: {
-              icon: 'ic:round-menu',
-              keepAlive: true,
-              title: $t('page.nested.menu31'),
-            },
-          },
-          {
-            name: 'Menu32',
-            path: 'menu3-2',
-            meta: {
-              icon: 'ic:round-menu',
-              title: $t('page.nested.menu32'),
-            },
-            redirect: '/nested/menu3/menu3-2/menu3-2-1',
-            children: [
-              {
-                name: 'Menu321',
-                path: 'menu3-2-1',
-                component: () => import('#/views/nested/menu-3-2-1.vue'),
-                meta: {
-                  icon: 'ic:round-menu',
-                  keepAlive: true,
-                  title: $t('page.nested.menu321'),
-                },
-              },
-            ],
-          },
-        ],
-      },
-    ],
-  },
-];
-
-export default routes;

+ 0 - 86
apps/web-antd/src/router/routes/modules/outside.ts

@@ -1,86 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import { $t } from '@vben/locales/helper';
-
-import { BasicLayout, IFrameView } from '#/layouts';
-
-const routes: RouteRecordRaw[] = [
-  {
-    component: BasicLayout,
-    meta: {
-      icon: 'ic:round-settings-input-composite',
-      title: $t('page.outside.title'),
-    },
-    name: 'Outside',
-    path: '/outside',
-    redirect: '/outside/iframe',
-    children: [
-      {
-        name: 'iframe',
-        path: 'iframe',
-        meta: {
-          icon: 'mdi:newspaper-variant-outline',
-          title: $t('page.outside.embedded'),
-        },
-        redirect: '/outside/iframe/vue-document',
-        children: [
-          {
-            name: 'VueDocument',
-            path: 'vue-document',
-            component: IFrameView,
-            meta: {
-              icon: 'logos:vue',
-              iframeSrc: 'https://cn.vuejs.org/',
-              keepAlive: true,
-              title: 'Vue',
-            },
-          },
-          {
-            name: 'Tailwindcss',
-            path: 'tailwindcss',
-            component: IFrameView,
-            meta: {
-              icon: 'devicon:tailwindcss',
-              iframeSrc: 'https://tailwindcss.com/',
-              // keepAlive: true,
-              title: 'Tailwindcss',
-            },
-          },
-        ],
-      },
-      {
-        name: 'ExternalLink',
-        path: 'external-link',
-        meta: {
-          icon: 'mdi:newspaper-variant-multiple-outline',
-          title: $t('page.outside.external-link'),
-        },
-        redirect: '/outside/external-link/vite',
-        children: [
-          {
-            name: 'Vite',
-            path: 'vite',
-            component: IFrameView,
-            meta: {
-              icon: 'logos:vitejs',
-              link: 'https://vitejs.dev/',
-              title: 'Vite',
-            },
-          },
-          {
-            name: 'VueUse',
-            path: 'vue-use',
-            component: IFrameView,
-            meta: {
-              icon: 'logos:vueuse',
-              link: 'https://vueuse.org',
-              title: 'VueUse',
-            },
-          },
-        ],
-      },
-    ],
-  },
-];
-
-export default routes;

+ 3 - 1
apps/web-antd/src/router/routes/modules/vben.ts

@@ -10,9 +10,10 @@ const routes: RouteRecordRaw[] = [
   {
     component: BasicLayout,
     meta: {
+      badgeType: 'dot',
       icon: VBEN_LOGO,
       order: 9999,
-      title: 'Vben',
+      title: 'Vben Admin',
     },
     name: 'AboutLayout',
     path: '/vben-admin',
@@ -23,6 +24,7 @@ const routes: RouteRecordRaw[] = [
         path: 'about',
         component: () => import('#/views/_essential/vben/about/index.vue'),
         meta: {
+          badgeType: 'dot',
           icon: 'mdi:creative-commons',
           title: $t('page.vben.about'),
         },

+ 1 - 1
apps/web-antd/src/views/_essential/fallback/coming-soon.vue

@@ -3,5 +3,5 @@ import { Fallback } from '@vben/universal-ui';
 </script>
 
 <template>
-  <Fallback status="hello" />
+  <Fallback status="comming-soon" />
 </template>

+ 1 - 1
apps/web-antd/src/views/nested/menu-1.vue → apps/web-antd/src/views/demos/nested/menu-1.vue

@@ -5,5 +5,5 @@ defineOptions({ name: 'Menu1' });
 </script>
 
 <template>
-  <Fallback status="hello" />
+  <Fallback status="comming-soon" />
 </template>

+ 1 - 1
apps/web-antd/src/views/nested/menu-2-1.vue → apps/web-antd/src/views/demos/nested/menu-2-1.vue

@@ -5,5 +5,5 @@ defineOptions({ name: 'Menu21' });
 </script>
 
 <template>
-  <Fallback status="hello" />
+  <Fallback status="comming-soon" />
 </template>

+ 1 - 1
apps/web-antd/src/views/nested/menu-3-1.vue → apps/web-antd/src/views/demos/nested/menu-3-1.vue

@@ -5,5 +5,5 @@ defineOptions({ name: 'Menu31' });
 </script>
 
 <template>
-  <Fallback status="hello" />
+  <Fallback status="comming-soon" />
 </template>

+ 1 - 1
apps/web-antd/src/views/nested/menu-3-2-1.vue → apps/web-antd/src/views/demos/nested/menu-3-2-1.vue

@@ -5,5 +5,5 @@ defineOptions({ name: 'Menu321' });
 </script>
 
 <template>
-  <Fallback status="hello" />
+  <Fallback status="comming-soon" />
 </template>

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

@@ -3,8 +3,8 @@ import { defineConfig } from '@vben/vite-config';
 export default defineConfig({
   application: ({ mode }) => {
     return {
-      compress: true,
-      compressTypes: ['brotli', 'gzip'],
+      compress: false,
+      compressTypes: ['brotli', 'gzip'] as const,
       importmap: false,
       importmapOptions: {
         // 通过 Importmap CDN 方式引入,

+ 1 - 1
internal/node-utils/package.json

@@ -34,7 +34,7 @@
     "dayjs": "^1.11.11",
     "find-up": "^7.0.0",
     "nanoid": "^5.0.7",
-    "pkg-types": "^1.1.1",
+    "pkg-types": "^1.1.2",
     "prettier": "^3.3.2",
     "rimraf": "^5.0.7",
     "zx": "^7.2.3"

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

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

+ 1 - 1
package.json

@@ -48,7 +48,7 @@
   },
   "devDependencies": {
     "@changesets/changelog-github": "^0.5.0",
-    "@changesets/cli": "^2.27.6",
+    "@changesets/cli": "^2.27.7",
     "@ls-lint/ls-lint": "^2.2.3",
     "@types/jsdom": "^21.1.7",
     "@types/node": "^20.14.9",

+ 2 - 2
packages/business/layouts/src/authentication/authentication.vue

@@ -49,10 +49,10 @@ const appName = computed(() => preferences.app.name);
         <div class="flex-col-center -enter-x mr-20 h-full">
           <SloganIcon :alt="appName" class="animate-float h-64 w-2/5" />
           <div class="text-1xl mt-6 font-sans text-white lg:text-2xl">
-            {{ $t('authentication.layout-title') }}
+            {{ $t('authentication.page-title') }}
           </div>
           <div class="dark:text-muted-foreground mt-2 text-white/60">
-            {{ $t('authentication.layout-desc') }}
+            {{ $t('authentication.page-desc') }}
           </div>
         </div>
       </div>

+ 3 - 3
packages/business/layouts/src/authentication/widgets/layout-toggle.vue

@@ -21,17 +21,17 @@ const menus = computed((): VbenDropdownMenuItem[] => [
   {
     icon: MdiDockLeft,
     key: 'panel-left',
-    text: $t('layout.align-left'),
+    text: $t('authentication.layout.align-left'),
   },
   {
     icon: MdiDockBottom,
     key: 'panel-center',
-    text: $t('layout.center'),
+    text: $t('authentication.layout.center'),
   },
   {
     icon: MdiDockRight,
     key: 'panel-right',
-    text: $t('layout.align-right'),
+    text: $t('authentication.layout.align-right'),
   },
 ]);
 

+ 2 - 2
packages/business/layouts/src/basic/content/use-content-spinner.ts

@@ -25,7 +25,7 @@ function useContentSpinner() {
   };
 
   router.beforeEach((to) => {
-    if (to.meta.loaded || !enableLoading.value) {
+    if (to.meta.loaded || !enableLoading.value || to.meta.iframeSrc) {
       return true;
     }
     startTime.value = performance.now();
@@ -34,7 +34,7 @@ function useContentSpinner() {
   });
 
   router.afterEach((to) => {
-    if (to.meta.loaded || !enableLoading.value) {
+    if (to.meta.loaded || !enableLoading.value || to.meta.iframeSrc) {
       return true;
     }
 

+ 1 - 1
packages/business/universal-ui/src/fallback/fallback.ts

@@ -16,7 +16,7 @@ interface FallbackProps {
   /**
    *  @zh_CN 内置类型
    */
-  status?: '403' | '404' | '500' | 'hello' | 'offline';
+  status?: '403' | '404' | '500' | 'comming-soon' | 'offline';
   /**
    *  @zh_CN 页面提示语
    */

+ 6 - 4
packages/business/universal-ui/src/fallback/fallback.vue

@@ -19,14 +19,16 @@ const props = withDefaults(defineProps<Props>(), {
   homePath: '/',
   image: '',
   showBack: true,
-  status: 'hello',
+  status: 'comming-soon',
   title: '',
 });
 
 const Icon403 = defineAsyncComponent(() => import('./icons/icon-403.vue'));
 const Icon404 = defineAsyncComponent(() => import('./icons/icon-404.vue'));
 const Icon500 = defineAsyncComponent(() => import('./icons/icon-500.vue'));
-const IconHello = defineAsyncComponent(() => import('./icons/icon-hello.vue'));
+const IconHello = defineAsyncComponent(
+  () => import('./icons/icon-comming-soon.vue'),
+);
 const IconOffline = defineAsyncComponent(
   () => import('./icons/icon-offline.vue'),
 );
@@ -49,7 +51,7 @@ const titleText = computed(() => {
     case 'offline': {
       return $t('fallback.offline-error');
     }
-    case 'hello': {
+    case 'comming-soon': {
       return $t('fallback.coming-soon');
     }
     default: {
@@ -95,7 +97,7 @@ const fallbackIcon = computed(() => {
     case 'offline': {
       return IconOffline;
     }
-    case 'hello': {
+    case 'comming-soon': {
       return IconHello;
     }
     default: {

+ 0 - 0
packages/business/universal-ui/src/fallback/icons/icon-hello.vue → packages/business/universal-ui/src/fallback/icons/icon-comming-soon.vue


+ 5 - 5
packages/business/widgets/src/global-search/global-search.vue

@@ -71,7 +71,7 @@ if (props.enableShortcutKey) {
           <span
             class="text-muted-foreground group-hover:text-foreground hidden text-sm duration-300 md:block"
           >
-            {{ $t('search.search') }}
+            {{ $t('widgets.search.title') }}
           </span>
           <span
             v-if="enableShortcutKey"
@@ -94,7 +94,7 @@ if (props.enableShortcutKey) {
             <IcRoundSearch class="mt-1 size-4" />
             <input
               v-model="keyword"
-              :placeholder="$t('search.search-navigate')"
+              :placeholder="$t('widgets.search.search-navigate')"
               class="ring-none placeholder:text-muted-foreground w-[80%] rounded-md border border-none bg-transparent p-2 text-sm outline-none ring-0 ring-offset-transparent focus-visible:ring-transparent"
             />
           </DialogTitle>
@@ -106,16 +106,16 @@ if (props.enableShortcutKey) {
         >
           <div class="flex items-center">
             <IcRoundSubdirectoryArrowLeft class="mr-1" />
-            {{ $t('search.select') }}
+            {{ $t('widgets.search.select') }}
           </div>
           <div class="flex items-center">
             <IcRoundArrowUpward class="mr-2" />
             <IcRoundArrowDownward class="mr-2" />
-            {{ $t('search.navigate') }}
+            {{ $t('widgets.search.navigate') }}
           </div>
           <div class="flex items-center">
             <MdiKeyboardEsc class="mr-1" />
-            {{ $t('search.close') }}
+            {{ $t('widgets.search.close') }}
           </div>
         </DialogFooter>
       </DialogContent>

+ 3 - 3
packages/business/widgets/src/global-search/search-panel.vue

@@ -223,7 +223,7 @@ onMounted(() => {
       >
         <IcRoundSearchOff class="size-12" />
         <p class="my-10 text-xs">
-          {{ $t('search.no-results') }}
+          {{ $t('widgets.search.no-results') }}
           <span class="text-foreground text-sm font-medium">
             "{{ keyword }}"
           </span>
@@ -235,7 +235,7 @@ onMounted(() => {
         class="text-muted-foreground text-center"
       >
         <p class="my-10 text-xs">
-          {{ $t('search.no-recent') }}
+          {{ $t('widgets.search.no-recent') }}
         </p>
       </div>
 
@@ -244,7 +244,7 @@ onMounted(() => {
           v-if="searchHistory.length > 0 && !keyword"
           class="text-muted-foreground mb-2 text-xs"
         >
-          {{ $t('search.recent') }}
+          {{ $t('widgets.search.recent') }}
         </li>
         <li
           v-for="(item, index) in uniqueByField(searchResults, 'path')"

+ 1 - 1
packages/business/widgets/src/preferences/blocks/layout/interface-control.vue

@@ -13,7 +13,7 @@ const logoVisible = defineModel<boolean>('logoVisible');
 
 <template>
   <SwitchItem v-model="tabsVisible">
-    {{ $t('preferences.tabs-visible') }}
+    {{ $t('preferences.tabbar.enable') }}
   </SwitchItem>
   <SwitchItem v-model="logoVisible">
     {{ $t('preferences.logo-visible') }}

+ 4 - 4
packages/business/widgets/src/preferences/blocks/layout/navigation.vue

@@ -28,18 +28,18 @@ const stylesItems: SelectListItem[] = [
     :disabled="disabled"
     :items="stylesItems"
   >
-    {{ $t('preferences.navigation-style') }}
+    {{ $t('preferences.navigation-menu.style') }}
   </ToggleItem>
   <SwitchItem
     v-model="navigationSplit"
     :disabled="disabledNavigationSplit || disabled"
   >
-    {{ $t('preferences.navigation-split') }}
+    {{ $t('preferences.navigation-menu.split') }}
     <template #tip>
-      {{ $t('preferences.navigation-split-tip') }}
+      {{ $t('preferences.navigation-menu.split-tip') }}
     </template>
   </SwitchItem>
   <SwitchItem v-model="navigationAccordion" :disabled="disabled">
-    {{ $t('preferences.navigation-accordion') }}
+    {{ $t('preferences.navigation-menu.accordion') }}
   </SwitchItem>
 </template>

+ 2 - 2
packages/business/widgets/src/preferences/blocks/layout/tabbar.vue

@@ -15,10 +15,10 @@ const tabbarShowIcon = defineModel<boolean>('tabbarShowIcon');
 
 <template>
   <SwitchItem v-model="tabbarEnable" :disabled="disabled">
-    {{ $t('preferences.tabs-visible') }}
+    {{ $t('preferences.tabbar.enable') }}
   </SwitchItem>
   <SwitchItem v-model="tabbarShowIcon" :disabled="!tabbarEnable">
-    {{ $t('preferences.tabs-icon') }}
+    {{ $t('preferences.tabbar.icon') }}
   </SwitchItem>
   <!-- <SwitchItem v-model="sideCollapseShowTitle" :disabled="!tabsVisible">
     {{ $t('preferences.collapse-show-title') }}

+ 15 - 15
packages/business/widgets/src/preferences/blocks/theme/builtin.vue

@@ -28,50 +28,50 @@ const inputValue = computed(() => {
 function typeView(name: BuiltinThemeType) {
   switch (name) {
     case 'default': {
-      return $t('preferences.theme.default');
+      return $t('preferences.theme.builtin.default');
     }
     case 'violet': {
-      return $t('preferences.theme.violet');
+      return $t('preferences.theme.builtin.violet');
     }
     case 'pink': {
-      return $t('preferences.theme.pink');
+      return $t('preferences.theme.builtin.pink');
     }
     case 'rose': {
-      return $t('preferences.theme.rose');
+      return $t('preferences.theme.builtin.rose');
     }
     case 'sky-blue': {
-      return $t('preferences.theme.sky-blue');
+      return $t('preferences.theme.builtin.sky-blue');
     }
     case 'deep-blue': {
-      return $t('preferences.theme.deep-blue');
+      return $t('preferences.theme.builtin.deep-blue');
     }
 
     case 'green': {
-      return $t('preferences.theme.green');
+      return $t('preferences.theme.builtin.green');
     }
     case 'deep-green': {
-      return $t('preferences.theme.deep-green');
+      return $t('preferences.theme.builtin.deep-green');
     }
     case 'orange': {
-      return $t('preferences.theme.orange');
+      return $t('preferences.theme.builtin.orange');
     }
     case 'yellow': {
-      return $t('preferences.theme.yellow');
+      return $t('preferences.theme.builtin.yellow');
     }
     case 'zinc': {
-      return $t('preferences.theme.zinc');
+      return $t('preferences.theme.builtin.zinc');
     }
     case 'neutral': {
-      return $t('preferences.theme.neutral');
+      return $t('preferences.theme.builtin.neutral');
     }
     case 'slate': {
-      return $t('preferences.theme.slate');
+      return $t('preferences.theme.builtin.slate');
     }
     case 'gray': {
-      return $t('preferences.theme.gray');
+      return $t('preferences.theme.builtin.gray');
     }
     case 'custom': {
-      return $t('preferences.theme.custom');
+      return $t('preferences.theme.builtin.custom');
     }
   }
 }

+ 2 - 2
packages/business/widgets/src/preferences/blocks/theme/color-mode.vue

@@ -18,9 +18,9 @@ const appColorGrayMode = defineModel<boolean>('appColorGrayMode', {
 
 <template>
   <SwitchItem v-model="appColorWeakMode">
-    {{ $t('preferences.weak-mode') }}
+    {{ $t('preferences.theme.weak-mode') }}
   </SwitchItem>
   <SwitchItem v-model="appColorGrayMode">
-    {{ $t('preferences.gray-mode') }}
+    {{ $t('preferences.theme.gray-mode') }}
   </SwitchItem>
 </template>

+ 3 - 3
packages/business/widgets/src/preferences/blocks/theme/theme.vue

@@ -43,10 +43,10 @@ function activeClass(theme: string): string[] {
 function nameView(name: string) {
   switch (name) {
     case 'light': {
-      return $t('preferences.light');
+      return $t('preferences.theme.light');
     }
     case 'dark': {
-      return $t('preferences.dark');
+      return $t('preferences.theme.dark');
     }
     case 'auto': {
       return $t('preferences.follow-system');
@@ -79,7 +79,7 @@ function nameView(name: string) {
       :disabled="modelValue !== 'light'"
       class="mt-6"
     >
-      {{ $t('preferences.dark-menu') }}
+      {{ $t('preferences.theme.dark-menu') }}
     </SwitchItem>
   </div>
 </template>

+ 3 - 3
packages/business/widgets/src/preferences/preferences.vue

@@ -233,7 +233,7 @@ async function handleReset() {
                 :color-primary-presets="colorPrimaryPresets"
               />
             </Block> -->
-            <Block :title="$t('preferences.theme.builtin')">
+            <Block :title="$t('preferences.theme.builtin.title')">
               <BuiltinTheme
                 v-model="themeBuiltinType"
                 v-model:theme-color-primary="themeColorPrimary"
@@ -275,7 +275,7 @@ async function handleReset() {
               />
             </Block>
 
-            <Block :title="$t('preferences.navigation-menu')">
+            <Block :title="$t('preferences.navigation-menu.title')">
               <Navigation
                 v-model:navigation-accordion="navigationAccordion"
                 v-model:navigation-split="navigationSplit"
@@ -298,7 +298,7 @@ async function handleReset() {
               />
             </Block>
 
-            <Block :title="$t('preferences.tabs')">
+            <Block :title="$t('preferences.tabbar.title')">
               <Tabbar
                 v-model:tabbar-enable="tabbarEnable"
                 v-model:tabbar-show-icon="tabbarShowIcon"

+ 2 - 2
packages/business/widgets/src/theme-toggle/theme-toggle.vue

@@ -39,12 +39,12 @@ const PRESETS = [
   {
     icon: IcRoundWbSunny,
     name: 'light',
-    title: $t('preferences.light'),
+    title: $t('preferences.theme.light'),
   },
   {
     icon: MdiMoonAndStars,
     name: 'dark',
-    title: $t('preferences.dark'),
+    title: $t('preferences.theme.dark'),
   },
   {
     icon: IcRoundMotionPhotosAuto,

+ 89 - 83
packages/locales/src/langs/en-US.yaml

@@ -1,3 +1,35 @@
+page:
+  demos:
+    title: Demos
+    nested:
+      title: Nested Menu
+      menu1: Menu 1
+      menu2: Menu 2
+      menu21: Menu 2-1
+      menu3: Menu 3
+      menu31: Menu 3-1
+      menu32: Menu 3-2
+      menu321: Menu 3-2-1
+    outside:
+      title: External Page
+      embedded: embedded Page
+      external-link: External Link
+    fallback:
+      title: Exception Page
+  essentials:
+    login: Login
+    register: Register
+    code-login: Code Login
+    qrcode-login: Qrcode Login
+    forget-password: Forget Password
+  dashboard:
+    title: Dashboard
+    analytics: Analytics
+    workspace: Workspace
+  vben:
+    about: About
+    document: Document
+
 common:
   back: Back
   back-to-home: Back To Home
@@ -6,15 +38,9 @@ common:
   prompt: Prompt
   cancel: Cancel
   confirm: Comfirm
-  search: Search
   not-data: No data
   refresh: Refresh
 
-layout:
-  center: Align Center
-  align-left: Align Left
-  align-right: Align Right
-
 fallback:
   page-not-found: Oops! Page Not Found
   page-not-found-desc: Sorry, we couldn't find the page you were looking for.
@@ -36,33 +62,32 @@ widgets:
   notifications: Notifications
   make-all-as-read: Make all as read
   clear-notifications: Clear
-
-search:
-  search: Search
-  search-navigate: Search Navigate
-  select: To select
-  navigate: To navigate
-  close: To close
-  no-results: No results for
-  no-recent: No recent searches
-  recent: Recent
+  search:
+    title: Search
+    search-navigate: Search Navigate
+    select: To select
+    navigate: To navigate
+    close: To close
+    no-results: No results for
+    no-recent: No recent searches
+    recent: Recent
 
 authentication:
-  layout-title: Plug-and-play backend system
-  layout-desc: Efficient, versatile frontend template
+  welcome-back: Welcome Back
+  page-title: Plug-and-play backend system
+  page-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?
+  remember-me: Remember Me
   create-an-account: Create an account
   create-account: Create account
   already-account: Already have an account?
-  remember-me: Remember Me
+  account-tip: Don't have an account yet?
   sign-up: Sign Up
   sign-up-subtitle: Make managing your applications simple and fun
   comfirm-password: Comfirm Password
@@ -90,51 +115,21 @@ authentication:
   send-code: Get Security code
   send-text: "Reacquire in {0}s"
   third-party-login: Or continue with
-
-page:
-  essentials:
-    login: Login
-    register: Register
-    code-login: Code Login
-    qrcode-login: Qrcode Login
-    forget-password: Forget Password
-  dashboard:
-    title: Dashboard
-    analytics: Analytics
-    workspace: Workspace
-  vben:
-    about: About
-    document: Document
-  outside:
-    title: External Page
-    embedded: embedded Page
-    external-link: External Link
-  nested:
-    title: Nested Menu
-    menu1: Menu 1
-    menu2: Menu 2
-    menu21: Menu 2-1
-    menu3: Menu 3
-    menu31: Menu 3-1
-    menu32: Menu 3-2
-    menu321: Menu 3-2-1
-  fallback:
-    title: Exception Page
+  layout:
+    center: Align Center
+    align-left: Align Left
+    align-right: Align Right
 
 preferences:
   title: Preferences
   subtitle: Customize Preferences & Preview in Real Time
   reset-tip: The data has changed, click to reset
-  ai-assistant: Ai Assistant
+  # appearance
   appearance: Appearance
-  theme-color: Theme Color
+  # layout
   layout: Layout
-  general: General
   content: Content
   other: Other
-  light: Light
-  dark: Dark
-  dark-menu: Semi Dark Menu
   wide: Fluid
   compact: Fixed Width
   follow-system: Follow System
@@ -151,29 +146,34 @@ preferences:
   full-content-tip: Display only the main content, no menus
   weak-mode: Color Weak Mode
   gray-mode: Gray Mode
-  language: Language
-  dynamic-title: Dynamic Title
   normal: Normal
   plain: Plain
   rounded: Rounded
   collapse: Collpase Menu
   collapse-show-title: Display menu name
-  navigation-menu: Navigation Menu
-  navigation-style: Navigation menu style
-  navigation-split: Navigation Menu Separation
-  navigation-accordion: Sidebar Navigation Menu Accordion mode
-  navigation-split-tip: When enabled, the sidebar shows the top bar's submenu
   interface-control: Interface Layout Control
   copy: Copy Preferences
   copy-success: Copy successful. Please replace in `src/preferences.ts` of the app
   reset-success: Preferences reset successfully
   sidebar: Sidebar
   side-visible: Display Sidebar
-  tabs-visible: Display Tab Bar
-  tabs: Tabs
-  tabs-icon: Display Tabbar Icon
   mode: Mode
   logo-visible: Display Logo
+  # general
+  general: General
+  language: Language
+  dynamic-title: Dynamic Title
+  ai-assistant: Ai Assistant
+  tabbar:
+    title: Tabbar
+    enable: Enable Tab Bar
+    icon: Display Tabbar Icon
+  navigation-menu:
+    title: Navigation Menu
+    style: Navigation menu style
+    split: Navigation Menu Separation
+    accordion: Sidebar Navigation Menu Accordion mode
+    split-tip: When enabled, the sidebar shows the top bar's submenu
   breadcrumb:
     title: Breadcrumb
     home: Display the home button
@@ -189,23 +189,29 @@ preferences:
     progress: Page transition progress
   theme:
     title: Theme
-    builtin: Built-in
     radius: Radius
-    default: Default
-    violet: Violet
-    pink: Pink
-    rose: Rose
-    sky-blue: Sky Blue
-    deep-blue: Deep Blue
-    green: Green
-    deep-green: Deep Green
-    orange: Orange
-    yellow: Yellow
-    zinc: Zinc
-    neutral: Neutral
-    slate: Slate
-    gray: Gray
-    custom: Custom
+    light: Light
+    dark: Dark
+    dark-menu: Semi Dark Menu
+    weak-mode: Color Weak Mode
+    gray-mode: Gray Mode
+    builtin:
+      title: Built-in
+      default: Default
+      violet: Violet
+      pink: Pink
+      rose: Rose
+      sky-blue: Sky Blue
+      deep-blue: Deep Blue
+      green: Green
+      deep-green: Deep Green
+      orange: Orange
+      yellow: Yellow
+      zinc: Zinc
+      neutral: Neutral
+      slate: Slate
+      gray: Gray
+      custom: Custom
   header:
     title: Header
     visible: Display Header

+ 91 - 85
packages/locales/src/langs/zh-CN.yaml

@@ -1,3 +1,35 @@
+page:
+  demos:
+    title: 演示
+    nested:
+      title: 嵌套菜单
+      menu1: 菜单 1
+      menu2: 菜单 2
+      menu21: 菜单 2-1
+      menu3: 菜单 3
+      menu31: 菜单 3-1
+      menu32: 菜单 3-2
+      menu321: 菜单 3-2-1
+    outside:
+      title: 外部页面
+      embedded: 内嵌
+      external-link: 外链
+    fallback:
+      title: 异常页面
+  essentials:
+    login: 登陆
+    register: 注册
+    code-login: 验证码登陆
+    qrcode-login: 二维码登陆
+    forget-password: 忘记密码
+  dashboard:
+    title: 概览
+    analytics: 分析页
+    workspace: 工作台
+  vben:
+    about: 关于
+    document: 文档
+
 common:
   back: 返回
   back-to-home: 返回首页
@@ -9,11 +41,6 @@ common:
   not-data: 暂无数据
   refresh: 刷新
 
-layout:
-  center: 居中
-  align-left: 居左
-  align-right: 居右
-
 fallback:
   page-not-found: 哎呀!未找到页面
   page-not-found-desc: 抱歉,我们无法找到您要找的页面。
@@ -35,23 +62,22 @@ widgets:
   notifications: 通知
   make-all-as-read: 全部标记为已读
   clear-notifications: 清空
-
-search:
-  search: 搜索
-  search-navigate: 搜索导航菜单
-  select: 选择
-  navigate: 导航
-  close: 关闭
-  no-results: 未找到搜索结果
-  no-recent: 没有搜索历史
-  recent: 搜索历史
+  search:
+    title: 搜索
+    search-navigate: 搜索导航菜单
+    select: 选择
+    navigate: 导航
+    close: 关闭
+    no-results: 未找到搜索结果
+    no-recent: 没有搜索历史
+    recent: 搜索历史
 
 authentication:
-  layout-title: 开箱即用的大型中后台管理系统
-  layout-desc: 工程化、高性能、跨组件库的前端模版
+  welcome-back: 欢迎回来
+  page-title: 开箱即用的大型中后台管理系统
+  page-desc: 工程化、高性能、跨组件库的前端模版
   login-success: 登录成功
   login-success-desc: 欢迎回来
-  welcome-back: 欢迎回来
   login-subtitle: 请输入您的帐户信息以开始管理您的项目
   username: 账号
   password: 密码
@@ -89,57 +115,26 @@ authentication:
   send-code: 获取验证码
   send-text: "{0}秒后重新获取"
   third-party-login: 其他登录方式
-
-page:
-  essentials:
-    login: 登陆
-    register: 注册
-    code-login: 验证码登陆
-    qrcode-login: 二维码登陆
-    forget-password: 忘记密码
-  dashboard:
-    title: 概览
-    analytics: 分析页
-    workspace: 工作台
-  vben:
-    about: 关于
-    document: 文档
-  outside:
-    title: 外部页面
-    embedded: 内嵌
-    external-link: 外链
-  nested:
-    title: 嵌套菜单
-    menu1: 菜单 1
-    menu2: 菜单 2
-    menu21: 菜单 2-1
-    menu3: 菜单 3
-    menu31: 菜单 3-1
-    menu32: 菜单 3-2
-    menu321: 菜单 3-2-1
-  fallback:
-    title: 异常页面
+  layout:
+    center: 居中
+    align-left: 居左
+    align-right: 居右
 
 preferences:
   title: 偏好设置
   subtitle: 自定义偏好设置 & 实时预览
   reset-tip: 数据有变化,点击可进行重置
+  # appearance
   appearance: 外观
-  theme-color: 主题色
+  # layout
   layout: 布局
-  general: 通用
   content: 内容
   other: 其它
-  light: 浅色
-  dark: 深色
-  dark-menu: 深色菜单
-  language: 语言
-  dynamic-title: 动态标题
-  ai-assistant: Ai 助手
-  collapse: 折叠菜单
-  collapse-show-title: 显示菜单名
   wide: 流式
   compact: 定宽
+  follow-system: 跟随系统
+  collapse: 折叠菜单
+  collapse-show-title: 显示菜单名
   vertical: 垂直
   vertical-tip: 侧边垂直菜单模式
   horizontal: 水平
@@ -151,14 +146,6 @@ preferences:
   split-menu: 切割菜单
   full-content: 内容全屏
   full-content-tip: 不显示任何菜单,只显示内容主体
-  follow-system: 跟随系统
-  weak-mode: 色弱模式
-  gray-mode: 灰色模式
-  navigation-menu: 导航菜单
-  navigation-style: 导航菜单风格
-  navigation-accordion: 侧边导航菜单手风琴模式
-  navigation-split: 导航菜单分离
-  navigation-split-tip: 开启时,侧边栏显示顶栏对应菜单的子菜单
   interface-control: 界面布局控制
   normal: 默认
   plain: 朴素
@@ -168,11 +155,24 @@ preferences:
   reset-success: 重置偏好设置成功
   sidebar: 侧边栏
   side-visible: 显示侧边栏
-  tabs-visible: 显示标签栏
-  tabs: 标签栏
-  tabs-icon: 显示标签栏图标
   mode: 模式
   logo-visible: 显示 Logo
+  # general
+  general: 通用
+  language: 语言
+  dynamic-title: 动态标题
+  ai-assistant: Ai 助手
+
+  tabbar:
+    title: 标签栏
+    enable: 启用标签栏
+    icon: 显示标签栏图标
+  navigation-menu:
+    title: 导航菜单
+    style: 导航菜单风格
+    accordion: 侧边导航菜单手风琴模式
+    split: 导航菜单分离
+    split-tip: 开启时,侧边栏显示顶栏对应菜单的子菜单
   breadcrumb:
     title: 面包屑导航
     enable: 开启面包屑导航
@@ -188,23 +188,29 @@ preferences:
     progress: 页面切换进度条
   theme:
     title: 主题
-    builtin: 内置主题
     radius: 圆角
-    default: 默认
-    violet: 紫罗兰
-    pink: 樱花粉
-    rose: 玫瑰红
-    sky-blue: 天蓝色
-    deep-blue: 深蓝色
-    green: 浅绿色
-    deep-green: 深绿色
-    orange: 橙黄色
-    yellow: 柠檬黄
-    zinc: 锌色灰
-    neutral: 中性色
-    slate: 石板灰
-    gray: 中灰色
-    custom: 自定义
+    light: 浅色
+    dark: 深色
+    dark-menu: 深色菜单
+    weak-mode: 色弱模式
+    gray-mode: 灰色模式
+    builtin:
+      title: 内置主题
+      default: 默认
+      violet: 紫罗兰
+      pink: 樱花粉
+      rose: 玫瑰红
+      sky-blue: 天蓝色
+      deep-blue: 深蓝色
+      green: 浅绿色
+      deep-green: 深绿色
+      orange: 橙黄色
+      yellow: 柠檬黄
+      zinc: 锌色灰
+      neutral: 中性色
+      slate: 石板灰
+      gray: 中灰色
+      custom: 自定义
   header:
     title: 顶栏
     mode-static: 静止

+ 44 - 44
pnpm-lock.yaml

@@ -18,8 +18,8 @@ importers:
         specifier: ^0.5.0
         version: 0.5.0(encoding@0.1.13)
       '@changesets/cli':
-        specifier: ^2.27.6
-        version: 2.27.6
+        specifier: ^2.27.7
+        version: 2.27.7
       '@ls-lint/ls-lint':
         specifier: ^2.2.3
         version: 2.2.3
@@ -342,8 +342,8 @@ importers:
         specifier: ^5.0.7
         version: 5.0.7
       pkg-types:
-        specifier: ^1.1.1
-        version: 1.1.1
+        specifier: ^1.1.2
+        version: 1.1.2
       prettier:
         specifier: ^3.3.2
         version: 3.3.2
@@ -357,8 +357,8 @@ importers:
   internal/tailwind-config:
     dependencies:
       '@iconify/json':
-        specifier: ^2.2.223
-        version: 2.2.223
+        specifier: ^2.2.224
+        version: 2.2.224
       '@iconify/tailwind':
         specifier: ^1.1.1
         version: 1.1.1
@@ -1775,11 +1775,11 @@ packages:
     resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==}
     engines: {node: '>=6.9.0'}
 
-  '@changesets/apply-release-plan@7.0.3':
-    resolution: {integrity: sha512-klL6LCdmfbEe9oyfLxnidIf/stFXmrbFO/3gT5LU5pcyoZytzJe4gWpTBx3BPmyNPl16dZ1xrkcW7b98e3tYkA==}
+  '@changesets/apply-release-plan@7.0.4':
+    resolution: {integrity: sha512-HLFwhKWayKinWAul0Vj+76jVx1Pc2v55MGPVjZ924Y/ROeSsBMFutv9heHmCUj48lJyRfOTJG5+ar+29FUky/A==}
 
-  '@changesets/assemble-release-plan@6.0.2':
-    resolution: {integrity: sha512-n9/Tdq+ze+iUtjmq0mZO3pEhJTKkku9hUxtUadW30jlN7kONqJG3O6ALeXrmc6gsi/nvoCuKjqEJ68Hk8RbMTQ==}
+  '@changesets/assemble-release-plan@6.0.3':
+    resolution: {integrity: sha512-bLNh9/Lgl1VwkjWZTq8JmRqH+hj7/Yzfz0jsQ/zJJ+FTmVqmqPj3szeKOri8O/hEM8JmHW019vh2gTO9iq5Cuw==}
 
   '@changesets/changelog-git@0.2.0':
     resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==}
@@ -1787,24 +1787,24 @@ packages:
   '@changesets/changelog-github@0.5.0':
     resolution: {integrity: sha512-zoeq2LJJVcPJcIotHRJEEA2qCqX0AQIeFE+L21L8sRLPVqDhSXY8ZWAt2sohtBpFZkBwu+LUwMSKRr2lMy3LJA==}
 
-  '@changesets/cli@2.27.6':
-    resolution: {integrity: sha512-PB7KS5JkCQ4WSXlnfThn8CXAHVwYxFdZvYTimhi12fls/tzj9iimUhKsYwkrKSbw1AiVlGCZtihj5Wkt6siIjA==}
+  '@changesets/cli@2.27.7':
+    resolution: {integrity: sha512-6lr8JltiiXPIjDeYg4iM2MeePP6VN/JkmqBsVA5XRiy01hGS3y629LtSDvKcycj/w/5Eur1rEwby/MjcYS+e2A==}
     hasBin: true
 
-  '@changesets/config@3.0.1':
-    resolution: {integrity: sha512-nCr8pOemUjvGJ8aUu8TYVjqnUL+++bFOQHBVmtNbLvKzIDkN/uiP/Z4RKmr7NNaiujIURHySDEGFPftR4GbTUA==}
+  '@changesets/config@3.0.2':
+    resolution: {integrity: sha512-cdEhS4t8woKCX2M8AotcV2BOWnBp09sqICxKapgLHf9m5KdENpWjyrFNMjkLqGJtUys9U+w93OxWT0czorVDfw==}
 
   '@changesets/errors@0.2.0':
     resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==}
 
-  '@changesets/get-dependents-graph@2.1.0':
-    resolution: {integrity: sha512-QOt6pQq9RVXKGHPVvyKimJDYJumx7p4DO5MO9AhRJYgAPgv0emhNqAqqysSVKHBm4sxKlGN4S1zXOIb5yCFuhQ==}
+  '@changesets/get-dependents-graph@2.1.1':
+    resolution: {integrity: sha512-LRFjjvigBSzfnPU2n/AhFsuWR5DK++1x47aq6qZ8dzYsPtS/I5mNhIGAS68IAxh1xjO9BTtz55FwefhANZ+FCA==}
 
   '@changesets/get-github-info@0.6.0':
     resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==}
 
-  '@changesets/get-release-plan@4.0.2':
-    resolution: {integrity: sha512-rOalz7nMuMV2vyeP7KBeAhqEB7FM2GFPO5RQSoOoUKKH9L6wW3QyPA2K+/rG9kBrWl2HckPVES73/AuwPvbH3w==}
+  '@changesets/get-release-plan@4.0.3':
+    resolution: {integrity: sha512-6PLgvOIwTSdJPTtpdcr3sLtGatT+Jr22+cQwEBJBy6wP0rjB4yJ9lv583J9fVpn1bfQlBkDa8JxbS2g/n9lIyA==}
 
   '@changesets/get-version-range-type@0.4.0':
     resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==}
@@ -2863,8 +2863,8 @@ packages:
     resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
     deprecated: Use @eslint/object-schema instead
 
-  '@iconify/json@2.2.223':
-    resolution: {integrity: sha512-SKQnMyKVehUEYrKDEu/MIochMNFLAdNNGQOez0l6OEyVD6IDyM1vc8vGQFFFXcjHHadaRemxBScWqlimPuYyGA==}
+  '@iconify/json@2.2.224':
+    resolution: {integrity: sha512-VK7nFjtxUeyp+K311SbbeU8cxlZifiUWh0yYaXks4Sj0DTzubKTDMzRCuTcO/QdEQ/0qwDE8m2nn5+wQjS66gQ==}
 
   '@iconify/tailwind@1.1.1':
     resolution: {integrity: sha512-4mmA//qjZigv7D4KlqcVSYTqfRIJzyts2/lSCAJfCL0rVMIE76+ifJnaE5jxCo1+nYGBF8FsFo0qFOs+sX4EnA==}
@@ -6726,8 +6726,8 @@ packages:
     resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
     engines: {node: '>=8'}
 
-  pkg-types@1.1.1:
-    resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==}
+  pkg-types@1.1.2:
+    resolution: {integrity: sha512-VEGf1he2DR5yowYRl0XJhWJq5ktm9gYIsH+y8sNJpHlxch7JPDaufgrsl4vYjd9hMUY8QVjoNncKbow9I7exyA==}
 
   please-upgrade-node@3.2.0:
     resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==}
@@ -9913,10 +9913,10 @@ snapshots:
       '@babel/helper-validator-identifier': 7.24.7
       to-fast-properties: 2.0.0
 
-  '@changesets/apply-release-plan@7.0.3':
+  '@changesets/apply-release-plan@7.0.4':
     dependencies:
       '@babel/runtime': 7.24.7
-      '@changesets/config': 3.0.1
+      '@changesets/config': 3.0.2
       '@changesets/get-version-range-type': 0.4.0
       '@changesets/git': 3.0.0
       '@changesets/should-skip-package': 0.1.0
@@ -9930,11 +9930,11 @@ snapshots:
       resolve-from: 5.0.0
       semver: 7.6.2
 
-  '@changesets/assemble-release-plan@6.0.2':
+  '@changesets/assemble-release-plan@6.0.3':
     dependencies:
       '@babel/runtime': 7.24.7
       '@changesets/errors': 0.2.0
-      '@changesets/get-dependents-graph': 2.1.0
+      '@changesets/get-dependents-graph': 2.1.1
       '@changesets/should-skip-package': 0.1.0
       '@changesets/types': 6.0.0
       '@manypkg/get-packages': 1.1.3
@@ -9952,16 +9952,16 @@ snapshots:
     transitivePeerDependencies:
       - encoding
 
-  '@changesets/cli@2.27.6':
+  '@changesets/cli@2.27.7':
     dependencies:
       '@babel/runtime': 7.24.7
-      '@changesets/apply-release-plan': 7.0.3
-      '@changesets/assemble-release-plan': 6.0.2
+      '@changesets/apply-release-plan': 7.0.4
+      '@changesets/assemble-release-plan': 6.0.3
       '@changesets/changelog-git': 0.2.0
-      '@changesets/config': 3.0.1
+      '@changesets/config': 3.0.2
       '@changesets/errors': 0.2.0
-      '@changesets/get-dependents-graph': 2.1.0
-      '@changesets/get-release-plan': 4.0.2
+      '@changesets/get-dependents-graph': 2.1.1
+      '@changesets/get-release-plan': 4.0.3
       '@changesets/git': 3.0.0
       '@changesets/logger': 0.1.0
       '@changesets/pre': 2.0.0
@@ -9987,10 +9987,10 @@ snapshots:
       spawndamnit: 2.0.0
       term-size: 2.2.1
 
-  '@changesets/config@3.0.1':
+  '@changesets/config@3.0.2':
     dependencies:
       '@changesets/errors': 0.2.0
-      '@changesets/get-dependents-graph': 2.1.0
+      '@changesets/get-dependents-graph': 2.1.1
       '@changesets/logger': 0.1.0
       '@changesets/types': 6.0.0
       '@manypkg/get-packages': 1.1.3
@@ -10001,7 +10001,7 @@ snapshots:
     dependencies:
       extendable-error: 0.1.7
 
-  '@changesets/get-dependents-graph@2.1.0':
+  '@changesets/get-dependents-graph@2.1.1':
     dependencies:
       '@changesets/types': 6.0.0
       '@manypkg/get-packages': 1.1.3
@@ -10016,11 +10016,11 @@ snapshots:
     transitivePeerDependencies:
       - encoding
 
-  '@changesets/get-release-plan@4.0.2':
+  '@changesets/get-release-plan@4.0.3':
     dependencies:
       '@babel/runtime': 7.24.7
-      '@changesets/assemble-release-plan': 6.0.2
-      '@changesets/config': 3.0.1
+      '@changesets/assemble-release-plan': 6.0.3
+      '@changesets/config': 3.0.2
       '@changesets/pre': 2.0.0
       '@changesets/read': 0.6.0
       '@changesets/types': 6.0.0
@@ -10947,7 +10947,7 @@ snapshots:
 
   '@humanwhocodes/object-schema@2.0.3': {}
 
-  '@iconify/json@2.2.223':
+  '@iconify/json@2.2.224':
     dependencies:
       '@iconify/types': 2.0.0
       pathe: 1.1.2
@@ -14338,7 +14338,7 @@ snapshots:
       esbuild: 0.20.2
       jiti: 1.21.6
       pathe: 1.1.2
-      pkg-types: 1.1.1
+      pkg-types: 1.1.2
       tsx: 4.16.0
     transitivePeerDependencies:
       - supports-color
@@ -14973,7 +14973,7 @@ snapshots:
       mlly: 1.7.1
       mri: 1.2.0
       pathe: 1.1.2
-      pkg-types: 1.1.1
+      pkg-types: 1.1.2
       postcss: 8.4.39
       postcss-nested: 6.0.1(postcss@8.4.39)
       semver: 7.6.2
@@ -14986,7 +14986,7 @@ snapshots:
     dependencies:
       acorn: 8.12.0
       pathe: 1.1.2
-      pkg-types: 1.1.1
+      pkg-types: 1.1.2
       ufo: 1.5.3
 
   mockjs@1.1.0:
@@ -15330,7 +15330,7 @@ snapshots:
     dependencies:
       find-up: 4.1.0
 
-  pkg-types@1.1.1:
+  pkg-types@1.1.2:
     dependencies:
       confbox: 0.1.7
       mlly: 1.7.1
@@ -16922,7 +16922,7 @@ snapshots:
       mkdist: 1.5.1(sass@1.77.6)(typescript@5.5.2)(vue-tsc@2.0.24(typescript@5.5.2))
       mlly: 1.7.1
       pathe: 1.1.2
-      pkg-types: 1.1.1
+      pkg-types: 1.1.2
       pretty-bytes: 6.1.1
       rollup: 3.29.4
       rollup-plugin-dts: 6.1.1(rollup@3.29.4)(typescript@5.5.2)