@xihan-ui/styles 3.2.0 → 4.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 (232) hide show
  1. package/CHANGELOG.md +441 -0
  2. package/component-tokens.d.ts +229 -60
  3. package/components.tokens.json +5124 -1555
  4. package/css/accordion.css +47 -20
  5. package/css/alert.css +14 -15
  6. package/css/anchor.css +2 -2
  7. package/css/approval.css +37 -13
  8. package/css/avatar-group.css +9 -12
  9. package/css/avatar.css +20 -18
  10. package/css/back-top.css +21 -7
  11. package/css/badge.css +5 -5
  12. package/css/breadcrumb.css +18 -16
  13. package/css/button-group.css +4 -6
  14. package/css/button.css +4 -7
  15. package/css/calendar-picker.css +177 -94
  16. package/css/calendar-range-picker.css +206 -121
  17. package/css/card.css +34 -6
  18. package/css/carousel.css +65 -49
  19. package/css/cascader.css +41 -29
  20. package/css/checkbox-group.css +9 -6
  21. package/css/checkbox.css +5 -4
  22. package/css/citation.css +7 -2
  23. package/css/clipboard.css +20 -4
  24. package/css/collapsible.css +29 -14
  25. package/css/color-field.css +4 -4
  26. package/css/color-picker.css +77 -23
  27. package/css/color-slider.css +10 -8
  28. package/css/color-swatch-picker.css +5 -5
  29. package/css/combobox.css +14 -10
  30. package/css/command.css +13 -8
  31. package/css/context-menu.css +10 -5
  32. package/css/date-field.css +4 -4
  33. package/css/date-picker.css +165 -102
  34. package/css/date-range-picker.css +186 -123
  35. package/css/description.css +10 -6
  36. package/css/descriptions.css +47 -19
  37. package/css/dialog.css +50 -35
  38. package/css/drawer.css +75 -21
  39. package/css/editable.css +15 -41
  40. package/css/empty-state.css +21 -3
  41. package/css/field-array.css +4 -1
  42. package/css/field.css +17 -18
  43. package/css/fieldset.css +33 -13
  44. package/css/file-upload.css +65 -32
  45. package/css/float-button.css +25 -15
  46. package/css/floating-panel.css +1 -1
  47. package/css/form.css +24 -10
  48. package/css/grid-list.css +1 -1
  49. package/css/highlight.css +4 -4
  50. package/css/hover-card.css +19 -12
  51. package/css/image-viewer.css +77 -27
  52. package/css/image.css +12 -4
  53. package/css/infinite-scroll.css +8 -4
  54. package/css/input-group.css +74 -26
  55. package/css/kbd.css +1 -1
  56. package/css/label.css +27 -11
  57. package/css/layout.css +17 -10
  58. package/css/list.css +13 -9
  59. package/css/listbox.css +12 -7
  60. package/css/loading-bar.css +3 -0
  61. package/css/mention.css +10 -8
  62. package/css/menu.css +10 -5
  63. package/css/menubar.css +13 -8
  64. package/css/navigation-menu.css +2 -2
  65. package/css/notification.css +114 -31
  66. package/css/number-animation.css +2 -2
  67. package/css/number-field.css +60 -37
  68. package/css/page-header.css +63 -26
  69. package/css/pagination.css +35 -38
  70. package/css/password-input.css +10 -66
  71. package/css/pin-input.css +18 -26
  72. package/css/popconfirm.css +20 -11
  73. package/css/popover.css +18 -12
  74. package/css/progress.css +14 -13
  75. package/css/prompt-input.css +3 -3
  76. package/css/question-flow.css +33 -7
  77. package/css/radio-group.css +120 -55
  78. package/css/rating.css +31 -14
  79. package/css/select.css +14 -10
  80. package/css/separator.css +22 -4
  81. package/css/side-nav.css +16 -11
  82. package/css/signature-pad.css +23 -9
  83. package/css/skeleton.css +7 -7
  84. package/css/slider.css +71 -42
  85. package/css/sparkline.css +8 -2
  86. package/css/spinner.css +40 -20
  87. package/css/statistic.css +14 -14
  88. package/css/steps.css +115 -84
  89. package/css/switch.css +9 -7
  90. package/css/table.css +27 -10
  91. package/css/tabs.css +35 -12
  92. package/css/tag-group.css +17 -6
  93. package/css/tag.css +54 -29
  94. package/css/tags-input.css +38 -19
  95. package/css/text-field.css +5 -5
  96. package/css/time-field.css +4 -4
  97. package/css/time-picker.css +150 -64
  98. package/css/time-range-picker.css +91 -62
  99. package/css/timeline.css +37 -20
  100. package/css/timer.css +3 -3
  101. package/css/toggle-group.css +4 -4
  102. package/css/tool-call.css +6 -4
  103. package/css/toolbar.css +6 -5
  104. package/css/tooltip.css +15 -16
  105. package/css/tour.css +14 -7
  106. package/css/transfer.css +22 -16
  107. package/css/tree-select.css +10 -10
  108. package/css/tree.css +26 -25
  109. package/css/typography.css +28 -25
  110. package/dist/css/accordion.css +47 -20
  111. package/dist/css/alert.css +14 -15
  112. package/dist/css/anchor.css +2 -2
  113. package/dist/css/approval.css +37 -13
  114. package/dist/css/avatar-group.css +9 -12
  115. package/dist/css/avatar.css +20 -18
  116. package/dist/css/back-top.css +21 -7
  117. package/dist/css/badge.css +5 -5
  118. package/dist/css/breadcrumb.css +18 -16
  119. package/dist/css/button-group.css +4 -6
  120. package/dist/css/button.css +4 -7
  121. package/dist/css/calendar-picker.css +177 -94
  122. package/dist/css/calendar-range-picker.css +206 -121
  123. package/dist/css/card.css +34 -6
  124. package/dist/css/carousel.css +65 -49
  125. package/dist/css/cascader.css +41 -29
  126. package/dist/css/checkbox-group.css +9 -6
  127. package/dist/css/checkbox.css +5 -4
  128. package/dist/css/citation.css +7 -2
  129. package/dist/css/clipboard.css +20 -4
  130. package/dist/css/collapsible.css +29 -14
  131. package/dist/css/color-field.css +4 -4
  132. package/dist/css/color-picker.css +77 -23
  133. package/dist/css/color-slider.css +10 -8
  134. package/dist/css/color-swatch-picker.css +5 -5
  135. package/dist/css/combobox.css +14 -10
  136. package/dist/css/command.css +13 -8
  137. package/dist/css/context-menu.css +10 -5
  138. package/dist/css/date-field.css +4 -4
  139. package/dist/css/date-picker.css +165 -102
  140. package/dist/css/date-range-picker.css +186 -123
  141. package/dist/css/description.css +10 -6
  142. package/dist/css/descriptions.css +47 -19
  143. package/dist/css/dialog.css +50 -35
  144. package/dist/css/drawer.css +75 -21
  145. package/dist/css/editable.css +15 -41
  146. package/dist/css/empty-state.css +21 -3
  147. package/dist/css/field-array.css +4 -1
  148. package/dist/css/field.css +17 -18
  149. package/dist/css/fieldset.css +33 -13
  150. package/dist/css/file-upload.css +65 -32
  151. package/dist/css/float-button.css +25 -15
  152. package/dist/css/floating-panel.css +1 -1
  153. package/dist/css/form.css +24 -10
  154. package/dist/css/grid-list.css +1 -1
  155. package/dist/css/highlight.css +4 -4
  156. package/dist/css/hover-card.css +19 -12
  157. package/dist/css/image-viewer.css +77 -27
  158. package/dist/css/image.css +12 -4
  159. package/dist/css/infinite-scroll.css +8 -4
  160. package/dist/css/input-group.css +74 -26
  161. package/dist/css/kbd.css +1 -1
  162. package/dist/css/label.css +27 -11
  163. package/dist/css/layout.css +17 -10
  164. package/dist/css/list.css +13 -9
  165. package/dist/css/listbox.css +12 -7
  166. package/dist/css/loading-bar.css +3 -0
  167. package/dist/css/mention.css +10 -8
  168. package/dist/css/menu.css +10 -5
  169. package/dist/css/menubar.css +13 -8
  170. package/dist/css/navigation-menu.css +2 -2
  171. package/dist/css/notification.css +114 -31
  172. package/dist/css/number-animation.css +2 -2
  173. package/dist/css/number-field.css +60 -37
  174. package/dist/css/page-header.css +63 -26
  175. package/dist/css/pagination.css +35 -38
  176. package/dist/css/password-input.css +10 -66
  177. package/dist/css/pin-input.css +18 -26
  178. package/dist/css/popconfirm.css +20 -11
  179. package/dist/css/popover.css +18 -12
  180. package/dist/css/progress.css +14 -13
  181. package/dist/css/prompt-input.css +3 -3
  182. package/dist/css/question-flow.css +33 -7
  183. package/dist/css/radio-group.css +120 -55
  184. package/dist/css/rating.css +31 -14
  185. package/dist/css/select.css +14 -10
  186. package/dist/css/separator.css +22 -4
  187. package/dist/css/side-nav.css +16 -11
  188. package/dist/css/signature-pad.css +23 -9
  189. package/dist/css/skeleton.css +7 -7
  190. package/dist/css/slider.css +71 -42
  191. package/dist/css/sparkline.css +8 -2
  192. package/dist/css/spinner.css +40 -20
  193. package/dist/css/statistic.css +14 -14
  194. package/dist/css/steps.css +115 -84
  195. package/dist/css/switch.css +9 -7
  196. package/dist/css/table.css +27 -10
  197. package/dist/css/tabs.css +35 -12
  198. package/dist/css/tag-group.css +17 -6
  199. package/dist/css/tag.css +54 -29
  200. package/dist/css/tags-input.css +38 -19
  201. package/dist/css/text-field.css +5 -5
  202. package/dist/css/time-field.css +4 -4
  203. package/dist/css/time-picker.css +150 -64
  204. package/dist/css/time-range-picker.css +91 -62
  205. package/dist/css/timeline.css +37 -20
  206. package/dist/css/timer.css +3 -3
  207. package/dist/css/toggle-group.css +4 -4
  208. package/dist/css/tool-call.css +6 -4
  209. package/dist/css/toolbar.css +6 -5
  210. package/dist/css/tooltip.css +15 -16
  211. package/dist/css/tour.css +14 -7
  212. package/dist/css/transfer.css +22 -16
  213. package/dist/css/tree-select.css +10 -10
  214. package/dist/css/tree.css +26 -25
  215. package/dist/css/typography.css +28 -25
  216. package/dist/family/action-control.css +30 -24
  217. package/dist/family/chart.css +57 -0
  218. package/dist/family/collection-item.css +12 -8
  219. package/dist/family/field-chrome.css +28 -19
  220. package/dist/family/loading-ring.css +20 -13
  221. package/dist/family/swatch.css +4 -4
  222. package/dist/family/tag-list.css +6 -0
  223. package/family/action-control.css +30 -24
  224. package/family/chart.css +57 -0
  225. package/family/collection-item.css +12 -8
  226. package/family/field-chrome.css +28 -19
  227. package/family/loading-ring.css +20 -13
  228. package/family/swatch.css +4 -4
  229. package/family/tag-list.css +6 -0
  230. package/index.css +3580 -2060
  231. package/index.unlayered.css +3579 -2060
  232. package/package.json +2 -2
