@xihan-ui/styles 2.1.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1261 -0
- package/README.md +6 -1
- package/component-tokens.d.ts +533 -96
- package/components.tokens.json +35461 -26045
- package/css/accordion.css +34 -8
- package/css/alert.css +59 -1
- package/css/anchor.css +46 -8
- package/css/approval.css +116 -76
- package/css/avatar-group.css +1 -1
- package/css/avatar.css +13 -5
- package/css/back-top.css +61 -42
- package/css/badge.css +62 -12
- package/css/bar-code.css +1 -1
- package/css/breadcrumb.css +62 -3
- package/css/button-group.css +4 -4
- package/css/button.css +67 -19
- package/css/calendar-picker.css +19 -0
- package/css/calendar-range-picker.css +39 -2
- package/css/card.css +115 -1
- package/css/carousel.css +148 -43
- package/css/cartesian-chart.css +830 -0
- package/css/cascader.css +181 -65
- package/css/checkbox-group.css +59 -89
- package/css/checkbox.css +16 -49
- package/css/citation.css +470 -0
- package/css/clipboard.css +20 -63
- package/css/code-view.css +101 -6
- package/css/collapsible.css +34 -8
- package/css/color-field.css +18 -0
- package/css/color-picker.css +128 -50
- package/css/color-slider.css +22 -15
- package/css/color-swatch-picker.css +3 -1
- package/css/combobox.css +80 -33
- package/css/command.css +45 -43
- package/css/context-menu.css +39 -22
- package/css/date-field.css +56 -0
- package/css/date-picker.css +132 -26
- package/css/date-range-picker.css +337 -14
- package/css/description.css +17 -1
- package/css/descriptions.css +42 -0
- package/css/dialog.css +94 -36
- package/css/diff-view.css +97 -12
- package/css/download-trigger.css +44 -78
- package/css/drawer.css +160 -119
- package/css/editable.css +19 -0
- package/css/empty-state.css +7 -6
- package/css/field-array.css +36 -0
- package/css/field.css +20 -18
- package/css/file-upload.css +125 -135
- package/css/flex.css +324 -8
- package/css/float-button.css +263 -38
- package/css/floating-panel.css +53 -19
- package/css/form.css +31 -17
- package/css/funnel-chart.css +106 -0
- package/css/graph-chart.css +205 -0
- package/css/grid-list.css +235 -0
- package/css/grid.css +252 -1
- package/css/heatmap.css +119 -36
- package/css/hierarchy-chart.css +298 -0
- package/css/hover-card.css +31 -14
- package/css/icon.css +100 -0
- package/css/image-cropper.css +33 -7
- package/css/image-viewer.css +167 -22
- package/css/image.css +23 -4
- package/css/input-group.css +11 -13
- package/css/json-viewer.css +50 -2
- package/css/layout.css +68 -18
- package/css/liquid.css +106 -0
- package/css/list.css +1 -1
- package/css/listbox.css +46 -6
- package/css/loading-bar.css +27 -13
- package/css/log.css +129 -33
- package/css/markdown-stream.css +1 -1
- package/css/marquee.css +163 -7
- package/css/matrix-code.css +1 -1
- package/css/mention.css +35 -19
- package/css/menu.css +35 -21
- package/css/menubar.css +36 -20
- package/css/message-feed.css +172 -51
- package/css/navigation-menu.css +172 -11
- package/css/notification.css +435 -108
- package/css/number-field.css +22 -0
- package/css/page-header.css +3 -1
- package/css/pagination.css +126 -24
- package/css/password-input.css +40 -8
- package/css/pie-chart.css +247 -0
- package/css/popconfirm.css +44 -50
- package/css/popover.css +50 -14
- package/css/progress.css +308 -10
- package/css/prompt-input.css +36 -0
- package/css/question-flow.css +97 -57
- package/css/radar-chart.css +233 -0
- package/css/radio-group.css +363 -5
- package/css/rating.css +21 -23
- package/css/reasoning.css +61 -54
- package/css/resizable.css +6 -1
- package/css/sankey-chart.css +174 -0
- package/css/scroll-area.css +32 -0
- package/css/scrollbar.css +1 -1
- package/css/select.css +74 -55
- package/css/side-nav.css +173 -24
- package/css/signature-pad.css +16 -1
- package/css/skeleton.css +13 -14
- package/css/slider.css +35 -13
- package/css/sortable.css +37 -7
- package/css/sparkline.css +164 -0
- package/css/spinner.css +50 -22
- package/css/splitter.css +7 -1
- package/css/statistic.css +10 -0
- package/css/steps.css +248 -29
- package/css/switch.css +23 -48
- package/css/table.css +175 -118
- package/css/tabs.css +231 -19
- package/css/tag-group.css +27 -3
- package/css/tag.css +53 -12
- package/css/tags-input.css +40 -3
- package/css/text-field.css +19 -0
- package/css/time-field.css +20 -1
- package/css/time-picker.css +103 -17
- package/css/time-range-picker.css +45 -16
- package/css/timeline.css +1 -1
- package/css/toggle-group.css +4 -4
- package/css/toggle.css +4 -3
- package/css/tool-call.css +59 -51
- package/css/toolbar.css +101 -3
- package/css/tooltip.css +15 -2
- package/css/tour.css +42 -12
- package/css/transfer.css +98 -75
- package/css/tree-select.css +232 -53
- package/css/tree.css +271 -55
- package/css/truncate.css +55 -12
- package/css/typography.css +93 -0
- package/css/virtualizer.css +56 -0
- package/css/watermark.css +23 -0
- package/family/action-control.css +14 -5
- package/family/chart.css +480 -0
- package/family/check-mark.css +94 -0
- package/family/choice-card.css +97 -0
- package/family/collection-item.css +9 -15
- package/family/field-chrome.css +1 -12
- package/family/loading-ring.css +95 -0
- package/family/material.css +72 -0
- package/family/menu-choice.css +56 -0
- package/family/motion.css +207 -10
- package/family/tag-list.css +59 -0
- package/index.css +13824 -4030
- package/index.unlayered.css +13403 -3605
- package/package.json +20 -8
- package/css/gradient-text.css +0 -91
- package/css/icon-wrapper.css +0 -81
- package/css/segmented.css +0 -280
- package/css/toast.css +0 -499
package/css/color-picker.css
CHANGED
|
@@ -5,9 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
/* 定义 color picker 样式。 */
|
|
7
7
|
|
|
8
|
+
@import '../family/field-chrome.css';
|
|
9
|
+
@import '../family/action-control.css';
|
|
8
10
|
@import '../family/swatch.css';
|
|
9
11
|
@import '../family/motion.css';
|
|
10
|
-
|
|
12
|
+
@import '../family/tag-list.css';
|
|
11
13
|
|
|
12
14
|
@layer xihan.components {
|
|
13
15
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
@@ -23,11 +25,10 @@
|
|
|
23
25
|
|
|
24
26
|
/* 标签一行、盒一行的两行堆叠 */
|
|
25
27
|
[data-scope='color-picker'][data-part='root'] {
|
|
26
|
-
/*
|
|
28
|
+
/* 盒的度量走私有槽中转,与同族的下拉选择一处对一处 */
|
|
27
29
|
--xh-_color-picker-h: var(--xh-control-h-md);
|
|
28
30
|
--xh-_color-picker-px: var(--xh-control-px-md);
|
|
29
31
|
--xh-_color-picker-gap: var(--xh-control-gap-md);
|
|
30
|
-
--xh-_color-picker-label-font-size: var(--xh-control-font-md);
|
|
31
32
|
|
|
32
33
|
/* 聚焦环恒用固定环色 */
|
|
33
34
|
--xh-_color-picker-ring: var(--xh-ring-focus);
|
|
@@ -50,68 +51,85 @@
|
|
|
50
51
|
--xh-_color-picker-h: var(--xh-control-h-sm);
|
|
51
52
|
--xh-_color-picker-px: var(--xh-control-px-sm);
|
|
52
53
|
--xh-_color-picker-gap: var(--xh-control-gap-sm);
|
|
53
|
-
--xh-_color-picker-label-font-size: var(--xh-control-font-sm);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
[data-scope='color-picker']:is([data-part='root'], [data-part='positioner'])[data-size='lg'] {
|
|
57
57
|
--xh-_color-picker-h: var(--xh-control-h-lg);
|
|
58
58
|
--xh-_color-picker-px: var(--xh-control-px-lg);
|
|
59
59
|
--xh-_color-picker-gap: var(--xh-control-gap-lg);
|
|
60
|
-
--xh-_color-picker-label-font-size: var(--xh-control-font-lg);
|
|
61
60
|
}
|
|
62
61
|
|
|
63
62
|
[data-scope='color-picker'][data-part='label'] {
|
|
64
63
|
color: var(--xh-color-picker-label-fg, var(--xh-fg-default));
|
|
65
|
-
|
|
64
|
+
/* 字段标签不随档:与同族字段同一档标签字号 */
|
|
65
|
+
font-size: var(--xh-color-picker-label-font-size, var(--xh-text-label-size));
|
|
66
66
|
font-weight: var(--xh-color-picker-label-font-weight, var(--xh-text-label-weight));
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
/*
|
|
70
|
-
|
|
69
|
+
/* 盒:接字段外壳家族(data-xh-field-chrome),描边、底色、控件高度、行内内衬、悬停与聚焦面
|
|
70
|
+
都由家族按 data-variant 与状态画,与同族的下拉选择一处对一处;这里只把组件自己的覆盖槽桥接进去。
|
|
71
|
+
静息无影、悬停取家族的 45% 淡底、聚焦边一律 --xh-border-control-focus(不随语气) */
|
|
71
72
|
[data-scope='color-picker'][data-part='control'] {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
gap: var(--xh-color-picker-control-gap, var(--xh-_color-picker-gap));
|
|
75
|
-
min-inline-size:
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
73
|
+
--xh-field-control-height: var(--xh-color-picker-control-h, var(--xh-_color-picker-h));
|
|
74
|
+
--xh-field-control-padding-inline: var(--xh-color-picker-control-px, var(--xh-_color-picker-px));
|
|
75
|
+
--xh-field-control-gap: var(--xh-color-picker-control-gap, var(--xh-_color-picker-gap));
|
|
76
|
+
--xh-field-control-min-inline-size: var(--xh-color-picker-control-min-w, var(--xh-control-min-w));
|
|
77
|
+
--xh-field-control-radius: var(--xh-color-picker-control-radius, var(--xh-shape-control));
|
|
78
|
+
--xh-field-bg-rest: var(--xh-color-picker-control-bg, var(--xh-_field-variant-bg-rest));
|
|
79
|
+
--xh-field-bg-hover: var(--xh-color-picker-control-bg-hover, var(--xh-_field-variant-bg-hover));
|
|
80
|
+
--xh-field-bg-read-only: var(--xh-color-picker-control-bg-readonly, var(--xh-_field-variant-bg-read-only));
|
|
81
|
+
--xh-field-bg-disabled: var(--xh-color-picker-control-bg-disabled, var(--xh-_field-variant-bg-disabled));
|
|
82
|
+
--xh-field-fg-rest: var(--xh-color-picker-control-fg, var(--xh-fg-default));
|
|
83
|
+
--xh-field-border-rest: var(--xh-color-picker-control-border, var(--xh-_field-variant-border-rest));
|
|
84
|
+
--xh-field-border-hover: var(--xh-color-picker-control-border-hover, var(--xh-_field-variant-border-hover));
|
|
85
|
+
--xh-field-border-focus: var(--xh-color-picker-control-border-focus, var(--xh-_field-variant-border-focus));
|
|
86
|
+
--xh-field-ring-focus: var(--xh-_color-picker-ring);
|
|
87
|
+
--xh-field-shadow-rest: var(--xh-color-picker-control-shadow, none);
|
|
88
|
+
--xh-field-cursor-rest: pointer;
|
|
87
89
|
}
|
|
88
90
|
|
|
89
91
|
[data-scope='color-picker'][data-part='control'][hidden] {
|
|
90
92
|
display: none;
|
|
91
93
|
}
|
|
92
94
|
|
|
93
|
-
/*
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
/* 多选的标签行:选中的颜色在盒里排成标签,超过 maxTagCount 的折进 +N。
|
|
96
|
+
行里每一枚都是 tag(data-scope="tag"),样子归 tag.css;行怎么排、标签怎么进出归标签行家族配方。
|
|
97
|
+
基准取 0:只吃触发钮剩下的宽度、在自己里面折行;按内容宽算基准的话,盒子会先在钮前面折行,把钮挤到最后一行 */
|
|
98
|
+
[data-scope='color-picker'][data-part='tag-list'] {
|
|
99
|
+
--xh-tag-list-gap: var(--xh-color-picker-tag-list-gap, var(--xh-space-1));
|
|
100
|
+
|
|
101
|
+
flex: 1 1 0;
|
|
102
|
+
flex-wrap: wrap;
|
|
98
103
|
}
|
|
99
104
|
|
|
100
|
-
/*
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
outline-offset: var(--xh-ring-offset);
|
|
105
|
+
/* 颜色标签是定长的值串,截短了就读不出是哪个颜色:不收缩,排不下就折到下一行,
|
|
106
|
+
盒随行数长高(字段家族的 multi-tag 布局给),到上限后在盒内滚动 */
|
|
107
|
+
[data-scope='color-picker'][data-part='tag-list'] > [data-scope='tag'][data-part='root'] {
|
|
108
|
+
flex: none;
|
|
105
109
|
}
|
|
106
110
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
/* 每枚标签前一个色点,颜色由连接层写进内联私有槽;+N 那一枚没有 data-value,不画。
|
|
112
|
+
白色与近底色的颜色靠一圈默认描边从标签底上分出来 */
|
|
113
|
+
[data-scope='color-picker'][data-part='tag-list'] > [data-scope='tag'][data-part='root'][data-value]::before {
|
|
114
|
+
flex: none;
|
|
115
|
+
box-sizing: border-box;
|
|
116
|
+
inline-size: var(--xh-color-picker-tag-dot-size, var(--xh-control-indicator-sm));
|
|
117
|
+
block-size: var(--xh-color-picker-tag-dot-size, var(--xh-control-indicator-sm));
|
|
118
|
+
border: var(--xh-stroke-thin) solid var(--xh-color-picker-tag-dot-border, var(--xh-border-default));
|
|
119
|
+
border-radius: var(--xh-shape-circle);
|
|
120
|
+
background-color: var(--xh-_color-picker-tag-color, transparent);
|
|
121
|
+
content: '';
|
|
122
|
+
print-color-adjust: exact;
|
|
110
123
|
}
|
|
111
124
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
125
|
+
[data-scope='color-picker'][data-part='control'][data-xh-field-layout='multi-tag'] {
|
|
126
|
+
max-block-size: var(--xh-color-picker-control-max-h, var(--xh-viewport-h-sm));
|
|
127
|
+
overflow-y: auto;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* 多选时值文字让位,触发钮只剩一颗显示工作色的色块:不再占满剩余宽度,标签行吃掉余下的位置 */
|
|
131
|
+
[data-scope='color-picker'][data-part='control'][data-xh-field-layout='multi-tag'] > [data-scope='color-picker'][data-part='trigger'] {
|
|
132
|
+
flex: none;
|
|
115
133
|
}
|
|
116
134
|
|
|
117
135
|
/* 盒内那颗可聚焦的按钮:不画描边不铺底也不自带高度,只占满剩余宽度、排布色块与值文本 */
|
|
@@ -229,13 +247,14 @@
|
|
|
229
247
|
pointer-events: auto;
|
|
230
248
|
}
|
|
231
249
|
|
|
232
|
-
|
|
250
|
+
/* 挂载时就开着的那一段(data-instant)属于首帧,直接呈现;常驻形态的取色面一直在,没有进退场 */
|
|
251
|
+
[data-scope='color-picker'][data-part='content'][data-state='open']:not([data-instant], [data-inline]) {
|
|
233
252
|
animation: xh-overlay-slide-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
|
|
234
253
|
}
|
|
235
254
|
|
|
236
255
|
/* 退场:收起那一帧 hidden 由退场闸门押后,这里才播得出来。forwards 把末态钉住,
|
|
237
256
|
免得动画结束到真收起之间闪一下原样 */
|
|
238
|
-
[data-scope='color-picker'][data-part='content'][data-state='closed'] {
|
|
257
|
+
[data-scope='color-picker'][data-part='content'][data-state='closed']:not([data-inline]) {
|
|
239
258
|
animation: xh-overlay-slide-out var(--xh-motion-duration-exit) var(--xh-motion-ease-exit) forwards;
|
|
240
259
|
}
|
|
241
260
|
|
|
@@ -244,6 +263,22 @@
|
|
|
244
263
|
outline: none;
|
|
245
264
|
}
|
|
246
265
|
|
|
266
|
+
/* 常驻形态:根不再取字段缺省宽,跟着取色面走 */
|
|
267
|
+
[data-scope='color-picker'][data-part='root'][data-inline] {
|
|
268
|
+
inline-size: auto;
|
|
269
|
+
min-inline-size: 0;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/* 常驻形态的取色面是页面里的静态内容面(solid):surface 圆角、border-default 描边、实体底、不落影。
|
|
273
|
+
没有定位层给出可用宽高,不限高也不自己滚;它一直在,没有进退场 */
|
|
274
|
+
[data-scope='color-picker'][data-part='content'][data-inline] {
|
|
275
|
+
max-inline-size: 100%;
|
|
276
|
+
max-block-size: none;
|
|
277
|
+
overflow-y: visible;
|
|
278
|
+
border-radius: var(--xh-color-picker-content-radius, var(--xh-shape-surface));
|
|
279
|
+
box-shadow: var(--xh-color-picker-content-shadow, none);
|
|
280
|
+
}
|
|
281
|
+
|
|
247
282
|
/* 二维取色区。底色是当前色相(连接层内联给),两层渐变盖在上面:
|
|
248
283
|
横轴由白到透明 = 饱和度,纵轴由透明到黑 = 明度。
|
|
249
284
|
两层都收在一个 ::before 里:它是盒树里的第一个子节点,作者写的拇指排在它后面,
|
|
@@ -301,7 +336,7 @@
|
|
|
301
336
|
background: transparent;
|
|
302
337
|
box-shadow: var(--xh-color-picker-thumb-shadow, var(--xh-elevation-raised));
|
|
303
338
|
cursor: grab;
|
|
304
|
-
transition: scale var(--xh-motion-duration-
|
|
339
|
+
transition: scale var(--xh-motion-duration-nudge) var(--xh-motion-ease-enter-strong);
|
|
305
340
|
}
|
|
306
341
|
|
|
307
342
|
/* 取色区的纵轴也由连接层给(inset-block-start),回拉同样按 block-start 那侧 */
|
|
@@ -364,7 +399,8 @@
|
|
|
364
399
|
}
|
|
365
400
|
|
|
366
401
|
[data-scope='color-picker'][data-part='channel-input']:focus-visible {
|
|
367
|
-
|
|
402
|
+
/* 焦点边一律 --xh-border-control-focus,不随语气 */
|
|
403
|
+
border-color: var(--xh-color-picker-input-border-focus, var(--xh-border-control-focus));
|
|
368
404
|
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
369
405
|
outline-offset: var(--xh-ring-offset);
|
|
370
406
|
}
|
|
@@ -401,13 +437,14 @@
|
|
|
401
437
|
cursor: pointer;
|
|
402
438
|
user-select: none;
|
|
403
439
|
transition:
|
|
404
|
-
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
440
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
405
441
|
border-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
406
442
|
scale var(--xh-motion-duration-release) var(--xh-motion-ease-release);
|
|
407
443
|
}
|
|
408
444
|
|
|
409
445
|
[data-scope='color-picker'][data-part='eye-dropper-trigger']:hover:not(:disabled) {
|
|
410
|
-
|
|
446
|
+
/* 坐在浮层白底上:白底承载阶梯 hover 100 → pressed 200 */
|
|
447
|
+
background: var(--xh-color-picker-action-bg-hover, var(--xh-bg-subtle));
|
|
411
448
|
color: var(--xh-color-picker-action-fg-hover, var(--xh-fg-default));
|
|
412
449
|
}
|
|
413
450
|
|
|
@@ -415,7 +452,7 @@
|
|
|
415
452
|
松手那一刻浮层多半已经被系统的取色镜头盖住,按下的回执只有这一瞬看得见。
|
|
416
453
|
指针 :active 与 Headless 投影的 data-pressed(Space / Enter 与触屏按住)看见同一副按压面 */
|
|
417
454
|
[data-scope='color-picker'][data-part='eye-dropper-trigger']:not(:disabled):is(:active, [data-pressed]) {
|
|
418
|
-
background: var(--xh-color-picker-action-bg-active, var(--xh-bg-subtle-
|
|
455
|
+
background: var(--xh-color-picker-action-bg-active, var(--xh-bg-subtle-hover));
|
|
419
456
|
scale: var(--xh-motion-scale-press);
|
|
420
457
|
transition-duration: var(--xh-motion-duration-press);
|
|
421
458
|
transition-timing-function: var(--xh-motion-ease-press);
|
|
@@ -432,11 +469,45 @@
|
|
|
432
469
|
color: var(--xh-fg-disabled);
|
|
433
470
|
}
|
|
434
471
|
|
|
472
|
+
/* 「添加」沉到面板的行尾:它是多选时整块面板的出口,不跟取色面左对齐 */
|
|
473
|
+
[data-scope='color-picker'][data-part='content'] > [data-scope='color-picker'][data-part='confirm-trigger'] {
|
|
474
|
+
flex: none;
|
|
475
|
+
align-self: flex-end;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/* 「添加」是面板里唯一的主要动作:品牌实心、悬停 / 按下与 0.97 按压、焦点环全由 Action Control 的
|
|
479
|
+
text solid 档给;槽名统一按部件取 --xh-color-picker-confirm-trigger-*,只映射到家族桥接槽 */
|
|
480
|
+
[data-scope='color-picker'][data-part='confirm-trigger'] {
|
|
481
|
+
--xh-action-visual-size: var(--xh-color-picker-confirm-trigger-h, var(--xh-_action-profile-visual-size));
|
|
482
|
+
--xh-action-padding-inline: var(--xh-color-picker-confirm-trigger-px, var(--xh-_action-profile-padding-inline));
|
|
483
|
+
--xh-action-radius: var(--xh-color-picker-confirm-trigger-radius, var(--xh-shape-control));
|
|
484
|
+
--xh-action-bg-rest: var(--xh-color-picker-confirm-trigger-bg, var(--xh-_action-variant-bg-rest));
|
|
485
|
+
--xh-action-bg-hover: var(--xh-color-picker-confirm-trigger-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
486
|
+
--xh-action-bg-pressed: var(--xh-color-picker-confirm-trigger-bg-active, var(--xh-_action-variant-bg-pressed));
|
|
487
|
+
--xh-action-fg-rest: var(--xh-color-picker-confirm-trigger-fg, var(--xh-_action-variant-fg-rest));
|
|
488
|
+
--xh-action-fg-hover: var(--xh-color-picker-confirm-trigger-fg, var(--xh-_action-variant-fg-hover));
|
|
489
|
+
--xh-action-fg-pressed: var(--xh-color-picker-confirm-trigger-fg, var(--xh-_action-variant-fg-pressed));
|
|
490
|
+
--xh-action-border-rest: transparent;
|
|
491
|
+
--xh-action-highlight-rest: transparent;
|
|
492
|
+
--xh-action-shadow-rest: var(--xh-color-picker-confirm-trigger-shadow, none);
|
|
493
|
+
--xh-action-shadow-hover: var(--xh-color-picker-confirm-trigger-shadow, none);
|
|
494
|
+
--xh-action-shadow-pressed: var(--xh-color-picker-confirm-trigger-shadow, none);
|
|
495
|
+
--xh-action-font-size: var(--xh-text-secondary-size);
|
|
496
|
+
|
|
497
|
+
border-width: 0;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/* 单选时连接层给的是 hidden 属性;家族那条 display 会把 UA 规则盖掉 */
|
|
501
|
+
[data-scope='color-picker'][data-part='confirm-trigger'][hidden] {
|
|
502
|
+
display: none;
|
|
503
|
+
}
|
|
504
|
+
|
|
435
505
|
/* 预设色板的挂载点,同时充当色板的根节点:color-swatch-picker 那份皮的 root 规则落在
|
|
436
506
|
[data-scope='color-swatch-picker'][data-part='root'] 上,而这里没有那个节点,所以根上挂的那几个私有槽
|
|
437
507
|
(格子边长、间距、徽标尺寸、语气色、图标尺)与排布得在这儿照抄一遍;格子的皮仍归色板那一份。
|
|
438
|
-
|
|
439
|
-
|
|
508
|
+
浮层里的色板走小号格子:与滑块的拇指、数值框一个量级,整块面板才不会被色板撑开。
|
|
509
|
+
最近使用色是同一台色块选择器,挂载点同一套 */
|
|
510
|
+
[data-scope='color-picker']:is([data-part='swatch-picker'], [data-part='recent-swatch-picker']) {
|
|
440
511
|
--xh-_color-swatch-picker-cell: var(--xh-color-picker-swatch-cell, var(--xh-control-h-sm));
|
|
441
512
|
--xh-_color-swatch-picker-gap: var(--xh-color-picker-swatch-gap, var(--xh-control-gap-sm));
|
|
442
513
|
--xh-_color-swatch-picker-indicator: var(--xh-control-indicator-sm);
|
|
@@ -450,7 +521,7 @@
|
|
|
450
521
|
gap: var(--xh-color-picker-swatch-picker-gap, var(--xh-_color-swatch-picker-gap));
|
|
451
522
|
}
|
|
452
523
|
|
|
453
|
-
[data-scope='color-picker'][data-part='swatch-picker'][data-disabled] {
|
|
524
|
+
[data-scope='color-picker']:is([data-part='swatch-picker'], [data-part='recent-swatch-picker'])[data-disabled] {
|
|
454
525
|
cursor: not-allowed;
|
|
455
526
|
}
|
|
456
527
|
|
|
@@ -464,7 +535,8 @@
|
|
|
464
535
|
[data-scope='color-picker'][data-part='hue-slider'][hidden],
|
|
465
536
|
[data-scope='color-picker'][data-part='alpha-slider'][hidden],
|
|
466
537
|
[data-scope='color-picker'][data-part='eye-dropper-trigger'][hidden],
|
|
467
|
-
[data-scope='color-picker'][data-part='swatch-picker'][hidden]
|
|
538
|
+
[data-scope='color-picker'][data-part='swatch-picker'][hidden],
|
|
539
|
+
[data-scope='color-picker'][data-part='recent-swatch-picker'][hidden] {
|
|
468
540
|
display: none;
|
|
469
541
|
}
|
|
470
542
|
|
|
@@ -513,5 +585,11 @@
|
|
|
513
585
|
outline: var(--xh-stroke-thin) solid ButtonBorder;
|
|
514
586
|
outline-offset: calc(-1 * var(--xh-stroke-thin));
|
|
515
587
|
}
|
|
588
|
+
|
|
589
|
+
/* 标签前的色点画的也是颜色本身:同样退出强制着色,用系统文字色描一圈 */
|
|
590
|
+
[data-scope='color-picker'][data-part='tag-list'] > [data-scope='tag'][data-part='root'][data-value]::before {
|
|
591
|
+
forced-color-adjust: none;
|
|
592
|
+
border-color: CanvasText;
|
|
593
|
+
}
|
|
516
594
|
}
|
|
517
595
|
}
|
package/css/color-slider.css
CHANGED
|
@@ -132,13 +132,14 @@
|
|
|
132
132
|
box-sizing: border-box;
|
|
133
133
|
inline-size: var(--xh-_thumb-size);
|
|
134
134
|
block-size: var(--xh-_thumb-size);
|
|
135
|
-
|
|
135
|
+
/* 描边取装饰边的不透明档:墨色描边半透明,压在当前色上框不住圆点 */
|
|
136
|
+
border: var(--xh-stroke-thick) solid var(--xh-color-slider-thumb-border, var(--xh-border-default-opaque));
|
|
136
137
|
border-radius: var(--xh-color-slider-thumb-radius, var(--xh-shape-circle));
|
|
137
138
|
background: var(--xh-color-slider-thumb-bg, var(--xh-_color-slider-thumb-color));
|
|
138
139
|
box-shadow: var(--xh-color-slider-thumb-shadow, var(--xh-elevation-raised));
|
|
139
140
|
cursor: grab;
|
|
140
141
|
transition:
|
|
141
|
-
scale var(--xh-motion-duration-
|
|
142
|
+
scale var(--xh-motion-duration-nudge) var(--xh-motion-ease-enter-strong),
|
|
142
143
|
box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
143
144
|
}
|
|
144
145
|
|
|
@@ -159,7 +160,10 @@
|
|
|
159
160
|
|
|
160
161
|
/* 放大用 scale 而不是改尺寸:变换绕自身中心发生,圆心不动。海拔从 raised 换到 lifted */
|
|
161
162
|
[data-scope='color-slider'][data-part='thumb'][data-dragging] {
|
|
162
|
-
|
|
163
|
+
/* 放大比例落进私有槽:挂在拇指里的值气泡读同一支反向缩回原尺寸 */
|
|
164
|
+
--xh-_color-slider-thumb-scale: var(--xh-color-slider-thumb-scale-dragging, var(--xh-motion-scale-drag));
|
|
165
|
+
|
|
166
|
+
scale: var(--xh-_color-slider-thumb-scale);
|
|
163
167
|
cursor: grabbing;
|
|
164
168
|
box-shadow: var(--xh-color-slider-thumb-shadow-dragging, var(--xh-elevation-lifted));
|
|
165
169
|
}
|
|
@@ -179,14 +183,19 @@
|
|
|
179
183
|
cursor: not-allowed;
|
|
180
184
|
}
|
|
181
185
|
|
|
182
|
-
/*
|
|
186
|
+
/* 值气泡:挂在拇指里,跟着拇指一起走位。默认只在推动那一刻露面。
|
|
187
|
+
气泡宽度由文字撑出,只能靠平移回中:两侧 inset 都钉在 50% 再靠自动外边距回中时可用宽度是 0,
|
|
188
|
+
气泡比它宽,自动外边距按规范取 0,气泡从拇指中线起排、偏出半个自身宽。平移乘书写方向的符号,
|
|
189
|
+
rtl 下行内分量掉头。拖动时拇指放大,气泡按同一比例反向缩回、与拇指同一段过渡:文字不跟着放大,
|
|
190
|
+
缩放原点在贴着拇指那一边 */
|
|
183
191
|
[data-scope='color-slider'][data-part='value-text'] {
|
|
184
192
|
position: absolute;
|
|
185
193
|
inset-block-end: 100%;
|
|
186
|
-
inset-inline: 50%;
|
|
194
|
+
inset-inline-start: 50%;
|
|
187
195
|
inline-size: max-content;
|
|
188
196
|
margin-block-end: var(--xh-color-slider-value-text-offset, var(--xh-space-2));
|
|
189
|
-
|
|
197
|
+
translate: calc(-50% * var(--xh-direction-sign)) 0;
|
|
198
|
+
transform-origin: 50% 100%;
|
|
190
199
|
padding-block: var(--xh-color-slider-value-text-py, var(--xh-space-0_5));
|
|
191
200
|
padding-inline: var(--xh-color-slider-value-text-px, var(--xh-space-2));
|
|
192
201
|
border-radius: var(--xh-color-slider-value-text-radius, var(--xh-shape-control));
|
|
@@ -199,7 +208,9 @@
|
|
|
199
208
|
/* 气泡贴在拇指上方,指针要落到拇指上,不能被它挡住 */
|
|
200
209
|
pointer-events: none;
|
|
201
210
|
opacity: 0;
|
|
202
|
-
transition:
|
|
211
|
+
transition:
|
|
212
|
+
opacity var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
213
|
+
scale var(--xh-motion-duration-nudge) var(--xh-motion-ease-enter-strong);
|
|
203
214
|
}
|
|
204
215
|
|
|
205
216
|
[data-scope='color-slider'][data-part='value-text'][hidden] {
|
|
@@ -208,15 +219,18 @@
|
|
|
208
219
|
|
|
209
220
|
[data-scope='color-slider'][data-part='value-text'][data-dragging] {
|
|
210
221
|
opacity: 1;
|
|
222
|
+
scale: calc(1 / var(--xh-_color-slider-thumb-scale, 1));
|
|
211
223
|
}
|
|
212
224
|
|
|
213
|
-
/*
|
|
225
|
+
/* 竖排轨道的气泡挪到行侧:压在拇指上方会挡住上一档的值;反向缩放的原点换到贴着拇指的行首那一侧 */
|
|
214
226
|
[data-scope='color-slider'][data-part='value-text'][data-orientation='vertical'] {
|
|
215
227
|
inset-block: 50%;
|
|
216
228
|
inset-inline: 100% auto;
|
|
217
229
|
block-size: max-content;
|
|
218
230
|
margin-block: auto;
|
|
219
231
|
margin-inline: var(--xh-color-slider-value-text-offset, var(--xh-space-2)) 0;
|
|
232
|
+
translate: none;
|
|
233
|
+
transform-origin: calc(50% - 50% * var(--xh-direction-sign)) 50%;
|
|
220
234
|
}
|
|
221
235
|
|
|
222
236
|
/* —— 尺寸 —— */
|
|
@@ -239,13 +253,6 @@
|
|
|
239
253
|
|
|
240
254
|
/* hidden-input 是 type=hidden 的原生输入,浏览器本就不渲染它,这里一条声明都不给。 */
|
|
241
255
|
|
|
242
|
-
@media (prefers-reduced-motion: reduce) {
|
|
243
|
-
[data-scope='color-slider'][data-part='thumb'],
|
|
244
|
-
[data-scope='color-slider'][data-part='value-text'] {
|
|
245
|
-
transition: none;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
256
|
/*
|
|
250
257
|
* 高对比档:轨道画的就是颜色本身,被系统换掉之后整条滑杆不再能调色。
|
|
251
258
|
* 轨道与拇指退出强制着色保住原色,各补一圈系统描边把它们从背景里框出来。
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
scale: 0;
|
|
170
170
|
transition:
|
|
171
171
|
opacity var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
172
|
-
scale var(--xh-motion-duration-
|
|
172
|
+
scale var(--xh-motion-duration-nudge) var(--xh-motion-ease-settle);
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
/* 没写内容就由皮肤画勾;作者往部件里塞了自己的图形,这条规则即不命中 */
|
|
@@ -236,7 +236,9 @@
|
|
|
236
236
|
background: Highlight;
|
|
237
237
|
}
|
|
238
238
|
|
|
239
|
+
/* 勾是 mask 挖出来的一块底色:退出强制换色、直接写系统色,否则底色被换成 Canvas、勾跟着消失 */
|
|
239
240
|
[data-scope='color-swatch-picker'][data-part='indicator']:empty::after {
|
|
241
|
+
forced-color-adjust: none;
|
|
240
242
|
background-color: HighlightText;
|
|
241
243
|
}
|
|
242
244
|
}
|
package/css/combobox.css
CHANGED
|
@@ -7,9 +7,12 @@
|
|
|
7
7
|
@import '../family/field-chrome.css';
|
|
8
8
|
@import '../family/action-control.css';
|
|
9
9
|
@import '../family/collection-item.css';
|
|
10
|
+
@import '../family/loading-ring.css';
|
|
10
11
|
|
|
11
12
|
/* 共享关键帧由 family/motion.css 提供,本皮肤 @import 它,单独引入仍成立。 */
|
|
12
13
|
@import '../family/motion.css';
|
|
14
|
+
@import '../family/material.css';
|
|
15
|
+
@import '../family/tag-list.css';
|
|
13
16
|
|
|
14
17
|
@layer xihan.components {
|
|
15
18
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
@@ -25,8 +28,8 @@
|
|
|
25
28
|
/* 落定那一侧的可用宽度,同样由定位引擎经内联自定义属性写进来,行内轴据此夹取;
|
|
26
29
|
引擎没算(尚未落位 / 无引擎 / 贴边归零)时退到视口宽 */
|
|
27
30
|
--xh-_combobox-available-w: 100vw;
|
|
28
|
-
/*
|
|
29
|
-
引擎没算(尚未落位 / 无引擎)时为 0
|
|
31
|
+
/* 字段盒实测宽度,由定位引擎经内联自定义属性写进来,内容层与它等宽;
|
|
32
|
+
引擎没算(尚未落位 / 无引擎)时为 0,面板取下界 */
|
|
30
33
|
--xh-_combobox-anchor-w: 0px;
|
|
31
34
|
/* 每层使用自身落位方向,不继承外层弹窗留下的方向。 */
|
|
32
35
|
--xh-_overlay-enter-up: 0;
|
|
@@ -183,6 +186,15 @@
|
|
|
183
186
|
--xh-field-placeholder-fg: var(--xh-combobox-placeholder-fg, var(--xh-fg-subtle));
|
|
184
187
|
--xh-field-autofill-bg: var(--xh-combobox-input-autofill-bg, var(--xh-bg-canvas));
|
|
185
188
|
--xh-field-autofill-fg: var(--xh-combobox-input-autofill-fg, var(--xh-fg-default));
|
|
189
|
+
|
|
190
|
+
/* 多选的标签排在它前面:标签再多也给打字留出这一截,挤不下时标签先截断、再折进 +N */
|
|
191
|
+
min-inline-size: var(--xh-combobox-input-min-w, var(--xh-control-input-min-w));
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/* 标签行:盒里、输入框之前收着已选值标签与 +N 那一枚的一行,行里每一枚都是 tag(data-scope="tag"),
|
|
195
|
+
样子归 tag.css;行怎么排、标签怎么进出归标签行家族配方(family/tag-list.css),这里只把使用者的间距槽接进去 */
|
|
196
|
+
[data-scope='combobox'][data-part='tag-list'] {
|
|
197
|
+
--xh-tag-list-gap: var(--xh-combobox-tag-list-gap, var(--xh-space-1));
|
|
186
198
|
}
|
|
187
199
|
|
|
188
200
|
[data-scope='combobox'][data-part='input'][hidden] {
|
|
@@ -232,7 +244,7 @@
|
|
|
232
244
|
按钮自带悬停底色,整个按钮转会带着底色一起转;家族按压缩放的是整钮,不影响这里的转向 */
|
|
233
245
|
[data-scope='combobox'][data-part='trigger']:empty::before,
|
|
234
246
|
[data-scope='combobox'][data-part='trigger'] > * {
|
|
235
|
-
transition: rotate var(--xh-motion-duration-
|
|
247
|
+
transition: rotate var(--xh-motion-duration-nudge) var(--xh-motion-ease-enter-strong);
|
|
236
248
|
}
|
|
237
249
|
|
|
238
250
|
/* 没写内容就由皮肤画箭头;作者往部件里塞了自己的图形,这条规则即不命中 */
|
|
@@ -266,49 +278,39 @@
|
|
|
266
278
|
}
|
|
267
279
|
|
|
268
280
|
[data-scope='combobox'][data-part='content'] {
|
|
281
|
+
/* 材质由家族配方画(family/material.css 的 frosted 面:描边、底、1px 顶光、前景、投影与背景滤镜),
|
|
282
|
+
这里只把使用者槽接进来 */
|
|
283
|
+
--xh-frosted-bg: var(--xh-combobox-content-bg, var(--xh-_material-bg));
|
|
284
|
+
--xh-frosted-border: var(--xh-combobox-content-border, var(--xh-_material-border));
|
|
285
|
+
--xh-frosted-fg: var(--xh-combobox-content-fg, var(--xh-_material-fg));
|
|
286
|
+
--xh-frosted-shadow: var(--xh-combobox-content-shadow, var(--xh-_material-shadow));
|
|
287
|
+
--xh-frosted-backdrop: var(--xh-combobox-content-backdrop, var(--xh-_material-backdrop));
|
|
288
|
+
--xh-frosted-highlight: var(--xh-combobox-content-highlight, var(--xh-_material-highlight));
|
|
289
|
+
|
|
269
290
|
position: relative;
|
|
270
291
|
display: flex;
|
|
271
292
|
flex-direction: column;
|
|
272
293
|
gap: var(--xh-combobox-content-gap, var(--xh-list-option-gap));
|
|
273
294
|
grid-area: 1 / 1;
|
|
274
|
-
/*
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
max(var(--xh-combobox-content-min-w, var(--xh-overlay-min-w)), var(--xh-_combobox-anchor-w)),
|
|
295
|
+
/* 列表型浮层与字段盒等宽:长选项在条目里截断,面板不随最长的一条变宽。锚点比下界还窄时取下界,
|
|
296
|
+
比可用区还宽时收成可用宽度;要封顶由作者另写上界槽 */
|
|
297
|
+
inline-size: min(
|
|
298
|
+
max(var(--xh-combobox-content-min-w, var(--xh-overlay-menu-min-w)), var(--xh-_combobox-anchor-w)),
|
|
278
299
|
var(--xh-_combobox-available-w)
|
|
279
300
|
);
|
|
280
|
-
|
|
281
|
-
max-inline-size: min(var(--xh-combobox-content-max-w, var(--xh-overlay-max-w)), var(--xh-_combobox-available-w));
|
|
301
|
+
max-inline-size: var(--xh-combobox-content-max-w, none);
|
|
282
302
|
/* 空列表也保留完整状态面的高度;empty/loading 先隐藏时,Presence 退场不会塌成细边条。 */
|
|
283
303
|
min-block-size: var(--xh-combobox-content-min-h, var(--xh-_combobox-h));
|
|
284
|
-
max-block-size: min(var(--xh-combobox-content-max-h, var(--xh-overlay-max-h)), var(--xh-_combobox-available-h));
|
|
304
|
+
max-block-size: min(var(--xh-combobox-content-max-h, var(--xh-overlay-menu-max-h)), var(--xh-_combobox-available-h));
|
|
285
305
|
padding-block: var(--xh-combobox-content-py, var(--xh-space-1));
|
|
286
306
|
padding-inline: var(--xh-combobox-content-px, var(--xh-space-1));
|
|
287
|
-
border: var(--xh-stroke-thin) solid var(--xh-combobox-content-border, var(--xh-material-frosted-border));
|
|
288
307
|
border-radius: var(--xh-combobox-content-radius, var(--xh-shape-overlay));
|
|
289
|
-
background: var(--xh-combobox-content-bg, var(--xh-material-frosted-bg));
|
|
290
|
-
color: var(--xh-combobox-content-fg, var(--xh-material-frosted-fg));
|
|
291
|
-
box-shadow: var(--xh-combobox-content-shadow, var(--xh-material-frosted-shadow));
|
|
292
|
-
-webkit-backdrop-filter: var(--xh-combobox-content-backdrop, var(--xh-material-frosted-backdrop));
|
|
293
|
-
backdrop-filter: var(--xh-combobox-content-backdrop, var(--xh-material-frosted-backdrop));
|
|
294
308
|
overflow-y: auto;
|
|
295
309
|
/* 浮层滚动面:滚到头不把页面一起带走 */
|
|
296
310
|
overscroll-behavior: contain;
|
|
297
311
|
pointer-events: auto;
|
|
298
312
|
}
|
|
299
313
|
|
|
300
|
-
/* 顶光只沿表面上边缘绘制,不参与列表布局、不拦截候选交互。 */
|
|
301
|
-
[data-scope='combobox'][data-part='content']::before {
|
|
302
|
-
content: '';
|
|
303
|
-
position: absolute;
|
|
304
|
-
inset-block-start: 0;
|
|
305
|
-
inset-inline: 0;
|
|
306
|
-
block-size: var(--xh-stroke-thin);
|
|
307
|
-
border-radius: inherit;
|
|
308
|
-
background: var(--xh-combobox-content-highlight, var(--xh-material-frosted-highlight));
|
|
309
|
-
pointer-events: none;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
314
|
/* 这里刻意没有 [data-part='content'][hidden] { display: none },与 dialog 一致:
|
|
313
315
|
收起态连接层会给 content 打 hidden,而上面那条 display 正是要盖掉 UA 的
|
|
314
316
|
[hidden]{display:none}——退场动画得先能播。presence 读的是 content 的 animationName,
|
|
@@ -321,7 +323,8 @@
|
|
|
321
323
|
outline: none;
|
|
322
324
|
}
|
|
323
325
|
|
|
324
|
-
|
|
326
|
+
/* 挂载时就开着的那一段(data-instant)属于首帧,直接呈现 */
|
|
327
|
+
[data-scope='combobox'][data-part='content'][data-state='open']:not([data-instant]) {
|
|
325
328
|
animation: xh-overlay-slide-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
|
|
326
329
|
}
|
|
327
330
|
|
|
@@ -350,12 +353,19 @@
|
|
|
350
353
|
[data-scope='combobox'][data-part='group-label'] {
|
|
351
354
|
display: block;
|
|
352
355
|
padding-block: var(--xh-combobox-group-label-py, var(--xh-space-1));
|
|
353
|
-
padding-inline: var(--xh-combobox-group-label-px, var(--xh-
|
|
356
|
+
padding-inline: var(--xh-combobox-group-label-px, var(--xh-_combobox-item-px));
|
|
354
357
|
color: var(--xh-combobox-group-label-fg, var(--xh-material-frosted-fg-muted));
|
|
355
358
|
font-size: var(--xh-combobox-group-label-font-size, var(--xh-text-caption-size));
|
|
356
359
|
font-weight: var(--xh-combobox-group-label-font-weight, var(--xh-font-weight-medium));
|
|
357
360
|
line-height: var(--xh-leading-none);
|
|
358
361
|
user-select: none;
|
|
362
|
+
transition: opacity var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/* 刷新:已有候选时后台在取,保留上一帧,条目与分组标题按 micro 淡下,数据到了再淡回;在途占位此时让位。
|
|
366
|
+
淡的是内容不是面:content 是整块磨砂面,整块淡下去面就透了 */
|
|
367
|
+
[data-scope='combobox'][data-part='content'][aria-busy='true'] [data-scope='combobox']:is([data-part='item'], [data-part='group-label']) {
|
|
368
|
+
opacity: var(--xh-state-disabled-opacity);
|
|
359
369
|
}
|
|
360
370
|
|
|
361
371
|
[data-scope='combobox'][data-part='group-label'][hidden] {
|
|
@@ -369,7 +379,7 @@
|
|
|
369
379
|
--xh-collection-inline-padding: var(--xh-combobox-item-px, var(--xh-_combobox-item-px));
|
|
370
380
|
--xh-collection-gap: var(--xh-combobox-item-gap, var(--xh-_combobox-gap));
|
|
371
381
|
--xh-collection-font-size: var(--xh-combobox-item-font-size, var(--xh-_combobox-font-size));
|
|
372
|
-
--xh-collection-radius: var(--xh-combobox-item-radius, var(--xh-shape-
|
|
382
|
+
--xh-collection-radius: var(--xh-combobox-item-radius, var(--xh-shape-inset));
|
|
373
383
|
--xh-collection-fg-rest: var(--xh-combobox-item-fg, var(--xh-material-frosted-fg));
|
|
374
384
|
--xh-collection-fg-hover: var(--xh-combobox-item-fg, var(--xh-material-frosted-fg));
|
|
375
385
|
--xh-collection-fg-keyboard-highlight: var(--xh-combobox-item-fg, var(--xh-material-frosted-fg));
|
|
@@ -462,7 +472,7 @@
|
|
|
462
472
|
justify-content: center;
|
|
463
473
|
grid-area: 1 / 1;
|
|
464
474
|
padding-block: var(--xh-combobox-empty-py, var(--xh-space-3));
|
|
465
|
-
padding-inline: var(--xh-combobox-empty-px, var(--xh-
|
|
475
|
+
padding-inline: var(--xh-combobox-empty-px, var(--xh-_combobox-item-px));
|
|
466
476
|
color: var(--xh-combobox-empty-fg, var(--xh-material-frosted-fg-muted));
|
|
467
477
|
font-size: var(--xh-combobox-empty-font-size, var(--xh-_combobox-font-size));
|
|
468
478
|
line-height: var(--xh-leading-none);
|
|
@@ -481,9 +491,10 @@
|
|
|
481
491
|
display: flex;
|
|
482
492
|
align-items: center;
|
|
483
493
|
justify-content: center;
|
|
494
|
+
gap: var(--xh-_combobox-gap);
|
|
484
495
|
grid-area: 1 / 1;
|
|
485
496
|
padding-block: var(--xh-combobox-loading-py, var(--xh-space-3));
|
|
486
|
-
padding-inline: var(--xh-combobox-loading-px, var(--xh-
|
|
497
|
+
padding-inline: var(--xh-combobox-loading-px, var(--xh-_combobox-item-px));
|
|
487
498
|
color: var(--xh-combobox-loading-fg, var(--xh-material-frosted-fg-muted));
|
|
488
499
|
font-size: var(--xh-combobox-loading-font-size, var(--xh-_combobox-font-size));
|
|
489
500
|
line-height: var(--xh-leading-none);
|
|
@@ -495,6 +506,15 @@
|
|
|
495
506
|
display: none;
|
|
496
507
|
}
|
|
497
508
|
|
|
509
|
+
/* 首次加载:文案前一枚加载环,由加载环配方画(连接层投影 data-xh-loading-ring 与 data-loading),
|
|
510
|
+
直径取所在尺寸档的图标档 */
|
|
511
|
+
[data-scope='combobox'][data-part='loading']::before {
|
|
512
|
+
content: '';
|
|
513
|
+
flex: none;
|
|
514
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-md));
|
|
515
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-md));
|
|
516
|
+
}
|
|
517
|
+
|
|
498
518
|
/* 自动结构没收到状态文案时,空 status 不生成盒;打开着的空 listbox 也不画无意义表面。
|
|
499
519
|
closed 不命中:有文案的空态刚关闭时,content 仍要作为 Presence 宿主完成退场。 */
|
|
500
520
|
[data-scope='combobox'][data-part='empty']:empty,
|
|
@@ -516,4 +536,31 @@
|
|
|
516
536
|
display: none;
|
|
517
537
|
}
|
|
518
538
|
}
|
|
539
|
+
|
|
540
|
+
@media (forced-colors: active) {
|
|
541
|
+
/* 兜底字形是 mask 挖出来的一块底色,这一档里底色被系统换成 Canvas,字形跟着消失。
|
|
542
|
+
字形退出强制换色、直接写系统色(不能取 currentColor:退出强制换色的伪元素读到的是被系统换掉之前的作者色):
|
|
543
|
+
按钮面上取 ButtonText,悬停与按下时家族把按钮涂成 Highlight、字形换 HighlightText;
|
|
544
|
+
条目面上取 CanvasText;按下与没被高亮时的悬停,家族把条目涂成 Highlight,字形换 HighlightText;
|
|
545
|
+
禁用取 GrayText */
|
|
546
|
+
[data-scope='combobox']:is([data-part='trigger'], [data-part='clear-trigger']):empty::before {
|
|
547
|
+
forced-color-adjust: none;
|
|
548
|
+
background-color: ButtonText;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
[data-scope='combobox'][data-part='item-indicator']:empty::before {
|
|
552
|
+
forced-color-adjust: none;
|
|
553
|
+
background-color: CanvasText;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
[data-scope='combobox']:is([data-part='trigger'], [data-part='clear-trigger']):not([data-disabled]):not([data-loading]):is(:hover, :active, [data-pressed]):empty::before,
|
|
557
|
+
[data-scope='combobox'][data-part='item']:not([aria-disabled='true'], [data-disabled], [aria-busy='true'], [data-error]):is(:active, [data-pressed], :hover:not(:focus-visible, [data-highlighted])) [data-scope='combobox'][data-part='item-indicator']:empty::before {
|
|
558
|
+
background-color: HighlightText;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
[data-scope='combobox']:is([data-part='trigger'], [data-part='clear-trigger'])[data-disabled]:empty::before,
|
|
562
|
+
[data-scope='combobox'][data-part='item']:is([aria-disabled='true'], [data-disabled]) [data-scope='combobox'][data-part='item-indicator']:empty::before {
|
|
563
|
+
background-color: GrayText;
|
|
564
|
+
}
|
|
565
|
+
}
|
|
519
566
|
}
|