@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
|
@@ -5,37 +5,25 @@ export type FormPadding = Padding;
|
|
|
5
5
|
/** label 列的水平对齐:`right`(默认,与 farris / 主流水平表单一致)或 `left` */
|
|
6
6
|
export type FormLabelAlign = 'left' | 'right';
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* - `'auto'`:**列数随容器宽度动态变化** —— 能排几列排几列,每列宽由 `columnMinWidth` 决定。
|
|
15
|
-
*
|
|
16
|
-
* 两类的差别是**可预期性**(不是能力高低):
|
|
17
|
-
*
|
|
18
|
-
* - 数字档承诺「最多 N 列」,所以「哪几个字段同排」在够宽的容器里是确定的;
|
|
19
|
-
* - 动态档会一路排下去(默认参数下 1320px 就够 4 列),窄了就减 ——
|
|
20
|
-
* 同一个表单在不同容器里列数不同 ⇒ **字段的相对位置会变**。要「两个字段必须并肩」就别用它。
|
|
8
|
+
* 字段行的排布档:`1`(默认,逐行);`2 ~ 6`(**列数上限** —— 放得下 N 列就并排、放不下少排一列,不会把控件压成
|
|
9
|
+
* 窄条;5 / 6 给宽屏展示页,默认最小宽 320 下要容器 1632 / 1960px);`'auto'`(**列数随容器宽度动态变化**,每列宽
|
|
10
|
+
* 由 `columnMinWidth` 决定)。
|
|
11
|
+
* 两类的差别是**可预期性**(不是能力高低):数字档承诺「最多 N 列」,够宽时「哪几个字段同排」是确定的;动态档窄了
|
|
12
|
+
* 就减,同一表单在不同容器里列数不同 ⇒ **字段的相对位置会变** —— 要「两个字段必须并肩」就别用它。
|
|
13
|
+
* 用法见 `docs/demos/form/`(每个维度一份可运行样例;文档页 `docs/components/form.md`)。
|
|
21
14
|
*/
|
|
22
15
|
export type FormColumns = 1 | 2 | 3 | 4 | 5 | 6 | 'auto';
|
|
23
16
|
/**
|
|
24
|
-
* 行内**垂直**对齐(label
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* - `start`:label 与控件**首行文字**对齐 —— 多行控件(文本域)与整块内容用它,
|
|
28
|
-
* 否则 label 会落到整块高度的中间。
|
|
29
|
-
*
|
|
30
|
-
* 不传即**自动判定**(样式按控件类型切档:文本域行零配置就是顶对齐);
|
|
31
|
-
* 显式传入优先于自动判定,用于自绘内容(卡片组 / 表格 / 富文本这类样式认不出来的块)。
|
|
17
|
+
* 行内**垂直**对齐(label 与控件在控件行内怎么对齐):`center`(默认,与控件**中线**对齐,单行控件用);`start`
|
|
18
|
+
* (与控件**首行文字**对齐,多行控件与整块内容用,否则 label 会落到整块高度中间)。不传即**自动判定**(样式按控件
|
|
19
|
+
* 类型切档),显式传入优先,用于自绘内容(卡片组 / 表格 / 富文本)。
|
|
32
20
|
*/
|
|
33
21
|
export type FormItemAlign = 'center' | 'start';
|
|
34
22
|
/** 表单值:**字段名 → 值**(键就是 `Form.Item` 的 `name`) */
|
|
35
23
|
export type FormValues = Record<string, unknown>;
|
|
36
24
|
/**
|
|
37
|
-
* 带 `name` 的 `Form.Item`
|
|
38
|
-
*
|
|
25
|
+
* 带 `name` 的 `Form.Item` 的默认插槽作用域:控件由消费方渲染,本件只把绑定值交出去;不带 `name` 的项
|
|
26
|
+
* (纯布局 / 只读行)不需要这些,作用域里的值恒为 `undefined`。
|
|
39
27
|
*/
|
|
40
28
|
export interface FormItemSlotScope {
|
|
41
29
|
/** 当前字段值(Form 里的原值,不做任何归一) */
|
|
@@ -48,51 +36,34 @@ export interface FormItemSlotScope {
|
|
|
48
36
|
export interface FormProps {
|
|
49
37
|
/** 表单级 label 列宽(px);缺省取令牌 `--ui-form-label-width`(120)。px 不跟随根字号,见 CONTRACT「已知偏差」 */
|
|
50
38
|
labelWidth?: number;
|
|
51
|
-
/**
|
|
52
|
-
* 表单级 label 对齐:`right`(默认,文本贴着控件列)或 `left`(所有 label 起点一致)。
|
|
53
|
-
* `Form.Item` 上再写则只改那一行。
|
|
54
|
-
*/
|
|
39
|
+
/** 表单级 label 对齐:`right`(默认,文本贴着控件列)或 `left`(所有 label 起点一致);`Form.Item` 上再写则只改那一行。 */
|
|
55
40
|
labelAlign?: FormLabelAlign;
|
|
56
41
|
/**
|
|
57
|
-
* 表单级控件列宽上限(px
|
|
58
|
-
*
|
|
59
|
-
* 宽表单(>600px)里让输入框一路拉到右边缘很难看,两种收法二选一:
|
|
60
|
-
* ① 收宽度 —— 传 `controlWidth={360}`,控件列封顶、右侧留白;
|
|
61
|
-
* ② 分列 —— 传 `columns`(`2 | 3 | 4` 上限档,或 `'auto'` 动态),把行并排起来(见下)。
|
|
42
|
+
* 表单级控件列宽上限(px);缺省**撑满**剩余宽度。宽表单(>600px)里让输入框一路拉到右边缘很难看,两种收法
|
|
43
|
+
* 二选一:① 收宽度(`controlWidth={360}`,控件列封顶、右侧留白);② 分列(`columns`,见下)。
|
|
62
44
|
*/
|
|
63
45
|
controlWidth?: number;
|
|
64
46
|
/**
|
|
65
|
-
* 列数:`1`(默认,逐行)/ `2 ~ 6
|
|
66
|
-
* `
|
|
67
|
-
*
|
|
68
|
-
* 多列下每一行都要能独立成格,所以「整行内容」(说明行、卡片组、表格、文本域)记得
|
|
69
|
-
* 在对应 `Form.Item` 上给 `fullWidth`,否则会被压成一格。
|
|
47
|
+
* 列数:`1`(默认,逐行)/ `2 ~ 6`(**容器够宽才并排**,窄了自动回落一列)/ `'auto'`(列数随容器宽度动态变化)。
|
|
48
|
+
* 多列下「整行内容」(说明行 / 卡片组 / 表格 / 文本域)记得在对应 `Form.Item` 上给 `fullWidth`,否则会被压成一格。
|
|
70
49
|
*/
|
|
71
50
|
columns?: FormColumns;
|
|
72
51
|
/**
|
|
73
|
-
* 一列的**最小宽度**(px);缺省取令牌 `--ui-form-column-min`(320
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* 它同时是**回落阈值**与**动态列数的除数**:数字档下容器窄于
|
|
77
|
-
* `N × 最小宽 + (N − 1) × 行距` 就少排一列;动态档下列数 =
|
|
78
|
-
* `floor((容器宽 + 行距) / (最小宽 + 行距))`。抽屉 / 弹窗里嫌字段太窄就调小(如 280),
|
|
79
|
-
* 宽页面里嫌列太多就调大(如 380)。
|
|
52
|
+
* 一列的**最小宽度**(px);缺省取令牌 `--ui-form-column-min`(320 =「label 120 + 一个还能用的输入框」的下限)。
|
|
53
|
+
* 它同时是**回落阈值**与**动态列数的除数**:数字档下容器窄于 `N × 最小宽 + (N − 1) × 行距` 就少排一列;动态档下
|
|
54
|
+
* 列数 = `floor((容器宽 + 行距) / (最小宽 + 行距))`。抽屉 / 弹窗里嫌字段太窄就调小(如 280),宽页面里嫌列太多就调大。
|
|
80
55
|
*/
|
|
81
56
|
columnMinWidth?: number;
|
|
82
57
|
/**
|
|
83
|
-
* 表单内距(**px 数字**,与 `Panel` 同一口径):`number` = 四边同值;`{ y, x }` = 上下 /
|
|
84
|
-
*
|
|
85
|
-
* **缺省 0**:表单贴容器边,内距由所在容器给(页面里的表单在 `Panel.Body` 里,那块自带内距)。
|
|
86
|
-
* 弹窗 / 抽屉里没有别的容器给内距时用它自带 —— 如 `padding={{ y: 16, x: 20 }}`,
|
|
87
|
-
* 这样就不必再给表单挂一个「只写 padding」的应用侧类。
|
|
58
|
+
* 表单内距(**px 数字**,与 `Panel` 同一口径):`number` = 四边同值;`{ y, x }` = 上下 / 左右分别给。**缺省 0**
|
|
59
|
+
* (表单贴容器边,内距由所在容器给);弹窗 / 抽屉里没别的容器给内距时用它自带(如 `{ y: 16, x: 20 }`)。
|
|
88
60
|
*/
|
|
89
61
|
padding?: FormPadding;
|
|
90
62
|
/** 行距(px,字段行之间 / 与 `Form.Header` 之间);缺省沿用样式里的 8px 档 */
|
|
91
63
|
gap?: number;
|
|
92
64
|
/**
|
|
93
|
-
* 受控表单值(**字段名 → 值**,键就是 `Form.Item` 的 `name`);不传即非受控(由 `defaultValue`
|
|
94
|
-
*
|
|
95
|
-
* 值变更时 `emit('update:modelValue')` 与 `onChange` **双走**(`v-model` 落地 + 回调)。
|
|
65
|
+
* 受控表单值(**字段名 → 值**,键就是 `Form.Item` 的 `name`);不传即非受控(由 `defaultValue` 起)。值变更时
|
|
66
|
+
* `emit('update:modelValue')` 与 `onChange` **双走**(`v-model` 落地 + 回调)。
|
|
96
67
|
*/
|
|
97
68
|
modelValue?: FormValues;
|
|
98
69
|
/** 非受控初值;其中的键会一并成为快照的键(不必等字段挂载) */
|
|
@@ -100,178 +71,104 @@ export interface FormProps {
|
|
|
100
71
|
/** 值变更(快照含**全部已登记字段**,未设值的字段为 `undefined`) */
|
|
101
72
|
onChange?: (values: FormValues) => void;
|
|
102
73
|
/**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* (构造 `Filter` 时因此不必再套一层只为挂事件的壳 —— 那会改变 `class` / `style` 的落点)。
|
|
109
|
-
*
|
|
110
|
-
* **有意只开这一条**:其它监听器(如 `onClick`)不转发;要把某一条也接进来,先当一次公开行为变更裁决。
|
|
111
|
-
* 要不要拦、拦哪些按键(本包 `Filter` 收窄到「`<input>` 上的回车」)由调用方自己判断,本件只转发。
|
|
74
|
+
* 根节点的键盘事件(**转发到表单根**)。本件是 `inheritAttrs: false`,根节点只显式绑 `class` / `style` ——
|
|
75
|
+
* 不声明的监听器会被**静默丢掉**;而根节点就是「全部字段行的容器」,故它是「字段区层面的委托」的落点(`Filter`
|
|
76
|
+
* 的「字段区回车 = 查询」就搭在这条通道上,构造 `Filter` 时因此不必再套一层只为挂事件的壳)。
|
|
77
|
+
* **有意只开这一条**:其它监听器(如 `onClick`)不转发;判据(`Filter` 收窄到「`<input>` 上的回车」)由调用方
|
|
78
|
+
* 自己定,本件只转发。
|
|
112
79
|
*/
|
|
113
80
|
onKeydown?: (event: KeyboardEvent) => void;
|
|
114
81
|
}
|
|
115
82
|
export interface FormItemProps {
|
|
116
83
|
/**
|
|
117
|
-
* **字段名**(绑定的键):带了它,本行就从 `Form`
|
|
118
|
-
*
|
|
119
|
-
* 纯布局行,值由消费方自己在控件上绑定(静态摘要 / 只读行都属这一类)。
|
|
84
|
+
* **字段名**(绑定的键):带了它,本行就从 `Form` 取值并把写值交出去(默认插槽作用域 `{ value, setValue, clear }`);
|
|
85
|
+
* 不带则与从前一样 —— 纯布局行,值由消费方自己在控件上绑定(静态摘要 / 只读行都属这一类)。
|
|
120
86
|
*/
|
|
121
87
|
name?: string;
|
|
122
|
-
/**
|
|
123
|
-
* 字段名(label 文本)。缺省且非必填时**不渲染 label 列**:控件列占满整行
|
|
124
|
-
* —— 用于无字段名的整块内容(如列编辑区)与纯说明行。
|
|
125
|
-
*/
|
|
88
|
+
/** 字段名(label 文本)。缺省且非必填时**不渲染 label 列**(控件列占满整行)—— 用于无字段名的整块内容与纯说明行。 */
|
|
126
89
|
label?: string;
|
|
127
|
-
/**
|
|
128
|
-
* 必填标记:星号渲染在 label 文本**之后**(`服务名称*`)—— 星号是字段名的一部分,
|
|
129
|
-
* 跟着字段名走;与 farris 动态表单「星号在左」的写法**有意不同**(本仓口径)。
|
|
130
|
-
*/
|
|
90
|
+
/** 必填标记:星号渲染在 label 文本**之后**(`服务名称*`)—— 星号是字段名的一部分,跟着字段名走(与 farris「星号在左」有意不同)。 */
|
|
131
91
|
required?: boolean;
|
|
132
92
|
/** 校验错误文案:非空即进入 invalid 态,文案排布在控件**下方**(不遮挡后续行) */
|
|
133
93
|
error?: string;
|
|
134
94
|
/** 字段说明文案(常驻,排在错误之后) */
|
|
135
95
|
hint?: string;
|
|
136
96
|
/**
|
|
137
|
-
* **label 旁的提示**(问号图标 +
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* 图标排在 label 文本与必填星号**之后**(`服务名称*ⓘ`);只给 `tip` 而不给 `label` 时同样保留
|
|
143
|
-
* label 列(与「只给 required」同一判据)—— 否则图标没有列可落、静默消失。
|
|
144
|
-
*
|
|
145
|
-
* 用的是 `Tooltip` 的 **hover 档**(零 JS):显隐与定位全在 CSS,移入 / 聚焦即显、移开即隐,
|
|
146
|
-
* 因此**不吃点击、不抢焦点**。代价一条:hover 档不进浏览器顶层浮层,会被祖先 `overflow` 裁切
|
|
147
|
-
* —— 弹窗 / 抽屉里贴着裁剪边的字段可能看不全(要顶层浮层就得换 `Tooltip trigger="click"`,
|
|
148
|
-
* 本件有意不暴露该维度,见文件头「label 提示」)。
|
|
97
|
+
* **label 旁的提示**(问号图标 + 悬停气泡,仅文本)。`hint` 是**常驻**在控件下方的说明,`tip` 是**按需展开**的
|
|
98
|
+
* 补充解释(不占版面,悬停 / 键盘聚焦时出现),两者可同时给。图标排在 label 文本与必填星号**之后**
|
|
99
|
+
* (`服务名称*ⓘ`);只给 `tip` 而不给 `label` 时同样保留 label 列(否则图标没有列可落、静默消失)。气泡用
|
|
100
|
+
* `Tooltip` 的 **hover 档**(零 JS、不吃点击、不抢焦点),代价一条:hover 档不进顶层浮层、会被祖先 `overflow` 裁切。
|
|
149
101
|
*/
|
|
150
102
|
tip?: string;
|
|
151
103
|
/** 本行 label 列宽(px);覆盖 `Form` 的表单级设置 */
|
|
152
104
|
labelWidth?: number;
|
|
153
105
|
/** 本行 label 对齐;覆盖 `Form` 的表单级设置 */
|
|
154
106
|
labelAlign?: FormLabelAlign;
|
|
155
|
-
/**
|
|
156
|
-
* 本行控件列宽上限(px);覆盖 `Form` 的表单级设置。
|
|
157
|
-
* 缺省撑满剩余宽度(宽表单里的选型字段用它收敛,避免长条下拉)。
|
|
158
|
-
*/
|
|
107
|
+
/** 本行控件列宽上限(px);覆盖 `Form` 的表单级设置,缺省撑满剩余宽度(宽表单里的选型字段用它收敛,避免长条下拉)。 */
|
|
159
108
|
controlWidth?: number;
|
|
160
109
|
/** 在两列表单里跨满整行(说明行 / 卡片组 / 表格 / 文本域等整块内容) */
|
|
161
110
|
fullWidth?: boolean;
|
|
162
111
|
/**
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
* - **文本值**:控件位放 `<Input model-value={…} readonly bordered={false} />` ——
|
|
168
|
-
* 几何复用输入面(与可编辑输入框**同高、同内距**,值文字落在同一条竖线与中线上),
|
|
169
|
-
* 并且「无框 + 只读」会自动退掉输入框的交互线索(不显悬停底与聚焦框环,仍可选中复制);
|
|
170
|
-
* 空值占位由业务侧自己拼(如 `model-value="v || '—'"`);
|
|
171
|
-
* - **非文本内容**:内容直接从默认插槽进,`readonly` 只负责弱化 label。
|
|
112
|
+
* **只读展示行**(摘要 / 详情):把 label 降一档**次要色**(与值拉开层级),内容仍走默认插槽。文本值放
|
|
113
|
+
* `<Input model-value={…} readonly bordered={false} />` —— 几何复用输入面(与可编辑输入框同高、同内距,值文字落在
|
|
114
|
+
* 同一条竖线与中线上),且「无框 + 只读」自动退掉交互线索(不显悬停底与聚焦框环,仍可选中复制);空值占位由业务
|
|
115
|
+
* 侧自己拼。非文本内容(徽标 / 链接)直接从默认插槽进,`readonly` 只负责弱化 label。
|
|
172
116
|
*/
|
|
173
117
|
readonly?: boolean;
|
|
174
|
-
/**
|
|
175
|
-
* 行内**垂直**对齐:`center`(默认,label 与控件中线对齐)/ `start`(label 与控件首行文字对齐,
|
|
176
|
-
* 用于多行与整块内容)。不传即按控件类型自动判定(文本域自动顶对齐),显式传入优先。
|
|
177
|
-
*/
|
|
118
|
+
/** 行内**垂直**对齐:`center`(默认,与控件中线对齐)/ `start`(与首行文字对齐,用于多行与整块内容)。不传即按控件类型自动判定(文本域自动顶对齐),显式传入优先。 */
|
|
178
119
|
align?: FormItemAlign;
|
|
179
120
|
}
|
|
180
121
|
/**
|
|
181
122
|
* 表单行(**自建**):`label + 控件 + 错误 + 说明` 四件。
|
|
182
123
|
*
|
|
183
|
-
* 为什么不封装 farris 的 `FDynamicFormGroup
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
* 必填星号固定在 label 文本**之后**(`服务名称*`,有意偏离 farris 的「星号在左」);
|
|
189
|
-
* **label 对齐是维度**(`labelAlign`,
|
|
190
|
-
* 默认 `right`(与 farris / 主流水平表单一致),`left` 时所有 label 起点一致)。
|
|
124
|
+
* 为什么不封装 farris 的 `FDynamicFormGroup`:那是元数据驱动的动态表单分组件(控件经 `editor` 描述对象
|
|
125
|
+
* 渲染、label 宽度由 farris 表单类写死、校验信息走绝对定位的浮层提示条),与本仓三条口径冲突:控件由
|
|
126
|
+
* 消费方直接写、数据入参只收朴素业务值、错误与说明按文档流排布(浮层在弹窗里会压住下一行的控件)。故按
|
|
127
|
+
* 「缺件处置流程」自建;必填星号固定在 label 文本**之后**(`服务名称*`,有意偏离 farris 的「星号在左」);
|
|
128
|
+
* label 对齐是维度(`labelAlign`,默认 `right` 与主流水平表单一致,`left` 时所有 label 起点一致)。
|
|
191
129
|
*
|
|
192
130
|
* ## 宽表单怎么处理(两条杠杆,可叠加)
|
|
193
|
-
*
|
|
194
131
|
* - **限宽**:`controlWidth` 封顶控件列(表单级给默认、逐行可覆盖)—— 单列表单不至于把输入框拉成长条;
|
|
195
|
-
* - **分列**:`columns`
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
* **不需要消费方写媒体查询**;多列下「整块内容」记得 `fullWidth`。
|
|
132
|
+
* - **分列**:`columns` 让行并排(`2 ~ 6` 是**列数上限**,宽够才并排;`'auto'` 是列数随宽度动态变化)。
|
|
133
|
+
* 回落阈值与动态列数都由 `columnMinWidth`(缺省令牌 `--ui-form-column-min` = 320)决定,**不需要消费方
|
|
134
|
+
* 写媒体查询**;多列下「整块内容」记得 `fullWidth`。
|
|
199
135
|
*
|
|
200
|
-
* `Form.Item` 是唯一入口(`Form`
|
|
201
|
-
* 控件从默认插槽进,因此输入框 / 下拉 / 文本域 / 自绘分组卡片共用同一个容器。
|
|
136
|
+
* `Form.Item` 是唯一入口(`Form` 只承载表单级设置、行间距 / 列数与容器内距),控件从默认插槽进。
|
|
202
137
|
*
|
|
203
138
|
* ## 行内垂直对齐(label 与控件怎么对齐)
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
*
|
|
211
|
-
* - 样式认不出形态的自绘块(卡片组 / 表格 / 富文本)用 `align="start"` 显式声明;要强制居中用 `align="center"`。
|
|
212
|
-
*
|
|
213
|
-
* **本件不再依赖任何「控件高度」常量**:从前用一个外部注入的高度变量把 label 撑到控件高,
|
|
214
|
-
* 而那个变量在骨架层没有任何出处(回退成 `auto`),于是 label 盒退化成一行文字并贴行顶 ——
|
|
215
|
-
* 输入框中线偏高 6px、大号档偏高 10px、文本域偏高 9px,档位越高错得越多。
|
|
139
|
+
* 对齐参照是**控件那一行**,不是整行:控件列与 label 同处第 1 行、错误 / 说明自然落第 2 行起 —— 提示文案
|
|
140
|
+
* 的有无与长短都不会带动 label 的位置。规则按控件形态自动切档、消费方零配置:单行控件 → label 与控件
|
|
141
|
+
* **中线**对齐(**与控件高度无关**,切档 / 换主题 / 放自绘控件都成立);多行与整块内容(文本域这类样式
|
|
142
|
+
* 认得出形态的)→ **首行文字**对齐;样式认不出形态的自绘块(卡片组 / 表格 / 富文本)用 `align="start"`,
|
|
143
|
+
* 要强制居中用 `align="center"`。
|
|
144
|
+
* **本件不再依赖任何「控件高度」常量**:从前那个外部注入的高度变量在骨架层没有出处(回退成 `auto`),
|
|
145
|
+
* label 盒因此退化成一行文字并贴行顶 —— 档位越高错得越多。
|
|
216
146
|
*
|
|
217
147
|
* ## 容器内距(`padding`)
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
* `{ y, x }
|
|
221
|
-
* **弹窗 / 抽屉里没有别的容器**给内距,就用表单自带的 `padding={{ y: 16, x: 20 }}`。
|
|
148
|
+
* 与 `Panel` **同一口径同一实现**(`src/components/part-padding.ts`):`number` 四边同值、`{ y, x }` 分别
|
|
149
|
+
* 给,缺省 0(贴容器边)。页面里的表单在 `Panel.Body` 里、内距由那块给;**弹窗 / 抽屉里没有别的容器**
|
|
150
|
+
* 给内距,就用表单自带的 `padding={{ y: 16, x: 20 }}`。
|
|
222
151
|
*
|
|
223
152
|
* ## label 提示(`tip`)
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
* - 图标**排在星号之后**(`服务名称*ⓘ`)—— 与「星号跟着字段名走」同一口径;
|
|
230
|
-
* - 只给 `tip`(无 `label`、非必填)时**同样保留 label 列**(与「只给 required」同一判据),
|
|
231
|
-
* 否则图标没有列可落、静默消失;
|
|
232
|
-
* - 气泡用 `Tooltip` 的 **hover 档**(零 JS):不吃点击、不抢焦点;代价是 hover 档不进浏览器
|
|
233
|
-
* 顶层浮层,会被祖先 `overflow` 裁切(弹窗 / 抽屉里贴着裁剪边的字段可能看不全)。
|
|
153
|
+
* 字段名(与必填星号)之后挂一枚问号图标,悬停 / 键盘聚焦弹出说明气泡 —— 按需展开的补充解释、不占版面;
|
|
154
|
+
* 常驻说明仍归 `hint`(排在控件下方),两者不互相替代。图标取 `help`(带圈问号)字形、尺寸随主题图标档、
|
|
155
|
+
* **排在星号之后**(`服务名称*ⓘ`);只给 `tip`(无 `label`、非必填)时**同样保留 label 列**,否则图标
|
|
156
|
+
* 没有列可落、静默消失。气泡用 `Tooltip` 的 **hover 档**(零 JS、不吃点击、不抢焦点),代价是 hover 档
|
|
157
|
+
* 不进浏览器顶层浮层,会被祖先 `overflow` 裁切(弹窗 / 抽屉里贴着裁剪边的字段可能看不全)。
|
|
234
158
|
*
|
|
235
159
|
* ## 键盘事件(`onKeydown` 转发到根节点)
|
|
236
|
-
*
|
|
237
|
-
* `
|
|
238
|
-
*
|
|
239
|
-
*
|
|
240
|
-
*
|
|
241
|
-
* (那会改变 `class` / `style` 的落点)。要不要拦、拦哪些按键由调用方自己判断,本件只转发。
|
|
242
|
-
* **有意只开这一条**:其它监听器不转发,扩张要先当一次公开行为变更裁决。
|
|
160
|
+
* `onKeydown` 是本件的**声明式入口**(缺省不绑):本件是 `inheritAttrs: false`,根节点只显式绑
|
|
161
|
+
* `class` / `style`,不声明的监听器会被静默丢掉。根节点即「全部字段行的容器」,故它是「字段区层面的委托」
|
|
162
|
+
* 的落点 —— `Filter` 的「字段区回车 = 查询」就搭在这里,构造 `Filter` 时**不必**再套一层只为挂事件的壳
|
|
163
|
+
* (那会改变 `class` / `style` 的落点)。要不要拦、拦哪些按键由调用方判断,本件只转发;**有意只开这一条**,
|
|
164
|
+
* 其它监听器不转发,扩张要先当一次公开行为变更裁决。
|
|
243
165
|
*
|
|
244
166
|
* ## 只读值(摘要 / 详情)
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
* ```tsx
|
|
252
|
-
* <Form.Item label="创建人" readonly>
|
|
253
|
-
* <Input model-value={row.creator || '—'} readonly bordered={false} />
|
|
254
|
-
* </Form.Item>
|
|
255
|
-
* ```
|
|
256
|
-
*
|
|
257
|
-
* - **几何与可编辑行完全一致**:值文字与输入框内的值同高、同左缘、同中线,混排时节奏整齐;
|
|
258
|
-
* - **没有「可编辑」的线索**:不显悬停底色、不给聚焦边框与主色环,但仍可点进去选中 / 复制;
|
|
259
|
-
* - **空值占位归业务**:组件不再替你把 `''` 显示成 `—`,按上面的写法自己拼;
|
|
260
|
-
* - **label 弱化**:传 `readonly` 把 label 降一档次要色,字段名与取值一眼分得开;
|
|
261
|
-
* - 控件位是徽标 / 链接这类**非文本**只读内容时同样传 `readonly`:内容直接走默认插槽。
|
|
262
|
-
*
|
|
263
|
-
* @example
|
|
264
|
-
* <Form labelWidth={120} columns={2}>
|
|
265
|
-
* <Form.Item label="编码" required error={errors.code} hint="保存后不可修改">
|
|
266
|
-
* <Input modelValue={form.code} onChange={(v) => (form.code = v)} />
|
|
267
|
-
* </Form.Item>
|
|
268
|
-
* <Form.Item label="缓存策略" controlWidth={360} tip="命中即不请求后端">
|
|
269
|
-
* <Select options={cacheOptions} modelValue={form.cache} onChange={…} />
|
|
270
|
-
* </Form.Item>
|
|
271
|
-
* <Form.Item label="过滤条件" fullWidth>
|
|
272
|
-
* <Textarea modelValue={form.filter} onChange={…} />
|
|
273
|
-
* </Form.Item>
|
|
274
|
-
* </Form>
|
|
167
|
+
* 「向导最后一步的确认摘要」「详情弹窗」不需要另起一套描述列表件 —— 只用表单行本身(label 列宽 / 行距 /
|
|
168
|
+
* 错误与说明全部复用),控件位放**只读 + 无框**的输入框即可(本件不给「静态文本」形态:那套几何与输入框
|
|
169
|
+
* 迟早会漂开)。几何与可编辑行完全一致;没有「可编辑」的线索(不显悬停底色、不给聚焦框与主色环,仍可点
|
|
170
|
+
* 进去选中 / 复制);**空值占位归业务**(组件不替你把 `''` 显示成 `—`);传 `readonly` 把 label 降一档
|
|
171
|
+
* 次要色;控件位是徽标 / 链接这类**非文本**只读内容时同样传 `readonly`,内容直接走默认插槽。
|
|
275
172
|
*/
|
|
276
173
|
export declare const FormItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
277
174
|
/** 字段名(绑定的键);不传即纯布局行(值由消费方自己在控件上绑定) */
|
|
@@ -396,10 +293,7 @@ export declare const FormItem: import("vue").DefineComponent<import("vue").Extra
|
|
|
396
293
|
default?: (scope: FormItemSlotScope) => VNodeChild;
|
|
397
294
|
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
398
295
|
export interface FormHeaderProps {
|
|
399
|
-
/**
|
|
400
|
-
* 表单头标题。不传则该行不渲染标题文本 —— 但给了 `extra` 时这一行**照渲染**
|
|
401
|
-
* (右端操作位不能凭空消失,与 `Panel`「只给 toolbar / actions、不给 title」同一条口径)。
|
|
402
|
-
*/
|
|
296
|
+
/** 表单头标题。不传则该行不渲染标题文本 —— 但给了 `extra` 时这一行**照渲染**(右端操作位不能凭空消失,与 `Panel`「只给 toolbar / actions、不给 title」同口径)。 */
|
|
403
297
|
title?: string;
|
|
404
298
|
/** 标题下的说明小字(一行话,讲清这块表单是做什么的) */
|
|
405
299
|
description?: string;
|
|
@@ -412,17 +306,6 @@ export interface FormHeaderProps {
|
|
|
412
306
|
*
|
|
413
307
|
* 它只做**标题排版**与操作位,不承担区块分组(那是 `Panel` 的职责);三样(`title` /
|
|
414
308
|
* `extra` / `description`)都没有时整组不渲染 —— 空盒子同样占一档 `Form` 的 gap,会凭空多出间距。
|
|
415
|
-
*
|
|
416
|
-
* @example 筛选条的头(标题 + 右侧查询/重置)—— 插槽走 `h()` 的对象形态:
|
|
417
|
-
* TSX 的 `v-slots={{…}}` 在 vitest 的 JSX 管线里会被当**普通属性**丢掉(见 `list-view/index.tsx` 同款记录)
|
|
418
|
-
* {h(Form, {}, {
|
|
419
|
-
* default: () => [
|
|
420
|
-
* h(Form.Header, { title: '高级筛选' }, { extra: () => h(Button, { variant: 'primary' }, '筛选') }),
|
|
421
|
-
* h(Form.Item, { name: 'keyword', label: '技能名称' }, { default: () => h(Input) }),
|
|
422
|
-
* ],
|
|
423
|
-
* })}
|
|
424
|
-
*
|
|
425
|
-
* @example 只要操作位(不要标题):`h(Form.Header, {}, { extra: () => … })`
|
|
426
309
|
*/
|
|
427
310
|
export declare const FormHeader: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
428
311
|
title: {
|
|
@@ -482,19 +365,14 @@ export declare const Form: {
|
|
|
482
365
|
default: undefined;
|
|
483
366
|
};
|
|
484
367
|
/**
|
|
485
|
-
* 排布:`horizontal`(label 在左,缺省)/ `vertical`(label
|
|
486
|
-
*
|
|
487
|
-
* 窄容器(抽屉 / 移动端)与「字段名很长」的场景请用纵向 —— 横向时 label 列宽会把控件压得很窄。
|
|
368
|
+
* 排布:`horizontal`(label 在左,缺省)/ `vertical`(label 在控件上方)。窄容器(抽屉 / 移动端)与「字段名很
|
|
369
|
+
* 长」的场景请用纵向 —— 横向时 label 列宽会把控件压得很窄。
|
|
488
370
|
*/
|
|
489
371
|
layout: {
|
|
490
372
|
type: PropType<"horizontal" | "vertical">;
|
|
491
373
|
default: string;
|
|
492
374
|
};
|
|
493
|
-
/**
|
|
494
|
-
* 行距(px,字段行之间 / 与 `Form.Header` 之间);缺省沿用样式里的 8px 档。
|
|
495
|
-
*
|
|
496
|
-
* 筛选条这类「上行 + 一行字段」的紧凑排布要 16(设计稿口径);长表单也可以调松。
|
|
497
|
-
*/
|
|
375
|
+
/** 行距(px,字段行之间 / 与 `Form.Header` 之间);缺省沿用样式里的 8px 档。筛选条这类「上行 + 一行字段」的紧凑排布要 16(设计稿口径),长表单也可以调松。 */
|
|
498
376
|
gap: {
|
|
499
377
|
type: NumberConstructor;
|
|
500
378
|
default: undefined;
|
|
@@ -577,19 +455,14 @@ export declare const Form: {
|
|
|
577
455
|
default: undefined;
|
|
578
456
|
};
|
|
579
457
|
/**
|
|
580
|
-
* 排布:`horizontal`(label 在左,缺省)/ `vertical`(label
|
|
581
|
-
*
|
|
582
|
-
* 窄容器(抽屉 / 移动端)与「字段名很长」的场景请用纵向 —— 横向时 label 列宽会把控件压得很窄。
|
|
458
|
+
* 排布:`horizontal`(label 在左,缺省)/ `vertical`(label 在控件上方)。窄容器(抽屉 / 移动端)与「字段名很
|
|
459
|
+
* 长」的场景请用纵向 —— 横向时 label 列宽会把控件压得很窄。
|
|
583
460
|
*/
|
|
584
461
|
layout: {
|
|
585
462
|
type: PropType<"horizontal" | "vertical">;
|
|
586
463
|
default: string;
|
|
587
464
|
};
|
|
588
|
-
/**
|
|
589
|
-
* 行距(px,字段行之间 / 与 `Form.Header` 之间);缺省沿用样式里的 8px 档。
|
|
590
|
-
*
|
|
591
|
-
* 筛选条这类「上行 + 一行字段」的紧凑排布要 16(设计稿口径);长表单也可以调松。
|
|
592
|
-
*/
|
|
465
|
+
/** 行距(px,字段行之间 / 与 `Form.Header` 之间);缺省沿用样式里的 8px 档。筛选条这类「上行 + 一行字段」的紧凑排布要 16(设计稿口径),长表单也可以调松。 */
|
|
593
466
|
gap: {
|
|
594
467
|
type: NumberConstructor;
|
|
595
468
|
default: undefined;
|
|
@@ -665,19 +538,14 @@ export declare const Form: {
|
|
|
665
538
|
default: undefined;
|
|
666
539
|
};
|
|
667
540
|
/**
|
|
668
|
-
* 排布:`horizontal`(label 在左,缺省)/ `vertical`(label
|
|
669
|
-
*
|
|
670
|
-
* 窄容器(抽屉 / 移动端)与「字段名很长」的场景请用纵向 —— 横向时 label 列宽会把控件压得很窄。
|
|
541
|
+
* 排布:`horizontal`(label 在左,缺省)/ `vertical`(label 在控件上方)。窄容器(抽屉 / 移动端)与「字段名很
|
|
542
|
+
* 长」的场景请用纵向 —— 横向时 label 列宽会把控件压得很窄。
|
|
671
543
|
*/
|
|
672
544
|
layout: {
|
|
673
545
|
type: PropType<"horizontal" | "vertical">;
|
|
674
546
|
default: string;
|
|
675
547
|
};
|
|
676
|
-
/**
|
|
677
|
-
* 行距(px,字段行之间 / 与 `Form.Header` 之间);缺省沿用样式里的 8px 档。
|
|
678
|
-
*
|
|
679
|
-
* 筛选条这类「上行 + 一行字段」的紧凑排布要 16(设计稿口径);长表单也可以调松。
|
|
680
|
-
*/
|
|
548
|
+
/** 行距(px,字段行之间 / 与 `Form.Header` 之间);缺省沿用样式里的 8px 档。筛选条这类「上行 + 一行字段」的紧凑排布要 16(设计稿口径),长表单也可以调松。 */
|
|
681
549
|
gap: {
|
|
682
550
|
type: NumberConstructor;
|
|
683
551
|
default: undefined;
|
|
@@ -230,19 +230,14 @@ const FormRoot = /* @__PURE__ */ defineComponent({
|
|
|
230
230
|
default: void 0
|
|
231
231
|
},
|
|
232
232
|
/**
|
|
233
|
-
* 排布:`horizontal`(label 在左,缺省)/ `vertical`(label
|
|
234
|
-
*
|
|
235
|
-
* 窄容器(抽屉 / 移动端)与「字段名很长」的场景请用纵向 —— 横向时 label 列宽会把控件压得很窄。
|
|
233
|
+
* 排布:`horizontal`(label 在左,缺省)/ `vertical`(label 在控件上方)。窄容器(抽屉 / 移动端)与「字段名很
|
|
234
|
+
* 长」的场景请用纵向 —— 横向时 label 列宽会把控件压得很窄。
|
|
236
235
|
*/
|
|
237
236
|
layout: {
|
|
238
237
|
type: String,
|
|
239
238
|
default: "horizontal"
|
|
240
239
|
},
|
|
241
|
-
/**
|
|
242
|
-
* 行距(px,字段行之间 / 与 `Form.Header` 之间);缺省沿用样式里的 8px 档。
|
|
243
|
-
*
|
|
244
|
-
* 筛选条这类「上行 + 一行字段」的紧凑排布要 16(设计稿口径);长表单也可以调松。
|
|
245
|
-
*/
|
|
240
|
+
/** 行距(px,字段行之间 / 与 `Form.Header` 之间);缺省沿用样式里的 8px 档。筛选条这类「上行 + 一行字段」的紧凑排布要 16(设计稿口径),长表单也可以调松。 */
|
|
246
241
|
gap: {
|
|
247
242
|
type: Number,
|
|
248
243
|
default: void 0
|
|
@@ -316,10 +311,8 @@ const FormRoot = /* @__PURE__ */ defineComponent({
|
|
|
316
311
|
/** 当前快照(含全部已登记字段) */
|
|
317
312
|
getValues: () => values.value,
|
|
318
313
|
/**
|
|
319
|
-
* 清空全部字段(置 `undefined`;受控模式下同样会发 `update:modelValue
|
|
320
|
-
*
|
|
321
|
-
* **返回清空后的快照**:受控时外部还没回写 `modelValue`,调用方此刻再 `getValues()`
|
|
322
|
-
* 会读到清空前的旧值 —— 直接吃返回值才不依赖回写时序。
|
|
314
|
+
* 清空全部字段(置 `undefined`;受控模式下同样会发 `update:modelValue`)。**返回清空后的快照**:受控时外部
|
|
315
|
+
* 还没回写 `modelValue`,调用方此刻再 `getValues()` 会读到清空前的旧值 —— 直接吃返回值才不依赖回写时序。
|
|
323
316
|
*/
|
|
324
317
|
clear: () => {
|
|
325
318
|
const cleared = {};
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `bordered` 三档 →
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* 那一对的反差是库内既定口径(见 `docs/guide/naming-and-defaults.md` §2.1);
|
|
7
|
-
* `'focus'` 档的类名 `--border-on-focus` 是这套口径下的新成员:它说的就是「聚焦时才有框」。
|
|
2
|
+
* `bordered` 三档 → 控件类名(**唯一来源**):输入族三个件(`Input` / `Textarea` / `NumberInput`)共用同一份面与同一个
|
|
3
|
+
* prop,判定表抄三份必然漂,故收在这里。类名口径:prop 是**肯定式**(`bordered`)、类名是**否定式**(`--borderless`)
|
|
4
|
+
* —— 那对反差是库内既定口径(见 `docs/guide/naming-and-defaults.md` §2.1);`'focus'` 档的
|
|
5
|
+
* `.mh-input--border-on-focus` 是这套口径下的新成员(它说的就是「聚焦时才有框」)。
|
|
8
6
|
*
|
|
9
7
|
* | `bordered` | 类名 | 常态 | 悬停 | 聚焦 |
|
|
10
8
|
* | --- | --- | --- | --- | --- |
|