@xihan-ui/styles 3.1.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 (216) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/component-tokens.d.ts +1 -0
  3. package/components.tokens.json +32 -2
  4. package/css/alert.css +2 -2
  5. package/css/approval.css +4 -4
  6. package/css/button.css +9 -5
  7. package/css/calendar-picker.css +3 -3
  8. package/css/calendar-range-picker.css +7 -7
  9. package/css/carousel.css +45 -13
  10. package/css/cartesian-chart.css +11 -11
  11. package/css/cascader.css +10 -10
  12. package/css/citation.css +2 -2
  13. package/css/code-view.css +6 -6
  14. package/css/color-swatch-picker.css +9 -4
  15. package/css/combobox.css +12 -4
  16. package/css/command.css +1 -1
  17. package/css/date-field.css +8 -2
  18. package/css/date-picker.css +13 -7
  19. package/css/date-range-picker.css +13 -7
  20. package/css/diff-view.css +8 -8
  21. package/css/field-array.css +1 -1
  22. package/css/file-upload.css +1 -1
  23. package/css/float-button.css +42 -27
  24. package/css/form.css +6 -6
  25. package/css/graph-chart.css +2 -2
  26. package/css/highlight.css +1 -1
  27. package/css/image.css +1 -1
  28. package/css/mention.css +1 -1
  29. package/css/message-feed.css +1 -1
  30. package/css/notification.css +18 -18
  31. package/css/number-field.css +18 -18
  32. package/css/page-header.css +2 -2
  33. package/css/password-input.css +2 -2
  34. package/css/popconfirm.css +3 -3
  35. package/css/question-flow.css +8 -8
  36. package/css/radar-chart.css +6 -6
  37. package/css/rating.css +1 -1
  38. package/css/select.css +2 -2
  39. package/css/separator.css +2 -2
  40. package/css/side-nav.css +13 -13
  41. package/css/skeleton.css +5 -5
  42. package/css/slider.css +6 -6
  43. package/css/sortable.css +2 -2
  44. package/css/table.css +2 -2
  45. package/css/tags-input.css +1 -1
  46. package/css/tool-call.css +7 -7
  47. package/css/tooltip.css +1 -1
  48. package/css/tree-select.css +2 -2
  49. package/dist/css/accordion.css +269 -0
  50. package/dist/css/affix.css +47 -0
  51. package/dist/css/alert.css +247 -0
  52. package/dist/css/anchor.css +252 -0
  53. package/dist/css/approval.css +501 -0
  54. package/dist/css/avatar-group.css +99 -0
  55. package/dist/css/avatar.css +98 -0
  56. package/dist/css/back-top.css +161 -0
  57. package/dist/css/badge.css +205 -0
  58. package/dist/css/bar-code.css +62 -0
  59. package/dist/css/breadcrumb.css +230 -0
  60. package/dist/css/button-group.css +263 -0
  61. package/dist/css/button.css +219 -0
  62. package/dist/css/calendar-picker.css +467 -0
  63. package/dist/css/calendar-range-picker.css +554 -0
  64. package/dist/css/card.css +221 -0
  65. package/dist/css/carousel.css +710 -0
  66. package/dist/css/cartesian-chart.css +830 -0
  67. package/dist/css/cascader.css +961 -0
  68. package/dist/css/checkbox-group.css +358 -0
  69. package/dist/css/checkbox.css +257 -0
  70. package/dist/css/citation.css +470 -0
  71. package/dist/css/clipboard.css +315 -0
  72. package/dist/css/code-view.css +374 -0
  73. package/dist/css/collapsible.css +185 -0
  74. package/dist/css/color-field.css +176 -0
  75. package/dist/css/color-picker.css +595 -0
  76. package/dist/css/color-slider.css +281 -0
  77. package/dist/css/color-swatch-picker.css +250 -0
  78. package/dist/css/color-swatch.css +35 -0
  79. package/dist/css/combobox.css +574 -0
  80. package/dist/css/command.css +399 -0
  81. package/dist/css/context-menu.css +420 -0
  82. package/dist/css/date-field.css +317 -0
  83. package/dist/css/date-picker.css +868 -0
  84. package/dist/css/date-range-picker.css +886 -0
  85. package/dist/css/description.css +67 -0
  86. package/dist/css/descriptions.css +299 -0
  87. package/dist/css/dialog.css +455 -0
  88. package/dist/css/diff-view.css +513 -0
  89. package/dist/css/download-trigger.css +151 -0
  90. package/dist/css/drawer.css +552 -0
  91. package/dist/css/editable.css +295 -0
  92. package/dist/css/empty-state.css +163 -0
  93. package/dist/css/field-array.css +226 -0
  94. package/dist/css/field.css +166 -0
  95. package/dist/css/fieldset.css +102 -0
  96. package/dist/css/file-upload.css +429 -0
  97. package/dist/css/flex.css +441 -0
  98. package/dist/css/float-button.css +569 -0
  99. package/dist/css/floating-panel.css +429 -0
  100. package/dist/css/focus.css +46 -0
  101. package/dist/css/forced-colors.css +93 -0
  102. package/dist/css/form.css +393 -0
  103. package/dist/css/funnel-chart.css +106 -0
  104. package/dist/css/graph-chart.css +205 -0
  105. package/dist/css/grid-list.css +235 -0
  106. package/dist/css/grid.css +1201 -0
  107. package/dist/css/heatmap.css +552 -0
  108. package/dist/css/hierarchy-chart.css +298 -0
  109. package/dist/css/highlight.css +41 -0
  110. package/dist/css/hover-card.css +226 -0
  111. package/dist/css/icon.css +225 -0
  112. package/dist/css/image-cropper.css +373 -0
  113. package/dist/css/image-viewer.css +538 -0
  114. package/dist/css/image.css +98 -0
  115. package/dist/css/infinite-scroll.css +77 -0
  116. package/dist/css/input-group.css +275 -0
  117. package/dist/css/json-viewer.css +379 -0
  118. package/dist/css/kbd.css +72 -0
  119. package/dist/css/label.css +78 -0
  120. package/dist/css/layers.css +7 -0
  121. package/dist/css/layout.css +372 -0
  122. package/dist/css/liquid.css +106 -0
  123. package/dist/css/list.css +152 -0
  124. package/dist/css/listbox.css +390 -0
  125. package/dist/css/loading-bar.css +141 -0
  126. package/dist/css/log.css +306 -0
  127. package/dist/css/markdown-stream.css +149 -0
  128. package/dist/css/marquee.css +378 -0
  129. package/dist/css/masonry.css +70 -0
  130. package/dist/css/matrix-code.css +67 -0
  131. package/dist/css/mention.css +393 -0
  132. package/dist/css/menu.css +364 -0
  133. package/dist/css/menubar.css +456 -0
  134. package/dist/css/message-feed.css +318 -0
  135. package/dist/css/navigation-menu.css +513 -0
  136. package/dist/css/notification.css +782 -0
  137. package/dist/css/number-animation.css +44 -0
  138. package/dist/css/number-field.css +252 -0
  139. package/dist/css/overlay-arrow.css +56 -0
  140. package/dist/css/page-header.css +184 -0
  141. package/dist/css/pagination.css +450 -0
  142. package/dist/css/password-input.css +391 -0
  143. package/dist/css/pie-chart.css +247 -0
  144. package/dist/css/pin-input.css +199 -0
  145. package/dist/css/pointer.css +36 -0
  146. package/dist/css/popconfirm.css +320 -0
  147. package/dist/css/popover.css +279 -0
  148. package/dist/css/progress.css +501 -0
  149. package/dist/css/prompt-input.css +260 -0
  150. package/dist/css/question-flow.css +553 -0
  151. package/dist/css/radar-chart.css +233 -0
  152. package/dist/css/radio-group.css +598 -0
  153. package/dist/css/rating.css +294 -0
  154. package/dist/css/reasoning.css +343 -0
  155. package/dist/css/reset.css +117 -0
  156. package/dist/css/resizable.css +242 -0
  157. package/dist/css/sankey-chart.css +174 -0
  158. package/dist/css/scroll-area.css +240 -0
  159. package/dist/css/scrollbar.css +204 -0
  160. package/dist/css/select.css +612 -0
  161. package/dist/css/separator.css +122 -0
  162. package/dist/css/side-nav.css +476 -0
  163. package/dist/css/signature-pad.css +179 -0
  164. package/dist/css/skeleton.css +161 -0
  165. package/dist/css/slider.css +374 -0
  166. package/dist/css/sortable.css +228 -0
  167. package/dist/css/sparkline.css +164 -0
  168. package/dist/css/spinner.css +236 -0
  169. package/dist/css/splitter.css +159 -0
  170. package/dist/css/statistic.css +137 -0
  171. package/dist/css/steps.css +627 -0
  172. package/dist/css/switch.css +351 -0
  173. package/dist/css/table.css +1145 -0
  174. package/dist/css/tabs.css +944 -0
  175. package/dist/css/tag-group.css +247 -0
  176. package/dist/css/tag.css +310 -0
  177. package/dist/css/tags-input.css +322 -0
  178. package/dist/css/text-field.css +197 -0
  179. package/dist/css/time-field.css +277 -0
  180. package/dist/css/time-picker.css +707 -0
  181. package/dist/css/time-range-picker.css +746 -0
  182. package/dist/css/timeline.css +423 -0
  183. package/dist/css/timer.css +123 -0
  184. package/dist/css/timestamp.css +34 -0
  185. package/dist/css/toggle-group.css +424 -0
  186. package/dist/css/toggle.css +146 -0
  187. package/dist/css/tone.css +189 -0
  188. package/dist/css/tool-call.css +429 -0
  189. package/dist/css/toolbar.css +365 -0
  190. package/dist/css/tooltip.css +218 -0
  191. package/dist/css/tour.css +439 -0
  192. package/dist/css/transfer.css +638 -0
  193. package/dist/css/tree-select.css +878 -0
  194. package/dist/css/tree.css +733 -0
  195. package/dist/css/truncate.css +108 -0
  196. package/dist/css/typography.css +472 -0
  197. package/dist/css/undefined.css +58 -0
  198. package/dist/css/virtualizer.css +166 -0
  199. package/dist/css/visually-hidden.css +20 -0
  200. package/dist/css/watermark.css +82 -0
  201. package/dist/family/action-control.css +487 -0
  202. package/dist/family/chart.css +480 -0
  203. package/dist/family/check-mark.css +94 -0
  204. package/dist/family/choice-card.css +97 -0
  205. package/dist/family/collection-item.css +764 -0
  206. package/dist/family/field-chrome.css +287 -0
  207. package/dist/family/loading-ring.css +95 -0
  208. package/dist/family/material.css +72 -0
  209. package/dist/family/menu-choice.css +56 -0
  210. package/dist/family/motion.css +363 -0
  211. package/dist/family/swatch.css +59 -0
  212. package/dist/family/tag-list.css +59 -0
  213. package/family/action-control.css +3 -12
  214. package/index.css +6882 -6809
  215. package/index.unlayered.css +6884 -6811
  216. package/package.json +165 -164