package/css/accordion.css CHANGED
@@ -20,9 +20,14 @@
20
20
  /* 作者塞进正文里的图标与皮肤画的兜底字形同一把尺:md 档,标题栏上另按家族档取值 */
21
21
  --xh-icon-size: var(--xh-accordion-icon-size, var(--xh-glyph-size-md));
22
22
 
23
- /* 尺寸档只换正文这两个私有槽,正文从 root 继承它们;标题栏的三档几何由家族 disclosure-trigger 档给 */
24
- --xh-_accordion-content-px: var(--xh-space-4);
25
- --xh-_accordion-content-pb: var(--xh-space-4);
23
+ /* 尺寸档只换这几个私有槽,标题栏与正文从 root 继承它们。
24
+ 标题栏比家族 disclosure-trigger 档收一截:md 上下 10px + 一行正文行高 21px = 41px 高,横向 12px;
25
+ 正文与标题栏同一条起点,上下各留 8px */
26
+ --xh-_accordion-trigger-py: var(--xh-space-2_5);
27
+ --xh-_accordion-trigger-px: var(--xh-space-3);
28
+ --xh-_accordion-content-px: var(--xh-space-3);
29
+ --xh-_accordion-content-pt: var(--xh-space-2);
30
+ --xh-_accordion-content-pb: var(--xh-space-2);
26
31
 
27
32
  /* 语气落在展开着的标题上,指示器写在标题里、跟着继承这个色,不另立规则。
28
33
  没写 data-tone 时 --xh-_tone-fg 没被声明,退回原来的前景色。
@@ -42,13 +47,19 @@
42
47
  /* —— 尺寸 —— */
43
48
  /* 缺省档写在上面的基础规则里 */
