@xihan-ui/styles 2.0.0 → 2.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 (101) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/component-tokens.d.ts +0 -15
  3. package/components.tokens.json +65 -396
  4. package/css/accordion.css +6 -6
  5. package/css/alert.css +2 -2
  6. package/css/anchor.css +3 -3
  7. package/css/approval.css +8 -8
  8. package/css/back-top.css +2 -2
  9. package/css/badge.css +1 -1
  10. package/css/breadcrumb.css +1 -1
  11. package/css/button-group.css +1 -1
  12. package/css/button.css +2 -2
  13. package/css/calendar-picker.css +8 -8
  14. package/css/calendar-range-picker.css +9 -9
  15. package/css/card.css +1 -1
  16. package/css/carousel.css +6 -6
  17. package/css/cascader.css +3 -5
  18. package/css/checkbox-group.css +10 -10
  19. package/css/checkbox.css +5 -5
  20. package/css/clipboard.css +4 -4
  21. package/css/code-view.css +2 -2
  22. package/css/collapsible.css +4 -4
  23. package/css/color-picker.css +2 -4
  24. package/css/color-slider.css +4 -4
  25. package/css/color-swatch-picker.css +5 -5
  26. package/css/combobox.css +2 -4
  27. package/css/command.css +3 -5
  28. package/css/context-menu.css +4 -6
  29. package/css/date-picker.css +0 -2
  30. package/css/date-range-picker.css +0 -2
  31. package/css/descriptions.css +1 -1
  32. package/css/dialog.css +5 -7
  33. package/css/diff-view.css +4 -4
  34. package/css/download-trigger.css +3 -3
  35. package/css/drawer.css +9 -15
  36. package/css/empty-state.css +1 -1
  37. package/css/field.css +1 -1
  38. package/css/fieldset.css +1 -1
  39. package/css/file-upload.css +1 -1
  40. package/css/float-button.css +3 -3
  41. package/css/floating-panel.css +6 -8
  42. package/css/form.css +3 -3
  43. package/css/heatmap.css +1 -1
  44. package/css/hover-card.css +2 -4
  45. package/css/image-cropper.css +2 -2
  46. package/css/image-viewer.css +2 -4
  47. package/css/infinite-scroll.css +2 -2
  48. package/css/input-group.css +2 -2
  49. package/css/json-viewer.css +5 -5
  50. package/css/kbd.css +1 -1
  51. package/css/layout.css +3 -3
  52. package/css/list.css +1 -1
  53. package/css/listbox.css +26 -17
  54. package/css/log.css +2 -2
  55. package/css/mention.css +0 -2
  56. package/css/menu.css +5 -7
  57. package/css/menubar.css +6 -8
  58. package/css/message-feed.css +2 -2
  59. package/css/navigation-menu.css +5 -7
  60. package/css/notification.css +3 -3
  61. package/css/page-header.css +1 -1
  62. package/css/pagination.css +5 -7
  63. package/css/popconfirm.css +6 -8
  64. package/css/popover.css +5 -7
  65. package/css/prompt-input.css +1 -1
  66. package/css/question-flow.css +7 -7
  67. package/css/radio-group.css +9 -9
  68. package/css/rating.css +4 -4
  69. package/css/reasoning.css +5 -5
  70. package/css/reset.css +1 -1
  71. package/css/segmented.css +7 -7
  72. package/css/select.css +2 -4
  73. package/css/side-nav.css +4 -6
  74. package/css/signature-pad.css +7 -7
  75. package/css/slider.css +5 -5
  76. package/css/sortable.css +1 -1
  77. package/css/splitter.css +1 -1
  78. package/css/steps.css +10 -10
  79. package/css/switch.css +8 -8
  80. package/css/table.css +11 -11
  81. package/css/tabs.css +12 -12
  82. package/css/tag-group.css +39 -35
  83. package/css/tag.css +2 -2
  84. package/css/time-picker.css +0 -2
  85. package/css/time-range-picker.css +0 -2
  86. package/css/toast.css +3 -3
  87. package/css/toggle-group.css +4 -4
  88. package/css/toggle.css +2 -2
  89. package/css/tool-call.css +5 -5
  90. package/css/toolbar.css +4 -4
  91. package/css/tooltip.css +4 -6
  92. package/css/tour.css +7 -9
  93. package/css/transfer.css +6 -6
  94. package/css/tree-select.css +3 -5
  95. package/css/tree.css +46 -99
  96. package/css/virtualizer.css +1 -1
  97. package/family/collection-item.css +61 -12
  98. package/family/motion.css +1 -1
  99. package/index.css +506 -553
  100. package/index.unlayered.css +506 -553
  101. package/package.json +2 -2
package/css/slider.css CHANGED
@@ -25,7 +25,7 @@
25
25
 
26
26
  display: flex;
27
27
  flex-direction: column;
28
- /* 字段标签贴控件(§6.4 复合单字段) */
28
+ /* 字段标签贴控件(复合单字段) */
29
29
  gap: var(--xh-slider-gap, var(--xh-space-1));
30
30
  }
31
31
 
@@ -35,10 +35,10 @@
35
35
  align-items: center;
36
36
  }
37
37
 
38
- /* 禁用不整体压暗(§7.2 第 9 条):前景与表面各自降级——连接层把 data-disabled 发到每个角色节点上,
38
+ /* 禁用不整体压暗:前景与表面各自降级——连接层把 data-disabled 发到每个角色节点上,
39
39
  轨道、区间、拇指、刻度与标签就近消费,写在各自的规则里 */
40
40
 
