@manohub/ui 0.7.0 → 0.8.0

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 (75) hide show
  1. package/README.md +4 -4
  2. package/dist/components/button/index.d.ts +14 -8
  3. package/dist/components/capsule/index.d.ts +13 -9
  4. package/dist/components/capsule/index.js +1 -1
  5. package/dist/components/card/index.d.ts +1 -1
  6. package/dist/components/card/index.js +7 -4
  7. package/dist/components/checkbox/index.js +1 -0
  8. package/dist/components/dialog/index.d.ts +1 -1
  9. package/dist/components/form/index.d.ts +142 -62
  10. package/dist/components/form/index.js +41 -29
  11. package/dist/components/input/index.d.ts +74 -6
  12. package/dist/components/input/index.js +13 -1
  13. package/dist/components/layout/index.d.ts +43 -1
  14. package/dist/components/layout/index.js +22 -2
  15. package/dist/components/list-view/index.d.ts +1 -1
  16. package/dist/components/notice/index.d.ts +2 -2
  17. package/dist/components/notification/index.d.ts +2 -2
  18. package/dist/components/page/index.js +4 -4
  19. package/dist/components/pagination/index.d.ts +2 -2
  20. package/dist/components/pagination/index.js +1 -1
  21. package/dist/components/panel/index.js +4 -4
  22. package/dist/components/part-padding.d.ts +9 -6
  23. package/dist/components/part-padding.js +2 -1
  24. package/dist/components/query-state/index.d.ts +18 -2
  25. package/dist/components/radio/index.d.ts +1 -1
  26. package/dist/components/radio/index.js +1 -0
  27. package/dist/components/select/index.d.ts +32 -30
  28. package/dist/components/select/index.js +46 -82
  29. package/dist/components/select/select-list.d.ts +125 -0
  30. package/dist/components/select/select-list.js +95 -0
  31. package/dist/components/select/select-panel.d.ts +106 -0
  32. package/dist/components/select/select-panel.js +72 -0
  33. package/dist/components/select/select-shared.d.ts +64 -0
  34. package/dist/components/select/select-shared.js +24 -0
  35. package/dist/components/select/select-tree-filter.d.ts +61 -0
  36. package/dist/components/select/select-tree-filter.js +63 -0
  37. package/dist/components/select/select-tree.d.ts +274 -0
  38. package/dist/components/select/select-tree.js +263 -0
  39. package/dist/components/select/select-trigger.d.ts +132 -0
  40. package/dist/components/select/select-trigger.js +101 -0
  41. package/dist/components/steps/index.d.ts +232 -6
  42. package/dist/components/steps/index.js +84 -26
  43. package/dist/components/switch/index.d.ts +29 -5
  44. package/dist/components/switch/index.js +8 -2
  45. package/dist/components/tabbar/index.d.ts +184 -0
  46. package/dist/components/tabbar/index.js +161 -0
  47. package/dist/components/table/index.d.ts +99 -12
  48. package/dist/components/table/index.js +69 -16
  49. package/dist/components/tabs/index.d.ts +142 -126
  50. package/dist/components/tabs/index.js +87 -119
  51. package/dist/components/tag/index.d.ts +2 -2
  52. package/dist/components/text/index.d.ts +7 -2
  53. package/dist/components/toast/index.d.ts +8 -8
  54. package/dist/components/tree/index.d.ts +28 -2
  55. package/dist/components/tree/index.js +14 -1
  56. package/dist/index.d.ts +6 -6
  57. package/dist/index.js +6 -3
  58. package/dist/styles/components/capsule.css +4 -4
  59. package/dist/styles/components/form.css +198 -39
  60. package/dist/styles/components/input.css +53 -1
  61. package/dist/styles/components/layout.css +2 -0
  62. package/dist/styles/components/select.css +21 -0
  63. package/dist/styles/components/select.tokens.css +3 -0
  64. package/dist/styles/components/steps.css +48 -0
  65. package/dist/styles/components/{tabs.css → tabbar.css} +66 -65
  66. package/dist/styles/components/tabbar.tokens.css +30 -0
  67. package/dist/styles/components/table.css +50 -1
  68. package/dist/styles/components/table.tokens.css +3 -0
  69. package/dist/styles/index.css +3 -3
  70. package/dist/styles/operations/tabs.css +73 -0
  71. package/package.json +2 -2
  72. package/dist/components/tabset/index.d.ts +0 -109
  73. package/dist/components/tabset/index.js +0 -75
  74. package/dist/styles/components/tabs.tokens.css +0 -30
  75. package/dist/styles/operations/tabset.css +0 -57
