@manohub/ui 0.6.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 (169) hide show
  1. package/README.md +141 -0
  2. package/dist/components/avatar/index.d.ts +283 -0
  3. package/dist/components/avatar/index.js +167 -0
  4. package/dist/components/badge/index.d.ts +132 -0
  5. package/dist/components/badge/index.js +99 -0
  6. package/dist/components/button/index.d.ts +578 -0
  7. package/dist/components/button/index.js +191 -0
  8. package/dist/components/capsule/index.d.ts +161 -0
  9. package/dist/components/capsule/index.js +101 -0
  10. package/dist/components/card/index.d.ts +456 -0
  11. package/dist/components/card/index.js +231 -0
  12. package/dist/components/checkbox/index.d.ts +331 -0
  13. package/dist/components/checkbox/index.js +165 -0
  14. package/dist/components/code/index.d.ts +134 -0
  15. package/dist/components/code/index.js +117 -0
  16. package/dist/components/code-editor/index.d.ts +163 -0
  17. package/dist/components/code-editor/index.js +98 -0
  18. package/dist/components/collapse/index.d.ts +125 -0
  19. package/dist/components/collapse/index.js +95 -0
  20. package/dist/components/control-size.d.ts +8 -0
  21. package/dist/components/dialog/index.d.ts +224 -0
  22. package/dist/components/dialog/index.js +194 -0
  23. package/dist/components/divider/index.d.ts +64 -0
  24. package/dist/components/divider/index.js +62 -0
  25. package/dist/components/drawer/index.d.ts +226 -0
  26. package/dist/components/drawer/index.js +190 -0
  27. package/dist/components/filter/index.d.ts +391 -0
  28. package/dist/components/filter/index.js +203 -0
  29. package/dist/components/form/index.d.ts +704 -0
  30. package/dist/components/form/index.js +329 -0
  31. package/dist/components/input/index.d.ts +980 -0
  32. package/dist/components/input/index.js +334 -0
  33. package/dist/components/layout/index.d.ts +162 -0
  34. package/dist/components/layout/index.js +100 -0
  35. package/dist/components/list-view/index.d.ts +563 -0
  36. package/dist/components/list-view/index.js +221 -0
  37. package/dist/components/loading/index.d.ts +77 -0
  38. package/dist/components/loading/index.js +40 -0
  39. package/dist/components/nav/index.d.ts +293 -0
  40. package/dist/components/nav/index.js +164 -0
  41. package/dist/components/notice/index.d.ts +137 -0
  42. package/dist/components/notice/index.js +101 -0
  43. package/dist/components/notification/index.d.ts +118 -0
  44. package/dist/components/notification/index.js +99 -0
  45. package/dist/components/page/index.d.ts +276 -0
  46. package/dist/components/page/index.js +351 -0
  47. package/dist/components/page/split-resize.d.ts +42 -0
  48. package/dist/components/page/split-resize.js +36 -0
  49. package/dist/components/pagination/index.d.ts +171 -0
  50. package/dist/components/pagination/index.js +226 -0
  51. package/dist/components/panel/index.d.ts +401 -0
  52. package/dist/components/panel/index.js +193 -0
  53. package/dist/components/part-padding.d.ts +27 -0
  54. package/dist/components/part-padding.js +23 -0
  55. package/dist/components/query-state/index.d.ts +207 -0
  56. package/dist/components/query-state/index.js +181 -0
  57. package/dist/components/radio/index.d.ts +473 -0
  58. package/dist/components/radio/index.js +250 -0
  59. package/dist/components/search/index.d.ts +167 -0
  60. package/dist/components/search/index.js +105 -0
  61. package/dist/components/select/index.d.ts +252 -0
  62. package/dist/components/select/index.js +281 -0
  63. package/dist/components/skeleton/index.d.ts +88 -0
  64. package/dist/components/skeleton/index.js +56 -0
  65. package/dist/components/steps/index.d.ts +199 -0
  66. package/dist/components/steps/index.js +117 -0
  67. package/dist/components/switch/index.d.ts +150 -0
  68. package/dist/components/switch/index.js +103 -0
  69. package/dist/components/table/index.d.ts +351 -0
  70. package/dist/components/table/index.js +286 -0
  71. package/dist/components/tabs/index.d.ts +179 -0
  72. package/dist/components/tabs/index.js +153 -0
  73. package/dist/components/tabset/index.d.ts +105 -0
  74. package/dist/components/tabset/index.js +68 -0
  75. package/dist/components/tag/index.d.ts +203 -0
  76. package/dist/components/tag/index.js +144 -0
  77. package/dist/components/toast/index.d.ts +271 -0
  78. package/dist/components/toast/index.js +116 -0
  79. package/dist/components/tooltip/index.d.ts +126 -0
  80. package/dist/components/tooltip/index.js +97 -0
  81. package/dist/components/tree/index.d.ts +317 -0
  82. package/dist/components/tree/index.js +251 -0
  83. package/dist/components/upload/index.d.ts +384 -0
  84. package/dist/components/upload/index.js +172 -0
  85. package/dist/index.d.ts +63 -0
  86. package/dist/index.js +102 -0
  87. package/dist/services/base.d.ts +21 -0
  88. package/dist/services/base.js +42 -0
  89. package/dist/services/dialog.d.ts +41 -0
  90. package/dist/services/dialog.js +83 -0
  91. package/dist/services/index.d.ts +12 -0
  92. package/dist/services/loading.d.ts +21 -0
  93. package/dist/services/loading.js +41 -0
  94. package/dist/services/toast.d.ts +40 -0
  95. package/dist/services/toast.js +74 -0
  96. package/dist/styles/components/avatar.css +128 -0
  97. package/dist/styles/components/avatar.tokens.css +24 -0
  98. package/dist/styles/components/badge.css +237 -0
  99. package/dist/styles/components/button.css +454 -0
  100. package/dist/styles/components/button.tokens.css +56 -0
  101. package/dist/styles/components/capsule.css +120 -0
  102. package/dist/styles/components/capsule.tokens.css +27 -0
  103. package/dist/styles/components/card.css +192 -0
  104. package/dist/styles/components/checkbox.css +145 -0
  105. package/dist/styles/components/checkbox.tokens.css +26 -0
  106. package/dist/styles/components/code-editor.css +91 -0
  107. package/dist/styles/components/code-editor.tokens.css +24 -0
  108. package/dist/styles/components/code.css +153 -0
  109. package/dist/styles/components/code.tokens.css +29 -0
  110. package/dist/styles/components/collapse.css +62 -0
  111. package/dist/styles/components/collapse.tokens.css +20 -0
  112. package/dist/styles/components/dialog.css +106 -0
  113. package/dist/styles/components/dialog.tokens.css +24 -0
  114. package/dist/styles/components/divider.css +71 -0
  115. package/dist/styles/components/divider.tokens.css +21 -0
  116. package/dist/styles/components/drawer.css +143 -0
  117. package/dist/styles/components/drawer.tokens.css +22 -0
  118. package/dist/styles/components/filter.css +41 -0
  119. package/dist/styles/components/filter.tokens.css +14 -0
  120. package/dist/styles/components/form.css +220 -0
  121. package/dist/styles/components/form.tokens.css +15 -0
  122. package/dist/styles/components/input.css +445 -0
  123. package/dist/styles/components/input.tokens.css +41 -0
  124. package/dist/styles/components/layout.css +198 -0
  125. package/dist/styles/components/list-view.css +244 -0
  126. package/dist/styles/components/loading.css +76 -0
  127. package/dist/styles/components/loading.tokens.css +23 -0
  128. package/dist/styles/components/nav.css +48 -0
  129. package/dist/styles/components/notice.css +153 -0
  130. package/dist/styles/components/notice.tokens.css +17 -0
  131. package/dist/styles/components/notification.css +159 -0
  132. package/dist/styles/components/notification.tokens.css +37 -0
  133. package/dist/styles/components/page.css +473 -0
  134. package/dist/styles/components/pagination.css +297 -0
  135. package/dist/styles/components/pagination.tokens.css +32 -0
  136. package/dist/styles/components/panel.css +77 -0
  137. package/dist/styles/components/query-state.css +88 -0
  138. package/dist/styles/components/radio.css +271 -0
  139. package/dist/styles/components/radio.tokens.css +26 -0
  140. package/dist/styles/components/search.css +30 -0
  141. package/dist/styles/components/select.css +242 -0
  142. package/dist/styles/components/select.tokens.css +33 -0
  143. package/dist/styles/components/skeleton.css +60 -0
  144. package/dist/styles/components/skeleton.tokens.css +27 -0
  145. package/dist/styles/components/steps.css +157 -0
  146. package/dist/styles/components/steps.tokens.css +42 -0
  147. package/dist/styles/components/switch.css +165 -0
  148. package/dist/styles/components/switch.tokens.css +26 -0
  149. package/dist/styles/components/table.css +439 -0
  150. package/dist/styles/components/table.tokens.css +41 -0
  151. package/dist/styles/components/tabs.css +234 -0
  152. package/dist/styles/components/tabs.tokens.css +30 -0
  153. package/dist/styles/components/tag.css +200 -0
  154. package/dist/styles/components/tag.tokens.css +30 -0
  155. package/dist/styles/components/toast.css +150 -0
  156. package/dist/styles/components/toast.tokens.css +26 -0
  157. package/dist/styles/components/tooltip.css +89 -0
  158. package/dist/styles/components/tooltip.tokens.css +25 -0
  159. package/dist/styles/components/tree.css +139 -0
  160. package/dist/styles/components/tree.tokens.css +20 -0
  161. package/dist/styles/components/upload.css +150 -0
  162. package/dist/styles/components/upload.tokens.css +27 -0
  163. package/dist/styles/index.css +149 -0
  164. package/dist/styles/operations/collapse.css +84 -0
  165. package/dist/styles/operations/popup.css +189 -0
  166. package/dist/styles/operations/tabset.css +57 -0
  167. package/dist/utils/state-illustration.d.ts +31 -0
  168. package/dist/utils/state-illustration.js +156 -0
  169. package/package.json +62 -0
