@xihan-ui/styles 1.0.0 → 2.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 +5146 -6
- package/README.md +22 -2
- package/component-tokens.d.ts +4212 -0
- package/component-tokens.js +2 -0
- package/components.tokens.json +80116 -0
- package/css/accordion.css +131 -75
- package/css/affix.css +16 -1
- package/css/alert.css +114 -67
- package/css/anchor.css +99 -27
- package/css/approval.css +461 -0
- package/css/avatar-group.css +14 -6
- package/css/avatar.css +33 -9
- package/css/back-top.css +103 -48
- package/css/badge.css +42 -14
- package/css/bar-code.css +62 -0
- package/css/breadcrumb.css +40 -21
- package/css/button-group.css +146 -24
- package/css/button.css +116 -99
- package/css/calendar-picker.css +448 -0
- package/css/calendar-range-picker.css +517 -0
- package/css/card.css +54 -77
- package/css/carousel.css +412 -68
- package/css/cascader.css +429 -246
- package/css/checkbox-group.css +225 -77
- package/css/checkbox.css +174 -37
- package/css/clipboard.css +266 -47
- package/css/code-view.css +279 -0
- package/css/collapsible.css +108 -63
- package/css/color-field.css +158 -0
- package/css/color-picker.css +172 -184
- package/css/color-slider.css +274 -0
- package/css/color-swatch-picker.css +243 -0
- package/css/color-swatch.css +35 -0
- package/css/combobox.css +267 -273
- package/css/command.css +399 -0
- package/css/context-menu.css +183 -108
- package/css/date-field.css +94 -121
- package/css/date-picker.css +486 -249
- package/css/date-range-picker.css +559 -0
- package/css/description.css +51 -0
- package/css/descriptions.css +133 -87
- package/css/dialog.css +247 -68
- package/css/diff-view.css +428 -0
- package/css/download-trigger.css +155 -46
- package/css/drawer.css +194 -111
- package/css/editable.css +172 -152
- package/css/empty-state.css +80 -11
- package/css/field-array.css +190 -0
- package/css/field.css +84 -31
- package/css/fieldset.css +51 -18
- package/css/file-upload.css +134 -36
- package/css/flex.css +20 -1
- package/css/float-button.css +238 -57
- package/css/floating-panel.css +173 -92
- package/css/focus.css +46 -0
- package/css/forced-colors.css +93 -0
- package/css/form.css +254 -77
- package/css/gradient-text.css +34 -10
- package/css/grid.css +516 -5
- package/css/heatmap.css +87 -29
- package/css/highlight.css +20 -5
- package/css/hover-card.css +97 -47
- package/css/icon-wrapper.css +15 -3
- package/css/icon.css +74 -8
- package/css/image-cropper.css +143 -29
- package/css/image-viewer.css +150 -89
- package/css/image.css +30 -1
- package/css/infinite-scroll.css +51 -1
- package/css/input-group.css +277 -0
- package/css/json-viewer.css +102 -45
- package/css/kbd.css +72 -0
- package/css/label.css +78 -0
- package/css/layers.css +5 -0
- package/css/layout.css +175 -31
- package/css/list.css +24 -3
- package/css/listbox.css +208 -67
- package/css/loading-bar.css +52 -3
- package/css/log.css +144 -9
- package/css/markdown-stream.css +149 -0
- package/css/marquee.css +27 -1
- package/css/masonry.css +7 -0
- package/css/matrix-code.css +67 -0
- package/css/mention.css +234 -152
- package/css/menu.css +180 -83
- package/css/menubar.css +204 -136
- package/css/message-feed.css +197 -0
- package/css/navigation-menu.css +144 -90
- package/css/notification.css +178 -100
- package/css/number-animation.css +7 -0
- package/css/number-field.css +120 -277
- package/css/overlay-arrow.css +12 -7
- package/css/page-header.css +99 -14
- package/css/pagination.css +175 -135
- package/css/password-input.css +222 -219
- package/css/pin-input.css +101 -67
- package/css/pointer.css +36 -0
- package/css/popconfirm.css +185 -94
- package/css/popover.css +121 -77
- package/css/progress.css +60 -12
- package/css/prompt-input.css +224 -0
- package/css/question-flow.css +513 -0
- package/css/radio-group.css +147 -30
- package/css/rating.css +193 -43
- package/css/reasoning.css +336 -0
- package/css/reset.css +84 -6
- package/css/resizable.css +237 -0
- package/css/scroll-area.css +68 -7
- package/css/scrollbar.css +47 -13
- package/css/segmented.css +94 -29
- package/css/select.css +288 -274
- package/css/separator.css +101 -1
- package/css/side-nav.css +133 -75
- package/css/signature-pad.css +74 -54
- package/css/skeleton.css +84 -11
- package/css/slider.css +132 -39
- package/css/sortable.css +198 -0
- package/css/spinner.css +126 -12
- package/css/splitter.css +29 -8
- package/css/statistic.css +55 -0
- package/css/steps.css +206 -72
- package/css/switch.css +268 -36
- package/css/table.css +695 -118
- package/css/tabs.css +604 -42
- package/css/tag-group.css +219 -0
- package/css/tag.css +118 -28
- package/css/tags-input.css +156 -274
- package/css/text-field.css +101 -249
- package/css/time-field.css +100 -128
- package/css/time-picker.css +323 -252
- package/css/time-range-picker.css +719 -0
- package/css/timeline.css +202 -68
- package/css/timer.css +56 -52
- package/css/timestamp.css +34 -0
- package/css/toast.css +373 -144
- package/css/toggle-group.css +309 -76
- package/css/toggle.css +116 -85
- package/css/tone.css +47 -0
- package/css/tool-call.css +421 -0
- package/css/toolbar.css +181 -33
- package/css/tooltip.css +107 -36
- package/css/tour.css +183 -152
- package/css/transfer.css +351 -138
- package/css/tree-select.css +323 -216
- package/css/tree.css +294 -62
- package/css/truncate.css +65 -0
- package/css/typography.css +228 -5
- package/css/undefined.css +10 -1
- package/css/virtualizer.css +9 -10
- package/css/visually-hidden.css +7 -0
- package/css/watermark.css +7 -0
- package/family/action-control.css +487 -0
- package/family/collection-item.css +721 -0
- package/family/field-chrome.css +298 -0
- package/family/motion.css +166 -0
- package/family/swatch.css +59 -0
- package/index.css +41705 -126
- package/index.unlayered.css +33692 -17339
- package/package.json +51 -17
- package/css/calendar.css +0 -367
- package/css/code-block.css +0 -91
- package/css/composer.css +0 -134
- package/css/countdown.css +0 -26
- package/css/dynamic-input.css +0 -220
- package/css/ellipsis.css +0 -52
- package/css/hotkeys.css +0 -90
- package/css/popselect.css +0 -391
- package/css/qr-code.css +0 -55
- package/css/result.css +0 -119
- package/css/space.css +0 -117
- package/css/thread.css +0 -120
- package/css/time.css +0 -25
package/css/transfer.css
CHANGED
|
@@ -1,47 +1,109 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021-Present XiHanFun and contributors.
|
|
3
|
+
* Licensed under the MIT License. See LICENSE in the project root for license information.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* 定义 transfer 样式。 */
|
|
7
|
+
|
|
8
|
+
@import '../family/action-control.css';
|
|
9
|
+
@import '../family/collection-item.css';
|
|
10
|
+
|
|
1
11
|
@layer xihan.components {
|
|
2
12
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
3
13
|
[data-scope='transfer'] {
|
|
4
14
|
--xh-transfer-skin: 1;
|
|
5
15
|
}
|
|
6
16
|
|
|
7
|
-
/*
|
|
8
|
-
|
|
9
|
-
|
|
17
|
+
/* 三栏栅格:宽档两侧面板各占一栏、跨两行,中间那栏上下各放一个搬运按钮;
|
|
18
|
+
窄档四个节点改按行叠放,中栏被两个按钮各跨一半、宽度收成零,两钮因此仍在中线相遇。
|
|
19
|
+
两档共用这一份轨道声明,换档靠四个子节点各自换安放。
|
|
20
|
+
栅格的列号本身就是随书写方向走的(第 1 栏永远在行首侧),dir=rtl 时整块自动镜像。
|
|
10
21
|
中间那栏没有对应的角色节点(anatomy 里两个按钮是 root 的直接子节点),
|
|
11
|
-
所以只能按位置显式安放,不能靠自动流——自动流会把"
|
|
22
|
+
所以只能按位置显式安放,不能靠自动流——自动流会把"往回搬"甩到目标面板的位置上 */
|
|
12
23
|
[data-scope='transfer'][data-part='root'] {
|
|
13
|
-
/*
|
|
14
|
-
|
|
24
|
+
/* 条目外的字形(空态占位里作者塞的图标)按档取尺,缺省 md;条目内的字形由家族随 data-xh-collection-size
|
|
25
|
+
下发,搬运钮内的按 Action Control icon 档取,勾选格里的勾按边长比例取(§6.5) */
|
|
26
|
+
--xh-icon-size: var(--xh-transfer-icon-size, var(--xh-glyph-size-md));
|
|
27
|
+
/* 两侧定高小列表的自绘条挂在根上(§6.6):根是条子的定位盒(面板不定位),轨道底色关掉才不会在列表边缘糊出一条灰带 */
|
|
28
|
+
--xh-scrollbar-track-bg: transparent;
|
|
29
|
+
|
|
30
|
+
/* 尺寸档只换这五个私有槽,面板头、搜索框、条目与勾选格都从 root 继承它们,
|
|
31
|
+
换档不必给每个部件各写一条选择器 */
|
|
32
|
+
--xh-_transfer-item-py: var(--xh-list-option-py-md);
|
|
33
|
+
--xh-_transfer-px: var(--xh-control-px-md);
|
|
34
|
+
--xh-_transfer-gap: var(--xh-control-gap-md);
|
|
35
|
+
--xh-_transfer-font-size: var(--xh-control-font-md);
|
|
36
|
+
--xh-_transfer-box: var(--xh-control-indicator-md);
|
|
37
|
+
|
|
38
|
+
/* 勾选格的填色随语气走;没写 data-tone 时退回品牌色 */
|
|
39
|
+
--xh-_transfer-accent: var(--xh-_tone, var(--xh-bg-brand));
|
|
40
|
+
--xh-_transfer-on-accent: var(--xh-_tone-on, var(--xh-fg-on-brand));
|
|
15
41
|
|
|
42
|
+
position: relative;
|
|
16
43
|
display: grid;
|
|
17
|
-
grid-template-rows:
|
|
44
|
+
grid-template-rows: auto auto;
|
|
18
45
|
grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
|
|
19
46
|
gap: var(--xh-transfer-gap, var(--xh-space-3));
|
|
20
47
|
align-items: center;
|
|
21
48
|
color: var(--xh-transfer-fg, var(--xh-fg-default));
|
|
22
49
|
}
|
|
23
50
|
|
|
51
|
+
/* —— 尺寸 —— */
|
|
52
|
+
/* 缺省档写在上面的基础规则里 */
|
|
53
|
+
[data-scope='transfer'][data-part='root'][data-size='sm'] {
|
|
54
|
+
--xh-icon-size: var(--xh-transfer-icon-size, var(--xh-glyph-size-sm));
|
|
55
|
+
--xh-_transfer-item-py: var(--xh-list-option-py-sm);
|
|
56
|
+
--xh-_transfer-px: var(--xh-control-px-sm);
|
|
57
|
+
--xh-_transfer-gap: var(--xh-control-gap-sm);
|
|
58
|
+
--xh-_transfer-font-size: var(--xh-control-font-sm);
|
|
59
|
+
--xh-_transfer-box: var(--xh-control-indicator-sm);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
[data-scope='transfer'][data-part='root'][data-size='lg'] {
|
|
63
|
+
--xh-icon-size: var(--xh-transfer-icon-size, var(--xh-glyph-size-lg));
|
|
64
|
+
--xh-_transfer-item-py: var(--xh-list-option-py-lg);
|
|
65
|
+
--xh-_transfer-px: var(--xh-control-px-lg);
|
|
66
|
+
--xh-_transfer-gap: var(--xh-control-gap-lg);
|
|
67
|
+
--xh-_transfer-font-size: var(--xh-control-font-lg);
|
|
68
|
+
--xh-_transfer-box: var(--xh-control-indicator-lg);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* 校验失败:两侧面板换成错误描边,与其余表单控件同一套表达 */
|
|
72
|
+
[data-scope='transfer'][data-part='root'][data-invalid]
|
|
73
|
+
:is([data-scope='transfer'][data-part='source-panel'], [data-scope='transfer'][data-part='target-panel']) {
|
|
74
|
+
border-color: var(--xh-transfer-panel-border-invalid, var(--xh-border-invalid));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* 只读勾不动也搬不动,但不是禁用:颜色照常,只把"可点"这个暗示收回来。
|
|
78
|
+
排掉禁用项是因为这条选择器权重高过条目那条,不排就会把禁用的手势指示覆盖回 default */
|
|
79
|
+
[data-scope='transfer'][data-part='root'][data-readonly]
|
|
80
|
+
[data-scope='transfer'][data-part='item']:not([data-disabled]) {
|
|
81
|
+
cursor: default;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* 窄档:源面板在上、目标面板在下,各自跨满三栏 */
|
|
24
85
|
[data-scope='transfer'][data-part='source-panel'] {
|
|
25
|
-
grid-row: 1
|
|
26
|
-
grid-column: 1;
|
|
86
|
+
grid-row: 1;
|
|
87
|
+
grid-column: 1 / 4;
|
|
27
88
|
}
|
|
28
89
|
|
|
29
90
|
[data-scope='transfer'][data-part='target-panel'] {
|
|
30
|
-
grid-row:
|
|
31
|
-
grid-column:
|
|
91
|
+
grid-row: 3;
|
|
92
|
+
grid-column: 1 / 4;
|
|
32
93
|
}
|
|
33
94
|
|
|
34
|
-
/*
|
|
95
|
+
/* 两钮同占中间一行,各跨到中栏为止,一个贴行尾侧、一个贴行首侧,
|
|
96
|
+
因此夹着中线成对出现,而不是各自漂在半行中央 */
|
|
35
97
|
[data-scope='transfer'][data-part='to-target-trigger'] {
|
|
36
|
-
grid-row:
|
|
37
|
-
grid-column:
|
|
38
|
-
|
|
98
|
+
grid-row: 2;
|
|
99
|
+
grid-column: 1 / 3;
|
|
100
|
+
justify-self: end;
|
|
39
101
|
}
|
|
40
102
|
|
|
41
103
|
[data-scope='transfer'][data-part='to-source-trigger'] {
|
|
42
104
|
grid-row: 2;
|
|
43
|
-
grid-column: 2;
|
|
44
|
-
|
|
105
|
+
grid-column: 2 / 4;
|
|
106
|
+
justify-self: start;
|
|
45
107
|
}
|
|
46
108
|
|
|
47
109
|
[data-scope='transfer'][data-part='source-panel'],
|
|
@@ -62,12 +124,13 @@
|
|
|
62
124
|
background: var(--xh-transfer-panel-bg-disabled, var(--xh-bg-muted));
|
|
63
125
|
}
|
|
64
126
|
|
|
127
|
+
/* 面板内三个角色的槽都带 panel- 段,与部件名逐字对上 */
|
|
65
128
|
[data-scope='transfer'][data-part='panel-header'] {
|
|
66
129
|
display: flex;
|
|
67
|
-
gap: var(--xh-transfer-header-gap, var(--xh-
|
|
130
|
+
gap: var(--xh-transfer-panel-header-gap, var(--xh-_transfer-gap));
|
|
68
131
|
align-items: center;
|
|
69
|
-
padding-block: var(--xh-transfer-header-py, var(--xh-space-2));
|
|
70
|
-
padding-inline: var(--xh-transfer-header-px, var(--xh-
|
|
132
|
+
padding-block: var(--xh-transfer-panel-header-py, var(--xh-space-2));
|
|
133
|
+
padding-inline: var(--xh-transfer-panel-header-px, var(--xh-_transfer-px));
|
|
71
134
|
border-block-end: var(--xh-stroke-thin) solid var(--xh-transfer-panel-border, var(--xh-border-default));
|
|
72
135
|
}
|
|
73
136
|
|
|
@@ -76,9 +139,10 @@
|
|
|
76
139
|
flex: 1;
|
|
77
140
|
min-inline-size: 0;
|
|
78
141
|
overflow: hidden;
|
|
79
|
-
color: var(--xh-transfer-title-fg, var(--xh-fg-default));
|
|
80
|
-
|
|
81
|
-
font-
|
|
142
|
+
color: var(--xh-transfer-panel-title-fg, var(--xh-fg-default));
|
|
143
|
+
/* 面板标头是 Surface 内的标题:14 / 600(§6.4) */
|
|
144
|
+
font-size: var(--xh-transfer-panel-title-font-size, var(--xh-text-label-size));
|
|
145
|
+
font-weight: var(--xh-transfer-panel-title-font-weight, var(--xh-font-weight-semibold));
|
|
82
146
|
line-height: var(--xh-leading-none);
|
|
83
147
|
white-space: nowrap;
|
|
84
148
|
text-overflow: ellipsis;
|
|
@@ -86,8 +150,8 @@
|
|
|
86
150
|
|
|
87
151
|
[data-scope='transfer'][data-part='panel-count'] {
|
|
88
152
|
flex: none;
|
|
89
|
-
color: var(--xh-transfer-count-fg, var(--xh-fg-subtle));
|
|
90
|
-
font-size: var(--xh-transfer-count-font-size, var(--xh-text-caption-size));
|
|
153
|
+
color: var(--xh-transfer-panel-count-fg, var(--xh-fg-subtle));
|
|
154
|
+
font-size: var(--xh-transfer-panel-count-font-size, var(--xh-text-caption-size));
|
|
91
155
|
line-height: var(--xh-leading-none);
|
|
92
156
|
font-variant-numeric: tabular-nums;
|
|
93
157
|
}
|
|
@@ -103,24 +167,18 @@
|
|
|
103
167
|
display: block;
|
|
104
168
|
inline-size: 100%;
|
|
105
169
|
block-size: var(--xh-transfer-search-h, var(--xh-control-h-sm));
|
|
106
|
-
padding-inline: var(--xh-transfer-search-px, var(--xh-
|
|
170
|
+
padding-inline: var(--xh-transfer-search-px, var(--xh-_transfer-px));
|
|
107
171
|
border: 0;
|
|
108
172
|
border-block-end: var(--xh-stroke-thin) solid var(--xh-transfer-search-border, var(--xh-border-control));
|
|
109
173
|
background: var(--xh-transfer-search-bg, transparent);
|
|
110
174
|
color: var(--xh-transfer-search-fg, var(--xh-fg-default));
|
|
111
175
|
font: inherit;
|
|
112
|
-
font-size: var(--xh-transfer-search-font-size, var(--xh-
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
[data-scope='transfer'][data-part='search']:focus-visible {
|
|
116
|
-
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
117
|
-
outline-offset: calc(var(--xh-ring-offset) * -1);
|
|
176
|
+
font-size: var(--xh-transfer-search-font-size, var(--xh-_transfer-font-size));
|
|
118
177
|
}
|
|
119
178
|
|
|
120
179
|
/* 单体控件的禁用是原生 disabled,样式只能写 :disabled;集合条目才读 data-disabled */
|
|
121
180
|
[data-scope='transfer'][data-part='search']:disabled {
|
|
122
181
|
color: var(--xh-fg-disabled);
|
|
123
|
-
cursor: not-allowed;
|
|
124
182
|
}
|
|
125
183
|
|
|
126
184
|
/* 两侧列表定高:高度只由这个槽给,与条目数无关。左右两块因此恒等高,
|
|
@@ -142,42 +200,136 @@
|
|
|
142
200
|
outline: none;
|
|
143
201
|
}
|
|
144
202
|
|
|
203
|
+
/* 空态占位:待在面板里、list 的兄弟(列表框只许拥有 option 与 group)。
|
|
204
|
+
盒归面板,这里只画一句居中的次要文字 */
|
|
205
|
+
[data-scope='transfer'][data-part='empty'] {
|
|
206
|
+
display: block;
|
|
207
|
+
flex: none;
|
|
208
|
+
padding-block: var(--xh-transfer-empty-py, var(--xh-space-3));
|
|
209
|
+
padding-inline: var(--xh-transfer-empty-px, var(--xh-_transfer-px));
|
|
210
|
+
color: var(--xh-transfer-empty-fg, var(--xh-fg-subtle));
|
|
211
|
+
font-size: var(--xh-transfer-empty-font-size, var(--xh-_transfer-font-size));
|
|
212
|
+
line-height: var(--xh-leading-none);
|
|
213
|
+
text-align: center;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* 上面给了 display,UA 的 [hidden]{display:none} 已被盖掉,这里补回来 */
|
|
217
|
+
[data-scope='transfer'][data-part='empty'][hidden] {
|
|
218
|
+
display: none;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
[data-scope='transfer'][data-part='empty'][data-disabled] {
|
|
222
|
+
color: var(--xh-fg-disabled);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/* 在途占位:与空态占位同一个位置、同一副观感,两者不同屏 */
|
|
226
|
+
[data-scope='transfer'][data-part='loading'] {
|
|
227
|
+
display: block;
|
|
228
|
+
flex: none;
|
|
229
|
+
padding-block: var(--xh-transfer-loading-py, var(--xh-space-3));
|
|
230
|
+
padding-inline: var(--xh-transfer-loading-px, var(--xh-_transfer-px));
|
|
231
|
+
color: var(--xh-transfer-loading-fg, var(--xh-fg-subtle));
|
|
232
|
+
font-size: var(--xh-transfer-loading-font-size, var(--xh-_transfer-font-size));
|
|
233
|
+
line-height: var(--xh-leading-none);
|
|
234
|
+
text-align: center;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
[data-scope='transfer'][data-part='loading'][hidden] {
|
|
238
|
+
display: none;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
[data-scope='transfer'][data-part='loading'][data-disabled] {
|
|
242
|
+
color: var(--xh-fg-disabled);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
[data-scope='transfer'][data-part='group'] {
|
|
246
|
+
display: flex;
|
|
247
|
+
flex: none;
|
|
248
|
+
flex-direction: column;
|
|
249
|
+
gap: var(--xh-transfer-group-gap, var(--xh-list-option-gap));
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
[data-scope='transfer'][data-part='group'][hidden] {
|
|
253
|
+
display: none;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/* 组内条目搬到对面、或被搜索筛掉时都只是打 hidden,一条不剩的分组连标题一起撤下,
|
|
257
|
+
免得列表里留着一排够不着的标题 */
|
|
258
|
+
[data-scope='transfer'][data-part='group']:not(:has([data-part='item']:not([hidden]))) {
|
|
259
|
+
display: none;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/* 组间留白只加在后继分组上:首组顶上已经有 list 的内边距,再加一层会显得头重 */
|
|
263
|
+
[data-scope='transfer'][data-part='group'] + [data-scope='transfer'][data-part='group'] {
|
|
264
|
+
margin-block-start: var(--xh-transfer-group-spacing, var(--xh-space-1_5));
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/* 分组标题不是选项、进不了导航,画成小号次要文字,
|
|
268
|
+
内缩与条目对齐(同一个 padding-inline),标题与条目文字才在一条竖线上 */
|
|
269
|
+
[data-scope='transfer'][data-part='group-label'] {
|
|
270
|
+
display: block;
|
|
271
|
+
padding-block: var(--xh-transfer-group-label-py, var(--xh-space-1));
|
|
272
|
+
padding-inline: var(--xh-transfer-group-label-px, var(--xh-_transfer-px));
|
|
273
|
+
color: var(--xh-transfer-group-label-fg, var(--xh-fg-subtle));
|
|
274
|
+
font-size: var(--xh-transfer-group-label-font-size, var(--xh-text-caption-size));
|
|
275
|
+
font-weight: var(--xh-transfer-group-label-font-weight, var(--xh-font-weight-medium));
|
|
276
|
+
line-height: var(--xh-leading-none);
|
|
277
|
+
user-select: none;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
[data-scope='transfer'][data-part='group-label'][hidden] {
|
|
281
|
+
display: none;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
[data-scope='transfer'][data-part='group-label'][data-disabled] {
|
|
285
|
+
color: var(--xh-fg-disabled);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/* 条目走 Collection Item 的 page 语境(页内持久集合,§7.3):悬停 / 高亮 / 按下面(白底承载 hover 100 →
|
|
289
|
+
pressed 200)与勾选行的选中面(品牌淡底 + 淡底前景,selected+hover 20% / +pressed 28%)都由家族按
|
|
290
|
+
aria-selected / aria-disabled 给出,标记由行首的勾选方框承担;禁用面(字色降级、not-allowed、不换面)
|
|
291
|
+
也归家族。这里只把公开槽映射到桥接槽。
|
|
292
|
+
布局保持 flex 而不用家族网格:间距统一由行的 gap 给,家族按槽下发的外边距(--xh-collection-gap)归零 */
|
|
145
293
|
[data-scope='transfer'][data-part='item'] {
|
|
294
|
+
--xh-collection-block-padding: var(--xh-transfer-item-py, var(--xh-_transfer-item-py));
|
|
295
|
+
--xh-collection-inline-padding: var(--xh-transfer-item-px, var(--xh-_transfer-px));
|
|
296
|
+
--xh-collection-gap: 0;
|
|
297
|
+
--xh-collection-font-size: var(--xh-transfer-item-font-size, var(--xh-_transfer-font-size));
|
|
298
|
+
--xh-collection-radius: var(--xh-transfer-item-radius, var(--xh-shape-control));
|
|
299
|
+
/* 作者的图标尺槽经桥接槽下发到条目,家族缺省按 data-xh-collection-size 取档 */
|
|
300
|
+
--xh-collection-glyph-size: var(--xh-transfer-icon-size, var(--xh-_collection-glyph-size));
|
|
301
|
+
--xh-collection-fg-rest: var(--xh-transfer-item-fg, var(--xh-fg-default));
|
|
302
|
+
--xh-collection-fg-hover: var(--xh-transfer-item-fg, var(--xh-fg-default));
|
|
303
|
+
--xh-collection-fg-keyboard-highlight: var(--xh-transfer-item-fg, var(--xh-fg-default));
|
|
304
|
+
--xh-collection-fg-pressed: var(--xh-transfer-item-fg, var(--xh-fg-default));
|
|
305
|
+
--xh-collection-fg-selected: var(--xh-transfer-item-fg-selected, var(--xh-fg-on-brand-subtle));
|
|
306
|
+
--xh-collection-fg-selected-hover: var(--xh-transfer-item-fg-selected, var(--xh-fg-on-brand-subtle));
|
|
307
|
+
--xh-collection-fg-selected-highlight: var(--xh-transfer-item-fg-selected, var(--xh-fg-on-brand-subtle));
|
|
308
|
+
--xh-collection-fg-selected-pressed: var(--xh-transfer-item-fg-selected, var(--xh-fg-on-brand-subtle));
|
|
309
|
+
--xh-collection-bg-hover: var(--xh-transfer-item-bg-hover, var(--xh-bg-subtle));
|
|
310
|
+
--xh-collection-bg-keyboard-highlight: var(--xh-transfer-item-bg-hover, var(--xh-bg-subtle));
|
|
311
|
+
--xh-collection-bg-pressed: var(--xh-transfer-item-bg-pressed, var(--xh-bg-subtle-hover));
|
|
312
|
+
--xh-collection-bg-selected: var(--xh-transfer-item-bg-selected, var(--xh-bg-brand-subtle));
|
|
313
|
+
/* data-highlighted 跟的是连接层记的焦点条目(指针点选也会落焦):只换面,焦点环在 :focus-visible 下再接回 */
|
|
314
|
+
--xh-collection-outline-keyboard-highlight: transparent;
|
|
315
|
+
--xh-collection-outline-selected-highlight: transparent;
|
|
316
|
+
|
|
146
317
|
display: flex;
|
|
147
318
|
flex: none;
|
|
148
|
-
gap: var(--xh-transfer-item-gap, var(--xh-
|
|
319
|
+
gap: var(--xh-transfer-item-gap, var(--xh-_transfer-gap));
|
|
149
320
|
align-items: center;
|
|
150
|
-
padding-block: var(--xh-transfer-item-py, var(--xh-space-1_5));
|
|
151
|
-
padding-inline: var(--xh-transfer-item-px, var(--xh-control-px-md));
|
|
152
|
-
border-radius: var(--xh-transfer-item-radius, var(--xh-shape-control));
|
|
153
|
-
color: var(--xh-transfer-item-fg, var(--xh-fg-default));
|
|
154
|
-
font-size: var(--xh-transfer-item-font-size, var(--xh-text-body-size));
|
|
155
321
|
/* 行高留出文字的上下伸展空间,行内那层 overflow:hidden 才不会把字削掉 */
|
|
156
322
|
line-height: var(--xh-transfer-item-leading, var(--xh-leading-normal));
|
|
157
323
|
white-space: nowrap;
|
|
158
|
-
cursor: pointer;
|
|
159
324
|
user-select: none;
|
|
160
|
-
transition:
|
|
161
|
-
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
162
|
-
color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
163
325
|
}
|
|
164
326
|
|
|
165
|
-
/*
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
[data-scope='transfer'][data-part='item']:focus-visible {
|
|
172
|
-
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
173
|
-
outline-offset: calc(var(--xh-ring-offset) * -1);
|
|
174
|
-
}
|
|
327
|
+
/* 键盘焦点出现时环才接回并立即到位,不压在背景过渡的中间帧上 */
|
|
328
|
+
[data-scope='transfer'][data-part='item']:focus-visible:not(:hover) {
|
|
329
|
+
--xh-collection-outline-keyboard-highlight: var(--xh-ring-focus);
|
|
330
|
+
--xh-collection-outline-selected-highlight: var(--xh-ring-focus);
|
|
175
331
|
|
|
176
|
-
|
|
177
|
-
所以样式只能读 data-disabled,写 :disabled 永远不命中 */
|
|
178
|
-
[data-scope='transfer'][data-part='item'][data-disabled] {
|
|
179
|
-
color: var(--xh-fg-disabled);
|
|
180
|
-
cursor: not-allowed;
|
|
332
|
+
transition: none;
|
|
181
333
|
}
|
|
182
334
|
|
|
183
335
|
[data-scope='transfer'][data-part='item-text'] {
|
|
@@ -192,17 +344,20 @@
|
|
|
192
344
|
两个方框就此走形。全选格没有对应的角色节点(它自己就是按钮),由伪元素补出来 */
|
|
193
345
|
[data-scope='transfer'][data-part='item-checkbox'],
|
|
194
346
|
[data-scope='transfer'][data-part='select-all-trigger']::before {
|
|
347
|
+
/* 方框里的勾按边长的比例取尺(与 Checkbox 同一比例),不吃家族按档下发的行内字形尺 */
|
|
348
|
+
--xh-icon-size: calc(var(--xh-transfer-checkbox-size, var(--xh-_transfer-box)) * 0.75);
|
|
349
|
+
|
|
195
350
|
display: inline-flex;
|
|
196
351
|
flex: none;
|
|
197
352
|
align-items: center;
|
|
198
353
|
justify-content: center;
|
|
199
|
-
inline-size: var(--xh-transfer-checkbox-size, var(--xh-
|
|
200
|
-
block-size: var(--xh-transfer-checkbox-size, var(--xh-
|
|
354
|
+
inline-size: var(--xh-transfer-checkbox-size, var(--xh-_transfer-box));
|
|
355
|
+
block-size: var(--xh-transfer-checkbox-size, var(--xh-_transfer-box));
|
|
201
356
|
border: var(--xh-stroke-thin) solid var(--xh-transfer-checkbox-border, var(--xh-border-control));
|
|
202
357
|
border-radius: var(--xh-transfer-checkbox-radius, var(--xh-shape-inset));
|
|
203
|
-
background: var(--xh-transfer-checkbox-bg,
|
|
204
|
-
color: var(--xh-transfer-checkbox-fg, var(--xh-
|
|
205
|
-
font-size: var(--xh-transfer-checkbox-font-size, calc(var(--xh-
|
|
358
|
+
background: var(--xh-transfer-checkbox-bg, transparent);
|
|
359
|
+
color: var(--xh-transfer-checkbox-fg, var(--xh-_transfer-on-accent));
|
|
360
|
+
font-size: var(--xh-transfer-checkbox-font-size, calc(var(--xh-_transfer-box) * 0.75));
|
|
206
361
|
line-height: var(--xh-leading-none);
|
|
207
362
|
transition:
|
|
208
363
|
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
@@ -218,8 +373,14 @@
|
|
|
218
373
|
/* 勾中即填色。全选格三态里 all 与 some 都算"有值",与条目共用同一副填色 */
|
|
219
374
|
[data-scope='transfer'][data-part='item-checkbox'][data-state='checked'],
|
|
220
375
|
[data-scope='transfer'][data-part='select-all-trigger']:is([data-state='checked'], [data-state='indeterminate'])::before {
|
|
221
|
-
border-color: var(--xh-transfer-checkbox-border-checked, var(--xh-
|
|
222
|
-
background: var(--xh-transfer-checkbox-bg-checked, var(--xh-
|
|
376
|
+
border-color: var(--xh-transfer-checkbox-border-checked, var(--xh-_transfer-accent));
|
|
377
|
+
background: var(--xh-transfer-checkbox-bg-checked, var(--xh-_transfer-accent));
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/* 面是实心的,环色与面同族,画在面里就看不出来;环改取面自己的前景色——
|
|
381
|
+
那一族色本来就要在这块面上把字读清楚,与面的对比是按可读性定的 */
|
|
382
|
+
[data-scope='transfer'][data-part='item-checkbox'][data-state='checked']:focus-visible {
|
|
383
|
+
--xh-_ring-color: currentColor;
|
|
223
384
|
}
|
|
224
385
|
|
|
225
386
|
/* 没写内容就由皮肤画勾;作者往格子里塞了自己的图形,这条规则即不命中。
|
|
@@ -252,13 +413,13 @@
|
|
|
252
413
|
inset-inline-start: 0;
|
|
253
414
|
margin-block: auto;
|
|
254
415
|
margin-inline-start: calc(
|
|
255
|
-
(var(--xh-transfer-checkbox-size, var(--xh-
|
|
416
|
+
(var(--xh-transfer-checkbox-size, var(--xh-_transfer-box)) - var(--xh-icon-size, var(--xh-glyph-size-text))) /
|
|
256
417
|
2
|
|
257
418
|
);
|
|
258
419
|
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
259
420
|
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
260
|
-
background-color: var(--xh-transfer-checkbox-fg, var(--xh-
|
|
261
|
-
font-size: var(--xh-transfer-checkbox-font-size, calc(var(--xh-
|
|
421
|
+
background-color: var(--xh-transfer-checkbox-fg, var(--xh-_transfer-on-accent));
|
|
422
|
+
font-size: var(--xh-transfer-checkbox-font-size, calc(var(--xh-_transfer-box) * 0.75));
|
|
262
423
|
-webkit-mask: var(--xh-glyph-mark-check) center / contain no-repeat;
|
|
263
424
|
mask: var(--xh-glyph-mark-check) center / contain no-repeat;
|
|
264
425
|
}
|
|
@@ -270,93 +431,84 @@
|
|
|
270
431
|
inset-inline-start: 0;
|
|
271
432
|
margin-block: auto;
|
|
272
433
|
margin-inline-start: calc(
|
|
273
|
-
(var(--xh-transfer-checkbox-size, var(--xh-
|
|
434
|
+
(var(--xh-transfer-checkbox-size, var(--xh-_transfer-box)) - var(--xh-icon-size, var(--xh-glyph-size-text))) /
|
|
274
435
|
2
|
|
275
436
|
);
|
|
276
437
|
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
277
438
|
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
278
|
-
background-color: var(--xh-transfer-checkbox-fg, var(--xh-
|
|
279
|
-
font-size: var(--xh-transfer-checkbox-font-size, calc(var(--xh-
|
|
439
|
+
background-color: var(--xh-transfer-checkbox-fg, var(--xh-_transfer-on-accent));
|
|
440
|
+
font-size: var(--xh-transfer-checkbox-font-size, calc(var(--xh-_transfer-box) * 0.75));
|
|
280
441
|
-webkit-mask: var(--xh-glyph-mark-minus) center / contain no-repeat;
|
|
281
442
|
mask: var(--xh-glyph-mark-minus) center / contain no-repeat;
|
|
282
443
|
}
|
|
283
444
|
|
|
284
445
|
[data-scope='transfer'][data-part='item-checkbox'][data-disabled] {
|
|
285
|
-
border-color: var(--xh-transfer-checkbox-border-disabled, var(--xh-border-
|
|
446
|
+
border-color: var(--xh-transfer-checkbox-border-disabled, var(--xh-border-default));
|
|
286
447
|
background: var(--xh-transfer-checkbox-bg-disabled, var(--xh-bg-muted));
|
|
287
448
|
}
|
|
288
449
|
|
|
289
|
-
/* 全选格是原生按钮(三态经 aria-checked
|
|
290
|
-
|
|
291
|
-
|
|
450
|
+
/* 全选格是原生按钮(三态经 aria-checked 上报,激活由平台负责),禁用同时打原生 disabled 与 data-disabled。
|
|
451
|
+
它是「方框 + 文案」的整行命中区(§9.2):接 Action Control text 档、ghost 形态,悬停 / 按下 / 禁用面与过渡由家族给
|
|
452
|
+
(白底承载 hover 100 → pressed 200),按下只换面不缩放(--xh-action-scale-pressed: none),勾选回执落在方框上;
|
|
453
|
+
盒随内容收宽、高度取 xs 档的 24px 命中地板(方框 16px 居中其间),text 档的内距与最小宽度归零。
|
|
454
|
+
position 是给叠在方框上的那颗字形 ::after 当定位基准 */
|
|
292
455
|
[data-scope='transfer'][data-part='select-all-trigger'] {
|
|
293
|
-
|
|
294
|
-
|
|
456
|
+
/* 叠在方框上的那颗字形 ::after 与方框里的勾同一把尺 */
|
|
457
|
+
--xh-icon-size: calc(var(--xh-transfer-checkbox-size, var(--xh-_transfer-box)) * 0.75);
|
|
458
|
+
|
|
459
|
+
--xh-action-min-inline-size: 0;
|
|
460
|
+
--xh-action-padding-inline: 0;
|
|
461
|
+
--xh-action-gap: var(--xh-transfer-select-all-gap, var(--xh-control-gap-sm));
|
|
462
|
+
/* 全选格是嵌在面板头里的勾选小块:inset 档圆角(身份表登记) */
|
|
463
|
+
--xh-action-radius: var(--xh-transfer-select-all-radius, var(--xh-shape-inset));
|
|
464
|
+
--xh-action-bg-hover: var(--xh-transfer-select-all-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
465
|
+
--xh-action-bg-pressed: var(--xh-transfer-select-all-bg-pressed, var(--xh-_action-variant-bg-pressed));
|
|
466
|
+
--xh-action-fg-rest: var(--xh-transfer-select-all-fg, var(--xh-fg-muted));
|
|
467
|
+
--xh-action-fg-hover: var(--xh-transfer-select-all-fg, var(--xh-fg-muted));
|
|
468
|
+
--xh-action-fg-pressed: var(--xh-transfer-select-all-fg, var(--xh-fg-muted));
|
|
469
|
+
--xh-action-fg-focus-visible: var(--xh-transfer-select-all-fg, var(--xh-fg-muted));
|
|
470
|
+
--xh-action-font-size: var(--xh-transfer-select-all-font-size, var(--xh-text-caption-size));
|
|
471
|
+
--xh-action-scale-pressed: none;
|
|
472
|
+
|
|
295
473
|
flex: none;
|
|
296
|
-
|
|
297
|
-
align-items: center;
|
|
474
|
+
justify-content: start;
|
|
298
475
|
padding: 0;
|
|
299
|
-
border: 0;
|
|
300
|
-
border-radius: var(--xh-transfer-select-all-radius, var(--xh-shape-control));
|
|
301
|
-
background: none;
|
|
302
|
-
color: var(--xh-transfer-select-all-fg, var(--xh-fg-muted));
|
|
303
|
-
font-size: var(--xh-transfer-select-all-font-size, var(--xh-text-caption-size));
|
|
304
476
|
font-weight: var(--xh-font-weight-medium);
|
|
305
|
-
line-height: var(--xh-leading-none);
|
|
306
|
-
cursor: pointer;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
/* 往内收,与搜索框、条目同一口径:全选格长在面板里,面板收 overflow,
|
|
310
|
-
环画在外沿会被裁掉 */
|
|
311
|
-
[data-scope='transfer'][data-part='select-all-trigger']:focus-visible {
|
|
312
|
-
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
313
|
-
outline-offset: calc(-1 * var(--xh-ring-width));
|
|
314
477
|
}
|
|
315
478
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
479
|
+
/* 家族 text 档在粗指针下用 ::after 扩热区,勾中 / 半选时这里的 ::after 是叠在方框上的字形:钉回原位、下限归零 */
|
|
480
|
+
@media (pointer: coarse) {
|
|
481
|
+
[data-scope='transfer'][data-part='select-all-trigger']:is([data-state='checked'], [data-state='indeterminate'])::after {
|
|
482
|
+
min-block-size: 0;
|
|
483
|
+
translate: none;
|
|
484
|
+
}
|
|
319
485
|
}
|
|
320
486
|
|
|
487
|
+
/* 两颗搬运钮是只有字形的离散动作钮:接 Action Control 的 icon 档、outline 形态(中性描边、透明底,
|
|
488
|
+
白底承载 hover 100 → pressed 200,按下 0.97 并同时换底),盒、焦点环、粗指针热区与禁用面由家族给;
|
|
489
|
+
此前的 raised 悬停抬升退役(§8.3 边界只由描边承担)。这里只把使用者槽映射到桥接槽;
|
|
490
|
+
钮是正方盒,按 sm 档取一个控件高 */
|
|
321
491
|
[data-scope='transfer'][data-part='to-target-trigger'],
|
|
322
492
|
[data-scope='transfer'][data-part='to-source-trigger'] {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
[data-scope='transfer'][data-part='to-target-trigger']:active:not(:disabled),
|
|
345
|
-
[data-scope='transfer'][data-part='to-source-trigger']:active:not(:disabled) {
|
|
346
|
-
background: var(--xh-transfer-trigger-bg-active, var(--xh-bg-subtle-active));
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
[data-scope='transfer'][data-part='to-target-trigger']:focus-visible,
|
|
350
|
-
[data-scope='transfer'][data-part='to-source-trigger']:focus-visible {
|
|
351
|
-
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
352
|
-
outline-offset: var(--xh-ring-offset);
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
/* 搬运按钮是单体控件,禁用走原生 disabled */
|
|
356
|
-
[data-scope='transfer'][data-part='to-target-trigger']:disabled,
|
|
357
|
-
[data-scope='transfer'][data-part='to-source-trigger']:disabled {
|
|
358
|
-
color: var(--xh-fg-disabled);
|
|
359
|
-
cursor: not-allowed;
|
|
493
|
+
--xh-action-visual-size: var(--xh-transfer-trigger-size, var(--xh-_action-profile-visual-size));
|
|
494
|
+
--xh-action-min-inline-size: var(--xh-transfer-trigger-size, var(--xh-_action-profile-visual-size));
|
|
495
|
+
--xh-action-padding-inline: var(--xh-transfer-trigger-px, var(--xh-_action-profile-padding-inline));
|
|
496
|
+
--xh-action-radius: var(--xh-transfer-trigger-radius, var(--xh-shape-control));
|
|
497
|
+
--xh-action-border-rest: var(--xh-transfer-trigger-border, var(--xh-_action-variant-border-rest));
|
|
498
|
+
--xh-action-border-hover: var(--xh-transfer-trigger-border, var(--xh-_action-variant-border-hover));
|
|
499
|
+
--xh-action-border-pressed: var(--xh-transfer-trigger-border, var(--xh-_action-variant-border-pressed));
|
|
500
|
+
--xh-action-bg-rest: var(--xh-transfer-trigger-bg, var(--xh-_action-variant-bg-rest));
|
|
501
|
+
--xh-action-bg-hover: var(--xh-transfer-trigger-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
502
|
+
--xh-action-bg-pressed: var(--xh-transfer-trigger-bg-active, var(--xh-_action-variant-bg-pressed));
|
|
503
|
+
--xh-action-fg-rest: var(--xh-transfer-trigger-fg, var(--xh-_action-variant-fg-rest));
|
|
504
|
+
--xh-action-fg-hover: var(--xh-transfer-trigger-fg, var(--xh-_action-variant-fg-hover));
|
|
505
|
+
--xh-action-fg-pressed: var(--xh-transfer-trigger-fg, var(--xh-_action-variant-fg-pressed));
|
|
506
|
+
--xh-action-shadow-hover: var(--xh-transfer-trigger-shadow-hover, none);
|
|
507
|
+
--xh-action-shadow-pressed: var(--xh-transfer-trigger-shadow-active, none);
|
|
508
|
+
--xh-action-font-size: var(--xh-transfer-trigger-font-size, var(--xh-text-label-size));
|
|
509
|
+
/* 作者塞进钮里的图标与皮肤画的兜底箭头同一把尺:按 icon 档取字形尺寸。
|
|
510
|
+
配方尚未把 profile 字形档灌进 --xh-icon-size,钮内字形先按 icon 档逐钮取值 */
|
|
511
|
+
--xh-icon-size: var(--xh-transfer-icon-size, var(--xh-_action-profile-glyph-size));
|
|
360
512
|
}
|
|
361
513
|
|
|
362
514
|
/* 上面凡是给了 display 的角色节点都要补这条:display 声明会盖掉 UA 的 [hidden]{display:none},
|
|
@@ -377,7 +529,8 @@
|
|
|
377
529
|
display: none;
|
|
378
530
|
}
|
|
379
531
|
|
|
380
|
-
/*
|
|
532
|
+
/* 没写内容就由皮肤画兜底字形;作者往部件里塞了自己的图形,这几条即不命中。
|
|
533
|
+
堆叠时目标面板在下方,箭头因此朝下与朝上,指的是条目真正要去的方向 */
|
|
381
534
|
[data-scope='transfer'][data-part='to-source-trigger']:empty::before {
|
|
382
535
|
content: '';
|
|
383
536
|
display: inline-block;
|
|
@@ -385,8 +538,8 @@
|
|
|
385
538
|
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
386
539
|
vertical-align: var(--xh-glyph-baseline-shift);
|
|
387
540
|
background-color: currentColor;
|
|
388
|
-
-webkit-mask: var(--xh-glyph-mark-chevron-
|
|
389
|
-
mask: var(--xh-glyph-mark-chevron-
|
|
541
|
+
-webkit-mask: var(--xh-glyph-mark-chevron-up) center / contain no-repeat;
|
|
542
|
+
mask: var(--xh-glyph-mark-chevron-up) center / contain no-repeat;
|
|
390
543
|
}
|
|
391
544
|
|
|
392
545
|
[data-scope='transfer'][data-part='to-target-trigger']:empty::before {
|
|
@@ -396,7 +549,67 @@
|
|
|
396
549
|
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
397
550
|
vertical-align: var(--xh-glyph-baseline-shift);
|
|
398
551
|
background-color: currentColor;
|
|
399
|
-
-webkit-mask: var(--xh-glyph-mark-chevron-
|
|
400
|
-
mask: var(--xh-glyph-mark-chevron-
|
|
552
|
+
-webkit-mask: var(--xh-glyph-mark-chevron-down) center / contain no-repeat;
|
|
553
|
+
mask: var(--xh-glyph-mark-chevron-down) center / contain no-repeat;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
/* 宽档:视口放得下两块面板,回到并排——两侧面板各占一栏、跨两行,
|
|
557
|
+
中间那栏上下各放一个搬运按钮,上格贴底、下格贴顶,两钮夹着中线相遇 */
|
|
558
|
+
@media (min-width: 640px) {
|
|
559
|
+
[data-scope='transfer'][data-part='source-panel'] {
|
|
560
|
+
grid-row: 1 / 3;
|
|
561
|
+
grid-column: 1;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
[data-scope='transfer'][data-part='target-panel'] {
|
|
565
|
+
grid-row: 1 / 3;
|
|
566
|
+
grid-column: 3;
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
[data-scope='transfer'][data-part='to-target-trigger'] {
|
|
570
|
+
grid-row: 1;
|
|
571
|
+
grid-column: 2;
|
|
572
|
+
align-self: end;
|
|
573
|
+
justify-self: stretch;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
[data-scope='transfer'][data-part='to-source-trigger'] {
|
|
577
|
+
grid-row: 2;
|
|
578
|
+
grid-column: 2;
|
|
579
|
+
align-self: start;
|
|
580
|
+
justify-self: stretch;
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
/* 单向组合的唯一动作跨过两行,中心才与两侧面板的中心重合。 */
|
|
584
|
+
[data-scope='transfer'][data-part='root'][data-one-way]
|
|
585
|
+
> [data-scope='transfer'][data-part='to-target-trigger'] {
|
|
586
|
+
grid-row: 1 / 3;
|
|
587
|
+
align-self: center;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
/* 并排时目标面板在行尾侧,箭头改回朝行尾与朝行首。
|
|
591
|
+
盒的量法与窄档那两条逐字相同:兜底字形的盒必须按 --xh-icon-size 量,
|
|
592
|
+
作者换成自己的图标才和皮肤画的一样大 */
|
|
593
|
+
[data-scope='transfer'][data-part='to-source-trigger']:empty::before {
|
|
594
|
+
content: '';
|
|
595
|
+
display: inline-block;
|
|
596
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
597
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
598
|
+
vertical-align: var(--xh-glyph-baseline-shift);
|
|
599
|
+
background-color: currentColor;
|
|
600
|
+
-webkit-mask: var(--xh-glyph-mark-chevron-left) center / contain no-repeat;
|
|
601
|
+
mask: var(--xh-glyph-mark-chevron-left) center / contain no-repeat;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
[data-scope='transfer'][data-part='to-target-trigger']:empty::before {
|
|
605
|
+
content: '';
|
|
606
|
+
display: inline-block;
|
|
607
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
608
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
609
|
+
vertical-align: var(--xh-glyph-baseline-shift);
|
|
610
|
+
background-color: currentColor;
|
|
611
|
+
-webkit-mask: var(--xh-glyph-mark-chevron-right) center / contain no-repeat;
|
|
612
|
+
mask: var(--xh-glyph-mark-chevron-right) center / contain no-repeat;
|
|
613
|
+
}
|
|
401
614
|
}
|
|
402
615
|
}
|