41
- /* 字段标签:14 / 500 / fg-default(§6.4),禁用换到 --xh-fg-subtle */
41
+ /* 字段标签:14 / 500 / fg-default,禁用换到 --xh-fg-subtle */
42
42
  [data-scope='slider'][data-part='label'] {
43
43
  color: var(--xh-slider-label-fg, var(--xh-fg-default));
44
44
  font-size: var(--xh-slider-label-font-size, var(--xh-text-label-size));
@@ -144,7 +144,7 @@
144
144
  /* 圆点浮在轨道之上:轨道是流内的,拇指是绝对定位的,天然后来居上,不必再堆 z-index。
145
145
  box-sizing 必须显式写:描边要吃进直径里,否则实际盒子比 --xh-_thumb-size 宽两条边,
146
146
  下面按半个直径回拉的负外边距就对不上圆心。
147
- 拇指是可拖起的 raised 面(§8):描边取 --xh-border-default,raised 影只是加成、不作边界 */
147
+ 拇指是可拖起的 raised 面:描边取 --xh-border-default,raised 影只是加成、不作边界 */
148
148
  [data-scope='slider'][data-part='thumb'] {
149
149
  position: absolute;
150
150
  box-sizing: border-box;
@@ -277,7 +277,7 @@
277
277
  pointer-events: none;
278
278
  }
279
279
 
280
- /* 刻度点是正方盒,取 circle(§6.3 正方盒不得用 pill 冒充圆) */
280
+ /* 刻度点是正方盒,取 circle(正方盒不得用 pill 冒充圆) */
281
281
  [data-scope='slider'][data-part='tick'] {
282
282
  position: absolute;
283
283
  inset-block-start: 50%;
package/css/sortable.css CHANGED
@@ -67,7 +67,7 @@
67
67
  opacity: var(--xh-sortable-item-opacity-dragging, 0.9);
68
68
  }
69
69
 
70
- /* 把手是只有字形的离散动作钮(§9.1 定尺把手):盒几何、悬停 / 按下与 0.97 按压、粗指针热区、焦点环、
70
+ /* 把手是只有字形的离散动作钮(定尺把手):盒几何、悬停 / 按下与 0.97 按压、粗指针热区、焦点环、
71
71
  禁用面全由 Action Control 的 icon ghost 档给(连接层投 xs:24px 正方盒,与此前 --xh-control-action-size
72
72
  同尺寸),组件只映射既有使用者槽。静息透明,白底承载 hover 100 → pressed 200(此前悬停落 200 是错档)。
73
73
  手型不是 pointer:抓起来拖的东西给 grab,按住拖动中给 grabbing;家族的手型槽逐态映射 */
package/css/splitter.css CHANGED
@@ -111,7 +111,7 @@
111
111
  cursor: row-resize;
112
112
  }
113
113
 
114
- /* 分隔条是一根线不是一块面:悬停不走面阶梯(300 只留给 pressed,§7.2 第 3 条),
114
+ /* 分隔条是一根线不是一块面:悬停不走面阶梯(300 只留给 pressed),
115
115
  按线取——与字段描边 rest → hover 同向加深一档 */
116
116
  [data-scope='splitter'][data-part='resize-trigger']:hover {
117
117
  background: var(--xh-splitter-trigger-bg-hover, var(--xh-border-control));
package/css/steps.css CHANGED
@@ -14,7 +14,7 @@
14
14
  }
15
15
 
16
16
  [data-scope='steps'][data-part='root'] {
17
- /* 作者放进标题 / 说明里的图标按档取尺,缺省 sm(§6.5)。走过的步里皮肤画的兜底对号不读这支:
17
+ /* 作者放进标题 / 说明里的图标按档取尺,缺省 sm。走过的步里皮肤画的兜底对号不读这支:
18
18
  它是指示符,与序号圆点同走 --xh-control-indicator-* 一族——圆点在自己身上把 --xh-icon-size
19
19
  改接到 --xh-steps-indicator-mark-size,兜底对号与作者塞进圆点里的 XhIcon 读同一把尺 */
20
20
  --xh-icon-size: var(--xh-steps-icon-size, var(--xh-glyph-size-sm));
@@ -28,14 +28,14 @@
28
28
  /* 语气落在当前步的标记、走过那几步的对号与连接线上:强调色画描边与填充,
29
29
  accent-text 是普通底上的强调文字(走过与当前步的标题),on-accent 是实心底上的前景。
30
30
  没写 data-tone 时 --xh-_tone 一族没被声明,三个槽都退回原来的品牌配色。
31
- 走过的步不再用品牌淡底(§7.3 brand-subtle 退出 completed 语义),淡底那两支私有槽随之撤掉 */
31
+ 走过的步不再用品牌淡底(brand-subtle 退出 completed 语义),淡底那两支私有槽随之撤掉 */
32
32
  --xh-_steps-accent: var(--xh-_tone, var(--xh-bg-brand));
33
33
  --xh-_steps-accent-text: var(--xh-_tone-fg, var(--xh-fg-brand-strong));
34
34
  /* 走过的步里那枚对号:中性淡底上的品牌色标记,不用标题那档更深的字色 */
35
35
  --xh-_steps-accent-mark: var(--xh-_tone-fg, var(--xh-fg-brand));
36
36
  --xh-_steps-on-accent: var(--xh-_tone-on, var(--xh-fg-on-brand));
37
37
  /* 触发器是序号圆点的承载面:圆点静息就坐在 --xh-bg-subtle(100)的淡底上,阶梯按淡底容器走
38
- (hover 200 → pressed 300,§7.2 第 3 条)。两支私有槽是这一档的唯一来源——触发器拿它们给
38
+ (hover 200 → pressed 300)。两支私有槽是这一档的唯一来源——触发器拿它们给
39
39
  --xh-action-host-bg-* 赋值(桥接槽只写不读),圆点悬停 / 按下读同一支私有槽,即与宿主的 host 槽同源 */
40
40
  --xh-_steps-host-bg-hover: var(--xh-bg-subtle-hover);
41
41
  --xh-_steps-host-bg-pressed: var(--xh-bg-subtle-active);
@@ -134,7 +134,7 @@
134
134
  align-items: flex-start;
135
135
  }
136
136
 
137
- /* 触发器是「序号 + 标题 + 说明」的整块内容行(§9.2):接 Action Control row 档、ghost 形态,悬停 / 按下 / 禁用面、
137
+ /* 触发器是「序号 + 标题 + 说明」的整块内容行:接 Action Control row 档、ghost 形态,悬停 / 按下 / 禁用面、
138
138
  手型、过渡与焦点环由家族给,按下只换面不缩放(row 档专属按压块 scale: none);这里只把使用者槽映射到桥接槽。
139
139
  触发器既是 Action Control 又是圆点的承载面:自己坐画布走 hover 100 → pressed 200,由 --xh-action-bg-* 钉住;
140
140
  --xh-action-host-bg-* 只对圆点生效(圆点自己是 100 的淡底,坐在触发器面上再上一档到 200 / 300)。
@@ -183,9 +183,9 @@
183
183
  color: var(--xh-fg-disabled);
184
184
  }
185
185
 
186
- /* 序号圆点:未开始使用中性面,当前步骤实心强调,已完成步骤中性面上画品牌对号(§7.3)。 */
186
+ /* 序号圆点:未开始使用中性面,当前步骤实心强调,已完成步骤中性面上画品牌对号。 */
187
187
  [data-scope='steps'][data-part='indicator'] {
188
- /* 圆点里的字形是指示符(§6.5):对号按指示符档取尺、随密度换档(comfortable 16 / compact 14),
188
+ /* 圆点里的字形是指示符:对号按指示符档取尺、随密度换档(comfortable 16 / compact 14),
189
189
  不读 root 上只管作者标题 / 说明图标的 --xh-steps-icon-size;作者塞进圆点的 XhIcon 与兜底对号同一把尺。
190
190
  圆点自己走 space / control-h 的尺(最小 28px),不随密度,两档字形在三档圆点里都留得出边距 */
191
191
  --xh-icon-size: var(--xh-steps-indicator-mark-size, var(--xh-control-indicator-size));
@@ -217,8 +217,8 @@
217
217
  display: none;
218
218
  }
