@xihan-ui/styles 3.1.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 (290) hide show
  1. package/CHANGELOG.md +470 -0
  2. package/component-tokens.d.ts +230 -60
  3. package/components.tokens.json +5156 -1557
  4. package/css/accordion.css +47 -20
  5. package/css/alert.css +16 -17
  6. package/css/anchor.css +2 -2
  7. package/css/approval.css +41 -17
  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 +13 -12
  15. package/css/calendar-picker.css +178 -95
  16. package/css/calendar-range-picker.css +207 -122
  17. package/css/card.css +34 -6
  18. package/css/carousel.css +94 -46
  19. package/css/cartesian-chart.css +11 -11
  20. package/css/cascader.css +51 -39
  21. package/css/checkbox-group.css +9 -6
  22. package/css/checkbox.css +5 -4
  23. package/css/citation.css +9 -4
  24. package/css/clipboard.css +20 -4
  25. package/css/code-view.css +6 -6
  26. package/css/collapsible.css +29 -14
  27. package/css/color-field.css +4 -4
  28. package/css/color-picker.css +77 -23
  29. package/css/color-slider.css +10 -8
  30. package/css/color-swatch-picker.css +14 -9
  31. package/css/combobox.css +26 -14
  32. package/css/command.css +14 -9
  33. package/css/context-menu.css +10 -5
  34. package/css/date-field.css +12 -6
  35. package/css/date-picker.css +178 -109
  36. package/css/date-range-picker.css +199 -130
  37. package/css/description.css +10 -6
  38. package/css/descriptions.css +47 -19
  39. package/css/dialog.css +50 -35
  40. package/css/diff-view.css +8 -8
  41. package/css/drawer.css +75 -21
  42. package/css/editable.css +15 -41
  43. package/css/empty-state.css +21 -3
  44. package/css/field-array.css +5 -2
  45. package/css/field.css +17 -18
  46. package/css/fieldset.css +33 -13
  47. package/css/file-upload.css +66 -33
  48. package/css/float-button.css +60 -35
  49. package/css/floating-panel.css +1 -1
  50. package/css/form.css +30 -16
  51. package/css/graph-chart.css +2 -2
  52. package/css/grid-list.css +1 -1
  53. package/css/highlight.css +5 -5
  54. package/css/hover-card.css +19 -12
  55. package/css/image-viewer.css +77 -27
  56. package/css/image.css +13 -5
  57. package/css/infinite-scroll.css +8 -4
  58. package/css/input-group.css +74 -26
  59. package/css/kbd.css +1 -1
  60. package/css/label.css +27 -11
  61. package/css/layout.css +17 -10
  62. package/css/list.css +13 -9
  63. package/css/listbox.css +12 -7
  64. package/css/loading-bar.css +3 -0
  65. package/css/mention.css +11 -9
  66. package/css/menu.css +10 -5
  67. package/css/menubar.css +13 -8
  68. package/css/message-feed.css +1 -1
  69. package/css/navigation-menu.css +2 -2
  70. package/css/notification.css +132 -49
  71. package/css/number-animation.css +2 -2
  72. package/css/number-field.css +75 -52
  73. package/css/page-header.css +64 -27
  74. package/css/pagination.css +35 -38
  75. package/css/password-input.css +12 -68
  76. package/css/pin-input.css +18 -26
  77. package/css/popconfirm.css +23 -14
  78. package/css/popover.css +18 -12
  79. package/css/progress.css +14 -13
  80. package/css/prompt-input.css +3 -3
  81. package/css/question-flow.css +41 -15
  82. package/css/radar-chart.css +6 -6
  83. package/css/radio-group.css +120 -55
  84. package/css/rating.css +32 -15
  85. package/css/select.css +16 -12
  86. package/css/separator.css +24 -6
  87. package/css/side-nav.css +29 -24
  88. package/css/signature-pad.css +23 -9
  89. package/css/skeleton.css +12 -12
  90. package/css/slider.css +77 -48
  91. package/css/sortable.css +2 -2
  92. package/css/sparkline.css +8 -2
  93. package/css/spinner.css +40 -20
  94. package/css/statistic.css +14 -14
  95. package/css/steps.css +115 -84
  96. package/css/switch.css +9 -7
  97. package/css/table.css +29 -12
  98. package/css/tabs.css +35 -12
  99. package/css/tag-group.css +17 -6
  100. package/css/tag.css +54 -29
  101. package/css/tags-input.css +39 -20
  102. package/css/text-field.css +5 -5
  103. package/css/time-field.css +4 -4
  104. package/css/time-picker.css +150 -64
  105. package/css/time-range-picker.css +91 -62
  106. package/css/timeline.css +37 -20
  107. package/css/timer.css +3 -3
  108. package/css/toggle-group.css +4 -4
  109. package/css/tool-call.css +13 -11
  110. package/css/toolbar.css +6 -5
  111. package/css/tooltip.css +16 -17
  112. package/css/tour.css +14 -7
  113. package/css/transfer.css +22 -16
  114. package/css/tree-select.css +12 -12
  115. package/css/tree.css +26 -25
  116. package/css/typography.css +28 -25
  117. package/dist/css/accordion.css +296 -0
  118. package/dist/css/affix.css +47 -0
  119. package/dist/css/alert.css +246 -0
  120. package/dist/css/anchor.css +252 -0
  121. package/dist/css/approval.css +525 -0
  122. package/dist/css/avatar-group.css +96 -0
  123. package/dist/css/avatar.css +100 -0
  124. package/dist/css/back-top.css +175 -0
  125. package/dist/css/badge.css +205 -0
  126. package/dist/css/bar-code.css +62 -0
  127. package/dist/css/breadcrumb.css +232 -0
  128. package/dist/css/button-group.css +261 -0
  129. package/dist/css/button.css +216 -0
  130. package/dist/css/calendar-picker.css +550 -0
  131. package/dist/css/calendar-range-picker.css +639 -0
  132. package/dist/css/card.css +249 -0
  133. package/dist/css/carousel.css +726 -0
  134. package/dist/css/cartesian-chart.css +830 -0
  135. package/dist/css/cascader.css +973 -0
  136. package/dist/css/checkbox-group.css +361 -0
  137. package/dist/css/checkbox.css +258 -0
  138. package/dist/css/citation.css +475 -0
  139. package/dist/css/clipboard.css +331 -0
  140. package/dist/css/code-view.css +374 -0
  141. package/dist/css/collapsible.css +200 -0
  142. package/dist/css/color-field.css +176 -0
  143. package/dist/css/color-picker.css +649 -0
  144. package/dist/css/color-slider.css +283 -0
  145. package/dist/css/color-swatch-picker.css +250 -0
  146. package/dist/css/color-swatch.css +35 -0
  147. package/dist/css/combobox.css +578 -0
  148. package/dist/css/command.css +404 -0
  149. package/dist/css/context-menu.css +425 -0
  150. package/dist/css/date-field.css +317 -0
  151. package/dist/css/date-picker.css +931 -0
  152. package/dist/css/date-range-picker.css +949 -0
  153. package/dist/css/description.css +71 -0
  154. package/dist/css/descriptions.css +327 -0
  155. package/dist/css/dialog.css +470 -0
  156. package/dist/css/diff-view.css +513 -0
  157. package/dist/css/download-trigger.css +151 -0
  158. package/dist/css/drawer.css +606 -0
  159. package/dist/css/editable.css +269 -0
  160. package/dist/css/empty-state.css +181 -0
  161. package/dist/css/field-array.css +229 -0
  162. package/dist/css/field.css +165 -0
  163. package/dist/css/fieldset.css +122 -0
  164. package/dist/css/file-upload.css +462 -0
  165. package/dist/css/flex.css +441 -0
  166. package/dist/css/float-button.css +579 -0
  167. package/dist/css/floating-panel.css +429 -0
  168. package/dist/css/focus.css +46 -0
  169. package/dist/css/forced-colors.css +93 -0
  170. package/dist/css/form.css +407 -0
  171. package/dist/css/funnel-chart.css +106 -0
  172. package/dist/css/graph-chart.css +205 -0
  173. package/dist/css/grid-list.css +235 -0
  174. package/dist/css/grid.css +1201 -0
  175. package/dist/css/heatmap.css +552 -0
  176. package/dist/css/hierarchy-chart.css +298 -0
  177. package/dist/css/highlight.css +41 -0
  178. package/dist/css/hover-card.css +233 -0
  179. package/dist/css/icon.css +225 -0
  180. package/dist/css/image-cropper.css +373 -0
  181. package/dist/css/image-viewer.css +588 -0
  182. package/dist/css/image.css +106 -0
  183. package/dist/css/infinite-scroll.css +81 -0
  184. package/dist/css/input-group.css +323 -0
  185. package/dist/css/json-viewer.css +379 -0
  186. package/dist/css/kbd.css +72 -0
  187. package/dist/css/label.css +94 -0
  188. package/dist/css/layers.css +7 -0
  189. package/dist/css/layout.css +379 -0
  190. package/dist/css/liquid.css +106 -0
  191. package/dist/css/list.css +156 -0
  192. package/dist/css/listbox.css +395 -0
  193. package/dist/css/loading-bar.css +144 -0
  194. package/dist/css/log.css +306 -0
  195. package/dist/css/markdown-stream.css +149 -0
  196. package/dist/css/marquee.css +378 -0
  197. package/dist/css/masonry.css +70 -0
  198. package/dist/css/matrix-code.css +67 -0
  199. package/dist/css/mention.css +395 -0
  200. package/dist/css/menu.css +369 -0
  201. package/dist/css/menubar.css +461 -0
  202. package/dist/css/message-feed.css +318 -0
  203. package/dist/css/navigation-menu.css +513 -0
  204. package/dist/css/notification.css +865 -0
  205. package/dist/css/number-animation.css +44 -0
  206. package/dist/css/number-field.css +275 -0
  207. package/dist/css/overlay-arrow.css +56 -0
  208. package/dist/css/page-header.css +221 -0
  209. package/dist/css/pagination.css +447 -0
  210. package/dist/css/password-input.css +335 -0
  211. package/dist/css/pie-chart.css +247 -0
  212. package/dist/css/pin-input.css +191 -0
  213. package/dist/css/pointer.css +36 -0
  214. package/dist/css/popconfirm.css +329 -0
  215. package/dist/css/popover.css +285 -0
  216. package/dist/css/progress.css +502 -0
  217. package/dist/css/prompt-input.css +260 -0
  218. package/dist/css/question-flow.css +579 -0
  219. package/dist/css/radar-chart.css +233 -0
  220. package/dist/css/radio-group.css +663 -0
  221. package/dist/css/rating.css +311 -0
  222. package/dist/css/reasoning.css +343 -0
  223. package/dist/css/reset.css +117 -0
  224. package/dist/css/resizable.css +242 -0
  225. package/dist/css/sankey-chart.css +174 -0
  226. package/dist/css/scroll-area.css +240 -0
  227. package/dist/css/scrollbar.css +204 -0
  228. package/dist/css/select.css +616 -0
  229. package/dist/css/separator.css +140 -0
  230. package/dist/css/side-nav.css +481 -0
  231. package/dist/css/signature-pad.css +193 -0
  232. package/dist/css/skeleton.css +161 -0
  233. package/dist/css/slider.css +403 -0
  234. package/dist/css/sortable.css +228 -0
  235. package/dist/css/sparkline.css +170 -0
  236. package/dist/css/spinner.css +256 -0
  237. package/dist/css/splitter.css +159 -0
  238. package/dist/css/statistic.css +137 -0
  239. package/dist/css/steps.css +658 -0
  240. package/dist/css/switch.css +353 -0
  241. package/dist/css/table.css +1162 -0
  242. package/dist/css/tabs.css +967 -0
  243. package/dist/css/tag-group.css +258 -0
  244. package/dist/css/tag.css +335 -0
  245. package/dist/css/tags-input.css +341 -0
  246. package/dist/css/text-field.css +197 -0
  247. package/dist/css/time-field.css +277 -0
  248. package/dist/css/time-picker.css +793 -0
  249. package/dist/css/time-range-picker.css +775 -0
  250. package/dist/css/timeline.css +440 -0
  251. package/dist/css/timer.css +123 -0
  252. package/dist/css/timestamp.css +34 -0
  253. package/dist/css/toggle-group.css +424 -0
  254. package/dist/css/toggle.css +146 -0
  255. package/dist/css/tone.css +189 -0
  256. package/dist/css/tool-call.css +431 -0
  257. package/dist/css/toolbar.css +366 -0
  258. package/dist/css/tooltip.css +217 -0
  259. package/dist/css/tour.css +446 -0
  260. package/dist/css/transfer.css +644 -0
  261. package/dist/css/tree-select.css +878 -0
  262. package/dist/css/tree.css +734 -0
  263. package/dist/css/truncate.css +108 -0
  264. package/dist/css/typography.css +475 -0
  265. package/dist/css/undefined.css +58 -0
  266. package/dist/css/virtualizer.css +166 -0
  267. package/dist/css/visually-hidden.css +20 -0
  268. package/dist/css/watermark.css +82 -0
  269. package/dist/family/action-control.css +493 -0
  270. package/dist/family/chart.css +537 -0
  271. package/dist/family/check-mark.css +94 -0
  272. package/dist/family/choice-card.css +97 -0
  273. package/dist/family/collection-item.css +768 -0
  274. package/dist/family/field-chrome.css +296 -0
  275. package/dist/family/loading-ring.css +102 -0
  276. package/dist/family/material.css +72 -0
  277. package/dist/family/menu-choice.css +56 -0
  278. package/dist/family/motion.css +363 -0
  279. package/dist/family/swatch.css +59 -0
  280. package/dist/family/tag-list.css +65 -0
  281. package/family/action-control.css +33 -36
  282. package/family/chart.css +57 -0
  283. package/family/collection-item.css +12 -8
  284. package/family/field-chrome.css +28 -19
  285. package/family/loading-ring.css +20 -13
  286. package/family/swatch.css +4 -4
  287. package/family/tag-list.css +6 -0
  288. package/index.css +10349 -8756
  289. package/index.unlayered.css +10350 -8758
  290. package/package.json +165 -164
