@manohub/ui 1.0.4 → 1.0.6
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.
- package/README.md +8 -2
- package/dist/components/badge/index.d.ts +24 -46
- package/dist/components/badge/index.js +7 -11
- package/dist/components/button/index.d.ts +11 -31
- package/dist/components/capsule/index.d.ts +13 -27
- package/dist/components/card/index.d.ts +28 -62
- package/dist/components/checkbox/index.d.ts +1 -9
- package/dist/components/code-block/index.d.ts +28 -55
- package/dist/components/collapse/index.d.ts +2 -0
- package/dist/components/dialog/index.d.ts +9 -18
- package/dist/components/dialog/index.js +3 -2
- package/dist/components/divider/index.d.ts +1 -12
- package/dist/components/drawer/index.d.ts +7 -15
- package/dist/components/filter/index.d.ts +27 -69
- package/dist/components/filter/index.js +3 -8
- package/dist/components/form/index.d.ts +86 -218
- package/dist/components/form/index.js +5 -12
- package/dist/components/input/bordered.d.ts +4 -6
- package/dist/components/input/index.d.ts +36 -83
- package/dist/components/input/index.js +6 -11
- package/dist/components/input/number-input.d.ts +11 -23
- package/dist/components/layout/index.d.ts +21 -28
- package/dist/components/layout/index.js +5 -8
- package/dist/components/list-view/index.d.ts +10 -43
- package/dist/components/loading/index.d.ts +8 -19
- package/dist/components/nav/index.d.ts +14 -35
- package/dist/components/nav/index.js +1 -3
- package/dist/components/notice/index.d.ts +13 -33
- package/dist/components/notice/index.js +3 -5
- package/dist/components/notification/index.d.ts +0 -9
- package/dist/components/page/index.d.ts +29 -71
- package/dist/components/page/split-resize.d.ts +9 -18
- package/dist/components/pagination/index.d.ts +1 -5
- package/dist/components/panel/index.d.ts +33 -70
- package/dist/components/panel/index.js +1 -4
- package/dist/components/part-padding.d.ts +5 -13
- package/dist/components/query-state/index.d.ts +8 -32
- package/dist/components/radio/index.d.ts +13 -17
- package/dist/components/search/index.d.ts +12 -32
- package/dist/components/select/index.d.ts +30 -49
- package/dist/components/select/index.js +3 -3
- package/dist/components/select/select-panel.d.ts +23 -35
- package/dist/components/select/select-panel.js +5 -10
- package/dist/components/select/select-shared.d.ts +18 -44
- package/dist/components/select/select-tree.d.ts +11 -16
- package/dist/components/select/select-trigger.d.ts +6 -16
- package/dist/components/select/select-trigger.js +5 -11
- package/dist/components/skeleton/index.d.ts +1 -5
- package/dist/components/steps/index.d.ts +55 -111
- package/dist/components/steps/index.js +8 -16
- package/dist/components/switch/index.d.ts +17 -33
- package/dist/components/switch/index.js +2 -4
- package/dist/components/tabbar/index.d.ts +1 -6
- package/dist/components/table/index.d.ts +20 -72
- package/dist/components/table/index.js +4 -8
- package/dist/components/tabs/index.d.ts +22 -44
- package/dist/components/text/index.d.ts +10 -21
- package/dist/components/toast/index.d.ts +4 -13
- package/dist/components/tooltip/index.d.ts +1 -12
- package/dist/components/tree/index.d.ts +51 -101
- package/dist/components/tree/index.js +17 -33
- package/dist/components/upload/index.d.ts +1 -4
- package/dist/index.d.ts +2 -2
- package/dist/services/base.d.ts +32 -8
- package/dist/services/dialog.d.ts +13 -23
- package/dist/services/dialog.js +2 -0
- package/dist/services/index.d.ts +2 -2
- package/dist/services/loading.d.ts +9 -12
- package/dist/services/loading.js +8 -1
- package/dist/services/toast.d.ts +4 -14
- package/dist/styles/components/avatar.css +5 -7
- package/dist/styles/components/avatar.tokens.css +4 -9
- package/dist/styles/components/badge.css +3 -6
- package/dist/styles/components/badge.tokens.css +5 -17
- package/dist/styles/components/button.css +35 -57
- package/dist/styles/components/button.tokens.css +5 -14
- package/dist/styles/components/capsule.css +13 -20
- package/dist/styles/components/capsule.tokens.css +4 -9
- package/dist/styles/components/card.css +13 -24
- package/dist/styles/components/checkbox.css +11 -15
- package/dist/styles/components/checkbox.tokens.css +4 -9
- package/dist/styles/components/code-block.css +30 -40
- package/dist/styles/components/code-block.tokens.css +7 -20
- package/dist/styles/components/collapse.css +6 -10
- package/dist/styles/components/collapse.tokens.css +4 -9
- package/dist/styles/components/dialog.css +19 -27
- package/dist/styles/components/dialog.tokens.css +9 -9
- package/dist/styles/components/divider.css +9 -14
- package/dist/styles/components/divider.tokens.css +4 -9
- package/dist/styles/components/drawer.css +12 -16
- package/dist/styles/components/drawer.tokens.css +7 -9
- package/dist/styles/components/filter.css +13 -24
- package/dist/styles/components/form.css +77 -149
- package/dist/styles/components/form.tokens.css +9 -6
- package/dist/styles/components/input.css +73 -177
- package/dist/styles/components/input.tokens.css +5 -13
- package/dist/styles/components/layout.css +13 -29
- package/dist/styles/components/loading.css +6 -10
- package/dist/styles/components/loading.tokens.css +4 -9
- package/dist/styles/components/notice.css +3 -1
- package/dist/styles/components/notice.tokens.css +8 -6
- package/dist/styles/components/notification.css +9 -12
- package/dist/styles/components/notification.tokens.css +4 -12
- package/dist/styles/components/page.css +32 -48
- package/dist/styles/components/pagination.css +14 -15
- package/dist/styles/components/pagination.tokens.css +4 -9
- package/dist/styles/components/query-state.css +1 -1
- package/dist/styles/components/query-state.tokens.css +6 -0
- package/dist/styles/components/radio.css +12 -25
- package/dist/styles/components/radio.tokens.css +4 -9
- package/dist/styles/components/search.css +8 -18
- package/dist/styles/components/select.css +63 -109
- package/dist/styles/components/select.tokens.css +4 -12
- package/dist/styles/components/skeleton.css +4 -7
- package/dist/styles/components/skeleton.tokens.css +4 -9
- package/dist/styles/components/steps.css +9 -12
- package/dist/styles/components/steps.tokens.css +4 -12
- package/dist/styles/components/switch.css +7 -8
- package/dist/styles/components/switch.tokens.css +4 -9
- package/dist/styles/components/tabbar.css +12 -11
- package/dist/styles/components/tabbar.tokens.css +4 -9
- package/dist/styles/components/table.css +52 -93
- package/dist/styles/components/table.tokens.css +5 -6
- package/dist/styles/components/tag.css +13 -23
- package/dist/styles/components/tag.tokens.css +5 -11
- package/dist/styles/components/text.css +11 -23
- package/dist/styles/components/toast.css +11 -18
- package/dist/styles/components/toast.tokens.css +6 -9
- package/dist/styles/components/tooltip.css +9 -11
- package/dist/styles/components/tooltip.tokens.css +5 -9
- package/dist/styles/components/tree.css +14 -27
- package/dist/styles/components/tree.tokens.css +5 -6
- package/dist/styles/components/upload.css +10 -13
- package/dist/styles/components/upload.tokens.css +4 -9
- package/dist/styles/index.css +27 -50
- package/dist/styles/operations/collapse.css +12 -25
- package/dist/styles/operations/popup.css +41 -79
- package/dist/styles/operations/tabs.css +14 -32
- package/dist/styles/reset.css +0 -61
- package/package.json +2 -2
|
@@ -27,23 +27,7 @@ export interface TextareaAutoSize {
|
|
|
27
27
|
* (`id` / `name` / `aria-*` / `data-*` / `title` / 原生事件)—— 壳只是排版容器,属性落它上面等于丢掉
|
|
28
28
|
* —— 见 `forwardAttrs`;触发器形态另有 `controlClass` / `controlAttrs` 两个**专口子**(同名键以它为准)。
|
|
29
29
|
*
|
|
30
|
-
*
|
|
31
|
-
* <Input modelValue={kw} placeholder="搜索" clearable prefix={<Icon name="search" />} onChange={setKw} />
|
|
32
|
-
*
|
|
33
|
-
* @example 密码(右端图标切换明/密文)
|
|
34
|
-
* <Input type="password" modelValue={pwd} onChange={setPwd} />
|
|
35
|
-
*
|
|
36
|
-
* @example 校验态与尺寸
|
|
37
|
-
* <Input status="error" size="lg" placeholder="请输入任务名" />
|
|
38
|
-
*
|
|
39
|
-
* @example 多行 + 字数 + 自适应高度
|
|
40
|
-
* <Textarea modelValue={note} autoSize={{ minRows: 2, maxRows: 6 }} maxlength={500} showCount onChange={setNote} />
|
|
41
|
-
*
|
|
42
|
-
* @example 触发器形态(复合件用:控件换成 `<button>`,表壳 / 清除位 / 右侧图标位全部复用)
|
|
43
|
-
* <Input as="button" clearable hasValue={!!value} placeholder="请选择" controlClass="my-picker"
|
|
44
|
-
* controlAttrs={{ popovertarget: id }}>
|
|
45
|
-
* {{ default: () => value, suffix: () => <Icon name="chevron-down" /> }}
|
|
46
|
-
* </Input>
|
|
30
|
+
* 用法见 `docs/demos/input/`(每个维度一份可运行样例;文档页 `docs/components/input.md`)。
|
|
47
31
|
*/
|
|
48
32
|
export declare const Input: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
49
33
|
/** 受控值 */
|
|
@@ -57,11 +41,9 @@ export declare const Input: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
57
41
|
default: string;
|
|
58
42
|
};
|
|
59
43
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* (`.mh-input__placeholder`)—— 当且仅当 `hasValue === false` 且本 prop 有值时渲染它,
|
|
64
|
-
* 并**取代** `default` 插槽(见上面触发器一节)。没传 `hasValue` 的调用方行为不变。
|
|
44
|
+
* 占位文案(两种形态都消费它):缺省(`as="input"`)走原生 `::placeholder` 伪元素;触发器形态
|
|
45
|
+
* (`as="button"`)**没有 `::placeholder` 可用**,改由一个 span 承载(`.mh-input__placeholder`)—— 当且仅当
|
|
46
|
+
* `hasValue === false` 且本 prop 有值时渲染它,并**取代** `default` 插槽。
|
|
65
47
|
*/
|
|
66
48
|
placeholder: {
|
|
67
49
|
type: StringConstructor;
|
|
@@ -82,12 +64,9 @@ export declare const Input: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
82
64
|
default: boolean;
|
|
83
65
|
};
|
|
84
66
|
/**
|
|
85
|
-
* **只读**:值可选中 /
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* 的 `readonly` 行推荐的写法):几何与可编辑输入框**完全一致**(同高、同内距、值文字同左缘),
|
|
89
|
-
* 但滑过不亮浅底、聚焦不给边框与主色环 —— 一眼看去是「值」而不是「输入位」。
|
|
90
|
-
* 只读 ≠ 禁用:它照旧可聚焦、可选中复制,也不变灰。
|
|
67
|
+
* **只读**:值可选中 / 复制,但不能改。与 `bordered={false}` 组合即**只读值档**(摘要 / 详情里回显业务值,也是
|
|
68
|
+
* `Form.Item` 的 `readonly` 行推荐写法):几何与可编辑输入框**完全一致**(同高 / 同内距 / 值文字同左缘),但滑过
|
|
69
|
+
* 不亮浅底、聚焦不给边框与主色环 —— 一眼看去是「值」而不是「输入位」;只读 ≠ 禁用(照旧可聚焦、可复制、不变灰)。
|
|
91
70
|
*/
|
|
92
71
|
readonly: {
|
|
93
72
|
type: BooleanConstructor;
|
|
@@ -184,11 +163,9 @@ export declare const Input: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
184
163
|
default: string;
|
|
185
164
|
};
|
|
186
165
|
/**
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
* (`.mh-input__placeholder`)—— 当且仅当 `hasValue === false` 且本 prop 有值时渲染它,
|
|
191
|
-
* 并**取代** `default` 插槽(见上面触发器一节)。没传 `hasValue` 的调用方行为不变。
|
|
166
|
+
* 占位文案(两种形态都消费它):缺省(`as="input"`)走原生 `::placeholder` 伪元素;触发器形态
|
|
167
|
+
* (`as="button"`)**没有 `::placeholder` 可用**,改由一个 span 承载(`.mh-input__placeholder`)—— 当且仅当
|
|
168
|
+
* `hasValue === false` 且本 prop 有值时渲染它,并**取代** `default` 插槽。
|
|
192
169
|
*/
|
|
193
170
|
placeholder: {
|
|
194
171
|
type: StringConstructor;
|
|
@@ -209,12 +186,9 @@ export declare const Input: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
209
186
|
default: boolean;
|
|
210
187
|
};
|
|
211
188
|
/**
|
|
212
|
-
* **只读**:值可选中 /
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
* 的 `readonly` 行推荐的写法):几何与可编辑输入框**完全一致**(同高、同内距、值文字同左缘),
|
|
216
|
-
* 但滑过不亮浅底、聚焦不给边框与主色环 —— 一眼看去是「值」而不是「输入位」。
|
|
217
|
-
* 只读 ≠ 禁用:它照旧可聚焦、可选中复制,也不变灰。
|
|
189
|
+
* **只读**:值可选中 / 复制,但不能改。与 `bordered={false}` 组合即**只读值档**(摘要 / 详情里回显业务值,也是
|
|
190
|
+
* `Form.Item` 的 `readonly` 行推荐写法):几何与可编辑输入框**完全一致**(同高 / 同内距 / 值文字同左缘),但滑过
|
|
191
|
+
* 不亮浅底、聚焦不给边框与主色环 —— 一眼看去是「值」而不是「输入位」;只读 ≠ 禁用(照旧可聚焦、可复制、不变灰)。
|
|
218
192
|
*/
|
|
219
193
|
readonly: {
|
|
220
194
|
type: BooleanConstructor;
|
|
@@ -354,13 +328,8 @@ export interface TextareaProps {
|
|
|
354
328
|
}
|
|
355
329
|
/**
|
|
356
330
|
* 多行输入(同一份面;结构与单行不同,故单列一个件)。
|
|
357
|
-
*
|
|
358
|
-
*
|
|
359
|
-
* —— 那会丢掉输入能力;目前只能由应用侧保留一条带 `font-family: var(--ui-font-mono)` 的样式登记
|
|
360
|
-
* (缺件登记见下游仓 `aihub-frontend/docs/kit-gaps.md`,本仓不复制那份台账)。
|
|
361
|
-
*
|
|
362
|
-
* @example 备注框:自适应 2~6 行 + 限长计数
|
|
363
|
-
* <Textarea modelValue={note} autoSize={{ minRows: 2, maxRows: 6 }} maxlength={500} showCount onChange={setNote} />
|
|
331
|
+
* ⚠️ **输入族没有 `mono` 档**(`Input` 与 `Textarea` 都没有):要等宽的输入框别拿 `Text mono` 去包(那会丢掉输入
|
|
332
|
+
* 能力),目前只能由应用侧保留一条带 `font-family: var(--ui-font-mono)` 的样式登记。
|
|
364
333
|
*/
|
|
365
334
|
export declare const Textarea: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
366
335
|
modelValue: {
|
|
@@ -524,11 +493,9 @@ export declare const InputCompound: {
|
|
|
524
493
|
default: string;
|
|
525
494
|
};
|
|
526
495
|
/**
|
|
527
|
-
*
|
|
528
|
-
*
|
|
529
|
-
*
|
|
530
|
-
* (`.mh-input__placeholder`)—— 当且仅当 `hasValue === false` 且本 prop 有值时渲染它,
|
|
531
|
-
* 并**取代** `default` 插槽(见上面触发器一节)。没传 `hasValue` 的调用方行为不变。
|
|
496
|
+
* 占位文案(两种形态都消费它):缺省(`as="input"`)走原生 `::placeholder` 伪元素;触发器形态
|
|
497
|
+
* (`as="button"`)**没有 `::placeholder` 可用**,改由一个 span 承载(`.mh-input__placeholder`)—— 当且仅当
|
|
498
|
+
* `hasValue === false` 且本 prop 有值时渲染它,并**取代** `default` 插槽。
|
|
532
499
|
*/
|
|
533
500
|
placeholder: {
|
|
534
501
|
type: StringConstructor;
|
|
@@ -549,12 +516,9 @@ export declare const InputCompound: {
|
|
|
549
516
|
default: boolean;
|
|
550
517
|
};
|
|
551
518
|
/**
|
|
552
|
-
* **只读**:值可选中 /
|
|
553
|
-
*
|
|
554
|
-
*
|
|
555
|
-
* 的 `readonly` 行推荐的写法):几何与可编辑输入框**完全一致**(同高、同内距、值文字同左缘),
|
|
556
|
-
* 但滑过不亮浅底、聚焦不给边框与主色环 —— 一眼看去是「值」而不是「输入位」。
|
|
557
|
-
* 只读 ≠ 禁用:它照旧可聚焦、可选中复制,也不变灰。
|
|
519
|
+
* **只读**:值可选中 / 复制,但不能改。与 `bordered={false}` 组合即**只读值档**(摘要 / 详情里回显业务值,也是
|
|
520
|
+
* `Form.Item` 的 `readonly` 行推荐写法):几何与可编辑输入框**完全一致**(同高 / 同内距 / 值文字同左缘),但滑过
|
|
521
|
+
* 不亮浅底、聚焦不给边框与主色环 —— 一眼看去是「值」而不是「输入位」;只读 ≠ 禁用(照旧可聚焦、可复制、不变灰)。
|
|
558
522
|
*/
|
|
559
523
|
readonly: {
|
|
560
524
|
type: BooleanConstructor;
|
|
@@ -685,11 +649,9 @@ export declare const InputCompound: {
|
|
|
685
649
|
default: string;
|
|
686
650
|
};
|
|
687
651
|
/**
|
|
688
|
-
*
|
|
689
|
-
*
|
|
690
|
-
*
|
|
691
|
-
* (`.mh-input__placeholder`)—— 当且仅当 `hasValue === false` 且本 prop 有值时渲染它,
|
|
692
|
-
* 并**取代** `default` 插槽(见上面触发器一节)。没传 `hasValue` 的调用方行为不变。
|
|
652
|
+
* 占位文案(两种形态都消费它):缺省(`as="input"`)走原生 `::placeholder` 伪元素;触发器形态
|
|
653
|
+
* (`as="button"`)**没有 `::placeholder` 可用**,改由一个 span 承载(`.mh-input__placeholder`)—— 当且仅当
|
|
654
|
+
* `hasValue === false` 且本 prop 有值时渲染它,并**取代** `default` 插槽。
|
|
693
655
|
*/
|
|
694
656
|
placeholder: {
|
|
695
657
|
type: StringConstructor;
|
|
@@ -710,12 +672,9 @@ export declare const InputCompound: {
|
|
|
710
672
|
default: boolean;
|
|
711
673
|
};
|
|
712
674
|
/**
|
|
713
|
-
* **只读**:值可选中 /
|
|
714
|
-
*
|
|
715
|
-
*
|
|
716
|
-
* 的 `readonly` 行推荐的写法):几何与可编辑输入框**完全一致**(同高、同内距、值文字同左缘),
|
|
717
|
-
* 但滑过不亮浅底、聚焦不给边框与主色环 —— 一眼看去是「值」而不是「输入位」。
|
|
718
|
-
* 只读 ≠ 禁用:它照旧可聚焦、可选中复制,也不变灰。
|
|
675
|
+
* **只读**:值可选中 / 复制,但不能改。与 `bordered={false}` 组合即**只读值档**(摘要 / 详情里回显业务值,也是
|
|
676
|
+
* `Form.Item` 的 `readonly` 行推荐写法):几何与可编辑输入框**完全一致**(同高 / 同内距 / 值文字同左缘),但滑过
|
|
677
|
+
* 不亮浅底、聚焦不给边框与主色环 —— 一眼看去是「值」而不是「输入位」;只读 ≠ 禁用(照旧可聚焦、可复制、不变灰)。
|
|
719
678
|
*/
|
|
720
679
|
readonly: {
|
|
721
680
|
type: BooleanConstructor;
|
|
@@ -837,11 +796,9 @@ export declare const InputCompound: {
|
|
|
837
796
|
default: string;
|
|
838
797
|
};
|
|
839
798
|
/**
|
|
840
|
-
*
|
|
841
|
-
*
|
|
842
|
-
*
|
|
843
|
-
* (`.mh-input__placeholder`)—— 当且仅当 `hasValue === false` 且本 prop 有值时渲染它,
|
|
844
|
-
* 并**取代** `default` 插槽(见上面触发器一节)。没传 `hasValue` 的调用方行为不变。
|
|
799
|
+
* 占位文案(两种形态都消费它):缺省(`as="input"`)走原生 `::placeholder` 伪元素;触发器形态
|
|
800
|
+
* (`as="button"`)**没有 `::placeholder` 可用**,改由一个 span 承载(`.mh-input__placeholder`)—— 当且仅当
|
|
801
|
+
* `hasValue === false` 且本 prop 有值时渲染它,并**取代** `default` 插槽。
|
|
845
802
|
*/
|
|
846
803
|
placeholder: {
|
|
847
804
|
type: StringConstructor;
|
|
@@ -862,12 +819,9 @@ export declare const InputCompound: {
|
|
|
862
819
|
default: boolean;
|
|
863
820
|
};
|
|
864
821
|
/**
|
|
865
|
-
* **只读**:值可选中 /
|
|
866
|
-
*
|
|
867
|
-
*
|
|
868
|
-
* 的 `readonly` 行推荐的写法):几何与可编辑输入框**完全一致**(同高、同内距、值文字同左缘),
|
|
869
|
-
* 但滑过不亮浅底、聚焦不给边框与主色环 —— 一眼看去是「值」而不是「输入位」。
|
|
870
|
-
* 只读 ≠ 禁用:它照旧可聚焦、可选中复制,也不变灰。
|
|
822
|
+
* **只读**:值可选中 / 复制,但不能改。与 `bordered={false}` 组合即**只读值档**(摘要 / 详情里回显业务值,也是
|
|
823
|
+
* `Form.Item` 的 `readonly` 行推荐写法):几何与可编辑输入框**完全一致**(同高 / 同内距 / 值文字同左缘),但滑过
|
|
824
|
+
* 不亮浅底、聚焦不给边框与主色环 —— 一眼看去是「值」而不是「输入位」;只读 ≠ 禁用(照旧可聚焦、可复制、不变灰)。
|
|
871
825
|
*/
|
|
872
826
|
readonly: {
|
|
873
827
|
type: BooleanConstructor;
|
|
@@ -1147,9 +1101,8 @@ export declare const InputCompound: {
|
|
|
1147
1101
|
};
|
|
1148
1102
|
export type InputCompoundType = typeof InputCompound;
|
|
1149
1103
|
/**
|
|
1150
|
-
* 数字输入与 `Input` **同族**(同一个表壳 / 内距 / 状态协议,同一份面 `input.css
|
|
1151
|
-
*
|
|
1152
|
-
*
|
|
1153
|
-
* 而数字输入是另一件(值模型 `number | null` vs `string`)。
|
|
1104
|
+
* 数字输入与 `Input` **同族**(同一个表壳 / 内距 / 状态协议,同一份面 `input.css`),故与 `Textarea` 同款处置:
|
|
1105
|
+
* **平级导出、共用本目录**。它**不是** `Input` 的点号成员 —— 成员位留给「同一件自己的形态」(`.Textarea` /
|
|
1106
|
+
* `.Display`),而数字输入是另一件(值模型 `number | null` vs `string`)。
|
|
1154
1107
|
*/
|
|
1155
1108
|
export { NumberInput, type NumberInputProps } from './number-input';
|
|
@@ -16,11 +16,9 @@ const Input = /* @__PURE__ */ defineComponent({
|
|
|
16
16
|
default: ""
|
|
17
17
|
},
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* (`.mh-input__placeholder`)—— 当且仅当 `hasValue === false` 且本 prop 有值时渲染它,
|
|
23
|
-
* 并**取代** `default` 插槽(见上面触发器一节)。没传 `hasValue` 的调用方行为不变。
|
|
19
|
+
* 占位文案(两种形态都消费它):缺省(`as="input"`)走原生 `::placeholder` 伪元素;触发器形态
|
|
20
|
+
* (`as="button"`)**没有 `::placeholder` 可用**,改由一个 span 承载(`.mh-input__placeholder`)—— 当且仅当
|
|
21
|
+
* `hasValue === false` 且本 prop 有值时渲染它,并**取代** `default` 插槽。
|
|
24
22
|
*/
|
|
25
23
|
placeholder: {
|
|
26
24
|
type: String,
|
|
@@ -41,12 +39,9 @@ const Input = /* @__PURE__ */ defineComponent({
|
|
|
41
39
|
default: false
|
|
42
40
|
},
|
|
43
41
|
/**
|
|
44
|
-
* **只读**:值可选中 /
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* 的 `readonly` 行推荐的写法):几何与可编辑输入框**完全一致**(同高、同内距、值文字同左缘),
|
|
48
|
-
* 但滑过不亮浅底、聚焦不给边框与主色环 —— 一眼看去是「值」而不是「输入位」。
|
|
49
|
-
* 只读 ≠ 禁用:它照旧可聚焦、可选中复制,也不变灰。
|
|
42
|
+
* **只读**:值可选中 / 复制,但不能改。与 `bordered={false}` 组合即**只读值档**(摘要 / 详情里回显业务值,也是
|
|
43
|
+
* `Form.Item` 的 `readonly` 行推荐写法):几何与可编辑输入框**完全一致**(同高 / 同内距 / 值文字同左缘),但滑过
|
|
44
|
+
* 不亮浅底、聚焦不给边框与主色环 —— 一眼看去是「值」而不是「输入位」;只读 ≠ 禁用(照旧可聚焦、可复制、不变灰)。
|
|
50
45
|
*/
|
|
51
46
|
readonly: {
|
|
52
47
|
type: Boolean,
|
|
@@ -4,38 +4,26 @@ import type { InputStatus } from './index';
|
|
|
4
4
|
/**
|
|
5
5
|
* 数字输入(**自绘**)。
|
|
6
6
|
*
|
|
7
|
-
* 与 `Input` **同族同面**(同一个表壳 / 内距 / 状态协议,样式归 `styles/components/input.css
|
|
8
|
-
*
|
|
9
|
-
* —— 与 `Input` / `Textarea` 的关系同款,故不另开组件目录、不新增面文件。
|
|
7
|
+
* 与 `Input` **同族同面**(同一个表壳 / 内距 / 状态协议,样式归 `styles/components/input.css`),按「同族两件
|
|
8
|
+
* 可并排平级导出、共用同一目录与同一份面」处置 —— 故不另开组件目录、不新增面文件。
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* `
|
|
14
|
-
* 本件也**不接** `Input` 的 `as="button"` 触发器形态 —— 那是复合件(`Select` 一族)的口子。
|
|
10
|
+
* 为什么单列一件而不是加进 `Input`:`Input` 的 `modelValue` 是 **string**,且已串起「密码可见切换 / 清除位 /
|
|
11
|
+
* 字数统计 / 触发器形态」一条链;把数值语义(`min` / `max` / `step` / `precision` / 钳制 / 舍入 / 步进按钮)
|
|
12
|
+
* 塞进去会污染统一词表。本件也**不接** `Input` 的 `as="button"` 触发器形态(那是复合件一族的口子)。
|
|
15
13
|
*
|
|
16
14
|
* 统一词表(与 `Checkbox` / `Switch` / `Input` 同款):`modelValue` / `onChange` / `disabled` / `size`;
|
|
17
15
|
* 值变更时 `emit('update:modelValue')` 与 `onChange` **双走**。
|
|
18
16
|
*
|
|
19
|
-
* ##
|
|
20
|
-
*
|
|
17
|
+
* ## 值域口径(都是「原生数字框最被讨厌的点」的反面)
|
|
21
18
|
* 1. **空值是 `null`,不是 `0`**:留空与「填了 0」是两件事,前者不提交、后者要提交。
|
|
22
|
-
* 2. **输入中途不钳制**:`-` / `1.` /
|
|
23
|
-
*
|
|
19
|
+
* 2. **输入中途不钳制**:`-` / `1.` / 空串这些中间态一律原样留着(打一半就被改掉会打断输入);钳制与舍入发生
|
|
20
|
+
* 在**归一时刻** —— `blur` / `Enter` / 步进按钮 / `min`·`max`·`precision` 变化。
|
|
24
21
|
* 3. **非法输入回滚**:解析不出来(如 `1a`)就退回上一个合法值,**不静默变 0**。
|
|
25
22
|
*
|
|
26
|
-
* 属性落点与 `Input` 完全同款:`class` / `style` → 表壳 `.mh-input__wrap`;其余 attrs
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* @example 受控 + 区间
|
|
30
|
-
* <NumberInput modelValue={timeout} min={0} max={43200} onChange={setTimeout} />
|
|
31
|
-
*
|
|
32
|
-
* @example 表格内 / 行内编辑档(无框)
|
|
33
|
-
* <NumberInput modelValue={row.value} bordered={false} precision={0} onChange={set} />
|
|
23
|
+
* 属性落点与 `Input` 完全同款:`class` / `style` → 表壳 `.mh-input__wrap`;其余 attrs 一律透传到控件
|
|
24
|
+
* (`id` / `name` / `aria-*` / `data-*` / 原生事件),见 `forwardAttrs`。
|
|
34
25
|
*
|
|
35
|
-
*
|
|
36
|
-
* <NumberInput modelValue={size} min={1}>
|
|
37
|
-
* {{ suffix: () => 'MB' }}
|
|
38
|
-
* </NumberInput>
|
|
26
|
+
* 用法见 `docs/demos/number-input/`(每个维度一份可运行样例;文档页 `docs/components/number-input.md`)。
|
|
39
27
|
*/
|
|
40
28
|
export interface NumberInputProps {
|
|
41
29
|
/** 受控值(空值为 `null`,不是 `0`) */
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type PropType, type SlotsType, type VNodeChild } from 'vue';
|
|
2
2
|
import { type Padding } from '../part-padding';
|
|
3
3
|
/**
|
|
4
|
-
* 布局间距档:**只开放令牌档位,不开放任意 px**(`none/sm/md/lg/xl` → `0 / --ui-space-1/2/3/4
|
|
4
|
+
* 布局间距档:**只开放令牌档位,不开放任意 px**(`none/sm/md/lg/xl` → `0 / --ui-space-1/2/3/4`)。间距一旦可以随手
|
|
5
|
+
* 写,同一个页面里就会出现 6/7/9/10/14 这些「看着差不多」的值、并在不同缩放档与不同人手里继续分叉 —— 与「应用侧只写
|
|
6
|
+
* 布局」是同一条理由的另一面。
|
|
5
7
|
*
|
|
6
|
-
*
|
|
7
|
-
* 而它们在不同缩放档、不同人手里会继续分叉 —— 与「应用侧只写布局」是同一条理由的另一面。
|
|
8
|
+
* 用法见 `docs/demos/layout/`(每个维度一份可运行样例;文档页 `docs/components/layout.md`)。
|
|
8
9
|
*/
|
|
9
10
|
export type LayoutGap = 'none' | 'sm' | 'md' | 'lg' | 'xl';
|
|
10
11
|
/** 交叉轴对齐(`align-items`);主轴排布用 `justify` */
|
|
@@ -25,18 +26,16 @@ export type LayoutSpan = 1 | 2 | 3 | 4;
|
|
|
25
26
|
*
|
|
26
27
|
* ## 命名与方向口径(别再改回去)
|
|
27
28
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* 在一份 import 清单里混读,也破坏「成族子件用点号」的约定(`Page.Header` / `Form.Item`)。
|
|
29
|
+
* **方向按表格语义定**(行与行上下相邻 ⇒ `Row` 竖排;列与列左右相邻 ⇒ `Column` 横排);`columns` 说的是
|
|
30
|
+
* 「**这一行分几列**」(每行摆几格),不是「这个容器有几种方向」;嵌套上要分栏 / 栅格就 `Row columns={n}` +
|
|
31
|
+
* `Column`,一格里要上下堆就在 `Column` 里再放 `Row`。**公开面只出 `Layout`**,不平级导出 `Row` / `Column`
|
|
32
|
+
* —— 通用词会与 `TableColumn` 在一份 import 清单里混读,也破坏「成族子件用点号」的约定。
|
|
33
33
|
*
|
|
34
34
|
* ## 与其它件的边界
|
|
35
35
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* - 只有「块与块怎么摆」这一件事归本族,滚动 / 工具位 / 卡片外观都不归它。
|
|
36
|
+
* 表单里并排字段用 `Form` 的 `columns`(它管 label 列、行距与**回落**),不要用本族拼表单 —— 本族的列数是
|
|
37
|
+
* **恒定**的、窄了只等分收窄,表单会被压出不可用的窄控件;页面级两栏(各自滚动)用 `Page.Split`;只有
|
|
38
|
+
* 「块与块怎么摆」这一件事归本族(滚动 / 工具位 / 卡片外观都不归它)。
|
|
40
39
|
*/
|
|
41
40
|
export declare const Layout: {
|
|
42
41
|
Row: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
@@ -66,14 +65,11 @@ export declare const Layout: {
|
|
|
66
65
|
default: undefined;
|
|
67
66
|
};
|
|
68
67
|
/**
|
|
69
|
-
* 内距:**走骨架件共享口径**(`Padding`,同 `Card` / `Form` / `Page` / `Panel`)——
|
|
70
|
-
* `
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* 内距在设计稿里常是**确定坐标**,令牌梯度(最大 24px)表达不了。
|
|
75
|
-
* ⚠️ 用它之前先想一次:这个数真是「内距」吗?若是「与某个内容列对齐」这类**布局坐标**,
|
|
76
|
-
* 优先改由结构表达(同轴容器 / `columns` / `minColumnWidth`)。
|
|
68
|
+
* 内距:**走骨架件共享口径**(`Padding`,同 `Card` / `Form` / `Page` / `Panel`)—— `number` 四边同值、
|
|
69
|
+
* `{ y, x }` 分上下 / 左右、`string` 原样下发(CSS 简写,**逃生舱**),口径与理由见 `part-padding.ts`。
|
|
70
|
+
* ⚠️ 与 `gap` 不同口径:`gap` 只开放令牌档(防间距分叉),`padding` 接具体值 —— 内距在设计稿里常是**确定坐标**,
|
|
71
|
+
* 令牌梯度(最大 24px)表达不了。⚠️ 用它之前先想一次:这个数真是「内距」吗?若是「与某个内容列对齐」这类**布局
|
|
72
|
+
* 坐标**,优先改由结构表达(同轴容器 / `columns` / `minColumnWidth`)。
|
|
77
73
|
*/
|
|
78
74
|
padding: {
|
|
79
75
|
type: PropType<Padding>;
|
|
@@ -106,14 +102,11 @@ export declare const Layout: {
|
|
|
106
102
|
default: undefined;
|
|
107
103
|
};
|
|
108
104
|
/**
|
|
109
|
-
* 内距:**走骨架件共享口径**(`Padding`,同 `Card` / `Form` / `Page` / `Panel`)——
|
|
110
|
-
* `
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
* 内距在设计稿里常是**确定坐标**,令牌梯度(最大 24px)表达不了。
|
|
115
|
-
* ⚠️ 用它之前先想一次:这个数真是「内距」吗?若是「与某个内容列对齐」这类**布局坐标**,
|
|
116
|
-
* 优先改由结构表达(同轴容器 / `columns` / `minColumnWidth`)。
|
|
105
|
+
* 内距:**走骨架件共享口径**(`Padding`,同 `Card` / `Form` / `Page` / `Panel`)—— `number` 四边同值、
|
|
106
|
+
* `{ y, x }` 分上下 / 左右、`string` 原样下发(CSS 简写,**逃生舱**),口径与理由见 `part-padding.ts`。
|
|
107
|
+
* ⚠️ 与 `gap` 不同口径:`gap` 只开放令牌档(防间距分叉),`padding` 接具体值 —— 内距在设计稿里常是**确定坐标**,
|
|
108
|
+
* 令牌梯度(最大 24px)表达不了。⚠️ 用它之前先想一次:这个数真是「内距」吗?若是「与某个内容列对齐」这类**布局
|
|
109
|
+
* 坐标**,优先改由结构表达(同轴容器 / `columns` / `minColumnWidth`)。
|
|
117
110
|
*/
|
|
118
111
|
padding: {
|
|
119
112
|
type: PropType<Padding>;
|
|
@@ -79,14 +79,11 @@ const LayoutRow = /* @__PURE__ */ defineComponent({
|
|
|
79
79
|
default: void 0
|
|
80
80
|
},
|
|
81
81
|
/**
|
|
82
|
-
* 内距:**走骨架件共享口径**(`Padding`,同 `Card` / `Form` / `Page` / `Panel`)——
|
|
83
|
-
* `
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* 内距在设计稿里常是**确定坐标**,令牌梯度(最大 24px)表达不了。
|
|
88
|
-
* ⚠️ 用它之前先想一次:这个数真是「内距」吗?若是「与某个内容列对齐」这类**布局坐标**,
|
|
89
|
-
* 优先改由结构表达(同轴容器 / `columns` / `minColumnWidth`)。
|
|
82
|
+
* 内距:**走骨架件共享口径**(`Padding`,同 `Card` / `Form` / `Page` / `Panel`)—— `number` 四边同值、
|
|
83
|
+
* `{ y, x }` 分上下 / 左右、`string` 原样下发(CSS 简写,**逃生舱**),口径与理由见 `part-padding.ts`。
|
|
84
|
+
* ⚠️ 与 `gap` 不同口径:`gap` 只开放令牌档(防间距分叉),`padding` 接具体值 —— 内距在设计稿里常是**确定坐标**,
|
|
85
|
+
* 令牌梯度(最大 24px)表达不了。⚠️ 用它之前先想一次:这个数真是「内距」吗?若是「与某个内容列对齐」这类**布局
|
|
86
|
+
* 坐标**,优先改由结构表达(同轴容器 / `columns` / `minColumnWidth`)。
|
|
90
87
|
*/
|
|
91
88
|
padding: {
|
|
92
89
|
type: [Number, Object, String],
|
|
@@ -21,31 +21,13 @@ export interface ListViewStatus {
|
|
|
21
21
|
* ## 三态
|
|
22
22
|
*
|
|
23
23
|
* - `loading` → **骨架卡网格**(与卡片同尺寸占位,避免加载完成时高度跳动);
|
|
24
|
-
* - `error` / `empty` → 委托 `QueryState`(口径同 CONTRACT §4.6
|
|
25
|
-
*
|
|
24
|
+
* - `error` / `empty` → 委托 `QueryState`(口径同 CONTRACT §4.6:**错误不得塞进空态**,两条各自的恢复入口由
|
|
25
|
+
* `errorActionText` / `emptyActionText` 给)。
|
|
26
26
|
*
|
|
27
27
|
* 无数据或失败时消费方**不要渲染分页**(分页归属见 CONTRACT §4.17)。
|
|
28
|
+
* **卡片外观**:列表项一律用 `ListView.CardItem`(内部以 `Card interactive` 为壳),消费方不得自绘卡片外观。
|
|
28
29
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* 列表项一律用 `ListView.CardItem`(内部以 `Card interactive` 为壳),消费方不得自绘卡片外观。
|
|
32
|
-
*
|
|
33
|
-
* @example 服务卡片列表(三态;分页由承载它的容器给)
|
|
34
|
-
* <ListView
|
|
35
|
-
* minItemWidth={320}
|
|
36
|
-
* loading={query.isPending.value}
|
|
37
|
-
* error={query.isError.value}
|
|
38
|
-
* errorActionText="重试"
|
|
39
|
-
* onErrorAction={() => void query.refetch()}
|
|
40
|
-
* // 空态:传字符串即空态标题(传 true 会用内置的「暂无数据」)
|
|
41
|
-
* empty={items.value.length === 0 ? '暂无服务' : false}>
|
|
42
|
-
* {items.value.map((item) => (
|
|
43
|
-
* <ListView.CardItem key={item.id} title={item.name} description={item.desc}
|
|
44
|
-
* status={{ label: '在线', tone: 'success', dot: true }}
|
|
45
|
-
* onClick={() => openDetail(item.id)}
|
|
46
|
-
* actions={() => <Button title="编辑" onClick={() => openEdit(item.id)} />} />
|
|
47
|
-
* ))}
|
|
48
|
-
* </ListView>
|
|
30
|
+
* 用法见 `docs/demos/list-view/`(每个维度一份可运行样例;文档页 `docs/components/list-view.md`)。
|
|
49
31
|
*/
|
|
50
32
|
export interface ListViewProps {
|
|
51
33
|
/**
|
|
@@ -82,28 +64,13 @@ export interface ListViewProps {
|
|
|
82
64
|
/**
|
|
83
65
|
* 列表卡片项:卡片的**结构化形态**(图标 / 标题 / 副标题 / 描述 / 标签 / 状态胶囊 / 统计 / 操作位)。
|
|
84
66
|
*
|
|
85
|
-
* 以 `Card interactive`
|
|
86
|
-
*
|
|
87
|
-
* 几何来源同 `Card`(技能市场卡片实测)。
|
|
88
|
-
*
|
|
89
|
-
* 三处「有意为之」:
|
|
90
|
-
* 1. **操作位默认隐藏**(`opacity: 0`),卡片悬浮或卡内获得焦点时显形;触屏(无 hover 能力)恒显形 ——
|
|
91
|
-
* 因此按钮始终可聚焦、可点,只是平时不抢视觉;
|
|
92
|
-
* 2. **操作位点击不冒泡**:卡内按钮(编辑 / 删除)不会顺带触发整卡的 `onClick`(打开详情);
|
|
93
|
-
* 3. **状态胶囊与标签片由本件自绘**,不复用 `Badge`:原型是**全圆角胶囊**与无最小宽的标签片,
|
|
94
|
-
* 而 `Badge` 的几何是方角 + 最小宽(给徽标列宽用的),套进来会改变原型几何。
|
|
67
|
+
* 以 `Card interactive` 为壳,卡片外观与悬浮反馈都来自它;本件只管卡片**内部**的排版与几何(最小高 144、
|
|
68
|
+
* 图标 36、标题 16/600、描述两行截断、尾部贴底、胶囊与标签片),几何来源同 `Card`(技能市场卡片实测)。
|
|
95
69
|
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
* subtitle={`V${item.version}`}
|
|
101
|
-
* description={item.desc}
|
|
102
|
-
* tags={[item.topic, item.domain]}
|
|
103
|
-
* status={{ label: '在线', tone: 'success', dot: true }}
|
|
104
|
-
* extra={() => <><Icon name="download" size={14} />{item.downloadCount}</>}
|
|
105
|
-
* actions={() => <Button title="编辑" onClick={() => openEdit(item.id)} />}
|
|
106
|
-
* onClick={() => openDetail(item.id)} />
|
|
70
|
+
* 三处「有意为之」:① **操作位默认隐藏**(`opacity: 0`),卡片悬浮或卡内获得焦点时显形、触屏恒显形 —— 因此
|
|
71
|
+
* 按钮始终可聚焦、可点,只是平时不抢视觉;② **操作位点击不冒泡**(卡内按钮不会顺带触发整卡的 `onClick`);
|
|
72
|
+
* ③ **状态胶囊与标签片由本件自绘**,不复用 `Badge` —— 原型是**全圆角胶囊**与无最小宽的标签片,而 `Badge` 的
|
|
73
|
+
* 几何是方角 + 最小宽(给徽标列宽用的),套进来会改变原型几何。
|
|
107
74
|
*/
|
|
108
75
|
export interface ListViewCardItemProps {
|
|
109
76
|
/** 图标:图片地址(`<img>`,`alt` 走空串——名称已由标题承担)或自定义节点 / 返回节点的函数 */
|
|
@@ -14,33 +14,22 @@ export interface LoadingProps {
|
|
|
14
14
|
* 加载态(转圈 + 可选文案;三种形态)。
|
|
15
15
|
*
|
|
16
16
|
* ## 三态与三个不同的东西
|
|
17
|
-
*
|
|
18
17
|
* | 形态 | 用什么 | 为什么不是本件 |
|
|
19
18
|
* | --- | --- | --- |
|
|
20
|
-
* |
|
|
19
|
+
* | 区域 / 页面的加载中 | `QueryState` 的 `loading` | 那件带骨架屏与三态切换,是「容器」 |
|
|
21
20
|
* | 内容占位 | `Skeleton` | 骨架屏表达「这里将出现什么」,不是「正在忙」 |
|
|
22
21
|
* | **正在忙、请等待** | 本件 | 遮罩 + 转圈,**拦住交互**才是它的职责 |
|
|
23
22
|
*
|
|
24
23
|
* ## 覆盖档必须由消费方给出定位上下文
|
|
24
|
+
* `overlay="area"` 走 `position: absolute`:它铺的是**最近的定位祖先**,故宿主元素要有 `position: relative`
|
|
25
|
+
* (`Panel.Body` / `Card.Body` 这类件自带)。宿主没有定位上下文时它会跑到更外层去 —— 这是 CSS 的规则,不是本件的缺陷;
|
|
26
|
+
* 界面上看不出错位但覆盖范围不对时,先查这一条。`overlay="screen"` 走 `position: fixed`:铺整个视口,层级压在 `Toast`
|
|
27
|
+
* 堆叠(1080)之上、模态层(原生 `<dialog>` 的 top layer)之下。
|
|
25
28
|
*
|
|
26
|
-
* `
|
|
27
|
-
* `
|
|
28
|
-
* 更外层去 —— 这是 CSS 的规则,不是本件的缺陷;界面上看不出错位但覆盖范围不对时,先查这一条。
|
|
29
|
-
*
|
|
30
|
-
* `overlay="screen"` 走 `position: fixed`:铺整个视口,层级压在 `Toast` 堆叠(1080)之上、
|
|
31
|
-
* 模态层(原生 `<dialog>` 的 top layer)之下。
|
|
32
|
-
*
|
|
33
|
-
* 转圈走 `@manohub/icon` 的 `loading` 字形 + CSS 旋转(**不手绘 SVG**);尺寸按全局图标档
|
|
34
|
-
* `--ui-font-icon` 用 `calc()` 派生,换主题时与其它图标一起缩放。
|
|
35
|
-
*
|
|
36
|
-
* @example 行内:小转圈 + 文案
|
|
37
|
-
* <Loading text="加载中" />
|
|
38
|
-
*
|
|
39
|
-
* @example 区域遮罩(宿主需自带 position: relative)
|
|
40
|
-
* <Panel.Body><Loading overlay="area" text="保存中" /></Panel.Body>
|
|
29
|
+
* 转圈走 `@manohub/icon` 的 `loading` 字形 + CSS 旋转(**不手绘 SVG**);尺寸按全局图标档 `--ui-font-icon` 用
|
|
30
|
+
* `calc()` 派生,换主题时与其它图标一起缩放。
|
|
41
31
|
*
|
|
42
|
-
*
|
|
43
|
-
* <Loading overlay="screen" text="正在导入,请勿关闭页面" />
|
|
32
|
+
* 用法见 `docs/demos/loading/`(每个维度一份可运行样例;文档页 `docs/components/loading.md`)。
|
|
44
33
|
*/
|
|
45
34
|
export declare const Loading: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
46
35
|
text: {
|
|
@@ -6,38 +6,21 @@ export type NavVariant = 'tree' | 'list';
|
|
|
6
6
|
* 侧栏导航(单列、固定宽、内滚):**`tree` / `list` 两态,行渲染完全复用 `Tree`**。
|
|
7
7
|
*
|
|
8
8
|
* ## 为什么不是 `Tree` 的一个 prop
|
|
9
|
+
* `Tree` 是**展示件**(层级数据怎么显示);导航是另一种语义:选中驱动右侧内容、单列固定宽、外壳自己滚动。两者对**行**
|
|
10
|
+
* 的几何要求完全一致,故本件不重写行渲染 —— 数据、展开态、选中态、缩进、三态全部交给 `Tree`(不存在第二棵树);两态
|
|
11
|
+
* 的差异只有一处:`variant="list"` 隐藏箭头占位(扁平导航没有层级)。
|
|
9
12
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
13
|
+
* ## 滚动归属 / 宽度
|
|
14
|
+
* 根件 `overflow: hidden`,**只有 `mh-nav__body` 滚**(与 `Panel.Body` 同一口径)。缺省**填满所在栏**
|
|
15
|
+
* (`width: var(--mh-nav-width, 100%)`)—— 列宽由 `Page.Split` 的侧栏列或外层布局决定,不重复锁一个可能与栏宽不符的
|
|
16
|
+
* 数;独立使用需要固定宽时传 `width`(px 数字)。
|
|
14
17
|
*
|
|
15
|
-
* ##
|
|
18
|
+
* ## 行尾操作 / 图标
|
|
19
|
+
* `renderActions` 直接透传给 `Tree`(默认隐藏、行悬浮或行内获得焦点时显形、点击不冒泡)—— 应用侧只给节点,不要自己写
|
|
20
|
+
* 显隐 CSS,也不要塞进 `renderNode`(那是常驻附加内容)。导航项图标走 `renderIcon`,**不要**用 `renderLabel` 拼
|
|
21
|
+
* 「图标 + 文字」:标签槽承担省略号与行内对齐,图标进去会被裁掉、也不成列。
|
|
16
22
|
*
|
|
17
|
-
*
|
|
18
|
-
* 侧栏滚动不再由应用侧写 `overflow-y: auto` 的应用侧类来顶。
|
|
19
|
-
*
|
|
20
|
-
* ## 宽度
|
|
21
|
-
*
|
|
22
|
-
* 缺省**填满所在栏**(`width: var(--mh-nav-width, 100%)`):列宽由 `Page.Split` 的侧栏列
|
|
23
|
-
* 或外层布局决定,导航件不重复锁一个可能与栏宽不符的数;独立使用需要固定宽时传 `width`(px 数字)。
|
|
24
|
-
*
|
|
25
|
-
* ## 行尾操作
|
|
26
|
-
*
|
|
27
|
-
* `renderActions` 直接透传给 `Tree`:默认隐藏、行悬浮或行内获得焦点时显形、点击不冒泡(§4.16)。
|
|
28
|
-
* 应用侧只给节点,不要自己写显隐 CSS,也不要把它塞进 `renderNode`(那是常驻附加内容)。
|
|
29
|
-
*
|
|
30
|
-
* ## 图标
|
|
31
|
-
*
|
|
32
|
-
* 导航项图标走 `renderIcon`(标签前的一位图标,口径同 `Tree.renderIcon`)—— **不要**用
|
|
33
|
-
* `renderLabel` 拼「图标 + 文字」:标签槽承担省略号与行内对齐,图标进去会被裁掉,也不成列。
|
|
34
|
-
*
|
|
35
|
-
* @example 分类导航树(选中驱动右侧 + 行尾管理操作)
|
|
36
|
-
* <Nav variant="tree" nodes={categoryNodes.value} rowKey="id" labelKey="name" width={220}
|
|
37
|
-
* selected={categoryId.value} onSelect={(node) => (categoryId.value = node.id)}
|
|
38
|
-
* expandedKeys={expandedKeys.value} onExpandChange={(keys) => (expandedKeys.value = keys)}
|
|
39
|
-
* loading={query.isPending.value} error={query.isError.value} empty="暂无分类"
|
|
40
|
-
* renderActions={(node) => <Button title="删除" onClick={() => removeCategory(node.id)} />} />
|
|
23
|
+
* 用法见 `docs/demos/nav/`(每个维度一份可运行样例;文档页 `docs/components/nav.md`)。
|
|
41
24
|
*/
|
|
42
25
|
export declare const Nav: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
43
26
|
/** 导航形态:`tree`(默认,层级 + 箭头)/ `list`(扁平,无箭头占位) */
|
|
@@ -138,9 +121,7 @@ export declare const Nav: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
138
121
|
default: undefined;
|
|
139
122
|
};
|
|
140
123
|
/**
|
|
141
|
-
* 错误态(truthy
|
|
142
|
-
*
|
|
143
|
-
* **构造器顺序同 `Tree.error`:`String` 必须排在 `Boolean` 前** —— 顺序写反时,成功态传的
|
|
124
|
+
* 错误态(truthy 即触发)。**构造器顺序同 `Tree.error`:`String` 必须排在 `Boolean` 前** —— 顺序写反时,成功态传的
|
|
144
125
|
* 空字符串会被 Vue 的布尔转换判成 `true`,侧栏永远停在错误态。
|
|
145
126
|
*/
|
|
146
127
|
error: {
|
|
@@ -265,9 +246,7 @@ export declare const Nav: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
265
246
|
default: undefined;
|
|
266
247
|
};
|
|
267
248
|
/**
|
|
268
|
-
* 错误态(truthy
|
|
269
|
-
*
|
|
270
|
-
* **构造器顺序同 `Tree.error`:`String` 必须排在 `Boolean` 前** —— 顺序写反时,成功态传的
|
|
249
|
+
* 错误态(truthy 即触发)。**构造器顺序同 `Tree.error`:`String` 必须排在 `Boolean` 前** —— 顺序写反时,成功态传的
|
|
271
250
|
* 空字符串会被 Vue 的布尔转换判成 `true`,侧栏永远停在错误态。
|
|
272
251
|
*/
|
|
273
252
|
error: {
|
|
@@ -102,9 +102,7 @@ const Nav = /* @__PURE__ */ defineComponent({
|
|
|
102
102
|
default: void 0
|
|
103
103
|
},
|
|
104
104
|
/**
|
|
105
|
-
* 错误态(truthy
|
|
106
|
-
*
|
|
107
|
-
* **构造器顺序同 `Tree.error`:`String` 必须排在 `Boolean` 前** —— 顺序写反时,成功态传的
|
|
105
|
+
* 错误态(truthy 即触发)。**构造器顺序同 `Tree.error`:`String` 必须排在 `Boolean` 前** —— 顺序写反时,成功态传的
|
|
108
106
|
* 空字符串会被 Vue 的布尔转换判成 `true`,侧栏永远停在错误态。
|
|
109
107
|
*/
|
|
110
108
|
error: {
|