@done-coding/admin-core 0.3.0 → 0.4.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 (106) hide show
  1. package/es/bridge/index.mjs +87 -47
  2. package/es/components/app-layout/AppBody.vue.mjs +7 -0
  3. package/es/components/app-layout/AppBody.vue2.mjs +89 -0
  4. package/es/components/app-layout/AppBreadcrumb.vue.mjs +7 -0
  5. package/es/components/app-layout/AppBreadcrumb.vue2.mjs +58 -0
  6. package/es/components/app-layout/AppFooter.vue.mjs +7 -0
  7. package/es/components/app-layout/AppFooter.vue2.mjs +17 -0
  8. package/es/components/app-layout/AppHeader.vue.mjs +7 -0
  9. package/es/components/app-layout/AppHeader.vue2.mjs +99 -0
  10. package/es/components/app-layout/AppLayout.vue.mjs +7 -0
  11. package/es/components/app-layout/AppLayout.vue2.mjs +130 -0
  12. package/es/components/app-layout/AppPage.vue.mjs +7 -0
  13. package/es/components/app-layout/AppPage.vue2.mjs +39 -0
  14. package/es/components/app-layout/AppSidebar.vue.mjs +7 -0
  15. package/es/components/app-layout/AppSidebar.vue2.mjs +97 -0
  16. package/es/components/app-layout/index.mjs +32 -0
  17. package/es/components/display/ActionBtnGroup.vue.mjs +61 -0
  18. package/es/components/display/ActionBtnGroup.vue2.mjs +4 -0
  19. package/es/components/display/HeightProvider.vue.mjs +26 -26
  20. package/es/components/display/TabsHeader.vue.mjs +7 -0
  21. package/es/components/display/TabsHeader.vue2.mjs +76 -0
  22. package/es/components/display/TabsMain.vue.mjs +100 -5
  23. package/es/components/display/TabsMain.vue2.mjs +2 -95
  24. package/es/components/display/TabsNaturalFlow.vue.mjs +17 -0
  25. package/es/components/display/TabsNaturalFlow.vue2.mjs +4 -0
  26. package/es/components/display/TabsRefineFlow.vue.mjs +62 -0
  27. package/es/components/display/TabsRefineFlow.vue2.mjs +4 -0
  28. package/es/components/display/index.mjs +10 -8
  29. package/es/components/form/FormSearch.vue.mjs +2 -2
  30. package/es/components/form/FormSearch.vue2.mjs +107 -63
  31. package/es/components/form/form-search-utils.mjs +25 -0
  32. package/es/components/list-page/ListPage.vue.mjs +2 -2
  33. package/es/components/list-page/ListPage.vue2.mjs +82 -76
  34. package/es/components/misc/ActionBtn.vue.mjs +84 -65
  35. package/es/components/misc/ActionConfirm.vue.mjs +1 -1
  36. package/es/components/misc/ActionConfirm.vue2.mjs +77 -71
  37. package/es/components/misc/SelectModule.vue.mjs +55 -0
  38. package/es/components/misc/SelectModule.vue2.mjs +4 -0
  39. package/es/components/modal/ConfirmModal.vue.mjs +1 -1
  40. package/es/components/modal/ConfirmModal.vue2.mjs +13 -12
  41. package/es/components/modal/modal-shelf-hierarchy.mjs +4 -6
  42. package/es/components/table/TableMain.vue.mjs +3 -3
  43. package/es/components/table/TableMain.vue2.mjs +103 -102
  44. package/es/components/table/ToolbarButtons.vue.mjs +10 -40
  45. package/es/hooks/use-breakpoint.mjs +40 -0
  46. package/es/hooks/use-channel-viewport-height.mjs +18 -0
  47. package/es/index.mjs +165 -128
  48. package/es/inject/key.mjs +18 -8
  49. package/es/router/guard/index.mjs +31 -0
  50. package/es/router/guard/login.mjs +4 -0
  51. package/es/router/guard/permission.mjs +4 -0
  52. package/es/store/app.mjs +103 -0
  53. package/es/store/router-permission.mjs +65 -0
  54. package/es/store/user.mjs +52 -52
  55. package/es/style.css +1 -1
  56. package/package.json +3 -2
  57. package/types/bridge/index.d.ts +193 -89
  58. package/types/components/app-layout/AppBody.vue.d.ts +45 -0
  59. package/types/components/app-layout/AppBreadcrumb.vue.d.ts +25 -0
  60. package/types/components/app-layout/AppFooter.vue.d.ts +2 -0
  61. package/types/components/app-layout/AppHeader.vue.d.ts +55 -0
  62. package/types/components/app-layout/AppLayout.vue.d.ts +76 -0
  63. package/types/components/app-layout/AppPage.vue.d.ts +54 -0
  64. package/types/components/app-layout/AppSidebar.vue.d.ts +51 -0
  65. package/types/components/app-layout/index.d.ts +27 -0
  66. package/types/components/app-layout/types.d.ts +43 -0
  67. package/types/components/display/ActionBtnGroup.vue.d.ts +16 -0
  68. package/types/components/display/HeightProvider.vue.d.ts +10 -6
  69. package/types/components/display/TabsHeader.vue.d.ts +42 -0
  70. package/types/components/display/TabsMain.vue.d.ts +49 -7
  71. package/types/components/display/TabsNaturalFlow.vue.d.ts +16 -0
  72. package/types/components/display/TabsRefineFlow.vue.d.ts +53 -0
  73. package/types/components/display/index.d.ts +16 -13
  74. package/types/components/display/types.d.ts +85 -29
  75. package/types/components/form/form-search-utils.d.ts +24 -0
  76. package/types/components/form/types.d.ts +7 -1
  77. package/types/components/list-page/types.d.ts +1 -1
  78. package/types/components/misc/ActionBtn.vue.d.ts +17 -23
  79. package/types/components/misc/ActionConfirm.vue.d.ts +56 -27
  80. package/types/components/misc/SelectModule.vue.d.ts +2 -0
  81. package/types/components/misc/index.d.ts +11 -1
  82. package/types/components/misc/types.d.ts +35 -26
  83. package/types/components/modal/ConfirmModal.vue.d.ts +17 -0
  84. package/types/components/modal/modal-shelf-hierarchy.d.ts +1 -1
  85. package/types/components/table/types.d.ts +14 -12
  86. package/types/helpers/index.d.ts +10 -3
  87. package/types/hooks/index.d.ts +2 -0
  88. package/types/hooks/use-breakpoint.d.ts +4 -0
  89. package/types/hooks/use-channel-viewport-height.d.ts +28 -0
  90. package/types/index.d.ts +4 -1
  91. package/types/inject/key.d.ts +35 -10
  92. package/types/router/guard/index.d.ts +21 -0
  93. package/types/router/guard/login.d.ts +5 -0
  94. package/types/router/guard/permission.d.ts +5 -0
  95. package/types/router/guard/types.d.ts +15 -0
  96. package/types/router/index.d.ts +1 -0
  97. package/types/store/app.d.ts +149 -0
  98. package/types/store/index.d.ts +2 -0
  99. package/types/store/router-permission.d.ts +80 -0
  100. package/types/store/user.d.ts +11 -9
  101. /package/es/{helpers → bridge}/route.mjs +0 -0
  102. /package/es/{helpers → bridge}/state.mjs +0 -0
  103. /package/es/{helpers → bridge}/storage.mjs +0 -0
  104. /package/types/{helpers → bridge}/route.d.ts +0 -0
  105. /package/types/{helpers → bridge}/state.d.ts +0 -0
  106. /package/types/{helpers → bridge}/storage.d.ts +0 -0
