@manohub/ui 1.0.5 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +8 -2
  2. package/dist/components/badge/index.d.ts +24 -46
  3. package/dist/components/badge/index.js +7 -11
  4. package/dist/components/button/index.d.ts +11 -31
  5. package/dist/components/capsule/index.d.ts +13 -27
  6. package/dist/components/card/index.d.ts +21 -54
  7. package/dist/components/checkbox/index.d.ts +1 -9
  8. package/dist/components/code-block/index.d.ts +35 -62
  9. package/dist/components/collapse/index.d.ts +2 -0
  10. package/dist/components/dialog/index.d.ts +6 -15
  11. package/dist/components/divider/index.d.ts +1 -12
  12. package/dist/components/drawer/index.d.ts +7 -15
  13. package/dist/components/filter/index.d.ts +27 -69
  14. package/dist/components/filter/index.js +3 -8
  15. package/dist/components/form/index.d.ts +52 -132
  16. package/dist/components/form/index.js +5 -12
  17. package/dist/components/input/bordered.d.ts +4 -6
  18. package/dist/components/input/index.d.ts +47 -66
  19. package/dist/components/input/index.js +7 -8
  20. package/dist/components/input/number-input.d.ts +11 -23
  21. package/dist/components/layout/index.d.ts +21 -28
  22. package/dist/components/layout/index.js +5 -8
  23. package/dist/components/list-view/index.d.ts +10 -43
  24. package/dist/components/loading/index.d.ts +8 -19
  25. package/dist/components/nav/index.d.ts +14 -35
  26. package/dist/components/nav/index.js +1 -3
  27. package/dist/components/notice/index.d.ts +13 -33
  28. package/dist/components/notice/index.js +3 -5
  29. package/dist/components/notification/index.d.ts +0 -9
  30. package/dist/components/page/index.d.ts +8 -43
  31. package/dist/components/page/split-resize.d.ts +9 -18
  32. package/dist/components/pagination/index.d.ts +1 -5
  33. package/dist/components/panel/index.d.ts +27 -62
  34. package/dist/components/panel/index.js +1 -4
  35. package/dist/components/part-padding.d.ts +5 -13
  36. package/dist/components/query-state/index.d.ts +8 -32
  37. package/dist/components/radio/index.d.ts +2 -3
  38. package/dist/components/search/index.d.ts +12 -32
  39. package/dist/components/select/index.d.ts +7 -14
  40. package/dist/components/select/index.js +3 -3
  41. package/dist/components/select/select-panel.d.ts +23 -35
  42. package/dist/components/select/select-panel.js +5 -10
  43. package/dist/components/select/select-shared.d.ts +18 -44
  44. package/dist/components/select/select-tree.d.ts +11 -16
  45. package/dist/components/select/select-trigger.d.ts +6 -16
  46. package/dist/components/select/select-trigger.js +5 -11
  47. package/dist/components/skeleton/index.d.ts +1 -5
  48. package/dist/components/steps/index.d.ts +55 -111
  49. package/dist/components/steps/index.js +8 -16
  50. package/dist/components/switch/index.d.ts +17 -33
  51. package/dist/components/switch/index.js +2 -4
  52. package/dist/components/tabbar/index.d.ts +1 -6
  53. package/dist/components/table/index.d.ts +43 -105
  54. package/dist/components/table/index.js +166 -125
  55. package/dist/components/tabs/index.d.ts +22 -44
  56. package/dist/components/text/index.d.ts +10 -21
  57. package/dist/components/toast/index.d.ts +4 -13
  58. package/dist/components/tooltip/index.d.ts +1 -12
  59. package/dist/components/tree/index.d.ts +35 -77
  60. package/dist/components/tree/index.js +17 -33
  61. package/dist/components/upload/index.d.ts +1 -4
  62. package/dist/index.d.ts +3 -3
  63. package/dist/services/base.d.ts +32 -8
  64. package/dist/services/dialog.d.ts +10 -22
  65. package/dist/services/index.d.ts +2 -2
  66. package/dist/services/loading.d.ts +9 -12
  67. package/dist/services/loading.js +8 -1
  68. package/dist/services/toast.d.ts +4 -14
  69. package/dist/styles/components/button.css +2 -0
  70. package/dist/styles/components/capsule.css +2 -0
  71. package/dist/styles/components/checkbox.css +2 -0
  72. package/dist/styles/components/form.css +23 -28
  73. package/dist/styles/components/input.css +53 -71
  74. package/dist/styles/components/notice.css +2 -0
  75. package/dist/styles/components/page.css +25 -31
  76. package/dist/styles/components/pagination.css +4 -0
  77. package/dist/styles/components/radio.css +2 -0
  78. package/dist/styles/components/search.css +8 -10
  79. package/dist/styles/components/switch.css +2 -0
  80. package/dist/styles/components/tabbar.css +2 -0
  81. package/dist/styles/components/table.css +72 -58
  82. package/dist/styles/components/table.tokens.css +1 -1
  83. package/dist/styles/components/upload.css +2 -0
  84. 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 done = showLoading('保存中…') // 引用计数:并发调用要各关各的
