@xihan-ui/styles 3.0.0 → 3.2.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 (221) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +1 -1
  3. package/component-tokens.d.ts +29 -0
  4. package/components.tokens.json +683 -27
  5. package/css/alert.css +2 -2
  6. package/css/approval.css +4 -4
  7. package/css/button.css +9 -5
  8. package/css/calendar-picker.css +3 -3
  9. package/css/calendar-range-picker.css +7 -7
  10. package/css/carousel.css +45 -13
  11. package/css/cartesian-chart.css +11 -11
  12. package/css/cascader.css +10 -10
  13. package/css/citation.css +2 -2
  14. package/css/code-view.css +6 -6
  15. package/css/color-picker.css +81 -0
  16. package/css/color-swatch-picker.css +9 -4
  17. package/css/combobox.css +12 -4
  18. package/css/command.css +1 -1
  19. package/css/date-field.css +39 -0
  20. package/css/date-picker.css +86 -9
  21. package/css/date-range-picker.css +47 -7
  22. package/css/diff-view.css +8 -8
  23. package/css/field-array.css +1 -1
  24. package/css/field.css +4 -0
  25. package/css/file-upload.css +1 -1
  26. package/css/float-button.css +140 -27
  27. package/css/form.css +14 -6
  28. package/css/graph-chart.css +2 -2
  29. package/css/highlight.css +1 -1
  30. package/css/image.css +1 -1
  31. package/css/mention.css +1 -1
  32. package/css/message-feed.css +1 -1
  33. package/css/notification.css +26 -20
  34. package/css/number-field.css +18 -18
  35. package/css/page-header.css +2 -2
  36. package/css/password-input.css +2 -2
  37. package/css/popconfirm.css +3 -3
  38. package/css/question-flow.css +8 -8
  39. package/css/radar-chart.css +6 -6
  40. package/css/rating.css +1 -1
  41. package/css/select.css +2 -2
  42. package/css/separator.css +2 -2
  43. package/css/side-nav.css +13 -13
  44. package/css/skeleton.css +5 -5
  45. package/css/slider.css +6 -6
  46. package/css/sortable.css +2 -2
  47. package/css/table.css +19 -2
  48. package/css/tags-input.css +1 -1
  49. package/css/time-picker.css +59 -2
  50. package/css/tool-call.css +7 -7
  51. package/css/tooltip.css +1 -1
  52. package/css/tree-select.css +2 -2
  53. package/css/tree.css +81 -11
  54. package/dist/css/accordion.css +269 -0
  55. package/dist/css/affix.css +47 -0
  56. package/dist/css/alert.css +247 -0
  57. package/dist/css/anchor.css +252 -0
  58. package/dist/css/approval.css +501 -0
  59. package/dist/css/avatar-group.css +99 -0
  60. package/dist/css/avatar.css +98 -0
  61. package/dist/css/back-top.css +161 -0
  62. package/dist/css/badge.css +205 -0
  63. package/dist/css/bar-code.css +62 -0
  64. package/dist/css/breadcrumb.css +230 -0
  65. package/dist/css/button-group.css +263 -0
  66. package/dist/css/button.css +219 -0
  67. package/dist/css/calendar-picker.css +467 -0
  68. package/dist/css/calendar-range-picker.css +554 -0
  69. package/dist/css/card.css +221 -0
  70. package/dist/css/carousel.css +710 -0
  71. package/dist/css/cartesian-chart.css +830 -0
  72. package/dist/css/cascader.css +961 -0
  73. package/dist/css/checkbox-group.css +358 -0
  74. package/dist/css/checkbox.css +257 -0
  75. package/dist/css/citation.css +470 -0
  76. package/dist/css/clipboard.css +315 -0
  77. package/dist/css/code-view.css +374 -0
  78. package/dist/css/collapsible.css +185 -0
  79. package/dist/css/color-field.css +176 -0
  80. package/dist/css/color-picker.css +595 -0
  81. package/dist/css/color-slider.css +281 -0
  82. package/dist/css/color-swatch-picker.css +250 -0
  83. package/dist/css/color-swatch.css +35 -0
  84. package/dist/css/combobox.css +574 -0
  85. package/dist/css/command.css +399 -0
  86. package/dist/css/context-menu.css +420 -0
  87. package/dist/css/date-field.css +317 -0
  88. package/dist/css/date-picker.css +868 -0
  89. package/dist/css/date-range-picker.css +886 -0
  90. package/dist/css/description.css +67 -0
  91. package/dist/css/descriptions.css +299 -0
  92. package/dist/css/dialog.css +455 -0
  93. package/dist/css/diff-view.css +513 -0
  94. package/dist/css/download-trigger.css +151 -0
  95. package/dist/css/drawer.css +552 -0
  96. package/dist/css/editable.css +295 -0
  97. package/dist/css/empty-state.css +163 -0
  98. package/dist/css/field-array.css +226 -0
  99. package/dist/css/field.css +166 -0
  100. package/dist/css/fieldset.css +102 -0
  101. package/dist/css/file-upload.css +429 -0
  102. package/dist/css/flex.css +441 -0
  103. package/dist/css/float-button.css +569 -0
  104. package/dist/css/floating-panel.css +429 -0
  105. package/dist/css/focus.css +46 -0
  106. package/dist/css/forced-colors.css +93 -0
  107. package/dist/css/form.css +393 -0
  108. package/dist/css/funnel-chart.css +106 -0
  109. package/dist/css/graph-chart.css +205 -0
  110. package/dist/css/grid-list.css +235 -0
  111. package/dist/css/grid.css +1201 -0
  112. package/dist/css/heatmap.css +552 -0
  113. package/dist/css/hierarchy-chart.css +298 -0
  114. package/dist/css/highlight.css +41 -0
  115. package/dist/css/hover-card.css +226 -0
  116. package/dist/css/icon.css +225 -0
  117. package/dist/css/image-cropper.css +373 -0
  118. package/dist/css/image-viewer.css +538 -0
  119. package/dist/css/image.css +98 -0
  120. package/dist/css/infinite-scroll.css +77 -0
  121. package/dist/css/input-group.css +275 -0
  122. package/dist/css/json-viewer.css +379 -0
  123. package/dist/css/kbd.css +72 -0
  124. package/dist/css/label.css +78 -0
  125. package/dist/css/layers.css +7 -0
  126. package/dist/css/layout.css +372 -0
  127. package/dist/css/liquid.css +106 -0
  128. package/dist/css/list.css +152 -0
  129. package/dist/css/listbox.css +390 -0
  130. package/dist/css/loading-bar.css +141 -0
  131. package/dist/css/log.css +306 -0
  132. package/dist/css/markdown-stream.css +149 -0
  133. package/dist/css/marquee.css +378 -0
  134. package/dist/css/masonry.css +70 -0
  135. package/dist/css/matrix-code.css +67 -0
  136. package/dist/css/mention.css +393 -0
  137. package/dist/css/menu.css +364 -0
  138. package/dist/css/menubar.css +456 -0
  139. package/dist/css/message-feed.css +318 -0
  140. package/dist/css/navigation-menu.css +513 -0
  141. package/dist/css/notification.css +782 -0
  142. package/dist/css/number-animation.css +44 -0
  143. package/dist/css/number-field.css +252 -0
  144. package/dist/css/overlay-arrow.css +56 -0
  145. package/dist/css/page-header.css +184 -0
  146. package/dist/css/pagination.css +450 -0
  147. package/dist/css/password-input.css +391 -0
  148. package/dist/css/pie-chart.css +247 -0
  149. package/dist/css/pin-input.css +199 -0
  150. package/dist/css/pointer.css +36 -0
  151. package/dist/css/popconfirm.css +320 -0
  152. package/dist/css/popover.css +279 -0
  153. package/dist/css/progress.css +501 -0
  154. package/dist/css/prompt-input.css +260 -0
  155. package/dist/css/question-flow.css +553 -0
  156. package/dist/css/radar-chart.css +233 -0
  157. package/dist/css/radio-group.css +598 -0
  158. package/dist/css/rating.css +294 -0
  159. package/dist/css/reasoning.css +343 -0
  160. package/dist/css/reset.css +117 -0
  161. package/dist/css/resizable.css +242 -0
  162. package/dist/css/sankey-chart.css +174 -0
  163. package/dist/css/scroll-area.css +240 -0
  164. package/dist/css/scrollbar.css +204 -0
  165. package/dist/css/select.css +612 -0
  166. package/dist/css/separator.css +122 -0
  167. package/dist/css/side-nav.css +476 -0
  168. package/dist/css/signature-pad.css +179 -0
  169. package/dist/css/skeleton.css +161 -0
  170. package/dist/css/slider.css +374 -0
  171. package/dist/css/sortable.css +228 -0
  172. package/dist/css/sparkline.css +164 -0
  173. package/dist/css/spinner.css +236 -0
  174. package/dist/css/splitter.css +159 -0
  175. package/dist/css/statistic.css +137 -0
  176. package/dist/css/steps.css +627 -0
  177. package/dist/css/switch.css +351 -0
  178. package/dist/css/table.css +1145 -0
  179. package/dist/css/tabs.css +944 -0
  180. package/dist/css/tag-group.css +247 -0
  181. package/dist/css/tag.css +310 -0
  182. package/dist/css/tags-input.css +322 -0
  183. package/dist/css/text-field.css +197 -0
  184. package/dist/css/time-field.css +277 -0
  185. package/dist/css/time-picker.css +707 -0
  186. package/dist/css/time-range-picker.css +746 -0
  187. package/dist/css/timeline.css +423 -0
  188. package/dist/css/timer.css +123 -0
  189. package/dist/css/timestamp.css +34 -0
  190. package/dist/css/toggle-group.css +424 -0
  191. package/dist/css/toggle.css +146 -0
  192. package/dist/css/tone.css +189 -0
  193. package/dist/css/tool-call.css +429 -0
  194. package/dist/css/toolbar.css +365 -0
  195. package/dist/css/tooltip.css +218 -0
  196. package/dist/css/tour.css +439 -0
  197. package/dist/css/transfer.css +638 -0
  198. package/dist/css/tree-select.css +878 -0
  199. package/dist/css/tree.css +733 -0
  200. package/dist/css/truncate.css +108 -0
  201. package/dist/css/typography.css +472 -0
  202. package/dist/css/undefined.css +58 -0
  203. package/dist/css/virtualizer.css +166 -0
  204. package/dist/css/visually-hidden.css +20 -0
  205. package/dist/css/watermark.css +82 -0
  206. package/dist/family/action-control.css +487 -0
  207. package/dist/family/chart.css +480 -0
  208. package/dist/family/check-mark.css +94 -0
  209. package/dist/family/choice-card.css +97 -0
  210. package/dist/family/collection-item.css +764 -0
  211. package/dist/family/field-chrome.css +287 -0
  212. package/dist/family/loading-ring.css +95 -0
  213. package/dist/family/material.css +72 -0
  214. package/dist/family/menu-choice.css +56 -0
  215. package/dist/family/motion.css +363 -0
  216. package/dist/family/swatch.css +59 -0
  217. package/dist/family/tag-list.css +59 -0
  218. package/family/action-control.css +3 -12
  219. package/index.css +7307 -6759
  220. package/index.unlayered.css +7309 -6761
  221. package/package.json +165 -164
