@xihan-ui/styles 2.1.0 → 3.1.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 (152) hide show
  1. package/CHANGELOG.md +1261 -0
  2. package/README.md +6 -1
  3. package/component-tokens.d.ts +533 -96
  4. package/components.tokens.json +35461 -26045
  5. package/css/accordion.css +34 -8
  6. package/css/alert.css +59 -1
  7. package/css/anchor.css +46 -8
  8. package/css/approval.css +116 -76
  9. package/css/avatar-group.css +1 -1
  10. package/css/avatar.css +13 -5
  11. package/css/back-top.css +61 -42
  12. package/css/badge.css +62 -12
  13. package/css/bar-code.css +1 -1
  14. package/css/breadcrumb.css +62 -3
  15. package/css/button-group.css +4 -4
  16. package/css/button.css +67 -19
  17. package/css/calendar-picker.css +19 -0
  18. package/css/calendar-range-picker.css +39 -2
  19. package/css/card.css +115 -1
  20. package/css/carousel.css +148 -43
  21. package/css/cartesian-chart.css +830 -0
  22. package/css/cascader.css +181 -65
  23. package/css/checkbox-group.css +59 -89
  24. package/css/checkbox.css +16 -49
  25. package/css/citation.css +470 -0
  26. package/css/clipboard.css +20 -63
  27. package/css/code-view.css +101 -6
  28. package/css/collapsible.css +34 -8
  29. package/css/color-field.css +18 -0
  30. package/css/color-picker.css +128 -50
  31. package/css/color-slider.css +22 -15
  32. package/css/color-swatch-picker.css +3 -1
  33. package/css/combobox.css +80 -33
  34. package/css/command.css +45 -43
  35. package/css/context-menu.css +39 -22
  36. package/css/date-field.css +56 -0
  37. package/css/date-picker.css +132 -26
  38. package/css/date-range-picker.css +337 -14
  39. package/css/description.css +17 -1
  40. package/css/descriptions.css +42 -0
  41. package/css/dialog.css +94 -36
  42. package/css/diff-view.css +97 -12
  43. package/css/download-trigger.css +44 -78
  44. package/css/drawer.css +160 -119
  45. package/css/editable.css +19 -0
  46. package/css/empty-state.css +7 -6
  47. package/css/field-array.css +36 -0
  48. package/css/field.css +20 -18
  49. package/css/file-upload.css +125 -135
  50. package/css/flex.css +324 -8
  51. package/css/float-button.css +263 -38
  52. package/css/floating-panel.css +53 -19
  53. package/css/form.css +31 -17
  54. package/css/funnel-chart.css +106 -0
  55. package/css/graph-chart.css +205 -0
  56. package/css/grid-list.css +235 -0
  57. package/css/grid.css +252 -1
  58. package/css/heatmap.css +119 -36
  59. package/css/hierarchy-chart.css +298 -0
  60. package/css/hover-card.css +31 -14
  61. package/css/icon.css +100 -0
  62. package/css/image-cropper.css +33 -7
  63. package/css/image-viewer.css +167 -22
  64. package/css/image.css +23 -4
  65. package/css/input-group.css +11 -13
  66. package/css/json-viewer.css +50 -2
  67. package/css/layout.css +68 -18
  68. package/css/liquid.css +106 -0
  69. package/css/list.css +1 -1
  70. package/css/listbox.css +46 -6
  71. package/css/loading-bar.css +27 -13
  72. package/css/log.css +129 -33
  73. package/css/markdown-stream.css +1 -1
  74. package/css/marquee.css +163 -7
  75. package/css/matrix-code.css +1 -1
  76. package/css/mention.css +35 -19
  77. package/css/menu.css +35 -21
  78. package/css/menubar.css +36 -20
  79. package/css/message-feed.css +172 -51
  80. package/css/navigation-menu.css +172 -11
  81. package/css/notification.css +435 -108
  82. package/css/number-field.css +22 -0
  83. package/css/page-header.css +3 -1
  84. package/css/pagination.css +126 -24
  85. package/css/password-input.css +40 -8
  86. package/css/pie-chart.css +247 -0
  87. package/css/popconfirm.css +44 -50
  88. package/css/popover.css +50 -14
  89. package/css/progress.css +308 -10
  90. package/css/prompt-input.css +36 -0
  91. package/css/question-flow.css +97 -57
  92. package/css/radar-chart.css +233 -0
  93. package/css/radio-group.css +363 -5
  94. package/css/rating.css +21 -23
  95. package/css/reasoning.css +61 -54
  96. package/css/resizable.css +6 -1
  97. package/css/sankey-chart.css +174 -0
  98. package/css/scroll-area.css +32 -0
  99. package/css/scrollbar.css +1 -1
  100. package/css/select.css +74 -55
  101. package/css/side-nav.css +173 -24
  102. package/css/signature-pad.css +16 -1
  103. package/css/skeleton.css +13 -14
  104. package/css/slider.css +35 -13
  105. package/css/sortable.css +37 -7
  106. package/css/sparkline.css +164 -0
  107. package/css/spinner.css +50 -22
  108. package/css/splitter.css +7 -1
  109. package/css/statistic.css +10 -0
  110. package/css/steps.css +248 -29
  111. package/css/switch.css +23 -48
  112. package/css/table.css +175 -118
  113. package/css/tabs.css +231 -19
  114. package/css/tag-group.css +27 -3
  115. package/css/tag.css +53 -12
  116. package/css/tags-input.css +40 -3
  117. package/css/text-field.css +19 -0
  118. package/css/time-field.css +20 -1
  119. package/css/time-picker.css +103 -17
  120. package/css/time-range-picker.css +45 -16
  121. package/css/timeline.css +1 -1
  122. package/css/toggle-group.css +4 -4
  123. package/css/toggle.css +4 -3
  124. package/css/tool-call.css +59 -51
  125. package/css/toolbar.css +101 -3
  126. package/css/tooltip.css +15 -2
  127. package/css/tour.css +42 -12
  128. package/css/transfer.css +98 -75
  129. package/css/tree-select.css +232 -53
  130. package/css/tree.css +271 -55
  131. package/css/truncate.css +55 -12
  132. package/css/typography.css +93 -0
  133. package/css/virtualizer.css +56 -0
  134. package/css/watermark.css +23 -0
  135. package/family/action-control.css +14 -5
  136. package/family/chart.css +480 -0
  137. package/family/check-mark.css +94 -0
  138. package/family/choice-card.css +97 -0
  139. package/family/collection-item.css +9 -15
  140. package/family/field-chrome.css +1 -12
  141. package/family/loading-ring.css +95 -0
  142. package/family/material.css +72 -0
  143. package/family/menu-choice.css +56 -0
  144. package/family/motion.css +207 -10
  145. package/family/tag-list.css +59 -0
  146. package/index.css +13824 -4030
  147. package/index.unlayered.css +13403 -3605
  148. package/package.json +20 -8
  149. package/css/gradient-text.css +0 -91
  150. package/css/icon-wrapper.css +0 -81
  151. package/css/segmented.css +0 -280
  152. package/css/toast.css +0 -499