package/css/list.css CHANGED
@@ -16,9 +16,9 @@
16
16
  换档不必给每个部件各写一条选择器 */
17
17
  --xh-_list-item-py: var(--xh-list-item-py-md);
18
18
  --xh-_list-item-px: var(--xh-list-item-px-md);
19
- --xh-_list-item-gap: var(--xh-space-3);
19
+ --xh-_list-item-gap: var(--xh-space-4);
20
20
  --xh-_list-title-size: var(--xh-control-font-md);
21
- --xh-_list-description-size: var(--xh-control-caption-md);
21
+ --xh-_list-description-size: var(--xh-control-font-md);
22
22
  /* 条目悬停换到的面:坐在白底上是 100,淡底档的根把它抬到 200(按承载面的阶梯) */
23
23
  --xh-_list-item-bg-hover: var(--xh-bg-subtle);
24
24
 
@@ -29,6 +29,8 @@
29
29
  padding: 0;
30
30
  list-style: none;
31
31
  color: var(--xh-list-fg, var(--xh-fg-default));
32
+ font-size: var(--xh-text-body-size);
33
+ line-height: var(--xh-text-body-leading);
32
34
  }
33
35
 
34
36
  /* 上面声明了 display,会盖掉 UA 的 [hidden] 规则,收起态要在这里接回来 */