package/css/alert.css CHANGED
@@ -100,8 +100,8 @@
100
100
  }
101
101
 
102
102
  /* 列里的两段文字不再参与 root 那一行的伸缩:宽度由列自己给 */
103
- [data-scope='alert'][data-part='content'] [data-part='title'],
104
- [data-scope='alert'][data-part='content'] [data-part='description'] {
103
+ [data-scope='alert'][data-part='content'] [data-part='title']:where([data-scope='alert']),
104
+ [data-scope='alert'][data-part='content'] [data-part='description']:where([data-scope='alert']) {
105
105
  flex: none;
106
106
  }
107
107
 
package/css/approval.css CHANGED
@@ -48,7 +48,7 @@
48
48
  }
49
49
 
50
50
  /* 卡片出现时滑入;落在首帧就在的列表条目里(历史消息)时直接呈现,不跟着整屏一起入场 */
51
- [data-scope='approval'][data-part='root']:not([data-scope][data-part='item'][data-instant] *) {
51
+ [data-scope='approval'][data-part='root']:not([data-scope][data-part='item'][data-instant] :where([data-scope='approval'])) {
52
52
  animation: xh-item-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
53
53
  }
54
54
 
@@ -252,12 +252,12 @@
252
252
  color: var(--xh-approval-item-text-fg, var(--xh-fg-muted));
253
253
  }
254
254
 
