@done-coding/admin-core 0.12.1 → 0.12.2-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +1 -48
  2. package/es/bridge/index.mjs +75 -72
  3. package/es/bridge/layout.mjs +51 -0
  4. package/es/bridge/theme/index.mjs +1 -1
  5. package/es/bridge/theme/persist.mjs +1 -1
  6. package/es/components/app-layout/AppAside.vue.mjs +2 -2
  7. package/es/components/app-layout/AppAside.vue2.mjs +27 -10
  8. package/es/components/app-layout/AppCollapseToggle.vue.mjs +7 -0
  9. package/es/components/app-layout/AppCollapseToggle.vue2.mjs +54 -0
  10. package/es/components/app-layout/AppFooter.vue.mjs +1 -1
  11. package/es/components/app-layout/AppHeader.vue.mjs +3 -3
  12. package/es/components/app-layout/AppHeader.vue2.mjs +1 -1
  13. package/es/components/app-layout/AppLayout.vue.mjs +2 -2
  14. package/es/components/app-layout/AppLayout.vue2.mjs +3 -3
  15. package/es/components/app-layout/AppSidebar.vue.mjs +2 -2
  16. package/es/components/app-layout/AppSidebar.vue2.mjs +41 -61
  17. package/es/components/app-layout/AppTheme.vue.mjs +3 -3
  18. package/es/components/app-layout/viewport.mjs +3 -3
  19. package/es/components/display/TabsHeader.vue.mjs +4 -4
  20. package/es/components/form/FormItemNestForm.vue.mjs +2 -2
  21. package/es/components/form/FormItemNestFormList.vue.mjs +2 -2
  22. package/es/components/form/FormSubmitPanel.vue.mjs +1 -1
  23. package/es/components/form/FormVerifyImage.vue.mjs +1 -1
  24. package/es/components/table/TableToolbar.vue.mjs +3 -3
  25. package/es/hooks/{use-admin-theme-apply.mjs → use-theme-apply.mjs} +62 -62
  26. package/es/hooks/use-viewport-apply.mjs +39 -0
  27. package/es/index.mjs +88 -88
  28. package/es/inject/key.mjs +13 -13
  29. package/es/store/app.mjs +69 -62
  30. package/es/style.css +1 -1
  31. package/package.json +6 -8
  32. package/types/bridge/config-hook.d.ts +0 -68
  33. package/types/bridge/index.d.ts +18 -417
  34. package/types/bridge/layout.d.ts +25 -0
  35. package/types/bridge/plugin.d.ts +12 -30
  36. package/types/bridge/route.d.ts +1 -20
  37. package/types/bridge/state.d.ts +0 -14
  38. package/types/bridge/storage.d.ts +0 -9
  39. package/types/bridge/theme/index.d.ts +1 -8
  40. package/types/bridge/theme/persist.d.ts +3 -15
  41. package/types/bridge/theme/system-dark.d.ts +0 -12
  42. package/types/bridge/theme/types.d.ts +27 -265
  43. package/types/components/app-layout/AppAside.vue.d.ts +0 -1
  44. package/types/components/app-layout/AppCollapseToggle.vue.d.ts +11 -0
  45. package/types/components/app-layout/AppHeader.vue.d.ts +0 -3
  46. package/types/components/app-layout/AppLayout.vue.d.ts +0 -12
  47. package/types/components/app-layout/AppPage.vue.d.ts +0 -2
  48. package/types/components/app-layout/AppSidebar.vue.d.ts +0 -2
  49. package/types/components/app-layout/types.d.ts +2 -127
  50. package/types/components/app-layout/viewport.d.ts +2 -30
  51. package/types/components/data-view/DataListViewItem.vue.d.ts +0 -8
  52. package/types/components/data-view/index.d.ts +0 -4
  53. package/types/components/data-view/types.d.ts +0 -41
  54. package/types/components/data-view/utils.d.ts +0 -3
  55. package/types/components/display/TabsHeader.vue.d.ts +0 -2
  56. package/types/components/display/TabsMain.vue.d.ts +0 -2
  57. package/types/components/display/TabsRefineFlow.vue.d.ts +0 -1
  58. package/types/components/display/index.d.ts +1 -37
  59. package/types/components/display/types.d.ts +0 -131
  60. package/types/components/form/FormItemNestForm.vue.d.ts +0 -5
  61. package/types/components/form/FormItemNestFormList.vue.d.ts +0 -17
  62. package/types/components/form/FormVerifyCode.vue.d.ts +0 -9
  63. package/types/components/form/FormVerifyImage.vue.d.ts +0 -1
  64. package/types/components/form/form-search-utils.d.ts +0 -14
  65. package/types/components/form/nest-form-item-list.d.ts +0 -28
  66. package/types/components/form/nest-form-item.d.ts +0 -21
  67. package/types/components/form/nest-registry.d.ts +0 -14
  68. package/types/components/form/types.d.ts +8 -185
  69. package/types/components/form/use-form-submit.d.ts +0 -12
  70. package/types/components/form/use-nest-form-list.d.ts +0 -13
  71. package/types/components/form/use-nest-form.d.ts +0 -15
  72. package/types/components/form/use-nest-layout-scale.d.ts +0 -12
  73. package/types/components/form/utils.d.ts +1 -56
  74. package/types/components/list-page/ListPage.vue.d.ts +0 -6
  75. package/types/components/list-page/types.d.ts +2 -19
  76. package/types/components/misc/index.d.ts +1 -6
  77. package/types/components/misc/types.d.ts +0 -6
  78. package/types/components/modal/ConfirmModal.vue.d.ts +0 -10
  79. package/types/components/modal/modal-shelf-core.d.ts +0 -3
  80. package/types/components/modal/modal-shelf-hierarchy.d.ts +0 -4
  81. package/types/components/modal/modal-shelf-types.d.ts +0 -34
  82. package/types/components/modal/types.d.ts +1 -20
  83. package/types/components/panel/PanelItemNestForm.vue.d.ts +0 -6
  84. package/types/components/panel/PanelItemNestPanel.vue.d.ts +0 -5
  85. package/types/components/panel/nest-panel-form.d.ts +0 -21
  86. package/types/components/panel/nest-panel-item.d.ts +0 -14
  87. package/types/components/panel/types.d.ts +1 -49
  88. package/types/components/table/types.d.ts +9 -124
  89. package/types/config/list-model.d.ts +0 -29
  90. package/types/config/route.d.ts +0 -2
  91. package/types/helpers/form.d.ts +0 -5
  92. package/types/helpers/list-helper.d.ts +0 -26
  93. package/types/helpers/types.d.ts +0 -11
  94. package/types/hooks/activated.d.ts +0 -10
  95. package/types/hooks/feel-size.d.ts +0 -2
  96. package/types/hooks/index.d.ts +2 -2
  97. package/types/hooks/menus-dispatch.d.ts +0 -4
  98. package/types/hooks/timeout.d.ts +0 -4
  99. package/types/hooks/use-channel-viewport-height.d.ts +0 -14
  100. package/types/hooks/use-theme-apply.d.ts +11 -0
  101. package/types/hooks/use-viewport-apply.d.ts +8 -0
  102. package/types/inject/key.d.ts +2 -87
  103. package/types/router/guard/index.d.ts +0 -13
  104. package/types/router/guard/login.d.ts +0 -1
  105. package/types/router/guard/permission.d.ts +0 -1
  106. package/types/router/guard/types.d.ts +2 -5
  107. package/types/store/app.d.ts +10 -31
  108. package/types/store/router-permission.d.ts +2 -55
  109. package/types/store/user.d.ts +2 -26
  110. package/types/types/dot-path.d.ts +0 -8
  111. package/types/types/route.d.ts +0 -45
  112. package/types/types/utility-types.d.ts +0 -7
  113. package/types/utils/export.d.ts +1 -16
  114. package/types/utils/id.d.ts +0 -1
  115. package/types/utils/router.d.ts +0 -2
  116. package/types/utils/theme-scale.d.ts +0 -31
  117. package/types/utils/time.d.ts +0 -1
  118. package/docs/TECH_SNAPSHOT.md +0 -146
  119. package/docs/nested-config-paradigm.md +0 -80
  120. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/RETROSPECTIVE.md +0 -63
  121. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/design.md +0 -575
  122. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/landing-authorizations/2026-05-09-080900-/346/234/2371-/345/205/245/345/256/236/346/226/275/346/216/210/346/235/203.md +0 -107
  123. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/project-orchestration.md +0 -58
  124. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/requirements.md +0 -238
  125. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/tasks.md +0 -290
  126. package/es/hooks/use-admin-viewport-apply.mjs +0 -39
  127. package/types/hooks/use-admin-theme-apply.d.ts +0 -34
  128. package/types/hooks/use-admin-viewport-apply.d.ts +0 -20