44
49
  [data-scope='accordion'][data-part='root'][data-size='sm'] {
45
- --xh-_accordion-content-px: var(--xh-space-3);
46
- --xh-_accordion-content-pb: var(--xh-space-3);
50
+ --xh-_accordion-trigger-py: var(--xh-space-1_5);
51
+ --xh-_accordion-trigger-px: var(--xh-space-2_5);
52
+ --xh-_accordion-content-px: var(--xh-space-2_5);
53
+ --xh-_accordion-content-pt: var(--xh-space-1_5);
54
+ --xh-_accordion-content-pb: var(--xh-space-1_5);
47
55
  }
48
56
 
49
57
  [data-scope='accordion'][data-part='root'][data-size='lg'] {
50
- --xh-_accordion-content-px: var(--xh-space-5);
51
- --xh-_accordion-content-pb: var(--xh-space-5);
58
+ --xh-_accordion-trigger-py: var(--xh-space-3);
59
+ --xh-_accordion-trigger-px: var(--xh-space-4);
60
+ --xh-_accordion-content-px: var(--xh-space-4);
61
+ --xh-_accordion-content-pt: var(--xh-space-3);
62
+ --xh-_accordion-content-pb: var(--xh-space-3);
52
63
  }
53
64
 
54
65
  [data-scope='accordion'][data-part='item'] {
@@ -62,14 +73,14 @@
62
73
  [data-scope='accordion'][data-part='root']
63
74
  > [data-scope='accordion'][data-part='item']
64
75
  + [data-scope='accordion'][data-part='item'] {
65
- border-block-start: var(--xh-stroke-thin) solid var(--xh-accordion-item-border, var(--xh-border-subtle));
76
+ border-block-start: var(--xh-stroke-thin) solid var(--xh-accordion-item-border, var(--xh-border-default));
66
77
  }
67
78
 
68
79
  [data-scope='accordion'][data-part='root'][data-orientation='horizontal']
69
80
  > [data-scope='accordion'][data-part='item']
70
81
  + [data-scope='accordion'][data-part='item'] {
71
82
  border-block-start: 0;
72
- border-inline-start: var(--xh-stroke-thin) solid var(--xh-accordion-item-border, var(--xh-border-subtle));
83
+ border-inline-start: var(--xh-stroke-thin) solid var(--xh-accordion-item-border, var(--xh-border-default));
73
84
  }
74
85
 
75
86
  /* 作者显式渲染的分隔线。渲染了它,上面那条 item + item 的相邻规则就不再命中,
@@ -79,7 +90,7 @@
79
90
  block-size: var(--xh-stroke-thin);
80
91
  border: 0;
81
92
  margin: 0;
82
- background: var(--xh-accordion-item-border, var(--xh-border-subtle));
93
+ background: var(--xh-accordion-item-border, var(--xh-border-default));
83
94
  }
84
95
 
85
96
  [data-scope='accordion'][data-part='item-separator'][hidden] {
@@ -129,10 +140,10 @@
129
140
  > [data-scope='accordion'][data-part='item']:not(:last-child)::after {
130
141
  content: '';
131
142
  position: absolute;
132
- inset-inline: 3%;
143
+ inset-inline: 0;
133
144
  inset-block-end: 0;
134
145
  block-size: var(--xh-stroke-thin);
135
- background: var(--xh-accordion-item-border, var(--xh-border-subtle));
146
+ background: var(--xh-accordion-item-border, var(--xh-border-default));
136
147
  pointer-events: none;
137
148
  }
138
149
 
@@ -148,8 +159,8 @@
148
159
  [data-scope='accordion'][data-part='trigger'] {
149
160
  --xh-action-gap: var(--xh-accordion-trigger-gap, var(--xh-_action-profile-gap));
150
161
  --xh-action-visual-size: var(--xh-accordion-trigger-h, var(--xh-_action-profile-visual-size));
151
- --xh-action-padding-block: var(--xh-accordion-trigger-py, var(--xh-_action-profile-padding-block));
152
- --xh-action-padding-inline: var(--xh-accordion-trigger-px, var(--xh-_action-profile-padding-inline));
162
+ --xh-action-padding-block: var(--xh-accordion-trigger-py, var(--xh-_accordion-trigger-py));
163
+ --xh-action-padding-inline: var(--xh-accordion-trigger-px, var(--xh-_accordion-trigger-px));
153
164
  --xh-action-radius: var(--xh-accordion-trigger-radius, var(--xh-_action-profile-radius));
154
165
  --xh-action-bg-rest: var(--xh-accordion-trigger-bg, var(--xh-_action-variant-bg-rest));
155
166
  --xh-action-bg-hover: var(--xh-accordion-trigger-bg-hover, var(--xh-_action-variant-bg-hover));
@@ -157,10 +168,11 @@
157
168
  --xh-action-fg-hover: var(--xh-accordion-trigger-fg, var(--xh-_action-variant-fg-hover));
158
169
  --xh-action-fg-pressed: var(--xh-accordion-trigger-fg, var(--xh-_action-variant-fg-pressed));
159
170
  --xh-action-font-size: var(--xh-accordion-trigger-font-size, var(--xh-_action-profile-font-size));
160
- --xh-icon-size: var(--xh-accordion-icon-size, var(--xh-_action-profile-glyph-size));
171
+ --xh-icon-size: var(--xh-accordion-icon-size, var(--xh-glyph-size-sm));
161
172
 
162
173
  border-width: 0;
163
174
  font-weight: var(--xh-accordion-trigger-font-weight, var(--xh-text-label-weight));
175
+ line-height: var(--xh-leading-normal);
164
176
  }
165
177
 
166
178
  /* 展开态自带一个槽:与常态共用一个的话,作者一改常态字色,
@@ -169,6 +181,8 @@
169
181
  --xh-action-fg-rest: var(--xh-accordion-trigger-fg-open, var(--xh-_accordion-open-fg));
170
182
  --xh-action-fg-hover: var(--xh-accordion-trigger-fg-open, var(--xh-_accordion-open-fg));
171
183
  --xh-action-fg-pressed: var(--xh-accordion-trigger-fg-open, var(--xh-_accordion-open-fg));
184
+
185
+ font-weight: var(--xh-accordion-trigger-font-weight-open, var(--xh-font-weight-medium));
172
186
  }
173
187
 
174
188
  /* 禁用条目走 aria-disabled,仍留在 Tab 序里,只是不可操作;前景换成禁用色,不靠 opacity 压暗
@@ -182,7 +196,7 @@
182
196
  align-items: center;
183
197
  justify-content: center;
184
198
  flex: none;
185
- color: var(--xh-accordion-indicator-fg, var(--xh-fg-muted));
199
+ color: var(--xh-accordion-indicator-fg, var(--xh-fg-subtle));
186
200
  line-height: var(--xh-leading-none);
187
201
  }
188
202
 
@@ -215,20 +229,33 @@
215
229
  /* 这里刻意没有 [data-part='content'][hidden] { display: none }:补了动画一帧都播不出来。
216
230
  收起由适配器在退场结束后写内联 display 落成,退场窗口内靠 connect 发的 inert 挡住焦点 */
217
231
  [data-scope='accordion'][data-part='content'] {
218
- /* 行高与内缩同帧动的共享关键帧读这条槽:只有末端有内缩,起端不写、按 0 动 */
232
+ /* 行高与内缩同帧动的共享关键帧读这两条槽,两端内缩一起收放 */
233
+ --xh-_disclosure-pt: var(--xh-accordion-content-pt, var(--xh-_accordion-content-pt));
219
234
  --xh-_disclosure-pb: var(--xh-accordion-content-pb, var(--xh-_accordion-content-pb));
220
235
 
221
236
  display: grid;
222
237
  grid-template-rows: 1fr;
223
238
  overflow: clip;
224
- padding-block-start: 0;
239
+ padding-block-start: var(--xh-accordion-content-pt, var(--xh-_accordion-content-pt));
225
240
  padding-block-end: var(--xh-accordion-content-pb, var(--xh-_accordion-content-pb));
226
241
  padding-inline: var(--xh-accordion-content-px, var(--xh-_accordion-content-px));
227
- color: var(--xh-accordion-content-fg, var(--xh-fg-muted));
228
- font-size: var(--xh-accordion-content-font-size, var(--xh-text-secondary-size));
242
+ /* 正文是标题栏下面一块淡底,与白底标题栏分出层次;淡底容器(subtle)本身已是这层底,正文不再叠一层 */
243
+ background: var(--xh-accordion-content-bg, var(--xh-bg-muted));
244
+ color: var(--xh-accordion-content-fg, var(--xh-fg-default));
245
+ font-size: var(--xh-accordion-content-font-size, var(--xh-text-body-size));
229
246
  line-height: var(--xh-leading-normal);
230
247
  }
231
248
 
249
+ [data-scope='accordion'][data-part='root'][data-variant='subtle'] [data-scope='accordion'][data-part='content'] {
250
+ background: var(--xh-accordion-content-bg, transparent);
251
+ }
252
+
253
+ /* 展开着的标题栏与正文之间一条分隔线,与条与条之间的线同色 */
254
+ [data-scope='accordion'][data-part='content'][data-state='open'] {
255
+ border-block-start: var(--xh-stroke-thin) solid
256
+ var(--xh-accordion-content-border, var(--xh-accordion-item-border, var(--xh-border-default)));
257
+ }
258
+
232
259
  /* 展开与收起只在开合时播:首帧就在的展开 / 收起直接呈现(data-instant) */
233
260
  [data-scope='accordion'][data-part='content'][data-state='open']:not([data-instant]) {
234
261
  animation: xh-disclosure-expand var(--xh-motion-duration-expand) var(--xh-motion-ease-enter-strong);
package/css/alert.css CHANGED
@@ -31,8 +31,8 @@
31
31
  --xh-alert-skin: 1;
32
32
  }
33
33
 
34
- /* 提示本体是一层中性 surface:边界由 --xh-border-default 描边承担、无影(静态反馈面),
35
- 语气只落到图标与标题,不会用整块彩底抢走正文层级。 */
34
+ /* 提示本体是一块语气淡底面(淡底形态:透明边位 + 语气 12% 淡底、无影),语气由底色与图标表达;
35
+ 标题与正文仍取正文色,彩色只落在底与图标上,不让整段文字变色抢走层级。 */
36
36
  [data-scope='alert'][data-part='root'] {
37
37
  /* 作者塞进指示符槽的图标与皮肤画的兜底字形同一把尺:Feedback 指示符统一 md 档 */
38
38
  --xh-icon-size: var(--xh-alert-icon-size, var(--xh-glyph-size-md));
@@ -41,19 +41,18 @@
41
41
  align-items: flex-start;
42
42
  /* 指示符盒自带 --xh-space-1 内衬:与间距合起来,字形到正文 12px,与 Notification 同一个距离 */
43
43
  gap: var(--xh-alert-gap, var(--xh-space-2));
44
- padding-block: var(--xh-alert-py, var(--xh-surface-py-sm));
44
+ padding-block: var(--xh-alert-py, var(--xh-space-2));
45
45
  padding-inline: var(--xh-alert-px, var(--xh-surface-px-sm));
46
- border: var(--xh-stroke-thin) solid var(--xh-alert-border, var(--xh-border-default));
47
- border-radius: var(--xh-alert-radius, var(--xh-shape-surface));
48
- background: var(--xh-alert-bg, var(--xh-bg-surface));
46
+ border: var(--xh-stroke-thin) solid var(--xh-alert-border, transparent);
47
+ border-radius: var(--xh-alert-radius, var(--xh-shape-control));
48
+ background: var(--xh-alert-bg, var(--xh-_tone-subtle, var(--xh-bg-subtle)));
49
49
  box-shadow: var(--xh-alert-shadow, none);
50
50
  color: var(--xh-alert-fg, var(--xh-fg-default));
51
51
  font-size: var(--xh-alert-font-size, var(--xh-text-body-size));
52
52
  line-height: var(--xh-alert-leading, var(--xh-leading-normal));
53
53
  }
54
54
 
55
- /* 横幅:页面顶部的通栏,贴着页面或容器的边铺满整行。贴边的三条边是页面自己的边,画出来只会压在边上;
56
- 边界只留朝向页面内容的块尾一道,与页面内容同一层、同一种描边。贴边铺满的栏不取圆角:
55
+ /* 横幅:页面顶部的通栏,贴着页面或容器的边铺满整行。面本身就是语气淡底,不另画边;贴边铺满的栏不取圆角:
57
56
  圆了会在两个角露出底下的页面。面与语气规则与页内提示相同,横幅不换底色 */
58
57
  [data-scope='alert'][data-part='root'][data-banner] {
59
58
  inline-size: 100%;
@@ -125,9 +124,9 @@
125
124
 
126
125
  [data-scope='alert'][data-part='title'] {
127
126
  flex: none;
128
- color: var(--xh-alert-title-fg, var(--xh-_tone-fg));
129
- font-size: var(--xh-alert-title-font-size, var(--xh-text-label-size));
130
- font-weight: var(--xh-alert-title-font-weight, var(--xh-font-weight-semibold));
127
+ color: var(--xh-alert-title-fg, var(--xh-fg-default));
128
+ font-size: var(--xh-alert-title-font-size, var(--xh-text-heading-3-size));
129
+ font-weight: var(--xh-alert-title-font-weight, var(--xh-text-heading-3-weight));
131
130
  line-height: var(--xh-alert-title-leading, var(--xh-leading-tight));
132
131
  }
133
132
 
@@ -142,16 +141,16 @@
142
141
  display: none;
143
142
  }
144
143
 
145
- /* 关闭钮是只有字形的离散动作钮:盒几何、悬停 / 按下与 0.97 按压、粗指针热区、焦点环、禁用面全由
144
+ /* 关闭钮是只有字形的离散动作钮:盒几何、悬停 / 按下与按压、粗指针热区、焦点环、禁用面全由
146
145
  Action Control 的 icon ghost 档给(连接层投 sm:与此前 --xh-control-h-sm 同尺寸),组件只映射既有使用者槽。
147
- 静息透明;提示本体是白底承载,hover 100 → pressed 200,写了语气时悬停底跟着语气走(--xh-_tone-subtle)。
146
+ 静息透明;提示本体是语气淡底(12%),叉的悬停 / 按下沿语气淡底再升一档、两档(20% / 28%)。
148
147
  closable=false 时连接层同时给 hidden 与 disabled / data-disabled,家族按后者收掉反馈 */
149
148
  [data-scope='alert'][data-part='close-trigger'] {
150
149
  --xh-action-visual-size: var(--xh-alert-close-size, var(--xh-_action-profile-visual-size));
151
150
  --xh-action-min-inline-size: var(--xh-alert-close-size, var(--xh-_action-profile-visual-size));
152
151
  --xh-action-radius: var(--xh-alert-close-radius, var(--xh-shape-control));
153
- --xh-action-bg-hover: var(--xh-alert-close-bg-hover, var(--xh-_action-variant-bg-hover));
154
- --xh-action-bg-pressed: var(--xh-alert-close-bg-active, var(--xh-_action-variant-bg-pressed));
152
+ --xh-action-bg-hover: var(--xh-alert-close-bg-hover, var(--xh-_tone-subtle-hover, var(--xh-_action-variant-bg-hover)));
153
+ --xh-action-bg-pressed: var(--xh-alert-close-bg-active, var(--xh-_tone-subtle-active, var(--xh-_action-variant-bg-pressed)));
155
154
  --xh-action-fg-rest: var(--xh-alert-close-fg, var(--xh-fg-muted));
156
155
  --xh-action-fg-hover: var(--xh-alert-close-fg-hover, var(--xh-fg-default));
157
156
  --xh-action-fg-pressed: var(--xh-alert-close-fg-hover, var(--xh-fg-default));
package/css/anchor.css CHANGED
@@ -24,10 +24,10 @@
24
24
  --xh-_anchor-link-px: var(--xh-control-px-md);
25
25
  /* 当前那一节的指示条与文字随语气走。没写 data-tone 时这两个槽都没被声明,退回品牌色。
26
26
  指示条是装饰性的色条,取柔和档;文字要压在普通背景上读,取语气的文字档——
27
- 导航当前页缺省是 --xh-fg-brand-strong,比指示条深一档。
27
+ 导航当前页缺省是 --xh-fg-brand,与指示条同一档主色。
28
28
  聚焦环不在其列,它恒是 --xh-ring-focus */
29
29
  --xh-_anchor-accent: var(--xh-_tone-soft, var(--xh-fg-brand));
30
- --xh-_anchor-accent-text: var(--xh-_tone-fg, var(--xh-fg-brand-strong));
30
+ --xh-_anchor-accent-text: var(--xh-_tone-fg, var(--xh-fg-brand));
31
31
 
32
32
  color: var(--xh-anchor-fg, var(--xh-fg-muted));
33
33
  font-size: var(--xh-anchor-font-size, var(--xh-_anchor-font-size));
package/css/approval.css CHANGED
@@ -136,7 +136,7 @@
136
136
  margin: 0;
137
137
  color: var(--xh-approval-title-fg, var(--xh-fg-default));
138
138
  font-size: var(--xh-approval-title-font-size, var(--xh-text-label-size));
139
- font-weight: var(--xh-approval-title-font-weight, var(--xh-font-weight-semibold));
139
+ font-weight: var(--xh-approval-title-font-weight, var(--xh-font-weight-medium));
140
140
  line-height: var(--xh-leading-tight);
141
141
  }
142
142
 
@@ -265,7 +265,7 @@
265
265
  display: none;
266
266
  }