110
- try { await save() } finally { done() }
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
- * 吃掉的分身:前 4 个应用各自手搓徽标(状态胶囊、准入状态、类型标签、结论徽标)。
13
- * 2. **数字角标**(传了 `count`):独立显示,或包裹子元素后钉在其右上角
14
- * (此时默认插槽的含义从「徽标文字」变成「被包裹的内容」,与主流库一致)。
11
+ * 1. **内容徽标**(默认插槽 = 徽标文字):`tone × shape × size × dot` 的正交组合;
12
+ * 2. **数字角标**(传了 `count`):独立显示,或包裹子元素后钉在其右上角(此时默认插槽的含义从「徽标文字」变成
13
+ * 「被包裹的内容」,与主流库一致);
15
14
  * 3. **状态点 + 文字**(传了 `status`):`● 已完成` 这种最轻的状态表达。
16
15
  *
17
- * 形态(`shape`):
18
- * - `soft`:浅底 + 同色文字(标签)
19
- * - `outline`:浅底 + 同色描边;`tone="default"` 时退化为白底 + 中性描边 + 正文色(状态胶囊)
20
- * - `plain`:无底无框,靠圆点表达状态
16
+ * 形态(`shape`):`soft`(浅底 + 同色文字)、`outline`(浅底 + 同色描边;`tone="default"` 时退化为白底 +
17
+ * 中性描边 + 正文色)、`plain`(无底无框,靠圆点表达状态)。
21
18
  *
22
- * **本件是「只读标记」的唯一样式源**:`Tag`(可关闭 / 可新增)只是在本件之上加交互位,
23
- * 几何与色彩一行都不重写 —— 改本件的档位,两件一起走(见 `components/tag/index.tsx`)。
19
+ * **本件是「只读标记」的唯一样式源**:`Tag`(可关闭 / 可新增)只是在本件之上加交互位,几何与色彩一行都不重写
20
+ * —— 改本件的档位,两件一起走(见 `components/tag/index.tsx`)。
24
21
  *
25
22
  * **属性落点**:`class` / `style` 有专口(并入档位类、随档位内联),**其余 attrs 一律透传到根元素**
26
- * (`id` / `aria-*` / `data-*` / `title` / 原生事件)—— 停在组件上等于丢掉(`Tag` 的「新增」
27
- * 就靠这条把 `onClick` 落到那颗按钮上),见 `forwardAttrs`。
23
+ * (`id` / `aria-*` / `data-*` / `title` / 原生事件)—— 停在组件上等于丢掉(`Tag` 的「新增」就靠这条把
24
+ * `onClick` 落到那颗按钮上),见 `forwardAttrs`。
28
25
  *
29
- * @example 内容徽标
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
- * `Tag` 就是靠它拿到「可点」的:徽标是**只读标记**的唯一样式源,`Tag` 只往上加
90
- * 关闭位与新增位,不再自己画一遍框(见 `components/tag/index.tsx`)。
91
- * `as="button"` 会渲染真实 `<button type="button">`(`type` 不能省:缺省是 `submit`,
92
- * 放进表单会提交),并保留本件全部档位类与几何 —— 按钮的外观缺三项由本件面自带
93
- * (`border` / `background` / `padding`,见 `contract-reset.spec.ts` 的第三组),
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
- * `Tag` 就是靠它拿到「可点」的:徽标是**只读标记**的唯一样式源,`Tag` 只往上加
151
- * 关闭位与新增位,不再自己画一遍框(见 `components/tag/index.tsx`)。
152
- * `as="button"` 会渲染真实 `<button type="button">`(`type` 不能省:缺省是 `submit`,
153
- * 放进表单会提交),并保留本件全部档位类与几何 —— 按钮的外观缺三项由本件面自带
154
- * (`border` / `background` / `padding`,见 `contract-reset.spec.ts` 的第三组),
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
- * `Tag` 就是靠它拿到「可点」的:徽标是**只读标记**的唯一样式源,`Tag` 只往上加
60
- * 关闭位与新增位,不再自己画一遍框(见 `components/tag/index.tsx`)。
61
- * `as="button"` 会渲染真实 `<button type="button">`(`type` 不能省:缺省是 `submit`,
62
- * 放进表单会提交),并保留本件全部档位类与几何 —— 按钮的外观缺三项由本件面自带
63
- * (`border` / `background` / `padding`,见 `contract-reset.spec.ts` 的第三组),
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
- * 故新代码请用 `danger` 布尔修饰任意型,`variant="danger"` 只在旧调用点继续有效。
7
+ * `danger` 保留在枚举里是**向后兼容**:它等价于 `variant="primary"` 叠加 `danger` 布尔 —— 语义上「危险」是色彩
8
+ * 角色(与主色正交),不是第六种结构形态,故新代码请用 `danger` 布尔修饰任意型(`variant="danger"` 只在旧调用点
9
+ * 继续有效)。
10
+ * `text` 与 `link` 都是无底色档,但**语义不同,别混**:`text` =「行内文本操作」(编辑 / 删除 / 更多 / 展开,无
11
+ * 下划线);`link` =「跳转语义」(带下划线,像超链接)。「行内可点文字」一律用它 → `text`。
10
12
  *