219
219
 
220
- /* 圆点是格状当前的标记(§4.1 / §7.3),但不是激活宿主:宿主是投影了 row 档的触发器;圆点在宿主的
221
- :hover / :is(:active, [data-pressed]) 下读宿主 host 槽的同一来源换面,同一时间线,不缩放(§9.2)——
220
+ /* 圆点是格状当前的标记,但不是激活宿主:宿主是投影了 row 档的触发器;圆点在宿主的
221
+ :hover / :is(:active, [data-pressed]) 下读宿主 host 槽的同一来源换面,同一时间线,不缩放——
222
222
  圆点自己是 100 的淡底,坐在触发器的 hover 面(100)上,再上一档到 200 才与承载面分得开,按下到 300;
223
223
  当前步的实心面按下换语气 active 档 */
224
224
  [data-scope='steps'][data-part='trigger']:hover:not([data-disabled])
@@ -253,7 +253,7 @@
253
253
  box-shadow: var(--xh-steps-indicator-shadow, var(--xh-_steps-highlight));
254
254
  }
255
255
 
256
- /* 走过的步:中性淡底(透明边位,§8.3)承一枚品牌色对号;标了语气的步对号跟语气的前景走 */
256
+ /* 走过的步:中性淡底(透明边位)承一枚品牌色对号;标了语气的步对号跟语气的前景走 */
257
257
  [data-scope='steps'][data-part='indicator'][data-state='completed'] {
258
258
  border-color: var(--xh-steps-indicator-border-completed, transparent);
259
259
  background: var(--xh-steps-indicator-bg-completed, var(--xh-bg-subtle));
@@ -307,7 +307,7 @@
307
307
  color: var(--xh-steps-title-fg-toned, var(--xh-_steps-accent-text));
308
308
  }
309
309
 
310
- /* 说明走说明角色(§6.4):13 / fg-muted / leading-normal,不随 size 档 */
310
+ /* 说明走说明角色:13 / fg-muted / leading-normal,不随 size 档 */
311
311
  [data-scope='steps'][data-part='description'] {
312
312
  grid-column: 2;
313
313
  color: var(--xh-steps-description-fg, var(--xh-fg-muted));
package/css/switch.css CHANGED
@@ -41,9 +41,9 @@
41
41
  --xh-_switch-track-bg-pressed: var(--xh-switch-bg-pressed, var(--xh-_switch-track-bg));
42
42
  --xh-_switch-fg: var(--xh-switch-fg, var(--xh-fg-default));
43
43
 
44
- /* 轨道接 Action Control text 档(§9.1 定尺轨道):悬停 / 按下 / 禁用面、0.97 缩放与换底、粗指针热区、
44
+ /* 轨道接 Action Control text 档(定尺轨道):悬停 / 按下 / 禁用面、0.97 缩放与换底、粗指针热区、
45
45
  焦点环与过渡由家族配方给,这里只把轨道的私有槽映射到桥接槽。轨道没有实描边(边界以内描边画,不吃行程),
46
- 边位映射 transparent 并把 border 宽度归零;内描边经 shadow 通道各态同一支。悬停不换面(§7.2 阶梯只给按下) */
46
+ 边位映射 transparent 并把 border 宽度归零;内描边经 shadow 通道各态同一支。悬停不换面(阶梯只给按下) */
47
47
  --xh-action-visual-size: var(--xh-_switch-track-h);
48
48
  --xh-action-min-inline-size: calc(var(--xh-_switch-track-h) * 2 - var(--xh-_switch-pad) * 2);
49
49
  --xh-action-padding-inline: var(--xh-_switch-pad);
@@ -89,7 +89,7 @@
89
89
 
90
90
  /* 只读:值仍要读得清、也仍会随表单提交,所以不压对比度、也不借禁用那档灰。
91
91
  变的是"动不动得了":指针不摆手型、按下不缩放不换底(家族的按压块由这里的映射钉回静息面),
92
- 选中档的轨道退回未选中那一档的中性底(§7.2 交互态的底只从语义面派生),
92
+ 选中档的轨道退回未选中那一档的中性底(交互态的底只从语义面派生),
93
93
  滑块收掉那层抬起的投影——投影是"这颗按得动"的信号。与文本框只读那一档同口径(压低底色而非置灰)。
94
94
  滑块停在哪一端不受影响,值本身仍由位置这条非颜色通道读出。 */
95
95
  [data-scope='switch'][data-part='root'][data-readonly]:not([data-disabled]) {
@@ -126,7 +126,7 @@
126
126
  box-shadow: var(--xh-switch-thumb-shadow-readonly, none);
127
127
  }
128
128
 
129
- /* 禁用(§7.2):不靠 opacity——轨道退回 --xh-bg-subtle 底 + --xh-border-default 内描边,滑块前景置灰;
129
+ /* 禁用:不靠 opacity——轨道退回 --xh-bg-subtle 底 + --xh-border-default 内描边,滑块前景置灰;
130
130
  选中的禁用轨道同样退回中性面,值由滑块位置读出。面与手型由家族的禁用块按映射给 */
131
131
  [data-scope='switch'][data-part='root'][data-disabled] {
132
132
  --xh-_switch-track-border: var(--xh-switch-border-disabled, var(--xh-border-default));
@@ -163,7 +163,7 @@
163
163
  }
164
164
  }
165
165
 
166
- /* 滑块是 raised 抬起面(§5.3 可拖起部件,逐部件登记):--xh-bg-surface-raised 底 + --xh-border-default 描边 +
166
+ /* 滑块是 raised 抬起面(可拖起部件,逐部件登记):--xh-bg-surface-raised 底 + --xh-border-default 描边 +
167
167
  --xh-elevation-raised 影,无顶光;描边必须在,影只是加成 */
168
168
  [data-scope='switch'][data-part='thumb'] {
169
169
  position: relative;
@@ -233,13 +233,13 @@
233
233
  block-size: 60%;
234
234
  border: var(--xh-stroke-thin) solid transparent;
235
235
  border-block-start-color: var(--xh-switch-loading-fg, var(--xh-_switch-accent));
236
- /* 加载环是等宽高的圆(§6.3 全部加载环取 circle) */
236
+ /* 加载环是等宽高的圆(全部加载环取 circle) */
237
237
  border-radius: var(--xh-shape-circle);
238
238
  animation: xh-switch-rotate var(--xh-switch-loading-duration, var(--xh-spin-duration)) var(--xh-motion-ease-loop) infinite;
239
239
  }
240
240
 