@@ -0,0 +1,25 @@
1
+ import { Ref, DeepReadonly } from 'vue';
2
+ import { StorageLike } from './index';
3
+ export declare const DEFAULT_LAYOUT_STORAGE_KEY = "dc-core-layout";
4
+ export interface LayoutCollapsePersistShape {
5
+ sidebarCollapsed: boolean;
6
+ asideCollapsed: boolean;
7
+ }
8
+ export interface BridgeLayoutInit {
9
+ storage: StorageLike;
10
+ storageKey?: string;
11
+ defaultSidebarCollapsed?: boolean;
12
+ defaultAsideCollapsed?: boolean;
13
+ }
14
+ export interface CoreLayoutModule {
15
+ readonly sidebarCollapsed: DeepReadonly<Ref<boolean>>;
16
+ readonly asideCollapsed: DeepReadonly<Ref<boolean>>;
17
+ setSidebarCollapse: (collapsed: boolean) => void;
18
+ toggleSidebar: () => void;
19
+ setAsideCollapse: (collapsed: boolean) => void;
20
+ toggleAside: () => void;
21
+ }
22
+ export interface BridgeLayoutHook {
23
+ layout: CoreLayoutModule;
24
+ }
25
+ export declare function createBridgeLayoutHook(init: BridgeLayoutInit): BridgeLayoutHook;
@@ -1,39 +1,21 @@
1
- import { AdminBridge } from './index';
1
+ import { CoreBridge } from './index';
2
2
  import { UpdatableConfigKey, UpdatableConfigMap } from './config-hook';