package/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # @xihan-ui/styles
2
2
 
3
+ ## 3.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 0d4e616: Carousel 分页点新增组件槽 `--xh-carousel-indicator-thickness`:垂直于轨道的粗细单独可调(横轨管高、纵轨管宽),缺省与 `--xh-carousel-indicator-size` 同值,现有圆点与胶囊不变。此前分页点的宽高共用一个长度槽,只画得出圆点与拉长的胶囊,想要细横条只能覆盖指示点盒子本身的尺寸与底色,粗指针下盒子撑成 44px 命中区、点改由伪元素画,覆盖的底色就把整块命中区涂满。现在粗细调小即成细横条(圆角另把 `--xh-carousel-indicator-radius` 换成 `var(--xh-shape-pill)`):细指针的命中区垂直于轨道多外扩一些、不低于 24px,粗指针下伪元素画的点与自动播放进度条同样按粗细画,44px 命中区不变。
8
+ - 8b8d520: 浮在内容之上的圆钮(Action Control `floating` 档)整体下移一档:sm / md / lg 由 40 / 48 / 56px 改为 32 / 40 / 48px(compact 28 / 36 / 44px),图标 16 / 20 / 24px,缺省 md 即 40px。48px 的钮在矮视口与小卡片里会叠住内容与彼此(走马灯的翻页钮与播放钮、纵向轨道压住正文)。
9
+
10
+ 视觉默认变化:BackTop、FloatButton(含展开列表里的动作项)缺省由 48px 变为 40px,`size="lg"` 由 56px 变为 48px;ImageViewer 翻页钮由 48px 变为 40px、关闭钮由 40px 变为 32px;Carousel 翻页与播放钮为 40px。Log / MessageFeed 的回到底部钮缺省仍是 32px。
11
+
12
+ 新增尺寸档:
13
+
14
+ - Carousel 新增 `size`(sm / md / lg,缺省 md),翻页、播放三颗钮同档。
15
+ - ImageViewer 新增 `size`(sm / md / lg,缺省 md),翻页钮同档,关闭钮比它低一档、最低 sm。
16
+ - Log、MessageFeed 的回到底部钮随组件已有的 `size` 换档:比组件低一档、最低 sm(sm / md 时 32px,lg 时 40px)。
17
+
18
+ 新增的 `size` 与其他组件一样接全局配置,没写时取全局尺寸。
19
+
20
+ - 831acc9: 每个角色节点另带皮肤挂载类 `xh-scope-<组件名>`,与 `data-scope` 一一对应(`data-scope="dialog"` 的节点带 `xh-scope-dialog`)。解剖产出的 attrs 多一项 `class`,Vue 与作者的 class 合并、React 落成 `className` 并与作者的拼接、Web Components 按词增删不覆盖作者写的类;asChild 把部件属性合进自带解剖的子节点时,挂载类随 `data-scope` 一起让位,一个节点不会同时吃两个组件的皮肤。core 新增导出 `SCOPE_CLASS_PREFIX`、`scopeClass()` 与 `stripScopeClass()`。
21
+
22
+ 挂载类是皮肤产物改以类名领头的前提:浏览器按类名给规则分桶,属性选择器只按属性名分桶,几千条以 `[data-scope=…]` 领头的皮肤规则挤在同一个桶里,每个组件节点每次样式重算都要逐条试一遍。`data-scope` / `data-part` 仍是公开的样式契约,作者的覆盖写法不变。节点的 class 属性因此多了一个词:对 DOM 做快照或精确比对 `className` 的测试需要随之更新。只用 `@xihan-ui/styles`、自己书写标记的页面,要给每个带 `data-scope="x"` 的节点补上 `class="xh-scope-x"`,否则皮肤不命中。
23
+
24
+ ### Patch Changes
25
+
26
+ - fca75b0: 皮肤里挂在运行期状态后面的后代与兄弟规则,主体都带上了组件特征。浏览器按属性名 / 伪类全局登记「某个属性一变要重算哪些节点」,不看取值也不看同一节里的组件限定:主体只靠 `[data-part]`(或 `> *` 这类没有特征的主体)时,页面上任何元素翻转 `data-state`、`data-current`、`data-disabled`、`data-instant` 等,都会把它整棵子树一起标脏。3500 个组件节点的容器上翻一次 `data-state` 由 150ms 降到 4ms,`data-current` 152ms → 2ms,`data-disabled` 155ms → 8ms,`data-instant` 80ms → 11ms。
27
+
28
+ 本组件的部件补 `:where([data-scope='x'])`(产物里成为 `:where(.xh-scope-x)`,不加特异性,层叠不变);作者放进来的任意子节点(按钮加载环与色板徽标里的图形、组合框展开钮的箭头、日期输入的段位、浮动按钮的动作项)改为由父节点写私有槽、子节点只读槽。浮动按钮动作项的冒出与缩回交错改由名次与收起标记算出,收起时的指针关闭挪到 list 上继承。
29
+
30
+ - @xihan-ui/tokens@3.2.0
31
+
3
32
  ## 3.1.0
