@manohub/ui 0.10.4 → 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 (72) hide show
  1. package/README.md +155 -155
  2. package/dist/components/form/index.js +8 -1
  3. package/dist/components/tabs/index.d.ts +9 -6
  4. package/dist/components/tabs/index.js +6 -1
  5. package/dist/styles/components/avatar.css +131 -131
  6. package/dist/styles/components/avatar.tokens.css +24 -24
  7. package/dist/styles/components/badge.css +266 -266
  8. package/dist/styles/components/badge.tokens.css +24 -24
  9. package/dist/styles/components/button.css +460 -460
  10. package/dist/styles/components/capsule.css +128 -128
  11. package/dist/styles/components/capsule.tokens.css +27 -27
  12. package/dist/styles/components/card.css +198 -198
  13. package/dist/styles/components/checkbox.css +145 -145
  14. package/dist/styles/components/checkbox.tokens.css +26 -26
  15. package/dist/styles/components/code-block.css +216 -216
  16. package/dist/styles/components/code-block.tokens.css +40 -40
  17. package/dist/styles/components/collapse.css +62 -62
  18. package/dist/styles/components/collapse.tokens.css +20 -20
  19. package/dist/styles/components/dialog.css +158 -158
  20. package/dist/styles/components/dialog.tokens.css +24 -24
  21. package/dist/styles/components/divider.css +75 -75
  22. package/dist/styles/components/divider.tokens.css +22 -22
  23. package/dist/styles/components/drawer.css +143 -143
  24. package/dist/styles/components/drawer.tokens.css +22 -22
  25. package/dist/styles/components/filter.css +29 -29
  26. package/dist/styles/components/form.css +442 -430
  27. package/dist/styles/components/form.tokens.css +15 -15
  28. package/dist/styles/components/input.css +538 -533
  29. package/dist/styles/components/input.tokens.css +43 -43
  30. package/dist/styles/components/layout.css +200 -200
  31. package/dist/styles/components/list-view.css +244 -244
  32. package/dist/styles/components/loading.css +76 -76
  33. package/dist/styles/components/loading.tokens.css +23 -23
  34. package/dist/styles/components/nav.css +48 -48
  35. package/dist/styles/components/notice.css +153 -153
  36. package/dist/styles/components/notice.tokens.css +17 -17
  37. package/dist/styles/components/notification.css +159 -159
  38. package/dist/styles/components/notification.tokens.css +37 -37
  39. package/dist/styles/components/page.css +473 -473
  40. package/dist/styles/components/pagination.css +303 -303
  41. package/dist/styles/components/pagination.tokens.css +32 -32
  42. package/dist/styles/components/panel.css +77 -77
  43. package/dist/styles/components/query-state.css +88 -88
  44. package/dist/styles/components/radio.css +271 -271
  45. package/dist/styles/components/radio.tokens.css +26 -26
  46. package/dist/styles/components/search.css +34 -34
  47. package/dist/styles/components/select.css +326 -326
  48. package/dist/styles/components/select.tokens.css +44 -44
  49. package/dist/styles/components/skeleton.css +60 -60
  50. package/dist/styles/components/skeleton.tokens.css +27 -27
  51. package/dist/styles/components/steps.css +205 -205
  52. package/dist/styles/components/steps.tokens.css +44 -44
  53. package/dist/styles/components/switch.css +165 -165
  54. package/dist/styles/components/switch.tokens.css +26 -26
  55. package/dist/styles/components/tabbar.css +235 -235
  56. package/dist/styles/components/tabbar.tokens.css +30 -30
  57. package/dist/styles/components/table.css +504 -504
  58. package/dist/styles/components/table.tokens.css +44 -44
  59. package/dist/styles/components/tag.css +127 -127
  60. package/dist/styles/components/tag.tokens.css +24 -24
  61. package/dist/styles/components/toast.css +185 -185
  62. package/dist/styles/components/toast.tokens.css +26 -26
  63. package/dist/styles/components/tooltip.css +89 -89
  64. package/dist/styles/components/tooltip.tokens.css +25 -25
  65. package/dist/styles/components/tree.css +173 -173
  66. package/dist/styles/components/upload.css +151 -151
  67. package/dist/styles/components/upload.tokens.css +27 -27
  68. package/dist/styles/index.css +153 -153
  69. package/dist/styles/operations/collapse.css +84 -84
  70. package/dist/styles/operations/popup.css +193 -193
  71. package/dist/styles/operations/tabs.css +82 -73
  72. package/package.json +62 -62
