@manohub/ui 0.10.5 → 1.0.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 (70) hide show
  1. package/README.md +155 -155
  2. package/dist/components/form/index.js +8 -1
  3. package/dist/styles/components/avatar.css +131 -131
  4. package/dist/styles/components/avatar.tokens.css +24 -24
  5. package/dist/styles/components/badge.css +266 -266
  6. package/dist/styles/components/badge.tokens.css +24 -24
  7. package/dist/styles/components/button.css +460 -460
  8. package/dist/styles/components/capsule.css +128 -128
  9. package/dist/styles/components/capsule.tokens.css +27 -27
  10. package/dist/styles/components/card.css +198 -198
  11. package/dist/styles/components/checkbox.css +145 -145
  12. package/dist/styles/components/checkbox.tokens.css +26 -26
  13. package/dist/styles/components/code-block.css +216 -216
  14. package/dist/styles/components/code-block.tokens.css +40 -40
  15. package/dist/styles/components/collapse.css +62 -62
  16. package/dist/styles/components/collapse.tokens.css +20 -20
  17. package/dist/styles/components/dialog.css +158 -158
  18. package/dist/styles/components/dialog.tokens.css +24 -24
  19. package/dist/styles/components/divider.css +75 -75
  20. package/dist/styles/components/divider.tokens.css +22 -22
  21. package/dist/styles/components/drawer.css +143 -143
  22. package/dist/styles/components/drawer.tokens.css +22 -22
  23. package/dist/styles/components/filter.css +29 -29
  24. package/dist/styles/components/form.css +442 -425
  25. package/dist/styles/components/form.tokens.css +15 -15
  26. package/dist/styles/components/input.css +538 -538
  27. package/dist/styles/components/input.tokens.css +43 -43
  28. package/dist/styles/components/layout.css +200 -200
  29. package/dist/styles/components/list-view.css +244 -244
  30. package/dist/styles/components/loading.css +76 -76
  31. package/dist/styles/components/loading.tokens.css +23 -23
  32. package/dist/styles/components/nav.css +48 -48
  33. package/dist/styles/components/notice.css +153 -153
  34. package/dist/styles/components/notice.tokens.css +17 -17
  35. package/dist/styles/components/notification.css +159 -159
  36. package/dist/styles/components/notification.tokens.css +37 -37
  37. package/dist/styles/components/page.css +473 -473
  38. package/dist/styles/components/pagination.css +303 -303
  39. package/dist/styles/components/pagination.tokens.css +32 -32
  40. package/dist/styles/components/panel.css +77 -77
  41. package/dist/styles/components/query-state.css +88 -88
  42. package/dist/styles/components/radio.css +271 -271
  43. package/dist/styles/components/radio.tokens.css +26 -26
  44. package/dist/styles/components/search.css +34 -34
  45. package/dist/styles/components/select.css +326 -326
  46. package/dist/styles/components/select.tokens.css +44 -44
  47. package/dist/styles/components/skeleton.css +60 -60
  48. package/dist/styles/components/skeleton.tokens.css +27 -27
  49. package/dist/styles/components/steps.css +205 -205
  50. package/dist/styles/components/steps.tokens.css +44 -44
  51. package/dist/styles/components/switch.css +165 -165
  52. package/dist/styles/components/switch.tokens.css +26 -26
  53. package/dist/styles/components/tabbar.css +235 -235
  54. package/dist/styles/components/tabbar.tokens.css +30 -30
  55. package/dist/styles/components/table.css +504 -504
  56. package/dist/styles/components/table.tokens.css +44 -44
  57. package/dist/styles/components/tag.css +127 -127
  58. package/dist/styles/components/tag.tokens.css +24 -24
  59. package/dist/styles/components/toast.css +185 -185
  60. package/dist/styles/components/toast.tokens.css +26 -26
  61. package/dist/styles/components/tooltip.css +89 -89
  62. package/dist/styles/components/tooltip.tokens.css +25 -25
  63. package/dist/styles/components/tree.css +173 -173
  64. package/dist/styles/components/upload.css +151 -151
  65. package/dist/styles/components/upload.tokens.css +27 -27
  66. package/dist/styles/index.css +153 -153
  67. package/dist/styles/operations/collapse.css +84 -84
  68. package/dist/styles/operations/popup.css +193 -193
  69. package/dist/styles/operations/tabs.css +82 -82
  70. package/package.json +62 -62