241
241
  /* —— 带文字的整行:<label> 包住控件与文字,与 checkbox 的标签、checkbox-group 的条目同一副样子 ——
242
- 文字是控件自己的文字,字号随 size 档取 --xh-control-font-*(§6.4 控件字号随档);
242
+ 文字是控件自己的文字,字号随 size 档取 --xh-control-font-*(控件字号随档);
243
243
  行高取正文档,长文字可以自然换行 */
244
244
  [data-scope='switch'][data-part='label'] {
245
245
  --xh-_switch-label-font-size: var(--xh-control-font-md);
@@ -261,7 +261,7 @@
261
261
  --xh-_switch-label-font-size: var(--xh-control-font-lg);
262
262
  }
263
263
 
264
- /* 禁用标签色统一 --xh-fg-subtle(§6.4) */
264
+ /* 禁用标签色统一 --xh-fg-subtle */
265
265
  [data-scope='switch'][data-part='label'][data-disabled] {
266
266
  color: var(--xh-switch-label-fg-disabled, var(--xh-fg-subtle));
267
267
  cursor: not-allowed;
package/css/table.css CHANGED
@@ -35,7 +35,7 @@
35
35
  既不让页面上的层号插进来,也不让它们漏出去压住别人 */
36
36
  isolation: isolate;
37
37
 
38
- /* 作者放进单元格、列头与把手里的图标按档取尺,缺省 md(§6.5);表体行上的由家族随 data-xh-collection-size 下发。
38
+ /* 作者放进单元格、列头与把手里的图标按档取尺,缺省 md;表体行上的由家族随 data-xh-collection-size 下发。
39
39
  表格自绘的状态字形(排序方向、勾、半选杠、展开方向)不读这支:它们是指示符,与所在的方盒同走
40
40
  --xh-control-indicator-* 一族——五颗把手在自己身上把 --xh-icon-size 改接到方盒的尺,排序钮那支叫 --xh-table-sort-size */
41
41
  --xh-icon-size: var(--xh-table-icon-size, var(--xh-glyph-size-md));
@@ -179,7 +179,7 @@
179
179
  outline: none;
180
180
  }
181
181
 
182
- /* 表头是淡底承载面:里头的触发器按淡底阶梯走(hover 200 → pressed 300),阶梯由 host 槽向内下发(§7.2);
182
+ /* 表头是淡底承载面:里头的触发器按淡底阶梯走(hover 200 → pressed 300),阶梯由 host 槽向内下发;
183
183
  排序钮是 ghost 图标钮,悬停 / 按下面就从这两支 host 槽取 */
184
184
  [data-scope='table'][data-part='header'] {
185
185
  --xh-action-host-bg-hover: var(--xh-bg-subtle-hover);
@@ -203,7 +203,7 @@
203
203
  font-weight: var(--xh-table-footer-font-weight, var(--xh-font-weight-medium));
204
204
  }
205
205
 
206
- /* 表体行走 Collection Item 的 page 语境(页内持久集合,§7.3):悬停 / 高亮 / 按下面(白底承载 hover 100 →
206
+ /* 表体行走 Collection Item 的 page 语境(页内持久集合):悬停 / 高亮 / 按下面(白底承载 hover 100 →
207
207
  pressed 200)与选中面(品牌淡底 + 淡底前景,selected+hover 20% / +pressed 28%)由家族按 aria-selected /
208
208
  aria-disabled 给出,标记由行首的勾选把手承担。这里只把公开槽映射到桥接槽,并逐项盖掉家族的行盒几何:
209
209
  行是 flex 容器(列宽由单元格的内联尺寸决定,不进家族网格)、不内衬、不圆角、字号与光标随表格本身
@@ -372,7 +372,7 @@
372
372
  }
373
373
 
374
374
  /* 五个把手共用一副方形盒子,两种行的文字起点才对得齐;列设置区那颗与表头里的选择框同款,一眼看得出是同一件事。
375
- 五颗都接 Action Control icon 档(§9.1 定尺方框):盒型、悬停 / 按下 / 禁用面、0.97 缩放与换底、焦点环与过渡由家族
375
+ 五颗都接 Action Control icon 档(定尺方框):盒型、悬停 / 按下 / 禁用面、0.97 缩放与换底、焦点环与过渡由家族
376
376
  配方给,这里只把使用者槽映射到桥接槽;边长仍按 --xh-control-indicator-size 走。三颗勾选框是 outline 形态
377
377
  (字段静息形态:透明底 + --xh-border-control 描边),展开箭头与排序钮是 ghost;空框与箭头坐在白底行上,
378
378
  按下落 200 档,已勾选的品牌实心面按下派生 active 面;排序钮坐在表头淡底上,阶梯另由 host 槽给(见下) */
@@ -422,7 +422,7 @@
422
422
  }
423
423
  }
424
424
 
425
- /* 盒里的字形是指示符(§6.5):这四颗把手各自把 --xh-icon-size 改接到方盒的尺上,兜底字形与作者塞进盒里的
425
+ /* 盒里的字形是指示符:这四颗把手各自把 --xh-icon-size 改接到方盒的尺上,兜底字形与作者塞进盒里的
426
426
  XhIcon 读同一把尺,root 那支只管作者放进单元格与把手里图标的 --xh-table-icon-size 不流进来。
427
427
  三颗勾选框的勾与半选杠按方盒边长 × 0.75,与 Checkbox 的 --xh-_checkbox-glyph、Tree 勾选把手同一比例;
428
428
  展开箭头的 chevron 与方盒同边长,同 Tree 的 branch-trigger */
@@ -525,7 +525,7 @@
525
525
  mask: var(--xh-glyph-mark-minus) center / contain no-repeat;
526
526
  }
527
527
 
528
- /* 禁用(§7.2 第 9 条):--xh-border-default 描边 + --xh-bg-subtle 底,勾藏起来;家族的禁用块按映射给 */
528
+ /* 禁用:--xh-border-default 描边 + --xh-bg-subtle 底,勾藏起来;家族的禁用块按映射给 */
529
529
  [data-scope='table'][data-part='select-all-trigger'][data-disabled],
530
530
  [data-scope='table'][data-part='column-visibility-trigger'][data-disabled],
531
531
  [data-scope='table'][data-part='row-select-trigger'][data-disabled] {
@@ -576,7 +576,7 @@
576
576
  outline: none;
577
577
  }
578
578
 
579
- /* 排序钮是列头里独立的定尺图标钮(§9.1):不包列名,列名留在列头上、它排在列名之后,auto 外边距把它
579
+ /* 排序钮是列头里独立的定尺图标钮:不包列名,列名留在列头上、它排在列名之后,auto 外边距把它
580
580
  推到行尾侧与列宽把手并排。盒型与 0.97 按压由家族 icon 档给(见五颗把手共用块);坐在表头淡底上,
581
581
  悬停 / 按下面按 header 的 host 槽下发的阶梯走(hover 200 → pressed 300),不取白底行那档。
582
582
  箭头静息取 subtle 前景,参与排序的列换成默认前景(见字形块) */
