@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.
Files changed (83) 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 +28 -55
  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 +31 -63
  19. package/dist/components/input/index.js +5 -7
  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 +11 -63
  54. package/dist/components/table/index.js +4 -8
  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 +2 -2
  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 +34 -41
  82. package/dist/styles/components/upload.css +2 -0
  83. package/package.json +2 -2
@@ -28,6 +28,8 @@ export interface TabsProps {
28
28
  * 2. **缺省皮肤的尺寸档**:原样透传给 `TabBar`(高度 `24 / 32 / 40` + 同级字号)。
29
29
  * 换了皮肤则这一条不生效:控件的尺寸归你放进来的那个控件自己管
30
30
  * (`Capsule` / 分段按钮各有自己的 `size`),本件不代它加类。
31
+ *
32
+ * 用法见 `docs/demos/tabs/`(每个维度一份可运行样例;文档页 `docs/components/tabs.md`)。
31
33
  */
32
34
  size?: ControlSize;
33
35
  }
@@ -45,18 +47,11 @@ export interface TabPanelProps {
45
47
  /**
46
48
  * 面板:`Tabs` 的**信息入口**。
47
49
  *
48
- * 使用方只写面板自己的信息(`name` 等),`Tabs` 在渲染期把它提取成轨道项 ——
49
- * 缺省就是页签条,要换皮就写 `Tabs` 的 `selector` 插槽(胶囊 / 分段按钮 / 单选卡片)。
50
+ * 使用方只写面板自己的信息(`name` 等),`Tabs` 在渲染期把它提取成轨道项 —— 缺省就是页签条,要换皮就写
51
+ * `Tabs` 的 `selector` 插槽(胶囊 / 分段按钮 / 单选卡片)。
50
52
  *
51
- * 本件**不画任何东西**:渲染即默认插槽直通。面板壳(`.mh-tabs-panel`)与显隐由 `Tabs` 出,
52
- * 故挂在本件上的 `class` / `style` 会被搬到那块壳上(面板级样式改的是**壳** —— 内距、限高、
53
- * 自己滚,挂到内容上就没有这层可改)。
54
- *
55
- * @example
56
- * <Tabs v-model:value="current">
57
- * <TabPanel name="概览">…</TabPanel>
58
- * <TabPanel name="工具" disabled>…</TabPanel>
59
- * </Tabs>
53
+ * 本件**不画任何东西**(渲染即默认插槽直通):面板壳(`.mh-tabs-panel`)与显隐由 `Tabs` 出,故挂在本件上的
54
+ * `class` / `style` 会被搬到那块壳上(面板级样式改的是**壳** —— 内距、限高、自己滚,挂到内容上就没有这层可改)。
60
55
  */
61
56
  export declare const TabPanel: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
62
57
  name: {
@@ -105,50 +100,33 @@ export declare const TabPanel: import("vue").DefineComponent<import("vue").Extra
105
100
  * 面板切换(**操作层骨架 + 组件路径显隐**)。
106
101
  *
107
102
  * ## 它是什么
108
- * 把「一组互斥选项」与「按顺序排列的面板」接起来:第 n 个选项 ↔ 第 n 块面板。
109
- * 骨架(根、面板组、收起态)在操作层 `styles/operations/tabs.css`,本件负责:
110
- * 受控值、从面板提取项、面板包装与显隐、把 `select` 交给选择控件。
103
+ * 把「一组互斥选项」与「按顺序排列的面板」接起来(第 n 个选项 ↔ 第 n 块面板)。骨架(根 / 面板组 / 收起态)
104
+ * 在操作层 `styles/operations/tabs.css`,本件负责:受控值、从面板提取项、面板包装与显隐、把 `select` 交给
105
+ * 选择控件。
111
106
  *
112
107
  * ## 信息从哪来(两条路,**写了 `TabPanel` 就以它为准**)
113
- * - **`TabPanel`(推荐)**:面板自带 `name`(页签文字 + 缺省项值)、`value`、`disabled`、`lazy`,
114
- * 本件在渲染期提取成轨道项 —— 使用方不必再维护一份与之平行的 `options`;
115
- * - **`options`(老写法)**:默认插槽给裸节点,按顺序与 `options` 一一配对;
116
- * 裸节点没有同序项时那块面板**永远不可见**(不越档)。
108
+ * - **`TabPanel`(推荐)**:面板自带 `name`(页签文字 + 缺省项值)/ `value` / `disabled` / `lazy`,本件在渲染
109
+ * 期提取成轨道项 —— 使用方不必再维护一份平行的 `options`;
110
+ * - **`options`(老写法)**:默认插槽给裸节点,按顺序与 `options` 一一配对;裸节点没有同序项时那块面板**永远
111
+ * 不可见**(不越档)。
117
112
  * 两条路不叠加:写了 `TabPanel` 的那次渲染里 `options` 不参与(两套并行声明必打架)。
118
113
  *
119
114
  * ## 选择控件从哪来(`selector` 插槽)
120
115
  * - **不传插槽 = 用缺省皮肤 `TabBar`**(页签条形态)—— 绝大多数用法只要这一句;
121
- * - 传插槽则整块替换:放 `Capsule`(胶囊)、按钮族的分段形态、单选卡片都行,
122
- * 作用域参数 `{ value, options, select }` 把值、项(已含从 `TabPanel` 提取的那些)与选中回调
123
- * 递出来。本件不认识任何选择控件的类名 —— **控制器与骨架零互指**,换皮肤不必动本件。
116
+ * - 传插槽则整块替换:`Capsule`(胶囊)、按钮族的分段形态、单选卡片都行,作用域参数
117
+ * `{ value, options, select }` 把值、项(已含从 `TabPanel` 提取的那些)与选中回调递出来。本件不认识任何
118
+ * 选择控件的类名 —— **控制器与骨架零互指**,换皮肤不必动本件。
124
119
  * - 尺寸档 `size` 管两件事:① 骨架的呼吸位(`.mh-tabs` 的 `gap`,4 / 8 / 12px,**与皮肤无关**);
125
- * ② 缺省皮肤 `TabBar` 的高与字号(24 / 32 / 40)。换了皮肤则第 ② 条不生效 ——
126
- * 控件尺寸归你的控件自己管,本件不代它加类。
120
+ * ② 缺省皮肤 `TabBar` 的高与字号(24 / 32 / 40);换了皮肤则第 ② 条不生效(控件尺寸归你的控件自己管)。
127
121
  *
128
122
  * ## 显隐只有一条路径
129
- * 本件按受控值给非选中面板下发 `hidden`,**与控件形态无关**(是不是原生 radio 都一样)。
130
- * 曾经的「零 JS 路径」(原生 radio + 操作层档位表 `:has(input:nth-of-type(n):checked)`)**已退役**:
131
- * 写不出通式、上限 8 档、还要求开关与面板同父级同序 —— 局限远大于收益。
132
- * 故拿 `Capsule` 当控件时**不必**再给它 `name`(那曾经只是给操作层认组用的)。
123
+ * 本件按受控值给非选中面板下发 `hidden`,**与控件形态无关**(是不是原生 radio 都一样)。曾经的「零 JS 路径」
124
+ * (原生 radio + 操作层档位表 `:has(input:nth-of-type(n):checked)`)**已退役**:写不出通式、上限 8 档、还要
125
+ * 求开关与面板同父级同序 —— 局限远大于收益。故拿 `Capsule` 当控件时**不必**再给它 `name`。
133
126
  *
134
127
  * ## 惰性档
135
- * `lazy` 在 `Tabs` 与 `TabPanel` 上都可给(取或):非激活面板**不渲染**(切走即卸载)。
136
- * 缺省档全部挂载、只用 `hidden` 藏 —— 保留面板内部状态(滚动位置、局部输入)。
137
- *
138
- * @example 最小用法:只写面板信息(缺省页签条)
139
- * <Tabs v-model:value="current">
140
- * <TabPanel name="概览">…</TabPanel>
141
- * <TabPanel name="工具">…</TabPanel>
142
- * </Tabs>
143
- *
144
- * @example 换皮:胶囊作选择控件
145
- * <Tabs v-model:value="current">
146
- * {{
147
- * selector: ({ value, options, select }) =>
148
- * <Capsule :options="options" modelValue={value} onChange={select} />,
149
- * default: () => [<TabPanel name="概览">…</TabPanel>, <TabPanel name="工具">…</TabPanel>],
150
- * }}
151
- * </Tabs>
128
+ * `lazy` 在 `Tabs` 与 `TabPanel` 上都可给(取或):非激活面板**不渲染**(切走即卸载);缺省档全部挂载、只用
129
+ * `hidden` 藏 —— 保留面板内部状态(滚动位置、局部输入)。
152
130
  */
153
131
  export declare const Tabs: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
154
132
  options: {
@@ -6,6 +6,8 @@ export type TextSize = 'caption' | 'body' | 'heading' | 'title';
6
6
  *
7
7
  * ⚠️ 自绘样式时要字色,一律落 `--ui-<tone>` / `--ui-<tone>-strong`(浅底深字)。
8
8
  * `--ui-*-content` 那一族是**实心填充之上的白字**,配浅底(`-weak`)就是白字白底。
9
+ *
10
+ * 用法见 `docs/demos/text/`(每个维度一份可运行样例;文档页 `docs/components/text.md`)。
9
11
  */
10
12
  export type TextTone = 'default' | 'muted' | 'subtle' | 'primary' | 'success' | 'warning' | 'error';
11
13
  /** 字重档(缺省**不设**,即继承上下文 —— 这样「在已加粗的区域里放一段普通文字」不必显式写 regular) */
@@ -31,36 +33,23 @@ export interface TextProps {
31
33
  *
32
34
  * ## 为什么需要它
33
35
  *
34
- * `theme` 一直有 `--ui-font-{caption,body,heading,title}` 与 `--ui-font-mono` 这套档位令牌,
35
- * 但**没有件消费它们**:卡片描述、表单说明、只读值、列表次级信息这些「容器里的文字层级」
36
- * 于是无处可归 —— `Card` 只管卡片外壳,`Panel` 只管区域,两者都不管内容里的排版;
37
- * 而契约 L1-5 又禁应用侧写 `font-*` / `color`。**令牌有了、路径没有**,
38
- * 结果就是每个应用都要为「卡片里的文字」保留一条定版例外登记(首批迁移的登记项里,
39
- * 绝大多数属于这一类)。本件把这条路径补上。
36
+ * `theme` 一直有 `--ui-font-{caption,body,heading,title}` 与 `--ui-font-mono` 这套档位令牌,但**没有件消费
37
+ * 它们** —— 卡片描述、表单说明、只读值、列表次级信息这些「容器里的文字层级」于是无处可归(`Card` 只管卡片
38
+ * 外壳、`Panel` 只管区域,两者都不管内容里的排版),而契约 L1-5 又禁应用侧写 `font-*` / `color`。**令牌有了、
39
+ * 路径没有**,结果就是每个应用都要为「卡片里的文字」保留一条定版例外登记。本件把这条路径补上。
40
40
  *
41
41
  * ## 与 `Title` / 平台默认的关系
42
42
  *
43
- * `as="h2"` 只贡献**语义**,视觉完全由 `size` / `weight` 决定:字号由 `size` 档(缺省 `body`)显式给,
44
- * 浏览器给 `h1`-`h6` 的那套字阶(`1.5em` + 粗体)由**本件自己的面**归零(`.mh-text:where(h1…h6)`,
45
- * 只点名标题标签 —— `strong` 的加粗是它唯一的表达,不归零)。元素级基线**不再**代管这条:
46
- * 它在 Tailwind 的层外,会压住消费方的 `text-*` 工具类(理由见 `styles/reset.css` 文件头)。
43
+ * `as="h2"` 只贡献**语义**,视觉完全由 `size` / `weight` 决定:字号由 `size` 档(缺省 `body`)显式给,浏览器
44
+ * 给 `h1`-`h6` 的那套字阶(`1.5em` + 粗体)由**本件自己的面**归零(`.mh-text:where(h1…h6)`,只点名标题标签
45
+ * —— `strong` 的加粗是它唯一的表达,不归零)。元素级基线**不再**代管这条:它在 Tailwind 的层外,会压住消费
46
+ * 方的 `text-*` 工具类(理由见 `styles/reset.css` 文件头)。
47
47
  *
48
48
  * ## 不做什么
49
49
  *
50
50
  * - **不做富文本**:不解析 markdown、不认 `**加粗**`(富文本排版的归属见 `@manohub/kit/CONTRACT.md` §10);
51
51
  * - **不做省略的展开**:截断只表示「显示不下就省略」,需要「展开全文」交互的走业务自己实现;
52
52
  * - **不承载色底 / 描边 / 内距**:那是 `Tag` / `Badge` / `Card` 的事。
53
- *
54
- * @example 卡片里的三行信息(标题 / 描述 / 元信息)
55
- * <Text as="h3" size="heading" weight="semibold">{repo.name}</Text>
56
- * <Text tone="muted" truncate>{repo.url}</Text>
57
- * <Text as="small" size="caption" tone="subtle">{repo.updatedAt}</Text>
58
- *
59
- * @example 只读值 + 等宽
60
- * <Text mono>{task.id}</Text>
61
- *
62
- * @example 最多两行,超出省略
63
- * <Text :truncate="2">{longDescription}</Text>
64
53
  */
65
54
  export declare const Text: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
66
55
  size: {
@@ -6,23 +6,14 @@ export type ToastTone = 'info' | 'success' | 'warning' | 'error' | 'loading';
6
6
  *
7
7
  * ## 与 `Notification` / `Notice` 的判据
8
8
  *
9
- * 三者都是「告诉用户一件事」,按**出现方式**分:**浮出后自己消失** → 本件(消息提示);
10
- * 嵌在页面里、用户自己关 → `Notification`(通知卡,有标题/头像/标签);一行话 + 可选操作 → `Notice`。
9
+ * 三者都是「告诉用户一件事」,按**出现方式**分:**浮出后自己消失** → 本件(消息提示);嵌在页面里、用户自己
10
+ * 关 → `Notification`(通知卡,有标题 / 头像 / 标签);一行话 + 可选操作 → `Notice`。
11
11
  *
12
12
  * ## 只管一条
13
13
  *
14
- * 本件是**一条**提示的渲染与计时:`duration > 0` 时到点发出 `close` 事件(**不自己移除 DOM** —— 存在性归
15
- * 调用方,避免"组件消失了、队列里还留着"两套口径);多条堆叠用 `Toast.Stack` 包一层。
16
- *
14
+ * 本件是**一条**提示的渲染与计时:`duration > 0` 时到点发出 `close` 事件(**不自己移除 DOM** —— 存在性归调用
15
+ * 方,避免"组件消失了、队列里还留着"两套口径);多条堆叠用 `Toast.Stack` 包一层。
17
16
  * `loading` 档通常是「先给一条加载中,完成后再换成结果态」:换态由调用方替换 `tone`,本件不做轮询。
18
- *
19
- * @example 基本(3 秒自动消失)
20
- * <Toast tone="success" text="保存成功" :duration="3000" @close="remove(it)" />
21
- *
22
- * @example 堆叠容器 + 带动作
23
- * <Toast.Stack>
24
- * <Toast tone="error" text="导出失败" action="重试" @action="retry" />
25
- * </Toast.Stack>
26
17
  */
27
18
  export declare const Toast: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
28
19
  tone: {
@@ -17,18 +17,7 @@ export type TooltipTrigger = 'hover' | 'click';
17
17
  *
18
18
  * 定位两者同一套:`data-side` 给方位、`data-align` 给两侧对齐(缺省中线),溢出自动翻面。
19
19
  *
20
- * @example 悬停
21
- * <Tooltip content="导出为 CSV" side="bottom" align="end">
22
- * <Button variant="secondary">导出</Button>
23
- * </Tooltip>
24
- *
25
- * @example 点击(内容可交互 / 怕被裁切时)
26
- * <Tooltip trigger="click" content="最近 24 小时无异常">
27
- * <Icon name="info" />
28
- * </Tooltip>
29
- *
30
- * @example 带标题与动作(引导档外观)
31
- * <Tooltip guide title="新功能" content="支持批量导入" action="去看看" @action="go" />
20
+ * 用法见 `docs/demos/tooltip/`(每个维度一份可运行样例;文档页 `docs/components/tooltip.md`)。
32
21
  */
33
22
  export declare const Tooltip: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
34
23
  /** 正文(复杂内容走 `content` 插槽) */
@@ -43,17 +43,7 @@ export interface TreeNode {
43
43
  *
44
44
  * 不在其中之列的(标题里的图标 + 文字)走 `renderLabel`:那属于标签**本体**。
45
45
  *
46
- * @example 受控展开 + 计数徽标 + 行尾操作
47
- * <Tree nodes={treeNodes.value} rowKey="id" labelKey="name"
48
- * selected={selectedId.value} onSelect={(n) => select(n.id)}
49
- * expandedKeys={expandedKeys.value} onExpandChange={(k) => (expandedKeys.value = k)}
50
- * renderNode={(n) => <Badge>{countOfDomain(n.id)}</Badge>}
51
- * renderActions={(n) => <Button title="删除" onClick={() => removeDomain(n.id)} />} />
52
- *
53
- * @example 文件夹 / 文件图标 + 方向字形自表达(不靠旋转)
54
- * <Tree nodes={tree.value} rowKey="id"
55
- * renderIcon={(n) => <Icon name={hasChild(n) ? 'folder' : 'file-text'} />}
56
- * renderCaret={(_n, expanded) => <Icon name={expanded ? 'chevron-down' : 'chevron-right'} />} />
46
+ * 用法见 `docs/demos/tree/`(每个维度一份可运行样例;文档页 `docs/components/tree.md`)。
57
47
  */
58
48
  export declare const Tree: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
59
49
  nodes: {
@@ -85,38 +75,29 @@ export declare const Tree: import("vue").DefineComponent<import("vue").ExtractPr
85
75
  default: undefined;
86
76
  };
87
77
  /**
88
- * 标签体的自定义渲染(**替掉** `labelKey` 的纯文本)。
89
- *
90
- * 与 `renderNode` 的分工:本 prop 渲染的是**标签本体**(占位、省略号、行内对齐都由 `.mh-tree__label`
91
- * 承担,因此必须留在那个槽里);`renderNode` 渲染的是标签**之后**的常驻附加内容(计数徽标一类)。
92
- * 典型用途是搜索命中的文本高亮(把标签切成多个片段)。
93
- *
94
- * 缺省不传时仍渲染 `labelKey` 的纯文本 —— 这是绝大多数消费方的路径,行为零变化。
78
+ * 标签体的自定义渲染(**替掉** `labelKey` 的纯文本)。与 `renderNode` 的分工:本 prop 渲染的是**标签本体**
79
+ * (占位 / 省略号 / 行内对齐都由 `.mh-tree__label` 承担,故必须留在那个槽里);`renderNode` 渲染标签**之后**的
80
+ * 常驻附加内容(计数徽标一类)。典型用途是搜索命中的文本高亮(把标签切成多个片段)。缺省不传时仍渲染
81
+ * `labelKey` 的纯文本 —— 绝大多数消费方走这条,行为零变化。
95
82
  */
96
83
  renderLabel: {
97
84
  type: PropType<(node: TreeNode) => unknown>;
98
85
  default: undefined;
99
86
  };
100
87
  /**
101
- * 展开 / 收起箭头的自定义渲染(拿到节点与**当前展开态**)。
102
- *
103
- * 缺省仍是 `chevron-down` 字形 + 面层收起态转 −90°(默认路径零变化)。
104
- * 自定义时**朝向由消费方按 `expanded` 自选字形**(`chevron-right` / `chevron-down`)——
105
- * 与包内「方位一律用字形、不靠旋转别的图标」的口径同源;**不要再给内容加
106
- * `mh-tree__caret-icon` 类**(那是缺省字形的转向钩子,加上会被转成 −90°)。
107
- * 尺寸不必自管:槽位与槽内字形都取全局图标档 `--ui-font-icon`。
88
+ * 展开 / 收起箭头的自定义渲染(拿到节点与**当前展开态**)。缺省仍是 `chevron-down` 字形 + 面层收起态转 −90°
89
+ * (默认路径零变化);自定义时**朝向由消费方按 `expanded` 自选字形**(`chevron-right` / `chevron-down`)——
90
+ * 与包内「方位一律用字形、不靠旋转别的图标」同源。**不要再给内容加 `mh-tree__caret-icon` 类**(那是缺省字形
91
+ * 的转向钩子,加上会被转成 −90°);尺寸不必自管:槽位与槽内字形都取全局图标档 `--ui-font-icon`。
108
92
  */
109
93
  renderCaret: {
110
94
  type: PropType<(node: TreeNode, expanded: boolean) => unknown>;
111
95
  default: undefined;
112
96
  };
113
97
  /**
114
- * 标签**前**的节点图标槽(文件夹 / 文件一类)。
115
- *
116
- * 父节点与叶子节点**都由消费方按 `node` 判定**(组件不替它猜「是不是叶子」:同一个图标槽
117
- * 在两种节点上都成立,判定依据是数据而不是渲染期形态)。缺省不渲染该槽,几何零变化。
118
- * 叶子行的箭头占位仍保留,故图标列跨层级对齐。颜色不写死:跟随行色,
119
- * 选中行的主色字与滑过态自动同步。
98
+ * 标签**前**的节点图标槽(文件夹 / 文件一类)。父节点与叶子节点**都由消费方按 `node` 判定**(组件不替它猜
99
+ * 「是不是叶子」:判定依据是数据而不是渲染期形态)。缺省不渲染该槽,几何零变化;叶子行的箭头占位仍保留,故
100
+ * 图标列跨层级对齐。颜色不写死:跟随行色,选中行的主色字与滑过态自动同步。
120
101
  */
121
102
  renderIcon: {
122
103
  type: PropType<(node: TreeNode) => unknown>;
@@ -128,12 +109,9 @@ export declare const Tree: import("vue").DefineComponent<import("vue").ExtractPr
128
109
  default: undefined;
129
110
  };
130
111
  /**
131
- * 行尾操作区(新增 / 重命名 / 删除等)。
132
- *
133
- * **默认隐藏、行悬浮或行内获得焦点时显形**(触屏无 hover 能力时恒显形),点击**不冒泡**到 `onSelect`
134
- * —— 与 `ListView.CardItem` 的 `actions` 同一口径(几何与显隐归组件,应用侧只给节点)。
135
- *
136
- * 与 `renderNode` 的分工:**常驻**的附加内容(计数徽标)走 `renderNode`;**可点**的行尾操作走这里。
112
+ * 行尾操作区(新增 / 重命名 / 删除等)。**默认隐藏、行悬浮或行内获得焦点时显形**(触屏无 hover 能力时恒显形),
113
+ * 点击**不冒泡**到 `onSelect` —— 与 `ListView.CardItem` 的 `actions` 同一口径(几何与显隐归组件,应用侧只给
114
+ * 节点)。与 `renderNode` 的分工:**常驻**的附加内容(计数徽标)走 `renderNode`,**可点**的行尾操作走这里。
137
115
  */
138
116
  renderActions: {
139
117
  type: PropType<(node: TreeNode) => unknown>;
@@ -182,13 +160,9 @@ export declare const Tree: import("vue").DefineComponent<import("vue").ExtractPr
182
160
  default: undefined;
183
161
  };
184
162
  /**
185
- * 错误态(truthy 即触发)。
186
- *
187
- * **构造器顺序同 `表格.error`:`String` 必须排在 `Boolean` 前** —— 顺序写反时,成功态传的
188
- * 空字符串会被 Vue 的布尔转换判成 `true`,树永远停在错误态。
189
- *
190
- * 有它之前,消费方只能把错误文案塞进 `empty`:错误被渲染成空态语义(无错误插画、无重试入口),
191
- * 用户看不出「是没数据还是加载挂了」。
163
+ * 错误态(truthy 即触发)。**构造器顺序同 `表格.error`:`String` 必须排在 `Boolean` 前** —— 顺序写反时,成功
164
+ * 态传的空字符串会被 Vue 的布尔转换判成 `true`,树永远停在错误态。有它之前消费方只能把错误文案塞进 `empty`:
165
+ * 错误被渲染成空态语义(无错误插画、无重试入口),用户看不出「是没数据还是加载挂了」。
192
166
  */
193
167
  error: {
194
168
  type: PropType<any>;
@@ -243,38 +217,29 @@ export declare const Tree: import("vue").DefineComponent<import("vue").ExtractPr
243
217
  default: undefined;
244
218
  };
245
219
  /**
246
- * 标签体的自定义渲染(**替掉** `labelKey` 的纯文本)。
247
- *
248
- * 与 `renderNode` 的分工:本 prop 渲染的是**标签本体**(占位、省略号、行内对齐都由 `.mh-tree__label`
249
- * 承担,因此必须留在那个槽里);`renderNode` 渲染的是标签**之后**的常驻附加内容(计数徽标一类)。
250
- * 典型用途是搜索命中的文本高亮(把标签切成多个片段)。
251
- *
252
- * 缺省不传时仍渲染 `labelKey` 的纯文本 —— 这是绝大多数消费方的路径,行为零变化。
220
+ * 标签体的自定义渲染(**替掉** `labelKey` 的纯文本)。与 `renderNode` 的分工:本 prop 渲染的是**标签本体**
221
+ * (占位 / 省略号 / 行内对齐都由 `.mh-tree__label` 承担,故必须留在那个槽里);`renderNode` 渲染标签**之后**的
222
+ * 常驻附加内容(计数徽标一类)。典型用途是搜索命中的文本高亮(把标签切成多个片段)。缺省不传时仍渲染
223
+ * `labelKey` 的纯文本 —— 绝大多数消费方走这条,行为零变化。
253
224
  */
254
225
  renderLabel: {
255
226
  type: PropType<(node: TreeNode) => unknown>;
256
227
  default: undefined;
257
228
  };
258
229
  /**
259
- * 展开 / 收起箭头的自定义渲染(拿到节点与**当前展开态**)。
260
- *
261
- * 缺省仍是 `chevron-down` 字形 + 面层收起态转 −90°(默认路径零变化)。
262
- * 自定义时**朝向由消费方按 `expanded` 自选字形**(`chevron-right` / `chevron-down`)——
263
- * 与包内「方位一律用字形、不靠旋转别的图标」的口径同源;**不要再给内容加
264
- * `mh-tree__caret-icon` 类**(那是缺省字形的转向钩子,加上会被转成 −90°)。
265
- * 尺寸不必自管:槽位与槽内字形都取全局图标档 `--ui-font-icon`。
230
+ * 展开 / 收起箭头的自定义渲染(拿到节点与**当前展开态**)。缺省仍是 `chevron-down` 字形 + 面层收起态转 −90°
231
+ * (默认路径零变化);自定义时**朝向由消费方按 `expanded` 自选字形**(`chevron-right` / `chevron-down`)——
232
+ * 与包内「方位一律用字形、不靠旋转别的图标」同源。**不要再给内容加 `mh-tree__caret-icon` 类**(那是缺省字形
233
+ * 的转向钩子,加上会被转成 −90°);尺寸不必自管:槽位与槽内字形都取全局图标档 `--ui-font-icon`。
266
234
  */
267
235
  renderCaret: {
268
236
  type: PropType<(node: TreeNode, expanded: boolean) => unknown>;
269
237
  default: undefined;
270
238
  };
271
239
  /**
272
- * 标签**前**的节点图标槽(文件夹 / 文件一类)。
273
- *
274
- * 父节点与叶子节点**都由消费方按 `node` 判定**(组件不替它猜「是不是叶子」:同一个图标槽
275
- * 在两种节点上都成立,判定依据是数据而不是渲染期形态)。缺省不渲染该槽,几何零变化。
276
- * 叶子行的箭头占位仍保留,故图标列跨层级对齐。颜色不写死:跟随行色,
277
- * 选中行的主色字与滑过态自动同步。
240
+ * 标签**前**的节点图标槽(文件夹 / 文件一类)。父节点与叶子节点**都由消费方按 `node` 判定**(组件不替它猜
241
+ * 「是不是叶子」:判定依据是数据而不是渲染期形态)。缺省不渲染该槽,几何零变化;叶子行的箭头占位仍保留,故
242
+ * 图标列跨层级对齐。颜色不写死:跟随行色,选中行的主色字与滑过态自动同步。
278
243
  */
279
244
  renderIcon: {
280
245
  type: PropType<(node: TreeNode) => unknown>;
@@ -286,12 +251,9 @@ export declare const Tree: import("vue").DefineComponent<import("vue").ExtractPr
286
251
  default: undefined;
287
252
  };
288
253
  /**
289
- * 行尾操作区(新增 / 重命名 / 删除等)。
290
- *
291
- * **默认隐藏、行悬浮或行内获得焦点时显形**(触屏无 hover 能力时恒显形),点击**不冒泡**到 `onSelect`
292
- * —— 与 `ListView.CardItem` 的 `actions` 同一口径(几何与显隐归组件,应用侧只给节点)。
293
- *
294
- * 与 `renderNode` 的分工:**常驻**的附加内容(计数徽标)走 `renderNode`;**可点**的行尾操作走这里。
254
+ * 行尾操作区(新增 / 重命名 / 删除等)。**默认隐藏、行悬浮或行内获得焦点时显形**(触屏无 hover 能力时恒显形),
255
+ * 点击**不冒泡**到 `onSelect` —— 与 `ListView.CardItem` 的 `actions` 同一口径(几何与显隐归组件,应用侧只给
256
+ * 节点)。与 `renderNode` 的分工:**常驻**的附加内容(计数徽标)走 `renderNode`,**可点**的行尾操作走这里。
295
257
  */
296
258
  renderActions: {
297
259
  type: PropType<(node: TreeNode) => unknown>;
@@ -340,13 +302,9 @@ export declare const Tree: import("vue").DefineComponent<import("vue").ExtractPr
340
302
  default: undefined;
341
303
  };
342
304
  /**
343
- * 错误态(truthy 即触发)。
344
- *
345
- * **构造器顺序同 `表格.error`:`String` 必须排在 `Boolean` 前** —— 顺序写反时,成功态传的
346
- * 空字符串会被 Vue 的布尔转换判成 `true`,树永远停在错误态。
347
- *
348
- * 有它之前,消费方只能把错误文案塞进 `empty`:错误被渲染成空态语义(无错误插画、无重试入口),
349
- * 用户看不出「是没数据还是加载挂了」。
305
+ * 错误态(truthy 即触发)。**构造器顺序同 `表格.error`:`String` 必须排在 `Boolean` 前** —— 顺序写反时,成功
306
+ * 态传的空字符串会被 Vue 的布尔转换判成 `true`,树永远停在错误态。有它之前消费方只能把错误文案塞进 `empty`:
307
+ * 错误被渲染成空态语义(无错误插画、无重试入口),用户看不出「是没数据还是加载挂了」。
350
308
  */
351
309
  error: {
352
310
  type: PropType<any>;
@@ -34,38 +34,29 @@ const Tree = /* @__PURE__ */ defineComponent({
34
34
  default: void 0
35
35
  },
36
36
  /**
37
- * 标签体的自定义渲染(**替掉** `labelKey` 的纯文本)。
38
- *
39
- * 与 `renderNode` 的分工:本 prop 渲染的是**标签本体**(占位、省略号、行内对齐都由 `.mh-tree__label`
40
- * 承担,因此必须留在那个槽里);`renderNode` 渲染的是标签**之后**的常驻附加内容(计数徽标一类)。
41
- * 典型用途是搜索命中的文本高亮(把标签切成多个片段)。
42
- *
43
- * 缺省不传时仍渲染 `labelKey` 的纯文本 —— 这是绝大多数消费方的路径,行为零变化。
37
+ * 标签体的自定义渲染(**替掉** `labelKey` 的纯文本)。与 `renderNode` 的分工:本 prop 渲染的是**标签本体**
38
+ * (占位 / 省略号 / 行内对齐都由 `.mh-tree__label` 承担,故必须留在那个槽里);`renderNode` 渲染标签**之后**的
39
+ * 常驻附加内容(计数徽标一类)。典型用途是搜索命中的文本高亮(把标签切成多个片段)。缺省不传时仍渲染
40
+ * `labelKey` 的纯文本 —— 绝大多数消费方走这条,行为零变化。
44
41
  */
45
42
  renderLabel: {
46
43
  type: Function,
47
44
  default: void 0
48
45
  },
49
46
  /**
50
- * 展开 / 收起箭头的自定义渲染(拿到节点与**当前展开态**)。
51
- *
52
- * 缺省仍是 `chevron-down` 字形 + 面层收起态转 −90°(默认路径零变化)。
53
- * 自定义时**朝向由消费方按 `expanded` 自选字形**(`chevron-right` / `chevron-down`)——
54
- * 与包内「方位一律用字形、不靠旋转别的图标」的口径同源;**不要再给内容加
55
- * `mh-tree__caret-icon` 类**(那是缺省字形的转向钩子,加上会被转成 −90°)。
56
- * 尺寸不必自管:槽位与槽内字形都取全局图标档 `--ui-font-icon`。
47
+ * 展开 / 收起箭头的自定义渲染(拿到节点与**当前展开态**)。缺省仍是 `chevron-down` 字形 + 面层收起态转 −90°
48
+ * (默认路径零变化);自定义时**朝向由消费方按 `expanded` 自选字形**(`chevron-right` / `chevron-down`)——
49
+ * 与包内「方位一律用字形、不靠旋转别的图标」同源。**不要再给内容加 `mh-tree__caret-icon` 类**(那是缺省字形
50
+ * 的转向钩子,加上会被转成 −90°);尺寸不必自管:槽位与槽内字形都取全局图标档 `--ui-font-icon`。
57
51
  */
58
52
  renderCaret: {
59
53
  type: Function,
60
54
  default: void 0
61
55
  },
62
56
  /**
63
- * 标签**前**的节点图标槽(文件夹 / 文件一类)。
64
- *
65
- * 父节点与叶子节点**都由消费方按 `node` 判定**(组件不替它猜「是不是叶子」:同一个图标槽
66
- * 在两种节点上都成立,判定依据是数据而不是渲染期形态)。缺省不渲染该槽,几何零变化。
67
- * 叶子行的箭头占位仍保留,故图标列跨层级对齐。颜色不写死:跟随行色,
68
- * 选中行的主色字与滑过态自动同步。
57
+ * 标签**前**的节点图标槽(文件夹 / 文件一类)。父节点与叶子节点**都由消费方按 `node` 判定**(组件不替它猜
58
+ * 「是不是叶子」:判定依据是数据而不是渲染期形态)。缺省不渲染该槽,几何零变化;叶子行的箭头占位仍保留,故
59
+ * 图标列跨层级对齐。颜色不写死:跟随行色,选中行的主色字与滑过态自动同步。
69
60
  */
70
61
  renderIcon: {
71
62
  type: Function,
@@ -77,12 +68,9 @@ const Tree = /* @__PURE__ */ defineComponent({
77
68
  default: void 0
78
69
  },
79
70
  /**
80
- * 行尾操作区(新增 / 重命名 / 删除等)。
81
- *
82
- * **默认隐藏、行悬浮或行内获得焦点时显形**(触屏无 hover 能力时恒显形),点击**不冒泡**到 `onSelect`
83
- * —— 与 `ListView.CardItem` 的 `actions` 同一口径(几何与显隐归组件,应用侧只给节点)。
84
- *
85
- * 与 `renderNode` 的分工:**常驻**的附加内容(计数徽标)走 `renderNode`;**可点**的行尾操作走这里。
71
+ * 行尾操作区(新增 / 重命名 / 删除等)。**默认隐藏、行悬浮或行内获得焦点时显形**(触屏无 hover 能力时恒显形),
72
+ * 点击**不冒泡**到 `onSelect` —— 与 `ListView.CardItem` 的 `actions` 同一口径(几何与显隐归组件,应用侧只给
73
+ * 节点)。与 `renderNode` 的分工:**常驻**的附加内容(计数徽标)走 `renderNode`,**可点**的行尾操作走这里。
86
74
  */
87
75
  renderActions: {
88
76
  type: Function,
@@ -131,13 +119,9 @@ const Tree = /* @__PURE__ */ defineComponent({
131
119
  default: void 0
132
120
  },
133
121
  /**
134
- * 错误态(truthy 即触发)。
135
- *
136
- * **构造器顺序同 `表格.error`:`String` 必须排在 `Boolean` 前** —— 顺序写反时,成功态传的
137
- * 空字符串会被 Vue 的布尔转换判成 `true`,树永远停在错误态。
138
- *
139
- * 有它之前,消费方只能把错误文案塞进 `empty`:错误被渲染成空态语义(无错误插画、无重试入口),
140
- * 用户看不出「是没数据还是加载挂了」。
122
+ * 错误态(truthy 即触发)。**构造器顺序同 `表格.error`:`String` 必须排在 `Boolean` 前** —— 顺序写反时,成功
123
+ * 态传的空字符串会被 Vue 的布尔转换判成 `true`,树永远停在错误态。有它之前消费方只能把错误文案塞进 `empty`:
124
+ * 错误被渲染成空态语义(无错误插画、无重试入口),用户看不出「是没数据还是加载挂了」。
141
125
  */
142
126
  error: {
143
127
  type: [String, Boolean, Object, Number, Array],
@@ -24,10 +24,7 @@ export declare function formatFileSize(bytes?: number): string;
24
24
  * 文件列表是**受控**的(`files` 由消费方持有):选择 / 拖入回调 `onSelect`、删除回调 `onRemove`,
25
25
  * 本件不做上传、不自己增删数组(也就不会出现「组件以为删了、业务还留着」的错位)。
26
26
  *
27
- * @example 基本
28
- * <Upload :files="list" hint="支持 PDF / XLS,单个不超过 20MB"
29
- * @select="(fs) => (list = [...list, ...fs.map(toItem)])"
30
- * @remove="(_, i) => list.splice(i, 1)" />
27
+ * 用法见 `docs/demos/upload/`(每个维度一份可运行样例;文档页 `docs/components/upload.md`)。
31
28
  */
32
29
  export declare const Upload: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
33
30
  /** 已选文件(受控;本件只渲染与回调) */
package/dist/index.d.ts CHANGED
@@ -57,7 +57,7 @@ export { Loading, type LoadingOverlay, type LoadingProps } from './components/lo
57
57
  export type { ControlSize } from './components/control-size';
58
58
  export type { Padding } from './components/part-padding';
59
59
  export { partPaddingStyle, mergePartStyle } from './components/part-padding';
60
- export { configureHost, getHostSelector, resolveHost } from './services';
60
+ export { configureHost, getHostSelector, resolveHost, type ServiceHandle } from './services';
61
61
  export { toast, clearToasts, type ToastHandle, type ToastServiceOptions } from './services';
62
62
  export { alert, closeAllDialogs, confirm, type ConfirmOptions } from './services';
63
- export { hideLoading, showLoading } from './services';
63
+ export { hideLoading, showLoading, type LoadingHandle } from './services';
@@ -1,3 +1,31 @@
1
+ /**
2
+ * 服务层 · 宿主解析(`toast` / `dialog` / `loading` 三个命令式服务共用)。
3
+ *
4
+ * ## 为什么服务层要自己造宿主
5
+ * 本包的反馈件都是**受控组件**(到点只回调、可见性归调用方),命令式服务没有调用方的组件树可挂,只能自己建一个 Vue
6
+ * 实例 —— 于是第一件事就是「挂在哪个元素上」。
7
+ *
8
+ * ## 解析顺序(四档,前两档是确定性来源)
9
+ * 1. **显式配置**(`configureHost(el)`)—— 子应用入口拿到自己的容器后调它最稳;
10
+ * 2. **带 `data-manohub-ui` 锚点的容器** —— 骨架层在包裹节点上补一个属性即可,服务层因此**不必反向依赖上层包**;
11
+ * 3. **文档里第一个 `[data-manohub-ui]`** —— 未接骨架层的裸挂载场景;4. `document.body` —— 兜底。
12
+ *
13
+ * ## 为什么不能落到 `body` 就完事
14
+ * 本包全部令牌锚在容器的 `[data-manohub-ui]` 上(`--ui-*`),**微前端下应用侧 CSS 还会被 scopecss 限制在容器内**。
15
+ * 命令式浮层若落在容器外,会出现两种「样式全丢」:变量解析为空(组件退回无样式的裸结构),或被前缀化的应用侧样式匹配
16
+ * 不到。所以宿主必须精确到**本应用自己的容器**(门户里可能同时挂着多个子应用,`querySelector` 会命中别人的 —— 这也是
17
+ * 第 1 档存在的原因)。
18
+ */
19
+ /**
20
+ * 命令式服务的**通用句柄**(`toast()` 与 `showLoading()` 返回同一形状)。
21
+ *
22
+ * 只承诺一件事:**关掉自己那一次**,且**幂等**(重复 `close()` 不再生效)。与模块级的 `hideLoading()`
23
+ * (计数减一)`clearToasts()`(全清)分工不同 —— 那两枚是「整体动作」,句柄是「我这次调用」的收尾凭据,
24
+ * 配平语义只认它。
25
+ */
26
+ export interface ServiceHandle {
27
+ close: () => void;
28
+ }
1
29
  /** 注册宿主变更时的清理动作(服务层内部用;后注册的也按注册顺序执行) */
2
30
  export declare function onHostReset(hook: () => void): void;
3
31
  /** 显式指定服务层宿主;传 `null` 恢复自动解析 */
@@ -5,17 +33,13 @@ export declare function configureHost(el: Element | null): void;
5
33
  /** 解析当前宿主(顺序见文件头;浏览器环境外直接抛错 —— 命令式服务没有可渲染的宿主) */
6
34
  export declare function resolveHost(): Element;
7
35
  /**
8
- * 同 `resolveHost()`,但返回**选择器字符串** —— 给「只吃字符串宿主」的上游件用。
9
- *
10
- * 为什么不能直接给 Element:有的上游件把宿主当选择器解析(`document.querySelector(host)`),
11
- * 传 Element 会拿到 `"[object HTMLDivElement]"` 这个非法选择器而当场抛错。给字符串又要避免
12
- * 「门户里多应用并存时串到第一个 `[data-manohub-ui]`」,故给容器补一个**进程内唯一 id** 再返回它。
36
+ * 同 `resolveHost()`,但返回**选择器字符串** —— 给「只吃字符串宿主」的上游件用。不能直接给 Element:有的上游件把宿主当
37
+ * 选择器解析(`document.querySelector(host)`),传 Element 会拿到 `"[object HTMLDivElement]"` 这个非法选择器而当场抛错;
38
+ * 给字符串又要避免「门户里多应用并存时串到第一个 `[data-manohub-ui]`」,故给容器补一个**进程内唯一 id** 再返回它。
13
39
  */
14
40
  export declare function getHostSelector(): string;
15
41
  /**
16
- * 建一个挂载容器并挂到宿主下。
17
- *
18
- * 挂在宿主**内部**而不是拿宿主本身当挂载点:宿主是应用自己的根节点,直接挂上去会让
42
+ * 建一个挂载容器并挂到宿主下。挂在宿主**内部**而不是拿宿主本身当挂载点:宿主是应用自己的根节点,直接挂上去会让
19
43
  * `app.unmount()` 把应用自己的渲染结果一起抹掉。
20
44
  */
21
45
  export declare function createHostContainer(): HTMLElement;
@@ -9,6 +9,8 @@ export interface ConfirmOptions {
9
9
  *
10
10
  * 不传则无图标。**危险操作用 `error`** —— 它同时把确定按钮染成危险色
11
11
  * (除非显式给了 `okDanger`),这样「删除确认」与「保存成功」不再长得一样。
12
+ *
13
+ * 用法见 `docs/demos/dialog/`(每个维度一份可运行样例;文档页 `docs/components/dialog.md`)。
12
14
  */
13
15
  tone?: DialogTone;
14
16
  /** 面板宽度档:**缺省 `'sm'`(400)**,比 `Dialog` 的 `md` 档窄一档 */
@@ -25,33 +27,19 @@ export interface ConfirmOptions {
25
27
  /**
26
28
  * 确认框(命令式):确定 → `true`,取消 / 关闭位 / Esc / 点遮罩 → `false`。
27
29
  *
28
- * 与 `Dialog` 组件的分工:组件是「受控弹窗」,本函数补齐命令式调用缺的那一层(宿主 + 收场 Promise)。
29
- * 语义与主流库一致:**任何非确定路径都折成 `false`**,调用方 `if (await confirm(...))` 一处判断即可。
30
- *
31
- * **遮罩与 Esc 都归 `false`**:`Dialog` 组件形态的 `closeOnBackdrop` 默认已改为 `true`(跟主流),
32
- * 但命令式确认框必须**显式关掉它** —— 这里一条误点就丢一次决策,与 Ant Design
33
- * (`<Modal maskClosable>` 默认 `true`、`Modal.confirm` 默认 `false`)的分工一致。
34
- *
35
- * 需要「确定按钮进加载态」的异步确认请直接用 `Dialog` 组件(`onOk` 返回 Promise 时自动进加载态)——
36
- * 命令式形态刻意不引入跨 tick 的加载态,免得调用方以为弹窗已经关了。
37
- *
38
- * @example 删除确认(`tone: 'error'` 给标题加提示图标并把确定按钮染危险色)
39
- * if (await confirm({ title: '删除确认', detail: '删除后不可恢复,确认继续?', okText: '删除', tone: 'error' })) {
40
- * await remove()
41
- * }
30
+ * 与 `Dialog` 组件的分工:组件是「受控弹窗」,本函数补齐命令式调用缺的那一层(宿主 + 收场 Promise)。语义与
31
+ * 主流库一致:**任何非确定路径都折成 `false`**,调用方 `if (await confirm(...))` 一处判断即可。
32
+ * **遮罩与 Esc 都归 `false`**:`Dialog` 组件形态的 `closeOnBackdrop` 默认已改为 `true`(跟主流),但命令式确认框
33
+ * 必须**显式关掉它** —— 这里一条误点就丢一次决策(与 Ant Design 的 `Modal` 与 `Modal.confirm` 分工一致)。
34
+ * 需要「确定按钮进加载态」的异步确认请直接用 `Dialog` 组件(`onOk` 返回 Promise 时自动进加载态)—— 命令式形态
35
+ * 刻意不引入跨 tick 的加载态,免得调用方以为弹窗已经关了。
42
36
  */
43
37
  export declare function confirm(options?: ConfirmOptions): Promise<boolean>;
44
38
  /**
45
39
  * 告知框(命令式):只有一个「知道了」,任意收场路径都 resolve。
46
40
  *
47
- * 底栏**自绘**而不是用内建底栏:内建底栏固定是「取消 + 确定」两枚,而告知框没有「取消」可言
48
- * (给两枚按钮会让用户以为还有一条分支)。
49
- *
50
- * 与 `confirm()` 同一口径:**遮罩与 Esc 都显式关掉**(告知框同样不该被一次误点打发掉)。
51
- *
52
- * @example 危险操作的回执:这一条与「保存成功」在图标与配色上区分开
53
- * await alert({ tone: 'error', title: '移除失败', detail: '该来源系统仍被 3 个应用引用。' })
54
- * await alert({ tone: 'success', title: '导入完成', detail: '共 128 条,其中 3 条被跳过。' })
41
+ * 底栏**自绘**而不是用内建底栏:内建底栏固定是「取消 + 确定」两枚,而告知框没有「取消」可言(给两枚按钮会让
42
+ * 用户以为还有一条分支)。与 `confirm()` 同一口径:**遮罩与 Esc 都显式关掉**(告知框同样不该被一次误点打发掉)。
55
43
  */
56
44
  export declare function alert(options?: ConfirmOptions): Promise<void>;
57
45
  /** 收掉全部在档弹窗(逐个折成 `false`);幂等。换应用 / 卸载时调 */
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * 宿主解析见 `./base`:微前端下必须落回**本应用自己的容器**,否则令牌与应用侧样式同时失效。
8
8
  */
9
- export { configureHost, getHostSelector, resolveHost } from './base';
9
+ export { configureHost, getHostSelector, resolveHost, type ServiceHandle } from './base';
10
10
  export { toast, clearToasts, type ToastHandle, type ToastServiceOptions } from './toast';
11
11
  export { alert, closeAllDialogs, confirm, type ConfirmOptions } from './dialog';
12
- export { hideLoading, showLoading } from './loading';
12
+ export { hideLoading, showLoading, type LoadingHandle } from './loading';