255
- [data-scope='approval'][data-part='item'][data-state='checked'] [data-part='item-text'] {
255
+ [data-scope='approval'][data-part='item'][data-state='checked'] [data-part='item-text']:where([data-scope='approval']) {
256
256
  color: var(--xh-approval-item-text-fg-checked, var(--xh-fg-default));
257
257
  }
258
258
 
259
259
  /* 排在勾选档之后:禁用项无论勾没勾都是禁用色 */
260
- [data-scope='approval'][data-part='item'][data-disabled] [data-part='item-text'] {
260
+ [data-scope='approval'][data-part='item'][data-disabled] [data-part='item-text']:where([data-scope='approval']) {
261
261
  color: var(--xh-fg-disabled);
262
262
  }
263
263
 
@@ -325,7 +325,7 @@
325
325
  }
326
326
 
327
327
  /* 落定结果弹出;落在首帧就在的列表条目里(历史消息)时直接呈现,不跟着整屏一起入场 */
328
- [data-scope='approval'][data-part='result']:not([data-scope][data-part='item'][data-instant] *) {
328
+ [data-scope='approval'][data-part='result']:not([data-scope][data-part='item'][data-instant] :where([data-scope='approval'])) {
329
329
  animation: xh-pop-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
330
330
  }
331
331
 
package/css/button.css CHANGED
@@ -156,16 +156,20 @@
156
156
  content: none;
157
157
  }
158
158
 
159
+ /* 作者的图形是任意节点,规则主体没有可认的特征:加载与否写在 indicator 自己的私有槽上,
160
+ 图形只读槽。翻转 data-loading 时失效的只有 indicator 本身,不会让全页同名属性的变化整棵子树重算 */
159
161
  [data-scope='button'][data-part='indicator'] > * {
160
- opacity: 0;
162
+ opacity: var(--xh-_button-indicator-opacity, 0);
161
163
  transition: opacity var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
164
+ transition-delay: calc(var(--xh-motion-duration-micro) * var(--xh-_button-indicator-delay, 0));
162
165
  animation: xh-spin var(--xh-button-spin-duration, var(--xh-motion-loop-spin)) var(--xh-motion-ease-loop) infinite paused;
166
+ animation-play-state: var(--xh-_button-indicator-play, paused);
163
167
  }
164
168
 
165
- [data-scope='button'][data-part='root'][data-loading] > [data-scope='button'][data-part='indicator'] > * {
166
- opacity: 1;
167
- transition-delay: var(--xh-motion-duration-micro);
168
- animation-play-state: running;
169
+ [data-scope='button'][data-part='root'][data-loading] > [data-scope='button'][data-part='indicator'] {
170
+ --xh-_button-indicator-opacity: 1;
171
+ --xh-_button-indicator-delay: 1;
172
+ --xh-_button-indicator-play: running;
169
173
  }
170
174
 
171
175
  /* 钮里原有的内容与环交叉:进入在途同样等一个 micro 才淡出、留位不塌,退出不等 */
@@ -143,7 +143,7 @@
143
143
  }
144
144
 
145
145
  /* 周期格沿横轴铺开,但始终保持控制件高度;选中面只换颜色,不改变几何尺寸。 */
146
- [data-scope='calendar-picker'][data-part='grid']:is([data-view='week'], [data-view='month'], [data-view='quarter'], [data-view='year']) [data-part='cell-trigger'] {
146
+ [data-scope='calendar-picker'][data-part='grid']:is([data-view='week'], [data-view='month'], [data-view='quarter'], [data-view='year']) [data-part='cell-trigger']:where([data-scope='calendar-picker']) {
147
147
  flex: 0 0 auto;
148
148
  aspect-ratio: auto;
149
149
  min-inline-size: 0;
@@ -152,7 +152,7 @@
152
152
  border-radius: var(--xh-calendar-picker-period-radius, var(--xh-shape-control));
153
153
  }
154
154
 
155
- [data-scope='calendar-picker'][data-part='grid'][data-view='week'] [data-part='cell-trigger'] {
155
+ [data-scope='calendar-picker'][data-part='grid'][data-view='week'] [data-part='cell-trigger']:where([data-scope='calendar-picker']) {
156
156
  flex: 1 1 auto;
157
157
  justify-content: flex-start;
158
158
  inline-size: 100%;
@@ -361,7 +361,7 @@
361
361
  只收日视图这一档:粗粒度视图(月格、年格)点一格是往下钻一层,只读也照做,
362
362
  那些格子仍是按得动的按钮,手型不能撤 */
363
363
  [data-scope='calendar-picker'][data-part='grid'][data-readonly][data-view='day']
364
- [data-part='cell-trigger']:not([data-disabled]) {
364
+ [data-part='cell-trigger']:where([data-scope='calendar-picker']):not([data-disabled]) {
365
365
  --xh-action-cursor-rest: default;
366
366
  --xh-action-cursor-hover: default;
367
367
  --xh-action-cursor-pressed: default;
@@ -143,7 +143,7 @@
143
143
  }
144
144
 
145
145
  /* 周期格沿横轴铺开,但始终保持控制件高度;选中面只换颜色,不改变几何尺寸。 */
146
- [data-scope='calendar-range-picker'][data-part='grid']:is([data-view='week'], [data-view='month'], [data-view='quarter'], [data-view='year']) [data-part='cell-trigger'] {
146
+ [data-scope='calendar-range-picker'][data-part='grid']:is([data-view='week'], [data-view='month'], [data-view='quarter'], [data-view='year']) [data-part='cell-trigger']:where([data-scope='calendar-range-picker']) {
147
147
  flex: 0 0 auto;
148
148
  aspect-ratio: auto;
149
149
  min-inline-size: 0;
@@ -152,7 +152,7 @@
152
152
  border-radius: var(--xh-calendar-range-picker-period-radius, var(--xh-shape-control));
153
153
  }
154
154
 
155
- [data-scope='calendar-range-picker'][data-part='grid'][data-view='week'] [data-part='cell-trigger'] {
155
+ [data-scope='calendar-range-picker'][data-part='grid'][data-view='week'] [data-part='cell-trigger']:where([data-scope='calendar-range-picker']) {
156
156
  flex: 1 1 auto;
157
157
  justify-content: flex-start;
158
158
  inline-size: 100%;
@@ -264,13 +264,13 @@
264
264
 
265
265
  /* 行首与行尾收圆:区间跨周时每一行各是一条两头圆的横杠。
266
266
  摆了周序号格的行里,行首那一格排在它后面 */
267
- [data-scope='calendar-range-picker'][data-part='week-row'] > [data-part='cell'][data-in-range]:first-child::before,
268
- [data-scope='calendar-range-picker'][data-part='week-row'] > [data-part='week-number'] + [data-part='cell'][data-in-range]::before {
267
+ [data-scope='calendar-range-picker'][data-part='week-row'] > [data-part='cell'][data-in-range]:where([data-scope='calendar-range-picker']):first-child::before,
268
+ [data-scope='calendar-range-picker'][data-part='week-row'] > [data-part='week-number'] + [data-part='cell'][data-in-range]:where([data-scope='calendar-range-picker'])::before {
269
269
  border-start-start-radius: var(--xh-calendar-range-picker-range-row-radius, var(--xh-shape-inset));
270
270
  border-end-start-radius: var(--xh-calendar-range-picker-range-row-radius, var(--xh-shape-inset));
271
271
  }
272
272
 
273
- [data-scope='calendar-range-picker'][data-part='week-row'] > [data-part='cell'][data-in-range]:last-child::before {
273
+ [data-scope='calendar-range-picker'][data-part='week-row'] > [data-part='cell'][data-in-range]:where([data-scope='calendar-range-picker']):last-child::before {
274
274
  border-start-end-radius: var(--xh-calendar-range-picker-range-row-radius, var(--xh-shape-inset));
275
275
  border-end-end-radius: var(--xh-calendar-range-picker-range-row-radius, var(--xh-shape-inset));
276
276
  }
@@ -286,7 +286,7 @@
286
286
  }
287
287
 
288
288
  /* 粗粒度的格子之间有间隙,底色本就接不成一条,每一格各自收圆 */
289
- [data-scope='calendar-range-picker'][data-part='grid']:is([data-view='week'], [data-view='month'], [data-view='quarter'], [data-view='year']) > [data-part='cell'][data-in-range]::before {
289
+ [data-scope='calendar-range-picker'][data-part='grid']:is([data-view='week'], [data-view='month'], [data-view='quarter'], [data-view='year']) > [data-part='cell'][data-in-range]:where([data-scope='calendar-range-picker'])::before {
290
290
  border-radius: var(--xh-calendar-range-picker-cell-radius, var(--xh-shape-inset));
291
291
  }
292
292
 
@@ -441,7 +441,7 @@
441
441
  只收日视图这一档:粗粒度视图(月格、年格)点一格是往下钻一层,只读也照做,
442
442
  那些格子仍是按得动的按钮,手型不能撤 */
443
443
  [data-scope='calendar-range-picker'][data-part='grid'][data-readonly][data-view='day']
444
- [data-part='cell-trigger']:not([data-disabled]) {
444
+ [data-part='cell-trigger']:where([data-scope='calendar-range-picker']):not([data-disabled]) {
445
445
  --xh-action-cursor-rest: default;
446
446
  --xh-action-cursor-hover: default;
447
447
  --xh-action-cursor-pressed: default;
package/css/carousel.css CHANGED
@@ -269,7 +269,9 @@
269
269
 
270
270
  /* 分页点与 Tour 的步骤点同一种语言:8px 圆点,当前页拉长成 20px 胶囊并换品牌色。
271
271
  本体就是那颗点:没有文字(页码交给作者,默认不显示),底色即标记。
272
- 悬停 / 按下的回执落在点的颜色上:中性标记按前景阶梯加深一档、再加深一档;当前页按品牌阶梯压一档 */
272
+ 悬停 / 按下的回执落在点的颜色上:中性标记按前景阶梯加深一档、再加深一档;当前页按品牌阶梯压一档。
273
+ 沿轨道的长度取 indicator-size(当前页 indicator-size-current),垂直于轨道的粗细取 indicator-thickness,
274
+ 缺省与长度同值、仍是圆点;粗细单独调小就成细横条(横条不是正方盒,圆角另把 indicator-radius 换成胶囊) */
273
275
  [data-scope='carousel'][data-part='indicator'] {
274
276
  position: relative;
275
277
  display: inline-flex;
@@ -277,7 +279,7 @@
277
279
  align-items: center;
278
280
  justify-content: center;
279
281
  inline-size: var(--xh-carousel-indicator-size, var(--xh-space-2));
280
- block-size: var(--xh-carousel-indicator-size, var(--xh-space-2));
282
+ block-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-2)));
281
283
  padding: 0;
282
284
  border: 0;
283
285
  border-radius: var(--xh-carousel-indicator-radius, var(--xh-shape-circle));
@@ -297,11 +299,25 @@
297
299
  display: none;
298
300
  }
299
301
 
300
- /* 细指针的命中区外扩到 24×24(8px 点四面各扩 8px);粗指针下这颗伪元素改画点,盒子自己承担命中 */
302
+ /* 细指针的命中区外扩到 24×24(8px 点四面各扩 8px);粗指针下这颗伪元素改画点,盒子自己承担命中。
303
+ 点调细了,垂直于轨道那一向多扩一些,命中区不低于 24px 的最小目标 */
301
304
  [data-scope='carousel'][data-part='indicator']::after {
302
305
  content: '';
303
306
  position: absolute;
304
- inset: calc(-1 * var(--xh-space-2));
307
+ inset-inline: calc(-1 * var(--xh-space-2));
308
+ inset-block: min(
309
+ calc(-1 * var(--xh-space-2)),
310
+ calc((var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-2))) - var(--xh-space-6)) / 2)
311
+ );
312
+ }
313
+
314
+ [data-scope='carousel'][data-part='indicator-group'][data-orientation='vertical']
315
+ > [data-scope='carousel'][data-part='indicator']::after {
316
+ inset-inline: min(
317
+ calc(-1 * var(--xh-space-2)),
318
+ calc((var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-2))) - var(--xh-space-6)) / 2)
319
+ );
320
+ inset-block: calc(-1 * var(--xh-space-2));
305
321
  }
306
322
 
307
323
  [data-scope='carousel'][data-part='indicator']:hover:not([data-current]) {
@@ -383,9 +399,15 @@
383
399
  }
384
400
 
385
401
  /* 纵轨:胶囊沿块轴拉长,进度条从上往下长 */
402
+ [data-scope='carousel'][data-part='indicator-group'][data-orientation='vertical']
403
+ > [data-scope='carousel'][data-part='indicator'] {
404
+ inline-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-2)));
405
+ block-size: var(--xh-carousel-indicator-size, var(--xh-space-2));
406
+ }
407
+
386
408
  [data-scope='carousel'][data-part='indicator-group'][data-orientation='vertical']