3
- /**
4
- * 插件可访问的 bridge 视图。
5
- *
6
- * 屏蔽运行时编排入口、auth facade 与业务 API;需要业务动作时由插件 options 承接。
7
- */
8
- export type AdminBridgePluginBridgeSlice<UserInfo = unknown, LoginParams = unknown> = Omit<AdminBridge<UserInfo, LoginParams>, "init" | "register" | "getToken" | "goToLogin" | "refreshToken" | "refreshAuth" | "loginApi" | "logoutApi" | "getUserInfoApi" | "refreshTokenApi" | "use" | "install">;
9
- /**
10
- * admin bridge 插件安装上下文。
11
- *
12
- * 插件只通过公开 bridge 实例与受控 action 工作,不访问 bridge 内部闭包状态。
13
- */
14
- export interface AdminBridgePluginContext<UserInfo = unknown, LoginParams = unknown> {
15
- /** 当前安装插件的 bridge 可用能力 */
16
- bridge: AdminBridgePluginBridgeSlice<UserInfo, LoginParams>;
17
- /** 配置更新 action 的便捷引用 */
3
+ export type CoreBridgePluginBridgeSlice<UserInfo = unknown, LoginParams = unknown> = Omit<CoreBridge<UserInfo, LoginParams>, "init" | "register" | "getToken" | "goToLogin" | "refreshToken" | "refreshAuth" | "loginApi" | "logoutApi" | "getUserInfoApi" | "refreshTokenApi" | "use" | "install">;
4
+ export interface CoreBridgePluginContext<UserInfo = unknown, LoginParams = unknown> {
5
+ bridge: CoreBridgePluginBridgeSlice<UserInfo, LoginParams>;
18
6
  update: <K extends UpdatableConfigKey>(key: K, partial: Partial<UpdatableConfigMap[K]>) => void;
19
7
  }
20
- /** admin bridge 插件安装函数。 */
21
- export type AdminBridgePluginInstall<UserInfo = unknown, LoginParams = unknown, Options = unknown> = (ctx: AdminBridgePluginContext<UserInfo, LoginParams>, options?: Options) => void;
22
- /** admin bridge 对象插件。 */
23
- export interface AdminBridgePlugin<UserInfo = unknown, LoginParams = unknown, Options = unknown> {
24
- /** 插件名;存在时用于跨对象实例的幂等安装 */
8
+ export type CoreBridgePluginInstall<UserInfo = unknown, LoginParams = unknown, Options = unknown> = (ctx: CoreBridgePluginContext<UserInfo, LoginParams>, options?: Options) => void;
9
+ export interface CoreBridgePlugin<UserInfo = unknown, LoginParams = unknown, Options = unknown> {
25
10
  name?: string;
26
- /** 插件安装函数 */
27
- install: AdminBridgePluginInstall<UserInfo, LoginParams, Options>;
11
+ install: CoreBridgePluginInstall<UserInfo, LoginParams, Options>;
28
12
  }
29
- /** admin bridge 支持函数插件与对象插件两种形态。 */
30
- export type AdminBridgePluginLike<UserInfo = unknown, LoginParams = unknown, Options = unknown> = AdminBridgePlugin<UserInfo, LoginParams, Options> | AdminBridgePluginInstall<UserInfo, LoginParams, Options>;
31
- /** 创建单个 bridge 实例专属的插件安装宿主。 */
13
+ export type CoreBridgePluginLike<UserInfo = unknown, LoginParams = unknown, Options = unknown> = CoreBridgePlugin<UserInfo, LoginParams, Options> | CoreBridgePluginInstall<UserInfo, LoginParams, Options>;
32
14
  export declare function createBridgePluginHost<UserInfo = unknown, LoginParams = unknown>(): {
33
15
  use: <Options = unknown>(payload: {
34
- bridge: AdminBridge<UserInfo, LoginParams>;
35
- update: AdminBridgePluginContext<UserInfo, LoginParams>["update"];
36
- plugin: AdminBridgePluginLike<UserInfo, LoginParams, Options>;
16
+ bridge: CoreBridge<UserInfo, LoginParams>;
17
+ update: CoreBridgePluginContext<UserInfo, LoginParams>["update"];
18
+ plugin: CoreBridgePluginLike<UserInfo, LoginParams, Options>;
37
19
  options?: Options;
38
- }) => AdminBridge<UserInfo, LoginParams>;
20
+ }) => CoreBridge<UserInfo, LoginParams>;
39
21
  };
@@ -1,36 +1,17 @@
1
1
  import { RouteRecordRaw } from 'vue-router';
2
2
  import { RouteMetaResolveRaw } from '../types';
3
- /** 路由元信息默认配置(工厂参数最小 shape) */
4
3
  export interface RouteMetaDefaultConfig {
5
- /** 各路由[未配置情况下]默认是否展示在菜单 */
6
4
  menuShow: boolean;
7
- /** 各路由[未配置情况下]默认是否需要登录 */
8
5
  needLogin: boolean;
9
6
  }
10
- /**
11
- * 创建路由元信息解析 raw 树生成器
12
- * ---
13
- * 工厂模式:app 层传入 metaDefault 配置(含 menuShow / needLogin 默认值)
14
- *
15
- * @example
16
- * const generateRouteMetaRawTree = createGenerateRouteMetaRawTree(APP_ROUTER_META_DEFAULT_CONFIG);
17
- * const tree = generateRouteMetaRawTree(routes, { ... });
18
- */
19
7
  export declare const createGenerateRouteMetaRawTree: (metaDefault: RouteMetaDefaultConfig) => <T extends {
20
8
  children: T[];
21
9
  } = RouteMetaResolveRaw>(routesList: RouteRecordRaw[], { parentPath, parentPathList, routeLevel, sortFn, mapFn, filterFn, }?: Partial<Pick<RouteMetaResolveRaw, "parentPath" | "parentPathList" | "routeLevel"> & {
22
- /** 排序函数 */
23
10
  sortFn?: (a: T, b: T) => number;
24
- /** 映射函数 */
25
11
  mapFn: (route: Omit<RouteMetaResolveRaw, "children"> & {
26
12
  children: T[];
27
13
  }) => T;
28
- /** 过滤函数 */
29
14
  filterFn: (raw: Omit<RouteMetaResolveRaw, "children"> & {
30
15
  children: T[];
31
- },
32
- /** 是否有符合过滤条件的子路由 */
33
- haveChildren: boolean,
34
- /** [原始配置]是否有子路由 */
35
- haveChildrenRaw: boolean) => boolean;
16
+ }, haveChildren: boolean, haveChildrenRaw: boolean) => boolean;
36
17
  }>) => T[];
@@ -1,23 +1,9 @@
1
1
  export interface UseStateOptions {
2
- /** 是否调试 */
3
2
  debug: boolean;
4
- /** 模块命名空间 */
5
3
  moduleKey: string;
6
- /** 缓存 */
7
4
  cache?: boolean;
8
- /** 缓存实现 */
9
5
  storage?: Storage;
10
6
  }