@@ -144,7 +144,9 @@
144
144
  flex: 1;
145
145
  }
146
146
 
147
- /* 面板贴着自己那一项落位:横排从 trigger 底下长出来 */
147
+ /* 面板贴着自己那一项落位:横排从 trigger 底下长出来。面板型浮层按内容的自然宽度排开:
148
+ 它绝对定位在入口那一项(一个窄 li)里,收缩适配的可用宽就是那一项的宽,不给宽度只剩最小宽、
149
+ 一行放得下的文字也折行;超过浮层最大宽才折 */
148
150
  [data-scope='navigation-menu'][data-part='content'] {
149
151
  position: absolute;
150
152
  z-index: var(--xh-navigation-menu-layer, var(--xh-_layer, var(--xh-layer-popover)));
@@ -153,7 +155,9 @@
153
155
  display: flex;
154
156
  flex-direction: column;
155
157
  gap: var(--xh-navigation-menu-content-gap, var(--xh-space-1));
158
+ inline-size: max-content;
156
159
  min-inline-size: var(--xh-navigation-menu-content-min-w, var(--xh-overlay-menu-min-w));
160
+ max-inline-size: var(--xh-navigation-menu-content-max-w, var(--xh-overlay-max-w-xl));
157
161
  padding: var(--xh-navigation-menu-content-p, var(--xh-surface-pad-xs));
158
162
  border: var(--xh-stroke-thin) solid var(--xh-navigation-menu-content-border, var(--xh-border-default));
159
163
  border-radius: var(--xh-navigation-menu-content-radius, var(--xh-shape-overlay));
@@ -172,12 +176,14 @@
172
176
  inset-inline-start: calc(100% + var(--xh-navigation-menu-content-offset, var(--xh-space-1)));
173
177
  }