11
- * `text` 与 `link` 都是无底色档,但**语义不同,别混**:
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
- * `size`:`sm` 24 / `md` 32(标准)/ `lg` 40 —— 三档**真实不同高**(与 `--ui-control-height-*` 同值);
23
- * `shape` / `danger` / `block` 是正交修饰(可叠加任意型);
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
- * `href` 存在时渲染成 `<a>`(链接语义 + 原生右键菜单);此时 `disabled` 只能靠 `aria-disabled`
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
- * 样式层靠 `input:checked + .mh-capsule__item` 选态,故**顺序不能调**(input 必须紧邻项之前);
17
- * 项上带 `for`/`id` 是为了整项可点(开关自身是 1px 隐身盒、`pointer-events: none`)。
18
- * Tab 进组、← → 换项、空格选中、跳过禁用项 —— 都是原生 radio 组的行为,本件不写键盘代码。
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
- * 面板显隐由 `Tabs` 按受控值下发 `hidden`。本件不认识 tabs,tabs 也不认识本件(两层零互指)。
30
- * 故**不必**为了组合而给它 `name`(组名不传即按实例自动生成)。
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`,非受控由 `defaultValue` 起,**两者都没给时缺省选中第一个
37
- * 可选项**(跳过禁用项;没有可选项才是空值)—— 与 `Radio.Group` / `Radio.Card` / `Tabs` 同一条口径。
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
- * @example 与面板组合(页签)
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
- * │ [图标] 标题 extra(右端) │
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
- * `Card.Header` / `Body` / `Footer`(分件)与 `Card` 内建头 / 操作行默认各吃 `--mh-card-padding`(20px)。
48
- *
49
- * **不给 `padding`**(面上的缺省口径):纵向是「**每段只吃上边**」—— 一段只负责**与自己上方之间的距离**
50
- * (下一段的上内距就是段间距),卡片的**下沿由最后一段补**(面上 `:last-child` 那条规则)——
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
- * 只给一维就只落那一维、另一维照旧吃令牌)。行内样式盖过面上那条 `:last-child`,
55
- * 故**下边也按 `y` 走**(`{ y: 0, x: 16 }` ≡ `padding: 0 16px`,内容贴该段下边)—— 要保留兜底就别传。
56
- * 要整卡统一就改令牌 `--mh-card-padding`。
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`,DOM 与没有该维度时一致)。
64
- * 分件的 `padding` 语义同上(给了就整段由消费方定价,含下边;不给才吃「只吃上边 + 末段补下沿」的缺省口径)。
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
- * @example 技能卡(图标 + 标题/副标题 + 右端状态 + 正文 + 操作行)
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
- * @example
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
- * 缺省(代码块 + 右上角 hover / 聚焦显形的方形图标复制按钮 + 可选语言角标)。
26
- * 代码块**缺省不折行**(横向滚动,缩进与列对齐不被破坏),`wrap` 才软换行。
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
- * 本件不认识任何语言:`language` 只画右上角的**角标**,**不做**分词着色。
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
- * 走 `navigator.clipboard.writeText`(**唯一需要 JS 的部分**,按 copied 状态二选一图标)。
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: {
@@ -124,9 +111,9 @@ export declare const CodeView: import("vue").DefineComponent<import("vue").Extra
124
111
  plain: boolean;
125
112
  code: string;
126
113
  onCopy: (ok: boolean) => void;
114
+ maxHeight: string | number;
127
115
  language: string;
128
116
  copyable: boolean;
129
- maxHeight: string | number;
130
117
  }, SlotsType<{
131
118
  default?: () => VNodeChild;
132
119
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -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
- * 表单里的普通多行文本用 `Input.Textarea`;本件服务**代码**:等宽字、去掉拼写检查与自动大写、
173
- * 折行行为按代码区的口径来。两者共用同一套受控词表(`modelValue` / `onChange` / `readonly` / `disabled`)。
155
+ * 表单里的普通多行文本用 `Input.Textarea`;本件服务**代码**:等宽字、去掉拼写检查与自动大写、折行按代码区口径来。
156
+ * 两者共用同一套受控词表(`modelValue` / `onChange` / `readonly` / `disabled`)。
174
157
  *
175
158
  * ## 不做的事(有意)
176
- *
177
- * - **不做语法高亮**:编辑态就是原生 `textarea`,着色一律交给消费方(只读态用 `View` 的插槽接高亮);
178
- * - **不内建动作按钮**(编辑 / 保存 / 取消 / 复制):动作条由消费方在外部摆放,本件只负责"能改";
179
- * - 不做行号、不做 Tab 缩进接管(会与浏览器的焦点导航与粘贴行为打架)。
159
+ * **不做语法高亮**(编辑态就是原生 `textarea`,着色一律交给消费方;只读态用 `View` 的插槽接高亮);**不内建动作
160
+ * 按钮**(编辑 / 保存 / 取消 / 复制由消费方在外部摆放);不做行号、不做 Tab 缩进接管(会与浏览器的焦点导航与粘贴
161
+ * 行为打架)。
180
162
  *
181
163
  * ## 自适应高度怎么算
182
- *
183
- * 按 `\n` **计数行数**在 `minRows` / `maxRows` 间截断(同 `Input.Textarea`):不测 `scrollHeight`
184
- * ——那要在每次输入后读布局(强制同步回流),且软换行 / 隐藏容器 / SSR 下都拿不到可靠值。
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: {
@@ -285,25 +260,23 @@ export declare const CodeEditor: import("vue").DefineComponent<import("vue").Ext
285
260
  modelValue: string;
286
261
  readonly: boolean;
287
262
  autoSize: boolean | CodeEditorAutoSize;
288
- language: string;
289
263
  maxHeight: string | number;
264
+ language: string;
290
265
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
291
266
  /** `CodeBlock` 的 props:**两形态的并集** + 切换开关(按 `editable` 分两组,见各条说明) */
292
267
  export interface CodeBlockProps extends CodeViewProps, CodeEditorProps {
293
268
  /**
294
- * 编辑档:`true` 渲染 `Editor`(可改),缺省 `false` 渲染 `View`(只读展示)。
295
- *
296
- * 两形态的 props 都挂在本件上,但**按档生效**:只读档读 `code` / `inline` / `plain` / `copyable` /
297
- * `wrap` / `onCopy`,编辑档读 `modelValue` / `defaultValue` / `placeholder` / `rows` / `autoSize` /
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
- * `Object.assign` 是**原地**挂载(与 `Input.Textarea` 同一手法):运行时的 `CodeBlock` 就是它,
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<{
@@ -393,9 +366,9 @@ export declare const CodeBlock: {
393
366
  modelValue: string;
394
367
  readonly: boolean;
395
368
  autoSize: boolean | CodeEditorAutoSize;
369
+ maxHeight: string | number;
396
370
  language: string;
397
371
  copyable: boolean;
398
- maxHeight: string | number;
399
372
  editable: boolean;
400
373
  }, true, {}, SlotsType<{
401
374
  default?: () => VNodeChild;
@@ -491,9 +464,9 @@ export declare const CodeBlock: {
491
464
  modelValue: string;
492
465
  readonly: boolean;
493
466
  autoSize: boolean | CodeEditorAutoSize;
467
+ maxHeight: string | number;
494
468
  language: string;
495
469
  copyable: boolean;
496
- maxHeight: string | number;
497
470
  editable: boolean;
498
471
  }>;
499
472
  __isFragment?: never;
@@ -586,9 +559,9 @@ export declare const CodeBlock: {
586
559
  modelValue: string;
587
560
  readonly: boolean;
588
561
  autoSize: boolean | CodeEditorAutoSize;
562
+ maxHeight: string | number;
589
563
  language: string;
590
564
  copyable: boolean;
591
- maxHeight: string | number;
592
565
  editable: boolean;
593
566
  }, {}, string, SlotsType<{
594
567
  default?: () => VNodeChild;
@@ -665,9 +638,9 @@ export declare const CodeBlock: {
665
638
  plain: boolean;
666
639
  code: string;
667
640
  onCopy: (ok: boolean) => void;
641
+ maxHeight: string | number;
668
642
  language: string;
669
643
  copyable: boolean;
670
- maxHeight: string | number;
671
644
  }, SlotsType<{
672
645
  default?: () => VNodeChild;
673
646
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -766,8 +739,8 @@ export declare const CodeBlock: {
766
739
  modelValue: string;
767
740
  readonly: boolean;
768
741
  autoSize: boolean | CodeEditorAutoSize;
769
- language: string;
770
742
  maxHeight: string | number;
743
+ language: string;
771
744
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
772
745
  };
773
746
  /** 含成员的 `CodeBlock` 类型(与 `CodeBlockCompoundType` 同义,两个名字都为对齐本仓既有的 `XxxCompound` 口径) */
@@ -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 即收起) */