@@ -40,17 +42,17 @@
40
42
  [data-scope='list'][data-part='root'][data-size='sm'] {
41
43
  --xh-_list-item-py: var(--xh-list-item-py-sm);
42
44
  --xh-_list-item-px: var(--xh-list-item-px-sm);
43
- --xh-_list-item-gap: var(--xh-space-2);
45
+ --xh-_list-item-gap: var(--xh-space-3);
44
46
  --xh-_list-title-size: var(--xh-control-font-sm);
45
- --xh-_list-description-size: var(--xh-control-caption-sm);
47
+ --xh-_list-description-size: var(--xh-control-font-sm);
46
48
  }
47
49
 
48
50
  [data-scope='list'][data-part='root'][data-size='lg'] {
49
51
  --xh-_list-item-py: var(--xh-list-item-py-lg);
50
52
  --xh-_list-item-px: var(--xh-list-item-px-lg);
51
- --xh-_list-item-gap: var(--xh-space-4);
53
+ --xh-_list-item-gap: var(--xh-space-5);
52
54
  --xh-_list-title-size: var(--xh-control-font-lg);
53
- --xh-_list-description-size: var(--xh-control-caption-lg);
55
+ --xh-_list-description-size: var(--xh-control-font-lg);
54
56
  }
55
57
 
56
58
  /* —— 形态:ghost 即基础规则,不画壳 —— */
@@ -87,7 +89,7 @@
87
89
  [data-scope='list'][data-part='root'][data-split]
88
90
  > [data-scope='list'][data-part='item']