package/README.md CHANGED
@@ -58,14 +58,14 @@ import { Card, Form, Tree, Checkbox } from '@manohub/ui'
58
58
  | 容器与分区 | `Page`(页面级骨架:`.Header` / `.Body` / `.Footer` / `.Filter` / `.Toolbar` / `.Split`)、`Panel`(+ `.Header` / `.Body` / `.Footer`)、`Card`(+ 三件)、`Nav`、`Layout`(`Layout.Row` 排「行」/ `Layout.Column` 排「列」:轴向 × 间距档 × 对齐) |
59
59
  | 数据展示 | `Tree`、`ListView`(+ `.CardItem`)、`Badge`、`Tag`(常规 / 状态 / 可选 / 新增 / 筛选片) |
60
60
  | 展示 | `Avatar`(+ `.Group`)、`Skeleton`(行 / 列表 / 块状) |
61
- | 表单基础(**自绘**) | `Button`(+ `.Group` / `.Divider`;五型 / 小号 / 加载 / 菜单按钮 / 连体切换)、`Input`(+ `.Group` / `.Chip` / `.Display` / `.Textarea`;清除 / 可见性切换 / 校验)、`Search`(搜索框:值 / 搜索 / 清空三条回调)、`Select`(单选 / 多选 / 搜索 / 加载;面板用原生 popover)、`Switch`(表格档 / 表单档) |
62
- | 表单与选择 | `Form`(+ `.Header` / `.Item`;标签体系、成员归位、`v-model` 值收集与命令式 `clear()`)、`Filter`(+ `.Item`;`Form` 的壳:条件字段写成子件、控件自放、查询/重置与快照归一)、`Checkbox`、`Radio`(+ `.Group` / `.Card`;卡片式单选)、`Capsule`(胶囊选择器;胶囊 / 方形两档外形,与 `Tabset` 组合即页签) |
61
+ | 表单基础(**自绘**) | `Button`(+ `.Group` / `.Divider`;五型 / 小号 / 加载 / 菜单按钮 / 连体切换)、`Input`(+ `.Group` / `.Chip` / `.Display` / `.Textarea`;清除 / 可见性切换 / 校验)、`Search`(搜索框:值 / 搜索 / 清空三条回调)、`Select`(单选 / 多选 / 搜索 / 加载;面板用原生 popover)、`SelectTree`(树形态:仅叶子可选 + 本地过滤 + 命中高亮;与 `Select` 平级导出、共用触发器与面板)、`Switch`(表格档 / 表单档) |
62
+ | 表单与选择 | `Form`(+ `.Header` / `.Item`;标签体系、成员归位、`v-model` 值收集与命令式 `clear()`)、`Filter`(+ `.Item`;`Form` 的壳:条件字段写成子件、控件自放、查询/重置与快照归一)、`Checkbox`、`Radio`(+ `.Group` / `.Card`;卡片式单选)、`Capsule`(胶囊选择器;胶囊 / 方形两档外形,与 `Tabs` 组合即页签) |
63
63
  | 反馈与三态 | `Notice`(条状提示)、`Notification`(通知卡:标题 + 头像 / 标签 / 操作 / 关闭位)、`QueryState`(三态容器;内建空 / 错误插画取自设计交付的四张 SVG,原样内联在 `src/utils/state-illustration.ts`)、`Loading`(转圈 + 遮罩:行内 / 区域 / 全屏三形态) |