174
178
 
175
- [data-scope='navigation-menu'][data-part='content'][data-state='open'] {
179
+ /* 首开弹出、末收收回;在两张之间换张时两侧都带 data-instant,瞬时换张——与菜单栏同一条成规,
180
+ 交叉的进退场读起来就是闪烁。挂载时就展开着的那一项同样带它,直接呈现 */
181
+ [data-scope='navigation-menu'][data-part='content'][data-state='open']:not([data-instant]) {
176
182
  animation: xh-pop-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
177
183
  }
178
184
 
179
185
  /* 退场:收起那一帧 hidden 由退场闸门押后,这里才播得出来 */
180
- [data-scope='navigation-menu'][data-part='content'][data-state='closed'] {
186
+ [data-scope='navigation-menu'][data-part='content'][data-state='closed']:not([data-instant]) {
181
187
  animation: xh-pop-out var(--xh-motion-duration-exit) var(--xh-motion-ease-exit) forwards;
182
188
  }
183
189
 
@@ -191,6 +197,16 @@
191
197
  box-shadow: none;
192
198
  }
193
199
 
200
+ /* 外壳里的面板不自己弹出:弹出与收回归外壳,面板只随之淡入淡出,时长与外壳同档——
201
+ 末收时面板的淡出与外壳的收回同时播完,外壳等它播完才藏起 */
202
+ [data-scope='navigation-menu'][data-part='viewport'] [data-scope='navigation-menu'][data-part='content'][data-state='open']:not([data-instant]) {
203
+ animation: xh-fade-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter);
204
+ }
205
+
206
+ [data-scope='navigation-menu'][data-part='viewport'] [data-scope='navigation-menu'][data-part='content'][data-state='closed']:not([data-instant]) {
207
+ animation: xh-fade-out var(--xh-motion-duration-exit) var(--xh-motion-ease-exit) forwards;
208
+ }
209
+
194
210
  /* 面板里的链接归 Collection Item 导航当前(nav 语境):悬停 / 键盘高亮(白底承载 100)与按下(200)面由家族
195
211
  按 :hover / :focus-visible / :active 给出,指向当前页面的那一条(data-current)取 strong 档品牌字色 +
196
212
  medium 字重,字色不随语气、不加下划线(下划线是"可点"的信号,它已经在这儿了);这里只把公开槽
@@ -221,6 +237,68 @@
221
237
  display: none;
222
238
  }
223
239
 
240
+ /* 面板里一枝子级的开关与链接同一种行,读链接那一组槽,两种行才等高、左缘才齐。
241
+ 展开不换面、不算打开中:由转向的箭头与露出的子级说明;按下只换面不缩放 */
242
+ [data-scope='navigation-menu'][data-part='branch-trigger'] {
243
+ --xh-collection-block-padding: var(--xh-navigation-menu-link-py, var(--xh-_navigation-menu-link-py));
244
+ --xh-collection-inline-padding: var(--xh-navigation-menu-link-px, var(--xh-_navigation-menu-link-px));
245
+ --xh-collection-radius: var(--xh-navigation-menu-link-radius, var(--xh-shape-control));
246
+ --xh-collection-font-size: var(--xh-navigation-menu-link-font-size, var(--xh-_navigation-menu-link-font-size));
247
+ --xh-collection-fg-rest: var(--xh-navigation-menu-link-fg, var(--xh-fg-default));
248
+ --xh-collection-fg-hover: var(--xh-navigation-menu-link-fg, var(--xh-fg-default));
249
+ --xh-collection-fg-keyboard-highlight: var(--xh-navigation-menu-link-fg, var(--xh-fg-default));
250
+ --xh-collection-fg-pressed: var(--xh-navigation-menu-link-fg, var(--xh-fg-default));
251
+ --xh-collection-bg-hover: var(--xh-navigation-menu-link-bg-hover, var(--xh-_navigation-menu-highlight-bg));
252
+ --xh-collection-bg-keyboard-highlight: var(--xh-navigation-menu-link-bg-hover, var(--xh-_navigation-menu-highlight-bg));
253
+ --xh-collection-bg-pressed: var(--xh-navigation-menu-link-bg-pressed, var(--xh-bg-subtle-hover));
254
+
255
+ display: flex;
256
+ align-items: center;
257
+ gap: var(--xh-navigation-menu-branch-trigger-gap, var(--xh-_navigation-menu-trigger-gap));
258
+ border: 0;
259
+ text-align: start;
260
+ }
261
+
262
+ /* 行尾的展开方向标记,与 SideNav / Tree 的分支箭头同一种:盒按指示符档定尺,兜底字形与作者的图标读盒的尺。
263
+ 收着时指向行尾(旋转角乘书写方向的符号,rtl 转半圈),展开时转向下方 */
264
+ [data-scope='navigation-menu'][data-part='branch-indicator'] {
265
+ --xh-icon-size: var(--xh-navigation-menu-branch-indicator-size, var(--xh-control-indicator-size));
266
+
267
+ margin-inline-start: auto;
268
+ display: inline-flex;
269
+ flex: none;
270
+ align-items: center;
271
+ justify-content: center;
272
+ inline-size: var(--xh-navigation-menu-branch-indicator-size, var(--xh-control-indicator-size));
273
+ block-size: var(--xh-navigation-menu-branch-indicator-size, var(--xh-control-indicator-size));
274
+ rotate: calc(90deg - 90deg * var(--xh-direction-sign));
275
+ transition: rotate var(--xh-motion-duration-nudge) var(--xh-motion-ease-enter-strong);
276
+ }
277
+
278
+ [data-scope='navigation-menu'][data-part='branch-indicator'][data-state='open'] {
279
+ rotate: 90deg;
280
+ }
281
+
282
+ /* 没写内容就由皮肤画兜底字形;作者往部件里塞了自己的图形,这条规则即不命中 */
283
+ [data-scope='navigation-menu'][data-part='branch-indicator']:empty::before {
284
+ content: '';
285
+ display: inline-block;
286
+ inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
287
+ block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
288
+ vertical-align: var(--xh-glyph-baseline-shift);
289
+ background-color: currentColor;
290
+ -webkit-mask: var(--xh-glyph-mark-chevron-right) center / contain no-repeat;
291
+ mask: var(--xh-glyph-mark-chevron-right) center / contain no-repeat;
292
+ }
293
+
294
+ /* 子级紧跟在开关之后,靠缩进表出层级、行距同面板;密集披露,不动高度、刻意瞬时 */
295
+ [data-scope='navigation-menu'][data-part='branch-content'] {
296
+ display: flex;
297
+ flex-direction: column;
298
+ gap: var(--xh-navigation-menu-content-gap, var(--xh-space-1));
299
+ padding-inline-start: var(--xh-navigation-menu-branch-content-indent, var(--xh-space-4));
300
+ }
301
+
224
302
  /* 入口里表示"底下还有一张面板"的标记,排在入口文字之后,展开时转向 */
