@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
@@ -72,8 +72,11 @@
72
72
  display: none;
73
73
  }
74
74
 
75
+ /* 带输入框的用法是一件单行字段,标签与其余字段同一副字段标签排版:次要文字色、标签字号字重。
76
+ 竖排时标签与控件之间的距离:根的 gap 之上补一段差值,--xh-clipboard-label-gap 给多少最终就是多少 */
75
77
  .xh-scope-clipboard[data-part='label'] {
76
- color: var(--xh-clipboard-label-fg, var(--xh-fg-default));
78
+ margin-block-end: calc(var(--xh-clipboard-label-gap, var(--xh-space-2)) - var(--xh-clipboard-gap, var(--xh-space-1)));
79
+ color: var(--xh-clipboard-label-fg, var(--xh-fg-muted));
77
80
  font-size: var(--xh-clipboard-label-font-size, var(--xh-text-label-size));
78
81
  font-weight: var(--xh-clipboard-label-font-weight, var(--xh-text-label-weight));
79
82
  line-height: var(--xh-leading-none);
@@ -121,9 +124,14 @@
121
124
  border-end-end-radius: 0;
122
125
  }
123
126
 
124
- /* 焦点边一律 --xh-border-control-focus,不随 tone */
125
- .xh-scope-clipboard[data-part='input']:focus-visible {
127
+ /* 照只读字段外壳标出焦点:换承载面底 + 品牌描边(不随 tone),不画环;点进去选字也算聚焦 */
128
+ .xh-scope-clipboard[data-part='input']:focus-within {
126
129
  border-color: var(--xh-clipboard-input-border-focus, var(--xh-border-control-focus));
130
+ background: var(--xh-clipboard-input-bg-focus, var(--xh-bg-surface));
131
+ }
132
+
133
+ .xh-scope-clipboard[data-part='input']:focus-visible {
134
+ outline: none;
127
135
  }
128
136
 
129
137
  /* 自动填充:引擎给填过的框强加一套系统色(多数是黄底黑字),盖得过 background 与 color,
@@ -203,7 +211,7 @@
203
211
  );
204
212
  }
205
213
 
206
- .xh-scope-clipboard[data-part='control'] > .xh-scope-clipboard[data-part='input']:focus-visible,
214
+ .xh-scope-clipboard[data-part='control'] > .xh-scope-clipboard[data-part='input']:focus-within,
207
215
  .xh-scope-clipboard[data-part='control'] > .xh-scope-clipboard[data-part='copy-trigger']:focus-visible,
208
216
  .xh-scope-clipboard[data-part='control'] > .xh-scope-clipboard[data-part='copy-trigger']:hover {
209
217
  position: relative;
@@ -312,4 +320,12 @@
312
320
  clip-path: inset(50%);
313
321
  white-space: nowrap;
314
322
  }
323
+
324
+ /* 只读框聚焦不画环、描边又被换成系统色,补一圈 Highlight 环 */
325
+ @media (forced-colors: active) {
326
+ .xh-scope-clipboard[data-part='input']:focus {
327
+ outline: var(--xh-ring-width) solid Highlight;
328
+ outline-offset: var(--xh-ring-offset);
329
+ }
330
+ }
315
331
  }
@@ -22,9 +22,14 @@
22
22
  /* 作者塞进正文里的图标与皮肤画的兜底字形同一把尺:md 档,触发器上另按家族档取值 */
23
23
  --xh-icon-size: var(--xh-collapsible-icon-size, var(--xh-glyph-size-md));
24
24
 
25
+ /* 触发器比家族 disclosure-trigger 档收一截:md 上下 10px + 一行正文行高 21px = 41px 高,横向 12px;
26
+ 正文与触发器同一条起点,上下各留 8px */
25
27
  --xh-_collapsible-trigger-gap: var(--xh-control-gap-md);
26
- --xh-_collapsible-content-px: var(--xh-space-4);
27
- --xh-_collapsible-content-pb: var(--xh-space-4);
28
+ --xh-_collapsible-trigger-py: var(--xh-space-2_5);
29
+ --xh-_collapsible-trigger-px: var(--xh-space-3);
30
+ --xh-_collapsible-content-px: var(--xh-space-3);
31
+ --xh-_collapsible-content-pt: var(--xh-space-2);
32
+ --xh-_collapsible-content-pb: var(--xh-space-2);
28
33
 
29
34
  /* 语气落在展开着的触发器上,指示器写在触发器里、跟着继承这个色,不另立规则。
30
35
  没写 data-tone 时 --xh-_tone-fg 没被声明,退回原来的前景色。
@@ -48,14 +53,20 @@
48
53
  /* 缺省档写在上面那条里 */
49
54
  .xh-scope-collapsible[data-part='root'][data-size='sm'] {
50
55
  --xh-_collapsible-trigger-gap: var(--xh-control-gap-sm);
51
- --xh-_collapsible-content-px: var(--xh-space-3);
52
- --xh-_collapsible-content-pb: var(--xh-space-3);
56
+ --xh-_collapsible-trigger-py: var(--xh-space-1_5);
57
+ --xh-_collapsible-trigger-px: var(--xh-space-2_5);
58
+ --xh-_collapsible-content-px: var(--xh-space-2_5);
59
+ --xh-_collapsible-content-pt: var(--xh-space-1_5);
60
+ --xh-_collapsible-content-pb: var(--xh-space-1_5);
53
61
  }
54
62
 