@@ -0,0 +1,55 @@
1
+ import { RouteMetaResolveRaw } from '../../types';
2
+
3
+ declare function __VLS_template(): {
4
+ left?(_: {}): any;
5
+ right?(_: {}): any;
6
+ };
7
+ declare const __VLS_component: import('vue').DefineComponent<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
8
+ /** 整体不用管 AppLayout控制 用在定位出去的子元素的显隐 */
9
+ show: boolean;
10
+ menus: RouteMetaResolveRaw[];
11
+ /** 聚焦的路由菜单 */
12
+ activeMenu?: RouteMetaResolveRaw;
13
+ /** 聚焦的模块菜单 */
14
+ activeModuleMenu?: RouteMetaResolveRaw;
15
+ menuFlatList: RouteMetaResolveRaw[];
16
+ }>, {
17
+ menus: () => never[];
18
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
19
+ /** 整体不用管 AppLayout控制 用在定位出去的子元素的显隐 */
20
+ show: boolean;
21
+ menus: RouteMetaResolveRaw[];
22
+ /** 聚焦的路由菜单 */
23
+ activeMenu?: RouteMetaResolveRaw;
24
+ /** 聚焦的模块菜单 */
25
+ activeModuleMenu?: RouteMetaResolveRaw;
26
+ menuFlatList: RouteMetaResolveRaw[];
27
+ }>, {
28
+ menus: () => never[];
29
+ }>>> & Readonly<{}>, {
30
+ menus: RouteMetaResolveRaw[];
31
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
32
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
33
+ export default _default;
34
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
35
+ type __VLS_TypePropsToRuntimeProps<T> = {
36
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
37
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
38
+ } : {
39
+ type: import('vue').PropType<T[K]>;
40
+ required: true;
41
+ };
42
+ };
43
+ type __VLS_WithDefaults<P, D> = {
44
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
45
+ default: D[K];
46
+ }> : P[K];
47
+ };
48
+ type __VLS_Prettify<T> = {
49
+ [K in keyof T]: T[K];
50
+ } & {};
51
+ type __VLS_WithTemplateSlots<T, S> = T & {
52
+ new (): {
53
+ $slots: S;
54
+ };
55
+ };
@@ -0,0 +1,76 @@
1
+ import { AppLayoutAppStoreSlice, AppLayoutUserStoreSlice, AppLayoutBridgeSlice } from './types';
2
+ import { WatermarkProps } from 'element-plus';
3
+
4
+ declare function __VLS_template(): {
5
+ "sidebar-top"?(_: {}): any;
6
+ "sidebar-bottom"?(_: {}): any;
7
+ "header-left"?(_: {}): any;
8
+ "header-right"?(_: {}): any;
9
+ };
10
+ declare const __VLS_component: import('vue').DefineComponent<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
11
+ /**
12
+ * admin bridge 实例(#7.6 期新增必填)。
13
+ * AppLayout 经 `props.adminBridge` 注入后 provide 给子 layout 组件
14
+ * (AppBody / AppSidebar 自取 12 readonly 配置 + getRoutes / generateRouteMetaRawTree)。
15
+ * 业务侧 App.vue 模板:`<AppLayout :admin-bridge="appAdminBridge" ...>`。
16
+ */
17
+ adminBridge: AppLayoutBridgeSlice;
18
+ appStore: AppLayoutAppStoreSlice;
19
+ userStore: AppLayoutUserStoreSlice;
20
+ /** 水印内容(空数组/空串/undefined 不展示);layout 不耦合 UserInfo shape,由业务侧派生 */
21
+ watermarkContent?: WatermarkProps["content"];
22
+ /**
23
+ * sidebar 层级是否高于 header(#7.5 期新增,默认 false)。
24
+ * true 时 AppSidebar z-index 调高于 AppHeader——适合 sidebar 顶部悬挂内容
25
+ * 需要覆盖 header 区域的场景(如悬浮 logo/搜索框)。
26
+ */
27
+ sidebarAboveHeader?: boolean;
28
+ }>, {
29
+ sidebarAboveHeader: boolean;
30
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
31
+ /**
32
+ * admin bridge 实例(#7.6 期新增必填)。
33
+ * AppLayout 经 `props.adminBridge` 注入后 provide 给子 layout 组件
34
+ * (AppBody / AppSidebar 自取 12 readonly 配置 + getRoutes / generateRouteMetaRawTree)。
35
+ * 业务侧 App.vue 模板:`<AppLayout :admin-bridge="appAdminBridge" ...>`。
36
+ */
37
+ adminBridge: AppLayoutBridgeSlice;
38
+ appStore: AppLayoutAppStoreSlice;
39
+ userStore: AppLayoutUserStoreSlice;
40
+ /** 水印内容(空数组/空串/undefined 不展示);layout 不耦合 UserInfo shape,由业务侧派生 */
41
+ watermarkContent?: WatermarkProps["content"];
42
+ /**
43
+ * sidebar 层级是否高于 header(#7.5 期新增,默认 false)。
44
+ * true 时 AppSidebar z-index 调高于 AppHeader——适合 sidebar 顶部悬挂内容
45
+ * 需要覆盖 header 区域的场景(如悬浮 logo/搜索框)。
46
+ */
47
+ sidebarAboveHeader?: boolean;
48
+ }>, {
49
+ sidebarAboveHeader: boolean;
50
+ }>>> & Readonly<{}>, {
51
+ sidebarAboveHeader: boolean;
52
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
53
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
54
+ export default _default;
55
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
56
+ type __VLS_TypePropsToRuntimeProps<T> = {
57
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
58
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
59
+ } : {
60
+ type: import('vue').PropType<T[K]>;
61
+ required: true;
62
+ };
63
+ };
64
+ type __VLS_WithDefaults<P, D> = {
65
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
66
+ default: D[K];
67
+ }> : P[K];
68
+ };
69
+ type __VLS_Prettify<T> = {
70
+ [K in keyof T]: T[K];
71
+ } & {};
72
+ type __VLS_WithTemplateSlots<T, S> = T & {
73
+ new (): {
74
+ $slots: S;
75
+ };
76
+ };
@@ -0,0 +1,54 @@
1
+ declare function __VLS_template(): {
2
+ default?(_: {}): any;
3
+ };
4
+ declare const __VLS_component: import('vue').DefineComponent<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
5
+ /** 充满视口 */
6
+ fullViewport?: boolean;
7
+ fullMode?: "min-height" | "height";
8
+ /** 下个viewport高度 */
9
+ nextViewportMaxHeight?: string;
10
+ background?: string;
11
+ }>, {
12
+ fullViewport: boolean;
13
+ fullMode: string;
14
+ nextViewportMaxHeight: string;
15
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
16
+ /** 充满视口 */
17
+ fullViewport?: boolean;
18
+ fullMode?: "min-height" | "height";
19
+ /** 下个viewport高度 */
20
+ nextViewportMaxHeight?: string;
21
+ background?: string;
22
+ }>, {
23
+ fullViewport: boolean;
24
+ fullMode: string;
25
+ nextViewportMaxHeight: string;
26
+ }>>> & Readonly<{}>, {
27
+ fullViewport: boolean;
28
+ fullMode: "min-height" | "height";
29
+ nextViewportMaxHeight: string;
30
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
31
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
32
+ export default _default;
33
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
34
+ type __VLS_TypePropsToRuntimeProps<T> = {
35
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
36
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
37
+ } : {
38
+ type: import('vue').PropType<T[K]>;
39
+ required: true;
40
+ };
41
+ };
42
+ type __VLS_WithDefaults<P, D> = {
43
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
44
+ default: D[K];
45
+ }> : P[K];
46
+ };
47
+ type __VLS_Prettify<T> = {
48
+ [K in keyof T]: T[K];
49
+ } & {};
50
+ type __VLS_WithTemplateSlots<T, S> = T & {
51
+ new (): {
52
+ $slots: S;
53
+ };
54
+ };
@@ -0,0 +1,51 @@
1
+ import { RouteMetaResolveRaw } from '../../types';
2
+
3
+ declare function __VLS_template(): {
4
+ top?(_: {}): any;
5
+ bottom?(_: {}): any;
6
+ };
7
+ declare const __VLS_component: import('vue').DefineComponent<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
8
+ /** 整体不用管 AppLayout 控制 用在定位出去的子元素的显隐 */
9
+ show: boolean;
10
+ /** 层级是否高于 header(#7.5 期;true 时 z-index 提升盖住 header) */
11
+ aboveHeader?: boolean;
12
+ menus: RouteMetaResolveRaw[];
13
+ menuFlatList: RouteMetaResolveRaw[];
14
+ }>, {
15
+ aboveHeader: boolean;
16
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
17
+ /** 整体不用管 AppLayout 控制 用在定位出去的子元素的显隐 */
18
+ show: boolean;
19
+ /** 层级是否高于 header(#7.5 期;true 时 z-index 提升盖住 header) */
20
+ aboveHeader?: boolean;
21
+ menus: RouteMetaResolveRaw[];
22
+ menuFlatList: RouteMetaResolveRaw[];
23
+ }>, {
24
+ aboveHeader: boolean;
25
+ }>>> & Readonly<{}>, {
26
+ aboveHeader: boolean;
27
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
28
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
29
+ export default _default;
30
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
31
+ type __VLS_TypePropsToRuntimeProps<T> = {
32
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
33
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
34
+ } : {
35
+ type: import('vue').PropType<T[K]>;
36
+ required: true;
37
+ };
38
+ };
39
+ type __VLS_WithDefaults<P, D> = {
40
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
41
+ default: D[K];
42
+ }> : P[K];
43
+ };
44
+ type __VLS_Prettify<T> = {
45
+ [K in keyof T]: T[K];
46
+ } & {};
47
+ type __VLS_WithTemplateSlots<T, S> = T & {
48
+ new (): {
49
+ $slots: S;
50
+ };
51
+ };
@@ -0,0 +1,27 @@
1
+ import { Plugin } from 'vue';
2
+ import { default as AppLayout } from './AppLayout.vue';
3
+ import { default as AppHeader } from './AppHeader.vue';
4
+ import { default as AppSidebar } from './AppSidebar.vue';
5
+ import { default as AppBody } from './AppBody.vue';
6
+ import { default as AppBreadcrumb } from './AppBreadcrumb.vue';
7
+ import { default as AppFooter } from './AppFooter.vue';
8
+ import { default as AppPage } from './AppPage.vue';
9
+
10
+ export {
11
+ /** 应用根布局容器:props 注入 adminBridge / appStore / userStore,provide 给子 layout */
12
+ AppLayout,
13
+ /** 应用头部布局:模块菜单 + 深色切换;#left / #right slot 给业务自渲染 */
14
+ AppHeader,
15
+ /** 应用侧栏布局:菜单树 + 折叠按钮;#top / #bottom slot 给业务自渲染 */
16
+ AppSidebar,
17
+ /** 应用主体布局:面包屑 + RouterView keepAlive;#footer slot */
18
+ AppBody,
19
+ /** 应用面包屑(AppBody 内部消费,业务侧通常不直接使用) */
20
+ AppBreadcrumb,
21
+ /** 应用底部布局 */
22
+ AppFooter,
23
+ /** 业务页面容器:fullViewport 满视口 + ModalShelf page level */
24
+ AppPage, };
25
+ /** app-layout 子目录批量 install plugin(同 form/menu/display 子桶范式) */
26
+ export declare const appLayoutInstall: Plugin;
27
+ export * from './types';
@@ -0,0 +1,43 @@
1
+ import { createAppStore, createUserStore } from '../../store';
2
+ import { AdminBridge } from '../../bridge';
3
+
4
+ /**
5
+ * AppLayout 族 app store 消费契约(props/inject 切面)。
6
+ *
7
+ * 调用方通过 props 注入 store 实例,AppLayout 集中 provide,子组件
8
+ * (AppBody / AppHeader / AppSidebar / AppFooter)经 `APP_LAYOUT_APP_STORE_KEY`
9
+ * inject 自取——废除原 AppLayout → 子组件 `:style` / `:showBreadcrumb` props 透传链。
10
+ *
11
+ * 类型由 `createAppStore` 工厂 ReturnType 推导(store 实例完整类型),自动跟随
12
+ * 工厂演化、零手维护字段清单——放弃 narrow 换取 0 维护成本。`UserInfo` /
13
+ * `LoginParams` 泛型未显式实例化时走工厂 default `Record<string, any>` /
14
+ * `unknown`(D-a 原则——core 不锁 UserInfo 具体 shape)。
15
+ *
16
+ * app-layout 族下沉 core 后此 slice 仍是 props/inject 契约——core 端无法直接
17
+ * `useAppStore()`,必须由业务侧通过 props 注入。
18
+ */
19
+ export type AppLayoutAppStoreSlice<UserInfo = Record<string, any>> = ReturnType<ReturnType<typeof createAppStore<UserInfo>>>;
20
+ /**
21
+ * AppLayout 族 user store 消费契约(props/inject 切面)。
22
+ *
23
+ * 调用方通过 props 注入,AppLayout 集中 provide,子组件(AppHeader)经
24
+ * `APP_LAYOUT_USER_STORE_KEY` inject 自取。
25
+ *
26
+ * 类型由 `createUserStore` 工厂 ReturnType 推导。`UserInfo` 走工厂 default
27
+ * `Record<string, any>`(D-a 原则——core 不锁 UserInfo 具体 shape),业务侧
28
+ * (如 AppLayout watermark content / AppHeader user dropdown)按需 cast 为本应用
29
+ * 具体 shape。
30
+ */
31
+ export type AppLayoutUserStoreSlice<UserInfo = Record<string, any>> = ReturnType<ReturnType<typeof createUserStore<UserInfo>>>;
32
+ /**
33
+ * AppLayout 族 admin bridge 消费契约(props/inject 切面,#7.6 期挂载)。
34
+ *
35
+ * AppLayout 通过 `props.adminBridge` 注入 + `provide(APP_LAYOUT_BRIDGE_KEY, ...)`,
36
+ * 子组件(AppBody / AppHeader / AppSidebar / AppLayout 自身菜单派生)inject 自取——
37
+ * 与 `AppLayoutAppStoreSlice` / `AppLayoutUserStoreSlice` 完全对称范式。
38
+ *
39
+ * 仅暴露 layout 子组件实际读取的字段:12 readonly 配置属性 + 2 派生方法
40
+ * (getRoutes / generateRouteMetaRawTree)。loginApi / refreshToken 等 auth
41
+ * 面不通过本 slice 暴露(业务侧通过 appAdminBridge 直读)。
42
+ */
43
+ export type AppLayoutBridgeSlice = Pick<AdminBridge, "APP_BASE_INFO" | "APP_ENV_INFO" | "APP_CACHE_CONFIG" | "APP_LAYOUT_HEADER_CONFIG" | "APP_LAYOUT_FOOTER_CONFIG" | "APP_LAYOUT_SIDEBAR_CONFIG" | "APP_LAYOUT_BREADCRUMB_CONFIG" | "APP_LAYOUT_BODY_CONFIG" | "APP_LAYOUT_CONFIG" | "APP_ROUTER_META_DEFAULT_CONFIG" | "APP_ROUTER_CONFIG" | "APP_ROUTER_PATHS_CONFIG" | "APP_THEME_CONFIG" | "getRoutes" | "generateRouteMetaRawTree">;
@@ -0,0 +1,16 @@
1
+ import { ActionBtnConfigItem, ActionBtnSize } from './types';
2
+
3
+ declare const _default: <Ctx = void>(__VLS_props: Awaited<typeof __VLS_setup>["props"], __VLS_ctx?: __VLS_Prettify<Pick<Awaited<typeof __VLS_setup>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
+ props: __VLS_Prettify<__VLS_OmitKeepDiscriminatedUnion<(Partial<{}> & Omit<{} & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, never>) & {
5
+ configs?: ActionBtnConfigItem<Ctx>[];
6
+ ctx: Ctx;
7
+ defaultSize?: ActionBtnSize;
8
+ }, keyof import('vue').VNodeProps | keyof import('vue').AllowedComponentProps>> & {} & (import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps);
9
+ expose(exposed: import('vue').ShallowUnwrapRef<{}>): void;
10
+ attrs: any;
11
+ slots: ReturnType<() => {}>;
12
+ emit: typeof __VLS_emit;
13
+ }>) => import('vue').VNode & {
14
+ __ctx?: Awaited<typeof __VLS_setup>;
15
+ };
16
+ export default _default;
@@ -3,15 +3,19 @@ import { HeightProviderProps } from './types';
3
3
  declare function __VLS_template(): {
4
4
  header?(_: {}): any;
5
5
  default?(_: {
6
- height: number;
6
+ viewportHeight: number;
7
7
  }): any;
8
8
  };