4
33
 
5
34
  ### Minor Changes
@@ -380,6 +380,7 @@ export type ComponentTokenName
380
380
  | '--xh-carousel-indicator-size'
381
381
  | '--xh-carousel-indicator-size-current'
382
382
  | '--xh-carousel-indicator-target-size'
383
+ | '--xh-carousel-indicator-thickness'
383
384
  | '--xh-carousel-trigger-bg'
384
385
  | '--xh-carousel-trigger-bg-active'
385
386
  | '--xh-carousel-trigger-bg-hover'
@@ -7557,7 +7557,9 @@
7557
7557
  ],
7558
7558
  "property": [
7559
7559
  "block-size",
7560
- "inline-size"
7560
+ "inline-size",
7561
+ "inset-block",
7562
+ "inset-inline"
7561
7563
  ],
7562
7564
  "state": [
7563
7565
  "@media (pointer: coarse)",
@@ -7571,7 +7573,7 @@
7571
7573
  "--xh-space-2"
7572
7574
  ],
7573
7575
  "visibility": "public",
7574
- "description": "carousel 的 indicator、indicator-group、root 部件 block-size、inline-size 覆盖槽。"
7576
+ "description": "carousel 的 indicator、indicator-group、root 部件 block-size、inline-size、inset-block、inset-inline 覆盖槽。"
7575
7577
  },