267
267
 
268
- /* 备注:附在判定上的一句自由文本,占满整行 */
268
+ /* 备注:附在判定上的一句自由文本,占满整行。框照字段外壳:字段淡底 + 控件描边,悬停描边升一档 */
269
269
  [data-scope='approval'][data-part='note'] {
270
270
  display: block;
271
271
  inline-size: 100%;
@@ -273,26 +273,43 @@
273
273
  padding-block: var(--xh-approval-note-py, var(--xh-space-1_5));
274
274
  border: var(--xh-stroke-thin) solid var(--xh-approval-note-border, var(--xh-border-control));
275
275
  border-radius: var(--xh-approval-note-radius, var(--xh-shape-control));
276
- background: var(--xh-approval-note-bg, var(--xh-bg-surface));
276
+ background: var(--xh-approval-note-bg, var(--xh-bg-field));
277
277
  color: var(--xh-approval-note-fg, var(--xh-fg-default));
278
278
  font-family: inherit;
279
279
  font-size: var(--xh-approval-note-font-size, var(--xh-_approval-note-font-size));
280
- transition: border-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
280
+ transition:
281
+ background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
282
+ border-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
281
283
  }
282
284
 
283
285
  [data-scope='approval'][data-part='note'][hidden] {
284
286
  display: none;
285
287
  }