@@ -0,0 +1,224 @@
1
+ import { type PropType, type SlotsType, type VNodeChild } from 'vue';
2
+ export type DialogWidth = 'md' | 'lg';
3
+ /**
4
+ * 对话框(**自绘**;模态语义与遮罩全由原生 `<dialog>` 给)。
5
+ *
6
+ * ## JS 只做「原生做不到的那两件」
7
+ *
8
+ * 模态语义、Esc、焦点陷阱、`::backdrop` 遮罩、top layer 渲染 —— 都是浏览器给 `<dialog>` 的原生能力,
9
+ * 本件**不自建浮层**(不做定位计算、不做 focus trap、不写遮罩层),只做:
10
+ * ① 把**受控的 `open` 同步到原生 API**(`open` 变真 → `showModal()`,变假 → `close()`);
11
+ * ② 内建底栏的「确定」在 `onOk` 返回 Promise 时自动进加载态并吞重复点击。
12
+ *
13
+ * ## 关闭是受控的
14
+ *
15
+ * 关闭位、Esc(原生 `cancel` 事件)与点遮罩都只回调:`update:open(false)` + `onClose()` / `onCancel()`。
16
+ * 可见性归消费方 —— 避免「组件自己消失、业务状态还以为开着」两套口径。
17
+ *
18
+ * ## 底栏三态(**由消费方按需选一**,不要混着用)
19
+ *
20
+ * | 用法 | 结果 |
21
+ * | --- | --- |
22
+ * | 给 `footer` 插槽 | 完全自绘底栏(要用别的按钮形态时选这条) |
23
+ * | 给 `okText` / `onOk` | 内建底栏:`[取消] [确定]`,按钮就是本包 `Button` |
24
+ * | `:show-footer="false"` | 不渲染底栏(纯提示 / 只有关闭位) |
25
+ *
26
+ * @example 内建底栏(最常用)
27
+ * <Dialog v-model:open="visible" title="删除确认" ok-text="删除" :on-ok="remove" :on-cancel="() => (visible = false)">
28
+ * 删除后不可恢复,确认继续?
29
+ * </Dialog>
30
+ *
31
+ * @example 自绘底栏
32
+ * <Dialog v-model:open="visible" title="详情">
33
+ * 正文
34
+ * <template #footer><Button variant="text" @click="visible = false">关闭</Button></template>
35
+ * </Dialog>
36
+ */
37
+ export declare const Dialog: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
38
+ /** 受控开合 */
39
+ open: {
40
+ type: BooleanConstructor;
41
+ default: boolean;
42
+ };
43
+ /** 标题(复杂标题走 `title` 插槽) */
44
+ title: {
45
+ type: StringConstructor;
46
+ default: undefined;
47
+ };
48
+ /** 宽度:尺寸档 `md` 520 / `lg` 760,或直接给像素数 */
49
+ width: {
50
+ type: PropType<DialogWidth | number>;
51
+ default: string;
52
+ };
53
+ /** 是否显示右上关闭位 */
54
+ closable: {
55
+ type: BooleanConstructor;
56
+ default: boolean;
57
+ };
58
+ /** 点遮罩是否关闭(模态确认类弹窗通常**不**给,防误关) */
59
+ closeOnBackdrop: {
60
+ type: BooleanConstructor;
61
+ default: boolean;
62
+ };
63
+ /** `closeOnBackdrop` 的别名(主流库的通行叫法,两者取或) */
64
+ maskClosable: {
65
+ type: BooleanConstructor;
66
+ default: boolean;
67
+ };
68
+ /** Esc 是否关闭(缺省关;表单类弹窗常关掉它,防手滑丢内容) */
69
+ keyboard: {
70
+ type: BooleanConstructor;
71
+ default: boolean;
72
+ };
73
+ /** 大小档(如 `700px` / `min(720px, 90vw)`),给它就是唯一宽度来源 */
74
+ panelWidth: {
75
+ type: StringConstructor;
76
+ default: undefined;
77
+ };
78
+ /** 内建底栏:确定按钮文案 */
79
+ okText: {
80
+ type: StringConstructor;
81
+ default: string;
82
+ };
83
+ /** 内建底栏:取消按钮文案 */
84
+ cancelText: {
85
+ type: StringConstructor;
86
+ default: string;
87
+ };
88
+ /** 确定按钮的危险色(删除类确认) */
89
+ okDanger: {
90
+ type: BooleanConstructor;
91
+ default: boolean;
92
+ };
93
+ /** 确定按钮的加载态(外部受控;`onOk` 返回 Promise 时本件也会自己管) */
94
+ confirmLoading: {
95
+ type: BooleanConstructor;
96
+ default: boolean;
97
+ };
98
+ /** 是否渲染内建底栏;缺省 = 「给了 `onOk` 才渲染」 */
99
+ showFooter: {
100
+ type: PropType<boolean | undefined>;
101
+ default: undefined;
102
+ };
103
+ /** 确定回调(返回 Promise 时按钮自动进加载态;返回值类型不限,非 thenable 一律忽略) */
104
+ onOk: {
105
+ type: PropType<() => unknown>;
106
+ default: undefined;
107
+ };
108
+ /** 取消回调(关闭位与 Esc 也会调它) */
109
+ onCancel: {
110
+ type: PropType<() => void>;
111
+ default: undefined;
112
+ };
113
+ /** 关闭回调(与 `onCancel` 同源,语义更宽) */
114
+ onClose: {
115
+ type: PropType<() => void>;
116
+ default: undefined;
117
+ };
118
+ }>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
119
+ 'update:open': (value: boolean) => true;
120
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
121
+ /** 受控开合 */
122
+ open: {
123
+ type: BooleanConstructor;
124
+ default: boolean;
125
+ };
126
+ /** 标题(复杂标题走 `title` 插槽) */
127
+ title: {
128
+ type: StringConstructor;
129
+ default: undefined;
130
+ };
131
+ /** 宽度:尺寸档 `md` 520 / `lg` 760,或直接给像素数 */
132
+ width: {
133
+ type: PropType<DialogWidth | number>;
134
+ default: string;
135
+ };
136
+ /** 是否显示右上关闭位 */
137
+ closable: {
138
+ type: BooleanConstructor;
139
+ default: boolean;
140
+ };
141
+ /** 点遮罩是否关闭(模态确认类弹窗通常**不**给,防误关) */
142
+ closeOnBackdrop: {
143
+ type: BooleanConstructor;
144
+ default: boolean;
145
+ };
146
+ /** `closeOnBackdrop` 的别名(主流库的通行叫法,两者取或) */
147
+ maskClosable: {
148
+ type: BooleanConstructor;
149
+ default: boolean;
150
+ };
151
+ /** Esc 是否关闭(缺省关;表单类弹窗常关掉它,防手滑丢内容) */
152
+ keyboard: {
153
+ type: BooleanConstructor;
154
+ default: boolean;
155
+ };
156
+ /** 大小档(如 `700px` / `min(720px, 90vw)`),给它就是唯一宽度来源 */
157
+ panelWidth: {
158
+ type: StringConstructor;
159
+ default: undefined;
160
+ };
161
+ /** 内建底栏:确定按钮文案 */
162
+ okText: {
163
+ type: StringConstructor;
164
+ default: string;
165
+ };
166
+ /** 内建底栏:取消按钮文案 */
167
+ cancelText: {
168
+ type: StringConstructor;
169
+ default: string;
170
+ };
171
+ /** 确定按钮的危险色(删除类确认) */
172
+ okDanger: {
173
+ type: BooleanConstructor;
174
+ default: boolean;
175
+ };
176
+ /** 确定按钮的加载态(外部受控;`onOk` 返回 Promise 时本件也会自己管) */
177
+ confirmLoading: {
178
+ type: BooleanConstructor;
179
+ default: boolean;
180
+ };
181
+ /** 是否渲染内建底栏;缺省 = 「给了 `onOk` 才渲染」 */
182
+ showFooter: {
183
+ type: PropType<boolean | undefined>;
184
+ default: undefined;
185
+ };
186
+ /** 确定回调(返回 Promise 时按钮自动进加载态;返回值类型不限,非 thenable 一律忽略) */
187
+ onOk: {
188
+ type: PropType<() => unknown>;
189
+ default: undefined;
190
+ };
191
+ /** 取消回调(关闭位与 Esc 也会调它) */
192
+ onCancel: {
193
+ type: PropType<() => void>;
194
+ default: undefined;
195
+ };
196
+ /** 关闭回调(与 `onCancel` 同源,语义更宽) */
197
+ onClose: {
198
+ type: PropType<() => void>;
199
+ default: undefined;
200
+ };
201
+ }>> & Readonly<{
202
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
203
+ }>, {
204
+ open: boolean;
205
+ title: string;
206
+ onCancel: () => void;
207
+ onClose: () => void;
208
+ width: number | DialogWidth;
209
+ closable: boolean;
210
+ closeOnBackdrop: boolean;
211
+ maskClosable: boolean;
212
+ keyboard: boolean;
213
+ panelWidth: string;
214
+ okText: string;
215
+ cancelText: string;
216
+ okDanger: boolean;
217
+ confirmLoading: boolean;
218
+ showFooter: boolean | undefined;
219
+ onOk: () => unknown;
220
+ }, SlotsType<{
221
+ default?: () => VNodeChild;
222
+ title?: () => VNodeChild;
223
+ footer?: () => VNodeChild;
224
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -0,0 +1,194 @@
1
+ import { defineComponent, ref, watch, onMounted, onBeforeUnmount, computed, createVNode } from "vue";
2
+ import { Icon } from "@manohub/icon";
3
+ import { Button } from "../button/index.js";
4
+ const Dialog = /* @__PURE__ */ defineComponent({
5
+ name: "Dialog",
6
+ inheritAttrs: false,
7
+ props: {
8
+ /** 受控开合 */
9
+ open: {
10
+ type: Boolean,
11
+ default: false
12
+ },
13
+ /** 标题(复杂标题走 `title` 插槽) */
14
+ title: {
15
+ type: String,
16
+ default: void 0
17
+ },
18
+ /** 宽度:尺寸档 `md` 520 / `lg` 760,或直接给像素数 */
19
+ width: {
20
+ type: [String, Number],
21
+ default: "md"
22
+ },
23
+ /** 是否显示右上关闭位 */
24
+ closable: {
25
+ type: Boolean,
26
+ default: true
27
+ },
28
+ /** 点遮罩是否关闭(模态确认类弹窗通常**不**给,防误关) */
29
+ closeOnBackdrop: {
30
+ type: Boolean,
31
+ default: false
32
+ },
33
+ /** `closeOnBackdrop` 的别名(主流库的通行叫法,两者取或) */
34
+ maskClosable: {
35
+ type: Boolean,
36
+ default: false
37
+ },
38
+ /** Esc 是否关闭(缺省关;表单类弹窗常关掉它,防手滑丢内容) */
39
+ keyboard: {
40
+ type: Boolean,
41
+ default: true
42
+ },
43
+ /** 大小档(如 `700px` / `min(720px, 90vw)`),给它就是唯一宽度来源 */
44
+ panelWidth: {
45
+ type: String,
46
+ default: void 0
47
+ },
48
+ /** 内建底栏:确定按钮文案 */
49
+ okText: {
50
+ type: String,
51
+ default: "确定"
52
+ },
53
+ /** 内建底栏:取消按钮文案 */
54
+ cancelText: {
55
+ type: String,
56
+ default: "取消"
57
+ },
58
+ /** 确定按钮的危险色(删除类确认) */
59
+ okDanger: {
60
+ type: Boolean,
61
+ default: false
62
+ },
63
+ /** 确定按钮的加载态(外部受控;`onOk` 返回 Promise 时本件也会自己管) */
64
+ confirmLoading: {
65
+ type: Boolean,
66
+ default: false
67
+ },
68
+ /** 是否渲染内建底栏;缺省 = 「给了 `onOk` 才渲染」 */
69
+ showFooter: {
70
+ type: Boolean,
71
+ default: void 0
72
+ },
73
+ /** 确定回调(返回 Promise 时按钮自动进加载态;返回值类型不限,非 thenable 一律忽略) */
74
+ onOk: {
75
+ type: Function,
76
+ default: void 0
77
+ },
78
+ /** 取消回调(关闭位与 Esc 也会调它) */
79
+ onCancel: {
80
+ type: Function,
81
+ default: void 0
82
+ },
83
+ /** 关闭回调(与 `onCancel` 同源,语义更宽) */
84
+ onClose: {
85
+ type: Function,
86
+ default: void 0
87
+ }
88
+ },
89
+ emits: {
90
+ "update:open": (value) => true
91
+ },
92
+ slots: Object,
93
+ setup(props, {
94
+ emit,
95
+ slots,
96
+ attrs
97
+ }) {
98
+ const dialogRef = ref(null);
99
+ const innerLoading = ref(false);
100
+ const requestClose = (kind = "close") => {
101
+ if (kind === "cancel") props.onCancel?.();
102
+ props.onClose?.();
103
+ emit("update:open", false);
104
+ };
105
+ const syncOpen = () => {
106
+ const el = dialogRef.value;
107
+ if (!el) return;
108
+ if (props.open) {
109
+ if (!el.open && typeof el.showModal === "function") el.showModal();
110
+ } else if (el.open && typeof el.close === "function") {
111
+ el.close();
112
+ }
113
+ };
114
+ watch(() => props.open, syncOpen, {
115
+ flush: "post"
116
+ });
117
+ onMounted(syncOpen);
118
+ onBeforeUnmount(() => {
119
+ const el = dialogRef.value;
120
+ if (el?.open && typeof el.close === "function") el.close();
121
+ });
122
+ const handleOk = () => {
123
+ const result = props.onOk?.();
124
+ if (result && typeof result.then === "function") {
125
+ innerLoading.value = true;
126
+ void result.finally(() => innerLoading.value = false);
127
+ }
128
+ };
129
+ const loading = computed(() => props.confirmLoading || innerLoading.value);
130
+ const showBuiltinFooter = computed(() => props.showFooter ?? props.onOk !== void 0);
131
+ const widthStyle = computed(() => {
132
+ if (props.panelWidth) return {
133
+ width: props.panelWidth,
134
+ maxWidth: props.panelWidth
135
+ };
136
+ if (typeof props.width === "number") return {
137
+ width: `${props.width}px`,
138
+ maxWidth: `${props.width}px`
139
+ };
140
+ return void 0;
141
+ });
142
+ return () => createVNode("dialog", {
143
+ "ref": dialogRef,
144
+ "class": ["mh-popup", "mh-dialog", props.width === "lg" ? "mh-dialog--lg" : "", attrs.class].filter(Boolean).join(" "),
145
+ "style": {
146
+ ...widthStyle.value,
147
+ ...attrs.style
148
+ },
149
+ "onCancel": (event) => {
150
+ event.preventDefault();
151
+ if (!props.keyboard) return;
152
+ requestClose("cancel");
153
+ },
154
+ "onClick": (event) => {
155
+ if ((props.closeOnBackdrop || props.maskClosable) && event.target === dialogRef.value) {
156
+ requestClose("close");
157
+ }
158
+ }
159
+ }, [props.title || slots.title || props.closable ? createVNode("div", {
160
+ "class": "mh-dialog__header"
161
+ }, [createVNode("span", {
162
+ "class": "mh-dialog__title"
163
+ }, [slots.title ? slots.title() : props.title]), props.closable ? createVNode("button", {
164
+ "type": "button",
165
+ "class": "mh-dialog__close",
166
+ "aria-label": "关闭",
167
+ "onClick": () => requestClose("cancel")
168
+ }, [createVNode(Icon, {
169
+ "name": "close",
170
+ "size": 14
171
+ }, null)]) : null]) : null, createVNode("div", {
172
+ "class": "mh-dialog__body"
173
+ }, [slots.default?.()]), slots.footer ? createVNode("div", {
174
+ "class": "mh-dialog__footer"
175
+ }, [slots.footer()]) : showBuiltinFooter.value ? createVNode("div", {
176
+ "class": "mh-dialog__footer"
177
+ }, [createVNode(Button, {
178
+ "variant": "secondary",
179
+ "onClick": () => requestClose("cancel")
180
+ }, {
181
+ default: () => props.cancelText
182
+ }), createVNode(Button, {
183
+ "variant": "primary",
184
+ "danger": props.okDanger,
185
+ "loading": loading.value,
186
+ "onClick": handleOk
187
+ }, {
188
+ default: () => props.okText
189
+ })]) : null]);
190
+ }
191
+ });
192
+ export {
193
+ Dialog
194
+ };
@@ -0,0 +1,64 @@
1
+ import { type PropType, type SlotsType, type VNodeChild } from 'vue';
2
+ export interface DividerProps {
3
+ /** 方向:`horizontal`(缺省,分隔上下内容)/ `vertical`(分隔左右内容,高度由父容器拉伸) */
4
+ direction?: 'horizontal' | 'vertical';
5
+ /** 虚线档(设计稿未覆盖 → 沿用「实线为默认」的惯例,虚线给弱分组用) */
6
+ dashed?: boolean;
7
+ /** 中段文字(只用水平档:给线让位,左段固定 24、右段吃剩余) */
8
+ label?: string;
9
+ }
10
+ /**
11
+ * 分隔线(水平 / 垂直 × 实线 / 虚线 × 可带中段文字)。
12
+ *
13
+ * 面里的线色取 `--ui-base-300`(本包唯一的「线 / 框」色),**不新造色值** ——
14
+ * 换主题时与页头下边线、表格线、卡片描边一起变。
15
+ *
16
+ * `vertical` 档的高度走 `align-self: stretch`:父级是 flex 行时自动占满整行高;
17
+ * 父级没有确定高度时退到 `1em`(不会塌成 0)。
18
+ *
19
+ * @example 水平分隔(筛选区与内容之间)
20
+ * <Divider />
21
+ *
22
+ * @example 带中段文字
23
+ * <Divider label="高级筛选" />
24
+ *
25
+ * @example 左侧树栏与主栏之间的一条竖线
26
+ * <div style="display:flex">
27
+ * <aside>…</aside>
28
+ * <Divider direction="vertical" />
29
+ * <main>…</main>
30
+ * </div>
31
+ */
32
+ export declare const Divider: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
33
+ direction: {
34
+ type: PropType<DividerProps["direction"]>;
35
+ default: string;
36
+ };
37
+ dashed: {
38
+ type: BooleanConstructor;
39
+ default: boolean;
40
+ };
41
+ label: {
42
+ type: StringConstructor;
43
+ default: undefined;
44
+ };
45
+ }>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
46
+ direction: {
47
+ type: PropType<DividerProps["direction"]>;
48
+ default: string;
49
+ };
50
+ dashed: {
51
+ type: BooleanConstructor;
52
+ default: boolean;
53
+ };
54
+ label: {
55
+ type: StringConstructor;
56
+ default: undefined;
57
+ };
58
+ }>> & Readonly<{}>, {
59
+ dashed: boolean;
60
+ label: string;
61
+ direction: "horizontal" | "vertical" | undefined;
62
+ }, SlotsType<{
63
+ default?: () => VNodeChild;
64
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -0,0 +1,62 @@
1
+ import { defineComponent, createVNode } from "vue";
2
+ const Divider = /* @__PURE__ */ defineComponent({
3
+ name: "Divider",
4
+ inheritAttrs: false,
5
+ props: {
6
+ direction: {
7
+ type: String,
8
+ default: "horizontal"
9
+ },
10
+ dashed: {
11
+ type: Boolean,
12
+ default: false
13
+ },
14
+ label: {
15
+ type: String,
16
+ default: void 0
17
+ }
18
+ },
19
+ slots: Object,
20
+ setup(props, {
21
+ attrs,
22
+ slots
23
+ }) {
24
+ return () => {
25
+ const vertical = props.direction === "vertical";
26
+ const content = props.label ?? slots.default?.();
27
+ const withLabel = !vertical && content !== void 0 && content !== null;
28
+ const classes = () => ["mh-divider", vertical ? "mh-divider--vertical" : "mh-divider--horizontal", props.dashed ? "mh-divider--dashed" : void 0, withLabel ? "mh-divider--with-label" : void 0, attrs.class].filter(Boolean).join(" ");
29
+ if (vertical) {
30
+ return createVNode("span", {
31
+ "class": classes(),
32
+ "style": attrs.style,
33
+ "role": "separator",
34
+ "aria-orientation": "vertical"
35
+ }, null);
36
+ }
37
+ if (!withLabel) {
38
+ return createVNode("div", {
39
+ "class": classes(),
40
+ "style": attrs.style,
41
+ "role": "separator",
42
+ "aria-orientation": "horizontal"
43
+ }, null);
44
+ }
45
+ return createVNode("div", {
46
+ "class": classes(),
47
+ "style": attrs.style,
48
+ "role": "separator",
49
+ "aria-orientation": "horizontal"
50
+ }, [createVNode("span", {
51
+ "class": "mh-divider__line mh-divider__line--start"
52
+ }, null), createVNode("span", {
53
+ "class": "mh-divider__label"
54
+ }, [content]), createVNode("span", {
55
+ "class": "mh-divider__line"
56
+ }, null)]);
57
+ };
58
+ }
59
+ });
60
+ export {
61
+ Divider
62
+ };