55
63
  .xh-scope-collapsible[data-part='root'][data-size='lg'] {
56
64
  --xh-_collapsible-trigger-gap: var(--xh-control-gap-lg);
57
- --xh-_collapsible-content-px: var(--xh-space-5);
58
- --xh-_collapsible-content-pb: var(--xh-space-5);
65
+ --xh-_collapsible-trigger-py: var(--xh-space-3);
66
+ --xh-_collapsible-trigger-px: var(--xh-space-4);
67
+ --xh-_collapsible-content-px: var(--xh-space-4);
68
+ --xh-_collapsible-content-pt: var(--xh-space-3);
69
+ --xh-_collapsible-content-pb: var(--xh-space-3);
59
70
  }
60
71
 
61
72
  /* 触发器铺满一行,盒型、三档几何、悬停 / 按下 / 禁用面由 Action Control 的 disclosure-trigger 档给
@@ -65,8 +76,8 @@
65
76
  .xh-scope-collapsible[data-part='trigger'] {
66
77
  --xh-action-gap: var(--xh-collapsible-trigger-gap, var(--xh-_action-profile-gap));
67
78
  --xh-action-visual-size: var(--xh-collapsible-trigger-h, var(--xh-_action-profile-visual-size));
68
- --xh-action-padding-block: var(--xh-collapsible-trigger-py, var(--xh-_action-profile-padding-block));
69
- --xh-action-padding-inline: var(--xh-collapsible-trigger-px, var(--xh-_action-profile-padding-inline));
79
+ --xh-action-padding-block: var(--xh-collapsible-trigger-py, var(--xh-_collapsible-trigger-py));
80
+ --xh-action-padding-inline: var(--xh-collapsible-trigger-px, var(--xh-_collapsible-trigger-px));
70
81
  --xh-action-radius: var(--xh-collapsible-trigger-radius, var(--xh-_action-profile-radius));
71
82
  --xh-action-bg-rest: var(--xh-collapsible-trigger-bg, var(--xh-_action-variant-bg-rest));
72
83
  --xh-action-bg-hover: var(--xh-collapsible-trigger-bg-hover, var(--xh-_action-variant-bg-hover));
@@ -74,10 +85,11 @@
74
85
  --xh-action-fg-hover: var(--xh-collapsible-trigger-fg, var(--xh-_action-variant-fg-hover));
75
86
  --xh-action-fg-pressed: var(--xh-collapsible-trigger-fg, var(--xh-_action-variant-fg-pressed));
76
87
  --xh-action-font-size: var(--xh-collapsible-trigger-font-size, var(--xh-_action-profile-font-size));
77
- --xh-icon-size: var(--xh-collapsible-icon-size, var(--xh-_action-profile-glyph-size));
88
+ --xh-icon-size: var(--xh-collapsible-icon-size, var(--xh-glyph-size-sm));
78
89
 
79
90
  border-width: 0;
80
91
  font-weight: var(--xh-collapsible-trigger-font-weight, var(--xh-text-label-weight));
92
+ line-height: var(--xh-leading-normal);
81
93
  }
82
94
 
83
95
  /* 展开着的那一档单开一个槽:与常态共用一个的话,作者一改常态字色就把展开态也改掉了。
@@ -86,6 +98,8 @@
86
98
  --xh-action-fg-rest: var(--xh-collapsible-trigger-fg-open, var(--xh-_collapsible-open-fg));
87
99
  --xh-action-fg-hover: var(--xh-collapsible-trigger-fg-open, var(--xh-_collapsible-open-fg));
88
100
  --xh-action-fg-pressed: var(--xh-collapsible-trigger-fg-open, var(--xh-_collapsible-open-fg));
101
+
102
+ font-weight: var(--xh-collapsible-trigger-font-weight-open, var(--xh-font-weight-medium));
89
103
  }
90
104
 
91
105
  /* 禁用前景换成禁用色,不靠 opacity 压暗(家族按 data-disabled 给禁用面与指针,字色槽在这里保留优先) */
@@ -99,7 +113,7 @@
99
113
  flex: none;
100
114
  align-items: center;
101
115
  justify-content: center;
102
- color: var(--xh-collapsible-indicator-fg, var(--xh-fg-muted));
116
+ color: var(--xh-collapsible-indicator-fg, var(--xh-fg-subtle));
103
117
  line-height: var(--xh-leading-none);
104
118
  }
105
119
 
@@ -132,17 +146,18 @@
132
146
  /* 这里刻意没有 [data-part='content'][hidden] { display: none }:补了动画一帧都播不出来。
133
147
  收起由适配器在退场结束后写内联 display 落成,退场窗口内靠 connect 发的 inert 挡住焦点 */
134
148
  .xh-scope-collapsible[data-part='content'] {
135
- /* 行高与内缩同帧动的共享关键帧读这条槽:只有末端有内缩,起端不写、按 0 动 */
149
+ /* 行高与内缩同帧动的共享关键帧读这两条槽,两端内缩一起收放 */
150
+ --xh-_disclosure-pt: var(--xh-collapsible-content-pt, var(--xh-_collapsible-content-pt));
136
151
  --xh-_disclosure-pb: var(--xh-collapsible-content-pb, var(--xh-_collapsible-content-pb));
137
152
 
138
153
  display: grid;
139
154
  grid-template-rows: 1fr;
140
155
  overflow: clip;
141
- padding-block-start: 0;
156
+ padding-block-start: var(--xh-collapsible-content-pt, var(--xh-_collapsible-content-pt));
142
157
  padding-block-end: var(--xh-collapsible-content-pb, var(--xh-_collapsible-content-pb));
143
158
  padding-inline: var(--xh-collapsible-content-px, var(--xh-_collapsible-content-px));
144
- color: var(--xh-collapsible-content-fg, var(--xh-fg-muted));
145
- font-size: var(--xh-collapsible-content-font-size, var(--xh-text-secondary-size));
159
+ color: var(--xh-collapsible-content-fg, var(--xh-fg-default));
160
+ font-size: var(--xh-collapsible-content-font-size, var(--xh-text-body-size));
146
161
  line-height: var(--xh-leading-normal);
147
162
  }