387
409
  > [data-scope='carousel'][data-part='indicator'][data-current] {
388
- inline-size: var(--xh-carousel-indicator-size, var(--xh-space-2));
410
+ inline-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-2)));
389
411
  block-size: var(--xh-carousel-indicator-size-current, var(--xh-space-5));
390
412
  }
391
413
 
@@ -400,7 +422,7 @@
400
422
  }
401
423
 
402
424
  [data-scope='carousel'][data-part='root'][data-orientation='vertical']
403
- > :is([data-part='prev-trigger'], [data-part='next-trigger']) {
425
+ > :is([data-part='prev-trigger'], [data-part='next-trigger']):where([data-scope='carousel']) {
404
426
  inset-inline-start: 50%;
405
427
  inset-inline-end: auto;
406
428
  translate: -50% 0;
@@ -408,23 +430,23 @@
408
430
  }
409
431
 
410
432
  [data-scope='carousel'][data-part='root'][data-orientation='vertical']
411
- > :is([data-part='prev-trigger'], [data-part='next-trigger']):dir(rtl) {
433
+ > :is([data-part='prev-trigger'], [data-part='next-trigger']):where([data-scope='carousel']):dir(rtl) {
412
434
  translate: 50% 0;
413
435
  }
414
436
 
415
437
  /* 纵轨的翻页钮整颗转了 90°,形变会跟着转到错的方向,这一档不挂 */
416
438
  :where([data-material='liquid']) [data-scope='carousel'][data-part='root'][data-orientation='vertical']
417
- > :is([data-part='prev-trigger'], [data-part='next-trigger'])[data-xh-liquid] {
439
+ > :is([data-part='prev-trigger'], [data-part='next-trigger']):where([data-scope='carousel'])[data-xh-liquid] {
418
440
  transform: none;
419
441
  }
420
442
 
421
443
  [data-scope='carousel'][data-part='root'][data-orientation='vertical']
422
- > [data-part='prev-trigger'] {
444
+ > [data-part='prev-trigger']:where([data-scope='carousel']) {
423
445
  inset-block-start: var(--xh-carousel-control-inset, var(--xh-space-3));
424
446
  }
425
447
 
426
448
  [data-scope='carousel'][data-part='root'][data-orientation='vertical']
427
- > [data-part='next-trigger'] {
449
+ > [data-part='next-trigger']:where([data-scope='carousel']) {
428
450
  inset-block-start: auto;
429
451
  inset-block-end: var(--xh-carousel-control-inset, var(--xh-space-3));
430
452
  }
@@ -564,7 +586,7 @@
564
586
  inset-block-start: 50%;
565
587
  inset-inline-start: 50%;
566
588
  inline-size: var(--xh-carousel-indicator-size, var(--xh-space-2));
567
- block-size: var(--xh-carousel-indicator-size, var(--xh-space-2));
589
+ block-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-2)));
568
590
  border-radius: var(--xh-carousel-indicator-radius, var(--xh-shape-circle));
569
591
  background: var(--xh-carousel-indicator-bg, var(--xh-bg-subtle-hover-opaque));
570
592
  translate: -50% -50%;
@@ -614,7 +636,7 @@
614
636
  inset-inline-start: 50%;
615
637
  z-index: 1;
616
638
  inline-size: var(--xh-carousel-indicator-size-current, var(--xh-space-5));
617
- block-size: var(--xh-carousel-indicator-size, var(--xh-space-2));
639
+ block-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-2)));
618
640
  border-radius: var(--xh-carousel-indicator-radius-current, var(--xh-shape-pill));