@@ -1,27 +1,27 @@
1
- /**
2
- * upload —— 单件令牌(**基础值**)。
3
- *
4
- * 本件自己的几何 / 尺寸 / 色彩槽位;只服务本件,故不随主题进 `@manohub/theme`。
5
- *
6
- * ## 抽出说明
7
- * 本文件从面文件里抽出(原先混写在 `upload.css` 顶部):这些是**基础值**,锚在
8
- * `[data-manohub-ui]` —— 跨包唯一作用域锚,由入口层无条件写在应用容器上,因此**任何落在
9
- * 容器里的分件都取得到值**,不再依赖「声明在某个组件根类上」这条脆弱假设
10
- * (历史症状:跨件消费的 `--ui-*-group-*` 取不到值,组内间距变 0)。
11
- *
12
- * ⚠️ `.mh-<件>--<档>` 这类**档位改写**留在面文件的修饰符块里 —— 它们靠「同一元素上两个
13
- * 选择器改写同一个令牌」生效,搬到本文件会让档位失效。
14
- * ⚠️ 新增组件要登记两处:本文件 + `src/styles/index.css`(见其文件头「五处齐备」)。
15
- */
16
- [data-manohub-ui] {
17
- /* 单件令牌 */
18
- --ui-upload-padding: 32px; /* 规范间距档 8(本仓间距刻度最大 24,故按实测值给) */
19
- --ui-upload-zone-max-width: 500px; /* 规范拖拽区帧宽 */
20
- --ui-upload-radius: var(--ui-radius-control);
21
- --ui-upload-line: var(--ui-line-dashed); /* 虚线边:取线型档(口径「实线 base-300 / 虚线 base-400」) */
22
- --ui-upload-text: var(--ui-base-content-muted); /* 主提示 Te05 */
23
- --ui-upload-hint: var(--ui-base-content-subtle); /* 副提示 Te07 */
24
- --ui-upload-meta-size: var(--ui-font-caption); /* 大小/缩略图文字:规范 12,本仓字阶最小 13 */
25
- --ui-upload-thumb-size: 100px; /* 规范缩略图外框 */
26
- --ui-upload-thumb-inner: 84px; /* 规范内图 */
27
- }
1
+ /**
2
+ * upload —— 单件令牌(**基础值**)。
3
+ *
4
+ * 本件自己的几何 / 尺寸 / 色彩槽位;只服务本件,故不随主题进 `@manohub/theme`。
5
+ *
6
+ * ## 抽出说明
7
+ * 本文件从面文件里抽出(原先混写在 `upload.css` 顶部):这些是**基础值**,锚在
8
+ * `[data-manohub-ui]` —— 跨包唯一作用域锚,由入口层无条件写在应用容器上,因此**任何落在
9
+ * 容器里的分件都取得到值**,不再依赖「声明在某个组件根类上」这条脆弱假设
10
+ * (历史症状:跨件消费的 `--ui-*-group-*` 取不到值,组内间距变 0)。
11
+ *
12
+ * ⚠️ `.mh-<件>--<档>` 这类**档位改写**留在面文件的修饰符块里 —— 它们靠「同一元素上两个
13
+ * 选择器改写同一个令牌」生效,搬到本文件会让档位失效。
14
+ * ⚠️ 新增组件要登记两处:本文件 + `src/styles/index.css`(见其文件头「五处齐备」)。
15
+ */
16
+ [data-manohub-ui] {
17
+ /* 单件令牌 */
18
+ --ui-upload-padding: 32px; /* 规范间距档 8(本仓间距刻度最大 24,故按实测值给) */
19
+ --ui-upload-zone-max-width: 500px; /* 规范拖拽区帧宽 */
20
+ --ui-upload-radius: var(--ui-radius-control);
21
+ --ui-upload-line: var(--ui-line-dashed); /* 虚线边:取线型档(口径「实线 base-300 / 虚线 base-400」) */
22
+ --ui-upload-text: var(--ui-base-content-muted); /* 主提示 Te05 */
23
+ --ui-upload-hint: var(--ui-base-content-subtle); /* 副提示 Te07 */
24
+ --ui-upload-meta-size: var(--ui-font-caption); /* 大小/缩略图文字:规范 12,本仓字阶最小 13 */
25
+ --ui-upload-thumb-size: 100px; /* 规范缩略图外框 */
26
+ --ui-upload-thumb-inner: 84px; /* 规范内图 */
27
+ }
@@ -1,153 +1,153 @@
1
- /**
2
- * @manohub/ui 组件面入口(对外公开为 `@manohub/ui/styles.css`)。
3
- *
4
- * 本层是**无 JS 组件面**:只声明类与状态协议(原生伪类 / `[data-state]` / `attr()`),
5
- * **零令牌定义** —— 令牌一律消费主题。故加载顺序固定:
6
- *
7
- * @manohub/theme/default.css(全局值) → styles.css(组件令牌基础值 → 面)
8
- *
9
- * 换主题只换前一行;静态页(不装 Vue)同样只需这两行。
10
- *
11
- * ## 令牌三段(0.6.0 起)
12
- *
13
- * | 段 | 命名 | 落点 | 锚 |
14
- * |---|---|---|---|
15
- * | 全局令牌(跨件共用的值) | `--ui-{primary,base-*,space-*,radius-*,shadow-*,font-*}`、尺寸档(`--ui-control-height-*` / `--ui-mark-height-*`)、线型档(`--ui-line-dashed`) | `@manohub/theme` | `[data-manohub-ui]` |
16
- * | 组件令牌**基础值** | `--ui-<件>-*` | 本目录同名 `<件>.tokens.css` | `[data-manohub-ui]` |
17
- * | 组件令牌**档位改写** | `--ui-<件>-*` | 面文件 `<件>.css` 的**修饰符块** | `.mh-<件>--<档>` 等 |
18
- * | 内部状态变量 | `--mh-<件>-*` | 面文件(修饰符机制本身) | 组件根类 / 修饰符类 |
19
- *
20
- * 后两段必须留在面里:它们靠「同一元素上两个不同选择器改写同一个令牌」生效
21
- * (`.mh-capsule { --ui-capsule-height: 32px }` + `.mh-capsule--sm { … 24px }`),
22
- * 拆到两个文件里档位就会失效。
23
- *
24
- * 基础值锚在 `[data-manohub-ui]`(**跨包唯一作用域锚**:一个库品牌属性,由入口层
25
- * `createSubApp` 无条件写在应用容器上)—— 容器是每个组件的祖先,于是
26
- * 「跨件消费的令牌取不到值」那一整类静默失效从根上消失
27
- * (历史症状:组内间距变 0、组内分割线高度 0、面板圆角 0;改前靠「把令牌同时声明在
28
- * 若干个外层类上」的 workaround 兜)。
29
- *
30
- * ⚠️ 组件 CSS **不得**用 `import './x.css'` 副作用引入(会让 dist 的 .d.ts 留下消费方解析不了的
31
- * CSS 导入,且被 verify-pack 拦);样式只经本文件汇总,由消费方的样式链级联进来。
32
- *
33
- * ⚠️ **本文件的注释里不得出现 `**` 紧跟斜杠的 glob 写法**(如写 `dist` 下的产物时)——
34
- * 那个序列会被解析成注释结束符,把注释提前闭合、**后面所有 @import 一起失效**(浏览器里表现为
35
- * 本文件 0 条规则,组件面全丢)。护栏 `contract-class-surface.spec.ts` 有机械检查。
36
- *
37
- * ⚠️ 新增组件**五处齐备**(少一处即静默失效):
38
- * `components/<件>/index.tsx` + `styles/components/<件>.css` + `styles/components/<件>.tokens.css`
39
- * + 在本文件登记两条 `@import`(值区与面区各一条)+ `src/index.ts` 加导出
40
- *
41
- * 归属判据:只服务单一组件的几何令牌写在该组件的 `<件>.tokens.css`(锚容器);
42
- * 跨件共用的值一律进 `@manohub/theme`;面上的 `--ui-*` 只允许出现在**修饰符块**里
43
- * (护栏会拦「面里出现不含修饰符类的 `--ui-*` 声明」)。
44
- *
45
- * 层序:**基线(`./reset.css`,元素级、零特异性)→ 值 → 面**;面内部**操作层在前**(零 JS 原语、规则走 `:where()` 零特异性,
46
- * 永远给皮肤让位),组件面在后。基线只有两面(`box-sizing` + 容器基座)—— 其余元素级声明一律归各组件面:
47
- * 本文件**在 Tailwind 的层外**(未分层 > 分层),多留一条就会压住消费方的工具类(理由见 `reset.css` 文件头)。
48
- */
49
-
50
- /* ===== 基线:元素级 reset(只有盒模型 + 容器基座;先于值 → 面,消费方写任何元素选择器都能盖过它) ===== */
51
- @import './reset.css';
52
-
53
- /* ===== 值:组件令牌基础值(锚 `[data-manohub-ui]`,与主题令牌同层序) ===== */
54
- /* 容器与分区 */
55
- @import './components/collapse.tokens.css';
56
- @import './components/divider.tokens.css';
57
-
58
- /* 数据展示 */
59
- @import './components/tree.tokens.css';
60
- @import './components/badge.tokens.css';
61
- @import './components/tag.tokens.css';
62
- @import './components/avatar.tokens.css';
63
- @import './components/skeleton.tokens.css';
64
- @import './components/code-block.tokens.css';
65
-
66
- /* 表单与选择控件 */
67
- @import './components/button.tokens.css';
68
- @import './components/input.tokens.css';
69
- @import './components/select.tokens.css';
70
- @import './components/switch.tokens.css';
71
- @import './components/form.tokens.css';
72
- @import './components/checkbox.tokens.css';
73
- @import './components/radio.tokens.css';
74
- @import './components/capsule.tokens.css';
75
- /* 筛选条没有自己的令牌:字段区几何一律继承 Form 的默认档 */
76
-
77
- /* 反馈与三态 */
78
- @import './components/notice.tokens.css';
79
- @import './components/notification.tokens.css';
80
- @import './components/loading.tokens.css';
81
-
82
- /* 浮层皮肤 */
83
- @import './components/dialog.tokens.css';
84
- @import './components/drawer.tokens.css';
85
- @import './components/tooltip.tokens.css';
86
-
87
- /* 数据与反馈 */
88
- @import './components/table.tokens.css';
89
- @import './components/pagination.tokens.css';
90
- @import './components/tabbar.tokens.css';
91
- @import './components/steps.tokens.css';
92
- @import './components/toast.tokens.css';
93
-
94
- /* 内容与文件 */
95
- @import './components/upload.tokens.css';
96
-
97
- /* ===== 面:零令牌定义,只声明类与状态协议 ===== */
98
- /* 操作层(零 JS 原语,自身不带面;面由下面的皮肤族并列组合提供) */
99
- @import './operations/collapse.css';
100
- @import './operations/popup.css';
101
- @import './operations/tabs.css';
102
-
103
- /* 容器与分区 */
104
- @import './components/page.css'; /* 页面级骨架(唯一;区域级是 Panel) */
105
- @import './components/panel.css';
106
- @import './components/collapse.css'; /* Collapse 的头行皮肤(行为在 operations/collapse.css) */
107
- @import './components/card.css';
108
- @import './components/divider.css'; /* 内容之间的分隔线(设计稿内容区 44 处在用;不是各件自己的框线) */
109
- @import './components/nav.css';
110
- @import './components/layout.css'; /* 布局原子件族(Layout.Row 排「行」/ Layout.Column 排「列」);与任何件都无层序耦合 */
111
- @import './components/text.css'; /* 排版原子件:`--ui-font-*` 档位令牌的第一个消费者;叶子件,与任何件都无层序耦合 */
112
-
113
- /* 数据展示 */
114
- @import './components/tree.css';
115
- @import './components/list-view.css';
116
- @import './components/badge.css';
117
- @import './components/tag.css';
118
- @import './components/avatar.css';
119
- @import './components/skeleton.css';
120
- @import './components/code-block.css'; /* 代码块族(只读面 / 编辑面 / 角标 / 复制位;复制按钮的面归按钮族,故在其后);面里靠升一档特异性压过按钮族,见其文件头 */
121
-
122
- /* 表单与选择控件(按钮 → 输入 → 选择 → 开关 → 勾选 → 单选(两形态同面)→ 胶囊) */
123
- @import './components/button.css';
124
- @import './components/input.css';
125
- @import './components/search.css'; /* 搜索框:只有「一行里怎么摆」,输入框与按钮的面各自归族(故必须排在 input.css 之后) */
126
- @import './components/select.css';
127
- @import './components/switch.css';
128
- @import './components/form.css';
129
- @import './components/checkbox.css';
130
- @import './components/radio.css'; /* 单选一件两形态(`.Group` / `.Card`)同一个面文件 */
131
- @import './components/capsule.css';
132
- @import './components/filter.css'; /* 筛选条:**零规则**(字段排布与几何全部沿用 Form,本文件只留说明;见其文件头) */
133
-
134
- /* 反馈与三态 */
135
- @import './components/notice.css';
136
- @import './components/notification.css'; /* 通知卡(与 notice 条状提示是两族,前缀刻意不同) */
137
- @import './components/query-state.css';
138
- @import './components/loading.css'; /* 加载态(转圈 + 遮罩):三态容器看 QueryState,块级占位看 Skeleton */
139
-
140
- /* 浮层皮肤(与操作层并列组合:对话框走原生 <dialog>,提示走 hover 档) */
141
- @import './components/dialog.css';
142
- @import './components/drawer.css'; /* 抽屉:与 dialog 同一套行为只换落位(模态 / 遮罩 / Esc 都由原生 <dialog> 承担) */
143
- @import './components/tooltip.css'; /* 浮层皮肤:类名 .mh-tooltip*(与族名 / 令牌同根) */
144
-
145
- /* 数据与反馈(表格 / 分页条 / 页签条 / 步骤条 / 消息提示) */
146
- @import './components/table.css';
147
- @import './components/pagination.css';
148
- @import './components/tabbar.css';
149
- @import './components/steps.css';
150
- @import './components/toast.css';
151
-
152
- /* 内容与文件 */
153
- @import './components/upload.css';
1
+ /**
2
+ * @manohub/ui 组件面入口(对外公开为 `@manohub/ui/styles.css`)。
3
+ *
4
+ * 本层是**无 JS 组件面**:只声明类与状态协议(原生伪类 / `[data-state]` / `attr()`),
5
+ * **零令牌定义** —— 令牌一律消费主题。故加载顺序固定:
6
+ *
7
+ * @manohub/theme/default.css(全局值) → styles.css(组件令牌基础值 → 面)
8
+ *
9
+ * 换主题只换前一行;静态页(不装 Vue)同样只需这两行。
10
+ *
11
+ * ## 令牌三段(0.6.0 起)
12
+ *
13
+ * | 段 | 命名 | 落点 | 锚 |
14
+ * |---|---|---|---|
15
+ * | 全局令牌(跨件共用的值) | `--ui-{primary,base-*,space-*,radius-*,shadow-*,font-*}`、尺寸档(`--ui-control-height-*` / `--ui-mark-height-*`)、线型档(`--ui-line-dashed`) | `@manohub/theme` | `[data-manohub-ui]` |
16
+ * | 组件令牌**基础值** | `--ui-<件>-*` | 本目录同名 `<件>.tokens.css` | `[data-manohub-ui]` |
17
+ * | 组件令牌**档位改写** | `--ui-<件>-*` | 面文件 `<件>.css` 的**修饰符块** | `.mh-<件>--<档>` 等 |
18
+ * | 内部状态变量 | `--mh-<件>-*` | 面文件(修饰符机制本身) | 组件根类 / 修饰符类 |
19
+ *
20
+ * 后两段必须留在面里:它们靠「同一元素上两个不同选择器改写同一个令牌」生效
21
+ * (`.mh-capsule { --ui-capsule-height: 32px }` + `.mh-capsule--sm { … 24px }`),
22
+ * 拆到两个文件里档位就会失效。
23
+ *
24
+ * 基础值锚在 `[data-manohub-ui]`(**跨包唯一作用域锚**:一个库品牌属性,由入口层
25
+ * `createSubApp` 无条件写在应用容器上)—— 容器是每个组件的祖先,于是
26
+ * 「跨件消费的令牌取不到值」那一整类静默失效从根上消失
27
+ * (历史症状:组内间距变 0、组内分割线高度 0、面板圆角 0;改前靠「把令牌同时声明在
28
+ * 若干个外层类上」的 workaround 兜)。
29
+ *
30
+ * ⚠️ 组件 CSS **不得**用 `import './x.css'` 副作用引入(会让 dist 的 .d.ts 留下消费方解析不了的
31
+ * CSS 导入,且被 verify-pack 拦);样式只经本文件汇总,由消费方的样式链级联进来。
32
+ *
33
+ * ⚠️ **本文件的注释里不得出现 `**` 紧跟斜杠的 glob 写法**(如写 `dist` 下的产物时)——
34
+ * 那个序列会被解析成注释结束符,把注释提前闭合、**后面所有 @import 一起失效**(浏览器里表现为
35
+ * 本文件 0 条规则,组件面全丢)。护栏 `contract-class-surface.spec.ts` 有机械检查。
36
+ *
37
+ * ⚠️ 新增组件**五处齐备**(少一处即静默失效):
38
+ * `components/<件>/index.tsx` + `styles/components/<件>.css` + `styles/components/<件>.tokens.css`
39
+ * + 在本文件登记两条 `@import`(值区与面区各一条)+ `src/index.ts` 加导出
40
+ *
41
+ * 归属判据:只服务单一组件的几何令牌写在该组件的 `<件>.tokens.css`(锚容器);
42
+ * 跨件共用的值一律进 `@manohub/theme`;面上的 `--ui-*` 只允许出现在**修饰符块**里
43
+ * (护栏会拦「面里出现不含修饰符类的 `--ui-*` 声明」)。
44
+ *
45
+ * 层序:**基线(`./reset.css`,元素级、零特异性)→ 值 → 面**;面内部**操作层在前**(零 JS 原语、规则走 `:where()` 零特异性,
46
+ * 永远给皮肤让位),组件面在后。基线只有两面(`box-sizing` + 容器基座)—— 其余元素级声明一律归各组件面:
47
+ * 本文件**在 Tailwind 的层外**(未分层 > 分层),多留一条就会压住消费方的工具类(理由见 `reset.css` 文件头)。
48
+ */
49
+
50
+ /* ===== 基线:元素级 reset(只有盒模型 + 容器基座;先于值 → 面,消费方写任何元素选择器都能盖过它) ===== */
51
+ @import './reset.css';
52
+
53
+ /* ===== 值:组件令牌基础值(锚 `[data-manohub-ui]`,与主题令牌同层序) ===== */
54
+ /* 容器与分区 */
55
+ @import './components/collapse.tokens.css';
56
+ @import './components/divider.tokens.css';
57
+
58
+ /* 数据展示 */
59
+ @import './components/tree.tokens.css';
60
+ @import './components/badge.tokens.css';
61
+ @import './components/tag.tokens.css';
62
+ @import './components/avatar.tokens.css';
63
+ @import './components/skeleton.tokens.css';
64
+ @import './components/code-block.tokens.css';
65
+
66
+ /* 表单与选择控件 */
67
+ @import './components/button.tokens.css';
68
+ @import './components/input.tokens.css';
69
+ @import './components/select.tokens.css';
70
+ @import './components/switch.tokens.css';
71
+ @import './components/form.tokens.css';
72
+ @import './components/checkbox.tokens.css';
73
+ @import './components/radio.tokens.css';
74
+ @import './components/capsule.tokens.css';
75
+ /* 筛选条没有自己的令牌:字段区几何一律继承 Form 的默认档 */
76
+
77
+ /* 反馈与三态 */
78
+ @import './components/notice.tokens.css';
79
+ @import './components/notification.tokens.css';
80
+ @import './components/loading.tokens.css';
81
+
82
+ /* 浮层皮肤 */
83
+ @import './components/dialog.tokens.css';
84
+ @import './components/drawer.tokens.css';
85
+ @import './components/tooltip.tokens.css';
86
+
87
+ /* 数据与反馈 */
88
+ @import './components/table.tokens.css';
89
+ @import './components/pagination.tokens.css';
90
+ @import './components/tabbar.tokens.css';
91
+ @import './components/steps.tokens.css';
92
+ @import './components/toast.tokens.css';
93
+
94
+ /* 内容与文件 */
95
+ @import './components/upload.tokens.css';
96
+
97
+ /* ===== 面:零令牌定义,只声明类与状态协议 ===== */
98
+ /* 操作层(零 JS 原语,自身不带面;面由下面的皮肤族并列组合提供) */
99
+ @import './operations/collapse.css';
100
+ @import './operations/popup.css';
101
+ @import './operations/tabs.css';
102
+
103
+ /* 容器与分区 */
104
+ @import './components/page.css'; /* 页面级骨架(唯一;区域级是 Panel) */
105
+ @import './components/panel.css';
106
+ @import './components/collapse.css'; /* Collapse 的头行皮肤(行为在 operations/collapse.css) */
107
+ @import './components/card.css';
108
+ @import './components/divider.css'; /* 内容之间的分隔线(设计稿内容区 44 处在用;不是各件自己的框线) */
109
+ @import './components/nav.css';
110
+ @import './components/layout.css'; /* 布局原子件族(Layout.Row 排「行」/ Layout.Column 排「列」);与任何件都无层序耦合 */
111
+ @import './components/text.css'; /* 排版原子件:`--ui-font-*` 档位令牌的第一个消费者;叶子件,与任何件都无层序耦合 */
112
+
113
+ /* 数据展示 */
114
+ @import './components/tree.css';
115
+ @import './components/list-view.css';
116
+ @import './components/badge.css';
117
+ @import './components/tag.css';
118
+ @import './components/avatar.css';
119
+ @import './components/skeleton.css';
120
+ @import './components/code-block.css'; /* 代码块族(只读面 / 编辑面 / 角标 / 复制位;复制按钮的面归按钮族,故在其后);面里靠升一档特异性压过按钮族,见其文件头 */
121
+
122
+ /* 表单与选择控件(按钮 → 输入 → 选择 → 开关 → 勾选 → 单选(两形态同面)→ 胶囊) */
123
+ @import './components/button.css';
124
+ @import './components/input.css';
125
+ @import './components/search.css'; /* 搜索框:只有「一行里怎么摆」,输入框与按钮的面各自归族(故必须排在 input.css 之后) */
126
+ @import './components/select.css';
127
+ @import './components/switch.css';
128
+ @import './components/form.css';
129
+ @import './components/checkbox.css';
130
+ @import './components/radio.css'; /* 单选一件两形态(`.Group` / `.Card`)同一个面文件 */
131
+ @import './components/capsule.css';
132
+ @import './components/filter.css'; /* 筛选条:**零规则**(字段排布与几何全部沿用 Form,本文件只留说明;见其文件头) */
133
+
134
+ /* 反馈与三态 */
135
+ @import './components/notice.css';
136
+ @import './components/notification.css'; /* 通知卡(与 notice 条状提示是两族,前缀刻意不同) */
137
+ @import './components/query-state.css';
138
+ @import './components/loading.css'; /* 加载态(转圈 + 遮罩):三态容器看 QueryState,块级占位看 Skeleton */
139
+
140
+ /* 浮层皮肤(与操作层并列组合:对话框走原生 <dialog>,提示走 hover 档) */
141
+ @import './components/dialog.css';
142
+ @import './components/drawer.css'; /* 抽屉:与 dialog 同一套行为只换落位(模态 / 遮罩 / Esc 都由原生 <dialog> 承担) */
143
+ @import './components/tooltip.css'; /* 浮层皮肤:类名 .mh-tooltip*(与族名 / 令牌同根) */
144
+
145
+ /* 数据与反馈(表格 / 分页条 / 页签条 / 步骤条 / 消息提示) */
146
+ @import './components/table.css';
147
+ @import './components/pagination.css';
148
+ @import './components/tabbar.css';
149
+ @import './components/steps.css';
150
+ @import './components/toast.css';
151
+
152
+ /* 内容与文件 */
153
+ @import './components/upload.css';
@@ -1,84 +1,84 @@
1
- /**
2
- * 操作层 · 折叠(零 JS,**只给操作、不给任何面**)。
3
- *
4
- * 出处:`@aihub/theme` 的 `playground/components/collapse.css`(本仓第一处照搬操作层)。
5
- * 映射:`--mh-*` → `--ui-*`;类名加 `.mh-` 前缀;**箭头不再是 CSS 字形**,改由 `@manohub/icon`
6
- * 的 `<Icon name="chevron-down">` 渲染(本层只负责「收起时转向」,不画字形)。
7
- *
8
- * 面与几何一律来自皮肤族类(组合只是「根上并列两个类」):
9
- * 卡片版 = `Card + Collapse`,字段分组版 = 表单分组 + `Collapse`。
10
- * 因此本文件**不落任何色值/尺寸**,也没有 `--ui-collapse-*` 皮肤令牌 —— 这正是「不顶掉皮肤」的前提。
11
- *
12
- * 结构(原生 disclosure,零 JS 即具备键盘与读屏语义):
13
- * <details class="mh-collapse [皮肤类]" open>
14
- * <summary class="[皮肤头类]">标题 <Icon name="chevron-down" class="mh-collapse-caret" /></summary>
15
- * <div class="[皮肤体类]">…</div>
16
- * </details>
17
- *
18
- * 一、开关与状态根 `.mh-collapse`
19
- * · 原生 `<details>` 的 `[open]` 与组件下发的 `data-state` 两条状态源等价;无状态属性即展开
20
- * (收折必须显式声明)。
21
- * · 触发器钩子 = 根的直接子 `<summary>`(原生形态)或 `.mh-collapse-header`(组件下发 `<button>` 形态)
22
- * —— 皮肤族的部件类照旧挂在触发器上,本层不认识它们,故皮肤族零改动。
23
- * · 面板体不设约定类:皮肤族自己命名。
24
- *
25
- * 二、收起态派生(全部由面板根状态推出)
26
- * · 箭头转竖向(收起态指右);字形自身不带态。
27
- * · 组件根下除触发器外直接子一律不显示;原生根由浏览器收起。
28
- * · 收起态不留 gap(flex 列皮肤的隐藏内容槽仍占一个 flex 项)。
29
- *
30
- * 三、硬约束:**不写底 / 边 / 圆角 / 内距 / 高 / 字号 / gap** —— 写了就会顶掉皮肤族的属性面
31
- * (卡片头的内距与底边线、表单分组头的行高),这正是「根上只加两个类就能组合」的前提。
32
- */
33
- .mh-collapse {
34
- min-width: 0; /* 仅作状态根 + 作 flex 子项时不横向溢出;面由皮肤给 */
35
- }
36
-
37
- /* 面板组:多条面板纵向成组(组间距属「组容器」的量,不进皮肤);互斥展开给同组各面板同名 name 即可,原生支持 */
38
- .mh-collapse-stack {
39
- display: flex;
40
- flex-direction: column;
41
- gap: var(--ui-space-2);
42
- }
43
-
44
- /* ===== 触发器(只做「可点 + 可键盘 + 去原生装饰」) ===== */
45
- .mh-collapse > :is(summary, .mh-collapse-header) {
46
- cursor: pointer;
47
- list-style: none; /* 去 <summary> 原生三角标 */
48
- user-select: none;
49
- }
50
-
51
- /* Safari 的原生三角标 */
52
- .mh-collapse > :is(summary, .mh-collapse-header)::-webkit-details-marker {
53
- display: none;
54
- }
55
-
56
- /* 可见焦点环:原生触发器(升格自 div)必须自备键盘焦点环 */
57
- .mh-collapse > :is(summary, .mh-collapse-header):focus-visible {
58
- outline: 2px solid var(--ui-primary);
59
- outline-offset: -2px;
60
- }
61
-
62
- /* 组件形态的触发器是 <button>:UA 外观归零 —— 只落在 button 上,
63
- 免得清掉皮肤族的底边线一类属性面 */
64
- .mh-collapse > button.mh-collapse-header {
65
- width: 100%;
66
- border: 0;
67
- background: none;
68
- font: inherit;
69
- text-align: left;
70
- }
71
-
72
- /* ===== 收起态派生 ===== */
73
- details.mh-collapse:not([open]) > :is(summary, .mh-collapse-header) .mh-collapse-caret,
74
- .mh-collapse[data-state='closed'] > :is(summary, .mh-collapse-header) .mh-collapse-caret {
75
- transform: rotate(-90deg);
76
- }
77
-
78
- .mh-collapse[data-state='closed'] > :not(:is(summary, .mh-collapse-header)) {
79
- display: none;
80
- }
81
-
82
- details.mh-collapse:not([open]) {
83
- gap: 0;
84
- }
1
+ /**
2
+ * 操作层 · 折叠(零 JS,**只给操作、不给任何面**)。
3
+ *
4
+ * 出处:`@aihub/theme` 的 `playground/components/collapse.css`(本仓第一处照搬操作层)。
5
+ * 映射:`--mh-*` → `--ui-*`;类名加 `.mh-` 前缀;**箭头不再是 CSS 字形**,改由 `@manohub/icon`
6
+ * 的 `<Icon name="chevron-down">` 渲染(本层只负责「收起时转向」,不画字形)。
7
+ *
8
+ * 面与几何一律来自皮肤族类(组合只是「根上并列两个类」):
9
+ * 卡片版 = `Card + Collapse`,字段分组版 = 表单分组 + `Collapse`。
10
+ * 因此本文件**不落任何色值/尺寸**,也没有 `--ui-collapse-*` 皮肤令牌 —— 这正是「不顶掉皮肤」的前提。
11
+ *
12
+ * 结构(原生 disclosure,零 JS 即具备键盘与读屏语义):
13
+ * <details class="mh-collapse [皮肤类]" open>
14
+ * <summary class="[皮肤头类]">标题 <Icon name="chevron-down" class="mh-collapse-caret" /></summary>
15
+ * <div class="[皮肤体类]">…</div>
16
+ * </details>
17
+ *
18
+ * 一、开关与状态根 `.mh-collapse`
19
+ * · 原生 `<details>` 的 `[open]` 与组件下发的 `data-state` 两条状态源等价;无状态属性即展开
20
+ * (收折必须显式声明)。
21
+ * · 触发器钩子 = 根的直接子 `<summary>`(原生形态)或 `.mh-collapse-header`(组件下发 `<button>` 形态)
22
+ * —— 皮肤族的部件类照旧挂在触发器上,本层不认识它们,故皮肤族零改动。
23
+ * · 面板体不设约定类:皮肤族自己命名。
24
+ *
25
+ * 二、收起态派生(全部由面板根状态推出)
26
+ * · 箭头转竖向(收起态指右);字形自身不带态。
27
+ * · 组件根下除触发器外直接子一律不显示;原生根由浏览器收起。
28
+ * · 收起态不留 gap(flex 列皮肤的隐藏内容槽仍占一个 flex 项)。
29
+ *
30
+ * 三、硬约束:**不写底 / 边 / 圆角 / 内距 / 高 / 字号 / gap** —— 写了就会顶掉皮肤族的属性面
31
+ * (卡片头的内距与底边线、表单分组头的行高),这正是「根上只加两个类就能组合」的前提。
32
+ */
33
+ .mh-collapse {
34
+ min-width: 0; /* 仅作状态根 + 作 flex 子项时不横向溢出;面由皮肤给 */
35
+ }
36
+
37
+ /* 面板组:多条面板纵向成组(组间距属「组容器」的量,不进皮肤);互斥展开给同组各面板同名 name 即可,原生支持 */
38
+ .mh-collapse-stack {
39
+ display: flex;
40
+ flex-direction: column;
41
+ gap: var(--ui-space-2);
42
+ }
43
+
44
+ /* ===== 触发器(只做「可点 + 可键盘 + 去原生装饰」) ===== */
45
+ .mh-collapse > :is(summary, .mh-collapse-header) {
46
+ cursor: pointer;
47
+ list-style: none; /* 去 <summary> 原生三角标 */
48
+ user-select: none;
49
+ }
50
+
51
+ /* Safari 的原生三角标 */
52
+ .mh-collapse > :is(summary, .mh-collapse-header)::-webkit-details-marker {
53
+ display: none;
54
+ }
55
+
56
+ /* 可见焦点环:原生触发器(升格自 div)必须自备键盘焦点环 */
57
+ .mh-collapse > :is(summary, .mh-collapse-header):focus-visible {
58
+ outline: 2px solid var(--ui-primary);
59
+ outline-offset: -2px;
60
+ }
61
+
62
+ /* 组件形态的触发器是 <button>:UA 外观归零 —— 只落在 button 上,
63
+ 免得清掉皮肤族的底边线一类属性面 */
64
+ .mh-collapse > button.mh-collapse-header {
65
+ width: 100%;
66
+ border: 0;
67
+ background: none;
68
+ font: inherit;
69
+ text-align: left;
70
+ }
71
+
72
+ /* ===== 收起态派生 ===== */
73
+ details.mh-collapse:not([open]) > :is(summary, .mh-collapse-header) .mh-collapse-caret,
74
+ .mh-collapse[data-state='closed'] > :is(summary, .mh-collapse-header) .mh-collapse-caret {
75
+ transform: rotate(-90deg);
76
+ }
77
+
78
+ .mh-collapse[data-state='closed'] > :not(:is(summary, .mh-collapse-header)) {
79
+ display: none;
80
+ }
81
+
82
+ details.mh-collapse:not([open]) {
83
+ gap: 0;
84
+ }