148
163
 
@@ -57,13 +57,15 @@
57
57
  }
58
58
 
59
59
  .xh-scope-color-field[data-part='label'] {
60
- color: var(--xh-color-field-label-fg, var(--xh-fg-default));
60
+ /* 竖排时标签与控件之间的距离:根的 gap 之上补一段差值,--xh-color-field-label-gap 给多少最终就是多少 */
61
+ margin-block-end: calc(var(--xh-color-field-label-gap, var(--xh-space-2)) - var(--xh-color-field-gap, var(--xh-space-1)));
62
+ color: var(--xh-color-field-label-fg, var(--xh-fg-muted));
61
63
  font-size: var(--xh-color-field-label-font-size, var(--xh-text-label-size));
62
64
  font-weight: var(--xh-color-field-label-font-weight, var(--xh-text-label-weight));
63
65
  }
64
66
 
65
67
  .xh-scope-color-field[data-part='label'][data-disabled] {
66
- color: var(--xh-color-field-label-fg-disabled, var(--xh-fg-subtle));
68
+ color: var(--xh-color-field-label-fg-disabled, var(--xh-fg-muted));
67
69
  }
68
70
 
69
71
  .xh-scope-color-field[data-part='control'] {
@@ -81,8 +83,6 @@
81
83
  --xh-field-border-hover: var(--xh-color-field-control-border-hover, var(--xh-_field-variant-border-hover));
82
84
  --xh-field-border-focus: var(--xh-color-field-control-border-focus, var(--xh-_field-variant-border-focus));
83
85
  --xh-field-border-invalid: var(--xh-color-field-control-border-invalid, var(--xh-_field-variant-border-invalid));
84
- --xh-field-ring-focus: var(--xh-ring-focus);
85
- --xh-field-ring-invalid: var(--xh-ring-invalid);
86
86
  --xh-field-shadow-rest: var(--xh-color-field-control-shadow, none);
87
87
  /* 家族 chrome 会重写 --xh-icon-size,使用者图标槽必须经桥接槽下发才能在盒内生效 */
88
88
  --xh-field-glyph-size: var(--xh-color-field-icon-size, var(--xh-_field-size-glyph-size));
@@ -30,8 +30,6 @@
30
30
  --xh-_color-picker-px: var(--xh-control-px-md);
31
31
  --xh-_color-picker-gap: var(--xh-control-gap-md);
32
32
 
33
- /* 聚焦环恒用固定环色 */
34
- --xh-_color-picker-ring: var(--xh-ring-focus);
35
33
 
36
34
  display: inline-flex;
37
35
  flex-direction: column;
@@ -60,7 +58,9 @@
60
58
  }
61
59
 
62
60
  .xh-scope-color-picker[data-part='label'] {
63
- color: var(--xh-color-picker-label-fg, var(--xh-fg-default));
61
+ /* 竖排时标签与控件之间的距离:根的 gap 之上补一段差值,--xh-color-picker-label-gap 给多少最终就是多少 */
62
+ margin-block-end: calc(var(--xh-color-picker-label-gap, var(--xh-space-2)) - var(--xh-color-picker-gap, var(--xh-space-1)));
63
+ color: var(--xh-color-picker-label-fg, var(--xh-fg-muted));
64
64
  /* 字段标签不随档:与同族字段同一档标签字号 */
65
65
  font-size: var(--xh-color-picker-label-font-size, var(--xh-text-label-size));
66
66
  font-weight: var(--xh-color-picker-label-font-weight, var(--xh-text-label-weight));
@@ -83,7 +83,6 @@
83
83
  --xh-field-border-rest: var(--xh-color-picker-control-border, var(--xh-_field-variant-border-rest));
84
84
  --xh-field-border-hover: var(--xh-color-picker-control-border-hover, var(--xh-_field-variant-border-hover));
85
85
  --xh-field-border-focus: var(--xh-color-picker-control-border-focus, var(--xh-_field-variant-border-focus));
86
- --xh-field-ring-focus: var(--xh-_color-picker-ring);
87
86
  --xh-field-shadow-rest: var(--xh-color-picker-control-shadow, none);
88
87
  --xh-field-cursor-rest: pointer;
89
88
  }
@@ -224,16 +223,20 @@
224
223
  }
225
224
 