286
288
 
287
- [data-scope='approval'][data-part='note']:disabled {
288
- color: var(--xh-fg-disabled);
289
+ [data-scope='approval'][data-part='note']:hover:not(:disabled, :focus, [data-invalid]) {
290
+ border-color: var(--xh-approval-note-border-hover, var(--xh-border-strong));
289
291
  }
290
292
 
291
- /* 要求写理由而空着就按了拒绝:描边换成无效色;焦点也已带到这里,焦点环压在描边外面,一并换色 */
292
- [data-scope='approval'][data-part='note'][data-invalid] {
293
- --xh-_ring-color: var(--xh-approval-note-ring-invalid, var(--xh-ring-invalid));
293
+ /* 聚焦换承载面底 + 品牌描边,不画环:焦点由描边换色与底色差标出,强制色档补一圈 Highlight 环 */
294
+ [data-scope='approval'][data-part='note']:focus-within {
295
+ border-color: var(--xh-approval-note-border-focus, var(--xh-border-control-focus));
296
+ background: var(--xh-approval-note-bg-focus, var(--xh-bg-surface));
297
+ }
298
+
299
+ [data-scope='approval'][data-part='note']:focus-visible {
300
+ outline: none;
301
+ }
294
302
 
303
+ /* 要求写理由而空着就按了拒绝:换无效淡底 + 无效描边;焦点也已带到这里,聚焦时同样不画环 */
304
+ [data-scope='approval'][data-part='note'][data-invalid] {
295
305
  border-color: var(--xh-approval-note-border-invalid, var(--xh-border-invalid));
306
+ background: var(--xh-approval-note-bg-invalid, var(--xh-bg-field-invalid));
307
+ }
308
+
309
+ [data-scope='approval'][data-part='note']:disabled {
310
+ border-color: var(--xh-approval-note-border-disabled, var(--xh-border-default));
311
+ background: var(--xh-approval-note-bg-disabled, var(--xh-bg-subtle));
312
+ color: var(--xh-fg-disabled);
296
313
  }
297
314
 
298
315
  /* 剩余时间:等宽数字,逐秒跳字时不左右晃 */
@@ -307,16 +324,18 @@
307
324
  display: none;
308
325
  }
309
326
 
310
- /* 判定结果条:判过了才露出,语气随判定走 */
327
+ /* 判定结果条:判过了才露出,语气随判定走。与 Tag 的 sm 档同一副方签——control 圆角、块尺寸取 chip 档、竖向内衬为 0 */
311
328
  [data-scope='approval'][data-part='result'] {
312
329
  display: inline-flex;
313
330
  align-self: flex-start;
314
331
  align-items: center;
332
+ box-sizing: border-box;
315
333
  gap: var(--xh-approval-result-gap, var(--xh-space-1));
334
+ min-block-size: var(--xh-approval-result-h, var(--xh-chip-h-sm));
316
335
  padding-inline: var(--xh-approval-result-px, var(--xh-space-1_5));
317
- padding-block: var(--xh-approval-result-py, var(--xh-space-0_5));
336
+ padding-block: var(--xh-approval-result-py, 0);
318
337
  border: var(--xh-stroke-thin) solid transparent;
319
- border-radius: var(--xh-approval-result-radius, var(--xh-shape-pill));
338
+ border-radius: var(--xh-approval-result-radius, var(--xh-shape-control));
320
339
  background: var(--xh-approval-result-bg, var(--xh-_tone-subtle));
321
340
  color: var(--xh-approval-result-fg, var(--xh-_tone-fg));
322
341
  font-size: var(--xh-approval-result-font-size, var(--xh-text-caption-size));
@@ -470,11 +489,16 @@
470
489
  --xh-_approval-note-font-size: var(--xh-control-font-lg);
471
490
  }
472
491
 
473
- /* 强制色:底色会被系统背景吃掉,呼吸点改用系统前景色 */
492
+ /* 强制色:底色会被系统背景吃掉,呼吸点改用系统前景色;备注框聚焦不画环、描边又被换成系统色,补一圈 Highlight 环 */
474
493
  @media (forced-colors: active) {
475
494
  [data-scope='approval'][data-part='pending-indicator'] {
476
495
  background: CanvasText;
477
496
  }
497
+
498
+ [data-scope='approval'][data-part='note']:focus {
499
+ outline: var(--xh-ring-width) solid Highlight;
500
+ outline-offset: var(--xh-ring-offset);
501
+ }
478
502
  }
479
503
 
480
504
  @media print {
@@ -19,10 +19,12 @@
19
19
  既不让页面上的层号插进来,也不让它们漏出去压住别人 */
20
20
  isolation: isolate;
21
21
 
22
- /* 私有槽位:整组共用的直径、字号与叠放量,换档只改这三个 */
22
+ /* 私有槽位:整组共用的直径、字号与叠放量。直径随档换;字号取直径一半(与单枚头像同一条规则);
23
+ 叠放量三档同为 8px,大头像压住的那段不跟着变宽 */
23
24
  --xh-_avatar-group-size: var(--xh-avatar-group-size, var(--xh-control-h-md));
24
- --xh-_avatar-group-font-size: var(--xh-avatar-group-font-size, var(--xh-control-caption-md));
25
- --xh-_avatar-group-overlap: var(--xh-avatar-group-overlap, var(--xh-space-2_5));
25
+ --xh-_avatar-group-half-size: calc(var(--xh-_avatar-group-size) / 2);
26
+ --xh-_avatar-group-font-size: var(--xh-avatar-group-font-size, var(--xh-_avatar-group-half-size));
27
+ --xh-_avatar-group-overlap: var(--xh-avatar-group-overlap, var(--xh-space-2));
26
28
 
27
29
  /* 流给组内每一枚 */
28
30
  --xh-avatar-size: var(--xh-_avatar-group-size);
@@ -39,18 +41,13 @@
39
41
  }
40
42
 
41
43
  /* —— 尺寸 —— */
42
- /* 三档对齐控件档位,缺省档写在上面的基础规则里;
43
- 字号与叠放量跟着直径一起缩放,小头像里回退字放得下、大头像里压住的那段也按比例长 */
44
+ /* 三档对齐控件档位,缺省档写在上面的基础规则里;字号由直径算出,只换直径 */
44
45
  [data-scope='avatar-group'][data-part='root'][data-size='sm'] {
45
46
  --xh-_avatar-group-size: var(--xh-avatar-group-size, var(--xh-control-h-sm));
46
- --xh-_avatar-group-font-size: var(--xh-avatar-group-font-size, var(--xh-control-caption-sm));
47
- --xh-_avatar-group-overlap: var(--xh-avatar-group-overlap, var(--xh-space-2));
48
47
  }
49
48
 
50
49
  [data-scope='avatar-group'][data-part='root'][data-size='lg'] {
51
50
  --xh-_avatar-group-size: var(--xh-avatar-group-size, var(--xh-control-h-lg));
52
- --xh-_avatar-group-font-size: var(--xh-avatar-group-font-size, var(--xh-control-caption-lg));
53
- --xh-_avatar-group-overlap: var(--xh-avatar-group-overlap, var(--xh-space-3));
54
51
  }
55
52
 
56
53
  /* —— 叠放 —— */
@@ -76,7 +73,7 @@
76
73
  }