@@ -846,7 +846,7 @@
846
846
  悬停恒真,而悬停那条是 0-6-0、选中那条是 0-3-0,少写一层祖先这块淡底就会被那两档盖掉。
847
847
  禁用的行不接换父落点,:not([data-disabled]) 不会漏画任何一处高亮 */
848
848
  [data-scope='table'][data-part='root'] [data-scope='table'][data-part='body'] > [data-scope='table'][data-part='row'][data-drop='inside']:not([data-disabled]) {
849
- /* 落点不是选中:品牌淡底专属选中(§7.1),落点面取悬停之上一档的中性面 */
849
+ /* 落点不是选中:品牌淡底专属选中,落点面取悬停之上一档的中性面 */
850
850
  background: var(--xh-table-drop-inside-bg, var(--xh-bg-subtle-hover));
851
851
  }
852
852
 
@@ -880,7 +880,7 @@
880
880
  }
881
881
 
882
882
  /* 排序方向用箭头字形表出来:aria-sort 只报给读屏,视觉侧也得有对应的东西。
883
- 箭头是指示符(§6.5):尺寸读钮自己改接过的 --xh-icon-size(--xh-table-sort-size,缺省与方盒同边长),
883
+ 箭头是指示符:尺寸读钮自己改接过的 --xh-icon-size(--xh-table-sort-size,缺省与方盒同边长),
884
884
  与同一表头里的勾选框方盒、列拖拽把手同走 --xh-control-indicator-size,按图标档取的 20px 会比
885
885
  16px 的方盒与列头文字都大一圈。:empty 守卫同展开箭头:作者塞了自己的图标就整个顶掉兜底;
886
886
  flex: none 是因为 ghost 那圈透明描边仍占位,不钉住的话与盒同边长的箭头会被挤窄一个描边。
@@ -988,7 +988,7 @@
988
988
  }
989
989
 
990
990
  /* 取下一页的按钮:铺满一行摆在表尾——铺满一行的独立动作条目,接 Action Control 的 row 档、
991
- ghost 形态(§9.2):宽度由容器给、高度随内容、按下只换面不缩放;盒几何、悬停 / 按下 / 禁用面、
991
+ ghost 形态:宽度由容器给、高度随内容、按下只换面不缩放;盒几何、悬停 / 按下 / 禁用面、
992
992
  焦点环与粗指针热区全由家族给,白底承载 hover 100 → pressed 200。
993
993
  这里只把使用者槽映射到桥接槽并把文案居中:它是一行里唯一的东西,靠起始缘会像一条没对齐的行 */
994
994
  [data-scope='table'][data-part='load-more-trigger'] {
@@ -1004,7 +1004,7 @@
1004
1004
 
1005
1005
  justify-content: center;
1006
1006
  text-align: center;
1007
- /* row 档允许换行、高度随内容,折行的文案走正文行高(§6.4) */
1007
+ /* row 档允许换行、高度随内容,折行的文案走正文行高 */
1008
1008
  line-height: var(--xh-leading-normal);
1009
1009
  }
1010
1010
 
package/css/tabs.css CHANGED
@@ -25,7 +25,7 @@
25
25
  /* 缺省是 line 变体:透明标签带,选中项由文字与底部指示条表达。Web Components 升级前还没有
26
26
  data-variant,这组几何基础值也必须画成相同结果,避免定义完成时闪换样式;line 档的面与字色由家族
27
27
  按升级后写入的家族角色给,升级前那一帧只有几何没有面色(与 side-nav / menu 同)。
28
- 悬停与按下的面按承载面分档(§7.2):line 档经家族走白底承载 hover 100 → pressed 200;card 坐在
28
+ 悬停与按下的面按承载面分档:line 档经家族走白底承载 hover 100 → pressed 200;card 坐在
29
29
  画布上 hover 100 → pressed 200;segment 坐在淡底轨道里 hover 200 → pressed 300。card / segment 的
30
30
  六支面槽只在各自形态块里赋值,line 档不消费它们 */
31
31
  --xh-_tabs-list-gap: var(--xh-space-0);
@@ -87,7 +87,7 @@
87
87
  }
88
88
 
89
89
  /* 卡片式:基线收掉,选中的那张标签自己成为一张有描边有底的卡片,顶边一条指示条。
90
- 标签坐在画布上,悬停 100 → 按下 200(§7.2 白底承载) */
90
+ 标签坐在画布上,悬停 100 → 按下 200(白底承载) */
91
91
  [data-scope='tabs'][data-part='root'][data-variant='card'] {
92
92
  --xh-_tabs-list-gap: var(--xh-control-gap-md);
93
93
  --xh-_tabs-list-bg: transparent;
@@ -106,7 +106,7 @@
106
106
  --xh-_tabs-accent-text: var(--xh-_tone-fg, var(--xh-fg-default));
107
107
  }
108
108
 
109
- /* 分段式(§7.3 有滑块开关):淡底轨道承载一块白色抬起的选中面,选中文字保持默认字色。
109
+ /* 分段式(有滑块开关):淡底轨道承载一块白色抬起的选中面,选中文字保持默认字色。
110
110
  未选中标签坐在淡底轨道里,悬停 200 → 按下 300;选中面自己不再叠悬停 / 按下态。
111
111
  选中面的三件(surface-raised 底、border-default 描边、raised 影)写在下面标签自己的规则里 */
112
112
  [data-scope='tabs'][data-part='root'][data-variant='segment'] {
@@ -171,8 +171,8 @@
171
171
  translate: 0 var(--xh-_tabs-scroll);
172
172
  }
173
173
 
174
- /* segment 档的标签带是一块淡底面:--xh-bg-subtle 底 + 一圈透明占位边 + 无影(§8.3 三选一)。
175
- 它同时是标签的淡底承载面,向内下发 hover 200 → pressed 300 的承载阶梯(§7.2);
174
+ /* segment 档的标签带是一块淡底面:--xh-bg-subtle 底 + 一圈透明占位边 + 无影(三选一)。
175
+ 它同时是标签的淡底承载面,向内下发 hover 200 → pressed 300 的承载阶梯;
176
176
  只写在标签带上不写在 root 上:内容面板里的按钮坐在画布上,不该跟着抬一档 */
177
177
  [data-scope='tabs'][data-part='root'][data-variant='segment'] [data-scope='tabs'][data-part='list'] {
178
178
  --xh-action-host-bg-hover: var(--xh-bg-subtle-hover);
@@ -202,9 +202,9 @@
202
202
  min-inline-size: auto;
203
203
  }
204
204
 
