@manohub/ui 1.0.5 → 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 +21 -54
- 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 +6 -15
- 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 +52 -132
- package/dist/components/form/index.js +5 -12
- package/dist/components/input/bordered.d.ts +4 -6
- package/dist/components/input/index.d.ts +31 -63
- package/dist/components/input/index.js +5 -7
- 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 +8 -43
- 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 +27 -62
- 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 +2 -3
- package/dist/components/search/index.d.ts +12 -32
- package/dist/components/select/index.d.ts +7 -14
- 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 +11 -63
- 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 +35 -77
- 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 +10 -22
- 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/button.css +2 -0
- package/dist/styles/components/capsule.css +2 -0
- package/dist/styles/components/checkbox.css +2 -0
- package/dist/styles/components/form.css +23 -28
- package/dist/styles/components/input.css +53 -71
- package/dist/styles/components/notice.css +2 -0
- package/dist/styles/components/page.css +25 -31
- package/dist/styles/components/pagination.css +4 -0
- package/dist/styles/components/radio.css +2 -0
- package/dist/styles/components/search.css +8 -10
- package/dist/styles/components/switch.css +2 -0
- package/dist/styles/components/tabbar.css +2 -0
- package/dist/styles/components/table.css +34 -41
- package/dist/styles/components/upload.css +2 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -106,8 +106,8 @@ pending.close()
|
|
|
106
106
|
if (await confirm({ title: '删除确认', detail: '删除后不可恢复', okDanger: true })) await remove()
|
|
107
107
|
await alert({ title: '导入完成', detail: '共 128 条' })
|
|
108
108
|
|
|
109
|
-
const
|
|
110
|
-
try { await save() } finally {
|
|
109
|
+
const loading = showLoading('保存中…') // 引用计数:并发调用要各关各的
|
|
110
|
+
try { await save() } finally { loading.close() } // 句柄与 toast() 同形状:{ close() }
|
|
111
111
|
```
|
|
112
112
|
|
|
113
113
|
**四件必须知道的事**:
|
|
@@ -124,6 +124,8 @@ try { await save() } finally { done() }
|
|
|
124
124
|
`toast` 队列空了、`loading` 计数归零即收掉宿主 —— 反复重挂不留悬挂实例。
|
|
125
125
|
4. **`loading` 是引用计数语义**:并发的两次「显示」只关一次时遮罩仍在(先结束的那个不会把
|
|
126
126
|
别人的遮罩一起收掉)。推荐用返回的句柄在 `finally` 里关掉自己那一次。
|
|
127
|
+
两枚命令式句柄**形状统一**:`toast()` 与 `showLoading()` 都返回 **`{ close(): void }`**
|
|
128
|
+
(`ServiceHandle`)—— 只关自己那一次且**幂等**;「整体动作」另走 `clearToasts()` / `hideLoading()`。
|
|
127
129
|
|
|
128
130
|
## 主题层
|
|
129
131
|
|
|
@@ -141,6 +143,10 @@ try { await save() } finally { done() }
|
|
|
141
143
|
|
|
142
144
|
后一半必须在面里:它们靠「同一元素上两个选择器改写同一个令牌」生效,搬走就断链。
|
|
143
145
|
|
|
146
|
+
改组件外观一律**重设令牌**,不写高特异性选择器(令牌是唯一的覆盖点,作用域就是那棵子树)。
|
|
147
|
+
单件令牌的粒度到「整块区域的呼吸位」为止:`--ui-dialog-padding-x` / `--ui-table-padding-x` 这类
|
|
148
|
+
「改一枚即整块观感变化」的值才有令牌,**分件里的细小内距没有令牌**(如标签片、树行、行内代码)。
|
|
149
|
+
|
|
144
150
|
随包两套:
|
|
145
151
|
|
|
146
152
|
| 主题 | 入口 | 锚点 | 取值来源 |
|
|
@@ -8,36 +8,22 @@ export type BadgeStatus = 'success' | 'processing' | 'default' | 'warning' | 'er
|
|
|
8
8
|
/**
|
|
9
9
|
* 徽标 / 标签 —— 三种用法,按「传了什么」自动选形态:
|
|
10
10
|
*
|
|
11
|
-
* 1. **内容徽标**(默认插槽 = 徽标文字):`tone × shape × size × dot`
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* (此时默认插槽的含义从「徽标文字」变成「被包裹的内容」,与主流库一致)。
|
|
11
|
+
* 1. **内容徽标**(默认插槽 = 徽标文字):`tone × shape × size × dot` 的正交组合;
|
|
12
|
+
* 2. **数字角标**(传了 `count`):独立显示,或包裹子元素后钉在其右上角(此时默认插槽的含义从「徽标文字」变成
|
|
13
|
+
* 「被包裹的内容」,与主流库一致);
|
|
15
14
|
* 3. **状态点 + 文字**(传了 `status`):`● 已完成` 这种最轻的状态表达。
|
|
16
15
|
*
|
|
17
|
-
* 形态(`shape
|
|
18
|
-
*
|
|
19
|
-
* - `outline`:浅底 + 同色描边;`tone="default"` 时退化为白底 + 中性描边 + 正文色(状态胶囊)
|
|
20
|
-
* - `plain`:无底无框,靠圆点表达状态
|
|
16
|
+
* 形态(`shape`):`soft`(浅底 + 同色文字)、`outline`(浅底 + 同色描边;`tone="default"` 时退化为白底 +
|
|
17
|
+
* 中性描边 + 正文色)、`plain`(无底无框,靠圆点表达状态)。
|
|
21
18
|
*
|
|
22
|
-
* **本件是「只读标记」的唯一样式源**:`Tag`(可关闭 /
|
|
23
|
-
*
|
|
19
|
+
* **本件是「只读标记」的唯一样式源**:`Tag`(可关闭 / 可新增)只是在本件之上加交互位,几何与色彩一行都不重写
|
|
20
|
+
* —— 改本件的档位,两件一起走(见 `components/tag/index.tsx`)。
|
|
24
21
|
*
|
|
25
22
|
* **属性落点**:`class` / `style` 有专口(并入档位类、随档位内联),**其余 attrs 一律透传到根元素**
|
|
26
|
-
* (`id` / `aria-*` / `data-*` / `title` / 原生事件)—— 停在组件上等于丢掉(`Tag`
|
|
27
|
-
*
|
|
23
|
+
* (`id` / `aria-*` / `data-*` / `title` / 原生事件)—— 停在组件上等于丢掉(`Tag` 的「新增」就靠这条把
|
|
24
|
+
* `onClick` 落到那颗按钮上),见 `forwardAttrs`。
|
|
28
25
|
*
|
|
29
|
-
*
|
|
30
|
-
* <Badge tone="success" shape="outline" size="md" dot="filled">运行中</Badge>
|
|
31
|
-
*
|
|
32
|
-
* @example 数字角标(包裹子元素时钉右上角)
|
|
33
|
-
* <Badge count={12}><Avatar letter="张" /></Badge>
|
|
34
|
-
* <Badge count={120} :overflow-count="99" /> // 渲染 99+
|
|
35
|
-
*
|
|
36
|
-
* @example 状态点
|
|
37
|
-
* <Badge status="processing" text="运行中" />
|
|
38
|
-
*
|
|
39
|
-
* @example 可点形态(复合件用;`Tag` 的「新增」即此形 + 本件自己的遮罩)
|
|
40
|
-
* <Badge as="button" tone="warning" onClick={() => add()}>新增</Badge>
|
|
26
|
+
* 用法见 `docs/demos/badge/`(每个维度一份可运行样例;文档页 `docs/components/badge.md`)。
|
|
41
27
|
*/
|
|
42
28
|
export declare const Badge: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
43
29
|
tone: {
|
|
@@ -84,17 +70,13 @@ export declare const Badge: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
84
70
|
default: undefined;
|
|
85
71
|
};
|
|
86
72
|
/**
|
|
87
|
-
* 根元素形态:`span`(缺省,纯展示)/ `button
|
|
88
|
-
*
|
|
89
|
-
* `
|
|
90
|
-
*
|
|
91
|
-
* `
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
* `font-family: inherit` 在 `badge.css` 的基块补(UA 会把按钮字形换成 Arial)。
|
|
95
|
-
*
|
|
96
|
-
* **只对「内容徽标」形态生效**:`count` / `status` 两种形态是装饰(角标、状态点 + 文字),
|
|
97
|
-
* 传了它们就忽略本 prop(那时走各自的分支,根仍是 `<span>`)。
|
|
73
|
+
* 根元素形态:`span`(缺省,纯展示)/ `button`(可点形态,给**复合件**用)。`Tag` 就是靠它拿到「可点」
|
|
74
|
+
* 的(徽标是只读标记的唯一样式源,`Tag` 只往上加交互位、不自己画框)。`as="button"` 渲染真实
|
|
75
|
+
* `<button type="button">`(`type` 不能省:缺省是 `submit`,放进表单会提交),并保留本件全部档位类与几何
|
|
76
|
+
* —— 按钮的外观缺三项由本件面自带(`border` / `background` / `padding`,见 `contract-reset.spec.ts`
|
|
77
|
+
* 第三组),`font-family: inherit` 在 `badge.css` 基块补(UA 会把按钮字形换成 Arial)。
|
|
78
|
+
* **只对「内容徽标」形态生效**:`count` / `status` 两种形态是装饰(角标、状态点 + 文字),传了它们就忽略
|
|
79
|
+
* 本 prop(那时走各自的分支,根仍是 `<span>`)。
|
|
98
80
|
*/
|
|
99
81
|
as: {
|
|
100
82
|
type: PropType<"span" | "button">;
|
|
@@ -145,17 +127,13 @@ export declare const Badge: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
145
127
|
default: undefined;
|
|
146
128
|
};
|
|
147
129
|
/**
|
|
148
|
-
* 根元素形态:`span`(缺省,纯展示)/ `button
|
|
149
|
-
*
|
|
150
|
-
* `
|
|
151
|
-
*
|
|
152
|
-
* `
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
* `font-family: inherit` 在 `badge.css` 的基块补(UA 会把按钮字形换成 Arial)。
|
|
156
|
-
*
|
|
157
|
-
* **只对「内容徽标」形态生效**:`count` / `status` 两种形态是装饰(角标、状态点 + 文字),
|
|
158
|
-
* 传了它们就忽略本 prop(那时走各自的分支,根仍是 `<span>`)。
|
|
130
|
+
* 根元素形态:`span`(缺省,纯展示)/ `button`(可点形态,给**复合件**用)。`Tag` 就是靠它拿到「可点」
|
|
131
|
+
* 的(徽标是只读标记的唯一样式源,`Tag` 只往上加交互位、不自己画框)。`as="button"` 渲染真实
|
|
132
|
+
* `<button type="button">`(`type` 不能省:缺省是 `submit`,放进表单会提交),并保留本件全部档位类与几何
|
|
133
|
+
* —— 按钮的外观缺三项由本件面自带(`border` / `background` / `padding`,见 `contract-reset.spec.ts`
|
|
134
|
+
* 第三组),`font-family: inherit` 在 `badge.css` 基块补(UA 会把按钮字形换成 Arial)。
|
|
135
|
+
* **只对「内容徽标」形态生效**:`count` / `status` 两种形态是装饰(角标、状态点 + 文字),传了它们就忽略
|
|
136
|
+
* 本 prop(那时走各自的分支,根仍是 `<span>`)。
|
|
159
137
|
*/
|
|
160
138
|
as: {
|
|
161
139
|
type: PropType<"span" | "button">;
|
|
@@ -54,17 +54,13 @@ const Badge = /* @__PURE__ */ defineComponent({
|
|
|
54
54
|
default: void 0
|
|
55
55
|
},
|
|
56
56
|
/**
|
|
57
|
-
* 根元素形态:`span`(缺省,纯展示)/ `button
|
|
58
|
-
*
|
|
59
|
-
* `
|
|
60
|
-
*
|
|
61
|
-
* `
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* `font-family: inherit` 在 `badge.css` 的基块补(UA 会把按钮字形换成 Arial)。
|
|
65
|
-
*
|
|
66
|
-
* **只对「内容徽标」形态生效**:`count` / `status` 两种形态是装饰(角标、状态点 + 文字),
|
|
67
|
-
* 传了它们就忽略本 prop(那时走各自的分支,根仍是 `<span>`)。
|
|
57
|
+
* 根元素形态:`span`(缺省,纯展示)/ `button`(可点形态,给**复合件**用)。`Tag` 就是靠它拿到「可点」
|
|
58
|
+
* 的(徽标是只读标记的唯一样式源,`Tag` 只往上加交互位、不自己画框)。`as="button"` 渲染真实
|
|
59
|
+
* `<button type="button">`(`type` 不能省:缺省是 `submit`,放进表单会提交),并保留本件全部档位类与几何
|
|
60
|
+
* —— 按钮的外观缺三项由本件面自带(`border` / `background` / `padding`,见 `contract-reset.spec.ts`
|
|
61
|
+
* 第三组),`font-family: inherit` 在 `badge.css` 基块补(UA 会把按钮字形换成 Arial)。
|
|
62
|
+
* **只对「内容徽标」形态生效**:`count` / `status` 两种形态是装饰(角标、状态点 + 文字),传了它们就忽略
|
|
63
|
+
* 本 prop(那时走各自的分支,根仍是 `<span>`)。
|
|
68
64
|
*/
|
|
69
65
|
as: {
|
|
70
66
|
type: String,
|
|
@@ -4,48 +4,28 @@ import type { ControlSize } from '../control-size';
|
|
|
4
4
|
/**
|
|
5
5
|
* 按钮型(六型 + 未选半区)。
|
|
6
6
|
*
|
|
7
|
-
* `danger` 保留在枚举里是**向后兼容**:它等价于 `variant="primary"` 叠加 `danger`
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* `danger` 保留在枚举里是**向后兼容**:它等价于 `variant="primary"` 叠加 `danger` 布尔 —— 语义上「危险」是色彩
|
|
8
|
+
* 角色(与主色正交),不是第六种结构形态,故新代码请用 `danger` 布尔修饰任意型(`variant="danger"` 只在旧调用点
|
|
9
|
+
* 继续有效)。
|
|
10
|
+
* `text` 与 `link` 都是无底色档,但**语义不同,别混**:`text` =「行内文本操作」(编辑 / 删除 / 更多 / 展开,无
|
|
11
|
+
* 下划线);`link` =「跳转语义」(带下划线,像超链接)。「行内可点文字」一律用它 → `text`。
|
|
10
12
|
*
|
|
11
|
-
* `
|
|
12
|
-
* `text` = 「行内文本操作」(编辑 / 删除 / 更多 / 展开,无下划线);
|
|
13
|
-
* `link` = 「跳转语义」(带下划线,像超链接)。
|
|
14
|
-
*「行内可点文字」一律用它 → `text`。
|
|
13
|
+
* 用法见 `docs/demos/button/`(每个维度一份可运行样例;文档页 `docs/components/button.md`)。
|
|
15
14
|
*/
|
|
16
15
|
export type ButtonVariant = 'primary' | 'secondary' | 'dashed' | 'danger' | 'text' | 'link' | 'icon' | 'off';
|
|
17
16
|
/** 外形档:`round` = 胶囊;`circle` = 正圆(配 `variant="icon"` 用) */
|
|
18
17
|
export type ButtonShape = 'default' | 'round' | 'circle';
|
|
19
18
|
/** 按钮(**自绘**;按钮族:六型 × 三档尺寸 × 外形 × 危险色 + 加载 / 图标 / 菜单形态 + 组容器)。
|
|
20
19
|
*
|
|
21
|
-
* 词表:`variant` = `primary` / `secondary` / `dashed` / `danger` / `text` / `link` / `icon
|
|
22
|
-
* `
|
|
23
|
-
* `
|
|
24
|
-
* `loading` 会置 `disabled` —— 真正吞掉点击的是原生 `disabled`,不只是光标;
|
|
20
|
+
* 词表:`variant` = `primary` / `secondary` / `dashed` / `danger` / `text` / `link` / `icon`;`size`:`sm` 24 /
|
|
21
|
+
* `md` 32(标准)/ `lg` 40 —— 三档**真实不同高**(与 `--ui-control-height-*` 同值);`shape` / `danger` /
|
|
22
|
+
* `block` 是正交修饰(可叠加任意型);`loading` 会置 `disabled`(真正吞掉点击的是原生 `disabled`,不只是光标);
|
|
25
23
|
* `menu` + `caret` 组合出菜单按钮(文本区 ‖ 分割线 ‖ 箭头区),面板交给操作层组合。
|
|
26
24
|
*
|
|
27
25
|
* 图标走 `@manohub/icon`(`icon` prop 传图标名,写错编译期即报错);菜单箭头由
|
|
28
26
|
* `styles/operations/popup.css` 负责转向,故箭头图标的类名是 `mh-button__caret mh-popup-caret` 两个。
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* 与拦截点击表达(`<a>` 没有原生禁用),这是有意的取舍。
|
|
32
|
-
*
|
|
33
|
-
* @example 六型
|
|
34
|
-
* <Button variant="primary" onClick={save}>保存</Button>
|
|
35
|
-
* <Button variant="secondary">取消</Button>
|
|
36
|
-
* <Button variant="text">编辑</Button>
|
|
37
|
-
* <Button variant="link">查看详情</Button>
|
|
38
|
-
*
|
|
39
|
-
* @example 修饰叠加
|
|
40
|
-
* <Button variant="primary" danger>删除</Button>
|
|
41
|
-
* <Button variant="secondary" danger>删除</Button>
|
|
42
|
-
* <Button variant="primary" block shape="round">提交</Button>
|
|
43
|
-
*
|
|
44
|
-
* @example 菜单按钮(面板用 popup 操作层组合)
|
|
45
|
-
* <Button variant="primary" menu caret popoverTarget="menu-1">更多</Button>
|
|
46
|
-
* <div id="menu-1" popover class="mh-popup mh-button__menu" data-side="bottom" data-align="start">
|
|
47
|
-
* <div class="mh-button__menu-item">导出</div>
|
|
48
|
-
* </div>
|
|
27
|
+
* `href` 存在时渲染成 `<a>`(链接语义 + 原生右键菜单);此时 `disabled` 只能靠 `aria-disabled` 与拦截点击表达
|
|
28
|
+
* (`<a>` 没有原生禁用),这是有意的取舍。
|
|
49
29
|
*/
|
|
50
30
|
export declare const Button: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
51
31
|
/** 按钮型(缺省 `secondary`,与规范「次要为默认」一致) */
|
|
@@ -12,44 +12,30 @@ export type CapsuleShape = 'pill' | 'square';
|
|
|
12
12
|
*
|
|
13
13
|
* ## 结构与键盘全靠原生
|
|
14
14
|
*
|
|
15
|
-
* 渲染的是「**平级相邻、开关在前**」的 `<input type="radio">` + `<label for
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* 渲染的是「**平级相邻、开关在前**」的 `<input type="radio">` + `<label for>`:样式层靠
|
|
16
|
+
* `input:checked + .mh-capsule__item` 选态,故**顺序不能调**(input 必须紧邻项之前);项上带 `for` / `id`
|
|
17
|
+
* 是为了整项可点(开关自身是 1px 隐身盒、`pointer-events: none`)。Tab 进组、← → 换项、空格选中、跳过禁用项
|
|
18
|
+
* —— 都是原生 radio 组的行为,本件不写键盘代码。
|
|
19
19
|
*
|
|
20
20
|
* ## 外形档(`shape`)
|
|
21
21
|
*
|
|
22
22
|
* - `pill`(缺省):整条轨道与选中项都是胶囊形(圆角取圆角满档令牌);
|
|
23
|
-
* - `square
|
|
24
|
-
*
|
|
23
|
+
* - `square`:整组变圆角矩形,**轨道与选中项同取复选框档圆角**(比控件档更方),与方角控件并排排版时用;只
|
|
24
|
+
* 覆盖圆角令牌,几何与颜色一律不变。
|
|
25
25
|
*
|
|
26
26
|
* ## 与面板组合(页签用法)
|
|
27
27
|
*
|
|
28
|
-
* 塞进 `Tabs` 的 `selector` 插槽即可:本件的 `onChange` 把选中值递给 `Tabs` 的 `select
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* 状态三源等价:原生 `input:checked` / 组件下发 `[data-state='active'|'inactive']` / 静态档 `.is-selected`。
|
|
28
|
+
* 塞进 `Tabs` 的 `selector` 插槽即可:本件的 `onChange` 把选中值递给 `Tabs` 的 `select`,面板显隐由 `Tabs`
|
|
29
|
+
* 按受控值下发 `hidden`。本件不认识 tabs、tabs 也不认识本件(两层零互指),故**不必**为了组合而给它 `name`
|
|
30
|
+
* (组名不传即按实例自动生成)。
|
|
31
|
+
* 状态三源等价:原生 `input:checked` / `[data-state='active'|'inactive']` / 静态档 `.is-selected`。
|
|
33
32
|
*
|
|
34
33
|
* ## 必须有值
|
|
35
34
|
*
|
|
36
|
-
* 单选语义就是必选其一:受控传 `modelValue
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* @example 选项表
|
|
40
|
-
* <Capsule :options="[{label:'全部',value:'all'}]" v-model="v" />
|
|
41
|
-
*
|
|
42
|
-
* @example 方形档(与方角控件并排时用)
|
|
43
|
-
* <Capsule shape="square" :options="[{label:'全部',value:'all'}]" v-model="v" />
|
|
35
|
+
* 单选语义就是必选其一:受控传 `modelValue`、非受控由 `defaultValue` 起,**两者都没给时缺省选中第一个可选项**
|
|
36
|
+
* (跳过禁用项;没有可选项才是空值)—— 与 `Radio.Group` / `Radio.Card` / `Tabs` 同一条口径。
|
|
44
37
|
*
|
|
45
|
-
*
|
|
46
|
-
* <Tabs v-model:value="v">
|
|
47
|
-
* {{
|
|
48
|
-
* selector: ({ value, options, select }) =>
|
|
49
|
-
* <Capsule :options="options" modelValue={value} onChange={select} />,
|
|
50
|
-
* default: () => [<TabPanel name="全部">…</TabPanel>, <TabPanel name="进行中">…</TabPanel>],
|
|
51
|
-
* }}
|
|
52
|
-
* </Tabs>
|
|
38
|
+
* 用法见 `docs/demos/capsule/`(每个维度一份可运行样例;文档页 `docs/components/capsule.md`)。
|
|
53
39
|
*/
|
|
54
40
|
export declare const Capsule: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
55
41
|
/** 选项表(也可用默认插槽自排) */
|
|
@@ -23,68 +23,40 @@ export type CardHeaderIcon = string | (() => VNodeChild);
|
|
|
23
23
|
*
|
|
24
24
|
* ## Header 区域(四件;`Card.Header` 是完整入口,`Card` 上的同名 props 是它的简写)
|
|
25
25
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* └───────────────────────────────────────────────┘
|
|
31
|
-
* ```
|
|
32
|
-
*
|
|
33
|
-
* - **左侧区域**(`__header-main`)= 图标(`icon`)+ 文字块(`title` / `subtitle` 上下两行)
|
|
34
|
-
* + `Card.Header` 默认插槽的自排内容;
|
|
35
|
-
* - **右侧** = `extra` 插槽(状态胶囊 / 行内按钮 / 统计);
|
|
36
|
-
* - 四个位**一个都没给**时退化为**纯自排容器**:默认插槽内容原样进头容器(DOM 与没有这些位时一致)。
|
|
37
|
-
*
|
|
38
|
-
* 四个位两处入口完全等价:
|
|
39
|
-
* `<Card title="…" subtitle="…" icon="…">` ≡ `<Card.Header title="…" subtitle="…" icon="…" />`。
|
|
40
|
-
*
|
|
41
|
-
* 几何:图标 36×36(与 `ListView.CardItem` 同一档)、圆角取控件档 6;标题 16/600 单行省略;
|
|
42
|
-
* 副标题 12 + 弱字色,同样单行省略。
|
|
26
|
+
* **左侧区域**(`__header-main`)= 图标(`icon`,36×36、圆角取控件档 6)+ 文字块(`title` 16/600 单行省略 /
|
|
27
|
+
* `subtitle` 12 + 弱字色,同样单行省略)+ `Card.Header` 默认插槽的自排内容;**右侧** = `extra` 插槽(状态胶囊 /
|
|
28
|
+
* 行内按钮 / 统计);四个位**一个都没给**时退化为**纯自排容器**(默认插槽内容原样进头容器)。
|
|
29
|
+
* 两处入口完全等价:`<Card title=… subtitle=… icon=…>` ≡ `<Card.Header title=… subtitle=… icon=… />`。
|
|
43
30
|
*
|
|
44
31
|
* ## 内距:**全部由段承载,根件不出内距**
|
|
45
32
|
*
|
|
46
|
-
* 根件只出面(底 / 描边 /
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* 所以 header + body、body + footer 相邻时都不会叠成两份(20 + 20),卡片首末两端又各有一份完整内距。
|
|
52
|
-
*
|
|
33
|
+
* 根件只出面(底 / 描边 / 圆角),既不出内距也不出段间距;内距一律吃在**段**上(分件与内建头 / 操作行默认各吃
|
|
34
|
+
* `--mh-card-padding`)。
|
|
35
|
+
* **不给 `padding`**(面上的缺省口径):纵向是「**每段只吃上边**」,卡片的**下沿由最后一段补**(面上
|
|
36
|
+
* `:last-child` 那条)—— 所以 header + body、body + footer 相邻时都不会叠成两份(20 + 20),首末两端又各有一份
|
|
37
|
+
* 完整内距。
|
|
53
38
|
* **给了 `padding`**:这一段**整段由消费方定价**(`y` = 上下、`x` = 左右,两维都给时下 `padding: y x` 简写,
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* 直接写内容(`<Card>正文</Card>`)时,**裸子节点会被自动包进一层 `Card.Body`**(与 `Panel` 的简写路径同款),
|
|
59
|
-
* 所以它与显式写 `<Card><Card.Body>正文</Card.Body></Card>` 得到同一份内距。
|
|
39
|
+
* 只给一维就只落那一维);行内样式盖过 `:last-child`,故**下边也按 `y` 走**(要保留兜底就别传)。要整卡统一就
|
|
40
|
+
* 改令牌 `--mh-card-padding`。
|
|
41
|
+
* 直接写内容(`<Card>正文</Card>`)时**裸子节点会被自动包进一层 `Card.Body`**(与 `Panel` 的简写路径同款),故
|
|
42
|
+
* 与显式写 `<Card.Body>` 得到同一份内距。
|
|
60
43
|
*
|
|
61
44
|
* ## 三件(`Card.Header` / `Body` / `Footer`)
|
|
62
45
|
*
|
|
63
|
-
* 分件只有内距这一个维度:**不给就走 CSS 默认值**(不额外产生行内 `style
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* ## 底部操作行(`actions` 插槽)
|
|
67
|
-
*
|
|
68
|
-
* `margin-top: auto` 贴卡片底部,卡片被拉伸(网格等高)时才有差别;内距与段同口径。
|
|
46
|
+
* 分件只有内距这一个维度:**不给就走 CSS 默认值**(不额外产生行内 `style`);`padding` 语义同上。
|
|
47
|
+
* **底部操作行**(`actions` 插槽):`margin-top: auto` 贴卡片底部(卡片被拉伸时才有差别),内距与段同口径。
|
|
69
48
|
*
|
|
70
49
|
* ## 为什么不是 `<button>`
|
|
71
50
|
*
|
|
72
51
|
* 卡片里常驻操作按钮(编辑 / 删除等),整卡换成按钮会产生嵌套可交互元素;键盘可达性由卡内控件承担。
|
|
73
52
|
* 「整卡可点」由 `interactive`(光标 + 悬浮反馈)+ `onClick` 表达,与原型一致。
|
|
74
53
|
*
|
|
75
|
-
*
|
|
76
|
-
* <Card>
|
|
77
|
-
* <Card.Header icon={skill.icon} title={skill.name} subtitle={`V${skill.version}`}>
|
|
78
|
-
* <template #extra><Badge shape="soft" tone="success">已发布</Badge></template>
|
|
79
|
-
* </Card.Header>
|
|
80
|
-
* <Card.Body>{skill.description}</Card.Body>
|
|
81
|
-
* <template #actions><Button size="sm">编辑</Button></template>
|
|
82
|
-
* </Card>
|
|
54
|
+
* 用法见 `docs/demos/card/`(每个维度一份可运行样例;文档页 `docs/components/card.md`)。
|
|
83
55
|
*/
|
|
84
56
|
export interface CardProps {
|
|
85
57
|
/**
|
|
86
|
-
* 描边档:`outline`(默认)弱描边 `--ui-base-300`;`plain`
|
|
87
|
-
*
|
|
58
|
+
* 描边档:`outline`(默认)弱描边 `--ui-base-300`;`plain` 无描边。底 / 圆角 / 阴影不随档位变化 —— 卡片外观在
|
|
59
|
+
* 本件只有一处定义。
|
|
88
60
|
*/
|
|
89
61
|
variant?: CardVariant;
|
|
90
62
|
/** 悬浮反馈:hover 描边转主色 + 主色 12% 阴影,并显示 `cursor: pointer` */
|
|
@@ -103,10 +75,8 @@ export interface CardProps {
|
|
|
103
75
|
onClick?: (e: MouseEvent) => void;
|
|
104
76
|
}
|
|
105
77
|
/**
|
|
106
|
-
* 卡片头部:**四件**(图标 / 标题 / 副标题 + 右端 `extra
|
|
107
|
-
*
|
|
108
|
-
* 四个位都可由属性给;`icon` / `title` / `subtitle` / `extra` 也都可走同名插槽(**插槽优先**)。
|
|
109
|
-
* 一个位都不给时退化为自排容器:默认插槽内容原样进头容器(`Card.Header` 也仍然是「自己排头」的逃生口)。
|
|
78
|
+
* 卡片头部:**四件**(图标 / 标题 / 副标题 + 右端 `extra`)—— 四个位都可由属性给,也都可走同名插槽(**插槽
|
|
79
|
+
* 优先**);一个位都不给时退化为自排容器(`Card.Header` 也仍然是「自己排头」的逃生口)。
|
|
110
80
|
*/
|
|
111
81
|
export declare const CardHeader: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
112
82
|
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
@@ -198,10 +168,7 @@ export declare const CardFooter: import("vue").DefineComponent<import("vue").Ext
|
|
|
198
168
|
}, SlotsType<{
|
|
199
169
|
default?: () => VNodeChild;
|
|
200
170
|
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
201
|
-
/**
|
|
202
|
-
* 复合件入口:`Card` + `Card.Header` / `Card.Body` / `Card.Footer`
|
|
203
|
-
* (与 `Panel` 同款 `Object.assign` 复合写法;成员不平级导出)
|
|
204
|
-
*/
|
|
171
|
+
/** 复合件入口:`Card` + `Card.Header` / `Card.Body` / `Card.Footer`(与 `Panel` 同款 `Object.assign` 复合写法;成员不平级导出) */
|
|
205
172
|
export declare const Card: {
|
|
206
173
|
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<import("vue").ExtractPropTypes<{
|
|
207
174
|
variant: {
|
|
@@ -23,15 +23,7 @@ export interface CheckboxOption {
|
|
|
23
23
|
* 要再引入中性面填充请做成 `tone` 的第二档,**不要**把默认改回深色;
|
|
24
24
|
* - 半选(`indeterminate`)是**旁路态**:点击后由消费方自行决定落到 `checked` 还是 `unchecked`。
|
|
25
25
|
*
|
|
26
|
-
*
|
|
27
|
-
* <Checkbox modelValue={row.enabled} onChange={(v) => (row.enabled = v)}>是否生效</Checkbox>
|
|
28
|
-
*
|
|
29
|
-
* @example 全选 / 半选
|
|
30
|
-
* <Checkbox indeterminate={someChecked && !allChecked}
|
|
31
|
-
* modelValue={allChecked} onChange={(v) => toggleAll(v)}>全选</Checkbox>
|
|
32
|
-
*
|
|
33
|
-
* @example 多选组(值就是选中项的数组)
|
|
34
|
-
* <Checkbox.Group v-model={picked} options={[{ label: '读', value: 'r' }]} />
|
|
26
|
+
* 用法见 `docs/demos/checkbox/`(每个维度一份可运行样例;文档页 `docs/components/checkbox.md`)。
|
|
35
27
|
*/
|
|
36
28
|
export declare const Checkbox: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
37
29
|
/** 受控勾选值 */
|
|
@@ -21,36 +21,23 @@ export interface CodeViewProps {
|
|
|
21
21
|
/**
|
|
22
22
|
* 代码视图(**只读展示件**):行内 chip / 代码块 / 语言角标 / 复制位。
|
|
23
23
|
*
|
|
24
|
-
* 三种形态:`inline`(行内 chip,如版本号、规则 ID)、`inline + plain
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* 通常不直接用本件:`CodeBlock.View` 是这个件在族里的位置,单独用也完全合法
|
|
29
|
-
* (要「只读看 + 就地改」用组合件 `CodeBlock`,要更强的编辑控制用 `CodeBlock.Editor`)。
|
|
24
|
+
* 三种形态:`inline`(行内 chip,如版本号、规则 ID)、`inline + plain`(中性档)、缺省(代码块 + 右上角 hover /
|
|
25
|
+
* 聚焦显形的方形图标复制按钮 + 可选语言角标)。代码块**缺省不折行**(横向滚动,缩进与列对齐不被破坏),`wrap` 才软换行。
|
|
26
|
+
* 通常不直接用本件,但单独用也完全合法(要「只读看 + 就地改」用组合件 `CodeBlock`)。
|
|
30
27
|
*
|
|
31
28
|
* ## 高亮由消费方声明(本件不做语法高亮)
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* 需要高亮时走**默认插槽**传入已高亮过的节点(VNode / 已转义好的 HTML 片段皆可),
|
|
35
|
-
* 此时 `code` 仍应给**纯文本** —— 它是复制进剪贴板的内容(插槽内容是渲染结果,不能拿去复制)。
|
|
29
|
+
* 本件不认识任何语言:`language` 只画右上角的**角标**、**不做**分词着色。需要高亮时走**默认插槽**传入已高亮过的
|
|
30
|
+
* 节点(VNode / 已转义好的 HTML 片段皆可),此时 `code` 仍应给**纯文本** —— 它是复制进剪贴板的内容。
|
|
36
31
|
*
|
|
37
32
|
* ## 复制按钮的面归按钮族(`.mh-button--icon`)
|
|
38
|
-
*
|
|
39
|
-
* 本件只补定位与显隐(见 `styles/components/code-block.css`);按钮挂在**族根**上
|
|
40
|
-
* 而**不是代码面里** —— 代码面是 `overflow-x: auto` 的滚动容器,放进去会被裁掉。
|
|
33
|
+
* 本件只补定位与显隐;按钮挂在**族根**上而**不是代码面里** —— 代码面是 `overflow-x: auto` 的滚动容器,放进去会被裁掉。
|
|
41
34
|
*
|
|
42
35
|
* ## 复制动作与降级
|
|
36
|
+
* 走 `navigator.clipboard.writeText`(**唯一需要 JS 的部分**,按 copied 状态二选一图标)。环境没有该 API(旧浏览器 /
|
|
37
|
+
* 非安全上下文)或写入被拒时:不谎报成功,`onCopy(false)` 交回结果并 `console.warn` 一次 —— 消费方据此提示「请手动
|
|
38
|
+
* 复制」(本件不自己弹提示,避免与页面的提示口径两套)。
|
|
43
39
|
*
|
|
44
|
-
*
|
|
45
|
-
* 环境没有该 API(旧浏览器、非安全上下文)或写入被拒时:不谎报成功,`onCopy(false)` 交回结果
|
|
46
|
-
* 并 `console.warn` 一次 —— 消费方据此提示「请手动复制」(本件不自己弹提示,避免与页面的提示口径两套)。
|
|
47
|
-
*
|
|
48
|
-
* @example 行内
|
|
49
|
-
* <CodeBlock.View inline>v1.2.0</CodeBlock.View>
|
|
50
|
-
* <CodeBlock.View inline plain>RULE-1024</CodeBlock.View>
|
|
51
|
-
*
|
|
52
|
-
* @example 代码块 + 语言角标 + 复制
|
|
53
|
-
* <CodeBlock.View :code="sql" language="sql" copyable @copy="(ok) => ok || showManualTip()" />
|
|
40
|
+
* 用法见 `docs/demos/code-block/`(每个维度一份可运行样例;文档页 `docs/components/code-block.md`)。
|
|
54
41
|
*/
|
|
55
42
|
export declare const CodeView: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
56
43
|
code: {
|
|
@@ -145,10 +132,7 @@ export interface CodeEditorProps {
|
|
|
145
132
|
placeholder?: string;
|
|
146
133
|
/** 固定可见行数(`autoSize: false` 时生效;缺省 4) */
|
|
147
134
|
rows?: number;
|
|
148
|
-
/**
|
|
149
|
-
* 按内容行数自适应高度(**本件缺省开启**,与 `Textarea` 的缺省相反:
|
|
150
|
-
* 代码区按内容长高是常态,固定行数才是特例)。
|
|
151
|
-
*/
|
|
135
|
+
/** 按内容行数自适应高度(**本件缺省开启**,与 `Textarea` 的缺省相反:代码区按内容长高是常态,固定行数才是特例)。 */
|
|
152
136
|
autoSize?: boolean | CodeEditorAutoSize;
|
|
153
137
|
/** 最大高度(数字按 px):超出后**框内滚动** */
|
|
154
138
|
maxHeight?: string | number;
|
|
@@ -164,31 +148,22 @@ export interface CodeEditorProps {
|
|
|
164
148
|
/**
|
|
165
149
|
* 可编辑代码区:等宽多行 + 按行自适应 + 可限高内滚 + 只读 / 禁用态。
|
|
166
150
|
*
|
|
167
|
-
* 与 `CodeBlock.View` 是同一族的两半:**看**用 `View
|
|
168
|
-
*
|
|
151
|
+
* 与 `CodeBlock.View` 是同一族的两半:**看**用 `View`(可按只读块观感渲染已高亮节点),**改**用本件;两件共用族根
|
|
152
|
+
* 与面(同底 / 同圆角 / 同等宽字),互切时块体不跳。
|
|
169
153
|
*
|
|
170
154
|
* ## 与 `Textarea` 的分工(不要重复造)
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
* 折行行为按代码区的口径来。两者共用同一套受控词表(`modelValue` / `onChange` / `readonly` / `disabled`)。
|
|
155
|
+
* 表单里的普通多行文本用 `Input.Textarea`;本件服务**代码**:等宽字、去掉拼写检查与自动大写、折行按代码区口径来。
|
|
156
|
+
* 两者共用同一套受控词表(`modelValue` / `onChange` / `readonly` / `disabled`)。
|
|
174
157
|
*
|
|
175
158
|
* ## 不做的事(有意)
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
* - 不做行号、不做 Tab 缩进接管(会与浏览器的焦点导航与粘贴行为打架)。
|
|
159
|
+
* **不做语法高亮**(编辑态就是原生 `textarea`,着色一律交给消费方;只读态用 `View` 的插槽接高亮);**不内建动作
|
|
160
|
+
* 按钮**(编辑 / 保存 / 取消 / 复制由消费方在外部摆放);不做行号、不做 Tab 缩进接管(会与浏览器的焦点导航与粘贴
|
|
161
|
+
* 行为打架)。
|
|
180
162
|
*
|
|
181
163
|
* ## 自适应高度怎么算
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
* 代价是**超长单行不会自己长高**(此时由 `maxHeight` + 框内滚动兜底,或由外层容器限宽)。
|
|
186
|
-
*
|
|
187
|
-
* @example 受控
|
|
188
|
-
* <CodeBlock.Editor v-model="sql" language="sql" placeholder="写一条 SQL" />
|
|
189
|
-
*
|
|
190
|
-
* @example 固定高度 + 限高内滚
|
|
191
|
-
* <CodeBlock.Editor v-model="config" :auto-size="false" :rows="6" :max-height="240" language="json" />
|
|
164
|
+
* 按 `\n` **计数行数**在 `minRows` / `maxRows` 间截断(同 `Input.Textarea`):不测 `scrollHeight` —— 那要在每次
|
|
165
|
+
* 输入后读布局(强制同步回流),且软换行 / 隐藏容器 / SSR 下都拿不到可靠值。代价是**超长单行不会自己长高**(由
|
|
166
|
+
* `maxHeight` + 框内滚动兜底,或由外层容器限宽)。
|
|
192
167
|
*/
|
|
193
168
|
export declare const CodeEditor: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
194
169
|
modelValue: {
|
|
@@ -291,19 +266,17 @@ export declare const CodeEditor: import("vue").DefineComponent<import("vue").Ext
|
|
|
291
266
|
/** `CodeBlock` 的 props:**两形态的并集** + 切换开关(按 `editable` 分两组,见各条说明) */
|
|
292
267
|
export interface CodeBlockProps extends CodeViewProps, CodeEditorProps {
|
|
293
268
|
/**
|
|
294
|
-
* 编辑档:`true` 渲染 `Editor`(可改),缺省 `false` 渲染 `View
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
* `
|
|
298
|
-
* `readonly` / `disabled` / `onChange`;`language` / `maxHeight` 两档共用。
|
|
269
|
+
* 编辑档:`true` 渲染 `Editor`(可改),缺省 `false` 渲染 `View`(只读展示)。两形态的 props 都挂在本件上,
|
|
270
|
+
* 但**按档生效**:只读档读 `code` / `inline` / `plain` / `copyable` / `wrap` / `onCopy`,编辑档读
|
|
271
|
+
* `modelValue` / `defaultValue` / `placeholder` / `rows` / `autoSize` / `readonly` / `disabled` / `onChange`;
|
|
272
|
+
* `language` / `maxHeight` 两档共用。
|
|
299
273
|
*/
|
|
300
274
|
editable?: boolean;
|
|
301
275
|
}
|
|
302
276
|
/**
|
|
303
|
-
* 族入口:`CodeBlock` 本体 + 两个成员件(`View` 只读 / `Editor`
|
|
304
|
-
*
|
|
305
|
-
* `
|
|
306
|
-
* 类型上也带成员(`typeof CodeBlock` 是交叉类型),故 TSX 与模板里 `CodeBlock.View` 都有提示。
|
|
277
|
+
* 族入口:`CodeBlock` 本体 + 两个成员件(`View` 只读 / `Editor` 可编辑)。`Object.assign` 是**原地**挂载
|
|
278
|
+
* (与 `Input.Textarea` 同一手法):运行时的 `CodeBlock` 就是它,类型上也带成员,故 TSX 与模板里
|
|
279
|
+
* `CodeBlock.View` 都有提示。
|
|
307
280
|
*/
|
|
308
281
|
export declare const CodeBlock: {
|
|
309
282
|
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<import("vue").ExtractPropTypes<{
|
|
@@ -5,6 +5,8 @@ export interface CollapseProps {
|
|
|
5
5
|
/**
|
|
6
6
|
* 受控展开态。不传即**非受控**(由 `defaultOpen` 起,之后自己管)。
|
|
7
7
|
* 受控时父级不同步回写,本件会把 DOM 拨回 `open` 的值(见下方「受控」注释)。
|
|
8
|
+
*
|
|
9
|
+
* 用法见 `docs/demos/collapse/`(每个维度一份可运行样例;文档页 `docs/components/collapse.md`)。
|
|
8
10
|
*/
|
|
9
11
|
open?: boolean;
|
|
10
12
|
/** 非受控初始展开态,缺省收起(与原生 `<details>` 一致:不写 open 即收起) */
|
|
@@ -7,14 +7,14 @@ export type DialogTone = 'info' | 'success' | 'warning' | 'error';
|
|
|
7
7
|
*
|
|
8
8
|
* ## JS 只做「原生做不到的那两件」
|
|
9
9
|
*
|
|
10
|
-
* 模态语义、Esc、焦点陷阱、`::backdrop` 遮罩、top layer
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* 模态语义、Esc、焦点陷阱、`::backdrop` 遮罩、top layer 渲染都是浏览器给 `<dialog>` 的原生能力,本件
|
|
11
|
+
* **不自建浮层**(不做定位计算、不做 focus trap、不写遮罩层),只做:① 把**受控的 `open` 同步到原生 API**
|
|
12
|
+
* (`open` 变真 → `showModal()`,变假 → `close()`);② 内建底栏的「确定」在 `onOk` 返回 Promise 时自动进
|
|
13
|
+
* 加载态并吞重复点击。
|
|
14
14
|
*
|
|
15
15
|
* ## 关闭是受控的
|
|
16
16
|
*
|
|
17
|
-
* 关闭位、Esc(原生 `cancel`
|
|
17
|
+
* 关闭位、Esc(原生 `cancel` 事件)与点遮罩都只回调(`update:open(false)` + `onClose()` / `onCancel()`);
|
|
18
18
|
* 可见性归消费方 —— 避免「组件自己消失、业务状态还以为开着」两套口径。
|
|
19
19
|
*
|
|
20
20
|
* ## 底栏三态(**由消费方按需选一**,不要混着用)
|
|
@@ -25,16 +25,7 @@ export type DialogTone = 'info' | 'success' | 'warning' | 'error';
|
|
|
25
25
|
* | 给 `okText` / `onOk` | 内建底栏:`[取消] [确定]`,按钮就是本包 `Button` |
|
|
26
26
|
* | `:show-footer="false"` | 不渲染底栏(纯提示 / 只有关闭位) |
|
|
27
27
|
*
|
|
28
|
-
*
|
|
29
|
-
* <Dialog v-model:open="visible" title="删除确认" ok-text="删除" :on-ok="remove" :on-cancel="() => (visible = false)">
|
|
30
|
-
* 删除后不可恢复,确认继续?
|
|
31
|
-
* </Dialog>
|
|
32
|
-
*
|
|
33
|
-
* @example 自绘底栏
|
|
34
|
-
* <Dialog v-model:open="visible" title="详情">
|
|
35
|
-
* 正文
|
|
36
|
-
* <template #footer><Button variant="text" @click="visible = false">关闭</Button></template>
|
|
37
|
-
* </Dialog>
|
|
28
|
+
* 用法见 `docs/demos/dialog/`(每个维度一份可运行样例;文档页 `docs/components/dialog.md`)。
|
|
38
29
|
*/
|
|
39
30
|
export declare const Dialog: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
40
31
|
/** 受控开合 */
|
|
@@ -16,18 +16,7 @@ export interface DividerProps {
|
|
|
16
16
|
* `vertical` 档的高度走 `align-self: stretch`:父级是 flex 行时自动占满整行高;
|
|
17
17
|
* 父级没有确定高度时退到 `1em`(不会塌成 0)。
|
|
18
18
|
*
|
|
19
|
-
*
|
|
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>
|
|
19
|
+
* 用法见 `docs/demos/divider/`(每个维度一份可运行样例;文档页 `docs/components/divider.md`)。
|
|
31
20
|
*/
|
|
32
21
|
export declare const Divider: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
33
22
|
direction: {
|