619
641
  translate: -50% -50%;
620
642
  }
@@ -626,6 +648,16 @@
626
648
  translate: 50% -50%;
627
649
  }
628
650
 
651
+ /* 纵轨:细指针那条按轨道方向外扩命中区的规则更具体,这里把点的定位一并收回到居中 */
652
+ [data-scope='carousel'][data-part='indicator-group'][data-orientation='vertical']
653
+ > [data-scope='carousel'][data-part='indicator']::after {
654
+ inset: auto;
655
+ inset-block-start: 50%;
656
+ inset-inline-start: 50%;
657
+ inline-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-2)));
658
+ block-size: var(--xh-carousel-indicator-size, var(--xh-space-2));
659
+ }
660
+
629
661
  [data-scope='carousel'][data-part='indicator-group'][data-orientation='vertical']
630
662
  > [data-scope='carousel'][data-part='indicator'][data-current]::after,
631
663
  [data-scope='carousel'][data-part='root'][data-autoplay]
@@ -634,7 +666,7 @@
634
666
  [data-scope='carousel'][data-part='root'][data-paused]
635
667
  [data-scope='carousel'][data-part='indicator-group'][data-orientation='vertical']
636
668
  > [data-scope='carousel'][data-part='indicator'][data-current]::before {
637
- inline-size: var(--xh-carousel-indicator-size, var(--xh-space-2));
669
+ inline-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-2)));
638
670
  block-size: var(--xh-carousel-indicator-size-current, var(--xh-space-5));
639
671
  }
640
672
  }
@@ -109,7 +109,7 @@
109
109
  }
110
110
 
111
111
  /* 裁切出来的形状画不出空心:隐藏的项改为淡出,名字的删除线与次级字色照常 */
112
- [data-scope='cartesian-chart'][data-part='legend-item'][aria-pressed='false'] > [data-part='legend-swatch'][data-mark='point']:not([data-symbol='circle'], [data-symbol='square']) {
112
+ [data-scope='cartesian-chart'][data-part='legend-item'][aria-pressed='false'] > [data-part='legend-swatch'][data-mark='point']:where([data-scope='cartesian-chart']):not([data-symbol='circle'], [data-symbol='square']) {
113
113
  background: var(--xh-_chart-series);
114
114
  opacity: var(--xh-chart-dim-alpha);
115
115
  }
@@ -241,7 +241,7 @@
241
241
  cursor: grab;
242
242
  }
243
243
 