225
303
  [data-scope='navigation-menu'][data-part='trigger-indicator'] {
226
304
  display: inline-flex;
@@ -228,7 +306,7 @@
228
306
  align-items: center;
229
307
  justify-content: center;
230
308
  line-height: var(--xh-leading-none);
231
- transition: rotate var(--xh-motion-duration-micro) var(--xh-motion-ease-enter-strong);
309
+ transition: rotate var(--xh-motion-duration-nudge) var(--xh-motion-ease-enter-strong);
232
310
  }
233
311
 
234
312
  [data-scope='navigation-menu'][data-part='trigger-indicator'][hidden] {
@@ -283,21 +361,37 @@
283
361
  block-size: var(--xh-navigation-menu-indicator-thickness, var(--xh-stroke-thick));
284
362
  }
285
363
 
286
- /* 主轴上的位置与长度由连接层写成内联样式(它量得到,样式表量不到);
287
- 这里只管交叉轴的贴边与粗细,以及长什么样。它指的是开着的面板:无面板开着时隐藏,
364
+ /* 展开入口的四个几何量由机器量好、连接层写成私有槽 --xh-_navigation-menu-indicator-x / -y / -w / -h
365
+ (它量得到,样式表量不到);这里按排布取主轴那两支,落点交给 translate(只走合成),
366
+ 另管交叉轴的贴边与粗细,以及长什么样。它指的是开着的面板:无面板开着时隐藏,
288
367
  当前页由上面链接自画的静态线表达 */
