@xihan-ui/styles 3.0.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/README.md +1 -1
- package/component-tokens.d.ts +29 -0
- package/components.tokens.json +683 -27
- package/css/alert.css +2 -2
- package/css/approval.css +4 -4
- package/css/button.css +9 -5
- package/css/calendar-picker.css +3 -3
- package/css/calendar-range-picker.css +7 -7
- package/css/carousel.css +45 -13
- package/css/cartesian-chart.css +11 -11
- package/css/cascader.css +10 -10
- package/css/citation.css +2 -2
- package/css/code-view.css +6 -6
- package/css/color-picker.css +81 -0
- package/css/color-swatch-picker.css +9 -4
- package/css/combobox.css +12 -4
- package/css/command.css +1 -1
- package/css/date-field.css +39 -0
- package/css/date-picker.css +86 -9
- package/css/date-range-picker.css +47 -7
- package/css/diff-view.css +8 -8
- package/css/field-array.css +1 -1
- package/css/field.css +4 -0
- package/css/file-upload.css +1 -1
- package/css/float-button.css +140 -27
- package/css/form.css +14 -6
- package/css/graph-chart.css +2 -2
- package/css/highlight.css +1 -1
- package/css/image.css +1 -1
- package/css/mention.css +1 -1
- package/css/message-feed.css +1 -1
- package/css/notification.css +26 -20
- package/css/number-field.css +18 -18
- package/css/page-header.css +2 -2
- package/css/password-input.css +2 -2
- package/css/popconfirm.css +3 -3
- package/css/question-flow.css +8 -8
- package/css/radar-chart.css +6 -6
- package/css/rating.css +1 -1
- package/css/select.css +2 -2
- package/css/separator.css +2 -2
- package/css/side-nav.css +13 -13
- package/css/skeleton.css +5 -5
- package/css/slider.css +6 -6
- package/css/sortable.css +2 -2
- package/css/table.css +19 -2
- package/css/tags-input.css +1 -1
- package/css/time-picker.css +59 -2
- package/css/tool-call.css +7 -7
- package/css/tooltip.css +1 -1
- package/css/tree-select.css +2 -2
- package/css/tree.css +81 -11
- package/dist/css/accordion.css +269 -0
- package/dist/css/affix.css +47 -0
- package/dist/css/alert.css +247 -0
- package/dist/css/anchor.css +252 -0
- package/dist/css/approval.css +501 -0
- package/dist/css/avatar-group.css +99 -0
- package/dist/css/avatar.css +98 -0
- package/dist/css/back-top.css +161 -0
- package/dist/css/badge.css +205 -0
- package/dist/css/bar-code.css +62 -0
- package/dist/css/breadcrumb.css +230 -0
- package/dist/css/button-group.css +263 -0
- package/dist/css/button.css +219 -0
- package/dist/css/calendar-picker.css +467 -0
- package/dist/css/calendar-range-picker.css +554 -0
- package/dist/css/card.css +221 -0
- package/dist/css/carousel.css +710 -0
- package/dist/css/cartesian-chart.css +830 -0
- package/dist/css/cascader.css +961 -0
- package/dist/css/checkbox-group.css +358 -0
- package/dist/css/checkbox.css +257 -0
- package/dist/css/citation.css +470 -0
- package/dist/css/clipboard.css +315 -0
- package/dist/css/code-view.css +374 -0
- package/dist/css/collapsible.css +185 -0
- package/dist/css/color-field.css +176 -0
- package/dist/css/color-picker.css +595 -0
- package/dist/css/color-slider.css +281 -0
- package/dist/css/color-swatch-picker.css +250 -0
- package/dist/css/color-swatch.css +35 -0
- package/dist/css/combobox.css +574 -0
- package/dist/css/command.css +399 -0
- package/dist/css/context-menu.css +420 -0
- package/dist/css/date-field.css +317 -0
- package/dist/css/date-picker.css +868 -0
- package/dist/css/date-range-picker.css +886 -0
- package/dist/css/description.css +67 -0
- package/dist/css/descriptions.css +299 -0
- package/dist/css/dialog.css +455 -0
- package/dist/css/diff-view.css +513 -0
- package/dist/css/download-trigger.css +151 -0
- package/dist/css/drawer.css +552 -0
- package/dist/css/editable.css +295 -0
- package/dist/css/empty-state.css +163 -0
- package/dist/css/field-array.css +226 -0
- package/dist/css/field.css +166 -0
- package/dist/css/fieldset.css +102 -0
- package/dist/css/file-upload.css +429 -0
- package/dist/css/flex.css +441 -0
- package/dist/css/float-button.css +569 -0
- package/dist/css/floating-panel.css +429 -0
- package/dist/css/focus.css +46 -0
- package/dist/css/forced-colors.css +93 -0
- package/dist/css/form.css +393 -0
- package/dist/css/funnel-chart.css +106 -0
- package/dist/css/graph-chart.css +205 -0
- package/dist/css/grid-list.css +235 -0
- package/dist/css/grid.css +1201 -0
- package/dist/css/heatmap.css +552 -0
- package/dist/css/hierarchy-chart.css +298 -0
- package/dist/css/highlight.css +41 -0
- package/dist/css/hover-card.css +226 -0
- package/dist/css/icon.css +225 -0
- package/dist/css/image-cropper.css +373 -0
- package/dist/css/image-viewer.css +538 -0
- package/dist/css/image.css +98 -0
- package/dist/css/infinite-scroll.css +77 -0
- package/dist/css/input-group.css +275 -0
- package/dist/css/json-viewer.css +379 -0
- package/dist/css/kbd.css +72 -0
- package/dist/css/label.css +78 -0
- package/dist/css/layers.css +7 -0
- package/dist/css/layout.css +372 -0
- package/dist/css/liquid.css +106 -0
- package/dist/css/list.css +152 -0
- package/dist/css/listbox.css +390 -0
- package/dist/css/loading-bar.css +141 -0
- package/dist/css/log.css +306 -0
- package/dist/css/markdown-stream.css +149 -0
- package/dist/css/marquee.css +378 -0
- package/dist/css/masonry.css +70 -0
- package/dist/css/matrix-code.css +67 -0
- package/dist/css/mention.css +393 -0
- package/dist/css/menu.css +364 -0
- package/dist/css/menubar.css +456 -0
- package/dist/css/message-feed.css +318 -0
- package/dist/css/navigation-menu.css +513 -0
- package/dist/css/notification.css +782 -0
- package/dist/css/number-animation.css +44 -0
- package/dist/css/number-field.css +252 -0
- package/dist/css/overlay-arrow.css +56 -0
- package/dist/css/page-header.css +184 -0
- package/dist/css/pagination.css +450 -0
- package/dist/css/password-input.css +391 -0
- package/dist/css/pie-chart.css +247 -0
- package/dist/css/pin-input.css +199 -0
- package/dist/css/pointer.css +36 -0
- package/dist/css/popconfirm.css +320 -0
- package/dist/css/popover.css +279 -0
- package/dist/css/progress.css +501 -0
- package/dist/css/prompt-input.css +260 -0
- package/dist/css/question-flow.css +553 -0
- package/dist/css/radar-chart.css +233 -0
- package/dist/css/radio-group.css +598 -0
- package/dist/css/rating.css +294 -0
- package/dist/css/reasoning.css +343 -0
- package/dist/css/reset.css +117 -0
- package/dist/css/resizable.css +242 -0
- package/dist/css/sankey-chart.css +174 -0
- package/dist/css/scroll-area.css +240 -0
- package/dist/css/scrollbar.css +204 -0
- package/dist/css/select.css +612 -0
- package/dist/css/separator.css +122 -0
- package/dist/css/side-nav.css +476 -0
- package/dist/css/signature-pad.css +179 -0
- package/dist/css/skeleton.css +161 -0
- package/dist/css/slider.css +374 -0
- package/dist/css/sortable.css +228 -0
- package/dist/css/sparkline.css +164 -0
- package/dist/css/spinner.css +236 -0
- package/dist/css/splitter.css +159 -0
- package/dist/css/statistic.css +137 -0
- package/dist/css/steps.css +627 -0
- package/dist/css/switch.css +351 -0
- package/dist/css/table.css +1145 -0
- package/dist/css/tabs.css +944 -0
- package/dist/css/tag-group.css +247 -0
- package/dist/css/tag.css +310 -0
- package/dist/css/tags-input.css +322 -0
- package/dist/css/text-field.css +197 -0
- package/dist/css/time-field.css +277 -0
- package/dist/css/time-picker.css +707 -0
- package/dist/css/time-range-picker.css +746 -0
- package/dist/css/timeline.css +423 -0
- package/dist/css/timer.css +123 -0
- package/dist/css/timestamp.css +34 -0
- package/dist/css/toggle-group.css +424 -0
- package/dist/css/toggle.css +146 -0
- package/dist/css/tone.css +189 -0
- package/dist/css/tool-call.css +429 -0
- package/dist/css/toolbar.css +365 -0
- package/dist/css/tooltip.css +218 -0
- package/dist/css/tour.css +439 -0
- package/dist/css/transfer.css +638 -0
- package/dist/css/tree-select.css +878 -0
- package/dist/css/tree.css +733 -0
- package/dist/css/truncate.css +108 -0
- package/dist/css/typography.css +472 -0
- package/dist/css/undefined.css +58 -0
- package/dist/css/virtualizer.css +166 -0
- package/dist/css/visually-hidden.css +20 -0
- package/dist/css/watermark.css +82 -0
- package/dist/family/action-control.css +487 -0
- package/dist/family/chart.css +480 -0
- package/dist/family/check-mark.css +94 -0
- package/dist/family/choice-card.css +97 -0
- package/dist/family/collection-item.css +764 -0
- package/dist/family/field-chrome.css +287 -0
- package/dist/family/loading-ring.css +95 -0
- package/dist/family/material.css +72 -0
- package/dist/family/menu-choice.css +56 -0
- package/dist/family/motion.css +363 -0
- package/dist/family/swatch.css +59 -0
- package/dist/family/tag-list.css +59 -0
- package/family/action-control.css +3 -12
- package/index.css +7307 -6759
- package/index.unlayered.css +7309 -6761
- package/package.json +165 -164
package/css/page-header.css
CHANGED
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
[data-scope='page-header'][data-part='root']:has(> [data-part='description'])
|
|
152
|
-
> :is([data-part='back-trigger'], [data-part='media'], [data-part='extra']) {
|
|
152
|
+
> :is([data-part='back-trigger'], [data-part='media'], [data-part='extra']):where([data-scope='page-header']) {
|
|
153
153
|
grid-row: span 2;
|
|
154
154
|
}
|
|
155
155
|
|
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
grid-column: 2;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
[data-scope='page-header'][data-part='root'] > [data-part='extra'] {
|
|
169
|
+
[data-scope='page-header'][data-part='root'] > [data-part='extra']:where([data-scope='page-header']) {
|
|
170
170
|
grid-column: 1 / -1;
|
|
171
171
|
grid-row: auto;
|
|
172
172
|
margin-inline-start: 0;
|
package/css/password-input.css
CHANGED
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
分不出焦点在框里还是在钮上,所以钮上再画一圈自己的环(家族只对不占 Tab 位的内嵌钮关环)。
|
|
203
203
|
环往内收,压在按钮自己的方框里,不与盒子外面那一圈叠在一起。
|
|
204
204
|
指示焦点只能用环不能用底色:可用的几档底色压在盒底上都到不了 3:1,换了色也等于没画 */
|
|
205
|
-
[data-scope='password-input'][data-part='control'] [data-part='visibility-trigger']:focus-visible {
|
|
205
|
+
[data-scope='password-input'][data-part='control'] [data-part='visibility-trigger']:where([data-scope='password-input']):focus-visible {
|
|
206
206
|
outline: var(--xh-ring-width) solid var(--xh-_password-input-ring);
|
|
207
207
|
outline-offset: var(--xh-ring-offset);
|
|
208
208
|
}
|
|
@@ -357,7 +357,7 @@
|
|
|
357
357
|
|
|
358
358
|
/* 关掉强制换色后,上面那圈自留的 :focus-visible 环与家族普通态的焦点底/字都会按作者色落地;
|
|
359
359
|
家族高对比块的特指度压不过它们,这里用同一选择器把环、底、字改回系统色 */
|
|
360
|
-
[data-scope='password-input'][data-part='control'] [data-part='visibility-trigger']:focus-visible {
|
|
360
|
+
[data-scope='password-input'][data-part='control'] [data-part='visibility-trigger']:where([data-scope='password-input']):focus-visible {
|
|
361
361
|
outline-color: Highlight;
|
|
362
362
|
background-color: ButtonFace;
|
|
363
363
|
color: ButtonText;
|
package/css/popconfirm.css
CHANGED
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
/* 箭头绝对定位挂在 content 上,不占格:吃到栅格位的话它的贴边就从格线起算,被内衬推进面里 */
|
|
148
|
-
[data-scope='popconfirm'][data-part='content'] > [data-part='arrow'] {
|
|
148
|
+
[data-scope='popconfirm'][data-part='content'] > [data-part='arrow']:where([data-scope='popconfirm']) {
|
|
149
149
|
grid-column: auto;
|
|
150
150
|
}
|
|
151
151
|
|
|
@@ -234,11 +234,11 @@
|
|
|
234
234
|
}
|
|
235
235
|
|
|
236
236
|
/* 并排落在最后一行的右侧两格;取消在左、确认在右 */
|
|
237
|
-
[data-scope='popconfirm'][data-part='content'] > [data-part='cancel-trigger'] {
|
|
237
|
+
[data-scope='popconfirm'][data-part='content'] > [data-part='cancel-trigger']:where([data-scope='popconfirm']) {
|
|
238
238
|
grid-column: 2;
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
[data-scope='popconfirm'][data-part='content'] > [data-part='confirm-trigger'] {
|
|
241
|
+
[data-scope='popconfirm'][data-part='content'] > [data-part='confirm-trigger']:where([data-scope='popconfirm']) {
|
|
242
242
|
grid-column: 3;
|
|
243
243
|
}
|
|
244
244
|
|
package/css/question-flow.css
CHANGED
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
/* 卡片出现时滑入;落在首帧就在的列表条目里(历史消息)时直接呈现,不跟着整屏一起入场 */
|
|
44
|
-
[data-scope='question-flow'][data-part='root']:not([data-scope][data-part='item'][data-instant]
|
|
44
|
+
[data-scope='question-flow'][data-part='root']:not([data-scope][data-part='item'][data-instant] :where([data-scope='question-flow'])) {
|
|
45
45
|
animation: xh-item-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -201,27 +201,27 @@
|
|
|
201
201
|
位次就是到达顺序。落在首帧就在的列表条目里(历史消息)时直接呈现。
|
|
202
202
|
backwards 不能省:等待期间起帧不生效的话,后面几条会先露一下再跳回去。
|
|
203
203
|
第 6 条起并到同一拍上 */
|
|
204
|
-
[data-scope='question-flow'][data-part='question'][data-current] [data-part='item']:not([data-scope][data-part='item'][data-instant]
|
|
204
|
+
[data-scope='question-flow'][data-part='question'][data-current] [data-part='item']:where([data-scope='question-flow']):not([data-scope][data-part='item'][data-instant] :where([data-scope='question-flow'])) {
|
|
205
205
|
animation: xh-rise-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong) backwards;
|
|
206
206
|
}
|
|
207
207
|
|
|
208
|
-
[data-scope='question-flow'][data-part='question'][data-current] [data-part='item']:nth-child(2):not([data-scope][data-part='item'][data-instant]
|
|
208
|
+
[data-scope='question-flow'][data-part='question'][data-current] [data-part='item']:where([data-scope='question-flow']):nth-child(2):not([data-scope][data-part='item'][data-instant] :where([data-scope='question-flow'])) {
|
|
209
209
|
animation-delay: calc(var(--xh-motion-stagger-step) * 1);
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
[data-scope='question-flow'][data-part='question'][data-current] [data-part='item']:nth-child(3):not([data-scope][data-part='item'][data-instant]
|
|
212
|
+
[data-scope='question-flow'][data-part='question'][data-current] [data-part='item']:where([data-scope='question-flow']):nth-child(3):not([data-scope][data-part='item'][data-instant] :where([data-scope='question-flow'])) {
|
|
213
213
|
animation-delay: calc(var(--xh-motion-stagger-step) * 2);
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
-
[data-scope='question-flow'][data-part='question'][data-current] [data-part='item']:nth-child(4):not([data-scope][data-part='item'][data-instant]
|
|
216
|
+
[data-scope='question-flow'][data-part='question'][data-current] [data-part='item']:where([data-scope='question-flow']):nth-child(4):not([data-scope][data-part='item'][data-instant] :where([data-scope='question-flow'])) {
|
|
217
217
|
animation-delay: calc(var(--xh-motion-stagger-step) * 3);
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
[data-scope='question-flow'][data-part='question'][data-current] [data-part='item']:nth-child(5):not([data-scope][data-part='item'][data-instant]
|
|
220
|
+
[data-scope='question-flow'][data-part='question'][data-current] [data-part='item']:where([data-scope='question-flow']):nth-child(5):not([data-scope][data-part='item'][data-instant] :where([data-scope='question-flow'])) {
|
|
221
221
|
animation-delay: calc(var(--xh-motion-stagger-step) * 4);
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
-
[data-scope='question-flow'][data-part='question'][data-current] [data-part='item']:nth-child(n + 6):not([data-scope][data-part='item'][data-instant]
|
|
224
|
+
[data-scope='question-flow'][data-part='question'][data-current] [data-part='item']:where([data-scope='question-flow']):nth-child(n + 6):not([data-scope][data-part='item'][data-instant] :where([data-scope='question-flow'])) {
|
|
225
225
|
animation-delay: calc(var(--xh-motion-stagger-step) * 5);
|
|
226
226
|
}
|
|
227
227
|
|
|
@@ -504,7 +504,7 @@
|
|
|
504
504
|
}
|
|
505
505
|
|
|
506
506
|
/* 落定结果弹出;落在首帧就在的列表条目里(历史消息)时直接呈现,不跟着整屏一起入场 */
|
|
507
|
-
[data-scope='question-flow'][data-part='result']:not([data-scope][data-part='item'][data-instant]
|
|
507
|
+
[data-scope='question-flow'][data-part='result']:not([data-scope][data-part='item'][data-instant] :where([data-scope='question-flow'])) {
|
|
508
508
|
animation: xh-pop-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
|
|
509
509
|
}
|
|
510
510
|
|
package/css/radar-chart.css
CHANGED
|
@@ -167,12 +167,12 @@
|
|
|
167
167
|
|
|
168
168
|
/* —— 纹理:颜色不可用或不可靠时(强制色、打印、祖先写了 data-xh-chart-patterns),面积改用本系列在 defs 里的
|
|
169
169
|
纹理填充、描出轮廓,轮廓换线型。色标的纹理在配方里 —— */
|
|
170
|
-
:where([data-xh-chart-patterns]) [data-scope='radar-chart'][data-xh-chart-pattern] > [data-part='area-fill'] {
|
|
170
|
+
:where([data-xh-chart-patterns]) [data-scope='radar-chart'][data-xh-chart-pattern] > [data-part='area-fill']:where([data-scope='radar-chart']) {
|
|
171
171
|
fill: var(--xh-_chart-pattern);
|
|
172
172
|
fill-opacity: 1;
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
:where([data-xh-chart-patterns]) [data-scope='radar-chart'][data-xh-chart-pattern] > [data-part='line'] {
|
|
175
|
+
:where([data-xh-chart-patterns]) [data-scope='radar-chart'][data-xh-chart-pattern] > [data-part='line']:where([data-scope='radar-chart']) {
|
|
176
176
|
stroke-dasharray: var(--xh-_chart-dash);
|
|
177
177
|
}
|
|
178
178
|
|
|
@@ -204,13 +204,13 @@
|
|
|
204
204
|
stroke: Canvas;
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
-
[data-scope='radar-chart'][data-xh-chart-pattern] > [data-part='area-fill'] {
|
|
207
|
+
[data-scope='radar-chart'][data-xh-chart-pattern] > [data-part='area-fill']:where([data-scope='radar-chart']) {
|
|
208
208
|
forced-color-adjust: none;
|
|
209
209
|
fill: var(--xh-_chart-pattern);
|
|
210
210
|
fill-opacity: 1;
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
-
[data-scope='radar-chart'][data-xh-chart-pattern] > [data-part='line'] {
|
|
213
|
+
[data-scope='radar-chart'][data-xh-chart-pattern] > [data-part='line']:where([data-scope='radar-chart']) {
|
|
214
214
|
stroke-dasharray: var(--xh-_chart-dash);
|
|
215
215
|
}
|
|
216
216
|
}
|
|
@@ -221,12 +221,12 @@
|
|
|
221
221
|
display: none;
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
-
[data-scope='radar-chart'][data-xh-chart-pattern] > [data-part='area-fill'] {
|
|
224
|
+
[data-scope='radar-chart'][data-xh-chart-pattern] > [data-part='area-fill']:where([data-scope='radar-chart']) {
|
|
225
225
|
fill: var(--xh-_chart-pattern);
|
|
226
226
|
fill-opacity: 1;
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
-
[data-scope='radar-chart'][data-xh-chart-pattern] > [data-part='line'] {
|
|
229
|
+
[data-scope='radar-chart'][data-xh-chart-pattern] > [data-part='line']:where([data-scope='radar-chart']) {
|
|
230
230
|
stroke-dasharray: var(--xh-_chart-dash);
|
|
231
231
|
}
|
|
232
232
|
}
|
package/css/rating.css
CHANGED
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
justify-content: start;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
[data-scope='rating'][data-part='root']:has(> [data-part='value-text']) > [data-part='label'] {
|
|
81
|
+
[data-scope='rating'][data-part='root']:has(> [data-part='value-text']) > [data-part='label']:where([data-scope='rating']) {
|
|
82
82
|
grid-column: 1 / -1;
|
|
83
83
|
}
|
|
84
84
|
|
package/css/select.css
CHANGED
|
@@ -224,7 +224,7 @@
|
|
|
224
224
|
|
|
225
225
|
/* 标签行露面时 value-text 让位:两者是触发器里的同一格,占位文字与标签不同屏。
|
|
226
226
|
value-text 留在 DOM 里,trigger 的可及名仍从它取到完整的选中项文本 */
|
|
227
|
-
[data-scope='select'][data-part='trigger']:has([data-part='tag-list']:not([hidden])) [data-part='value-text'] {
|
|
227
|
+
[data-scope='select'][data-part='trigger']:has([data-part='tag-list']:not([hidden])) [data-part='value-text']:where([data-scope='select']) {
|
|
228
228
|
display: none;
|
|
229
229
|
}
|
|
230
230
|
|
|
@@ -256,7 +256,7 @@
|
|
|
256
256
|
/* 有值时清空钮顶上来,箭头让位:两个图标并排堆着,用户分不清点哪个。
|
|
257
257
|
判据查的是盒里此刻真有一颗没收起的清空钮,不是「有没有值」——
|
|
258
258
|
作者没摆清空钮时箭头照常留着,不然让了位没人接,指示符整个消失 */
|
|
259
|
-
[data-scope='select'][data-part='control']:has([data-part='clear-trigger']:not([hidden])) [data-part='indicator'] {
|
|
259
|
+
[data-scope='select'][data-part='control']:has([data-part='clear-trigger']:not([hidden])) [data-part='indicator']:where([data-scope='select']) {
|
|
260
260
|
display: none;
|
|
261
261
|
}
|
|
262
262
|
|
package/css/separator.css
CHANGED
|
@@ -109,8 +109,8 @@
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
/* 文字靠边:靠哪边就把那一侧的线收成一小截,另一侧照旧等分 */
|
|
112
|
-
[data-scope='separator'][data-part='root'][data-align='start'] > [data-part='line']:first-child,
|
|
113
|
-
[data-scope='separator'][data-part='root'][data-align='end'] > [data-part='line']:last-child {
|
|
112
|
+
[data-scope='separator'][data-part='root'][data-align='start'] > [data-part='line']:where([data-scope='separator']):first-child,
|
|
113
|
+
[data-scope='separator'][data-part='root'][data-align='end'] > [data-part='line']:where([data-scope='separator']):last-child {
|
|
114
114
|
flex: 0 0 var(--xh-separator-align-length, var(--xh-space-6));
|
|
115
115
|
}
|
|
116
116
|
|
package/css/side-nav.css
CHANGED
|
@@ -112,11 +112,11 @@
|
|
|
112
112
|
|
|
113
113
|
/* 折叠一开始搜索框就与行文字一起淡出,展开等整栏宽度落定才淡入;落成图标栏之后让位:
|
|
114
114
|
留着高度、不可见也不可聚焦(过滤此时暂停),下面的行不上下跳 */
|
|
115
|
-
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='input'] {
|
|
115
|
+
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='input']:where([data-scope='side-nav']) {
|
|
116
116
|
opacity: 0;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='input'] {
|
|
119
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='input']:where([data-scope='side-nav']) {
|
|
120
120
|
visibility: hidden;
|
|
121
121
|
}
|
|
122
122
|
|
|
@@ -171,13 +171,13 @@
|
|
|
171
171
|
|
|
172
172
|
/* 图标栏里分组标题没有落点:字淡成透明、仍参与播报,标题留着自己的高度,下面的行不上下跳;
|
|
173
173
|
折叠一开始就淡出,展开等整栏宽度落定才淡入。落成图标栏之后在这一格里画一道细分隔,分组仍看得出来 */
|
|
174
|
-
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='group-label'] {
|
|
174
|
+
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='group-label']:where([data-scope='side-nav']) {
|
|
175
175
|
overflow: hidden;
|
|
176
176
|
color: transparent;
|
|
177
177
|
white-space: nowrap;
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='group-label']::after {
|
|
180
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='group-label']:where([data-scope='side-nav'])::after {
|
|
181
181
|
content: '';
|
|
182
182
|
position: absolute;
|
|
183
183
|
inset-inline: var(--xh-_side-nav-row-px);
|
|
@@ -275,9 +275,9 @@
|
|
|
275
275
|
|
|
276
276
|
/* 行文字与展开箭头的淡变:折叠一开始就淡出,此时仍在行里、由收窄的行宽裁着;展开时等整栏宽度落定才淡入。
|
|
277
277
|
弹出面板里的行不在此列 */
|
|
278
|
-
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='branch-text']:not([data-popout]
|
|
279
|
-
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='link-text']:not([data-popout]
|
|
280
|
-
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='branch-indicator']:not([data-popout]
|
|
278
|
+
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='branch-text']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])),
|
|
279
|
+
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='link-text']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])),
|
|
280
|
+
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='branch-indicator']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])) {
|
|
281
281
|
opacity: 0;
|
|
282
282
|
}
|
|
283
283
|
|
|
@@ -286,8 +286,8 @@
|
|
|
286
286
|
藏成 display:none 它们就一个名字都没有了。
|
|
287
287
|
white-space: nowrap 防止 1px 宽把文本挤成竖排。
|
|
288
288
|
弹出面板里的行不在此列——面板是正常宽度的浮层,文字照常显示 */
|
|
289
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='branch-text']:not([data-popout]
|
|
290
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='link-text']:not([data-popout]
|
|
289
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='branch-text']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])),
|
|
290
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='link-text']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])) {
|
|
291
291
|
position: absolute;
|
|
292
292
|
inline-size: 1px;
|
|
293
293
|
block-size: 1px;
|
|
@@ -300,12 +300,12 @@
|
|
|
300
300
|
}
|
|
301
301
|
|
|
302
302
|
/* 展开指示是纯装饰(aria-hidden),落成图标栏之后整个不占位 */
|
|
303
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='branch-indicator']:not([data-popout]
|
|
303
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='branch-indicator']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])) {
|
|
304
304
|
display: none;
|
|
305
305
|
}
|
|
306
306
|
|
|
307
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='branch-trigger']:not([data-popout]
|
|
308
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='link']:not([data-popout]
|
|
307
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='branch-trigger']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])),
|
|
308
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='link']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])) {
|
|
309
309
|
--xh-collection-inline-padding: 0;
|
|
310
310
|
|
|
311
311
|
justify-content: center;
|
|
@@ -441,7 +441,7 @@
|
|
|
441
441
|
|
|
442
442
|
@media (forced-colors: active) {
|
|
443
443
|
/* 图标栏里分组之间那道细分隔画的是一块底色,这一档里底色被统一换成 Canvas、整道消失;换成 GrayText 画回来 */
|
|
444
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='group-label']::after {
|
|
444
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='group-label']:where([data-scope='side-nav'])::after {
|
|
445
445
|
background: GrayText;
|
|
446
446
|
}
|
|
447
447
|
}
|
package/css/skeleton.css
CHANGED
|
@@ -90,13 +90,13 @@
|
|
|
90
90
|
* 微光扫的是一道亮带,呼吸改的是整根的浓淡——两者都表达"还在等",
|
|
91
91
|
* 换哪一档由作者定,缺省仍是微光。
|
|
92
92
|
*/
|
|
93
|
-
[data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item'] {
|
|
93
|
+
[data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item']:where([data-scope='skeleton']) {
|
|
94
94
|
background-image: none;
|
|
95
95
|
animation: xh-skeleton-pulse var(--xh-skeleton-pulse-duration, var(--xh-motion-loop-shimmer)) var(--xh-motion-ease-sweep) infinite alternate;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
/* 静止档:底色留着,两层动效都撤掉 */
|
|
99
|
-
[data-scope='skeleton'][data-part='root'][data-animation='none'] [data-part='item'] {
|
|
99
|
+
[data-scope='skeleton'][data-part='root'][data-animation='none'] [data-part='item']:where([data-scope='skeleton']) {
|
|
100
100
|
background-image: none;
|
|
101
101
|
animation: none;
|
|
102
102
|
}
|
|
@@ -104,17 +104,17 @@
|
|
|
104
104
|
/* 呼吸档自带一条动画,压不住下面基础降级里的 animation: none,这一档各自再写一份。
|
|
105
105
|
两组规则是同一件事的两个触发条件:系统偏好与作者打的 data-motion */
|
|
106
106
|
@media (prefers-reduced-motion: reduce) {
|
|
107
|
-
[data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item'] {
|
|
107
|
+
[data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item']:where([data-scope='skeleton']) {
|
|
108
108
|
animation: none;
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
:where([data-motion='reduce']) [data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item'] {
|
|
112
|
+
:where([data-motion='reduce']) [data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item']:where([data-scope='skeleton']) {
|
|
113
113
|
animation: none;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
@media print {
|
|
117
|
-
[data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item'] {
|
|
117
|
+
[data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item']:where([data-scope='skeleton']) {
|
|
118
118
|
animation: none;
|
|
119
119
|
}
|
|
120
120
|
}
|
package/css/slider.css
CHANGED
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
排了刻度文案的横轨两侧各让出一段,那半个文案落进让出来的这一段里。
|
|
65
65
|
让在控件上而不是根上:轨道、刻度、拇指的坐标都以控件为基准,一起让开才不会彼此错位。 */
|
|
66
66
|
[data-scope='slider'][data-part='root']:has([data-part='tick-label'])
|
|
67
|
-
[data-part='control'][data-orientation='horizontal'] {
|
|
67
|
+
[data-part='control'][data-orientation='horizontal']:where([data-scope='slider']) {
|
|
68
68
|
margin-inline: var(--xh-slider-control-gutter, var(--xh-space-6));
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -335,27 +335,27 @@
|
|
|
335
335
|
|
|
336
336
|
/* 禁用:刻度点与文案由 tick-group 上的 data-disabled 下发(连接层不给每个刻度单发),
|
|
337
337
|
已过的刻度点与区间同色,文案换禁用前景,点它跳档的手型收掉 */
|
|
338
|
-
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick'] {
|
|
338
|
+
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick']:where([data-scope='slider']) {
|
|
339
339
|
background: var(--xh-slider-tick-bg-disabled, var(--xh-border-default));
|
|
340
340
|
}
|
|
341
341
|
|
|
342
|
-
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick'][data-passed] {
|
|
342
|
+
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick'][data-passed]:where([data-scope='slider']) {
|
|
343
343
|
background: var(--xh-slider-tick-bg-active-disabled, var(--xh-fg-disabled));
|
|
344
344
|
}
|
|
345
345
|
|
|
346
|
-
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick-label'] {
|
|
346
|
+
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick-label']:where([data-scope='slider']) {
|
|
347
347
|
color: var(--xh-slider-tick-label-fg-disabled, var(--xh-fg-disabled));
|
|
348
348
|
cursor: not-allowed;
|
|
349
349
|
}
|
|
350
350
|
|
|
351
351
|
/* 竖直轨道:点与文案换轴,坐标由连接层写在 block 轴上 */
|
|
352
|
-
[data-scope='slider'][data-part='root'][data-orientation='vertical'] [data-part='tick'] {
|
|
352
|
+
[data-scope='slider'][data-part='root'][data-orientation='vertical'] [data-part='tick']:where([data-scope='slider']) {
|
|
353
353
|
inset-block-start: auto;
|
|
354
354
|
inset-inline-start: 50%;
|
|
355
355
|
translate: calc(-50% * var(--xh-direction-sign)) 50%;
|
|
356
356
|
}
|
|
357
357
|
|
|
358
|
-
[data-scope='slider'][data-part='root'][data-orientation='vertical'] [data-part='tick-label'] {
|
|
358
|
+
[data-scope='slider'][data-part='root'][data-orientation='vertical'] [data-part='tick-label']:where([data-scope='slider']) {
|
|
359
359
|
inset-block-start: auto;
|
|
360
360
|
inset-inline-start: 100%;
|
|
361
361
|
margin-block-start: 0;
|
package/css/sortable.css
CHANGED
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
其余项反过来要过渡:它们是被让开的,瞬移会看不出发生了什么。
|
|
51
51
|
键盘拖动时被拖那一项不跟手、逐格挪,与让位的邻项同一段一起滑;抓起时的抬升照常淡变。
|
|
52
52
|
同组别的列表的一项悬在这里(data-drop='inside')时,插入点及其后的项同样是被让开的 */
|
|
53
|
-
[data-scope='sortable'][data-part='root']:is([data-dragging], [data-drop='inside']) [data-part='item']:not([data-dragging]) {
|
|
53
|
+
[data-scope='sortable'][data-part='root']:is([data-dragging], [data-drop='inside']) [data-part='item']:where([data-scope='sortable']):not([data-dragging]) {
|
|
54
54
|
transition: translate var(--xh-motion-duration-nudge) var(--xh-motion-ease-continuous);
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
flex: 0 0 var(--xh-_sortable-incoming-size);
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
[data-scope='sortable'][data-part='root'][data-drag-mode='keyboard'] [data-part='item'][data-dragging] {
|
|
65
|
+
[data-scope='sortable'][data-part='root'][data-drag-mode='keyboard'] [data-part='item'][data-dragging]:where([data-scope='sortable']) {
|
|
66
66
|
transition:
|
|
67
67
|
translate var(--xh-motion-duration-nudge) var(--xh-motion-ease-continuous),
|
|
68
68
|
box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
package/css/table.css
CHANGED
|
@@ -307,6 +307,23 @@
|
|
|
307
307
|
user-select: none;
|
|
308
308
|
}
|
|
309
309
|
|
|
310
|
+
/* 列对齐:data-align 控制列头与数据格的文本与内容对齐方向;
|
|
311
|
+
显式写出三档以便 start 能重置自定义皮肤里可能存在的非默认对齐 */
|
|
312
|
+
[data-scope='table']:is([data-part='column-header'], [data-part='cell'])[data-align='start'] {
|
|
313
|
+
text-align: start;
|
|
314
|
+
justify-content: start;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
[data-scope='table']:is([data-part='column-header'], [data-part='cell'])[data-align='center'] {
|
|
318
|
+
text-align: center;
|
|
319
|
+
justify-content: center;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
[data-scope='table']:is([data-part='column-header'], [data-part='cell'])[data-align='end'] {
|
|
323
|
+
text-align: end;
|
|
324
|
+
justify-content: end;
|
|
325
|
+
}
|
|
326
|
+
|
|
310
327
|
/* 列名是列头里唯一可收窄的一格:flex: 1 吃掉余量、把排序钮 / 列宽把手推到行尾,min-inline-size: 0 让它在
|
|
311
328
|
窄列上收得下去并出省略号。列名不能裸写成文本节点:flex 行里的裸文本是匿名 flex item,min-inline-size 取 auto
|
|
312
329
|
(nowrap 文本的 min-content)缩不下去,96px 的列配一串长列名时定尺的把手连同 auto 外边距一起被挤出列头盒、
|
|
@@ -402,8 +419,8 @@
|
|
|
402
419
|
}
|
|
403
420
|
|
|
404
421
|
/* root 恒报两端(没有冻结列时两端都算贴着);虚拟滚动的行隔着视口,按后代认 */
|
|
405
|
-
[data-scope='table'][data-part='root']:not([data-at-min-horizontal]) :is([data-part='column-header'], [data-part='cell'])[data-frozen-edge][data-frozen='start']::after,
|
|
406
|
-
[data-scope='table'][data-part='root']:not([data-at-max-horizontal]) :is([data-part='column-header'], [data-part='cell'])[data-frozen-edge][data-frozen='end']::after {
|
|
422
|
+
[data-scope='table'][data-part='root']:not([data-at-min-horizontal]) :is([data-part='column-header'], [data-part='cell']):where([data-scope='table'])[data-frozen-edge][data-frozen='start']::after,
|
|
423
|
+
[data-scope='table'][data-part='root']:not([data-at-max-horizontal]) :is([data-part='column-header'], [data-part='cell']):where([data-scope='table'])[data-frozen-edge][data-frozen='end']::after {
|
|
407
424
|
opacity: 1;
|
|
408
425
|
}
|
|
409
426
|
|
package/css/tags-input.css
CHANGED
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
|
|
162
162
|
/* 新落下的标签原地弹出,同一批按到达顺序错开;首帧就在的直接呈现(自己或 control 带 data-instant)。
|
|
163
163
|
横排胶囊不用竖向上浮:与来源方向不符,还会探出字段外壳的底边 */
|
|
164
|
-
[data-scope='tags-input'][data-part='item']:not([data-instant], [data-instant] >
|
|
164
|
+
[data-scope='tags-input'][data-part='item']:not([data-instant], [data-instant] > :where([data-scope='tags-input'])) {
|
|
165
165
|
animation: xh-pop-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong) backwards;
|
|
166
166
|
animation-delay: calc(var(--xh-_stagger-index, 0) * var(--xh-motion-stagger-step));
|
|
167
167
|
}
|
package/css/time-picker.css
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
/* 共享关键帧由 family/motion.css 提供,本皮肤 @import 它,单独引入仍成立。 */
|
|
14
14
|
@import '../family/motion.css';
|
|
15
|
+
@import '../family/tag-list.css';
|
|
15
16
|
|
|
16
17
|
@layer xihan.components {
|
|
17
18
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
@@ -176,6 +177,27 @@
|
|
|
176
177
|
display: none;
|
|
177
178
|
}
|
|
178
179
|
|
|
180
|
+
/* 多选的标签行:段位让位,选中的时刻在盒里排成标签,超过 maxTagCount 的折进 +N。
|
|
181
|
+
行里每一枚都是 tag(data-scope="tag"),样子归 tag.css;行怎么排、标签怎么进出归标签行家族配方。
|
|
182
|
+
基准取 0:只吃两颗钮剩下的宽度、在自己里面折行;按内容宽算基准的话,盒子会先在钮前面折行,把钮挤到最后一行 */
|
|
183
|
+
[data-scope='time-picker'][data-part='tag-list'] {
|
|
184
|
+
--xh-tag-list-gap: var(--xh-time-picker-tag-list-gap, var(--xh-space-1));
|
|
185
|
+
|
|
186
|
+
flex: 1 1 0;
|
|
187
|
+
flex-wrap: wrap;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* 时刻标签是定长文字,截短了就读不出是几点:不收缩,排不下就折到下一行(与标签输入同一种排法),
|
|
191
|
+
盒随行数长高(字段家族的 multi-tag 布局给),到上限后在盒内滚动 */
|
|
192
|
+
[data-scope='time-picker'][data-part='tag-list'] > [data-scope='tag'][data-part='root'] {
|
|
193
|
+
flex: none;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
[data-scope='time-picker'][data-part='control'][data-xh-field-layout='multi-tag'] {
|
|
197
|
+
max-block-size: var(--xh-time-picker-control-max-h, var(--xh-viewport-h-sm));
|
|
198
|
+
overflow-y: auto;
|
|
199
|
+
}
|
|
200
|
+
|
|
179
201
|
[data-scope='time-picker'][data-part='segment-group'] > :not([data-scope]) {
|
|
180
202
|
color: var(--xh-time-picker-literal-fg, var(--xh-fg-subtle));
|
|
181
203
|
}
|
|
@@ -281,10 +303,11 @@
|
|
|
281
303
|
--xh-action-fg-rest: var(--xh-time-picker-action-fg-hover, var(--xh-fg-default));
|
|
282
304
|
}
|
|
283
305
|
|
|
284
|
-
/*
|
|
306
|
+
/* 有值时清空钮顶上来,展开钮让位:两颗并排堆着用户分不清点哪个。
|
|
307
|
+
多选不让位:段位收起后展开钮是唯一的键盘入口(退格摘标签也在它身上),藏了键盘就进不来 */
|
|
285
308
|
[data-scope='time-picker'][data-part='control']:has(
|
|
286
309
|
> [data-scope='time-picker'][data-part='clear-trigger']:not([hidden])
|
|
287
|
-
)
|
|
310
|
+
):not(:has(> [data-scope='time-picker'][data-part='tag-list']:not([hidden])))
|
|
288
311
|
> [data-scope='time-picker'][data-part='trigger'] {
|
|
289
312
|
display: none;
|
|
290
313
|
}
|
|
@@ -334,6 +357,40 @@
|
|
|
334
357
|
animation: xh-overlay-slide-out var(--xh-motion-duration-exit) var(--xh-motion-ease-exit) forwards;
|
|
335
358
|
}
|
|
336
359
|
|
|
360
|
+
/* 「添加」沉到各列的右下角:它是多选时整块面板的出口,不跟列顶对齐 */
|
|
361
|
+
[data-scope='time-picker'][data-part='content'] > [data-scope='time-picker'][data-part='confirm-trigger'] {
|
|
362
|
+
flex: none;
|
|
363
|
+
align-self: flex-end;
|
|
364
|
+
margin-inline-start: var(--xh-time-picker-confirm-trigger-gap, var(--xh-space-1));
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/* 「添加」是面板里唯一的主要动作:品牌实心、悬停 / 按下与 0.97 按压、焦点环全由 Action Control 的
|
|
368
|
+
text solid 档给;槽名统一按部件取 --xh-time-picker-confirm-trigger-*,只映射到家族桥接槽 */
|
|
369
|
+
[data-scope='time-picker'][data-part='confirm-trigger'] {
|
|
370
|
+
--xh-action-visual-size: var(--xh-time-picker-confirm-trigger-h, var(--xh-_action-profile-visual-size));
|
|
371
|
+
--xh-action-padding-inline: var(--xh-time-picker-confirm-trigger-px, var(--xh-_action-profile-padding-inline));
|
|
372
|
+
--xh-action-radius: var(--xh-time-picker-confirm-trigger-radius, var(--xh-shape-control));
|
|
373
|
+
--xh-action-bg-rest: var(--xh-time-picker-confirm-trigger-bg, var(--xh-_action-variant-bg-rest));
|
|
374
|
+
--xh-action-bg-hover: var(--xh-time-picker-confirm-trigger-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
375
|
+
--xh-action-bg-pressed: var(--xh-time-picker-confirm-trigger-bg-active, var(--xh-_action-variant-bg-pressed));
|
|
376
|
+
--xh-action-fg-rest: var(--xh-time-picker-confirm-trigger-fg, var(--xh-_action-variant-fg-rest));
|
|
377
|
+
--xh-action-fg-hover: var(--xh-time-picker-confirm-trigger-fg, var(--xh-_action-variant-fg-hover));
|
|
378
|
+
--xh-action-fg-pressed: var(--xh-time-picker-confirm-trigger-fg, var(--xh-_action-variant-fg-pressed));
|
|
379
|
+
--xh-action-border-rest: transparent;
|
|
380
|
+
--xh-action-highlight-rest: transparent;
|
|
381
|
+
--xh-action-shadow-rest: var(--xh-time-picker-confirm-trigger-shadow, none);
|
|
382
|
+
--xh-action-shadow-hover: var(--xh-time-picker-confirm-trigger-shadow, none);
|
|
383
|
+
--xh-action-shadow-pressed: var(--xh-time-picker-confirm-trigger-shadow, none);
|
|
384
|
+
--xh-action-font-size: var(--xh-text-secondary-size);
|
|
385
|
+
|
|
386
|
+
border-width: 0;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/* 单选时连接层给的是 hidden 属性;家族那条 display 会把 UA 规则盖掉 */
|
|
390
|
+
[data-scope='time-picker'][data-part='confirm-trigger'][hidden] {
|
|
391
|
+
display: none;
|
|
392
|
+
}
|
|
393
|
+
|
|
337
394
|
/* 快捷选项也是一列,与时分秒那几列并排,排在行内起始一侧 */
|
|
338
395
|
[data-scope='time-picker'][data-part='preset-group'] {
|
|
339
396
|
display: flex;
|
package/css/tool-call.css
CHANGED
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
/* 卡片出现时滑入;落在首帧就在的列表条目里(历史消息)时直接呈现,不跟着整屏一起入场 */
|
|
44
|
-
[data-scope='tool-call'][data-part='root']:not([data-scope][data-part='item'][data-instant]
|
|
44
|
+
[data-scope='tool-call'][data-part='root']:not([data-scope][data-part='item'][data-instant] :where([data-scope='tool-call'])) {
|
|
45
45
|
animation: xh-item-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong) both;
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
/* 有摘要时把剩余宽度让给它:工具名只要放得下自己,摘要才是这一行里最想读到的东西 */
|
|
177
|
-
[data-scope='tool-call'][data-part='trigger']:has([data-part='summary']) [data-part='label'] {
|
|
177
|
+
[data-scope='tool-call'][data-part='trigger']:has([data-part='summary']) [data-part='label']:where([data-scope='tool-call']) {
|
|
178
178
|
flex: 0 1 auto;
|
|
179
179
|
}
|
|
180
180
|
|
|
@@ -241,7 +241,7 @@
|
|
|
241
241
|
/* 在跑的时候状态文字自己扫一道光:data-loading 此前在皮肤里没有任何表达,
|
|
242
242
|
参数在传与参数齐了两档在屏幕上一模一样。
|
|
243
243
|
渐变画在背景上再裁进字形,前景与 WebKit 的字形填充色都要透明才透得出底下那道光 */
|
|
244
|
-
[data-scope='tool-call'][data-part='root'][data-loading] [data-part='status'] {
|
|
244
|
+
[data-scope='tool-call'][data-part='root'][data-loading] [data-part='status']:where([data-scope='tool-call']) {
|
|
245
245
|
background-image: linear-gradient(
|
|
246
246
|
90deg,
|
|
247
247
|
var(--xh-tool-call-status-shimmer-base, var(--xh-fg-subtle)) 35%,
|
|
@@ -259,7 +259,7 @@
|
|
|
259
259
|
/* 减少动效:整道光撤掉换回平色,"在跑"仍由状态文字本身表达——只停动画的话,
|
|
260
260
|
字形里会留着一段冻住的渐变。两条规则是同一件事的两个触发条件:系统偏好与作者打的 data-motion */
|
|
261
261
|
@media (prefers-reduced-motion: reduce) {
|
|
262
|
-
[data-scope='tool-call'][data-part='root'][data-loading] [data-part='status'] {
|
|
262
|
+
[data-scope='tool-call'][data-part='root'][data-loading] [data-part='status']:where([data-scope='tool-call']) {
|
|
263
263
|
background-image: none;
|
|
264
264
|
color: var(--xh-tool-call-status-fg, var(--xh-fg-muted));
|
|
265
265
|
-webkit-text-fill-color: currentColor;
|
|
@@ -267,7 +267,7 @@
|
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
-
:where([data-motion='reduce']) [data-scope='tool-call'][data-part='root'][data-loading] [data-part='status'] {
|
|
270
|
+
:where([data-motion='reduce']) [data-scope='tool-call'][data-part='root'][data-loading] [data-part='status']:where([data-scope='tool-call']) {
|
|
271
271
|
background-image: none;
|
|
272
272
|
color: var(--xh-tool-call-status-fg, var(--xh-fg-muted));
|
|
273
273
|
-webkit-text-fill-color: currentColor;
|
|
@@ -404,7 +404,7 @@
|
|
|
404
404
|
取值与减弱动效那一档相同。两档各写一块、不并进一条媒体查询列表:减弱动效另有一份
|
|
405
405
|
:where([data-motion='reduce']) 的钩子版本与它成对,打印没有对应的钩子可配,
|
|
406
406
|
并成一条之后这层配对关系在文本上就断了。 */
|
|
407
|
-
[data-scope='tool-call'][data-part='root'][data-loading] [data-part='status'] {
|
|
407
|
+
[data-scope='tool-call'][data-part='root'][data-loading] [data-part='status']:where([data-scope='tool-call']) {
|
|
408
408
|
background-image: none;
|
|
409
409
|
color: var(--xh-tool-call-status-fg, var(--xh-fg-muted));
|
|
410
410
|
-webkit-text-fill-color: currentColor;
|
|
@@ -417,7 +417,7 @@
|
|
|
417
417
|
* 把两处填充都还回去,在跑这件事仍由状态文字本身表出。
|
|
418
418
|
*/
|
|
419
419
|
@media (forced-colors: active) {
|
|
420
|
-
[data-scope='tool-call'][data-part='root'][data-loading] [data-part='status'] {
|
|
420
|
+
[data-scope='tool-call'][data-part='root'][data-loading] [data-part='status']:where([data-scope='tool-call']) {
|
|
421
421
|
background-image: none;
|
|
422
422
|
-webkit-background-clip: border-box;
|
|
423
423
|
background-clip: border-box;
|
package/css/tooltip.css
CHANGED
|
@@ -181,7 +181,7 @@
|
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
/* 高对比仍保持反白语义:compact 配方已把 tint / blur / shadow 换成实体档,此处只加强同色边界。 */
|
|
184
|
-
:is([data-contrast='more']
|
|
184
|
+
:is([data-contrast='more'] :where([data-scope='tooltip']), [data-contrast='more'])[data-scope='tooltip'][data-part='content'] {
|
|
185
185
|
--xh-_tooltip-border: var(--xh-_tooltip-on);
|
|
186
186
|
}
|
|
187
187
|
|
package/css/tree-select.css
CHANGED
|
@@ -227,14 +227,14 @@
|
|
|
227
227
|
|
|
228
228
|
/* 标签行露面时 value-text 让位:两者是触发器里的同一格,占位文字与标签不同屏。
|
|
229
229
|
value-text 留在 DOM 里,trigger 的可及名仍从它取到完整的选中项文本 */
|
|
230
|
-
[data-scope='tree-select'][data-part='trigger']:has([data-part='tag-list']:not([hidden])) [data-part='value-text'] {
|
|
230
|
+
[data-scope='tree-select'][data-part='trigger']:has([data-part='tag-list']:not([hidden])) [data-part='value-text']:where([data-scope='tree-select']) {
|
|
231
231
|
display: none;
|
|
232
232
|
}
|
|
233
233
|
|
|
234
234
|
/* 有值时清空钮顶上来,箭头让位:两个图标并排堆着,用户分不清点哪个。
|
|
235
235
|
判据查的是盒里此刻真有一颗没收起的清空钮,不是「有没有值」——
|
|
236
236
|
作者没摆清空钮时箭头照常留着,不然让了位没人接,指示符整个消失 */
|
|
237
|
-
[data-scope='tree-select'][data-part='control']:has([data-part='clear-trigger']:not([hidden])) [data-part='indicator'] {
|
|
237
|
+
[data-scope='tree-select'][data-part='control']:has([data-part='clear-trigger']:not([hidden])) [data-part='indicator']:where([data-scope='tree-select']) {
|
|
238
238
|
display: none;
|
|
239
239
|
}
|
|
240
240
|
|