205
- /* line 档(§7.3 导航当前页):把公开槽映射到 Collection Item 的 nav 语境桥接槽。静息 muted / regular,
205
+ /* line 档(导航当前页):把公开槽映射到 Collection Item 的 nav 语境桥接槽。静息 muted / regular,
206
206
  悬停 100 + default 字,按下 200 只换面;当前页透明面 + 品牌深字(随语气的 --xh-_tabs-accent-text)+
207
- medium,叠悬停 100(§9.3)。2px 指示线不由家族按条目画:放了 indicator 部件是 list 上的滑动部件,
207
+ medium,叠悬停 100。2px 指示线不由家族按条目画:放了 indicator 部件是 list 上的滑动部件,
208
208
  没放则由下面的静态线规则画在选中标签自己身上。高度由 block-size 定,块向内边距归零 */
209
209
  [data-scope='tabs'][data-part='root'][data-variant='line'] [data-scope='tabs'][data-part='trigger'] {
210
210
  --xh-collection-block-padding: var(--xh-space-0);
@@ -228,7 +228,7 @@
228
228
  color: var(--xh-tabs-trigger-fg, var(--xh-fg-muted));
229
229
  font-weight: var(--xh-tabs-trigger-font-weight, var(--xh-text-label-weight));
230
230
  cursor: pointer;
231
- /* 标签是铺开的一段(§9.2 Tabs trigger 归行级),按下只换面不缩放:transition 里没有 scale */
231
+ /* 标签是铺开的一段(Tabs trigger 归行级),按下只换面不缩放:transition 里没有 scale */
232
232
  transition:
233
233
  color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
234
234
  background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
@@ -257,7 +257,7 @@
257
257
  }
258
258
 
259
259
  /* 按下去要有回应:card / segment 档的未选中标签换到按下面(card 200、segment 300),几何不动。
260
- 选中标签不叠按下面:card 的卡片面与 segment 的抬起面本身就是选中身份(§7.3 有滑块开关无叠加态) */
260
+ 选中标签不叠按下面:card 的卡片面与 segment 的抬起面本身就是选中身份(有滑块开关无叠加态) */
261
261
  [data-scope='tabs'][data-part='root']:is([data-variant='card'], [data-variant='segment'])
262
262
  [data-scope='tabs'][data-part='trigger']:not([data-disabled]):not([data-state='active']):is(:active, [data-pressed]) {
263
263
  background: var(--xh-tabs-trigger-bg-pressed, var(--xh-_tabs-trigger-bg-pressed));
@@ -276,7 +276,7 @@
276
276
  font-weight: var(--xh-tabs-trigger-font-weight-active, var(--xh-font-weight-medium));
277
277
  }
278
278
 
279
- /* segment 档的选中标签就是那块白色抬起的滑块面(§7.3 有滑块开关):surface-raised 底 +
279
+ /* segment 档的选中标签就是那块白色抬起的滑块面(有滑块开关):surface-raised 底 +
280
280
  border-default 描边 + raised 影三件写在标签自己身上。标签带里放了 indicator 部件时,
281
281
  这块面搬到部件上跟着滑(见下面的 indicator 规则),标签自己透空、只留字 */
282
282
  [data-scope='tabs'][data-part='root'][data-variant='segment']
@@ -477,7 +477,7 @@
477
477
  display: none;
478
478
  }
479
479
 
480
- /* segment 档(§7.3 有滑块开关):部件就是那块白色抬起的滑块面,四个几何量都取、整块跟着滑——
480
+ /* segment 档(有滑块开关):部件就是那块白色抬起的滑块面,四个几何量都取、整块跟着滑——
481
481
  surface-raised 底 + border-default 描边 + raised 影三件与 Segmented 的滑块同一套;
482
482
  描边吃进盒里(border-box),面与标签仍是同一块矩形。标签压在它上面,点击一律交给标签。
483
483
  用连续档而不是进场那条:滑块是被推过去的,起步就该有速度;四个几何量同时走,标签宽不等时才不会先变形再挪位 */
@@ -501,7 +501,7 @@
501
501
  block-size var(--xh-motion-duration-enter) var(--xh-motion-ease-continuous);
502
502
  }
503
503
 
504
- /* line 档没放 indicator 部件时,选中标签自画一条静态指示线(§7.3 导航当前页):
504
+ /* line 档没放 indicator 部件时,选中标签自画一条静态指示线(导航当前页):
505
505
  横向缺省也要像纵向示例那样有一条选中线,作者不必为了这条线多放一个部件。
506
506
  线画在选中标签的 ::after 上,以标签盒为定位参照(基础规则里已是 position: relative),
507
507
  厚度 / 颜色 / 圆角与 indicator 部件读同一组槽与缺省——作者改一处,部件与静态线一起改。
package/css/tag-group.css CHANGED
@@ -72,7 +72,7 @@
72
72
  cursor: pointer;
73
73
  }
74
74
 
75
- /* 按下去要有回应:可选的芯片是一颗定尺的离散控件(§9.1),整枚轻微下压并同时换底
75
+ /* 按下去要有回应:可选的芯片是一颗定尺的离散控件,整枚轻微下压并同时换底
76
76
  (白底承载 hover 100 → pressed 200),松手即弹回。置灰的不压;
77
77
  指针 :active 与 Headless 投影的 data-pressed 看见同一副按压面 */
78
78
  [data-scope='tag-group'][data-part='list']
@@ -106,7 +106,7 @@
106
106
  background: var(--xh-tag-group-item-bg-pressed-solid, var(--xh-_tone-active, var(--xh-bg-brand-active)));
107
107
  }
108
108
 
109
- /* 悬停与键盘锚点共用白底承载的 hover 档(§7.2:hover 100 → pressed 200):
109
+ /* 悬停与键盘锚点共用白底承载的 hover 档(hover 100 → pressed 200):
110
110
  data-highlighted 跟的是连接层记的焦点标签,与选中互相独立。
111
111
  实心标签不进这里:它的字是实心底上配对的那支前景色,换成灰底就读不出来了;
112
112
  实心档在这两档里面不换,回执落在按压缩放与聚焦环上 */
@@ -129,32 +129,8 @@
129
129
  }
130
130
 
131
131
  /* —— 选中 —— */