289
368
  [data-scope='navigation-menu'][data-part='indicator'] {
369
+ /* 还没量到时的落点,量到即被机器写的私有槽盖过 */
370
+ --xh-_navigation-menu-indicator-x: 0;
371
+ --xh-_navigation-menu-indicator-y: 0;
372
+ --xh-_navigation-menu-indicator-w: 0;
373
+ --xh-_navigation-menu-indicator-h: 0;
374
+ --xh-_navigation-menu-indicator-stretch: 0;
375
+
290
376
  position: absolute;
291
377
  display: block;
292
378
  /* 指示条也是列表项,宿主给 li 的外边距会把绝对定位的它推离入口 */
293
379
  margin: 0;
380
+ inset-inline-start: 0;
294
381
  inset-block-end: calc(var(--xh-navigation-menu-indicator-thickness, var(--xh-stroke-thick)) * -1);
382
+ inline-size: var(--xh-_navigation-menu-indicator-w);
295
383
  block-size: var(--xh-navigation-menu-indicator-thickness, var(--xh-stroke-thick));
296
384
  border-radius: var(--xh-navigation-menu-indicator-radius, var(--xh-shape-pill));
297
385
  background: var(--xh-navigation-menu-indicator-color, var(--xh-_navigation-menu-accent));
386
+ translate: var(--xh-_navigation-menu-indicator-x) 0;
298
387
  transition:
299
- inset-inline-start var(--xh-motion-duration-enter) var(--xh-motion-ease-continuous),
300
- inline-size var(--xh-motion-duration-enter) var(--xh-motion-ease-continuous);
388
+ translate var(--xh-motion-duration-move) var(--xh-motion-ease-continuous),
389
+ inline-size var(--xh-motion-duration-move) var(--xh-motion-ease-continuous);
390
+ }
391
+
392
+ /* translate 只认物理方向:RTL 下行首在右边,起始缘量出的距离往左推 */
393
+ [data-scope='navigation-menu'][data-part='indicator']:dir(rtl) {
394
+ translate: calc(-1 * var(--xh-_navigation-menu-indicator-x)) 0;
301
395
  }