77
74
 
78
75
  /* —— 溢出计数 —— */
79
- /* 「+N」是这一排里的又一枚:直径、形状与字号跟着组走,里面写什么由作者定 */
76
+ /* 「+N」是这一排里的又一枚:直径、形状、字号与面跟着组里的头像走,里面写什么由作者定 */
80
77
  [data-scope='avatar-group'][data-part='overflow-item'] {
81
78
  display: inline-flex;
82
79
  flex: none;
@@ -85,8 +82,8 @@
85
82
  inline-size: var(--xh-_avatar-group-size);
86
83
  block-size: var(--xh-_avatar-group-size);
87
84
  border-radius: var(--xh-avatar-group-radius, var(--xh-shape-circle));
88
- background: var(--xh-avatar-group-overflow-item-bg, var(--xh-bg-muted-opaque));
89
- color: var(--xh-avatar-group-overflow-item-fg, var(--xh-fg-muted));
85
+ background: var(--xh-avatar-group-overflow-item-bg, var(--xh-bg-subtle-active-opaque));
86
+ color: var(--xh-avatar-group-overflow-item-fg, var(--xh-fg-default));
90
87
  font-size: var(--xh-_avatar-group-font-size);
91
88
  font-weight: var(--xh-avatar-group-font-weight, var(--xh-font-weight-medium));
92
89
  line-height: var(--xh-leading-none);
package/css/avatar.css CHANGED
@@ -15,38 +15,40 @@
15
15
  }
