@xihan-ui/styles 3.2.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +441 -0
- package/component-tokens.d.ts +229 -60
- package/components.tokens.json +5124 -1555
- package/css/accordion.css +47 -20
- package/css/alert.css +14 -15
- package/css/anchor.css +2 -2
- package/css/approval.css +37 -13
- package/css/avatar-group.css +9 -12
- package/css/avatar.css +20 -18
- package/css/back-top.css +21 -7
- package/css/badge.css +5 -5
- package/css/breadcrumb.css +18 -16
- package/css/button-group.css +4 -6
- package/css/button.css +4 -7
- package/css/calendar-picker.css +177 -94
- package/css/calendar-range-picker.css +206 -121
- package/css/card.css +34 -6
- package/css/carousel.css +65 -49
- package/css/cascader.css +41 -29
- package/css/checkbox-group.css +9 -6
- package/css/checkbox.css +5 -4
- package/css/citation.css +7 -2
- package/css/clipboard.css +20 -4
- package/css/collapsible.css +29 -14
- package/css/color-field.css +4 -4
- package/css/color-picker.css +77 -23
- package/css/color-slider.css +10 -8
- package/css/color-swatch-picker.css +5 -5
- package/css/combobox.css +14 -10
- package/css/command.css +13 -8
- package/css/context-menu.css +10 -5
- package/css/date-field.css +4 -4
- package/css/date-picker.css +165 -102
- package/css/date-range-picker.css +186 -123
- package/css/description.css +10 -6
- package/css/descriptions.css +47 -19
- package/css/dialog.css +50 -35
- package/css/drawer.css +75 -21
- package/css/editable.css +15 -41
- package/css/empty-state.css +21 -3
- package/css/field-array.css +4 -1
- package/css/field.css +17 -18
- package/css/fieldset.css +33 -13
- package/css/file-upload.css +65 -32
- package/css/float-button.css +25 -15
- package/css/floating-panel.css +1 -1
- package/css/form.css +24 -10
- package/css/grid-list.css +1 -1
- package/css/highlight.css +4 -4
- package/css/hover-card.css +19 -12
- package/css/image-viewer.css +77 -27
- package/css/image.css +12 -4
- package/css/infinite-scroll.css +8 -4
- package/css/input-group.css +74 -26
- package/css/kbd.css +1 -1
- package/css/label.css +27 -11
- package/css/layout.css +17 -10
- package/css/list.css +13 -9
- package/css/listbox.css +12 -7
- package/css/loading-bar.css +3 -0
- package/css/mention.css +10 -8
- package/css/menu.css +10 -5
- package/css/menubar.css +13 -8
- package/css/navigation-menu.css +2 -2
- package/css/notification.css +114 -31
- package/css/number-animation.css +2 -2
- package/css/number-field.css +60 -37
- package/css/page-header.css +63 -26
- package/css/pagination.css +35 -38
- package/css/password-input.css +10 -66
- package/css/pin-input.css +18 -26
- package/css/popconfirm.css +20 -11
- package/css/popover.css +18 -12
- package/css/progress.css +14 -13
- package/css/prompt-input.css +3 -3
- package/css/question-flow.css +33 -7
- package/css/radio-group.css +120 -55
- package/css/rating.css +31 -14
- package/css/select.css +14 -10
- package/css/separator.css +22 -4
- package/css/side-nav.css +16 -11
- package/css/signature-pad.css +23 -9
- package/css/skeleton.css +7 -7
- package/css/slider.css +71 -42
- package/css/sparkline.css +8 -2
- package/css/spinner.css +40 -20
- package/css/statistic.css +14 -14
- package/css/steps.css +115 -84
- package/css/switch.css +9 -7
- package/css/table.css +27 -10
- package/css/tabs.css +35 -12
- package/css/tag-group.css +17 -6
- package/css/tag.css +54 -29
- package/css/tags-input.css +38 -19
- package/css/text-field.css +5 -5
- package/css/time-field.css +4 -4
- package/css/time-picker.css +150 -64
- package/css/time-range-picker.css +91 -62
- package/css/timeline.css +37 -20
- package/css/timer.css +3 -3
- package/css/toggle-group.css +4 -4
- package/css/tool-call.css +6 -4
- package/css/toolbar.css +6 -5
- package/css/tooltip.css +15 -16
- package/css/tour.css +14 -7
- package/css/transfer.css +22 -16
- package/css/tree-select.css +10 -10
- package/css/tree.css +26 -25
- package/css/typography.css +28 -25
- package/dist/css/accordion.css +47 -20
- package/dist/css/alert.css +14 -15
- package/dist/css/anchor.css +2 -2
- package/dist/css/approval.css +37 -13
- package/dist/css/avatar-group.css +9 -12
- package/dist/css/avatar.css +20 -18
- package/dist/css/back-top.css +21 -7
- package/dist/css/badge.css +5 -5
- package/dist/css/breadcrumb.css +18 -16
- package/dist/css/button-group.css +4 -6
- package/dist/css/button.css +4 -7
- package/dist/css/calendar-picker.css +177 -94
- package/dist/css/calendar-range-picker.css +206 -121
- package/dist/css/card.css +34 -6
- package/dist/css/carousel.css +65 -49
- package/dist/css/cascader.css +41 -29
- package/dist/css/checkbox-group.css +9 -6
- package/dist/css/checkbox.css +5 -4
- package/dist/css/citation.css +7 -2
- package/dist/css/clipboard.css +20 -4
- package/dist/css/collapsible.css +29 -14
- package/dist/css/color-field.css +4 -4
- package/dist/css/color-picker.css +77 -23
- package/dist/css/color-slider.css +10 -8
- package/dist/css/color-swatch-picker.css +5 -5
- package/dist/css/combobox.css +14 -10
- package/dist/css/command.css +13 -8
- package/dist/css/context-menu.css +10 -5
- package/dist/css/date-field.css +4 -4
- package/dist/css/date-picker.css +165 -102
- package/dist/css/date-range-picker.css +186 -123
- package/dist/css/description.css +10 -6
- package/dist/css/descriptions.css +47 -19
- package/dist/css/dialog.css +50 -35
- package/dist/css/drawer.css +75 -21
- package/dist/css/editable.css +15 -41
- package/dist/css/empty-state.css +21 -3
- package/dist/css/field-array.css +4 -1
- package/dist/css/field.css +17 -18
- package/dist/css/fieldset.css +33 -13
- package/dist/css/file-upload.css +65 -32
- package/dist/css/float-button.css +25 -15
- package/dist/css/floating-panel.css +1 -1
- package/dist/css/form.css +24 -10
- package/dist/css/grid-list.css +1 -1
- package/dist/css/highlight.css +4 -4
- package/dist/css/hover-card.css +19 -12
- package/dist/css/image-viewer.css +77 -27
- package/dist/css/image.css +12 -4
- package/dist/css/infinite-scroll.css +8 -4
- package/dist/css/input-group.css +74 -26
- package/dist/css/kbd.css +1 -1
- package/dist/css/label.css +27 -11
- package/dist/css/layout.css +17 -10
- package/dist/css/list.css +13 -9
- package/dist/css/listbox.css +12 -7
- package/dist/css/loading-bar.css +3 -0
- package/dist/css/mention.css +10 -8
- package/dist/css/menu.css +10 -5
- package/dist/css/menubar.css +13 -8
- package/dist/css/navigation-menu.css +2 -2
- package/dist/css/notification.css +114 -31
- package/dist/css/number-animation.css +2 -2
- package/dist/css/number-field.css +60 -37
- package/dist/css/page-header.css +63 -26
- package/dist/css/pagination.css +35 -38
- package/dist/css/password-input.css +10 -66
- package/dist/css/pin-input.css +18 -26
- package/dist/css/popconfirm.css +20 -11
- package/dist/css/popover.css +18 -12
- package/dist/css/progress.css +14 -13
- package/dist/css/prompt-input.css +3 -3
- package/dist/css/question-flow.css +33 -7
- package/dist/css/radio-group.css +120 -55
- package/dist/css/rating.css +31 -14
- package/dist/css/select.css +14 -10
- package/dist/css/separator.css +22 -4
- package/dist/css/side-nav.css +16 -11
- package/dist/css/signature-pad.css +23 -9
- package/dist/css/skeleton.css +7 -7
- package/dist/css/slider.css +71 -42
- package/dist/css/sparkline.css +8 -2
- package/dist/css/spinner.css +40 -20
- package/dist/css/statistic.css +14 -14
- package/dist/css/steps.css +115 -84
- package/dist/css/switch.css +9 -7
- package/dist/css/table.css +27 -10
- package/dist/css/tabs.css +35 -12
- package/dist/css/tag-group.css +17 -6
- package/dist/css/tag.css +54 -29
- package/dist/css/tags-input.css +38 -19
- package/dist/css/text-field.css +5 -5
- package/dist/css/time-field.css +4 -4
- package/dist/css/time-picker.css +150 -64
- package/dist/css/time-range-picker.css +91 -62
- package/dist/css/timeline.css +37 -20
- package/dist/css/timer.css +3 -3
- package/dist/css/toggle-group.css +4 -4
- package/dist/css/tool-call.css +6 -4
- package/dist/css/toolbar.css +6 -5
- package/dist/css/tooltip.css +15 -16
- package/dist/css/tour.css +14 -7
- package/dist/css/transfer.css +22 -16
- package/dist/css/tree-select.css +10 -10
- package/dist/css/tree.css +26 -25
- package/dist/css/typography.css +28 -25
- package/dist/family/action-control.css +30 -24
- package/dist/family/chart.css +57 -0
- package/dist/family/collection-item.css +12 -8
- package/dist/family/field-chrome.css +28 -19
- package/dist/family/loading-ring.css +20 -13
- package/dist/family/swatch.css +4 -4
- package/dist/family/tag-list.css +6 -0
- package/family/action-control.css +30 -24
- package/family/chart.css +57 -0
- package/family/collection-item.css +12 -8
- package/family/field-chrome.css +28 -19
- package/family/loading-ring.css +20 -13
- package/family/swatch.css +4 -4
- package/family/tag-list.css +6 -0
- package/index.css +3580 -2060
- package/index.unlayered.css +3579 -2060
- package/package.json +2 -2
package/css/popover.css
CHANGED
|
@@ -108,15 +108,17 @@
|
|
|
108
108
|
/* 作者塞进面板里的图标按控件档取;关闭钮另由家族配方按 sm 档下发字形尺 */
|
|
109
109
|
--xh-icon-size: var(--xh-popover-icon-size, var(--xh-glyph-size-md));
|
|
110
110
|
|
|
111
|
-
/*
|
|
112
|
-
|
|
113
|
-
--xh-_popover-
|
|
111
|
+
/* 尺寸档只换这三个私有槽。popover 没有 root 部件,size 落在浮层树最外层的 content 上。
|
|
112
|
+
横向内衬比纵向高一档(缺省纵 12 横 16)。语气不接:面板是内容容器,语气该由里面的内容表达 */
|
|
113
|
+
--xh-_popover-py: var(--xh-surface-pad-md);
|
|
114
|
+
--xh-_popover-px: var(--xh-surface-pad-lg);
|
|
114
115
|
--xh-_popover-max-w: var(--xh-overlay-max-w);
|
|
115
116
|
|
|
116
117
|
position: relative;
|
|
117
118
|
display: flex;
|
|
118
119
|
flex-direction: column;
|
|
119
|
-
|
|
120
|
+
/* 标题与正文贴着排:两行之间只留 4px */
|
|
121
|
+
gap: var(--xh-popover-gap, var(--xh-space-1));
|
|
120
122
|
inline-size: max-content;
|
|
121
123
|
/* 静态档与落位后的可用宽度取小:窄视口下面板伸出去,最右侧的内容就点不到了 */
|
|
122
124
|
max-inline-size: min(var(--xh-popover-max-w, var(--xh-_popover-max-w)), var(--xh-_popover-available-w));
|
|
@@ -125,8 +127,8 @@
|
|
|
125
127
|
overflow-y: auto;
|
|
126
128
|
/* 浮在页面之上的 Overlay 滚动面:滚到头不把页面一起带走 */
|
|
127
129
|
overscroll-behavior: contain;
|
|
128
|
-
padding-block: var(--xh-popover-py, var(--xh-_popover-
|
|
129
|
-
padding-inline: var(--xh-popover-px, var(--xh-_popover-
|
|
130
|
+
padding-block: var(--xh-popover-py, var(--xh-_popover-py));
|
|
131
|
+
padding-inline: var(--xh-popover-px, var(--xh-_popover-px));
|
|
130
132
|
border-radius: var(--xh-popover-radius, var(--xh-shape-overlay));
|
|
131
133
|
pointer-events: auto;
|
|
132
134
|
/* 进退场的缩放锚在贴着锚点的那条边上;两个分量由 positioner 按 placement 写进私有槽 */
|
|
@@ -155,28 +157,32 @@
|
|
|
155
157
|
}
|
|
156
158
|
|
|
157
159
|
/* —— 尺寸 —— */
|
|
158
|
-
/* 缺省档写在 content
|
|
160
|
+
/* 缺省档写在 content 的基础规则里;内衬三档取 surface-pad 那把尺,横向始终比纵向高一档 */
|
|
159
161
|
[data-scope='popover'][data-part='content'][data-size='sm'] {
|
|
160
|
-
--xh-_popover-
|
|
162
|
+
--xh-_popover-py: var(--xh-surface-pad-sm);
|
|
163
|
+
--xh-_popover-px: var(--xh-surface-pad-md);
|
|
161
164
|
--xh-_popover-max-w: var(--xh-overlay-max-w-sm);
|
|
162
165
|
}
|
|
163
166
|
|
|
164
167
|
[data-scope='popover'][data-part='content'][data-size='lg'] {
|
|
165
|
-
--xh-_popover-
|
|
168
|
+
--xh-_popover-py: var(--xh-surface-pad-lg);
|
|
169
|
+
--xh-_popover-px: var(--xh-surface-pad-xl);
|
|
166
170
|
--xh-_popover-max-w: var(--xh-overlay-max-w-lg);
|
|
167
171
|
}
|
|
168
172
|
|
|
173
|
+
/* 气泡标题:14px / medium / 正文色 */
|
|
169
174
|
[data-scope='popover'][data-part='title'] {
|
|
170
175
|
margin: 0;
|
|
171
176
|
font-size: var(--xh-popover-title-font-size, var(--xh-text-label-size));
|
|
172
|
-
font-weight: var(--xh-popover-title-font-weight, var(--xh-font-weight-
|
|
177
|
+
font-weight: var(--xh-popover-title-font-weight, var(--xh-font-weight-medium));
|
|
173
178
|
color: var(--xh-popover-title-fg, var(--xh-material-frosted-fg));
|
|
174
179
|
}
|
|
175
180
|
|
|
176
|
-
/*
|
|
181
|
+
/* 说明就是气泡的正文:14px 正文字号 + fg-muted 次级色 */
|
|
177
182
|
[data-scope='popover'][data-part='description'] {
|
|
178
183
|
margin: 0;
|
|
179
|
-
font-size: var(--xh-popover-description-font-size, var(--xh-text-
|
|
184
|
+
font-size: var(--xh-popover-description-font-size, var(--xh-text-body-size));
|
|
185
|
+
line-height: var(--xh-leading-normal);
|
|
180
186
|
color: var(--xh-popover-description-fg, var(--xh-fg-muted));
|
|
181
187
|
}
|
|
182
188
|
|
package/css/progress.css
CHANGED
|
@@ -38,10 +38,10 @@
|
|
|
38
38
|
--xh-progress-skin: 1;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
/* 私有槽位:组件令牌 →
|
|
42
|
-
尺寸档才改得动一处就够,track
|
|
41
|
+
/* 私有槽位:组件令牌 → 中档两级回退。厚度写在 root 上而不是 track 上,
|
|
42
|
+
尺寸档才改得动一处就够,track 靠继承拿到值。线形是一条细轨,按轨道厚度三档取 sm / md / lg = 3 / 4 / 8px */
|
|
43
43
|
[data-scope='progress'][data-part='root'] {
|
|
44
|
-
--xh-_progress-thickness: var(--xh-progress-thickness, var(--xh-track-thickness));
|
|
44
|
+
--xh-_progress-thickness: var(--xh-progress-thickness, var(--xh-track-thickness-md));
|
|
45
45
|
|
|
46
46
|
/* 目标刻度与环形的刻度值按根落位 */
|
|
47
47
|
position: relative;
|
|
@@ -58,7 +58,8 @@
|
|
|
58
58
|
inline-size: 100%;
|
|
59
59
|
block-size: var(--xh-_progress-thickness);
|
|
60
60
|
border-radius: var(--xh-progress-track-radius, var(--xh-shape-pill));
|
|
61
|
-
|
|
61
|
+
/* 底槽取淡底阶梯的 200 档(--xh-bg-subtle-hover),环形的底槽同一支 */
|
|
62
|
+
background: var(--xh-progress-track, var(--xh-bg-subtle-hover));
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
/* 语气槽由 root 上的 data-tone 声明、经继承发下来;没写 data-tone 时退回原来的品牌色。
|
|
@@ -136,11 +137,11 @@
|
|
|
136
137
|
/* —— 尺寸 —— */
|
|
137
138
|
/* 线形只有厚度分档;中间档不写规则,缺省即中档 */
|
|
138
139
|
[data-scope='progress'][data-part='root'][data-size='sm'] {
|
|
139
|
-
--xh-_progress-thickness: var(--xh-progress-thickness, var(--xh-
|
|
140
|
+
--xh-_progress-thickness: var(--xh-progress-thickness, var(--xh-track-thickness-sm));
|
|
140
141
|
}
|
|
141
142
|
|
|
142
143
|
[data-scope='progress'][data-part='root'][data-size='lg'] {
|
|
143
|
-
--xh-_progress-thickness: var(--xh-progress-thickness, var(--xh-
|
|
144
|
+
--xh-_progress-thickness: var(--xh-progress-thickness, var(--xh-track-thickness-lg));
|
|
144
145
|
}
|
|
145
146
|
|
|
146
147
|
/* —— 环形 —— */
|
|
@@ -176,10 +177,10 @@
|
|
|
176
177
|
block-size: 100%;
|
|
177
178
|
}
|
|
178
179
|
|
|
179
|
-
/*
|
|
180
|
+
/* 环心文字:12px 次级色,占位不撑格子,长内容自己换行由作者定 */
|
|
180
181
|
[data-scope='progress'][data-part='label'] {
|
|
181
|
-
color: var(--xh-progress-label-fg, var(--xh-fg-
|
|
182
|
-
font-size: var(--xh-progress-label-font-size, var(--xh-text-
|
|
182
|
+
color: var(--xh-progress-label-fg, var(--xh-fg-muted));
|
|
183
|
+
font-size: var(--xh-progress-label-font-size, var(--xh-text-caption-size));
|
|
183
184
|
line-height: var(--xh-leading-none);
|
|
184
185
|
text-align: center;
|
|
185
186
|
}
|
|
@@ -188,7 +189,7 @@
|
|
|
188
189
|
底槽不跟着语气换族:只有已完成的那段换色,才读得出"完成了多少" */
|
|
189
190
|
[data-scope='progress'][data-part='track'][data-variant='circle'],
|
|
190
191
|
[data-scope='progress'][data-part='track'][data-variant='dashboard'] {
|
|
191
|
-
stroke: var(--xh-progress-track, var(--xh-bg-subtle-
|
|
192
|
+
stroke: var(--xh-progress-track, var(--xh-bg-subtle-hover));
|
|
192
193
|
}
|
|
193
194
|
|
|
194
195
|
[data-scope='progress'][data-part='range'][data-variant='circle'],
|
|
@@ -204,16 +205,16 @@
|
|
|
204
205
|
/* 子弹图:有分段时轨道加厚一档,填充收窄成中间一条压在色带上,色带在填充两侧照样读得出。
|
|
205
206
|
三档厚度各比普通线形高一档,阶梯次序不变 */
|
|
206
207
|
[data-scope='progress'][data-part='root'][data-variant='line'][data-banded] {
|
|
207
|
-
--xh-_progress-thickness: var(--xh-progress-thickness, var(--xh-
|
|
208
|
+
--xh-_progress-thickness: var(--xh-progress-thickness, var(--xh-track-band-thickness-md));
|
|
208
209
|
--xh-_progress-range-size: 50%;
|
|
209
210
|
}
|
|
210
211
|
|
|
211
212
|
[data-scope='progress'][data-part='root'][data-variant='line'][data-banded][data-size='sm'] {
|
|
212
|
-
--xh-_progress-thickness: var(--xh-progress-thickness, var(--xh-
|
|
213
|
+
--xh-_progress-thickness: var(--xh-progress-thickness, var(--xh-track-band-thickness-sm));
|
|
213
214
|
}
|
|
214
215
|
|
|
215
216
|
[data-scope='progress'][data-part='root'][data-variant='line'][data-banded][data-size='lg'] {
|
|
216
|
-
--xh-_progress-thickness: var(--xh-progress-thickness, var(--xh-
|
|
217
|
+
--xh-_progress-thickness: var(--xh-progress-thickness, var(--xh-track-band-thickness-lg));
|
|
217
218
|
}
|
|
218
219
|
|
|
219
220
|
/* 色带取本段语气的淡色:同一族颜色里填充是实色、色带浅一档,读得出填充落在哪一段 */
|
package/css/prompt-input.css
CHANGED
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
--xh-prompt-input-skin: 1;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
/* root
|
|
19
|
-
|
|
18
|
+
/* root 就是视觉盒:描边、底色、圆角、聚焦面、悬停与禁用面由 Field Chrome 家族画在它身上(静息描边式:
|
|
19
|
+
字段淡底 + --xh-border-control 描边 + 无影,聚焦换承载面底 + 品牌描边、不画环;登记的例外只在 surface 圆角),内部 textarea
|
|
20
20
|
无边框;align-items: flex-end 让按钮随输入框长高贴着底边。
|
|
21
21
|
三个视觉轴都落在 root 上:形态三档由家族按 data-variant 生成,语气管用哪族颜色,尺寸管高度与字号 */
|
|
22
22
|
[data-scope='prompt-input'][data-part='root'] {
|
|
23
|
-
/*
|
|
23
|
+
/* 圆角可由使用者槽切换,家族只过渡底、描边与影 */
|
|
24
24
|
transition: border-radius var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
25
25
|
/* 尺寸缺省档:不写 data-size 时按中档走 */
|
|
26
26
|
--xh-_prompt-input-h: var(--xh-control-h-md);
|
package/css/question-flow.css
CHANGED
|
@@ -243,7 +243,7 @@
|
|
|
243
243
|
flex: none;
|
|
244
244
|
align-items: center;
|
|
245
245
|
justify-content: center;
|
|
246
|
-
border: var(--xh-stroke-thin) solid var(--xh-question-flow-indicator-border, var(--xh-border-
|
|
246
|
+
border: var(--xh-stroke-thin) solid var(--xh-question-flow-indicator-border, var(--xh-border-strong));
|
|
247
247
|
border-radius: var(--xh-question-flow-indicator-radius, var(--xh-shape-inset));
|
|
248
248
|
background: var(--xh-question-flow-indicator-bg, transparent);
|
|
249
249
|
color: var(--xh-question-flow-indicator-fg, var(--xh-_tone-on, var(--xh-fg-on-brand)));
|
|
@@ -335,7 +335,7 @@
|
|
|
335
335
|
display: none;
|
|
336
336
|
}
|
|
337
337
|
|
|
338
|
-
/*
|
|
338
|
+
/* 自由文本:与选项同等算数的一条答案,占满整行。框照字段外壳:字段淡底 + 控件描边,悬停描边升一档 */
|
|
339
339
|
[data-scope='question-flow'][data-part='note'] {
|
|
340
340
|
display: block;
|
|
341
341
|
inline-size: 100%;
|
|
@@ -343,11 +343,13 @@
|
|
|
343
343
|
padding-block: var(--xh-question-flow-note-py, var(--xh-space-1_5));
|
|
344
344
|
border: var(--xh-stroke-thin) solid var(--xh-question-flow-note-border, var(--xh-border-control));
|
|
345
345
|
border-radius: var(--xh-question-flow-note-radius, var(--xh-shape-control));
|
|
346
|
-
background: var(--xh-question-flow-note-bg, var(--xh-bg-
|
|
346
|
+
background: var(--xh-question-flow-note-bg, var(--xh-bg-field));
|
|
347
347
|
color: var(--xh-question-flow-note-fg, var(--xh-fg-default));
|
|
348
348
|
font-family: inherit;
|
|
349
349
|
font-size: var(--xh-question-flow-note-font-size, var(--xh-_question-flow-font-size));
|
|
350
|
-
transition:
|
|
350
|
+
transition:
|
|
351
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
352
|
+
border-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
351
353
|
}
|
|
352
354
|
|
|
353
355
|
[data-scope='question-flow'][data-part='note'][hidden] {
|
|
@@ -358,7 +360,23 @@
|
|
|
358
360
|
color: var(--xh-question-flow-placeholder-fg, var(--xh-fg-subtle));
|
|
359
361
|
}
|
|
360
362
|
|
|
363
|
+
[data-scope='question-flow'][data-part='note']:hover:not(:disabled, :focus, [data-invalid]) {
|
|
364
|
+
border-color: var(--xh-question-flow-note-border-hover, var(--xh-border-strong));
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/* 聚焦换承载面底 + 品牌描边,不画环:焦点由描边换色与底色差标出,强制色档补一圈 Highlight 环 */
|
|
368
|
+
[data-scope='question-flow'][data-part='note']:focus-within {
|
|
369
|
+
border-color: var(--xh-question-flow-note-border-focus, var(--xh-border-control-focus));
|
|
370
|
+
background: var(--xh-question-flow-note-bg-focus, var(--xh-bg-surface));
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
[data-scope='question-flow'][data-part='note']:focus-visible {
|
|
374
|
+
outline: none;
|
|
375
|
+
}
|
|
376
|
+
|
|
361
377
|
[data-scope='question-flow'][data-part='note']:disabled {
|
|
378
|
+
border-color: var(--xh-question-flow-note-border-disabled, var(--xh-border-default));
|
|
379
|
+
background: var(--xh-question-flow-note-bg-disabled, var(--xh-bg-subtle));
|
|
362
380
|
color: var(--xh-fg-disabled);
|
|
363
381
|
}
|
|
364
382
|
|
|
@@ -486,16 +504,18 @@
|
|
|
486
504
|
--xh-action-ring-color-focus-visible: currentColor;
|
|
487
505
|
}
|
|
488
506
|
|
|
489
|
-
/*
|
|
507
|
+
/* 交卷之后才露出的那一格:与 Tag 的 sm 档同一副方签——control 圆角、块尺寸取 chip 档、竖向内衬为 0 */
|
|
490
508
|
[data-scope='question-flow'][data-part='result'] {
|
|
491
509
|
display: inline-flex;
|
|
492
510
|
align-self: flex-start;
|
|
493
511
|
align-items: center;
|
|
512
|
+
box-sizing: border-box;
|
|
494
513
|
gap: var(--xh-question-flow-result-gap, var(--xh-space-1));
|
|
514
|
+
min-block-size: var(--xh-question-flow-result-h, var(--xh-chip-h-sm));
|
|
495
515
|
padding-inline: var(--xh-question-flow-result-px, var(--xh-space-1_5));
|
|
496
|
-
padding-block: var(--xh-question-flow-result-py,
|
|
516
|
+
padding-block: var(--xh-question-flow-result-py, 0);
|
|
497
517
|
border: var(--xh-stroke-thin) solid transparent;
|
|
498
|
-
border-radius: var(--xh-question-flow-result-radius, var(--xh-shape-
|
|
518
|
+
border-radius: var(--xh-question-flow-result-radius, var(--xh-shape-control));
|
|
499
519
|
background: var(--xh-question-flow-result-bg, var(--xh-_tone-subtle));
|
|
500
520
|
color: var(--xh-question-flow-result-fg, var(--xh-_tone-fg));
|
|
501
521
|
font-size: var(--xh-question-flow-result-font-size, var(--xh-text-caption-size));
|
|
@@ -536,6 +556,12 @@
|
|
|
536
556
|
background-color: CanvasText;
|
|
537
557
|
}
|
|
538
558
|
|
|
559
|
+
/* 备注框聚焦不画环、描边又被换成系统色,补一圈 Highlight 环 */
|
|
560
|
+
[data-scope='question-flow'][data-part='note']:focus {
|
|
561
|
+
outline: var(--xh-ring-width) solid Highlight;
|
|
562
|
+
outline-offset: var(--xh-ring-offset);
|
|
563
|
+
}
|
|
564
|
+
|
|
539
565
|
[data-scope='question-flow']:is([data-part='prev-trigger'], [data-part='next-trigger']):empty::before {
|
|
540
566
|
forced-color-adjust: none;
|
|
541
567
|
background-color: ButtonText;
|
package/css/radio-group.css
CHANGED
|
@@ -118,13 +118,16 @@
|
|
|
118
118
|
--xh-action-host-bg-pressed: var(--xh-_radio-group-host-bg-pressed);
|
|
119
119
|
|
|
120
120
|
position: relative;
|
|
121
|
-
/* row 档铺满容器(inline-size: 100%)会把竖排的命中区拉到整行空白处、横排 wrap 也塌:
|
|
122
|
-
沿用「条目按内容收宽」的既有决定,写法同 checkbox-group 条目 */
|
|
123
|
-
inline-size: auto;
|
|
124
121
|
/* ghost 的 1px 透明边位会把圆圈列相对组标题错开 1px:边归零,几何保持不变 */
|
|
125
122
|
border-width: 0;
|
|
126
123
|
}
|
|
127
124
|
|
|
125
|
+
/* 条目按内容收宽,盖掉 row 档的 inline-size: 100%(横排时每个条目会独占一行)。
|
|
126
|
+
从根往下写,特指度高过 row 档,有层与无层两份产物里都生效 */
|
|
127
|
+
[data-scope='radio-group'][data-part='root'] [data-scope='radio-group'][data-part='item'] {
|
|
128
|
+
inline-size: auto;
|
|
129
|
+
}
|
|
130
|
+
|
|
128
131
|
/* 只读整组都改不动,但不是禁用:颜色照常,把整行的悬停 / 按下面与"可点"这个暗示一起收回来。
|
|
129
132
|
家族的 :hover / 按压块不排 readonly,只能从槽上收回;排掉禁用项是因为这条选择器权重高过家族的禁用块,
|
|
130
133
|
不排就会把 not-allowed 覆盖回 default */
|
|
@@ -137,7 +140,7 @@
|
|
|
137
140
|
--xh-action-cursor-focus-visible: default;
|
|
138
141
|
}
|
|
139
142
|
|
|
140
|
-
/*
|
|
143
|
+
/* 圆圈是控件盒:透明底 + --xh-border-strong 描边(与 Checkbox 方框同一重量)+ 无影。
|
|
141
144
|
不缩放(行级只换面),过渡只有底与描边;按下走 press 时间线、释放同走 micro */
|
|
142
145
|
[data-scope='radio-group'][data-part='indicator'] {
|
|
143
146
|
display: inline-flex;
|
|
@@ -146,7 +149,7 @@
|
|
|
146
149
|
justify-content: center;
|
|
147
150
|
inline-size: var(--xh-radio-group-indicator-size, var(--xh-_radio-group-indicator));
|
|
148
151
|
block-size: var(--xh-radio-group-indicator-size, var(--xh-_radio-group-indicator));
|
|
149
|
-
border: var(--xh-stroke-thin) solid var(--xh-radio-group-indicator-border, var(--xh-border-
|
|
152
|
+
border: var(--xh-stroke-thin) solid var(--xh-radio-group-indicator-border, var(--xh-border-strong));
|
|
150
153
|
border-radius: var(--xh-radio-group-indicator-radius, var(--xh-shape-circle));
|
|
151
154
|
background: var(--xh-radio-group-indicator-bg, transparent);
|
|
152
155
|
transition:
|
|
@@ -290,27 +293,31 @@
|
|
|
290
293
|
}
|
|
291
294
|
|
|
292
295
|
/* —— segmented 形态 ——
|
|
293
|
-
|
|
296
|
+
一条轨道装着首尾相接的若干段,选中段由 thumb 部件标出:一块品牌淡底的滑块,换段时滑过去。
|
|
294
297
|
轨道就是 root:滑块绝对定位于它,段与段之间不留缝,所以 gap 归零。
|
|
295
|
-
|
|
298
|
+
轨道与字段外壳同款:最浅一档淡底(--xh-bg-field)+ 1px 字段描边(--xh-border-control)+ control 圆角,
|
|
299
|
+
内衬 2px,加上描边段离外沿 3px。
|
|
296
300
|
一行排不下就折行:每个选项都必须看得见、点得到;不改成横向滚动是因为段离轨道内沿只有一格衬距,
|
|
297
301
|
轨道一旦成为滚动容器,段的焦点环(画在段外侧 2px 处)会被裁掉 */
|
|
298
302
|
[data-scope='radio-group'][data-part='root'][data-variant='segmented'] {
|
|
299
|
-
/*
|
|
300
|
-
--xh-_radio-group-thumb-bg: var(--xh-bg-
|
|
301
|
-
--xh-_radio-group-
|
|
302
|
-
|
|
303
|
-
--xh-
|
|
304
|
-
--xh-
|
|
303
|
+
/* 滑块(选中段的品牌淡底)静息 / 悬停 / 禁用三档与选中段的文字色;没写 data-tone 时就是这里的取值 */
|
|
304
|
+
--xh-_radio-group-thumb-bg: var(--xh-bg-segment-selected);
|
|
305
|
+
--xh-_radio-group-thumb-bg-hover: var(--xh-bg-segment-selected-hover);
|
|
306
|
+
--xh-_radio-group-thumb-bg-disabled: var(--xh-bg-segment-selected-disabled);
|
|
307
|
+
--xh-_radio-group-segment-fg-checked: var(--xh-fg-segment-selected);
|
|
308
|
+
--xh-_radio-group-segment-fg-checked-disabled: var(--xh-fg-segment-selected-disabled);
|
|
309
|
+
/* 轨道底是最浅一档淡底,按白底承载:段悬停 100 → 按下 200,host 槽向内下发同一副阶梯 */
|
|
310
|
+
--xh-action-host-bg-hover: var(--xh-bg-subtle);
|
|
311
|
+
--xh-action-host-bg-pressed: var(--xh-bg-subtle-hover);
|
|
305
312
|
|
|
306
313
|
position: relative;
|
|
307
314
|
display: inline-flex;
|
|
308
315
|
flex-wrap: wrap;
|
|
309
316
|
gap: 0;
|
|
310
317
|
padding: var(--xh-radio-group-track-padding, var(--xh-space-0_5));
|
|
311
|
-
border: var(--xh-stroke-thin) solid var(--xh-radio-group-track-border,
|
|
312
|
-
border-radius: var(--xh-radio-group-track-radius, var(--xh-shape-
|
|
313
|
-
background: var(--xh-radio-group-track-bg, var(--xh-bg-
|
|
318
|
+
border: var(--xh-stroke-thin) solid var(--xh-radio-group-track-border, var(--xh-border-control));
|
|
319
|
+
border-radius: var(--xh-radio-group-track-radius, var(--xh-shape-control));
|
|
320
|
+
background: var(--xh-radio-group-track-bg, var(--xh-bg-field));
|
|
314
321
|
font-size: var(--xh-radio-group-item-font-size, var(--xh-_radio-group-font-size));
|
|
315
322
|
}
|
|
316
323
|
|
|
@@ -366,10 +373,21 @@
|
|
|
366
373
|
}
|
|
367
374
|
|
|
368
375
|
/* 语气:选择器带 [data-tone] 限定,不限定的话放在语气容器里的分段会跟着改色。
|
|
369
|
-
|
|
376
|
+
语气档的滑块换语气淡底(静息 / 悬停 / 禁用三档),选中段的字取语气字色;禁用的选中段与品牌档同口径——
|
|
377
|
+
滑块退到 8%、字往承载面兑一半,不回落到品牌色 */
|
|
370
378
|
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-tone] {
|
|
371
|
-
--xh-_radio-group-thumb-bg: var(--xh-_tone, var(--xh-bg-
|
|
372
|
-
--xh-_radio-group-
|
|
379
|
+
--xh-_radio-group-thumb-bg: var(--xh-_tone-subtle, var(--xh-bg-segment-selected));
|
|
380
|
+
--xh-_radio-group-thumb-bg-hover: var(--xh-_tone-subtle-hover, var(--xh-bg-segment-selected-hover));
|
|
381
|
+
--xh-_radio-group-thumb-bg-disabled: color-mix(in oklab, var(--xh-_tone) 8%, var(--xh-bg-surface));
|
|
382
|
+
--xh-_radio-group-segment-fg-checked: var(--xh-_tone-fg, var(--xh-fg-segment-selected));
|
|
383
|
+
--xh-_radio-group-segment-fg-checked-disabled: color-mix(in oklab, var(--xh-_tone-fg) 50%, var(--xh-bg-surface));
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/* 深色档与品牌档同口径:选中面提到 20%、悬停 28%,深底上 12% 读不出是一块选中面。
|
|
387
|
+
语气淡底三档是语气层按固定比例兑的、不随主题换,这里按主题各取一档 */
|
|
388
|
+
:is([data-theme='dark'] *, [data-theme='dark'])[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-tone] {
|
|
389
|
+
--xh-_radio-group-thumb-bg: var(--xh-_tone-subtle-hover, var(--xh-bg-segment-selected));
|
|
390
|
+
--xh-_radio-group-thumb-bg-hover: var(--xh-_tone-subtle-active, var(--xh-bg-segment-selected-hover));
|
|
373
391
|
}
|
|
374
392
|
|
|
375
393
|
/* 段:轨道里铺开的一格,不投影 Action Control 家族(与 Tabs segment 档同),面与字写在段自己身上。
|
|
@@ -415,32 +433,53 @@
|
|
|
415
433
|
display: none;
|
|
416
434
|
}
|
|
417
435
|
|
|
418
|
-
/* 选中态读 data-state,不读 ARIA
|
|
436
|
+
/* 选中态读 data-state,不读 ARIA:品牌字 + medium。字也要跟着变——滑块是可选部件,作者不渲染它时"当前是哪一段"仍然要看得出来 */
|
|
419
437
|
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
420
438
|
> [data-scope='radio-group'][data-part='item'][data-state='checked'] {
|
|
421
439
|
color: var(--xh-radio-group-segment-fg-checked, var(--xh-_radio-group-segment-fg-checked));
|
|
440
|
+
font-weight: var(--xh-radio-group-segment-font-weight-checked, var(--xh-font-weight-medium));
|
|
422
441
|
}
|
|
423
442
|
|
|
424
|
-
/*
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
443
|
+
/* 段间分隔线:1px 装饰边色,长度取段高的一半再收一格半阶(md 档 32 / 2 − 2 = 14px),竖在后一段的起始缘上。
|
|
444
|
+
只在横排画:竖排的段上下相接,分隔交给轨道的留白。与选中段、悬停段相邻的那几道收起(底色淡成透明)——
|
|
445
|
+
那两段铺了面,再夹一道线就把面切出了缺口。
|
|
446
|
+
已知限制:折行后下一行首段的起始缘也会画出这一道。样式层拿不到段落在第几行(不用容器查询,
|
|
447
|
+
轨道也不能裁内容,否则段的焦点环与粗指针命中区一并被裁),设计真源与组件文档注明了尽量一行排下 */
|
|
448
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-orientation='horizontal']
|
|
449
|
+
> [data-scope='radio-group'][data-part='item'] + [data-scope='radio-group'][data-part='item']::after {
|
|
450
|
+
content: '';
|
|
451
|
+
position: absolute;
|
|
452
|
+
inset-block-start: 50%;
|
|
453
|
+
inset-inline-start: 0;
|
|
454
|
+
inline-size: var(--xh-stroke-thin);
|
|
455
|
+
block-size: calc(var(--xh-radio-group-segment-h, var(--xh-_radio-group-segment-h)) / 2 - var(--xh-space-0_5));
|
|
456
|
+
background-color: var(--xh-radio-group-segment-separator, var(--xh-border-default));
|
|
457
|
+
translate: 0 -50%;
|
|
458
|
+
pointer-events: none;
|
|
459
|
+
transition: background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
429
460
|
}
|
|
430
461
|
|
|
431
|
-
|
|
432
|
-
|
|
462
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-orientation='horizontal']
|
|
463
|
+
> [data-scope='radio-group'][data-part='item']:is([data-state='checked'], :not([data-disabled], [data-readonly]):hover)::after,
|
|
464
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-orientation='horizontal']
|
|
465
|
+
> [data-scope='radio-group'][data-part='item']:is([data-state='checked'], :not([data-disabled], [data-readonly]):hover)
|
|
466
|
+
+ [data-scope='radio-group'][data-part='item']::after {
|
|
467
|
+
background-color: transparent;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
/* 悬停时未选中段自己换面:选中段的底下压着滑块,悬停由滑块升一档表出(见滑块块)。
|
|
471
|
+
底色用中性的悬停档:轨道底是最浅一档淡底,按白底承载取 100;只读收回悬停,与列表形态同一个决定 */
|
|
433
472
|
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
434
473
|
> [data-scope='radio-group'][data-part='item']:not([data-disabled]):not([data-readonly]):not([data-state='checked']):hover {
|
|
435
|
-
background-color: var(--xh-radio-group-segment-bg-hover, var(--xh-bg-subtle
|
|
474
|
+
background-color: var(--xh-radio-group-segment-bg-hover, var(--xh-bg-subtle));
|
|
436
475
|
color: var(--xh-radio-group-segment-fg-hover, var(--xh-fg-default));
|
|
437
476
|
}
|
|
438
477
|
|
|
439
|
-
/*
|
|
440
|
-
|
|
478
|
+
/* 按下去要有回应:未选中段换到按下面(白底承载 200),几何不动。
|
|
479
|
+
选中段不叠按下面:它压着的品牌淡底滑块本身就是选中身份(有滑块开关无叠加态) */
|
|
441
480
|
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
442
481
|
> [data-scope='radio-group'][data-part='item']:not([data-disabled]):not([data-readonly]):not([data-state='checked']):is(:active, [data-pressed]) {
|
|
443
|
-
background-color: var(--xh-radio-group-segment-bg-pressed, var(--xh-bg-subtle-
|
|
482
|
+
background-color: var(--xh-radio-group-segment-bg-pressed, var(--xh-bg-subtle-hover));
|
|
444
483
|
transition-duration: var(--xh-motion-duration-press);
|
|
445
484
|
transition-timing-function: var(--xh-motion-ease-press);
|
|
446
485
|
}
|
|
@@ -459,11 +498,10 @@
|
|
|
459
498
|
cursor: not-allowed;
|
|
460
499
|
}
|
|
461
500
|
|
|
462
|
-
/*
|
|
463
|
-
「当前选的是哪一段」当场看不见。禁用由轨道底色、未选中段的文字色与光标表达,选中段保持可读 */
|
|
501
|
+
/* 禁用且选中的那一段:字退到浅品牌色、滑块退到 8% 淡底,仍看得出选的是哪一段 */
|
|
464
502
|
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
465
503
|
> [data-scope='radio-group'][data-part='item'][data-disabled][data-state='checked'] {
|
|
466
|
-
color: var(--xh-radio-group-segment-fg-checked-disabled, var(--xh-_radio-group-segment-fg-checked));
|
|
504
|
+
color: var(--xh-radio-group-segment-fg-checked-disabled, var(--xh-_radio-group-segment-fg-checked-disabled));
|
|
467
505
|
}
|
|
468
506
|
|
|
469
507
|
[data-scope='radio-group'][data-part='thumb'] {
|
|
@@ -484,38 +522,43 @@
|
|
|
484
522
|
inline-size: var(--xh-_radio-group-thumb-w);
|
|
485
523
|
block-size: var(--xh-_radio-group-thumb-h);
|
|
486
524
|
translate: calc(var(--xh-_radio-group-thumb-x) * var(--xh-direction-sign)) var(--xh-_radio-group-thumb-y);
|
|
487
|
-
/*
|
|
525
|
+
/* 选中段的品牌淡底:平面一块,无边无影。描边位留着透明(作者给槽才画),
|
|
488
526
|
尺寸由连接层按段的盒量出,描边吃进盒里(border-box),滑块与段仍是同一块矩形 */
|
|
489
|
-
border: var(--xh-stroke-thin) solid var(--xh-radio-group-thumb-border,
|
|
527
|
+
border: var(--xh-stroke-thin) solid var(--xh-radio-group-thumb-border, transparent);
|
|
490
528
|
border-radius: var(--xh-radio-group-thumb-radius, var(--xh-shape-inset));
|
|
491
529
|
background: var(--xh-radio-group-thumb-bg, var(--xh-_radio-group-thumb-bg));
|
|
492
|
-
box-shadow: var(--xh-radio-group-thumb-shadow,
|
|
530
|
+
box-shadow: var(--xh-radio-group-thumb-shadow, none);
|
|
493
531
|
/* 段压在它上面,点击一律交给段;作者把它写在段之后时也不至于吞掉点击 */
|
|
494
532
|
pointer-events: none;
|
|
495
533
|
/* 用连续档而不是进场那条:滑块是被推过去的,起步就该有速度,纯减速曲线看着像自己飘过去。
|
|
496
|
-
|
|
534
|
+
四个几何量同时走,段宽不等时才不会先变形再挪位。底色单列一项:选中段悬停、禁用时滑块换档是淡变 */
|
|
497
535
|
transition:
|
|
498
536
|
translate var(--xh-motion-duration-move) var(--xh-motion-ease-continuous),
|
|
499
537
|
inline-size var(--xh-motion-duration-move) var(--xh-motion-ease-continuous),
|
|
500
538
|
block-size var(--xh-motion-duration-move) var(--xh-motion-ease-continuous),
|
|
501
|
-
|
|
539
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
502
540
|
}
|
|
503
541
|
|
|
504
|
-
/*
|
|
505
|
-
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
506
|
-
|
|
542
|
+
/* 选中段悬停:滑块压在它底下,由滑块升一档表出 */
|
|
543
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']:has(
|
|
544
|
+
> [data-scope='radio-group'][data-part='item'][data-state='checked']:not([data-disabled]):not([data-readonly]):hover
|
|
545
|
+
)
|
|
546
|
+
> [data-scope='radio-group'][data-part='thumb'] {
|
|
547
|
+
background: var(--xh-radio-group-thumb-bg-hover, var(--xh-_radio-group-thumb-bg-hover));
|
|
507
548
|
}
|
|
508
549
|
|
|
509
|
-
/*
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
550
|
+
/* 选中段禁用(含整组禁用):滑块退到 8% 淡底,与退到浅品牌色的字一起读出「选着、但动不了」 */
|
|
551
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']:has(
|
|
552
|
+
> [data-scope='radio-group'][data-part='item'][data-state='checked'][data-disabled]
|
|
553
|
+
)
|
|
554
|
+
> [data-scope='radio-group'][data-part='thumb'] {
|
|
555
|
+
background: var(--xh-radio-group-thumb-bg-disabled, var(--xh-_radio-group-thumb-bg-disabled));
|
|
513
556
|
}
|
|
514
557
|
|
|
515
558
|
/* 首次落位与同一项的重量(窗口缩放、换上正式字体)直接到位,只有换项才滑:连接层在这一落点投影
|
|
516
|
-
data-instant
|
|
559
|
+
data-instant。底色的淡变照留 */
|
|
517
560
|
[data-scope='radio-group'][data-part='thumb'][data-instant] {
|
|
518
|
-
transition:
|
|
561
|
+
transition: background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
519
562
|
}
|
|
520
563
|
|
|
521
564
|
/* 液态档:两沿由弹簧逐帧推着走(连接层每一帧写好盒子),几何量不再补过渡;
|
|
@@ -524,7 +567,7 @@
|
|
|
524
567
|
--xh-_radio-group-thumb-squash: max(var(--xh-motion-scale-squash), calc(1 - var(--xh-_radio-group-thumb-stretch) * (1 - var(--xh-motion-scale-squash))));
|
|
525
568
|
|
|
526
569
|
scale: 1 var(--xh-_radio-group-thumb-squash);
|
|
527
|
-
transition:
|
|
570
|
+
transition: background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
528
571
|
}
|
|
529
572
|
|
|
530
573
|
:where([data-material='liquid']) [data-scope='radio-group'][data-part='root'][data-orientation='vertical']
|
|
@@ -539,14 +582,30 @@
|
|
|
539
582
|
min-block-size: 0;
|
|
540
583
|
}
|
|
541
584
|
|
|
542
|
-
/* segmented
|
|
543
|
-
|
|
544
|
-
|
|
585
|
+
/* segmented 的段不归家族:手指的落点比一段大,命中区由伪元素补足到粗指针下限(--xh-control-hit-coarse),
|
|
586
|
+
段的盒与轨道内的分格一点不动。竖排与折行时段与段沿块轴首尾相接、行内轴上也挨着,补足的命中区必然叠进
|
|
587
|
+
相邻段的盒——轨道建一个层叠上下文,伪元素垫在负一层:每一段的盒都压在别段外扩的命中区之上,
|
|
588
|
+
叠上的那一截归盒子本来所在的那一段,外扩只落在段与段之间没有盒的地方(轨道衬距、轨道外沿)。
|
|
589
|
+
纯 CSS 拿不到「这一段在第几行」,于是不按行开关外扩,靠层序让段的盒自己说了算。
|
|
590
|
+
块首外扩不越过轨道外沿再加一格标签间距(space-2):单行时上沿停在字段标签下缘之外,点在标签上仍归标签;
|
|
591
|
+
少扩的一截落到块尾,命中区总高仍是下限 */
|
|
592
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'] {
|
|
593
|
+
isolation: isolate;
|
|
594
|
+
}
|
|
595
|
+
|
|
545
596
|
[data-scope='radio-group'][data-part='root'][data-variant='segmented'] > [data-scope='radio-group'][data-part='item']::before {
|
|
546
597
|
content: '';
|
|
547
598
|
position: absolute;
|
|
548
|
-
|
|
549
|
-
inset-
|
|
599
|
+
z-index: -1;
|
|
600
|
+
inset-block-start: min(
|
|
601
|
+
0px,
|
|
602
|
+
max(
|
|
603
|
+
(100% - var(--xh-control-hit-coarse)) / 2,
|
|
604
|
+
-1 * (var(--xh-radio-group-track-padding, var(--xh-space-0_5)) + var(--xh-stroke-thin) + var(--xh-space-2))
|
|
605
|
+
)
|
|
606
|
+
);
|
|
607
|
+
inset-inline: min(0px, (100% - var(--xh-control-hit-coarse)) / 2);
|
|
608
|
+
block-size: max(100%, var(--xh-control-hit-coarse));
|
|
550
609
|
}
|
|
551
610
|
}
|
|
552
611
|
|
|
@@ -579,6 +638,12 @@
|
|
|
579
638
|
background-color: Highlight;
|
|
580
639
|
color: HighlightText;
|
|
581
640
|
}
|
|
641
|
+
|
|
642
|
+
/* 选中段的品牌淡底在这一档里被换成 Canvas,与没选中的段一模一样:滑块描一圈系统前景边框出选中段 */
|
|
643
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'] > [data-scope='radio-group'][data-part='thumb'] {
|
|
644
|
+
border-color: ButtonText;
|
|
645
|
+
}
|
|
646
|
+
|
|
582
647
|
}
|
|
583
648
|
|
|
584
649
|
@media print {
|
|
@@ -588,7 +653,7 @@
|
|
|
588
653
|
border: var(--xh-stroke-thick) solid currentColor;
|
|
589
654
|
}
|
|
590
655
|
|
|
591
|
-
/* segmented
|
|
656
|
+
/* segmented 的滑块那块淡底不画,「当前选的是哪一段」在纸上没了:选中段改画一圈实边、字加粗 */
|
|
592
657
|
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
593
658
|
> [data-scope='radio-group'][data-part='item'][data-state='checked'] {
|
|
594
659
|
border: var(--xh-stroke-thin) solid currentColor;
|