64
64
  | 反馈与引导(**自绘**) | `Toast`(消息提示:语义四档 / loading + 可选动作 + 自动消失计时 + `.Stack` 堆叠)、`Steps`(步骤条:节点式 / 燕尾段式 / `.Progress` 进度条) |
65
- | 数据展示(**自绘**) | `Table`(列 × 数据 + 选择列 + 排序事件 + 固定表头 / 固定列 + 批量栏 / 合计行;排序与列宽拖拽算法归调用方)、`Pagination`(总数 / 每页条数 / 页码窗口 / 简单档 / 外框档)、`Tabs`(下划线页签 + 「更多」收纳) |
65
+ | 数据展示(**自绘**) | `Table`(列 × 数据 + 选择列 + 排序事件 + 固定表头 / 固定列 + 批量栏 / 合计行;排序与列宽拖拽算法归调用方)、`Pagination`(总数 / 每页条数 / 页码窗口 / 简单档 / 外框档)、`TabBar`(下划线页签 + 「更多」收纳) |
66
66
  | 内容与文件 | `Code`(行内 chip / 代码块 + 语言角标 + 图标复制位,**只读展示**)、`CodeEditor`(等宽多行可编辑代码区:按行自适应 / 限高内滚 / 只读、禁用)、`Upload`(+ `.Thumbs`;拖拽 / 点击上传区 + 已传文件列表) |
67
67
  | 浮层(**自绘**) | `Dialog`(原生 `<dialog>` + 模态皮肤;关闭受控)、`Tooltip`(**零 JS**:显隐与定位全走操作层 hover 档) |
68
- | 操作层(零 JS 原语) | `Collapse`(+ `.Stack`)、`Tabset`;浮层只提供样式层(`styles/operations/popup.css`,零 JS 可直接用),Vue 浮层仍用 farris 适配件 |
68
+ | 操作层(跨件原语) | `Collapse`(+ `.Stack`)、`Tabs`(+ `TabPanel`,面板切换骨架 —— 显隐归组件层,非零 JS 原语);浮层只提供样式层(`styles/operations/popup.css`,零 JS 可直接用),Vue 浮层仍用 farris 适配件 |
69
69
 
70
70
  ## 三态的操作按钮
71
71
 
@@ -7,6 +7,11 @@ import type { ControlSize } from '../control-size';
7
7
  * `danger` 保留在枚举里是**向后兼容**:它等价于 `variant="primary"` 叠加 `danger` 布尔,
8
8
  * 语义上「危险」是色彩角色(与主色正交),不是第六种结构形态 ——
9
9
  * 故新代码请用 `danger` 布尔修饰任意型,`variant="danger"` 只在旧调用点继续有效。
10
+ *
11
+ * `text` 与 `link` 都是无底色档,但**语义不同,别混**:
12
+ * `text` = 「行内文本操作」(编辑 / 删除 / 更多 / 展开,无下划线);
13
+ * `link` = 「跳转语义」(带下划线,像超链接)。
14
+ *「行内可点文字」一律用它 → `text`。
10
15
  */
11
16
  export type ButtonVariant = 'primary' | 'secondary' | 'dashed' | 'danger' | 'text' | 'link' | 'icon' | 'off';
12
17
  /** 外形档:`round` = 胶囊;`circle` = 正圆(配 `variant="icon"` 用) */
@@ -28,6 +33,7 @@ export type ButtonShape = 'default' | 'round' | 'circle';
28
33
  * @example 六型
29
34
  * <Button variant="primary" onClick={save}>保存</Button>
30
35
  * <Button variant="secondary">取消</Button>
36
+ * <Button variant="text">编辑</Button>
31
37
  * <Button variant="link">查看详情</Button>
32
38
  *
33
39
  * @example 修饰叠加