16
16
 
17
17
  [data-scope='avatar'][data-part='root'] {
18
+ /* 直径:外层槽在前(头像组整排齐平走它),各档的档值在后 */
19
+ --xh-_avatar-size: var(--xh-avatar-size, var(--xh-control-h-md));
20
+ /* 回退字号取直径的一半:一两个字的缩写在圆里占得住,随直径一起缩放 */
21
+ --xh-_avatar-font-size: calc(var(--xh-_avatar-size) / 2);
22
+
18
23
  position: relative;
19
24
  display: inline-flex;
20
25
  flex: none;
21
26
  align-items: center;
22
27
  justify-content: center;
23
28
  overflow: hidden;
24
- inline-size: var(--xh-avatar-size, var(--xh-control-h-md));
25
- block-size: var(--xh-avatar-size, var(--xh-control-h-md));
29
+ inline-size: var(--xh-_avatar-size);
30
+ block-size: var(--xh-_avatar-size);
26
31
  border-radius: var(--xh-avatar-radius, var(--xh-shape-circle));
27
- /* 头像在头像组里层叠:底取淡底的不透明档,半透明会透出压在下面的那一枚 */
28
- background: var(--xh-avatar-bg, var(--xh-bg-subtle-opaque));
29
- color: var(--xh-avatar-fg, var(--xh-fg-muted));
30
- font-size: var(--xh-avatar-font-size, var(--xh-text-secondary-size));
32
+ /* 头像在头像组里层叠:底取淡底的不透明档,半透明会透出压在下面的那一枚。
33
+ 取加深一档的不透明淡底、字取正文色:白字压在这层灰上只有 1.6:1,次要字色在暗色的加深底上
34
+ 也到不了 4.5:1 */
35
+ background: var(--xh-avatar-bg, var(--xh-bg-subtle-active-opaque));
36
+ color: var(--xh-avatar-fg, var(--xh-fg-default));
37
+ font-size: var(--xh-avatar-font-size, var(--xh-_avatar-font-size));
31
38
  font-weight: var(--xh-avatar-font-weight, var(--xh-font-weight-medium));
32
39
  line-height: var(--xh-leading-none);
33
40
  user-select: none;
34
41
  }
35
42
 
36
- /* 三档尺寸对齐控件档位,缺省档写在上面的基础规则里;
37
- 字号跟着一起缩放,回退字才在小头像里放得下、在大头像里不显小。
38
- 每一档都把 --xh-avatar-size / --xh-avatar-font-size 排在自己的档值前面:这两个槽是
39
- 外层统一整排头像的通道,档值直接写终值的话,写了 data-size 的那一枚就脱离外层控制 */
43
+ /* 三档尺寸对齐控件档位,缺省档写在上面的基础规则里;字号随直径取一半,跟着一起缩放。
44
+ 每一档都把 --xh-avatar-size 排在自己的档值前面:这个槽是外层统一整排头像的通道,
45
+ 档值直接写终值的话,写了 data-size 的那一枚就脱离外层控制 */
40
46
  [data-scope='avatar'][data-part='root'][data-size='sm'] {
41
- inline-size: var(--xh-avatar-size, var(--xh-control-h-sm));
42
- block-size: var(--xh-avatar-size, var(--xh-control-h-sm));
43
- font-size: var(--xh-avatar-font-size, var(--xh-control-caption-sm));
47
+ --xh-_avatar-size: var(--xh-avatar-size, var(--xh-control-h-sm));
44
48
  }
45
49
 
46
50
  [data-scope='avatar'][data-part='root'][data-size='lg'] {
47
- inline-size: var(--xh-avatar-size, var(--xh-control-h-lg));
48
- block-size: var(--xh-avatar-size, var(--xh-control-h-lg));
49
- font-size: var(--xh-avatar-font-size, var(--xh-control-caption-lg));
51
+ --xh-_avatar-size: var(--xh-avatar-size, var(--xh-control-h-lg));
50
52
  }
51
53
 
52
54
  /* —— 语气 ——
@@ -54,8 +56,8 @@
54
56
  两条声明都把 --xh-avatar-bg / --xh-avatar-fg 排在语气值前面:使用者槽仍是最外那一层,
55
57
  写了 tone 的那一枚照样受外层统一控制。整块带 [data-tone] 限定,没写语气的头像逐值不变 */
56
58
  [data-scope='avatar'][data-part='root'][data-tone] {
57
- background: var(--xh-avatar-bg, var(--xh-_tone-subtle, var(--xh-bg-subtle-opaque)));
58
- color: var(--xh-avatar-fg, var(--xh-_tone-fg, var(--xh-fg-muted)));
59
+ background: var(--xh-avatar-bg, var(--xh-_tone-subtle, var(--xh-bg-subtle-active-opaque)));
60
+ color: var(--xh-avatar-fg, var(--xh-_tone-fg, var(--xh-fg-default)));
59
61
  }
60
62
 
61
63
  /* 不声明 display,加载完成前的 hidden 直接交给浏览器的 [hidden] 规则收起。
package/css/back-top.css CHANGED
@@ -18,22 +18,35 @@
18
18
  /* 定位壳:钉在视口的尾下角,用逻辑属性,RTL 下自动换到另一侧。
19
19
  不声明 display —— 收起态由连接层写 hidden,UA 的 [hidden]{display:none} 得压得住 */