11
- /**
12
- * 创建 useState 工厂
13
- * ---
14
- * 工厂模式:app 层传入命名空间,core 不感知具体值
15
- *
16
- * @example
17
- * const useState = createUseState("myapp");
18
- * const moduleState = useState({ count: 0 }, { debug: true, moduleKey: "counter" });
19
- * // cacheKey 形如 "myapp/useState/counter"
20
- */
21
7
  export declare const createUseState: (factoryNamespace: string) => <S extends Record<string, any> = Record<string, any>>(initState: S | (() => S), { debug, moduleKey, cache, storage }?: UseStateOptions) => {
22
8
  state: any;
23
9
  getStateInit: () => S;
@@ -1,10 +1 @@
1
- /**
2
- * 创建带命名空间的 localStorage 实例
3
- * ---
4
- * 工厂模式:app 层传入命名空间,core 不感知具体值
5
- *
6
- * @example
7
- * const myStorage = createStorageWithNamespace("myapp");
8
- * myStorage.setItem("token", "xxx"); // 实际写入 localStorage 的 key 为 "myapp/token"
9
- */
10
1
  export declare const createStorageWithNamespace: (namespace: string) => Storage;
@@ -1,10 +1,3 @@
1
1
  import { BridgeThemeHook, BridgeThemeInit } from './types';
2
- /**
3
- * bridge 主题 hook 工厂。
4
- *
5
- * 每次 `createAdminBridge` 调用各自闭包内构造一份(零模块级单例,守实例隔离)。
6
- * init:自动 `add('default', initConfig)`;读持久化恢复 `themeMode` 即时生效、
7
- * `themeStyle` 走「desiredStyle 命中再 apply」时序(插件后注册风格亦能恢复)。
8
- */
9
2
  export declare function createBridgeThemeHook(init: BridgeThemeInit): BridgeThemeHook;
10
- export type { AdminThemePresetLayout, AdminConfigDescription, AdminThemeLifecycleContext, AdminThemeLifecycleHooks, AdminThemeEntry, AdminThemeMode, AdminThemeModule, AdminThemeDensity, AdminThemeMotion, ElSize, AdminThemeComponentDefaults, BridgeThemeLayoutState, BridgeThemeHook, BridgeThemeLayoutBaseline, BridgeThemeInit, } from './types';
3
+ export type { CoreThemePresetLayout, CoreConfigDescription, CoreThemeLifecycleContext, CoreThemeLifecycleHooks, CoreThemeEntry, CoreThemeMode, CoreThemeModule, CoreThemeDensity, CoreThemeMotion, ElSize, CoreThemeComponentDefaults, BridgeThemeLayoutState, BridgeThemeHook, BridgeThemeLayoutBaseline, BridgeThemeInit, } from './types';
@@ -1,23 +1,11 @@
1
1
  import { StorageLike } from '../index';
2
- import { AdminThemeMode } from './types';
3
- /**
4
- * bridge 主题模块**持久化**子模块(升级目录拆出)。
5
- *
6
- * 负责 localStorage 形态的读取 / 兼容迁移:v2 存 `{themeStyle,themeMode}`,读时兼容
7
- * 旧 v1 `themeIsDark` 布尔。写入(`persist()`)在工厂内闭包,复用本文件的 shape 类型。
8
- */
9
- /** core 主题持久化的命名空间 key(命名空间前缀已由 storage 加);缺省值。 */
10
- export declare const DEFAULT_STORAGE_KEY = "admin-core-theme";
11
- /** 持久化载荷(v2:明暗存 mode 三态,取代旧 themeIsDark 布尔)。 */
2
+ import { CoreThemeMode } from './types';
3
+ export declare const DEFAULT_STORAGE_KEY = "dc-core-theme";
12
4
  export interface ThemePersistShape {
13
- /** 当前风格名 */
14
5
  themeStyle: string;
15
- /** 明暗模式三态(亮/暗/跟随系统) */
16
- themeMode: AdminThemeMode;
6
+ themeMode: CoreThemeMode;
17
7
  }
18
- /** 读持久化的兼容形态:除 v2 字段外,兼容旧 v1 `themeIsDark` 布尔(迁移用)。 */
19
8
  export type ThemePersistRead = Partial<ThemePersistShape & {
20
9
  themeIsDark: boolean;
21
10
  }>;
22
- /** 读持久化(JSON.parse 容错;非法/缺失返 null)。返回兼容形态(含旧 themeIsDark)。 */
23
11
  export declare const readPersist: (storage: StorageLike, key: string) => ThemePersistRead | null;
@@ -1,14 +1,2 @@
1
- /**
2
- * bridge 主题模块**系统明暗探测**子模块(升级目录拆出)。
3
- *
4
- * `prefers-color-scheme: dark` 的一次性读取 + 变更监听;无 matchMedia(SSR / 老环境)
5
- * 安全降级。`system` 明暗态下 `themeIsDark` 经此派生。
6
- */
7
- /** 读系统是否偏暗(`prefers-color-scheme: dark`);无 matchMedia(SSR / 老环境)→ false。 */
8
1
  export declare const readSystemPrefersDark: () => boolean;
9
- /**
10
- * 监听系统明暗变化,变更时回调最新值;返回清理函数。
11
- * bridge 为 app 单例无 teardown,当前不主动清理(listener 随 app 常驻,可接受);
12
- * 返回清理函数留作未来 dispose / 测试用。无 matchMedia → noop。
13
- */
14
2
  export declare const watchSystemPrefersDark: (cb: (isDark: boolean) => void) => (() => void);
@@ -1,336 +1,98 @@
1
1
  import { Component, DeepReadonly, Ref } from 'vue';
2
2
  import { AppThemeConfig, AppLayoutHeaderConfig, AppLayoutFooterConfig, AppLayoutSidebarConfig, AppLayoutAsideConfig, AppLayoutBreadcrumbConfig, AppLayoutBodyConfig, AppLayoutViewportConfig, AppLayoutGapConfig, StorageLike } from '../index';
3
3
  import { UpdatableConfigKey, UpdatableConfigMap } from '../config-hook';
4
- /**
5
- * bridge 主题模块**类型面**(从 `bridge/theme.ts` 升级目录拆出,CLAUDE.md 规则 12)。
6
- *
7
- * 纯类型 / 接口定义,无运行时逻辑——工厂在 `./index.ts`、持久化在 `./persist.ts`、
8
- * 系统明暗探测在 `./system-dark.ts`。本文件显式 `import type { Component, DeepReadonly,
9
- * Ref } from "vue"`(规则 9.0:lib build 下 vite-plugin-dts 不靠 auto-import)。
10
- */
11
- /**
12
- * 主题 preset 的 layout 维度(焊缝契约 ④,P1 冻结,跨域共享)。
13
- *
14
- * layout 归属为 theme preset 的一个维度(一个 preset = 一个人格 = 色 + 局一体),
15
- * 单入口 `setStyle` 切换。本结构纯数据可 JSON(除 `shell` 为运行时组件引用)。
16
- *
17
- * **灌值语义 = 基线复位 + 叠加**:bridge init 时快照六组布局 config 为基线;每次
18
- * `setStyle` 先把六组 config 复位到基线、再叠加当前 preset 的 layout partial
19
- * (`bridge.update` 单字段一级浅合并)。无跨 preset 残留、幂等。不带 layout 的老
20
- * preset → 仅复位到 init 基线,零改动可用。
21
- */
22
- export interface AdminThemePresetLayout {
23
- /** header 配置 partial(如 `{height}`),叠加到基线 `APP_LAYOUT_HEADER_CONFIG` */
4
+ export interface CoreThemePresetLayout {
24
5
  header?: Partial<AppLayoutHeaderConfig>;
25
- /** footer 配置 partial(如 `{height}`) */
26
6
  footer?: Partial<AppLayoutFooterConfig>;
27
- /** sidebar 配置 partial(如 `{width, collapseWidth}`) */
28
7
  sidebar?: Partial<AppLayoutSidebarConfig>;
29
- /** aside 右侧补充区配置 partial(如 `{width}`;P1' additive,带布局变更 preset 可配) */
30
8
  aside?: Partial<AppLayoutAsideConfig>;
31
- /** breadcrumb 配置 partial(如 `{height}`) */
32
9
  breadcrumb?: Partial<AppLayoutBreadcrumbConfig>;
33
- /** body 配置 partial(如 `{shimPadding}`) */
34
10
  body?: Partial<AppLayoutBodyConfig>;
35
- /** viewport 边框配置 partial(四边 padding;套框 / 拆框) */
36
11
  viewport?: Partial<AppLayoutViewportConfig>;
37
- /** 模块间距配置 partial(内缝 gap;分离式人格设 `{ size }` 让模块间露底色条带) */
38
12
  gap?: Partial<AppLayoutGapConfig>;
39
- /**
40
- * 编排组件(布局形态)。缺省 → AppLayout 回退内置默认 AppShell(经典布局)。
41
- * 运行时引用(不持久化);setStyle 切走 / 老 preset 无 shell → 回退内置。
42
- * [MUST] markRaw(theme hook add 时自动 markRaw 兜底,防 reactive proxy 化)。
43
- */
44
13
  shell?: Component;
45
- /**
46
- * 数据分流意图(AppLayout 读取执行):提取 1 级路由模块到 header。
47
- * 缺省 / undefined → 复位到 init 默认(false)。
48
- */
49
14
  extractLevel1ToHeader?: boolean;
50
15
  }
51
- /**
52
- * 配置化通用描述(**跨配置块对齐标准**:theme preset / form / table / panel 等配置项复用)。
53
- *
54
- * 一个描述对象,含正反两面——供人 + web agent 选型:
55
- * - `suitable`(正向):什么场景**宜选**。
56
- * - `unsuitable`(反向):什么场景**不宜选**——对 agent,知道何时不该选与该选同等重要。
57
- *
58
- * 定位:高配置化体系 ≈ 运行期 schema(类 zod),本描述是 agent 选型 + 排除入口;结构化
59
- * traits(如 `layout.extractLevel1ToHeader`)机器可读、本符补散文语义。两面均可选。
60
- * 注:展示名 `label` 是 entry 各自的独立字段,不并入本描述对象。
61
- */
62
- export interface AdminConfigDescription {
63
- /** 正向:什么应用 / 场景宜选(如「沉浸式工作台、需上下文面板的应用」)。 */
16
+ export interface CoreConfigDescription {
64
17
  suitable?: string;
65
- /** 反向:什么场景不宜选(agent 排除用,如「表单密集型后台、窄屏移动端」)。 */
66
18
  unsuitable?: string;
67
19
  }
68
- /**
69
- * 主题生命周期钩子上下文(core 注入,仅一个纯值 `id`)。
70
- *
71
- * 只携带 `id`(本钩子针对哪套主题)——供「被多个 preset 复用的同一钩子函数」区分自己
72
- * 正服务于哪套主题(如打 `<style data-admin-theme="<id>">` 标签)。
73
- *
74
- * [MUST NOT] 挂 `document` / DOM 引用(钩子要操作 DOM 直接用全局 `document`,代传 element
75
- * 易致内存泄漏)。**亦不传 `isDark`**:主题的 `<style>` [SHOULD] 一次注入含 `:root{}`(亮)
76
- * + `:root.dark{}`(暗) 双态、明暗由 `<html>.dark` 类名切换自适配(同 core `useAdminThemeApply`
77
- * 范式)——无需按明暗"细化按需加载",`setMode` 也因此不触发钩子(传 isDark 反诱导单态注入 →
78
- * 切明暗即坏,与"setMode 不触发"自相矛盾)。
79
- */
80
- export interface AdminThemeLifecycleContext {
81
- /** 本钩子针对的主题 id(风格 name)。 */
20
+ export interface CoreThemeLifecycleContext {
82
21
  id: string;
83
22
  }
84
- /**
85
- * 主题生命周期钩子(挂 {@link AdminThemeEntry};plugin `AdminThemePreset` 超集透传)。
86
- *
87
- * core 在 `setStyle` 切换时 **try-catch** 调用,让每套主题自管 DOM 副作用——典型:
88
- * 激活时往 `document.head` 注入本主题专属 `<style data-admin-theme="<id>">`、切走前移除,
89
- * 既支持复杂样式(@keyframes / 伪元素 / media)又守资产隔离(只当前主题 style 在 head)。
90
- *
91
- * 触发规则:仅 `setStyle`(风格切换)触发,`setMode`(明暗切换)**不触发**——主题注入的
92
- * style [SHOULD] 含 `:root.dark` 双态由 `.dark` 自适配。钩子抛错仅 warn 吞掉,[MUST NOT]
93
- * 阻断切换、[MUST NOT] 殃及他主题(守资产隔离)。
94
- */
95
- export interface AdminThemeLifecycleHooks {
96
- /**
97
- * 主题**激活后**调用(config / layout 已应用、`themeStyle` 已置新值)。
98
- * 典型:往全局 `document.head` 注入本主题专属 `<style data-admin-theme="<id>">`。
99
- */
100
- onActivate?: (ctx: AdminThemeLifecycleContext) => void;
101
- /**
102
- * 主题**切走前**调用(即将切到别的风格 / 移除当前主题时回退 default 之前)。
103
- * 典型:移除 onActivate 注入的 `<style data-admin-theme="<id>">`,归还干净 head。
104
- *
105
- * 钩子 [SHOULD] **幂等**:移除前先检测目标 `<style>` 是否仍在(`querySelector` 命中再
106
- * removeChild),多次 / 重复清理才稳。core 侧已只在「切走 / 移除**当前**主题」时触发一次
107
- * (非当前主题移除不重复触发),但作者自身幂等是更稳的兜底。
108
- */
109
- onDeactivate?: (ctx: AdminThemeLifecycleContext) => void;
23
+ export interface CoreThemeLifecycleHooks {
24
+ onActivate?: (ctx: CoreThemeLifecycleContext) => void;
25
+ onDeactivate?: (ctx: CoreThemeLifecycleContext) => void;
110
26
  }
111
- /**
112
- * 主题注册项(`bridge.theme.add` 第 2 参)——core 侧主题「preset」结构。
113
- *
114
- * core 不依赖 plugin,故自定义此最小注册形;plugin-theme 的 `AdminThemePreset`
115
- * (含 id/label/description/config)是其结构超集,可整坨直接透传:
116
- * `bridge.theme.add(preset.id, preset)`(多出的 id 作 excess 字段被忽略,label/description 纳入)。
117
- *
118
- * 继承 {@link AdminThemeLifecycleHooks}:可选 `onActivate` / `onDeactivate` 生命周期钩子。
119
- */
120
- export interface AdminThemeEntry extends AdminThemeLifecycleHooks {
121
- /**
122
- * 风格色值(light/dark 两套 `AppThemeColor`)。
123
- *
124
- * 内部做浅快照(`{light:{...},dark:{...}}`)——与调用方对象解耦,且与 bridge
125
- * 响应式 APP_THEME_CONFIG 的 proxy target 解耦(避免切走后反写注册值)。
126
- */
27
+ export interface CoreThemeEntry extends CoreThemeLifecycleHooks {
127
28
  config: AppThemeConfig;
128
- /** 展示名(供 `AppTheme.vue` 下拉显示,如中文「柔光悬浮」);缺省回退注册 name 自身。 */
129
29
  label?: string;
130
- /**
131
- * 描述(自然语言,供人 / web agent 理解选型):分「适合 / 不适合」两面。
132
- *
133
- * 定位:高配置化体系 ≈ 运行期 schema(类 zod),`description` 是 agent「选型 + 排除」
134
- * 的语义入口;结构化 traits(`layout.extractLevel1ToHeader` 等)机器可读、本字段补散文语义。
135
- * 缺省 undefined。见 {@link AdminConfigDescription}。
136
- */
137
- description?: AdminConfigDescription;
138
- /**
139
- * 布局维度(焊缝契约 ④);缺省 → 切到该 preset 仅复位布局基线(不套框、内置 shell、经典分流)。
140
- * 见 {@link AdminThemePresetLayout}。
141
- */
142
- layout?: AdminThemePresetLayout;
143
- /**
144
- * 密度档(节奏维度);缺省 → 切到该 preset 复位为 `'cozy'`。
145
- * 见 {@link AdminThemeDensity}。setStyle 时复位 + 应用(同 layout「基线复位 + 叠加」语义)。
146
- */
147
- density?: AdminThemeDensity;
148
- /**
149
- * 动效档(节奏维度);缺省 → 切到该 preset 复位为 `'standard'`。
150
- * 见 {@link AdminThemeMotion}。
151
- */
152
- motion?: AdminThemeMotion;
153
- /**
154
- * 逐族 EP size 覆盖(**期二消费**,本期仅冻结数据形为焊缝);缺省不覆盖、走 density 档默认。
155
- * 仅声明式 size/border/stripe,[MUST NOT] 收行为(design §9 表现 vs 行为边界)。
156
- * 见 {@link AdminThemeComponentDefaults}。
157
- */
158
- componentDefaults?: AdminThemeComponentDefaults;
30
+ description?: CoreConfigDescription;
31
+ layout?: CoreThemePresetLayout;
32
+ density?: CoreThemeDensity;
33
+ motion?: CoreThemeMotion;
34
+ componentDefaults?: CoreThemeComponentDefaults;
159
35
  }
160
- /**
161
- * element-plus 组件尺寸档(透传给一等公民 size prop)。
162
- */
163
36
  export type ElSize = "large" | "default" | "small";
164
- /**
165
- * 密度档(persona 节奏维度):紧凑 / 适中 / 舒展。
166
- * 整体平移全局留白 + 控件高 + 字号(取值见 design §2.1)。明暗无关。
167
- */
168
- export type AdminThemeDensity = "compact" | "cozy" | "comfortable";
169
- /**
170
- * 动效档(persona 节奏维度):急促 / 标准 / 舒缓。
171
- * 整体换挡全局过渡时长 + 缓动(取值见 design §2.2)。reduced-motion 无条件压过。
172
- */
173
- export type AdminThemeMotion = "snappy" | "standard" | "calm";
174
- /**
175
- * 逐族 EP size 覆盖(componentDefaults,**期二真例外补丁**;本期仅冻结类型为焊缝)。
176
- *
177
- * 仅声明式 size 枚举 + table 的 border/stripe,[MUST NOT] 收任何行为 / handler /
178
- * validator / 数据流(design §9 表现 vs 行为边界判据:persona 永不拥有行为)。
179
- */
180
- export interface AdminThemeComponentDefaults {
181
- /** 表格族默认(size / 是否边框 / 是否斑马纹) */
37
+ export type CoreThemeDensity = "compact" | "cozy" | "comfortable";
38
+ export type CoreThemeMotion = "snappy" | "standard" | "calm";
39
+ export interface CoreThemeComponentDefaults {
182
40
  table?: {
183
41
  size?: ElSize;
184
42
  border?: boolean;
185
43
  stripe?: boolean;
186
44
  };
187
- /** 表单族默认(size;labelPosition 任务驱动、[MUST NOT] 入此) */
188
45
  form?: {
189
46
  size?: ElSize;
190
47
  };
191
- /** 弹窗族默认(size 档→ width 由组件内映射) */
192
48
  modal?: {
193
49
  size?: ElSize;
194
50
  };
195
- /** 操作按钮族默认(size) */
196
51
  actionBtn?: {
197
52
  size?: ElSize;
198
53
  };
199
54
  }
200
- /**
201
- * 主题明暗模式三态:亮 / 暗 / 跟随系统。
202
- * - `light` / `dark`:固定明暗。
203
- * - `system`:跟随 `prefers-color-scheme`(系统切换实时响应)。
204
- * 派生 `themeIsDark` = `mode==='system' ? 系统偏暗 : mode==='dark'`。
205
- */
206
- export type AdminThemeMode = "light" | "dark" | "system";
207
- /** 主题模块对外能力。 */
208
- export interface AdminThemeModule {
209
- /**
210
- * 注册/覆盖一个风格(插件 install 经 `bridge.theme.add` 调;同名覆盖)。
211
- *
212
- * 第 2 参收 {@link AdminThemeEntry}(`{config,label?}`);config 内部浅快照解耦。
213
- * 若新注册 name 命中持久化恢复的目标风格(init 时尚未注册),自动 `setStyle(name)`。
214
- */
215
- add: (name: string, preset: AdminThemeEntry) => void;
216
- /** 注销一个风格(`'default'` 不可注销;注销当前风格则回退 `'default'`)。 */
55
+ export type CoreThemeMode = "light" | "dark" | "system";
56
+ export interface CoreThemeModule {
57
+ add: (name: string, preset: CoreThemeEntry) => void;
217
58
  remove: (name: string) => void;
218
- /** 切换风格(未注册回退 `'default'`):同步 APP_THEME_CONFIG + 持久化。 */
219
59
  setStyle: (name: string) => void;
220
- /**
221
- * 切换明暗模式三态(亮/暗/跟随系统)+ 持久化。`system` 态下 `themeIsDark` 跟随系统偏好。
222
- */
223
- setMode: (mode: AdminThemeMode) => void;
224
- /**
225
- * 切换暗色(向后兼容二态 API):`true`→`setMode('dark')`、`false`→`setMode('light')`。
226
- * 新代码 [SHOULD] 用 {@link AdminThemeModule.setMode}(支持 `system` 第三态)。
227
- */
60
+ setMode: (mode: CoreThemeMode) => void;
228
61
  setDark: (isDark: boolean) => void;
229
- /**
230
- * 直接设密度档(独立于风格切换;供 UI 偏好 / demo 切换器)。
231
- * 注:`setStyle` 会按目标 preset 的 density 复位,故风格切换后手设的密度会被覆盖(同 layout 语义)。
232
- */
233
- setDensity: (density: AdminThemeDensity) => void;
234
- /** 直接设动效档(独立于风格切换;语义同 {@link setDensity})。 */
235
- setMotion: (motion: AdminThemeMotion) => void;
236
- /** 响应式风格名列表(只读,供 `AppTheme.vue` 下拉;`length>1` 才显示选择)。 */
62
+ setDensity: (density: CoreThemeDensity) => void;
63
+ setMotion: (motion: CoreThemeMotion) => void;
237
64
  list: DeepReadonly<Ref<string[]>>;
238
- /** 取风格展示名(`add` 注册的 label;缺省回退 name 自身)。 */
239
65
  labelOf: (name: string) => string;
240
- /** 取风格描述(`add` 注册的 description,含 suitable/unsuitable 两面;未设回退 undefined)。 */
241
- descriptionOf: (name: string) => AdminConfigDescription | undefined;
66
+ descriptionOf: (name: string) => CoreConfigDescription | undefined;
242
67
  }
243
- /**
244
- * 当前生效 preset 的 layout 运行时维度(AppLayout 直读,响应式)。
245
- *
246
- * 尺寸 / 套框等纯数据维度经 setStyle 灌进 bridge 响应式 config(基线复位 + 叠加),
247
- * 故不在本结构重复——本结构仅暴露**非 config 的运行时维度**:编排组件 + 分流意图。
248
- */
249
68
  export interface BridgeThemeLayoutState {
250
- /**
251
- * 当前 preset 的编排组件(缺省 undefined → AppLayout 回退内置默认 AppShell)。
252
- * markRaw 后存储(防 proxy 化)。
253
- */
254
69
  shell?: Component;
255
- /** 当前 preset 的分流意图(提取 1 级路由到 header);缺省复位 false。 */
256
70
  extractLevel1ToHeader: boolean;
257
71
  }
258
- /** 主题 hook 对外契约:模块 + 顶层响应式只读真相源。 */
259
72
  export interface BridgeThemeHook {
260
- /** 主题模块(add/remove/setStyle/setDark/list) */
261
- theme: AdminThemeModule;
262
- /** 当前风格名(响应式只读;切换真相源,appStore / AppTheme.vue 读此) */
73
+ theme: CoreThemeModule;
263
74
  themeStyle: DeepReadonly<Ref<string>>;
264
- /**
265
- * 明暗模式三态真相源(响应式只读;亮/暗/跟随系统)。`themeIsDark` 由本 mode + 系统偏好派生。
266
- */
267
- themeMode: DeepReadonly<Ref<AdminThemeMode>>;
268
- /** 是否暗色(响应式只读 **派生**;= mode==='system'?系统偏暗:mode==='dark'。挂值 composable toggle .dark 读此) */
75
+ themeMode: DeepReadonly<Ref<CoreThemeMode>>;
269
76
  themeIsDark: DeepReadonly<Ref<boolean>>;
270
- /**
271
- * 当前 preset 的 layout 运行时维度(响应式只读;AppLayout 直读 shell + 分流意图)。
272
- * 尺寸 / 套框纯数据维度经 setStyle 灌 bridge config,不在此重复。
273
- */
274
77
  themeLayout: DeepReadonly<Ref<BridgeThemeLayoutState>>;
275
- /**
276
- * 当前密度档(响应式只读真相源);`useAdminThemeApply` watch 此重写节奏 `<style>`。
277
- * setStyle 按 preset.density 复位(缺省 `'cozy'`),或 `setDensity` 直接改。
278
- */
279
- themeDensity: DeepReadonly<Ref<AdminThemeDensity>>;
280
- /** 当前动效档(响应式只读真相源);语义同 {@link themeDensity}(缺省 `'standard'`)。 */
281
- themeMotion: DeepReadonly<Ref<AdminThemeMotion>>;
78
+ themeDensity: DeepReadonly<Ref<CoreThemeDensity>>;
79
+ themeMotion: DeepReadonly<Ref<CoreThemeMotion>>;
282
80
  }
283
- /**
284
- * 六组布局 config 的 init 基线快照(`setStyle` 复位 + 叠加用)。
285
- *
286
- * = bridge init 传入的六组布局 config 浅快照(不含 theme)。setStyle 切到任一 preset
287
- * 前先把六组 config 复位到本基线、再叠加 preset.layout partial(幂等、无残留)。
288
- */
289
81
  export interface BridgeThemeLayoutBaseline {
290
- /** header 配置基线 */
291
82
  header: AppLayoutHeaderConfig;
292
- /** footer 配置基线 */
293
83
  footer: AppLayoutFooterConfig;
294
- /** sidebar 配置基线 */
295
84
  sidebar: AppLayoutSidebarConfig;
296
- /** aside 右侧补充区配置基线(P1' additive) */
297
85
  aside: AppLayoutAsideConfig;
298
- /** breadcrumb 配置基线 */
299
86
  breadcrumb: AppLayoutBreadcrumbConfig;
300
- /** body 配置基线 */
301
87
  body: AppLayoutBodyConfig;
302
- /** viewport 边框配置基线(已合并核内默认四边 0) */
303
88
  viewport: AppLayoutViewportConfig;
304
- /** 模块间距配置基线(内缝 gap;已合并核内默认 size 0) */
305
89
  gap: AppLayoutGapConfig;
306
90
  }
307
- /** `createBridgeThemeHook` 入参。 */
308
91
  export interface BridgeThemeInit {
309
- /** init 默认风格 config(= bridge init 传入的 APP_THEME_CONFIG);core 自动 add 为 `'default'` */
310
92
  initConfig: AppThemeConfig;
311
- /**
312
- * 注入的 config 更新器(= configHook.update 全量 key)。
313
- *
314
- * setStyle 经此把当前风格 config 灌进 APP_THEME_CONFIG(整体替换 light/dark),
315
- * 并把六组布局 config 基线复位 + 叠加 preset.layout partial。复用既有 update
316
- * 通道,[MUST NOT] 另持一份主题 / 布局响应式。
317
- */
318
93
  update: <K extends UpdatableConfigKey>(key: K, partial: Partial<UpdatableConfigMap[K]>) => void;
319
- /**
320
- * 六组布局 config init 基线(setStyle 复位 + 叠加用)。
321
- * 缺省(向后兼容 / 测试)→ 不做布局复位,setStyle 仅切色 + 应用 preset.layout partial。
322
- */
323
94
  layoutBaseline?: BridgeThemeLayoutBaseline;
324
- /** 注入的命名空间 storage(= bridge.getStorage());持久化 `{themeStyle,themeIsDark}` */
325
95
  storage: StorageLike;
326
- /** 持久化 key(命名空间已由 storage 加前缀);缺省 `"admin-core-theme"` */
327
96
  storageKey?: string;
328
- /**
329
- * 明暗模式默认值(**仅无缓存时生效**);缺省 `"light"`。
330
- *
331
- * 读持久化命中 `themeMode` → 缓存优先覆盖本值(缓存语义不变);无缓存才回落到此。
332
- * 业务侧经 `createAdminBridge({ defaultThemeMode })` 注入,如设 `"dark"` =
333
- * 「首次进入(无缓存)默认暗色」、`"system"` =「默认跟随系统」。
334
- */
335
- defaultMode?: AdminThemeMode;
97
+ defaultMode?: CoreThemeMode;
336
98
  }
@@ -1,5 +1,4 @@
1
1
  type __VLS_Props = {
2
- /** 显隐(= showAside,路由 meta.layout.aside 基线);false 不渲染 */
3
2
  show: boolean;
4
3
  };
5
4
  declare function __VLS_template(): {
@@ -0,0 +1,11 @@
1
+ type __VLS_Props = {
2
+ side: "sidebar" | "aside";
3
+ collapse: boolean;
4
+ show: boolean;
5
+ };
6
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
7
+ toggle: () => any;
8
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
9
+ onToggle?: (() => any) | undefined;
10
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
11
+ export default _default;
@@ -1,11 +1,8 @@
1
1
  import { RouteMetaResolveRaw } from '../../types';
2
2
  type __VLS_Props = {
3
- /** 整体不用管 AppLayout控制 用在定位出去的子元素的显隐 */
4
3
  show: boolean;
5
4
  menus: RouteMetaResolveRaw[];
6
- /** 聚焦的路由菜单 */
7
5
  activeMenu?: RouteMetaResolveRaw;
8
- /** 聚焦的模块菜单 */
9
6
  activeModuleMenu?: RouteMetaResolveRaw;
10
7
  menuFlatList: RouteMetaResolveRaw[];
11
8
  };
@@ -1,22 +1,10 @@
1
1
  import { AppShellContentAnchor, AppLayoutAppStoreSlice, AppLayoutUserStoreSlice, AppLayoutBridgeSlice } from './types';
2
2
  import { WatermarkProps } from 'element-plus';
3
3
  type __VLS_Props = {
4
- /**
5
- * admin bridge 实例(#7.6 期新增必填)。
6
- * AppLayout 经 `props.adminBridge` 注入后 provide 给子 layout 组件
7
- * (AppBody / AppSidebar 自取 12 readonly 配置 + getRoutes / generateRouteMetaRawTree)。
8
- * 业务侧 App.vue 模板:`<AppLayout :admin-bridge="appAdminBridge" ...>`。
9
- */
10
4
  adminBridge: AppLayoutBridgeSlice;
11
5
  appStore: AppLayoutAppStoreSlice;
12
6
  userStore: AppLayoutUserStoreSlice;
13
- /** 水印内容(空数组/空串/undefined 不展示 = 关闭水印);layout 不耦合 UserInfo shape,由业务侧派生 */
14
7
  watermarkContent?: WatermarkProps["content"];
15
- /**
16
- * sidebar 层级是否高于 header(#7.5 期新增,默认 false)。
17
- * true 时 AppSidebar z-index 调高于 AppHeader——适合 sidebar 顶部悬挂内容
18
- * 需要覆盖 header 区域的场景(如悬浮 logo/搜索框)。
19
- */
20
8
  sidebarAboveHeader?: boolean;
21
9
  };
22
10
  declare function __VLS_template(): {
@@ -1,8 +1,6 @@
1
1
  type __VLS_Props = {
2
- /** 充满视口 */
3
2
  fullViewport?: boolean;
4
3
  fullMode?: "min-height" | "height";
5
- /** 下个viewport高度 */
6
4
  nextViewportMaxHeight?: string;
7
5
  background?: string;
8
6
  };