@@ -212,7 +218,7 @@ export declare const Button: import("vue").DefineComponent<import("vue").Extract
212
218
  }>> & Readonly<{}>, {
213
219
  block: boolean;
214
220
  size: ControlSize;
215
- icon: "filter" | "copy" | "help" | "table" | "menu" | "search" | "link" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
221
+ icon: "search" | "link" | "filter" | "copy" | "help" | "table" | "menu" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
216
222
  menu: boolean;
217
223
  caret: boolean;
218
224
  disabled: boolean;
@@ -223,7 +229,7 @@ export declare const Button: import("vue").DefineComponent<import("vue").Extract
223
229
  variant: ButtonVariant;
224
230
  danger: boolean;
225
231
  shape: ButtonShape;
226
- trailingIcon: "filter" | "copy" | "help" | "table" | "menu" | "search" | "link" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
232
+ trailingIcon: "search" | "link" | "filter" | "copy" | "help" | "table" | "menu" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
227
233
  href: string;
228
234
  target: string;
229
235
  popoverTarget: string;
@@ -319,7 +325,7 @@ export declare const ButtonCompound: {
319
325
  }>> & Readonly<{}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, import("vue").PublicProps, {
320
326
  block: boolean;
321
327
  size: ControlSize;
322
- icon: "filter" | "copy" | "help" | "table" | "menu" | "search" | "link" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
328
+ icon: "search" | "link" | "filter" | "copy" | "help" | "table" | "menu" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
323
329
  menu: boolean;
324
330
  caret: boolean;
325
331
  disabled: boolean;
@@ -330,7 +336,7 @@ export declare const ButtonCompound: {
330
336
  variant: ButtonVariant;
331
337
  danger: boolean;
332
338
  shape: ButtonShape;
333
- trailingIcon: "filter" | "copy" | "help" | "table" | "menu" | "search" | "link" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
339
+ trailingIcon: "search" | "link" | "filter" | "copy" | "help" | "table" | "menu" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
334
340
  href: string;
335
341
  target: string;
336
342
  popoverTarget: string;
@@ -431,7 +437,7 @@ export declare const ButtonCompound: {
431
437
  }>> & Readonly<{}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, {
432
438
  block: boolean;
433
439
  size: ControlSize;
434
- icon: "filter" | "copy" | "help" | "table" | "menu" | "search" | "link" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
440
+ icon: "search" | "link" | "filter" | "copy" | "help" | "table" | "menu" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
435
441
  menu: boolean;
436
442
  caret: boolean;
437
443
  disabled: boolean;
@@ -442,7 +448,7 @@ export declare const ButtonCompound: {
442
448
  variant: ButtonVariant;
443
449
  danger: boolean;
444
450
  shape: ButtonShape;
445
- trailingIcon: "filter" | "copy" | "help" | "table" | "menu" | "search" | "link" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
451
+ trailingIcon: "search" | "link" | "filter" | "copy" | "help" | "table" | "menu" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
446
452
  href: string;
447
453
  target: string;
448
454
  popoverTarget: string;
@@ -537,7 +543,7 @@ export declare const ButtonCompound: {
537
543
  }>> & Readonly<{}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, {
538
544
  block: boolean;
539
545
  size: ControlSize;
540
- icon: "filter" | "copy" | "help" | "table" | "menu" | "search" | "link" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
546
+ icon: "search" | "link" | "filter" | "copy" | "help" | "table" | "menu" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
541
547
  menu: boolean;
542
548
  caret: boolean;
543
549
  disabled: boolean;
@@ -548,7 +554,7 @@ export declare const ButtonCompound: {
548
554
  variant: ButtonVariant;
549
555
  danger: boolean;
550
556
  shape: ButtonShape;
551
- trailingIcon: "filter" | "copy" | "help" | "table" | "menu" | "search" | "link" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
557
+ trailingIcon: "search" | "link" | "filter" | "copy" | "help" | "table" | "menu" | "delete" | "image" | "close" | "key" | "page-title" | "loading" | "info" | "alert" | "chevron-left" | "chevron-right" | "chevron-down" | "chevron-up" | "check" | "user" | "download" | "back" | "folder" | "folder-open" | "file" | "file-code" | "file-json" | "file-text" | "terminal" | "shield" | "tool" | "plus" | "notification" | "settings" | "logout" | "home" | "workbench" | "apps" | "favorite" | "favorite-filled" | "drag-handle" | "edit" | "refresh" | "upload" | "save" | "more" | "preview" | "external-link" | "minus" | "plus-circle" | "close-circle" | "list" | "calendar" | "clock" | "lock" | "unlock" | "users" | "archive" | "package" | "plug" | "branch" | "tag" | "ai" | "shield-check" | "shield-alert" | "history";
552
558
  href: string;
553
559
  target: string;
554
560
  popoverTarget: string;
@@ -25,15 +25,16 @@ export type CapsuleShape = 'pill' | 'square';
25
25
  *
26
26
  * ## 与面板组合(页签用法)
27
27
  *
28
- * 外面套 `styles/operations/tabset.css` 的 `.mh-tabset`:**同一组 `name` 的 radio** 既是本件的选项、
29
- * 也是操作层的档位开关(第 n 项 ↔ 第 n 块面板)。本件不认识 tabset,tabset 也不认识本件(两层零互指)。
28
+ * 塞进 `Tabs` 的 `selector` 插槽即可:本件的 `onChange` 把选中值递给 `Tabs` 的 `select`,
29
+ * 面板显隐由 `Tabs` 按受控值下发 `hidden`。本件不认识 tabs,tabs 也不认识本件(两层零互指)。
30
+ * 故**不必**为了组合而给它 `name`(组名不传即按实例自动生成)。
30
31
  *
31
32
  * 状态三源等价:原生 `input:checked` / 组件下发 `[data-state='active'|'inactive']` / 静态档 `.is-selected`。
32
33
  *
33
34
  * ## 必须有值
34
35
  *
35
36
  * 单选语义就是必选其一:受控传 `modelValue`,非受控由 `defaultValue` 起,**两者都没给时缺省选中第一个
36
- * 可选项**(跳过禁用项;没有可选项才是空值)—— 与 `Radio.Group` / `Radio.Card` / `Tabset` 同一条口径。
37
+ * 可选项**(跳过禁用项;没有可选项才是空值)—— 与 `Radio.Group` / `Radio.Card` / `Tabs` 同一条口径。
37
38
  *
38
39
  * @example 选项表
39
40
  * <Capsule :options="[{label:'全部',value:'all'}]" v-model="v" />
@@ -42,10 +43,13 @@ export type CapsuleShape = 'pill' | 'square';
42
43
  * <Capsule shape="square" :options="[{label:'全部',value:'all'}]" v-model="v" />
43
44
  *
44
45
  * @example 与面板组合(页签)
45
- * <div class="mh-tabset">
46
- * <Capsule name="t1" :options="tabs" v-model="v" />
47
- * <div class="mh-tabset-panels">…第 n 块面板…</div>
48
- * </div>
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>
49
53
  */
50
54
  export declare const Capsule: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
51
55
  /** 选项表(也可用默认插槽自排) */
@@ -63,7 +67,7 @@ export declare const Capsule: import("vue").DefineComponent<import("vue").Extrac
63
67
  type: PropType<string | number | undefined>;
64
68
  default: undefined;
65
69
  };
66
- /** 原生分组名(与 tabset 组合时**必须**给,操作层靠它认组;缺省自动生成) */
70
+ /** 原生分组名(同名才互斥;不传即按实例自动生成) */
67
71
  name: {
68
72
  type: StringConstructor;
69
73
  default: undefined;
@@ -111,7 +115,7 @@ export declare const Capsule: import("vue").DefineComponent<import("vue").Extrac
111
115
  type: PropType<string | number | undefined>;
112
116
  default: undefined;
113
117
  };
114
- /** 原生分组名(与 tabset 组合时**必须**给,操作层靠它认组;缺省自动生成) */
118
+ /** 原生分组名(同名才互斥;不传即按实例自动生成) */
115
119
  name: {
116
120
  type: StringConstructor;
117
121
  default: undefined;
@@ -18,7 +18,7 @@ const Capsule = /* @__PURE__ */ defineComponent({
18
18
  type: [String, Number],
19
19
  default: void 0
20
20
  },
21
- /** 原生分组名(与 tabset 组合时**必须**给,操作层靠它认组;缺省自动生成) */
21
+ /** 原生分组名(同名才互斥;不传即按实例自动生成) */
22
22
  name: {
23
23
  type: String,
24
24
  default: void 0
@@ -13,7 +13,7 @@ export type CardHeaderIcon = string | (() => VNodeChild);
13
13
  * 也不得在应用侧写这四类属性 —— 需要不同形态就用本件的维度(`variant` / `interactive` /
14
14
  * `selected` / `disabled`),或提为骨架层待建件。
15
15
  *
16
- * ## 几何来源(portal 技能市场卡片实测,逐项落 `--ui-*` 令牌)
16
+ * ## 几何来源(技能市场卡片实测,逐项落 `--ui-*` 令牌)
17
17
  *
18
18
  * - 圆角 8(`--ui-radius-md`)、内距 20(`--mh-card-padding`,原型 `p-5`)
19
19
  * - 底 `--ui-base-100`、弱描边 `--ui-base-300`(原型 `border-border`)
@@ -36,7 +36,10 @@ function renderHeaderParts(parts) {
36
36
  }, [parts.extra])];
37
37
  }
38
38
  const mergeSegmentStyle = (attrsStyle, padding) => {
39
- if (padding === void 0) return attrsStyle;
39
+ if (padding === void 0 || padding === "") return attrsStyle;
40
+ if (typeof padding === "string") return [attrsStyle, {
41
+ padding
42
+ }];
40
43
  const y = typeof padding === "number" ? padding : padding.y;
41
44
  const x = typeof padding === "number" ? padding : padding.x;
42
45
  const style = {};
@@ -54,7 +57,7 @@ const CardHeader = /* @__PURE__ */ defineComponent({
54
57
  props: {
55
58
  /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
56
59
  padding: {
57
- type: [Number, Object],
60
+ type: [Number, Object, String],
58
61
  default: void 0
59
62
  },
60
63
  /** 图标:图片地址或返回节点的函数(图标一律来自 `@manohub/icon`) */
@@ -96,7 +99,7 @@ const CardBody = /* @__PURE__ */ defineComponent({
96
99
  props: {
97
100
  /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
98
101
  padding: {
99
- type: [Number, Object],
102
+ type: [Number, Object, String],
100
103
  default: void 0
101
104
  }
102
105
  },
@@ -117,7 +120,7 @@ const CardFooter = /* @__PURE__ */ defineComponent({
117
120
  props: {
118
121
  /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
119
122
  padding: {
120
- type: [Number, Object],
123
+ type: [Number, Object, String],
121
124
  default: void 0
122
125
  }
123
126
  },
@@ -63,6 +63,7 @@ const Checkbox = /* @__PURE__ */ defineComponent({
63
63
  const state = props.indeterminate ? "indeterminate" : props.modelValue ? "checked" : "unchecked";
64
64
  return createVNode("label", {
65
65
  "class": ["mh-checkbox", props.size === "md" ? "" : `mh-checkbox--${props.size}`, props.disabled ? "is-disabled" : "", attrs.class].filter(Boolean).join(" "),
66
+ "data-inline-control": "true",
66
67
  "style": attrs.style
67
68
  }, [createVNode("input", mergeProps(inputAttrs.value, {
68
69
  "ref": inputRef,
@@ -256,8 +256,8 @@ export declare const Dialog: import("vue").DefineComponent<import("vue").Extract
256
256
  onCancel: () => void;
257
257
  onClose: () => void;
258
258
  width: number | DialogWidth;
259
- tone: DialogTone;
260
259
  closable: boolean;
260
+ tone: DialogTone;
261
261
  closeOnBackdrop: boolean;
262
262
  maskClosable: boolean;
263
263
  keyboard: boolean;