20
20
  [data-scope='back-top'][data-part='root'] {
21
+ /* 钮的尺:md 取独立浮钮的直径(40px),sm / lg 取方格档;字形比控件内图标低一档(sm / md 16px、lg 20px) */
22
+ --xh-_back-top-size: var(--xh-control-float-md);
23
+ --xh-_back-top-glyph-size: var(--xh-glyph-size-sm);
24
+
21
25
  position: fixed;
22
26
  /* 贴边与安全区取大的一头:底部横条与圆角压住的那一段由系统给出,贴边比它窄时钮会被切掉一角。
23
27
  桌面上 env() 恒为 0,取值与贴边槽完全一致。安全区只有物理方向的名字,
24
28
  行内轴上两侧同取较宽的那一段,RTL 下不会翻错边。 */
25
- inset-block-end: max(var(--xh-back-top-inset-block, var(--xh-space-8)), env(safe-area-inset-bottom));
29
+ inset-block-end: max(var(--xh-back-top-inset-block, var(--xh-space-6)), env(safe-area-inset-bottom));
26
30
  inset-inline-end: max(
27
- var(--xh-back-top-inset-inline, var(--xh-space-8)),
31
+ var(--xh-back-top-inset-inline, var(--xh-space-6)),
28
32
  env(safe-area-inset-left),
29
33
  env(safe-area-inset-right)
30
34
  );
31
35
  z-index: var(--xh-back-top-layer, var(--xh-layer-sticky));
32
36
  }
33
37
 
38
+ [data-scope='back-top'][data-part='root'][data-size='sm'] {
39
+ --xh-_back-top-size: var(--xh-control-box-sm);
40
+ }
41
+
42
+ [data-scope='back-top'][data-part='root'][data-size='lg'] {
43
+ --xh-_back-top-size: var(--xh-control-box-lg);
44
+ --xh-_back-top-glyph-size: var(--xh-glyph-size-md);
45
+ }
46
+
34
47
  /* —— 触发器 ——
35
- 浮在内容之上的单图标圆钮,接 Action Control floating 档:盒型(md = box-lg 48px,圆形)、
36
- 四态面、0.97 按压与 44px 命中区由家族配方按 data-xh-action-variant / -size 给出。
48
+ 浮在内容之上的单图标圆钮,接 Action Control floating 档:圆形、四态面、按压与 44px 命中区
49
+ 由家族配方按 data-xh-action-variant / -size 给出;视觉盒与字形取根上按档给的尺。
37
50
  这里只把公开槽桥接到矩阵之前(使用者槽 → 形态矩阵 → 家族缺省)与几何槽映射。
38
51
  整件只有这一颗按钮,槽名与其余一样不带部件段(照 float-button 的 --xh-float-button-size) */
39
52
  [data-scope='back-top'][data-part='trigger'] {
@@ -58,9 +71,10 @@
58
71
  --xh-action-shadow-focus-visible: var(--xh-back-top-shadow, none);
59
72
  --xh-action-shadow-disabled: var(--xh-back-top-shadow, none);
60
73
  --xh-action-radius: var(--xh-back-top-radius, var(--xh-_action-profile-radius));
61
- --xh-action-visual-size: var(--xh-back-top-size, var(--xh-_action-profile-visual-size));
62
- /* 作者塞进来的图标跟着 floating 档走(md 24px),与皮肤画的兜底字形同一把尺 */
63
- --xh-icon-size: var(--xh-back-top-icon-size, var(--xh-_action-profile-glyph-size));
74
+ --xh-action-visual-size: var(--xh-back-top-size, var(--xh-_back-top-size));
75
+ --xh-action-min-inline-size: var(--xh-back-top-size, var(--xh-_back-top-size));
76
+ /* 作者塞进来的图标与皮肤画的兜底字形同一把尺 */
77
+ --xh-icon-size: var(--xh-back-top-icon-size, var(--xh-_back-top-glyph-size));
64
78
  }
65
79
 
66
80
  /* 缺省 outline 是 frosted 材质面:连接层只在这一档投影 data-xh-material,面由材质家族配方给——
package/css/badge.css CHANGED
@@ -34,9 +34,9 @@
34
34
  [data-scope='badge'][data-part='indicator'] {
35
35
  /* 每一档的盒都要大于字号:两位数在等高的盒里会被撑破。
36
36
  字号刻度最小就是 12px,所以往上抬盒子而不是往下压字。
37
- 盒只比字高一档:20px 扣掉两道 1px 描边还剩 18px 内高,13px 的两位数与「99+」立得住,
38
- 角标又不会大过它贴着的宿主文字 */
39
- --xh-_badge-dot: var(--xh-space-2);
37
+ 盒比字高一档半:20px 扣掉两道 1px 描边还剩 18px 内高,13px 的两位数与「99+」立得住,
38
+ 角标又不会大过它贴着的宿主文字;圆点 6px,只标存在、不抢宿主 */
39
+ --xh-_badge-dot: var(--xh-space-1_5);
40
40
  --xh-_badge-min: var(--xh-space-5);
41
41
  --xh-_badge-px: var(--xh-space-1);
42
42
  --xh-_badge-font: var(--xh-text-secondary-size);
@@ -175,7 +175,7 @@
175
175
  /* 小号是贴在 16px 图标角上的角标:盒取 12 + 2 的半阶补偿 = 14px,字仍是刻度最小的 12px——
176
176
  数字的字面只占字号的六成,扣掉两道 1px 描边后的 12px 内高装得下两位数,再小就得压字 */
177
177
  [data-scope='badge'][data-part='indicator'][data-size='sm'] {
178
- --xh-_badge-dot: var(--xh-space-1_5);
178
+ --xh-_badge-dot: var(--xh-space-1);
179
179
  --xh-_badge-min: calc(var(--xh-space-3) + var(--xh-space-0_5));
180
180
  --xh-_badge-px: var(--xh-space-0_5);
181
181
  --xh-_badge-font: var(--xh-text-caption-size);
@@ -183,7 +183,7 @@
183
183
 
184
184
  /* 大号只往上抬一级:盒 24px、字 14px,仍是角标,不长成与宿主同级的一枚按钮 */
185
185
  [data-scope='badge'][data-part='indicator'][data-size='lg'] {
186
- --xh-_badge-dot: var(--xh-space-2_5);
186
+ --xh-_badge-dot: var(--xh-space-2);
187
187
  --xh-_badge-min: var(--xh-space-6);
188
188
  --xh-_badge-px: var(--xh-space-1_5);
189
189
  --xh-_badge-font: var(--xh-text-body-size);