302
396
 
303
397
  [data-scope='navigation-menu'][data-part='indicator'][hidden] {
@@ -306,13 +400,35 @@
306
400
 
307
401
  /* 竖排:指示条改贴在起始缘,交叉轴换成内联轴 */
308
402
  [data-scope='navigation-menu'][data-part='indicator'][data-orientation='vertical'] {
403
+ inset-block-start: 0;
309
404
  inset-block-end: auto;
310
405
  inset-inline-start: 0;
311
406
  inline-size: var(--xh-navigation-menu-indicator-thickness, var(--xh-stroke-thick));
312
- block-size: auto;
407
+ block-size: var(--xh-_navigation-menu-indicator-h);
408
+ translate: 0 var(--xh-_navigation-menu-indicator-y);
313
409
  transition:
314
- inset-block-start var(--xh-motion-duration-enter) var(--xh-motion-ease-continuous),
315
- block-size var(--xh-motion-duration-enter) var(--xh-motion-ease-continuous);
410
+ translate var(--xh-motion-duration-move) var(--xh-motion-ease-continuous),
411
+ block-size var(--xh-motion-duration-move) var(--xh-motion-ease-continuous);
412
+ }
413
+
414
+ /* 首次落位与同一项的重量(窗口缩放、换上正式字体)直接到位,只有换项才滑:连接层在这一落点投影
415
+ data-instant。写在排布那几条之后,同一特异性按先后压过它们单写的过渡 */
416
+ [data-scope='navigation-menu'][data-part='indicator'][data-instant] {
417
+ transition: none;
418
+ }
419
+
420
+ /* 液态档:两沿由弹簧逐帧推着走(连接层每一帧写好盒子),几何量不再补过渡;
421
+ 被拉长时在另一个方向上压扁(横排缺省压块向,竖排压行向),表达体积守恒,拉长到目标的两倍时压到 --xh-motion-scale-squash */
422
+ :where([data-material='liquid']) [data-scope='navigation-menu'][data-part='indicator'] {
423
+ --xh-_navigation-menu-indicator-squash: max(var(--xh-motion-scale-squash), calc(1 - var(--xh-_navigation-menu-indicator-stretch) * (1 - var(--xh-motion-scale-squash))));
424
+
425
+ scale: 1 var(--xh-_navigation-menu-indicator-squash);
426
+ transition: none;
427
+ }
428
+
429
+ :where([data-material='liquid']) [data-scope='navigation-menu'][data-part='indicator'][data-orientation='vertical'] {
430
+ scale: var(--xh-_navigation-menu-indicator-squash) 1;
431
+ transition: none;
316
432
  }
317
433
 
318
434
  /* 共享面板外壳:只管落位与统一的面板外观,里面装哪一份内容归 content。
@@ -324,6 +440,9 @@
324
440
  inset-block-start: calc(100% + var(--xh-navigation-menu-content-offset, var(--xh-space-1)));
325
441
  inset-inline-start: 0;
326
442
  display: block;
443
+ /* 外壳同样按装进来的那一张的自然宽度排开,道理同 content */
444
+ inline-size: max-content;
445
+ max-inline-size: var(--xh-navigation-menu-content-max-w, var(--xh-overlay-max-w-xl));
327
446
  padding: var(--xh-navigation-menu-viewport-p, var(--xh-space-2));
328
447
  border: var(--xh-stroke-thin) solid var(--xh-navigation-menu-content-border, var(--xh-border-default));
329
448
  border-radius: var(--xh-navigation-menu-content-radius, var(--xh-shape-overlay));
@@ -335,12 +454,29 @@
335
454
  display: none;
336
455
  }
337
456
 
