@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/file-upload.css
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
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
|
+
/* 定义 file upload 样式。 */
|
|
7
|
+
|
|
1
8
|
@layer xihan.components {
|
|
2
9
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
3
10
|
[data-scope='file-upload'] {
|
|
@@ -5,7 +12,9 @@
|
|
|
5
12
|
}
|
|
6
13
|
|
|
7
14
|
[data-scope='file-upload'][data-part='root'] {
|
|
8
|
-
/*
|
|
15
|
+
/* 作者放进缩略图槽、删除钮与清空钮里的图标跟着字号走,与皮肤画的兜底叉同一把尺。
|
|
16
|
+
条目行首自绘的状态标记(传完的勾、失败的警示)不读这支:它们是指示符,与同一行里 icon 档的
|
|
17
|
+
删除钮并排、走 --xh-control-indicator-* 一族(§6.5),尺寸由 --xh-file-upload-item-mark-size 单独控 */
|
|
9
18
|
--xh-icon-size: var(--xh-file-upload-icon-size, var(--xh-glyph-size-text));
|
|
10
19
|
|
|
11
20
|
display: flex;
|
|
@@ -22,7 +31,6 @@
|
|
|
22
31
|
color: var(--xh-file-upload-label-fg, var(--xh-fg-default));
|
|
23
32
|
font-size: var(--xh-file-upload-label-font-size, var(--xh-text-label-size));
|
|
24
33
|
font-weight: var(--xh-file-upload-label-font-weight, var(--xh-text-label-weight));
|
|
25
|
-
line-height: var(--xh-leading-none);
|
|
26
34
|
}
|
|
27
35
|
|
|
28
36
|
[data-scope='file-upload'][data-part='label'][data-disabled] {
|
|
@@ -42,7 +50,7 @@
|
|
|
42
50
|
padding-inline: var(--xh-file-upload-dropzone-px, var(--xh-space-4));
|
|
43
51
|
border: var(--xh-stroke-thick) dashed var(--xh-file-upload-dropzone-border, var(--xh-border-control));
|
|
44
52
|
border-radius: var(--xh-file-upload-dropzone-radius, var(--xh-shape-surface));
|
|
45
|
-
background: var(--xh-file-upload-dropzone-bg,
|
|
53
|
+
background: var(--xh-file-upload-dropzone-bg, transparent);
|
|
46
54
|
color: var(--xh-file-upload-dropzone-fg, var(--xh-fg-muted));
|
|
47
55
|
font-size: var(--xh-file-upload-dropzone-font-size, var(--xh-text-body-size));
|
|
48
56
|
text-align: center;
|
|
@@ -57,15 +65,17 @@
|
|
|
57
65
|
display: none;
|
|
58
66
|
}
|
|
59
67
|
|
|
60
|
-
/* hover
|
|
68
|
+
/* hover 只在中性态命中:invalid 与 dragging 正拿边框颜色说事,被 hover 盖掉那条信息就没了。
|
|
69
|
+
描边与底一起换:这块面有整整八行高,只挪一圈 1px 的描边在这个面积上几乎读不出来 */
|
|
61
70
|
[data-scope='file-upload'][data-part='dropzone']:hover:not([data-disabled], [data-invalid], [data-dragging]) {
|
|
62
71
|
border-color: var(--xh-file-upload-dropzone-border-hover, var(--xh-border-control-hover));
|
|
72
|
+
background: var(--xh-file-upload-dropzone-bg-hover, var(--xh-bg-subtle));
|
|
63
73
|
}
|
|
64
74
|
|
|
65
|
-
/*
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
75
|
+
/* 键盘落焦时描边跟着语气走,与聚焦环同族;环由 focus.css 统一画。
|
|
76
|
+
摘掉的三档与 hover 那条一致:它们各自正拿边框颜色说事 */
|
|
77
|
+
[data-scope='file-upload'][data-part='dropzone']:focus-visible:not([data-disabled], [data-invalid], [data-dragging]) {
|
|
78
|
+
border-color: var(--xh-file-upload-dropzone-border-focus, var(--xh-_tone, var(--xh-border-control-focus)));
|
|
69
79
|
}
|
|
70
80
|
|
|
71
81
|
/* 悬停在上方:整块换成品牌色描边加浅底,比只换边框显眼得多 */
|
|
@@ -80,10 +90,9 @@
|
|
|
80
90
|
|
|
81
91
|
/* 投放区是 div,没有原生 disabled 可用,禁用态只能靠 data-disabled 表达,写 :disabled 永远不命中 */
|
|
82
92
|
[data-scope='file-upload'][data-part='dropzone'][data-disabled] {
|
|
83
|
-
border-color: var(--xh-border-
|
|
93
|
+
border-color: var(--xh-border-default);
|
|
84
94
|
background: var(--xh-file-upload-dropzone-bg-disabled, var(--xh-bg-subtle));
|
|
85
95
|
color: var(--xh-fg-disabled);
|
|
86
|
-
cursor: not-allowed;
|
|
87
96
|
}
|
|
88
97
|
|
|
89
98
|
[data-scope='file-upload'][data-part='trigger'] {
|
|
@@ -103,26 +112,35 @@
|
|
|
103
112
|
font-size: var(--xh-file-upload-trigger-font-size, var(--xh-text-body-size));
|
|
104
113
|
line-height: var(--xh-leading-none);
|
|
105
114
|
cursor: pointer;
|
|
115
|
+
transition:
|
|
116
|
+
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
117
|
+
box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
118
|
+
scale var(--xh-motion-duration-release) var(--xh-motion-ease-release);
|
|
106
119
|
}
|
|
107
120
|
|
|
108
121
|
[data-scope='file-upload'][data-part='trigger'][hidden] {
|
|
109
122
|
display: none;
|
|
110
123
|
}
|
|
111
124
|
|
|
125
|
+
/* 悬停换底色的同时把这块面抬起一档:只换底色的回执在一颗按钮上太轻 */
|
|
112
126
|
[data-scope='file-upload'][data-part='trigger']:hover:not(:disabled) {
|
|
113
127
|
background: var(--xh-file-upload-trigger-bg-hover, var(--xh-bg-subtle-hover));
|
|
128
|
+
box-shadow: var(--xh-file-upload-trigger-shadow-hover, var(--xh-elevation-raised));
|
|
114
129
|
}
|
|
115
130
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
131
|
+
/* 按下:换到按压档底色并轻微下压,抬起的那一档同时落回,松手弹回;禁用钮不压 */
|
|
132
|
+
[data-scope='file-upload'][data-part='trigger']:not(:disabled):is(:active, [data-pressed]) {
|
|
133
|
+
background: var(--xh-file-upload-trigger-bg-active, var(--xh-bg-subtle-active));
|
|
134
|
+
box-shadow: none;
|
|
135
|
+
scale: var(--xh-motion-scale-press);
|
|
136
|
+
transition-duration: var(--xh-motion-duration-press);
|
|
137
|
+
transition-timing-function: var(--xh-motion-ease-press);
|
|
119
138
|
}
|
|
120
139
|
|
|
121
140
|
/* 单体控件走原生 disabled(与集合条目的 aria-disabled 相反),因此用 :disabled */
|
|
122
141
|
[data-scope='file-upload'][data-part='trigger']:disabled {
|
|
123
142
|
background: var(--xh-bg-subtle);
|
|
124
143
|
color: var(--xh-fg-disabled);
|
|
125
|
-
cursor: not-allowed;
|
|
126
144
|
}
|
|
127
145
|
|
|
128
146
|
/* 连接层已经把这一套视觉隐藏写进了内联 style,这里是给元素升级前那一瞬兜底
|
|
@@ -140,23 +158,34 @@
|
|
|
140
158
|
white-space: nowrap;
|
|
141
159
|
}
|
|
142
160
|
|
|
143
|
-
|
|
161
|
+
/* 文件条数由用户一次选进来多少给,行数没有尽头:
|
|
162
|
+
列表到这个高度就不再长,剩下的行在列表内滚出来,投放区与触发钮不会被推出视野 */
|
|
163
|
+
[data-scope='file-upload'][data-part='list'] {
|
|
144
164
|
display: flex;
|
|
165
|
+
max-block-size: var(--xh-file-upload-list-max-h, var(--xh-viewport-h-md));
|
|
166
|
+
overflow-y: auto;
|
|
145
167
|
flex-direction: column;
|
|
146
168
|
gap: var(--xh-file-upload-item-gap, var(--xh-space-2));
|
|
147
169
|
}
|
|
148
170
|
|
|
149
|
-
[data-scope='file-upload'][data-part='
|
|
171
|
+
[data-scope='file-upload'][data-part='list'][hidden] {
|
|
150
172
|
display: none;
|
|
151
173
|
}
|
|
152
174
|
|
|
175
|
+
/* 私有槽一个:传输进度的 0..1 比例,由连接层写进进度条的内联样式,
|
|
176
|
+
这里给个 0 的缺省——没接上传器时进度条根本不露面,也就没有宽度可算。 */
|
|
153
177
|
[data-scope='file-upload'][data-part='item'] {
|
|
178
|
+
--xh-_file-upload-progress: 0;
|
|
179
|
+
|
|
154
180
|
display: flex;
|
|
181
|
+
/* 一行排不下就换行:文件名有自己的下限,挤到那个下限之后由后面的部件另起一行,
|
|
182
|
+
而不是把文件名继续压到零宽 */
|
|
183
|
+
flex-wrap: wrap;
|
|
155
184
|
align-items: center;
|
|
156
185
|
gap: var(--xh-file-upload-item-inner-gap, var(--xh-control-gap-md));
|
|
157
186
|
padding-block: var(--xh-file-upload-item-py, var(--xh-space-2));
|
|
158
187
|
padding-inline: var(--xh-file-upload-item-px, var(--xh-space-3));
|
|
159
|
-
border: var(--xh-stroke-thin) solid var(--xh-file-upload-item-border, var(--xh-border-
|
|
188
|
+
border: var(--xh-stroke-thin) solid var(--xh-file-upload-item-border, var(--xh-border-default));
|
|
160
189
|
border-radius: var(--xh-file-upload-item-radius, var(--xh-shape-control));
|
|
161
190
|
background: var(--xh-file-upload-item-bg, var(--xh-bg-surface));
|
|
162
191
|
color: var(--xh-file-upload-item-fg, var(--xh-fg-default));
|
|
@@ -171,6 +200,69 @@
|
|
|
171
200
|
color: var(--xh-fg-disabled);
|
|
172
201
|
}
|
|
173
202
|
|
|
203
|
+
/* 上传失败的那一行必须一眼认出来:不标出来的话它跟传完的行渲染完全一致,
|
|
204
|
+
用户不知道该按哪一条的重试。红边之外再补一枚警示字形——只靠颜色的话,
|
|
205
|
+
色觉障碍用户与灰度打印下这一档等于没有。
|
|
206
|
+
警示与下面的勾都是固定状态标记(不是 :empty 兜底,作者塞进条目的部件顶不掉):按指示符档取尺
|
|
207
|
+
(comfortable 16 / compact 14,随密度换档),不读只管作者图标的 --xh-icon-size——随文 1em 落在
|
|
208
|
+
14 上下,comfortable 下比同一行里的指示符档小一圈、compact 下又不换档 */
|
|
209
|
+
[data-scope='file-upload'][data-part='item'][data-state='error'] {
|
|
210
|
+
border-color: var(--xh-file-upload-item-border-error, var(--xh-border-invalid));
|
|
211
|
+
color: var(--xh-file-upload-item-fg-error, var(--xh-fg-danger));
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
[data-scope='file-upload'][data-part='item'][data-state='error']::before {
|
|
215
|
+
content: '';
|
|
216
|
+
flex: none;
|
|
217
|
+
inline-size: var(--xh-file-upload-item-mark-size, var(--xh-control-indicator-size));
|
|
218
|
+
block-size: var(--xh-file-upload-item-mark-size, var(--xh-control-indicator-size));
|
|
219
|
+
background-color: currentColor;
|
|
220
|
+
-webkit-mask: var(--xh-glyph-mark-warning) center / contain no-repeat;
|
|
221
|
+
mask: var(--xh-glyph-mark-warning) center / contain no-repeat;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* 传完的那一行补一枚对勾,与失败那一枚警示字形对称:
|
|
225
|
+
不标出来的话「传完了」与「还没开始」在这一行上看不出分别 */
|
|
226
|
+
[data-scope='file-upload'][data-part='item'][data-state='done']::before {
|
|
227
|
+
content: '';
|
|
228
|
+
flex: none;
|
|
229
|
+
inline-size: var(--xh-file-upload-item-mark-size, var(--xh-control-indicator-size));
|
|
230
|
+
block-size: var(--xh-file-upload-item-mark-size, var(--xh-control-indicator-size));
|
|
231
|
+
background-color: var(--xh-file-upload-item-fg-done, var(--xh-fg-success));
|
|
232
|
+
-webkit-mask: var(--xh-glyph-mark-check) center / contain no-repeat;
|
|
233
|
+
mask: var(--xh-glyph-mark-check) center / contain no-repeat;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/* 传输进度条:只在传输中露面,宽度按连接层写下的比例走。
|
|
237
|
+
进度是连续量,走 continuous 曲线,不是入场曲线 */
|
|
238
|
+
[data-scope='file-upload'][data-part='item-progress'] {
|
|
239
|
+
display: none;
|
|
240
|
+
overflow: hidden;
|
|
241
|
+
flex: none;
|
|
242
|
+
inline-size: var(--xh-file-upload-item-progress-w, calc(var(--xh-control-h-md) * 2));
|
|
243
|
+
block-size: var(--xh-file-upload-item-progress-h, var(--xh-stroke-thick));
|
|
244
|
+
border-radius: var(--xh-file-upload-item-progress-radius, var(--xh-shape-pill));
|
|
245
|
+
background: var(--xh-file-upload-item-progress-track, var(--xh-bg-subtle));
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
[data-scope='file-upload'][data-part='item-progress'][data-state='uploading'] {
|
|
249
|
+
display: block;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
[data-scope='file-upload'][data-part='item-progress'][data-state='uploading']::before {
|
|
253
|
+
content: '';
|
|
254
|
+
display: block;
|
|
255
|
+
block-size: 100%;
|
|
256
|
+
border-radius: inherit;
|
|
257
|
+
background: var(--xh-file-upload-item-progress-fill, var(--xh-bg-brand));
|
|
258
|
+
inline-size: calc(var(--xh-_file-upload-progress, 0) * 100%);
|
|
259
|
+
transition: inline-size var(--xh-motion-duration-micro) var(--xh-motion-ease-continuous);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
[data-scope='file-upload'][data-part='item-progress'][hidden] {
|
|
263
|
+
display: none;
|
|
264
|
+
}
|
|
265
|
+
|
|
174
266
|
/* 缩略图占位:作者往里塞图标或真缩略图,尺寸由这里定死,一行行的图标才对得齐 */
|
|
175
267
|
[data-scope='file-upload'][data-part='item-preview'] {
|
|
176
268
|
display: inline-flex;
|
|
@@ -203,11 +295,12 @@
|
|
|
203
295
|
object-fit: cover;
|
|
204
296
|
}
|
|
205
297
|
|
|
206
|
-
/*
|
|
207
|
-
|
|
298
|
+
/* 文件名占满中间那段并用省略号收口。
|
|
299
|
+
下限是这一行的换行点:名字缩到这个宽度还不够,后面的部件就被推去下一行;
|
|
300
|
+
再用 100% 收一次口——容器比这个下限还窄时,名字只占满容器,不把整行顶宽 */
|
|
208
301
|
[data-scope='file-upload'][data-part='item-name'] {
|
|
209
302
|
flex: 1;
|
|
210
|
-
min-inline-size:
|
|
303
|
+
min-inline-size: min(var(--xh-file-upload-item-name-min-w, var(--xh-control-min-w)), 100%);
|
|
211
304
|
overflow: hidden;
|
|
212
305
|
white-space: nowrap;
|
|
213
306
|
text-overflow: ellipsis;
|
|
@@ -245,7 +338,7 @@
|
|
|
245
338
|
cursor: pointer;
|
|
246
339
|
transition:
|
|
247
340
|
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
248
|
-
scale var(--xh-motion-duration-
|
|
341
|
+
scale var(--xh-motion-duration-release) var(--xh-motion-ease-release);
|
|
249
342
|
}
|
|
250
343
|
|
|
251
344
|
[data-scope='file-upload'][data-part='item-delete-trigger'][hidden] {
|
|
@@ -258,19 +351,15 @@
|
|
|
258
351
|
}
|
|
259
352
|
|
|
260
353
|
/* 按下:换到按压档底色并轻微下压,松手弹回;禁用钮不压 */
|
|
261
|
-
[data-scope='file-upload'][data-part='item-delete-trigger']:not(:disabled):active {
|
|
354
|
+
[data-scope='file-upload'][data-part='item-delete-trigger']:not(:disabled):is(:active, [data-pressed]) {
|
|
262
355
|
background: var(--xh-file-upload-delete-bg-active, var(--xh-bg-subtle-active));
|
|
263
356
|
scale: var(--xh-motion-scale-press);
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
[data-scope='file-upload'][data-part='item-delete-trigger']:focus-visible {
|
|
267
|
-
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
268
|
-
outline-offset: var(--xh-ring-offset);
|
|
357
|
+
transition-duration: var(--xh-motion-duration-press);
|
|
358
|
+
transition-timing-function: var(--xh-motion-ease-press);
|
|
269
359
|
}
|
|
270
360
|
|
|
271
361
|
[data-scope='file-upload'][data-part='item-delete-trigger']:disabled {
|
|
272
362
|
color: var(--xh-fg-disabled);
|
|
273
|
-
cursor: not-allowed;
|
|
274
363
|
}
|
|
275
364
|
|
|
276
365
|
/* 清空是收尾动作,画成不带底色的文字按钮:它比"选择文件"次要 */
|
|
@@ -293,7 +382,7 @@
|
|
|
293
382
|
cursor: pointer;
|
|
294
383
|
transition:
|
|
295
384
|
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
296
|
-
scale var(--xh-motion-duration-
|
|
385
|
+
scale var(--xh-motion-duration-release) var(--xh-motion-ease-release);
|
|
297
386
|
}
|
|
298
387
|
|
|
299
388
|
[data-scope='file-upload'][data-part='clear-trigger'][hidden] {
|
|
@@ -306,14 +395,11 @@
|
|
|
306
395
|
}
|
|
307
396
|
|
|
308
397
|
/* 按下:换到按压档底色并轻微下压,松手弹回;禁用钮不压 */
|
|
309
|
-
[data-scope='file-upload'][data-part='clear-trigger']:not(:disabled):active {
|
|
398
|
+
[data-scope='file-upload'][data-part='clear-trigger']:not(:disabled):is(:active, [data-pressed]) {
|
|
310
399
|
background: var(--xh-file-upload-clear-bg-active, var(--xh-bg-subtle-active));
|
|
311
400
|
scale: var(--xh-motion-scale-press);
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
[data-scope='file-upload'][data-part='clear-trigger']:focus-visible {
|
|
315
|
-
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
316
|
-
outline-offset: var(--xh-ring-offset);
|
|
401
|
+
transition-duration: var(--xh-motion-duration-press);
|
|
402
|
+
transition-timing-function: var(--xh-motion-ease-press);
|
|
317
403
|
}
|
|
318
404
|
|
|
319
405
|
/* 空列表时按钮照常可按(收起它会让焦点掉回 body),只把前景压淡一档 */
|
|
@@ -323,7 +409,19 @@
|
|
|
323
409
|
|
|
324
410
|
[data-scope='file-upload'][data-part='clear-trigger']:disabled {
|
|
325
411
|
color: var(--xh-fg-disabled);
|
|
326
|
-
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/*
|
|
415
|
+
* 高对比档:三颗钮的按压面常态靠换底表出,这一档里底色被统一换成 Canvas,按住那一下与静息塌成同一个样子;
|
|
416
|
+
* 用系统高亮反色画回来,兜底字形读 currentColor、自己跟着换
|
|
417
|
+
*/
|
|
418
|
+
@media (forced-colors: active) {
|
|
419
|
+
[data-scope='file-upload'][data-part='trigger']:not(:disabled):is(:active, [data-pressed]),
|
|
420
|
+
[data-scope='file-upload'][data-part='item-delete-trigger']:not(:disabled):is(:active, [data-pressed]),
|
|
421
|
+
[data-scope='file-upload'][data-part='clear-trigger']:not(:disabled):is(:active, [data-pressed]) {
|
|
422
|
+
background: Highlight;
|
|
423
|
+
color: HighlightText;
|
|
424
|
+
}
|
|
327
425
|
}
|
|
328
426
|
|
|
329
427
|
/* 没写内容就由皮肤画兜底字形;作者往部件里塞了自己的图形,这几条即不命中 */
|
package/css/flex.css
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
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
|
+
/* 定义 flex 样式。 */
|
|
7
|
+
|
|
1
8
|
@layer xihan.components {
|
|
2
9
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
3
10
|
[data-scope='flex'] {
|
|
@@ -16,13 +23,24 @@
|
|
|
16
23
|
display: inline-flex;
|
|
17
24
|
}
|
|
18
25
|
|
|
19
|
-
/*
|
|
26
|
+
/* 分隔符:夹在两个子项之间的装饰件,样子由放进去的内容决定。
|
|
27
|
+
这里只兜住两件事——不被主轴挤扁(一条 1px 的竖线会被弹性收缩吃没),
|
|
28
|
+
交叉轴上不单独发话,跟着容器的对齐走:横排随中线、竖排随拉伸 */
|
|
29
|
+
[data-scope='flex'][data-part='split'] {
|
|
30
|
+
flex: none;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* —— 方向与缺省对齐 —— */
|
|
34
|
+
/* 横排时按中线对齐:一排里混着文字、按钮、标签,高度本就不齐,居中最不容易看出错位 */
|
|
20
35
|
[data-scope='flex'][data-part='root'][data-orientation='horizontal'] {
|
|
21
36
|
flex-direction: row;
|
|
37
|
+
align-items: center;
|
|
22
38
|
}
|
|
23
39
|
|
|
40
|
+
/* 竖排时拉伸:一列里的块级子项该占满容器宽度 */
|
|
24
41
|
[data-scope='flex'][data-part='root'][data-orientation='vertical'] {
|
|
25
42
|
flex-direction: column;
|
|
43
|
+
align-items: stretch;
|
|
26
44
|
}
|
|
27
45
|
|
|
28
46
|
/* —— 折行 —— */
|
|
@@ -31,6 +49,7 @@
|
|
|
31
49
|
}
|
|
32
50
|
|
|
33
51
|
/* —— 交叉轴对齐 —— */
|
|
52
|
+
/* 排在方向之后:两者特指度相同,写了 align 就该压过随方向来的那份缺省 */
|
|
34
53
|
[data-scope='flex'][data-part='root'][data-align='start'] {
|
|
35
54
|
align-items: flex-start;
|
|
36
55
|
}
|