226
225
  .xh-scope-color-picker[data-part='content'] {
226
+ /* 内衬落进私有槽:贴顶通栏的取色区与色板区的通栏分隔按同一份内衬往外撑 */
227
+ --xh-_color-picker-content-py: var(--xh-color-picker-content-py, var(--xh-space-3));
228
+ --xh-_color-picker-content-px: var(--xh-color-picker-content-px, var(--xh-space-3));
229
+
227
230
  position: relative;
228
231
  display: flex;
229
232
  flex-direction: column;
230
233
  gap: var(--xh-color-picker-content-gap, var(--xh-space-3));
231
- inline-size: var(--xh-color-picker-content-w, var(--xh-overlay-min-w));
234
+ inline-size: var(--xh-color-picker-content-w, var(--xh-overlay-max-w-sm));
232
235
  /* 定宽的面板也要夹一道:窄视口下伸出去,右半边的取色区就点不到了 */
233
236
  max-inline-size: var(--xh-_color-picker-available-w);
234
- padding-block: var(--xh-color-picker-content-py, var(--xh-space-3));
235
- padding-inline: var(--xh-color-picker-content-px, var(--xh-space-3));
236
- max-block-size: min(var(--xh-color-picker-max-h, var(--xh-viewport-h-md)), var(--xh-_color-picker-available-h));
237
+ padding-block: var(--xh-_color-picker-content-py);
238
+ padding-inline: var(--xh-_color-picker-content-px);
239
+ max-block-size: min(var(--xh-color-picker-max-h, var(--xh-viewport-h-lg)), var(--xh-_color-picker-available-h));
237
240
  overflow-y: auto;
238
241
  /* 浮层滚动面:滚到头不把页面一起带走 */
239
242
  overscroll-behavior: contain;
@@ -287,11 +290,20 @@
287
290
  .xh-scope-color-picker[data-part='saturation-area'] {
288
291
  position: relative;
289
292
  display: block;
290
- block-size: var(--xh-color-picker-saturation-area-h, 9rem);
293
+ flex: none;
294
+ block-size: var(--xh-color-picker-saturation-area-h, var(--xh-overlay-color-area-h));
291
295
  border-radius: var(--xh-color-picker-saturation-area-radius, var(--xh-shape-control));
292
296
  cursor: crosshair;
293
297
  }
294
298
 
299
+ /* 取色区排在面板最前时贴着面板顶边通栏:往外撑掉顶边与两侧的内衬、不取圆角,
300
+ 四角由面板(滚动面)自己的圆角裁出;后面的内容照常留内衬 */
301
+ .xh-scope-color-picker[data-part='content'] > [data-part='saturation-area']:first-child:where(.xh-scope-color-picker) {
302
+ margin-block-start: calc(-1 * var(--xh-_color-picker-content-py));
303
+ margin-inline: calc(-1 * var(--xh-_color-picker-content-px));
304
+ border-radius: var(--xh-color-picker-saturation-area-radius, 0);
305
+ }
306
+
295
307
  /* white / black 是 HSV 色彩空间自带的两个端点,不是主题色,因此不走令牌 */
296
308
  .xh-scope-color-picker[data-part='saturation-area']::before {
297
309
  position: absolute;
@@ -328,9 +340,9 @@
328
340
  .xh-scope-color-picker[data-part='area-thumb'] {
329
341
  position: absolute;
330
342
  box-sizing: border-box;
331
- inline-size: var(--xh-color-picker-thumb-size, 14px);
332
- block-size: var(--xh-color-picker-thumb-size, 14px);
333
- margin-inline-start: calc(var(--xh-color-picker-thumb-size, 14px) / -2);
343
+ inline-size: var(--xh-color-picker-thumb-size, var(--xh-control-indicator-md));
344
+ block-size: var(--xh-color-picker-thumb-size, var(--xh-control-indicator-md));
345
+ margin-inline-start: calc(var(--xh-color-picker-thumb-size, var(--xh-control-indicator-md)) / -2);
334
346
  border: var(--xh-stroke-thick) solid var(--xh-color-picker-thumb-border, var(--xh-color-neutral-0));
335
347
  border-radius: var(--xh-color-picker-thumb-radius, var(--xh-shape-circle));
336
348
  background: transparent;
@@ -341,7 +353,7 @@
341
353
 
342
354
  /* 取色区的纵轴也由连接层给(inset-block-start),回拉同样按 block-start 那侧 */
343
355
  .xh-scope-color-picker[data-part='area-thumb'] {
344
- margin-block-start: calc(var(--xh-color-picker-thumb-size, 14px) / -2);
356
+ margin-block-start: calc(var(--xh-color-picker-thumb-size, var(--xh-control-indicator-md)) / -2);
345
357
  }
346
358
 
347
359
  /* 只有手真正拖着时带 data-dragging:放大与光标不会几处一起变。
@@ -361,13 +373,23 @@
361
373
  滑块内部的皮仍归 color-slider 那一份。尺寸档跟着浮层上的 data-size 走,不必再各写一遍 */
362
374
  .xh-scope-color-picker[data-part='hue-slider'],
363
375
  .xh-scope-color-picker[data-part='alpha-slider'] {
364
- --xh-_thumb-size: var(--xh-color-picker-slider-thumb-size, var(--xh-track-thumb-size));
376
+ --xh-_thumb-size: var(--xh-color-picker-slider-thumb-size, var(--xh-control-indicator-md));
365
377
  --xh-_track-thickness: var(--xh-color-picker-slider-track-thickness, var(--xh-space-3));
366
378
 
367
379
  display: flex;
368
380
  flex-direction: column;
369
381
  }
370
382
 
383
+ /* 面板里两条滑块的拇指:一枚承载面色的白盘 + 1px 描边,正中一颗 8px 的当前色点。
384
+ 颜色带本身就是一排颜色,拇指整颗填当前色会融进色带里,留白盘才分得出拇指在哪;
385
+ 当前色点读滑块自己按拇指写的那支色 */
386
+ .xh-scope-color-picker:is([data-part='hue-slider'], [data-part='alpha-slider']) .xh-scope-color-slider[data-part='thumb'] {
387
+ border-width: var(--xh-stroke-thin);
388
+ background:
389
+ radial-gradient(circle, var(--xh-_color-slider-thumb-color) 0 var(--xh-space-1), transparent var(--xh-space-1)),
390
+ var(--xh-color-picker-slider-thumb-bg, var(--xh-bg-surface-raised));
391
+ }
392
+
371
393
  /* 标题与轨道之间的间隙 */
372
394
  .xh-scope-color-picker[data-part='hue-slider'] {
373
395
  gap: var(--xh-color-picker-hue-slider-gap, var(--xh-stack-gap-md));
@@ -383,26 +405,35 @@
383
405
  opacity: var(--xh-state-disabled-opacity);
384
406
  }
385
407
 
408
+ /* 通道输入照字段外壳:字段淡底 + 控件描边、24px 小号盒、说明档字号;悬停描边升一档,
409
+ 聚焦换承载面底 + 品牌描边、不画环(焦点由描边换色与底色差标出,强制色档补一圈 Highlight 环) */
386
410
  .xh-scope-color-picker[data-part='channel-input'] {
387
411
  inline-size: 100%;
388
412
  min-inline-size: 0;
389
- block-size: var(--xh-color-picker-input-h, var(--xh-control-h-sm));
413
+ block-size: var(--xh-color-picker-input-h, var(--xh-control-action-size));
390
414
  padding-inline: var(--xh-color-picker-input-px, var(--xh-control-px-sm));
391
415
  border: var(--xh-stroke-thin) solid var(--xh-color-picker-input-border, var(--xh-border-control));
392
416
  border-radius: var(--xh-color-picker-input-radius, var(--xh-shape-control));
393
- background: var(--xh-color-picker-input-bg, transparent);
417
+ background: var(--xh-color-picker-input-bg, var(--xh-bg-field));
394
418
  color: inherit;
395
419
  /* 表单控件不继承页面字体,只给字号会让输入框用 UA 默认字族,与周围文本对不上 */
396
420
  font-family: inherit;
397
- font-size: var(--xh-color-picker-input-font-size, var(--xh-text-secondary-size));
421
+ font-size: var(--xh-color-picker-input-font-size, var(--xh-text-caption-size));
398
422
  text-align: center;
399
423
  }
400
424
 
401
- .xh-scope-color-picker[data-part='channel-input']:focus-visible {
425
+ .xh-scope-color-picker[data-part='channel-input']:hover:not(:disabled, :focus, [data-readonly], [data-invalid]) {
426
+ border-color: var(--xh-color-picker-input-border-hover, var(--xh-border-strong));
427
+ }
428
+
429
+ .xh-scope-color-picker[data-part='channel-input']:focus {
402
430
  /* 焦点边一律 --xh-border-control-focus,不随语气 */
403
431
  border-color: var(--xh-color-picker-input-border-focus, var(--xh-border-control-focus));
404
- outline: var(--xh-ring-width) solid var(--xh-ring-focus);
405
- outline-offset: var(--xh-ring-offset);
432
+ background: var(--xh-color-picker-input-bg-focus, var(--xh-bg-surface));
433
+ }
434
+
435
+ .xh-scope-color-picker[data-part='channel-input']:focus-visible {
436
+ outline: none;
406
437
  }
407
438
 
408
439
  /* 打到一半的串:框里留着草稿,但值没动——描边提示"这串还没被收下" */
@@ -478,7 +509,7 @@
478
509
  /* 「添加」是面板里唯一的主要动作:品牌实心、悬停 / 按下与 0.97 按压、焦点环全由 Action Control 的
479
510
  text solid 档给;槽名统一按部件取 --xh-color-picker-confirm-trigger-*,只映射到家族桥接槽 */
480
511
  .xh-scope-color-picker[data-part='confirm-trigger'] {
481
- --xh-action-visual-size: var(--xh-color-picker-confirm-trigger-h, var(--xh-_action-profile-visual-size));
512
+ --xh-action-visual-size: var(--xh-color-picker-confirm-trigger-h, var(--xh-control-action-size));
482
513
  --xh-action-padding-inline: var(--xh-color-picker-confirm-trigger-px, var(--xh-_action-profile-padding-inline));
483
514
  --xh-action-radius: var(--xh-color-picker-confirm-trigger-radius, var(--xh-shape-control));
484
515
  --xh-action-bg-rest: var(--xh-color-picker-confirm-trigger-bg, var(--xh-_action-variant-bg-rest));
@@ -508,8 +539,8 @@
508
539
  浮层里的色板走小号格子:与滑块的拇指、数值框一个量级,整块面板才不会被色板撑开。
509
540
  最近使用色是同一台色块选择器,挂载点同一套 */
510
541
  .xh-scope-color-picker:is([data-part='swatch-picker'], [data-part='recent-swatch-picker']) {
511
- --xh-_color-swatch-picker-cell: var(--xh-color-picker-swatch-cell, var(--xh-control-h-sm));
512
- --xh-_color-swatch-picker-gap: var(--xh-color-picker-swatch-gap, var(--xh-control-gap-sm));
542
+ --xh-_color-swatch-picker-cell: var(--xh-color-picker-swatch-cell, var(--xh-glyph-size-sm));
543
+ --xh-_color-swatch-picker-gap: var(--xh-color-picker-swatch-gap, var(--xh-space-2));
513
544
  --xh-_color-swatch-picker-indicator: var(--xh-control-indicator-sm);
514
545
  --xh-_color-swatch-picker-mark: calc(var(--xh-_color-swatch-picker-indicator) - var(--xh-space-1));
515
546
  --xh-_color-swatch-picker-accent: var(--xh-_tone, var(--xh-bg-brand));
@@ -525,6 +556,23 @@
525
556
  cursor: not-allowed;
526
557
  }
527
558
 
559
+ /* 粗指针:16px 的格子手指压不准,格子回到小号控件高 */
560
+ @media (pointer: coarse) {
561
+ .xh-scope-color-picker:is([data-part='swatch-picker'], [data-part='recent-swatch-picker']) {
562
+ --xh-_color-swatch-picker-cell: var(--xh-color-picker-swatch-cell, var(--xh-control-h-sm));
563
+ }
564
+ }
565
+
566
+ /* 色板区与上面的取色控件之间一条通栏分隔:撑掉两侧内衬铺满面板宽,线取面板材质的描边档;
567
+ 两块色板挨着时只在头一块上画 */
568
+ .xh-scope-color-picker[data-part='content']
569
+ > :is([data-part='swatch-picker'], [data-part='recent-swatch-picker']):where(.xh-scope-color-picker):not(:is([data-part='swatch-picker'], [data-part='recent-swatch-picker']) + *) {
570
+ margin-inline: calc(-1 * var(--xh-_color-picker-content-px));
571
+ padding-block-start: var(--xh-_color-picker-content-py);
572
+ padding-inline: var(--xh-_color-picker-content-px);
573
+ border-block-start: var(--xh-stroke-thin) solid var(--xh-color-picker-separator, var(--xh-material-solid-border));
574
+ }
575
+
528
576
  /* 任何 display 都会盖掉 UA 的 [hidden]{display:none}:
529
577
  凡是被赋了 display 的角色节点都要显式让位,漏一处收起态就失效。
530
578
  content 的收起交给 presence:退场结束后由适配器写内联 display:none,避免截断动画。 */
@@ -586,6 +634,12 @@
586
634
  outline-offset: calc(-1 * var(--xh-stroke-thin));
587
635
  }
588
636
 
637
+ /* 通道输入聚焦不画环,靠描边换色;这一档描边被换成系统色,补一圈 Highlight 环 */
638
+ .xh-scope-color-picker[data-part='channel-input']:focus {
639
+ outline: var(--xh-ring-width) solid Highlight;
640
+ outline-offset: var(--xh-ring-offset);
641
+ }
642
+
589
643
  /* 标签前的色点画的也是颜色本身:同样退出强制着色,用系统文字色描一圈 */
590
644
  .xh-scope-color-picker[data-part='tag-list'] > .xh-scope-tag[data-part='root'][data-value]::before {
591
645
  forced-color-adjust: none;
@@ -36,15 +36,17 @@
36
36
  /* 禁用不整体压暗:标签是文字,换到禁用前景;颜色带与拇指画的是颜色本身,换不得色,
37
37
  压暗只做一次、落在 control 上(track / thumb 各自再叠一层 opacity 会越叠越黑),拇指另收掉抬升 */
38
38
 
39
- /* 字段标签:14 / 500 / fg-default,禁用换到 --xh-fg-subtle */
39
+ /* 字段标签:14 / 400 / fg-muted,与控件隔 space-2,禁用不另变色 */
40
40
  .xh-scope-color-slider[data-part='label'] {
41
- color: var(--xh-color-slider-label-fg, var(--xh-fg-default));
41
+ /* 竖排时标签与控件之间的距离:根的 gap 之上补一段差值,--xh-color-slider-label-gap 给多少最终就是多少 */
42
+ margin-block-end: calc(var(--xh-color-slider-label-gap, var(--xh-space-2)) - var(--xh-color-slider-gap, var(--xh-space-1)));
43
+ color: var(--xh-color-slider-label-fg, var(--xh-fg-muted));
42
44
  font-size: var(--xh-color-slider-label-font-size, var(--xh-text-label-size));
43
45
  font-weight: var(--xh-color-slider-label-font-weight, var(--xh-text-label-weight));
44
46
  }
45
47
 
46
48
  .xh-scope-color-slider[data-part='label'][data-disabled] {
47
- color: var(--xh-color-slider-label-fg-disabled, var(--xh-fg-subtle));
49
+ color: var(--xh-color-slider-label-fg-disabled, var(--xh-fg-muted));
48
50
  }
49
51
 
50
52
  /* 拇指以它为定位上下文(拇指常常浮出轨道,挂在 track 上会被轨道的盒子束住)。
@@ -84,7 +86,7 @@
84
86
  .xh-scope-color-slider[data-part='track'] {
85
87
  position: relative;
86
88
  border-radius: var(--xh-color-slider-track-radius, var(--xh-shape-pill));
87
- box-shadow: inset 0 0 0 var(--xh-stroke-thin) var(--xh-color-slider-track-border, var(--xh-border-subtle));
89
+ box-shadow: inset 0 0 0 var(--xh-stroke-thin) var(--xh-color-slider-track-border, var(--xh-border-default));
88
90
  }
89
91
 
90
92
  .xh-scope-color-slider[data-part='track'][data-orientation='horizontal'] {
@@ -108,10 +110,10 @@
108
110
  border-radius: inherit;
109
111
  background-color: var(--xh-color-slider-checker-base, var(--xh-bg-surface));
110
112
  background-image:
111
- linear-gradient(45deg, var(--xh-color-slider-checker, var(--xh-color-neutral-300)) 25%, transparent 25%),
112
- linear-gradient(-45deg, var(--xh-color-slider-checker, var(--xh-color-neutral-300)) 25%, transparent 25%),
113
- linear-gradient(45deg, transparent 75%, var(--xh-color-slider-checker, var(--xh-color-neutral-300)) 75%),
114
- linear-gradient(-45deg, transparent 75%, var(--xh-color-slider-checker, var(--xh-color-neutral-300)) 75%);
113
+ linear-gradient(45deg, var(--xh-color-slider-checker, var(--xh-bg-subtle)) 25%, transparent 25%),
114
+ linear-gradient(-45deg, var(--xh-color-slider-checker, var(--xh-bg-subtle)) 25%, transparent 25%),
115
+ linear-gradient(45deg, transparent 75%, var(--xh-color-slider-checker, var(--xh-bg-subtle)) 75%),
116
+ linear-gradient(-45deg, transparent 75%, var(--xh-color-slider-checker, var(--xh-bg-subtle)) 75%);
115
117
  background-position: 0 0, 0 4px, 4px -4px, -4px 0;
116
118
  background-size: 8px 8px;
117
119
  }
@@ -51,21 +51,21 @@
51
51
  --xh-_color-swatch-picker-indicator: var(--xh-control-indicator-lg);
52
52
  }
53
53
 
54
- /* 标题独占一行,格子从下一行起排。复合单字段的标签:14 / 500 / fg-default,不随档;
55
- 与格子的距离贴控件 space-1——容器的 gap 归格子之间,标签在它之上补一段差值把距离收成目标值 */
54
+ /* 标题独占一行,格子从下一行起排。复合单字段的标签:14 / 400 / fg-muted,不随档;
55
+ 与格子隔 space-2——容器的 gap 归格子之间,标签在它之上补一段差值把距离收成目标值 */
56
56
  .xh-scope-color-swatch-picker[data-part='label'] {
57
57
  flex-basis: 100%;
58
58
  margin-block-end: calc(
59
- var(--xh-color-swatch-picker-label-gap, var(--xh-space-1))
59
+ var(--xh-color-swatch-picker-label-gap, var(--xh-space-2))
60
60
  - var(--xh-color-swatch-picker-gap, var(--xh-_color-swatch-picker-gap))
61
61
  );
62
- color: var(--xh-color-swatch-picker-label-fg, var(--xh-fg-default));
62
+ color: var(--xh-color-swatch-picker-label-fg, var(--xh-fg-muted));
63
63
  font-size: var(--xh-color-swatch-picker-label-font-size, var(--xh-text-label-size));
64
64
  font-weight: var(--xh-color-swatch-picker-label-font-weight, var(--xh-text-label-weight));
65
65
  }
66
66
 
67
67
  .xh-scope-color-swatch-picker[data-part='label'][data-disabled] {
68
- color: var(--xh-color-swatch-picker-label-fg-disabled, var(--xh-fg-subtle));
68
+ color: var(--xh-color-swatch-picker-label-fg-disabled, var(--xh-fg-muted));
69
69
  }
70
70
 
71
71
  /* 一格:正方形命中区,里面铺满色块面。
@@ -82,6 +82,7 @@
82
82
  --xh-_combobox-h: var(--xh-control-h-md);
83
83
  --xh-_combobox-px: var(--xh-control-px-md);
84
84
  --xh-_combobox-item-py: var(--xh-list-option-py-md);
85
+ --xh-_combobox-item-h: var(--xh-list-option-h-md);
85
86
  --xh-_combobox-item-px: var(--xh-control-px-md);
86
87
  --xh-_combobox-gap: var(--xh-control-gap-md);
87
88
  --xh-_combobox-font-size: var(--xh-control-font-md);
@@ -118,6 +119,7 @@
118
119
  --xh-_combobox-h: var(--xh-control-h-sm);
119
120
  --xh-_combobox-px: var(--xh-control-px-sm);
120
121
  --xh-_combobox-item-py: var(--xh-list-option-py-sm);
122
+ --xh-_combobox-item-h: var(--xh-list-option-h-sm);
121
123
  --xh-_combobox-item-px: var(--xh-control-px-sm);
122
124
  --xh-_combobox-gap: var(--xh-control-gap-sm);
123
125
  --xh-_combobox-font-size: var(--xh-control-font-sm);
@@ -129,6 +131,7 @@
129
131
  --xh-_combobox-h: var(--xh-control-h-lg);
130
132
  --xh-_combobox-px: var(--xh-control-px-lg);
131
133
  --xh-_combobox-item-py: var(--xh-list-option-py-lg);
134
+ --xh-_combobox-item-h: var(--xh-list-option-h-lg);
132
135
  --xh-_combobox-item-px: var(--xh-control-px-lg);
133
136
  --xh-_combobox-gap: var(--xh-control-gap-lg);
134
137
  --xh-_combobox-font-size: var(--xh-control-font-lg);
@@ -137,14 +140,16 @@
137
140
  }
138
141
 
139
142
  .xh-scope-combobox[data-part='label'] {
140
- color: var(--xh-combobox-label-fg, var(--xh-fg-default));
143
+ /* 竖排时标签与控件之间的距离:根的 gap 之上补一段差值,--xh-combobox-label-gap 给多少最终就是多少 */
144
+ margin-block-end: calc(var(--xh-combobox-label-gap, var(--xh-space-2)) - var(--xh-combobox-gap, var(--xh-space-1)));
145
+ color: var(--xh-combobox-label-fg, var(--xh-fg-muted));
141
146
  font-size: var(--xh-combobox-label-font-size, var(--xh-text-label-size));
142
147
  font-weight: var(--xh-combobox-label-font-weight, var(--xh-text-label-weight));
143
148
  line-height: var(--xh-leading-none);
144
149
  }
145
150
 
146
151
  .xh-scope-combobox[data-part='label'][data-disabled] {
147
- color: var(--xh-combobox-label-fg-disabled, var(--xh-fg-subtle));
152
+ color: var(--xh-combobox-label-fg-disabled, var(--xh-fg-muted));
148
153
  }
149
154
 
150
155
  /* 画成一个框的是 control 而不是 input:输入框、展开按钮、清空按钮三者要看起来是一体的,
@@ -166,8 +171,6 @@
166
171
  --xh-field-border-hover: var(--xh-combobox-control-border-hover, var(--xh-_field-variant-border-hover));
167
172
  --xh-field-border-focus: var(--xh-combobox-control-border-focus, var(--xh-_field-variant-border-focus));
168
173
  --xh-field-border-invalid: var(--xh-combobox-control-border-invalid, var(--xh-_field-variant-border-invalid));
169
- --xh-field-ring-focus: var(--xh-ring-focus);
170
- --xh-field-ring-invalid: var(--xh-ring-invalid);
171
174
  --xh-field-shadow-rest: var(--xh-combobox-control-shadow, none);
172
175
  /* 家族 chrome 会重写 --xh-icon-size,使用者图标槽必须经桥接槽下发才能在盒内生效 */
173
176
  --xh-field-glyph-size: var(--xh-combobox-icon-size, var(--xh-_field-size-glyph-size));
@@ -311,7 +314,7 @@
311
314
  min-block-size: var(--xh-combobox-content-min-h, var(--xh-_combobox-h));
312
315
  max-block-size: min(var(--xh-combobox-content-max-h, var(--xh-overlay-menu-max-h)), var(--xh-_combobox-available-h));
313
316
  padding-block: var(--xh-combobox-content-py, var(--xh-space-1));
314
- padding-inline: var(--xh-combobox-content-px, var(--xh-space-1));
317
+ padding-inline: var(--xh-combobox-content-px, 0);
315
318
  border-radius: var(--xh-combobox-content-radius, var(--xh-shape-overlay));
316
319
  overflow-y: auto;
317
320
  /* 浮层滚动面:滚到头不把页面一起带走 */
@@ -384,10 +387,11 @@
384
387
  语境给(选中 = 透明底 + 行尾对号,正文保持 rest 色与常规字重),公开 Combobox 槽只映射到家族合同 */
385
388
  .xh-scope-combobox[data-part='item'] {
386
389
  --xh-collection-block-padding: var(--xh-combobox-item-py, var(--xh-_combobox-item-py));
390
+ --xh-collection-row-h: var(--xh-combobox-item-h, var(--xh-_combobox-item-h));
387
391
  --xh-collection-inline-padding: var(--xh-combobox-item-px, var(--xh-_combobox-item-px));
388
392
  --xh-collection-gap: var(--xh-combobox-item-gap, var(--xh-_combobox-gap));
389
393
  --xh-collection-font-size: var(--xh-combobox-item-font-size, var(--xh-_combobox-font-size));
390
- --xh-collection-radius: var(--xh-combobox-item-radius, var(--xh-shape-inset));
394
+ --xh-collection-radius: var(--xh-combobox-item-radius, 0);
391
395
  --xh-collection-fg-rest: var(--xh-combobox-item-fg, var(--xh-material-frosted-fg));
392
396
  --xh-collection-fg-hover: var(--xh-combobox-item-fg, var(--xh-material-frosted-fg));
393
397
  --xh-collection-fg-keyboard-highlight: var(--xh-combobox-item-fg, var(--xh-material-frosted-fg));
@@ -396,10 +400,10 @@
396
400
  --xh-collection-fg-selected-hover: var(--xh-combobox-item-fg-selected, var(--xh-combobox-item-fg, var(--xh-material-frosted-fg)));
397
401
  --xh-collection-fg-selected-pressed: var(--xh-combobox-item-fg-selected, var(--xh-combobox-item-fg, var(--xh-material-frosted-fg)));
398
402
  --xh-collection-fg-pressed: var(--xh-combobox-item-fg, var(--xh-material-frosted-fg));
399
- --xh-collection-font-weight-selected: var(--xh-combobox-item-font-weight-selected, var(--xh-font-weight-regular));
400
- --xh-collection-font-weight-selected-highlight: var(--xh-combobox-item-font-weight-selected, var(--xh-font-weight-regular));
401
- --xh-collection-font-weight-selected-hover: var(--xh-combobox-item-font-weight-selected, var(--xh-font-weight-regular));
402
- --xh-collection-font-weight-selected-pressed: var(--xh-combobox-item-font-weight-selected, var(--xh-font-weight-regular));
403
+ --xh-collection-font-weight-selected: var(--xh-combobox-item-font-weight-selected, var(--xh-font-weight-medium));
404
+ --xh-collection-font-weight-selected-highlight: var(--xh-combobox-item-font-weight-selected, var(--xh-font-weight-medium));
405
+ --xh-collection-font-weight-selected-hover: var(--xh-combobox-item-font-weight-selected, var(--xh-font-weight-medium));
406
+ --xh-collection-font-weight-selected-pressed: var(--xh-combobox-item-font-weight-selected, var(--xh-font-weight-medium));
403
407
  --xh-collection-bg-hover: var(--xh-combobox-item-bg-hover, var(--xh-bg-subtle));
404
408
  --xh-collection-bg-keyboard-highlight: var(--xh-combobox-item-bg-hover, var(--xh-bg-subtle));
405
409
  --xh-collection-bg-selected-highlight: var(--xh-combobox-item-bg-hover, var(--xh-bg-subtle));