457
+ /* 共享外壳是面板那一面:首开弹出、末收收回,换张时外壳留在原处、高度即刻换成新的一张。
458
+ 挂载时就展开着的那一段(data-instant)属于首帧,直接呈现 */
459
+ [data-scope='navigation-menu'][data-part='viewport'][data-state='open']:not([data-instant]) {
460
+ animation: xh-pop-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
461
+ }
462
+
463
+ [data-scope='navigation-menu'][data-part='viewport'][data-state='closed'] {
464
+ animation: xh-pop-out var(--xh-motion-duration-exit) var(--xh-motion-ease-exit) forwards;
465
+ }
466
+
338
467
  /* 竖排导航:共享外壳跟着面板改从侧边长出来 */
339
468
  [data-scope='navigation-menu'][data-part='viewport'][data-orientation='vertical'] {
340
469
  inset-block-start: 0;
341
470
  inset-inline-start: calc(100% + var(--xh-navigation-menu-content-offset, var(--xh-space-1)));
342
471
  }
343
472
 
473
+ /* 声明过 display 就盖掉了 UA 的 [hidden]{display:none},兜底排在这几个部件所有 display 声明之后 */
474
+ [data-scope='navigation-menu'][data-part='branch-trigger'][hidden],
475
+ [data-scope='navigation-menu'][data-part='branch-indicator'][hidden],
476
+ [data-scope='navigation-menu'][data-part='branch-content'][hidden] {
477
+ display: none;
478
+ }
479
+
344
480
  @media (forced-colors: active) {
345
481
  /* 两条指示线画的都是一块纯底色,这一档里底色被统一换成 Canvas,线整根消失:
346
482
  开着的入口只剩转向的箭头、当前页只剩字重。换成系统高亮色画回来 */
@@ -348,5 +484,30 @@
348
484
  [data-scope='navigation-menu'][data-part='link'][data-current]::after {
349
485
  background: Highlight;
350
486
  }
487
+
488
+ /* 顶层入口与子级开关的箭头都是 mask 挖出来的一块底色,这一档里底色换成 Canvas、箭头跟着消失,
489
+ 开合只剩读屏听得到。直接写系统前景(不能取 currentColor:退出强制色的伪元素读到的是被系统换掉之前的作者色):
490
+ 子级开关取按钮前景 ButtonText,顶层入口落在条目面上取 CanvasText;
491
+ 两者都是集合条目,按下与没被高亮时的悬停,家族把条目涂成 Highlight,箭头跟着换 HighlightText;
492
+ 禁用的取 GrayText,与公共补救层给禁用行的字色一致 */
493
+ [data-scope='navigation-menu'][data-part='branch-indicator']:empty::before {
494
+ background-color: ButtonText;
495
+ forced-color-adjust: none;
496
+ }
497
+
498
+ [data-scope='navigation-menu'][data-part='trigger-indicator']:empty::before {
499
+ background-color: CanvasText;
500
+ forced-color-adjust: none;
501
+ }
502
+
503
+ [data-scope='navigation-menu'][data-part='branch-trigger']:not([aria-disabled='true'], [data-disabled], [aria-busy='true'], [data-error]):is(:active, [data-pressed], :hover:not(:focus-visible, [data-highlighted])) [data-scope='navigation-menu'][data-part='branch-indicator']:empty::before,
504
+ [data-scope='navigation-menu'][data-part='trigger']:not([aria-disabled='true'], [data-disabled], [aria-busy='true'], [data-error]):is(:active, [data-pressed], :hover:not(:focus-visible, [data-highlighted])) [data-scope='navigation-menu'][data-part='trigger-indicator']:empty::before {
505
+ background-color: HighlightText;
506
+ }
507
+
508
+ [data-scope='navigation-menu'][data-part='branch-trigger'][data-disabled] [data-scope='navigation-menu'][data-part='branch-indicator']:empty::before,
509
+ [data-scope='navigation-menu'][data-part='trigger']:is([aria-disabled='true'], [data-disabled]) [data-scope='navigation-menu'][data-part='trigger-indicator']:empty::before {
510
+ background-color: GrayText;
511
+ }
351
512
  }
352
513
  }