9
9
  declare const __VLS_component: import('vue').DefineComponent<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<HeightProviderProps>, {
10
- channel: symbol;
11
- }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<HeightProviderProps>, {
12
- channel: symbol;
13
- }>>> & Readonly<{}>, {
14
- channel: symbol;
10
+ minHeight: number;
11
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
12
+ childViewportHeightChange: (value: number) => void;
13
+ }, string, import('vue').PublicProps, Readonly<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<HeightProviderProps>, {
14
+ minHeight: number;
15
+ }>>> & Readonly<{
16
+ onChildViewportHeightChange?: ((value: number) => any) | undefined;
17
+ }>, {
18
+ minHeight: number;
15
19
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
16
20
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
17
21
  export default _default;
@@ -0,0 +1,42 @@
1
+ import { TabsHeaderVariant, TabsMainItem } from './types';
2
+
3
+ declare function __VLS_template(): Partial<Record<string, (_: {
4
+ tab: TabsMainItem;
5
+ active: boolean;
6
+ }) => any>>;
7
+ declare const __VLS_component: import('vue').DefineComponent<globalThis.ExtractPropTypes<{
8
+ activeKey: import('vue').PropType<string>;
9
+ tabs: {
10
+ type: globalThis.PropType<TabsMainItem[]>;
11
+ required: true;
12
+ };
13
+ level: {
14
+ type: globalThis.PropType<number>;
15
+ default: number;
16
+ };
17
+ variant: {
18
+ type: globalThis.PropType<TabsHeaderVariant>;
19
+ };
20
+ }>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<globalThis.ExtractPropTypes<{
21
+ activeKey: import('vue').PropType<string>;
22
+ tabs: {
23
+ type: globalThis.PropType<TabsMainItem[]>;
24
+ required: true;
25
+ };
26
+ level: {
27
+ type: globalThis.PropType<number>;
28
+ default: number;
29
+ };
30
+ variant: {
31
+ type: globalThis.PropType<TabsHeaderVariant>;
32
+ };
33
+ }>> & Readonly<{}>, {
34
+ level: number;
35
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
36
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
37
+ export default _default;
38
+ type __VLS_WithTemplateSlots<T, S> = T & {
39
+ new (): {
40
+ $slots: S;
41
+ };
42
+ };
@@ -6,32 +6,74 @@ declare function __VLS_template(): Partial<Record<`header-${string}`, (_: {
6
6
  }) => any>>;
7
7
  declare const __VLS_component: import('vue').DefineComponent<globalThis.ExtractPropTypes<{
8
8
  modelValue: import('vue').PropType<string>;
9
- height: {
9
+ viewportHeight: {
10
10
  type: globalThis.PropType<number>;
11
11
  };
12
+ minHeight: {
13
+ type: globalThis.PropType<number>;
14
+ default: number;
15
+ };
12
16
  channel: {
13
- type: globalThis.PropType<symbol>;
14
- default: symbol;
17
+ type: globalThis.PropType<string>;
18
+ };
19
+ parentChannel: {
20
+ type: globalThis.PropType<string>;
21
+ };
22
+ padding: {
23
+ type: globalThis.PropType<import('./types').TabsMainPadding>;
24
+ };
25
+ refineReduceHeight: {
26
+ type: globalThis.PropType<number>;
27
+ default: number;
15
28
  };
16
29
  tabs: {
17
30
  type: globalThis.PropType<TabsMainItem[]>;
18
31
  required: true;
19
32
  };
33
+ variant: {
34
+ type: globalThis.PropType<import('./types').TabsHeaderVariant>;
35
+ };
36
+ refine: {
37
+ type: globalThis.PropType<boolean>;
38
+ default: boolean;
39
+ };
20
40
  }>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<globalThis.ExtractPropTypes<{
21
41
  modelValue: import('vue').PropType<string>;
22
- height: {
42
+ viewportHeight: {
23
43
  type: globalThis.PropType<number>;
24
44
  };
45
+ minHeight: {
46
+ type: globalThis.PropType<number>;
47
+ default: number;
48
+ };
25
49
  channel: {
26
- type: globalThis.PropType<symbol>;
27
- default: symbol;
50
+ type: globalThis.PropType<string>;
51
+ };
52
+ parentChannel: {
53
+ type: globalThis.PropType<string>;
54
+ };
55
+ padding: {
56
+ type: globalThis.PropType<import('./types').TabsMainPadding>;
57
+ };
58
+ refineReduceHeight: {
59
+ type: globalThis.PropType<number>;
60
+ default: number;
28
61
  };
29
62
  tabs: {
30
63
  type: globalThis.PropType<TabsMainItem[]>;
31
64
  required: true;
32
65
  };
66
+ variant: {
67
+ type: globalThis.PropType<import('./types').TabsHeaderVariant>;
68
+ };
69
+ refine: {
70
+ type: globalThis.PropType<boolean>;
71
+ default: boolean;
72
+ };
33
73
  }>> & Readonly<{}>, {
34
- channel: symbol;
74
+ minHeight: number;
75
+ refineReduceHeight: number;
76
+ refine: boolean;
35
77
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
36
78
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
37
79
  export default _default;
@@ -0,0 +1,16 @@
1
+ declare function __VLS_template(): {
2
+ header?(_: {}): any;
3
+ default?(_: {}): any;
4
+ };
5
+ declare const __VLS_component: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
6
+ viewportHeightChange: (value: number | undefined) => void;
7
+ }, string, import('vue').PublicProps, Readonly<{}> & Readonly<{
8
+ onViewportHeightChange?: ((value: number | undefined) => any) | undefined;
9
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
10
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
11
+ export default _default;
12
+ type __VLS_WithTemplateSlots<T, S> = T & {
13
+ new (): {
14
+ $slots: S;
15
+ };
16
+ };
@@ -0,0 +1,53 @@
1
+ import { TabsMainPadding } from './types';
2
+
3
+ interface TabsRefineFlowProps {
4
+ viewportHeight?: number;
5
+ minHeight?: number;
6
+ channel?: string;
7
+ parentChannel?: string;
8
+ padding?: TabsMainPadding;
9
+ /** 精细化预留高度(px),从 viewportHeightFinal 中预扣(在 padding 扣减与 HeightProvider header reserve 扣减之外) */
10
+ refineReduceHeight?: number;
11
+ }
12
+ declare function __VLS_template(): {
13
+ header?(_: {}): any;
14
+ default?(_: {}): any;
15
+ };
16
+ declare const __VLS_component: import('vue').DefineComponent<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TabsRefineFlowProps>, {
17
+ padding: () => TabsMainPadding;
18
+ refineReduceHeight: number;
19
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
20
+ viewportHeightChange: (value: number | undefined) => void;
21
+ }, string, import('vue').PublicProps, Readonly<globalThis.ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TabsRefineFlowProps>, {
22
+ padding: () => TabsMainPadding;
23
+ refineReduceHeight: number;
24
+ }>>> & Readonly<{
25
+ onViewportHeightChange?: ((value: number | undefined) => any) | undefined;
26
+ }>, {
27
+ padding: TabsMainPadding;
28
+ refineReduceHeight: number;
29
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
30
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
31
+ export default _default;
32
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
33
+ type __VLS_TypePropsToRuntimeProps<T> = {
34
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
35
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
36
+ } : {
37
+ type: import('vue').PropType<T[K]>;
38
+ required: true;
39
+ };
40
+ };
41
+ type __VLS_WithDefaults<P, D> = {
42
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
43
+ default: D[K];
44
+ }> : P[K];
45
+ };
46
+ type __VLS_Prettify<T> = {
47
+ [K in keyof T]: T[K];
48
+ } & {};
49
+ type __VLS_WithTemplateSlots<T, S> = T & {
50
+ new (): {
51
+ $slots: S;
52
+ };
53
+ };
@@ -2,26 +2,29 @@ import { Plugin } from 'vue';
2
2
  import { default as WatchSize } from './WatchSize.vue';
3
3
  import { default as TabsMain } from './TabsMain.vue';
4
4
  import { default as HeightProvider } from './HeightProvider.vue';
5
+ import { default as ActionBtnGroup } from './ActionBtnGroup.vue';
5
6
 
6
7
  export {
7
- /**
8
- * 尺寸监听容器:debounce 测量默认槽内容的宽 / 高,
9
- * 通过 `@height-change` / `@size-change` 上报,供高度预算等场景复用。
10
- */
8
+ /** 尺寸监听容器:debounce 测默认槽内容宽/高,`@height-change` / `@size-change` 上报 */
11
9
  WatchSize,
12
10
  /**
13
- * Tab 容器组件:手写 tab-bar + 滑动下划线,内部组合 HeightProvider
14
- * 做高度预算。激活 tab `v-model<string>` 双向绑定并自动归一;
15
- * 内容懒渲染(首次激活前不实例化)+ KeepAlive(切走保活、切回复用,
16
- * 状态保留)。内容槽 `#{key}` > `tabs[].component`,
17
- * 标题槽 `#header-{key}` > `tabs[].title`,两类槽作用域均 `{ tab, active }`。
11
+ * Tab 容器:手写 tab-bar + 滑动下划线 + 懒渲染 KeepAlive。
12
+ * 嵌套联动用 `channel="x"` / `parentChannel="x"` 字符串显式配对([MUST NOT] 响应式)。
18
13
  */
19
14
  TabsMain,
20
15
  /**
21
- * 递归高度预算节点:按 `height` 祖先同 channel inject `0` 优先级
22
- * 取得预算,扣除 `#header` 槽实测高度后将剩余可用高度沿同 channel
23
- * provide 给后代。默认槽作用域 `{ height }` 提供当前可用高度数值。
16
+ * 纯数值高度预算节点:`available = max(viewportHeight - reserve, minHeight ?? 0)`,
17
+ * 默认槽 `{ height }` 暴露。Fragment 双根,不撑开自身,不 inject 不 provide。
18
+ * 消费方 [MUST] slot scope `:height` 自设容器高。
19
+ */
20
+ HeightProvider,
21
+ /**
22
+ * 配置式按钮组(泛型 Ctx 由消费方决定形状)。
23
+ * - 二选一渲染:`actionBtnProps`(走 ActionBtn 带 confirm/beforeOpen)优先 / `props`(走 ElButton)。
24
+ * - `render` 对标 FormItem.render 三态:string | Component | (props:{ctx})=>VNode。
25
+ * - `show` 函数过滤;`defaultSize` 给基础 size,业务侧显式 size 优先。
26
+ * - 典型消费:TableMain.toolbar 内置 / 表格 OPERATE 列(BL-5 推广)。
24
27
  */
25
- HeightProvider, };
28
+ ActionBtnGroup, };
26
29
  export declare const displayInstall: Plugin;
27
30
  export * from './types';