244
- [data-scope='cartesian-chart'][data-part='zoom-slider'][data-dragging] [data-part='zoom-window'] {
244
+ [data-scope='cartesian-chart'][data-part='zoom-slider'][data-dragging] [data-part='zoom-window']:where([data-scope='cartesian-chart']) {
245
245
  cursor: grabbing;
246
246
  }
247
247
 
@@ -633,15 +633,15 @@
633
633
 
634
634
  /* —— 纹理:颜色不可用或不可靠时(强制色、打印、祖先写了 data-xh-chart-patterns),柱与面积改用本系列在
635
635
  defs 里的纹理填充、描出轮廓,折线换线型;压在柱上的标签改用标签色、描一圈承载面色。色标的纹理在配方里 —— */
636
- :where([data-xh-chart-patterns]) [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='bar'],
637
- :where([data-xh-chart-patterns]) [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='area-fill'] {
636
+ :where([data-xh-chart-patterns]) [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='bar']:where([data-scope='cartesian-chart']),
637
+ :where([data-xh-chart-patterns]) [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='area-fill']:where([data-scope='cartesian-chart']) {
638
638
  fill: var(--xh-_chart-pattern);
639
639
  fill-opacity: 1;
640
640
  stroke: var(--xh-_chart-series);
641
641
  stroke-width: var(--xh-stroke-thin);
642
642
  }
643
643
 
644
- :where([data-xh-chart-patterns]) [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='line']:not([data-drawing]) {
644
+ :where([data-xh-chart-patterns]) [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='line']:where([data-scope='cartesian-chart']):not([data-drawing]) {
645
645
  stroke-dasharray: var(--xh-_chart-dash);
646
646
  }
647
647
 
@@ -775,8 +775,8 @@
775
775
  stroke: Highlight;
776
776
  }
777
777
 
778
- [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='bar'],
779
- [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='area-fill'] {
778
+ [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='bar']:where([data-scope='cartesian-chart']),
779
+ [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='area-fill']:where([data-scope='cartesian-chart']) {
780
780
  forced-color-adjust: none;
781
781
  fill: var(--xh-_chart-pattern);
782
782
  fill-opacity: 1;
@@ -784,7 +784,7 @@
784
784
  stroke-width: var(--xh-stroke-thin);
785
785
  }
786
786
 
787
- [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='line']:not([data-drawing]) {
787
+ [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='line']:where([data-scope='cartesian-chart']):not([data-drawing]) {
788
788
  stroke-dasharray: var(--xh-_chart-dash);
789
789
  }
790
790
 
@@ -803,15 +803,15 @@
803
803
  display: none;
804
804
  }
805
805
 
806
- [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='bar'],
807
- [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='area-fill'] {
806
+ [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='bar']:where([data-scope='cartesian-chart']),
807
+ [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='area-fill']:where([data-scope='cartesian-chart']) {
808
808
  fill: var(--xh-_chart-pattern);
809
809
  fill-opacity: 1;
810
810
  stroke: var(--xh-_chart-series);
811
811
  stroke-width: var(--xh-stroke-thin);
812
812
  }
813
813
 
814
- [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='line']:not([data-drawing]) {
814
+ [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='line']:where([data-scope='cartesian-chart']):not([data-drawing]) {
815
815
  stroke-dasharray: var(--xh-_chart-dash);
816
816
  }
817
817
 
package/css/cascader.css CHANGED
@@ -219,14 +219,14 @@
219
219
 
220
220
  /* 标签行露面时 value-text 让位:两者是触发器里的同一格,占位文字与标签不同屏。
221
221
  value-text 留在 DOM 里,trigger 的可及名仍从它取到完整的选中路径文本 */
222
- [data-scope='cascader'][data-part='trigger']:has([data-part='tag-list']:not([hidden])) [data-part='value-text'] {
222
+ [data-scope='cascader'][data-part='trigger']:has([data-part='tag-list']:not([hidden])) [data-part='value-text']:where([data-scope='cascader']) {
223
223
  display: none;
224
224
  }
225
225
 
226
226
  /* 有值时清空钮顶上来,箭头让位:两个图标并排堆着,用户分不清点哪个。
227
227
  判据查的是盒里此刻真有一颗没收起的清空钮,不是「有没有值」——
228
228
  作者没摆清空钮时箭头照常留着,不然让了位没人接,指示符整个消失 */
229
- [data-scope='cascader'][data-part='control']:has([data-part='clear-trigger']:not([hidden])) [data-part='indicator'] {
229
+ [data-scope='cascader'][data-part='control']:has([data-part='clear-trigger']:not([hidden])) [data-part='indicator']:where([data-scope='cascader']) {
230
230
  display: none;
231
231
  }
232
232
 
@@ -503,29 +503,29 @@
503
503
  /* 一列开幕:条目自上而下逐条淡入。只在列头一次出现时播(浮层展开、此前收着的子列铺出来);
504
504
  列此前就在、展开路径换到同列另一个父项时(悬停扫过),连接层给露面的条目标 data-instant,
505
505
  换内容不重播。backwards 让每条在自己那份延迟里保持起始帧 */
506
- [data-scope='cascader'][data-part='column'] [data-part='item']:not([data-instant]) {
506
+ [data-scope='cascader'][data-part='column'] [data-part='item']:where([data-scope='cascader']):not([data-instant]) {
507
507
  animation: xh-fade-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter) backwards;
508
508
  }
509
509
 
510
510
  /* 交错的间隔:第二条起逐级往后推,第六条起统一钉在第五级,条目再多也不会拖出一条越来越慢的尾巴。
511
511
  列里同时挂着别的父节点下的条目(收起态),计数把它们排掉,序号才对得上看得见的那几条 */
512
- [data-scope='cascader'][data-part='column'] [data-part='item']:nth-child(2 of :not([hidden])) {
512
+ [data-scope='cascader'][data-part='column'] [data-part='item']:where([data-scope='cascader']):nth-child(2 of :not([hidden])) {
513
513
  animation-delay: var(--xh-motion-stagger-step);
514
514
  }
515
515
 
516
- [data-scope='cascader'][data-part='column'] [data-part='item']:nth-child(3 of :not([hidden])) {
516
+ [data-scope='cascader'][data-part='column'] [data-part='item']:where([data-scope='cascader']):nth-child(3 of :not([hidden])) {
517
517
  animation-delay: calc(2 * var(--xh-motion-stagger-step));
518
518
  }
519
519
 
520
- [data-scope='cascader'][data-part='column'] [data-part='item']:nth-child(4 of :not([hidden])) {
520
+ [data-scope='cascader'][data-part='column'] [data-part='item']:where([data-scope='cascader']):nth-child(4 of :not([hidden])) {
521
521
  animation-delay: calc(3 * var(--xh-motion-stagger-step));
522
522
  }
523
523
 
524
- [data-scope='cascader'][data-part='column'] [data-part='item']:nth-child(5 of :not([hidden])) {
524
+ [data-scope='cascader'][data-part='column'] [data-part='item']:where([data-scope='cascader']):nth-child(5 of :not([hidden])) {
525
525
  animation-delay: calc(4 * var(--xh-motion-stagger-step));
526
526
  }
527
527
 
528
- [data-scope='cascader'][data-part='column'] [data-part='item']:nth-child(n + 6 of :not([hidden])) {
528
+ [data-scope='cascader'][data-part='column'] [data-part='item']:where([data-scope='cascader']):nth-child(n + 6 of :not([hidden])) {
529
529
  animation-delay: calc(5 * var(--xh-motion-stagger-step));
530
530
  }
531
531
 
@@ -710,7 +710,7 @@
710
710
  }
711
711
 
712
712
  /* 搜索视图里列整体让位 */
713
- [data-scope='cascader'][data-part='content'][data-searching] [data-part='column'] {
713
+ [data-scope='cascader'][data-part='content'][data-searching] [data-part='column']:where([data-scope='cascader']) {
714
714
  display: none;
715
715
  }
716
716
 
@@ -809,7 +809,7 @@
809
809
 
810
810
  /* —— 空态:当前视图没有条目时由 empty 部件出面,文案由适配器或作者供给,皮肤只管排版 —— */
811
811
  /* 根列没有条目时那条空列让位,占位面接管整个浮层 */
812
- [data-scope='cascader'][data-part='content'][data-empty] [data-part='column'] {
812
+ [data-scope='cascader'][data-part='content'][data-empty] [data-part='column']:where([data-scope='cascader']) {
813
813
  display: none;
814
814
  }
815
815
 
package/css/citation.css CHANGED
@@ -388,7 +388,7 @@
388
388
  color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
389
389
  }
390
390
 
391
- [data-scope='citation'][data-part='source'][data-state='active'] [data-part='source-index'] {
391
+ [data-scope='citation'][data-part='source'][data-state='active'] [data-part='source-index']:where([data-scope='citation']) {
392
392
  background: var(--xh-citation-index-active-bg, var(--xh-bg-brand));
393
393
  color: var(--xh-citation-index-active-fg, var(--xh-fg-on-brand));
394
394
  }
@@ -416,7 +416,7 @@
416
416
  }
417
417
 
418
418
  @media (forced-colors: active) {
419
- [data-scope='citation'][data-part='source'][data-state='active'] [data-part='source-index'] {
419
+ [data-scope='citation'][data-part='source'][data-state='active'] [data-part='source-index']:where([data-scope='citation']) {
420
420
  background: Highlight;
421
421
  color: HighlightText;
422
422
  }
package/css/code-view.css CHANGED
@@ -91,7 +91,7 @@
91
91
  }
92
92
 
93
93
  /* 折叠时 <pre> 的高度被连接层写死,超出部分沿圆角收边 */
94
- [data-scope='code-view'][data-part='root'][data-clamped] [data-part='pre'] {
94
+ [data-scope='code-view'][data-part='root'][data-clamped] [data-part='pre']:where([data-scope='code-view']) {
95
95
  overflow-y: hidden;
96
96
  }
97
97
 
@@ -163,13 +163,13 @@
163
163
 
164
164
  /* 开了换行:pre-wrap 仍保留缩进与连续空白,只是允许行尾折下来;
165
165
  anywhere 让没有空格的长串(url、base64)也能断,否则照样撑出横向滚动 */
166
- [data-scope='code-view'][data-part='code'][data-wrap] [data-part='line-content'] {
166
+ [data-scope='code-view'][data-part='code'][data-wrap] [data-part='line-content']:where([data-scope='code-view']) {
167
167
  white-space: pre-wrap;
168
168
  overflow-wrap: anywhere;
169
169
  }
170
170
 
171
171
  /* 没开行号时正文自带左内衬;开了行号则由行号槽的内衬顶开 */
172
- [data-scope='code-view'][data-part='root']:not([data-line-numbers]) [data-part='line-content'] {
172
+ [data-scope='code-view'][data-part='root']:not([data-line-numbers]) [data-part='line-content']:where([data-scope='code-view']) {
173
173
  padding-inline-start: var(--xh-code-view-px, var(--xh-space-3));
174
174
  }
175
175
 
@@ -233,12 +233,12 @@
233
233
  --xh-_code-view-fold-col: var(--xh-code-view-fold-col, var(--xh-code-view-line-height, var(--xh-text-code-leading)));
234
234
  }
235
235
 
236
- [data-scope='code-view'][data-part='root'][data-block-folding] [data-part='line-content'] {
236
+ [data-scope='code-view'][data-part='root'][data-block-folding] [data-part='line-content']:where([data-scope='code-view']) {
237
237
  position: relative;
238
238
  padding-inline-start: var(--xh-_code-view-fold-col);
239
239
  }
240
240
 
241
- [data-scope='code-view'][data-part='root'][data-block-folding]:not([data-line-numbers]) [data-part='line-content'] {
241
+ [data-scope='code-view'][data-part='root'][data-block-folding]:not([data-line-numbers]) [data-part='line-content']:where([data-scope='code-view']) {
242
242
  padding-inline-start: calc(var(--xh-code-view-px, var(--xh-space-3)) + var(--xh-_code-view-fold-col));
243
243
  }
244
244
 
@@ -258,7 +258,7 @@
258
258
  block-size: var(--xh-_code-view-fold-col);
259
259
  }
260
260
 
261
- [data-scope='code-view'][data-part='root'][data-block-folding]:not([data-line-numbers]) [data-part='line-fold-trigger'] {
261
+ [data-scope='code-view'][data-part='root'][data-block-folding]:not([data-line-numbers]) [data-part='line-fold-trigger']:where([data-scope='code-view']) {
262
262
  inset-inline-start: var(--xh-code-view-px, var(--xh-space-3));
263
263
  }
264
264
 
@@ -6,8 +6,10 @@
6
6
  /* 定义 color picker 样式。 */
7
7
 
8
8
  @import '../family/field-chrome.css';
9
+ @import '../family/action-control.css';
9
10
  @import '../family/swatch.css';
10
11
  @import '../family/motion.css';
12
+ @import '../family/tag-list.css';
11
13
 
12
14
  @layer xihan.components {
13
15
  /* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
@@ -90,6 +92,46 @@
90
92
  display: none;
91
93
  }
92
94
 
95
+ /* 多选的标签行:选中的颜色在盒里排成标签,超过 maxTagCount 的折进 +N。
96
+ 行里每一枚都是 tag(data-scope="tag"),样子归 tag.css;行怎么排、标签怎么进出归标签行家族配方。
97
+ 基准取 0:只吃触发钮剩下的宽度、在自己里面折行;按内容宽算基准的话,盒子会先在钮前面折行,把钮挤到最后一行 */
98
+ [data-scope='color-picker'][data-part='tag-list'] {
99
+ --xh-tag-list-gap: var(--xh-color-picker-tag-list-gap, var(--xh-space-1));
100
+
101
+ flex: 1 1 0;
102
+ flex-wrap: wrap;
103
+ }
104
+
105
+ /* 颜色标签是定长的值串,截短了就读不出是哪个颜色:不收缩,排不下就折到下一行,
106
+ 盒随行数长高(字段家族的 multi-tag 布局给),到上限后在盒内滚动 */
107
+ [data-scope='color-picker'][data-part='tag-list'] > [data-scope='tag'][data-part='root'] {
108
+ flex: none;
109
+ }
110
+
111
+ /* 每枚标签前一个色点,颜色由连接层写进内联私有槽;+N 那一枚没有 data-value,不画。
112
+ 白色与近底色的颜色靠一圈默认描边从标签底上分出来 */
113
+ [data-scope='color-picker'][data-part='tag-list'] > [data-scope='tag'][data-part='root'][data-value]::before {
114
+ flex: none;
115
+ box-sizing: border-box;
116
+ inline-size: var(--xh-color-picker-tag-dot-size, var(--xh-control-indicator-sm));
117
+ block-size: var(--xh-color-picker-tag-dot-size, var(--xh-control-indicator-sm));
118
+ border: var(--xh-stroke-thin) solid var(--xh-color-picker-tag-dot-border, var(--xh-border-default));
119
+ border-radius: var(--xh-shape-circle);
120
+ background-color: var(--xh-_color-picker-tag-color, transparent);
121
+ content: '';
122
+ print-color-adjust: exact;
123
+ }
124
+
125
+ [data-scope='color-picker'][data-part='control'][data-xh-field-layout='multi-tag'] {
126
+ max-block-size: var(--xh-color-picker-control-max-h, var(--xh-viewport-h-sm));
127
+ overflow-y: auto;
128
+ }
129
+
130
+ /* 多选时值文字让位,触发钮只剩一颗显示工作色的色块:不再占满剩余宽度,标签行吃掉余下的位置 */
131
+ [data-scope='color-picker'][data-part='control'][data-xh-field-layout='multi-tag'] > [data-scope='color-picker'][data-part='trigger'] {
132
+ flex: none;
133
+ }
134
+
93
135
  /* 盒内那颗可聚焦的按钮:不画描边不铺底也不自带高度,只占满剩余宽度、排布色块与值文本 */
94
136
  [data-scope='color-picker'][data-part='trigger'] {
95
137
  display: inline-flex;
@@ -427,6 +469,39 @@
427
469
  color: var(--xh-fg-disabled);
428
470
  }
429
471
 
472
+ /* 「添加」沉到面板的行尾:它是多选时整块面板的出口,不跟取色面左对齐 */
473
+ [data-scope='color-picker'][data-part='content'] > [data-scope='color-picker'][data-part='confirm-trigger'] {
474
+ flex: none;
475
+ align-self: flex-end;
476
+ }
477
+
478
+ /* 「添加」是面板里唯一的主要动作:品牌实心、悬停 / 按下与 0.97 按压、焦点环全由 Action Control 的
479
+ text solid 档给;槽名统一按部件取 --xh-color-picker-confirm-trigger-*,只映射到家族桥接槽 */
480
+ [data-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));
482
+ --xh-action-padding-inline: var(--xh-color-picker-confirm-trigger-px, var(--xh-_action-profile-padding-inline));
483
+ --xh-action-radius: var(--xh-color-picker-confirm-trigger-radius, var(--xh-shape-control));
484
+ --xh-action-bg-rest: var(--xh-color-picker-confirm-trigger-bg, var(--xh-_action-variant-bg-rest));
485
+ --xh-action-bg-hover: var(--xh-color-picker-confirm-trigger-bg-hover, var(--xh-_action-variant-bg-hover));
486
+ --xh-action-bg-pressed: var(--xh-color-picker-confirm-trigger-bg-active, var(--xh-_action-variant-bg-pressed));
487
+ --xh-action-fg-rest: var(--xh-color-picker-confirm-trigger-fg, var(--xh-_action-variant-fg-rest));
488
+ --xh-action-fg-hover: var(--xh-color-picker-confirm-trigger-fg, var(--xh-_action-variant-fg-hover));
489
+ --xh-action-fg-pressed: var(--xh-color-picker-confirm-trigger-fg, var(--xh-_action-variant-fg-pressed));
490
+ --xh-action-border-rest: transparent;
491
+ --xh-action-highlight-rest: transparent;
492
+ --xh-action-shadow-rest: var(--xh-color-picker-confirm-trigger-shadow, none);
493
+ --xh-action-shadow-hover: var(--xh-color-picker-confirm-trigger-shadow, none);
494
+ --xh-action-shadow-pressed: var(--xh-color-picker-confirm-trigger-shadow, none);
495
+ --xh-action-font-size: var(--xh-text-secondary-size);
496
+
497
+ border-width: 0;
498
+ }
499
+
500
+ /* 单选时连接层给的是 hidden 属性;家族那条 display 会把 UA 规则盖掉 */
501
+ [data-scope='color-picker'][data-part='confirm-trigger'][hidden] {
502
+ display: none;
503
+ }
504
+
430
505
  /* 预设色板的挂载点,同时充当色板的根节点:color-swatch-picker 那份皮的 root 规则落在
431
506
  [data-scope='color-swatch-picker'][data-part='root'] 上,而这里没有那个节点,所以根上挂的那几个私有槽
432
507
  (格子边长、间距、徽标尺寸、语气色、图标尺)与排布得在这儿照抄一遍;格子的皮仍归色板那一份。
@@ -510,5 +585,11 @@
510
585
  outline: var(--xh-stroke-thin) solid ButtonBorder;
511
586
  outline-offset: calc(-1 * var(--xh-stroke-thin));
512
587
  }
588
+
589
+ /* 标签前的色点画的也是颜色本身:同样退出强制着色,用系统文字色描一圈 */
590
+ [data-scope='color-picker'][data-part='tag-list'] > [data-scope='tag'][data-part='root'][data-value]::before {
591
+ forced-color-adjust: none;
592
+ border-color: CanvasText;
593
+ }
513
594
  }
514
595
  }