132
- /* 页内持久集合的选中(§7.3):品牌淡底行面 + 配对前景 + 前导对号(item-indicator),描边退到透明边位;
133
- 悬停与按下在淡底上派生 20% / 28%,键盘锚点同悬停档。
134
- 标了语气的组从语气层取同一条曲线。置灰的标签不进这里:它的边与字都已退成置灰色。
135
- 实心档另有一条:它的面本身就是那族色,淡底与配对前景压在上面都读不出来 */
136
- [data-scope='tag-group'][data-part='list']
137
- > [data-scope='tag'][data-part='root'][data-selected]:not([data-disabled]):not([data-variant='solid']) {
138
- border-color: var(--xh-tag-group-item-border-selected, transparent);
139
- background: var(--xh-tag-group-item-bg-selected, var(--xh-_tone-subtle, var(--xh-bg-brand-subtle)));
140
- color: var(--xh-tag-group-item-fg-selected, var(--xh-_tone-fg, var(--xh-fg-on-brand-subtle)));
141
- }
142
-
143
- [data-scope='tag-group'][data-part='list']
144
- > [data-scope='tag'][data-part='root'][data-selected]:not([data-disabled]):not([data-variant='solid']):is(:hover, [data-highlighted]) {
145
- background: var(--xh-tag-group-item-bg-selected-hover, var(--xh-_tone-subtle-hover, var(--xh-bg-brand-subtle-hover)));
146
- }
147
-
148
- [data-scope='tag-group'][data-part='list']
149
- > [data-scope='tag'][data-part='root'][data-selected][data-selectable]:not([data-disabled]):not([data-variant='solid']):is(:active, [data-pressed]) {
150
- background: var(--xh-tag-group-item-bg-selected-pressed, var(--xh-_tone-subtle-active, var(--xh-bg-brand-subtle-active)));
151
- }
152
-
153
- /* 实心标签选中:字不换(仍是 tag.css 给的面配对前景色,作者的 --xh-tag-fg 照旧生效),
154
- 描边取字色,在实心底上描出一圈;环由 tag.css 取 currentColor,跟着字走 */
155
- [data-scope='tag-group'][data-part='list'] > [data-scope='tag'][data-part='root'][data-variant='solid'][data-selected]:not([data-disabled]) {
156
- border-color: var(--xh-tag-group-item-border-selected, currentColor);
157
- }
132
+ /* 与树选择同一种读法:选中的标签面、字与描边都不换,悬停 / 锚点 / 按下沿用未选中的那条阶梯,
133
+ 只在文字后亮一枚对号(见下面 item-indicator 那几块) */
158
134
 
159
135
  /* 标签里那一格:文字与摘除钮排在一条线上。它是 tag 根与 tag 的 label / close-trigger 之间的一层,
160
136
  间距照抄所在标签的那一档,有它与没它标签长得一样 */
@@ -170,7 +146,8 @@
170
146
  display: none;
171
147
  }
172
148
 
173
- /* 选中标记:领在文字前面的一枚对号,与摘除钮的叉同一把随文尺(标签是纯行内文字组件);
149
+ /* 选中标记:跟在文字后面的一枚对号,与摘除钮的叉同一把随文尺(标签是纯行内文字组件);
150
+ 作者写在格里哪儿都排到文字与作者内容之后、摘除钮之前。
174
151
  作者塞进来的图标读同一支 --xh-icon-size。连接层没选中时给 hidden,UA 的 display:none 被上面的 display 盖住,
175
152
  这里压回去 */
176
153
  [data-scope='tag-group'][data-part='item-indicator'] {
@@ -178,17 +155,34 @@
178
155
 
179
156
  display: inline-flex;
180
157
  flex: none;
158
+ order: 1;
181
159
  align-items: center;
182
160
  justify-content: center;
183
161
  inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
184
162
  block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
185
- color: var(--xh-tag-group-item-indicator-fg, currentColor);
163
+ /* 与树选择的行尾对号同色:标了语气的组取语气字色,没写语气取品牌前景 */
164
+ color: var(--xh-tag-group-item-indicator-fg, var(--xh-_tone-fg, var(--xh-fg-brand)));
186
165
  }
187
166
 
188
167
  [data-scope='tag-group'][data-part='item-indicator'][hidden] {
189
168
  display: none;
190
169
  }
191
170
 
171
+ /* 实心标签的面本身就是那族色,品牌 / 语气字色压在上面读不出来:对号取面配对的那支前景色 */
172
+ [data-scope='tag'][data-part='root'][data-variant='solid'] [data-scope='tag-group'][data-part='item-indicator'] {
173
+ color: var(--xh-tag-group-item-indicator-fg, currentColor);
174
+ }
175
+
176
+ /* 置灰的标签里对号跟着字一起退成置灰色 */
177
+ [data-scope='tag-group'][data-part='item-indicator'][data-disabled] {
178
+ color: inherit;
179
+ }
180
+
181
+ /* 摘除钮是操作,排在对号之后、格的最末 */
182
+ [data-scope='tag-group'][data-part='cell'] > [data-scope='tag'][data-part='close-trigger'] {
183
+ order: 2;
184
+ }
185
+
192
186
  /* 没写内容就由皮肤画兜底对号;作者往部件里塞了自己的图形,这条即不命中 */
193
187
  [data-scope='tag-group'][data-part='item-indicator']:empty::before {
194
188
  content: '';
@@ -201,12 +195,15 @@
201
195
  }
202
196
 
203
197
  @media (forced-colors: active) {
204
- /* 选中靠淡底与配对前景表出,这一档里两者都被统一换掉;用系统高亮反色画回,前导对号是字形节点、自己活得下来 */
198
+ /* 选中只由对号表达:遮罩出来的那块底色用系统高亮色画,按下时标签整枚反成 Highlight,对号换成反白 */
199
+ [data-scope='tag-group'][data-part='item-indicator']:empty::before {
200
+ background-color: Highlight;
201
+ }
202
+
205
203
  [data-scope='tag-group'][data-part='list']
206
- > [data-scope='tag'][data-part='root'][data-selected]:not([data-disabled]):not([data-variant='solid']) {
207
- border-color: Highlight;
208
- background: Highlight;
209
- color: HighlightText;
204
+ > [data-scope='tag'][data-part='root'][data-selectable]:not([data-disabled]):not([data-variant='solid']):is(:active, [data-pressed])
205
+ [data-scope='tag-group'][data-part='item-indicator']:empty::before {
206
+ background-color: HighlightText;
210
207
  }
211
208
 
212
209
  /* 按下:常态靠底色深一档表出,这一档里底色被统一换成 Canvas;按住那一下用系统高亮反色画回来 */
@@ -216,4 +213,11 @@
216
213
  color: HighlightText;
217
214
  }
218
215
  }
216
+
217
+ @media print {
218
+ /* 打印默认丢底色,而对号是遮罩出来的一块底色:标签本就不换面,丢了它选中在纸上就没了踪影 */
219
+ [data-scope='tag-group'][data-part='item-indicator'] {
220
+ print-color-adjust: exact;
221
+ }
222
+ }
219
223
  }
package/css/tag.css CHANGED
@@ -31,7 +31,7 @@
31
31
  padding-inline: var(--xh-tag-px, var(--xh-_tag-px));
32
32
  padding-block: var(--xh-tag-py, var(--xh-_tag-py));