89
91
  + [data-scope='list'][data-part='item'] {
90
- border-block-start: var(--xh-stroke-thin) solid var(--xh-list-divider, var(--xh-border-subtle));
92
+ border-block-start: var(--xh-stroke-thin) solid var(--xh-list-divider, var(--xh-border-default));
91
93
  }
92
94
 
93
95
  [data-scope='list'][data-part='root'][data-hoverable] > [data-scope='list'][data-part='item'] {
@@ -114,7 +116,9 @@
114
116
  display: flex;
115
117
  flex: 1 1 auto;
116
118
  flex-direction: column;
117
- gap: var(--xh-list-content-gap, var(--xh-space-1));
119
+ gap: var(--xh-list-content-gap, var(--xh-space-0_5));
120
+ /* 标题与说明两行再上下各让出 4px,两行条目与单行条目的高度差拉开,扫读时一条一块 */
121
+ padding-block: var(--xh-list-item-content-py, var(--xh-space-1));
118
122
  /* flex 项默认不肯收到内容以下,这行让长文本能被压窄 */
119
123
  min-inline-size: 0;
120
124
  }
@@ -123,7 +127,7 @@
123
127
  color: var(--xh-list-title-fg, var(--xh-fg-default));
124
128
  font-size: var(--xh-list-title-font-size, var(--xh-_list-title-size));
125
129
  font-weight: var(--xh-list-title-font-weight, var(--xh-font-weight-medium));
126
- line-height: var(--xh-leading-tight);
130
+ line-height: var(--xh-leading-normal);
127
131
  }
128
132
 
129
133
  [data-scope='list'][data-part='item-description'] {
package/css/listbox.css CHANGED
@@ -239,7 +239,7 @@
239
239
  /* 取下一页的按钮:铺满一行摆在列表尾——铺满一行的独立动作条目,接 Action Control 的 row 档、
240
240
  ghost 形态:宽度由容器给、高度随内容、按下只换面不缩放;盒几何、悬停 / 按下 / 禁用面、
241
241
  焦点环与粗指针热区全由家族给,白底承载 hover 100 → pressed 200。
242
- 这里只把使用者槽映射到桥接槽并把文案居中:它是一行里唯一的东西,靠起始缘会像一条没对齐的条目 */
242
+ 这里只把使用者槽映射到桥接槽,文案居中写在下一条 */
243
243
  [data-scope='listbox'][data-part='load-more-trigger'] {
244
244
  --xh-action-gap: var(--xh-listbox-load-more-trigger-gap, var(--xh-_listbox-gap));
245
245
  --xh-action-padding-block: var(--xh-listbox-load-more-trigger-py, var(--xh-_listbox-item-py));
@@ -251,12 +251,17 @@
251
251
  --xh-action-fg-pressed: var(--xh-listbox-load-more-trigger-fg, var(--xh-_tone-fg, var(--xh-fg-brand-strong)));
252
252
  --xh-action-font-size: var(--xh-listbox-load-more-trigger-font-size, var(--xh-_listbox-font-size));
253
253
 
254
- justify-content: center;
255
- text-align: center;
256
254
  /* row 档允许换行、高度随内容,折行的文案走正文行高 */
257
255
  line-height: var(--xh-leading-normal);
258
256
  }
259
257
 
258
+ /* 文案居中(单行整段居中,折行逐行居中),盖掉 row 档的靠起始缘排布:它是一行里唯一的东西,
259
+ 靠起始缘会像一条没对齐的条目。选择器点名 row 档,有层与无层两份产物里都压得住它 */
260
+ [data-scope='listbox'][data-part='load-more-trigger'][data-xh-action-profile='row'] {
261
+ justify-content: center;
262
+ text-align: center;
263
+ }
264
+
260
265
  [data-scope='listbox'][data-part='load-more-trigger'][hidden] {
261
266
  display: none;
262
267
  }
@@ -282,10 +287,10 @@
282
287
  --xh-collection-fg-selected-hover: var(--xh-listbox-item-fg-selected, var(--xh-listbox-item-fg, var(--xh-fg-default)));
283
288
  --xh-collection-fg-selected-highlight: var(--xh-listbox-item-fg-selected, var(--xh-listbox-item-fg, var(--xh-fg-default)));
284
289
  --xh-collection-fg-selected-pressed: var(--xh-listbox-item-fg-selected, var(--xh-listbox-item-fg, var(--xh-fg-default)));
285
- --xh-collection-font-weight-selected: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-regular));
286
- --xh-collection-font-weight-selected-hover: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-regular));
287
- --xh-collection-font-weight-selected-highlight: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-regular));
288
- --xh-collection-font-weight-selected-pressed: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-regular));
290
+ --xh-collection-font-weight-selected: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-medium));
291
+ --xh-collection-font-weight-selected-hover: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-medium));
292
+ --xh-collection-font-weight-selected-highlight: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-medium));
293
+ --xh-collection-font-weight-selected-pressed: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-medium));
289
294
  --xh-collection-bg-hover: var(--xh-listbox-item-bg-hover, var(--xh-bg-subtle));
290
295
  --xh-collection-bg-keyboard-highlight: var(--xh-listbox-item-bg-hover, var(--xh-bg-subtle));
291
296
  --xh-collection-bg-pressed: var(--xh-listbox-item-bg-pressed, var(--xh-bg-subtle-hover));