@@ -1,23 +1,23 @@
1
- /**
2
- * loading —— 单件令牌(**基础值**)。
3
- *
4
- * 本件自己的几何 / 尺寸 / 色彩槽位;只服务本件,故不随主题进 `@manohub/theme`。
5
- *
6
- * ## 抽出说明
7
- * 本文件从面文件里抽出(原先混写在 `loading.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-loading-spinner-size: var(--ui-font-icon);
19
- --ui-loading-gap: var(--ui-space-2);
20
- /* 无规范取值:由主题底色派生(本包唯一的面色令牌),不新造色值 */
21
- --ui-loading-mask: color-mix(in srgb, var(--ui-base-100) 72%, transparent);
22
- --ui-loading-text-color: var(--ui-base-content-muted);
23
- }
1
+ /**
2
+ * loading —— 单件令牌(**基础值**)。
3
+ *
4
+ * 本件自己的几何 / 尺寸 / 色彩槽位;只服务本件,故不随主题进 `@manohub/theme`。
5
+ *
6
+ * ## 抽出说明
7
+ * 本文件从面文件里抽出(原先混写在 `loading.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-loading-spinner-size: var(--ui-font-icon);
19
+ --ui-loading-gap: var(--ui-space-2);
20
+ /* 无规范取值:由主题底色派生(本包唯一的面色令牌),不新造色值 */
21
+ --ui-loading-mask: color-mix(in srgb, var(--ui-base-100) 72%, transparent);
22
+ --ui-loading-text-color: var(--ui-base-content-muted);
23
+ }
@@ -1,48 +1,48 @@
1
- /**
2
- * Nav(侧栏导航:list / tree 两态,行渲染复用 Tree)。
3
- *
4
- * 依据:@aihub/theme 的 pages/tree-page.css(导航区 12/14)+ components/tree.css(行几何)。
5
- */
6
-
7
- /* ===== Nav(侧栏导航:list / tree 两态,行渲染复用 Tree)=====
8
- 根件不滚(滚动归导航体)。宽度只认 --mh-nav-width(组件按 `width` prop 下发,缺省填满所在栏),
9
- 与 .mh-tree 的缩进同一手法:几何载荷走变量,公式留在 CSS。 */
10
-
11
- .mh-nav {
12
- display: flex;
13
- flex-direction: column;
14
- /* 缺省填满所在栏:列宽归 Page.Split / 外层布局(导航件不重复锁一个可能与栏宽不符的数) */
15
- width: var(--mh-nav-width, 100%);
16
- min-width: 0;
17
- height: 100%;
18
- overflow: hidden;
19
- }
20
-
21
- .mh-nav__title {
22
- flex-shrink: 0;
23
- padding: var(--ui-space-2);
24
- font-size: var(--ui-font-body);
25
- line-height: var(--ui-line-body);
26
- font-weight: var(--ui-weight-semibold);
27
- color: var(--ui-base-content);
28
- }
29
-
30
- /* 导航体:侧栏内滚动的唯一归属(同 Panel.Body 的口径) */
31
-
32
- .mh-nav__body {
33
- flex: 1 1 auto;
34
- min-height: 0;
35
- overflow-y: auto;
36
- padding: var(--ui-space-1) 0;
37
- }
38
-
39
- /* list 态:扁平导航没有层级,隐藏箭头占位(那一段留给树对齐用) */
40
-
41
- .mh-nav--list .mh-tree__caret {
42
- display: none;
43
- }
44
-
45
- /* ===== 右侧分隔线(侧栏贴在页面容器里时用) ===== */
46
- .mh-nav--bordered {
47
- border-right: 1px solid var(--ui-base-300);
48
- }
1
+ /**
2
+ * Nav(侧栏导航:list / tree 两态,行渲染复用 Tree)。
3
+ *
4
+ * 依据:@aihub/theme 的 pages/tree-page.css(导航区 12/14)+ components/tree.css(行几何)。
5
+ */
6
+
7
+ /* ===== Nav(侧栏导航:list / tree 两态,行渲染复用 Tree)=====
8
+ 根件不滚(滚动归导航体)。宽度只认 --mh-nav-width(组件按 `width` prop 下发,缺省填满所在栏),
9
+ 与 .mh-tree 的缩进同一手法:几何载荷走变量,公式留在 CSS。 */
10
+
11
+ .mh-nav {
12
+ display: flex;
13
+ flex-direction: column;
14
+ /* 缺省填满所在栏:列宽归 Page.Split / 外层布局(导航件不重复锁一个可能与栏宽不符的数) */
15
+ width: var(--mh-nav-width, 100%);
16
+ min-width: 0;
17
+ height: 100%;
18
+ overflow: hidden;
19
+ }
20
+
21
+ .mh-nav__title {
22
+ flex-shrink: 0;
23
+ padding: var(--ui-space-2);
24
+ font-size: var(--ui-font-body);
25
+ line-height: var(--ui-line-body);
26
+ font-weight: var(--ui-weight-semibold);
27
+ color: var(--ui-base-content);
28
+ }
29
+
30
+ /* 导航体:侧栏内滚动的唯一归属(同 Panel.Body 的口径) */
31
+
32
+ .mh-nav__body {
33
+ flex: 1 1 auto;
34
+ min-height: 0;
35
+ overflow-y: auto;
36
+ padding: var(--ui-space-1) 0;
37
+ }
38
+
39
+ /* list 态:扁平导航没有层级,隐藏箭头占位(那一段留给树对齐用) */
40
+
41
+ .mh-nav--list .mh-tree__caret {
42
+ display: none;
43
+ }
44
+
45
+ /* ===== 右侧分隔线(侧栏贴在页面容器里时用) ===== */
46
+ .mh-nav--bordered {
47
+ border-right: 1px solid var(--ui-base-300);
48
+ }
@@ -1,153 +1,153 @@
1
- /**
2
- * Notice(说明条 / 警告提示,自建)。
3
- *
4
- * 依据:@aihub/theme 的 components/alert.css(通栏高 42 / 圆角 6 / 投影 / 语义「底·边·字」三件套);
5
- * 与主题包的两处有意差异(success·warning 取 -strong 档、警示/错误底取专页实测值)见下方原注释。
6
- */
7
-
8
- /* ===== Notice(说明条 / 警告提示,自建)=====
9
- 规范对齐 `@aihub/theme` 的 Alert(`.sem-bar`):通栏 100% 宽、高 42、圆角 6、
10
- 投影 0 2 10 黑 8%、文案 15px、语义「底 / 边 / 字」三件套;操作位为文字按钮。
11
-
12
- 与主题包的两处有意差异(都不改结构,只保可读性):
13
- 1. 文案色:success/warning 取 `-strong` 档(主题包调色板另给了该槽位)——直接用 500 档主色
14
- 在浅底上对比度不足(如 #22C55E on #ECFDF5 ≈ 1.9:1),属可读性缺陷;
15
- 2. 警示 / 错误的底色仍按主题包 Alert 专页实测值(#FDF4EA / #FDECEC),不用语义 03 档。 */
16
-
17
- .mh-notice {
18
- display: flex;
19
- align-items: center;
20
- gap: var(--ui-space-2);
21
- width: 100%;
22
- min-height: var(--ui-notice-height);
23
- padding: var(--ui-space-3) var(--ui-space-4);
24
- border-radius: var(--ui-radius-control);
25
- box-shadow: var(--ui-notice-shadow);
26
- font-size: var(--ui-notice-font);
27
- line-height: var(--ui-line-body);
28
- }
29
-
30
- .mh-notice__body {
31
- flex: 1;
32
- min-width: 0;
33
- }
34
-
35
- /* 说明文案可能是多段(原页面按段落渲染),块间距交给容器,避免与外层再叠一层间距 */
36
-
37
- .mh-notice__body p {
38
- margin: 0;
39
- }
40
-
41
- .mh-notice__action {
42
- flex-shrink: 0;
43
- margin-left: auto;
44
- border: none;
45
- background: transparent;
46
- padding: 0;
47
- font: inherit;
48
- /* 文字按钮取主色(主题包 --f-alert-action-text = --f-primary) */
49
- color: var(--ui-primary);
50
- cursor: pointer;
51
- }
52
-
53
- .mh-notice__close {
54
- flex-shrink: 0;
55
- margin-left: auto;
56
- border: none;
57
- background: transparent;
58
- padding: 0;
59
- font-size: var(--ui-font-caption);
60
- /* 主题包为 --f-text-muted(Te07),本仓对应 --ui-base-content-muted */
61
- color: var(--ui-base-content-muted);
62
- cursor: pointer;
63
- }
64
-
65
- .mh-notice--info {
66
- background: var(--ui-info-weak);
67
- border: 1px solid var(--ui-info-border);
68
- color: var(--ui-info);
69
- }
70
-
71
- .mh-notice--success {
72
- background: var(--ui-success-weak);
73
- border: 1px solid var(--ui-success-border);
74
- color: var(--ui-success-strong);
75
- }
76
-
77
- .mh-notice--warning {
78
- background: var(--ui-notice-warning-bg);
79
- border: 1px solid var(--ui-warning-border);
80
- color: var(--ui-warning-strong);
81
- }
82
-
83
- .mh-notice--error {
84
- background: var(--ui-notice-error-bg);
85
- border: 1px solid var(--ui-error-border);
86
- color: var(--ui-error);
87
- }
88
-
89
- /* ===== 语义图标 / 两行排版 / 关闭位 ===== */
90
- .mh-notice__icon {
91
- flex: none;
92
- /* 语义图标是常规图标:尺寸取全局图标档(改前硬写 16) */
93
- width: var(--ui-font-icon);
94
- height: var(--ui-font-icon);
95
- margin-top: 1px; /* 与首行文字视觉对齐(文字行高比图标高) */
96
- }
97
- .mh-notice__body {
98
- display: flex;
99
- flex-direction: column;
100
- gap: 2px;
101
- flex: 1;
102
- min-width: 0;
103
- }
104
- .mh-notice__message {
105
- font-weight: var(--ui-weight-medium);
106
- }
107
- .mh-notice__description {
108
- color: inherit;
109
- }
110
- .mh-notice__close {
111
- display: inline-flex;
112
- align-items: center;
113
- gap: var(--ui-space-1);
114
- flex: none;
115
- padding: 0;
116
- border: none;
117
- background: transparent;
118
- font-family: inherit;
119
- font-size: inherit;
120
- color: inherit;
121
- cursor: pointer;
122
- opacity: 0.7;
123
- transition: opacity 0.15s ease;
124
- }
125
- .mh-notice__close:hover {
126
- opacity: 1;
127
- }
128
- .mh-notice__close-icon {
129
- flex: none;
130
- width: 14px;
131
- height: 14px;
132
- }
133
- .mh-notice__close-text {
134
- text-decoration: underline;
135
- text-underline-offset: 2px;
136
- }
137
- /* 只给读屏的文本(关闭位缺省只有图标,必须补一个可读名字) */
138
- .mh-notice__visually-hidden {
139
- position: absolute;
140
- width: 1px;
141
- height: 1px;
142
- margin: -1px;
143
- padding: 0;
144
- border: 0;
145
- overflow: hidden;
146
- white-space: nowrap;
147
- clip-path: inset(50%);
148
- }
149
-
150
- /* 两行排版(有 `message`):整体改顶对齐 —— 两行内容在条里居中会让上下空得奇怪 */
151
- .mh-notice--titled {
152
- align-items: flex-start;
153
- }
1
+ /**
2
+ * Notice(说明条 / 警告提示,自建)。
3
+ *
4
+ * 依据:@aihub/theme 的 components/alert.css(通栏高 42 / 圆角 6 / 投影 / 语义「底·边·字」三件套);
5
+ * 与主题包的两处有意差异(success·warning 取 -strong 档、警示/错误底取专页实测值)见下方原注释。
6
+ */
7
+
8
+ /* ===== Notice(说明条 / 警告提示,自建)=====
9
+ 规范对齐 `@aihub/theme` 的 Alert(`.sem-bar`):通栏 100% 宽、高 42、圆角 6、
10
+ 投影 0 2 10 黑 8%、文案 15px、语义「底 / 边 / 字」三件套;操作位为文字按钮。
11
+
12
+ 与主题包的两处有意差异(都不改结构,只保可读性):
13
+ 1. 文案色:success/warning 取 `-strong` 档(主题包调色板另给了该槽位)——直接用 500 档主色
14
+ 在浅底上对比度不足(如 #22C55E on #ECFDF5 ≈ 1.9:1),属可读性缺陷;
15
+ 2. 警示 / 错误的底色仍按主题包 Alert 专页实测值(#FDF4EA / #FDECEC),不用语义 03 档。 */
16
+
17
+ .mh-notice {
18
+ display: flex;
19
+ align-items: center;
20
+ gap: var(--ui-space-2);
21
+ width: 100%;
22
+ min-height: var(--ui-notice-height);
23
+ padding: var(--ui-space-3) var(--ui-space-4);
24
+ border-radius: var(--ui-radius-control);
25
+ box-shadow: var(--ui-notice-shadow);
26
+ font-size: var(--ui-notice-font);
27
+ line-height: var(--ui-line-body);
28
+ }
29
+
30
+ .mh-notice__body {
31
+ flex: 1;
32
+ min-width: 0;
33
+ }
34
+
35
+ /* 说明文案可能是多段(原页面按段落渲染),块间距交给容器,避免与外层再叠一层间距 */
36
+
37
+ .mh-notice__body p {
38
+ margin: 0;
39
+ }
40
+
41
+ .mh-notice__action {
42
+ flex-shrink: 0;
43
+ margin-left: auto;
44
+ border: none;
45
+ background: transparent;
46
+ padding: 0;
47
+ font: inherit;
48
+ /* 文字按钮取主色(主题包 --f-alert-action-text = --f-primary) */
49
+ color: var(--ui-primary);
50
+ cursor: pointer;
51
+ }
52
+
53
+ .mh-notice__close {
54
+ flex-shrink: 0;
55
+ margin-left: auto;
56
+ border: none;
57
+ background: transparent;
58
+ padding: 0;
59
+ font-size: var(--ui-font-caption);
60
+ /* 主题包为 --f-text-muted(Te07),本仓对应 --ui-base-content-muted */
61
+ color: var(--ui-base-content-muted);
62
+ cursor: pointer;
63
+ }
64
+
65
+ .mh-notice--info {
66
+ background: var(--ui-info-weak);
67
+ border: 1px solid var(--ui-info-border);
68
+ color: var(--ui-info);
69
+ }
70
+
71
+ .mh-notice--success {
72
+ background: var(--ui-success-weak);
73
+ border: 1px solid var(--ui-success-border);
74
+ color: var(--ui-success-strong);
75
+ }
76
+
77
+ .mh-notice--warning {
78
+ background: var(--ui-notice-warning-bg);
79
+ border: 1px solid var(--ui-warning-border);
80
+ color: var(--ui-warning-strong);
81
+ }
82
+
83
+ .mh-notice--error {
84
+ background: var(--ui-notice-error-bg);
85
+ border: 1px solid var(--ui-error-border);
86
+ color: var(--ui-error);
87
+ }
88
+
89
+ /* ===== 语义图标 / 两行排版 / 关闭位 ===== */
90
+ .mh-notice__icon {
91
+ flex: none;
92
+ /* 语义图标是常规图标:尺寸取全局图标档(改前硬写 16) */
93
+ width: var(--ui-font-icon);
94
+ height: var(--ui-font-icon);
95
+ margin-top: 1px; /* 与首行文字视觉对齐(文字行高比图标高) */
96
+ }
97
+ .mh-notice__body {
98
+ display: flex;
99
+ flex-direction: column;
100
+ gap: 2px;
101
+ flex: 1;
102
+ min-width: 0;
103
+ }
104
+ .mh-notice__message {
105
+ font-weight: var(--ui-weight-medium);
106
+ }
107
+ .mh-notice__description {
108
+ color: inherit;
109
+ }
110
+ .mh-notice__close {
111
+ display: inline-flex;
112
+ align-items: center;
113
+ gap: var(--ui-space-1);
114
+ flex: none;
115
+ padding: 0;
116
+ border: none;
117
+ background: transparent;
118
+ font-family: inherit;
119
+ font-size: inherit;
120
+ color: inherit;
121
+ cursor: pointer;
122
+ opacity: 0.7;
123
+ transition: opacity 0.15s ease;
124
+ }
125
+ .mh-notice__close:hover {
126
+ opacity: 1;
127
+ }
128
+ .mh-notice__close-icon {
129
+ flex: none;
130
+ width: 14px;
131
+ height: 14px;
132
+ }
133
+ .mh-notice__close-text {
134
+ text-decoration: underline;
135
+ text-underline-offset: 2px;
136
+ }
137
+ /* 只给读屏的文本(关闭位缺省只有图标,必须补一个可读名字) */
138
+ .mh-notice__visually-hidden {
139
+ position: absolute;
140
+ width: 1px;
141
+ height: 1px;
142
+ margin: -1px;
143
+ padding: 0;
144
+ border: 0;
145
+ overflow: hidden;
146
+ white-space: nowrap;
147
+ clip-path: inset(50%);
148
+ }
149
+
150
+ /* 两行排版(有 `message`):整体改顶对齐 —— 两行内容在条里居中会让上下空得奇怪 */
151
+ .mh-notice--titled {
152
+ align-items: flex-start;
153
+ }
@@ -1,17 +1,17 @@
1
- /**
2
- * 组件几何令牌:取自 @aihub/theme 的 components/alert.css 实测(通栏高 42 / 文案 15px /
3
- * 警示与错误底取 Alert 专页样张,与语义 03 档两说时以专页为准)
4
- *
5
- * ## 抽出说明
6
- * 本文件从面文件里抽出:这些是**基础值**,锚在 `[data-manohub-ui]`(跨包唯一作用域锚,
7
- * 由入口层无条件写在应用容器上)—— 任何落在容器里的分件都取得到值,不再依赖
8
- * 「声明在某个组件根类上」这条脆弱假设。
9
- * ⚠️ `.mh-<件>--<档>` 这类**档位改写**留在面文件的修饰符块里(拆开会让档位失效)。
10
- */
11
- [data-manohub-ui] {
12
- --ui-notice-height: 42px;
13
- --ui-notice-shadow: 0 2px 10px rgba(0, 0, 0, 0.08);
14
- --ui-notice-font: 15px;
15
- --ui-notice-warning-bg: #fdf4ea;
16
- --ui-notice-error-bg: #fdecec;
17
- }
1
+ /**
2
+ * 组件几何令牌:取自 @aihub/theme 的 components/alert.css 实测(通栏高 42 / 文案 15px /
3
+ * 警示与错误底取 Alert 专页样张,与语义 03 档两说时以专页为准)
4
+ *
5
+ * ## 抽出说明
6
+ * 本文件从面文件里抽出:这些是**基础值**,锚在 `[data-manohub-ui]`(跨包唯一作用域锚,
7
+ * 由入口层无条件写在应用容器上)—— 任何落在容器里的分件都取得到值,不再依赖
8
+ * 「声明在某个组件根类上」这条脆弱假设。
9
+ * ⚠️ `.mh-<件>--<档>` 这类**档位改写**留在面文件的修饰符块里(拆开会让档位失效)。
10
+ */
11
+ [data-manohub-ui] {
12
+ --ui-notice-height: 42px;
13
+ --ui-notice-shadow: 0 2px 10px rgba(0, 0, 0, 0.08);
14
+ --ui-notice-font: 15px;
15
+ --ui-notice-warning-bg: #fdf4ea;
16
+ --ui-notice-error-bg: #fdecec;
17
+ }