7576
7578
  {
7577
7579
  "name": "--xh-carousel-indicator-size-current",
@@ -7626,6 +7628,34 @@
7626
7628
  "visibility": "public",
7627
7629
  "description": "carousel 的 indicator、root 部件 min-block-size、min-inline-size 覆盖槽。"
7628
7630
  },
7631
+ {
7632
+ "name": "--xh-carousel-indicator-thickness",
7633
+ "component": "carousel",
7634
+ "part": [
7635
+ "indicator",
7636
+ "indicator-group",
7637
+ "root"
7638
+ ],
7639
+ "property": [
7640
+ "block-size",
7641
+ "inline-size",
7642
+ "inset-block",
7643
+ "inset-inline"
7644
+ ],
7645
+ "state": [
7646
+ "@media (pointer: coarse)",
7647
+ "autoplay",
7648
+ "current",
7649
+ "default",
7650
+ "orientation=vertical",
7651
+ "paused"
7652
+ ],
7653
+ "defaultToken": [
7654
+ "--xh-carousel-indicator-size"
7655
+ ],
7656
+ "visibility": "public",
7657
+ "description": "carousel 的 indicator、indicator-group、root 部件 block-size、inline-size、inset-block、inset-inline 覆盖槽。"
7658
+ },
7629
7659
  {
7630
7660
  "name": "--xh-carousel-trigger-bg",
7631
7661
  "component": "carousel",
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