@@ -68,6 +68,9 @@
68
68
  [data-scope='loading-bar'][data-part='range'] {
69
69
  inline-size: 100%;
70
70
  block-size: 100%;
71
+ /* 露出的前端(行尾)是一维对象的圆头;行首一端由轨道与视口边裁掉,保持方头贴边 */
72
+ border-start-end-radius: var(--xh-loading-bar-range-radius, var(--xh-shape-pill));
73
+ border-end-end-radius: var(--xh-loading-bar-range-radius, var(--xh-shape-pill));
71
74
  background: var(--xh-loading-bar-range, var(--xh-_tone-soft, var(--xh-bg-brand)));
72
75
  translate: calc((var(--xh-_loading-bar-value, 0) - 1) * 100%) 0;
73
76
  transition: translate var(--xh-loading-bar-speed, var(--xh-motion-duration-move)) var(--xh-motion-ease-continuous);
package/css/mention.css CHANGED
@@ -75,6 +75,7 @@
75
75
  --xh-_mention-h: var(--xh-control-h-md);
76
76
  --xh-_mention-px: var(--xh-control-px-md);
77
77
  --xh-_mention-item-py: var(--xh-list-option-py-md);
78
+ --xh-_mention-item-h: var(--xh-list-option-h-md);
78
79
  --xh-_mention-item-px: var(--xh-control-px-md);
79
80
  --xh-_mention-gap: var(--xh-control-gap-md);
80
81
  --xh-_mention-font-size: var(--xh-control-font-md);
@@ -98,8 +99,8 @@
98
99
  /* 标题:与输入框上下排,行距不留额外空白 */
99
100
  [data-scope='mention'][data-part='label'] {
100
101
  display: block;
101
- margin-block-end: var(--xh-mention-label-gap, var(--xh-space-1));
102
- color: var(--xh-mention-label-fg, var(--xh-fg-default));
102
+ margin-block-end: var(--xh-mention-label-gap, var(--xh-space-2));
103
+ color: var(--xh-mention-label-fg, var(--xh-fg-muted));
103
104
  font-size: var(--xh-mention-label-font-size, var(--xh-text-label-size));
104
105
  font-weight: var(--xh-mention-label-font-weight, var(--xh-text-label-weight));
105
106
  line-height: var(--xh-leading-none);
@@ -110,7 +111,7 @@
110
111
  }
111
112
 
112
113
  [data-scope='mention'][data-part='label'][data-disabled] {
113
- color: var(--xh-mention-label-fg-disabled, var(--xh-fg-subtle));
114
+ color: var(--xh-mention-label-fg-disabled, var(--xh-fg-muted));
114
115
  }
115
116
 
116
117
  /* —— 尺寸 —— */
@@ -119,6 +120,7 @@
119
120
  --xh-_mention-h: var(--xh-control-h-sm);
120
121
  --xh-_mention-px: var(--xh-control-px-sm);
121
122
  --xh-_mention-item-py: var(--xh-list-option-py-sm);
123
+ --xh-_mention-item-h: var(--xh-list-option-h-sm);
122
124
  --xh-_mention-item-px: var(--xh-control-px-sm);
123
125
  --xh-_mention-gap: var(--xh-control-gap-sm);
124
126
  --xh-_mention-font-size: var(--xh-control-font-sm);
@@ -128,6 +130,7 @@
128
130
  --xh-_mention-h: var(--xh-control-h-lg);
129
131
  --xh-_mention-px: var(--xh-control-px-lg);
130
132
  --xh-_mention-item-py: var(--xh-list-option-py-lg);
133
+ --xh-_mention-item-h: var(--xh-list-option-h-lg);
131
134
  --xh-_mention-item-px: var(--xh-control-px-lg);
132
135
  --xh-_mention-gap: var(--xh-control-gap-lg);
133
136
  --xh-_mention-font-size: var(--xh-control-font-lg);
@@ -152,8 +155,6 @@
152
155
  --xh-field-border-hover: var(--xh-mention-input-border-hover, var(--xh-_field-variant-border-hover));
153
156
  --xh-field-border-focus: var(--xh-mention-input-border-focus, var(--xh-_field-variant-border-focus));
154
157
  --xh-field-border-invalid: var(--xh-mention-input-border-invalid, var(--xh-_field-variant-border-invalid));
155
- --xh-field-ring-focus: var(--xh-ring-focus);
156
- --xh-field-ring-invalid: var(--xh-ring-invalid);
157
158
  --xh-field-shadow-rest: var(--xh-mention-input-shadow, none);
158
159
 
159
160
  inline-size: 100%;
@@ -170,7 +171,7 @@
170
171
  /* 多行形态:正文可以换行,框随 rows 定起始高度、不钉单行控件高(家族的多行布局给);
171
172
  框自己就是 chrome,家族多行布局把上下内衬归零,这里按文本字段多行档同一支令牌补回,只许纵向拉伸 */
172
173
  [data-scope='mention'][data-part='input'][data-xh-field-layout='textarea'] {
173
- padding-block: var(--xh-mention-textarea-py, var(--xh-space-2));
174
+ padding-block: var(--xh-mention-textarea-py, var(--xh-space-1));
174
175
  resize: vertical;
175
176
  }
176
177
 
@@ -218,7 +219,7 @@
218
219
  min-block-size: var(--xh-mention-content-min-h, var(--xh-_mention-h));
219
220
  max-block-size: min(var(--xh-mention-content-max-h, var(--xh-overlay-max-h)), var(--xh-_mention-available-h));
220
221
  padding-block: var(--xh-mention-content-py, var(--xh-space-1));
221
- padding-inline: var(--xh-mention-content-px, var(--xh-space-1));
222
+ padding-inline: var(--xh-mention-content-px, 0);
222
223
  border-radius: var(--xh-mention-content-radius, var(--xh-shape-overlay));
223
224
  overflow-y: auto;
224
225
  /* 浮层滚动面:滚到头不把页面一起带走 */
@@ -253,10 +254,11 @@
253
254
  overlay 语境的选中面透明,高亮与悬停同走 --xh-bg-subtle,正文保持常规字重 */
254
255
  [data-scope='mention'][data-part='item'] {
255
256
  --xh-collection-block-padding: var(--xh-mention-item-py, var(--xh-_mention-item-py));
257
+ --xh-collection-row-h: var(--xh-mention-item-h, var(--xh-_mention-item-h));
256
258
  --xh-collection-inline-padding: var(--xh-mention-item-px, var(--xh-_mention-item-px));
257
259
  --xh-collection-gap: var(--xh-mention-item-gap, var(--xh-_mention-gap));
258
260
  --xh-collection-font-size: var(--xh-mention-item-font-size, var(--xh-_mention-font-size));
259
- --xh-collection-radius: var(--xh-mention-item-radius, var(--xh-shape-inset));
261
+ --xh-collection-radius: var(--xh-mention-item-radius, 0);
260
262
  --xh-collection-fg-rest: var(--xh-mention-item-fg, var(--xh-material-frosted-fg));
261
263
  --xh-collection-fg-hover: var(--xh-mention-item-fg, var(--xh-material-frosted-fg));
262
264
  --xh-collection-fg-keyboard-highlight: var(--xh-mention-item-fg, var(--xh-material-frosted-fg));
@@ -294,7 +296,7 @@
294
296
  标记读定位层那一份:候选被搬到 portal 落点,根上的只读标记够不着它们。
295
297
  排掉禁用条目是因为这条选择器权重高过上面那条,不排就会把 not-allowed 覆盖回 default */
296
298
  [data-scope='mention'][data-part='positioner'][data-readonly]
297
- [data-part='item']:not([data-disabled]) {
299
+ [data-part='item']:where([data-scope='mention']):not([data-disabled]) {
298
300
  cursor: default;
299
301
  }
300
302
 
package/css/menu.css CHANGED
@@ -87,6 +87,7 @@
87
87
  /* 尺寸档只换这四个私有槽,条目从 content 继承它们,换档不必给每个部件各写一条选择器。
88
88
  菜单没有 root 部件(浮层树的最外层就是 content),三轴属性都落在这里 */
89
89
  --xh-_menu-item-py: var(--xh-list-option-py-md);
90
+ --xh-_menu-item-h: var(--xh-list-option-h-md);
90
91
  --xh-_menu-item-px: var(--xh-control-px-md);
91
92
  --xh-_menu-item-gap: var(--xh-control-gap-md);
92
93
  --xh-_menu-font-size: var(--xh-control-font-md);
@@ -102,7 +103,7 @@
102
103
  列表族的 16rem 对命令菜单偏矮,这里另给一档 */
103
104
  max-block-size: min(var(--xh-menu-max-h, var(--xh-overlay-menu-max-h)), var(--xh-_menu-available-h));
104
105
  padding-block: var(--xh-menu-content-py, var(--xh-surface-pad-xs));
105
- padding-inline: var(--xh-menu-content-px, var(--xh-surface-pad-xs));
106
+ padding-inline: var(--xh-menu-content-px, 0);
106
107
  border-radius: var(--xh-menu-content-radius, var(--xh-shape-overlay));
107
108
  /* 条目超过上限就在菜单内部滚。条目的焦点环是内收的,滚动容器裁在内边距缘上,环切不着。
108
109
  浮层滚动面:到底后不把滚动链穿透给页面 */
@@ -140,6 +141,7 @@
140
141
  [data-scope='menu'][data-part='content'][data-size='sm'] {
141
142
  --xh-icon-size: var(--xh-menu-icon-size, var(--xh-glyph-size-sm));
142
143
  --xh-_menu-item-py: var(--xh-list-option-py-sm);
144
+ --xh-_menu-item-h: var(--xh-list-option-h-sm);
143
145
  --xh-_menu-item-px: var(--xh-control-px-sm);
144
146
  --xh-_menu-item-gap: var(--xh-control-gap-sm);
145
147
  --xh-_menu-font-size: var(--xh-control-font-sm);
@@ -148,6 +150,7 @@
148
150
  [data-scope='menu'][data-part='content'][data-size='lg'] {
149
151
  --xh-icon-size: var(--xh-menu-icon-size, var(--xh-glyph-size-lg));
150
152
  --xh-_menu-item-py: var(--xh-list-option-py-lg);
153
+ --xh-_menu-item-h: var(--xh-list-option-h-lg);
151
154
  --xh-_menu-item-px: var(--xh-control-px-lg);
152
155
  --xh-_menu-item-gap: var(--xh-control-gap-lg);
153
156
  --xh-_menu-font-size: var(--xh-control-font-lg);
@@ -159,10 +162,11 @@
159
162
  子菜单箭头是行尾的伪元素;间距统一由行的 gap 给,家族按槽下发的外边距归零 */
160
163
  [data-scope='menu'][data-part='item'] {
161
164
  --xh-collection-block-padding: var(--xh-menu-item-py, var(--xh-_menu-item-py));
165
+ --xh-collection-row-h: var(--xh-menu-item-h, var(--xh-_menu-item-h));
162
166
  --xh-collection-inline-padding: var(--xh-menu-item-px, var(--xh-_menu-item-px));
163
167
  --xh-collection-gap: 0;
164
168
  --xh-collection-font-size: var(--xh-menu-item-font-size, var(--xh-_menu-font-size));
165
- --xh-collection-radius: var(--xh-menu-item-radius, var(--xh-shape-inset));
169
+ --xh-collection-radius: var(--xh-menu-item-radius, 0);
166
170
  --xh-collection-fg-rest: var(--xh-menu-item-fg, var(--xh-material-frosted-fg));
167
171
  --xh-collection-fg-hover: var(--xh-menu-item-fg, var(--xh-material-frosted-fg));
168
172
  --xh-collection-fg-keyboard-highlight: var(--xh-menu-item-fg, var(--xh-material-frosted-fg));
@@ -263,7 +267,7 @@
263
267
  margin-inline-start: auto;
264
268
  inline-size: var(--xh-menu-submenu-indicator-size, var(--xh-control-indicator-size));
265
269
  block-size: var(--xh-menu-submenu-indicator-size, var(--xh-control-indicator-size));
266
- background-color: var(--xh-menu-submenu-indicator-fg, var(--xh-material-frosted-fg-muted));
270
+ background-color: var(--xh-menu-submenu-indicator-fg, currentColor);
267
271
  -webkit-mask: var(--xh-glyph-mark-chevron-right) center / contain no-repeat;
268
272
  mask: var(--xh-glyph-mark-chevron-right) center / contain no-repeat;
269
273
  }
@@ -284,15 +288,16 @@
284
288
  display: none;
285
289
  }
286
290
 
287
- /* 分组标题不是条目、进不了导航,画成小号次要文字,
291
+ /* 分组标题不是条目、进不了导航,画成小号常规字重的次要文字,上方让出 8px 与上一组分开;
288
292
  内缩与条目对齐(同一个 padding-inline),标题与条目文字才在一条竖线上 */
289
293
  [data-scope='menu'][data-part='group-label'] {
290
294
  display: block;
295
+ margin-block-start: var(--xh-menu-group-label-mt, var(--xh-space-2));
291
296
  padding-block: var(--xh-menu-group-label-py, var(--xh-space-1));
292
297
  padding-inline: var(--xh-menu-group-label-px, var(--xh-_menu-item-px));
293
298
  color: var(--xh-menu-group-label-fg, var(--xh-material-frosted-fg-muted));
294
299
  font-size: var(--xh-menu-group-label-font-size, var(--xh-text-caption-size));
295
- font-weight: var(--xh-menu-group-label-font-weight, var(--xh-font-weight-medium));
300
+ font-weight: var(--xh-menu-group-label-font-weight, var(--xh-font-weight-regular));
296
301
  line-height: var(--xh-leading-none);
297
302
  user-select: none;
298
303
  }
package/css/menubar.css CHANGED
@@ -139,9 +139,10 @@
139
139
  自己身上把 --xh-icon-size 改接到盒的尺,子菜单箭头走 --xh-menubar-submenu-indicator-size */
140
140
  --xh-icon-size: var(--xh-menubar-icon-size, var(--xh-glyph-size-md));
141
141
 
142
- --xh-_menubar-trigger-py: var(--xh-space-1);
142
+ --xh-_menubar-trigger-py: var(--xh-space-2);
143
143
  --xh-_menubar-trigger-px: var(--xh-control-px-md);
144
144
  --xh-_menubar-item-py: var(--xh-list-option-py-md);
145
+ --xh-_menubar-item-h: var(--xh-list-option-h-md);
145
146
  --xh-_menubar-item-px: var(--xh-control-px-md);
146
147
  --xh-_menubar-item-gap: var(--xh-control-gap-md);
147
148
  --xh-_menubar-font-size: var(--xh-control-font-md);
@@ -149,9 +150,10 @@
149
150
 
150
151
  [data-scope='menubar'][data-size='sm']:is([data-part='root'], [data-part='positioner']) {
151
152
  --xh-icon-size: var(--xh-menubar-icon-size, var(--xh-glyph-size-sm));
152
- --xh-_menubar-trigger-py: var(--xh-space-0_5);
153
+ --xh-_menubar-trigger-py: var(--xh-space-1_5);
153
154
  --xh-_menubar-trigger-px: var(--xh-control-px-sm);
154
155
  --xh-_menubar-item-py: var(--xh-list-option-py-sm);
156
+ --xh-_menubar-item-h: var(--xh-list-option-h-sm);
155
157
  --xh-_menubar-item-px: var(--xh-control-px-sm);
156
158
  --xh-_menubar-item-gap: var(--xh-control-gap-sm);
157
159
  --xh-_menubar-font-size: var(--xh-control-font-sm);
@@ -159,9 +161,10 @@
159
161
 
160
162
  [data-scope='menubar'][data-size='lg']:is([data-part='root'], [data-part='positioner']) {
161
163
  --xh-icon-size: var(--xh-menubar-icon-size, var(--xh-glyph-size-lg));
162
- --xh-_menubar-trigger-py: var(--xh-space-2);
164
+ --xh-_menubar-trigger-py: var(--xh-space-2_5);
163
165
  --xh-_menubar-trigger-px: var(--xh-control-px-lg);
164
166
  --xh-_menubar-item-py: var(--xh-list-option-py-lg);
167
+ --xh-_menubar-item-h: var(--xh-list-option-h-lg);
165
168
  --xh-_menubar-item-px: var(--xh-control-px-lg);
166
169
  --xh-_menubar-item-gap: var(--xh-control-gap-lg);
167
170
  --xh-_menubar-font-size: var(--xh-control-font-lg);
@@ -188,7 +191,7 @@
188
191
  列表族的 16rem 对命令菜单偏矮,这里另给一档 */
189
192
  max-block-size: min(var(--xh-menubar-max-h, var(--xh-overlay-menu-max-h)), var(--xh-_menubar-available-h));
190
193
  padding-block: var(--xh-menubar-content-py, var(--xh-surface-pad-xs));
191
- padding-inline: var(--xh-menubar-content-px, var(--xh-surface-pad-xs));
194
+ padding-inline: var(--xh-menubar-content-px, 0);
192
195
  border-radius: var(--xh-menubar-content-radius, var(--xh-shape-overlay));
193
196
  /* 条目超过上限就在菜单内部滚。条目的焦点环是内收的,滚动容器裁在内边距缘上,环切不着。
194
197
  浮层滚动面:到底后不把滚动链穿透给页面 */
@@ -235,15 +238,16 @@
235
238
  display: none;
236
239
  }
237
240
 
238
- /* 分组标题不是条目、进不了导航,画成小号次要文字,
241
+ /* 分组标题不是条目、进不了导航,画成小号常规字重的次要文字,上方让出 8px 与上一组分开;
239
242
  内缩与条目对齐(同一个 padding-inline),标题与条目文字才在一条竖线上 */
240
243
  [data-scope='menubar'][data-part='group-label'] {
241
244
  display: block;
245
+ margin-block-start: var(--xh-menubar-group-label-mt, var(--xh-space-2));
242
246
  padding-block: var(--xh-menubar-group-label-py, var(--xh-space-1));
243
247
  padding-inline: var(--xh-menubar-group-label-px, var(--xh-_menubar-item-px));
244
248
  color: var(--xh-menubar-group-label-fg, var(--xh-material-frosted-fg-muted));
245
249
  font-size: var(--xh-menubar-group-label-font-size, var(--xh-text-caption-size));
246
- font-weight: var(--xh-menubar-group-label-font-weight, var(--xh-font-weight-medium));
250
+ font-weight: var(--xh-menubar-group-label-font-weight, var(--xh-font-weight-regular));
247
251
  line-height: var(--xh-leading-none);
248
252
  user-select: none;
249
253
  }
@@ -258,10 +262,11 @@
258
262
  子菜单箭头是行尾的伪元素;间距统一由行的 gap 给,家族按槽下发的外边距归零 */
259
263
  [data-scope='menubar'][data-part='item'] {
260
264
  --xh-collection-block-padding: var(--xh-menubar-item-py, var(--xh-_menubar-item-py));
265
+ --xh-collection-row-h: var(--xh-menubar-item-h, var(--xh-_menubar-item-h));
261
266
  --xh-collection-inline-padding: var(--xh-menubar-item-px, var(--xh-_menubar-item-px));
262
267
  --xh-collection-gap: 0;
263
268
  --xh-collection-font-size: var(--xh-menubar-item-font-size, var(--xh-_menubar-font-size));
264
- --xh-collection-radius: var(--xh-menubar-item-radius, var(--xh-shape-inset));
269
+ --xh-collection-radius: var(--xh-menubar-item-radius, 0);
265
270
  --xh-collection-fg-rest: var(--xh-menubar-item-fg, var(--xh-material-frosted-fg));
266
271
  --xh-collection-fg-hover: var(--xh-menubar-item-fg, var(--xh-material-frosted-fg));
267
272
  --xh-collection-fg-keyboard-highlight: var(--xh-menubar-item-fg, var(--xh-material-frosted-fg));
@@ -305,7 +310,7 @@
305
310
  margin-inline-start: auto;
306
311
  inline-size: var(--xh-menubar-submenu-indicator-size, var(--xh-control-indicator-size));
307
312
  block-size: var(--xh-menubar-submenu-indicator-size, var(--xh-control-indicator-size));
308
- background-color: var(--xh-menubar-submenu-indicator-fg, var(--xh-material-frosted-fg-muted));
313
+ background-color: var(--xh-menubar-submenu-indicator-fg, currentColor);
309
314
  -webkit-mask: var(--xh-glyph-mark-chevron-right) center / contain no-repeat;
310
315
  mask: var(--xh-glyph-mark-chevron-right) center / contain no-repeat;
311
316
  }
@@ -112,7 +112,7 @@
112
112
 
113
113
  /* 新到的消息进场,同一批按到达顺序错开;首帧就在的历史消息直接呈现(自己或 list 带 data-instant)。
114
114
  进场只动 opacity 与 translate:改高度会扰动粘底补偿量到的 scrollHeight */
115
- [data-scope='message-feed'][data-part='item']:not([data-instant], [data-instant] > *) {
115
+ [data-scope='message-feed'][data-part='item']:not([data-instant], [data-instant] > :where([data-scope='message-feed'])) {
116
116
  animation: xh-item-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong) backwards;
117
117
  animation-delay: calc(var(--xh-_stagger-index, 0) * var(--xh-motion-stagger-step));
118
118
  }
@@ -38,7 +38,7 @@
38
38
  --xh-_navigation-menu-highlight-bg: var(--xh-bg-subtle);
39
39
 
40
40
  /* 语气只落在指示条上;没写 data-tone 时 --xh-_tone 没被声明,退回品牌色。
41
- 当前链接的字色不随语气:导航当前页恒取 --xh-fg-brand-strong。聚焦环恒是 --xh-ring-focus */
41
+ 当前链接的字色不随语气:导航当前页恒取 --xh-fg-brand。聚焦环恒是 --xh-ring-focus */
42
42
  --xh-_navigation-menu-accent: var(--xh-_tone, var(--xh-fg-brand));
43
43
 
44
44
  position: relative;
@@ -224,7 +224,7 @@
224
224
  --xh-collection-bg-hover: var(--xh-navigation-menu-link-bg-hover, var(--xh-_navigation-menu-highlight-bg));
225
225
  --xh-collection-bg-keyboard-highlight: var(--xh-navigation-menu-link-bg-hover, var(--xh-_navigation-menu-highlight-bg));
226
226
  --xh-collection-bg-pressed: var(--xh-navigation-menu-link-bg-pressed, var(--xh-bg-subtle-hover));
227
- --xh-collection-fg-current: var(--xh-navigation-menu-link-fg-current, var(--xh-fg-brand-strong));
227
+ --xh-collection-fg-current: var(--xh-navigation-menu-link-fg-current, var(--xh-fg-brand));
228
228
  --xh-collection-font-weight-current: var(--xh-navigation-menu-link-font-weight-current, var(--xh-font-weight-medium));
229
229
 
230
230
  position: relative;