33
33
  border: var(--xh-stroke-thin) solid var(--xh-tag-border, var(--xh-material-soft-border));
34
- /* 状态 chip 的身份是胶囊(§6.3 pill 只给状态 chip 与一维对象) */
34
+ /* 状态 chip 的身份是胶囊(pill 只给状态 chip 与一维对象) */
35
35
  border-radius: var(--xh-tag-radius, var(--xh-shape-pill));
36
36
  background: var(--xh-tag-bg, var(--xh-material-soft-bg));
37
37
  box-shadow: var(--xh-tag-shadow, var(--xh-material-soft-shadow));
@@ -112,7 +112,7 @@
112
112
  transition-timing-function: var(--xh-motion-ease-press);
113
113
  }
114
114
 
115
- /* 按住的叉落着焦点(§9.3 focus-visible + pressed 保留焦点环):按压面是从字色兑出的 22% 底,
115
+ /* 按住的叉落着焦点(focus-visible + pressed 保留焦点环):按压面是从字色兑出的 22% 底,
116
116
  压在淡底 / 选中面上把面往字色那头带了一档,默认环与这块混色面在浅色档上只剩 2.2–2.9。
117
117
  环改取叉自己的字色:按压面正是从这支色兑出来的,字色压在它上面的对比与字压在标签面上同源,
118
118
  六族语气与深浅两态都过 3:1;实心档本来就取字色,这条与它同一口径 */
@@ -321,8 +321,6 @@
321
321
  }
322
322
 
323
323
  [data-scope='time-picker'][data-part='content'][data-state='open'] {
324
- /* 只在展开态挂着:随状态属性一起消失,不长期占着合成层 */
325
- will-change: opacity, translate;
326
324
  animation: xh-overlay-slide-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
327
325
  }
328
326
 
@@ -360,8 +360,6 @@
360
360
  }
361
361
 
362
362
  [data-scope='time-range-picker'][data-part='content'][data-state='open'] {
363
- /* 只在展开态挂着:随状态属性一起消失,不长期占着合成层 */
364
- will-change: opacity, translate;
365
363
  animation: xh-overlay-slide-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
366
364
  }
367
365
 
package/css/toast.css CHANGED
@@ -107,9 +107,9 @@
107
107
  }
108
108
 
109
109
  /* 中性浮层承载整条反馈,语气只落到状态字形和标题。
110
- 面走 sheet 三件套(§8.4:--xh-material-elevated-bg / -border / -shadow,亮暗两档同有 1px 描边)。 */
110
+ 面走 sheet 三件套(--xh-material-elevated-bg / -border / -shadow,亮暗两档同有 1px 描边)。 */
111
111
  [data-scope='toast'][data-part='root'] {
112
- /* 作者塞进指示符槽的图标与皮肤画的兜底字形同一把尺:Feedback 指示符统一 md 档(§6.5) */
112
+ /* 作者塞进指示符槽的图标与皮肤画的兜底字形同一把尺:Feedback 指示符统一 md 档 */
113
113
  --xh-icon-size: var(--xh-toast-icon-size, var(--xh-glyph-size-md));
114
114
 
115
115
  --xh-toast-y: var(--xh-toast-offset-collapsed, 0px);
@@ -356,7 +356,7 @@
356
356
  }
357
357
 
358
358
  /* 操作钮是带文案的离散动作钮:盒几何、悬停 / 按下与 0.97 按压、粗指针热区、焦点环、禁用面全由 Action Control
359
- 的 text outline 档给(连接层投 sm;非 Button 的触发器缺省中性描边、透明底,§7.2.2),组件只映射既有使用者槽。
359
+ 的 text outline 档给(连接层投 sm;非 Button 的触发器缺省中性描边、透明底),组件只映射既有使用者槽。
360
360
  语气只落到状态字形和标题:这颗钮坐在带 data-tone 的条子里,底 / 边 / 字钉在中性语义面上,不随语气;
361
361
  条子是 sheet 白面承载:hover --xh-bg-subtle(100)→ pressed --xh-bg-subtle-hover(200)。
362
362
  条子是单行 flex,按钮不参与伸缩:文案长了该换行的是文字 */
@@ -30,8 +30,8 @@
30
30
  /* 形态的落点:没写 data-variant 时这十支保持缺省档的取值,段的规则读的是
31
31
  「使用者令牌 → 这十支 → 语义令牌」三级,使用者令牌永远排在形态之前。
32
32
  未选中那五支管段的壳,选中那五支管当前值那一段。
33
- 缺省档(subtle)的段坐在自己的淡底面上,悬停 200 → 按下 300(§7.2 淡底承载);
34
- 选中段是无滑块开关(§7.3):品牌淡底 + 淡底前景,悬停 20% → 按下 28% */
33
+ 缺省档(subtle)的段坐在自己的淡底面上,悬停 200 → 按下 300(淡底承载);
34
+ 选中段是无滑块开关:品牌淡底 + 淡底前景,悬停 20% → 按下 28% */
35
35
  --xh-_toggle-group-item-bg: var(--xh-bg-subtle);
36
36
  --xh-_toggle-group-item-bg-hover: var(--xh-bg-subtle-hover);
37
37
  --xh-_toggle-group-item-bg-active: var(--xh-bg-subtle-active);
@@ -96,7 +96,7 @@
96
96
  --xh-_toggle-group-item-highlight-on: none;
97
97
  }
98
98
 
99
- /* outline 与 ghost 的段坐在画布上:悬停 100 → 按下 200(§7.2 白底承载) */
99
+ /* outline 与 ghost 的段坐在画布上:悬停 100 → 按下 200(白底承载) */
100
100
  [data-scope='toggle-group'][data-part='root'][data-variant='outline'] {
101
101
  --xh-_toggle-group-item-bg: transparent;
102
102
  --xh-_toggle-group-item-bg-hover: var(--xh-_tone-subtle, var(--xh-bg-subtle));
@@ -258,7 +258,7 @@
258
258
 
259
259
  /* 选中态:单选是 role=radio + aria-checked,多选是原生按钮 + aria-pressed,
260
260
  两套 ARIA 各出一半,样式一条都对不上——只有 data-state 是两种模式共同的出口。
261
- 无滑块开关(§7.3):品牌淡底 + 淡底前景,悬停 20% → 按下 28%,三态都经桥接槽交给家族画;
261
+ 无滑块开关:品牌淡底 + 淡底前景,悬停 20% → 按下 28%,三态都经桥接槽交给家族画;
262
262
  用哪族颜色由 data-tone 决定:语气槽沿继承流下来,root 自己写了 tone 算、
263
263
  整组落在语气容器里也算;没有语气就退回品牌配色,与不接语气时逐值相同。
264
264
  使用者令牌排在语气之前:写了组件槽就以它为准。