@xihan-ui/styles 2.1.0 → 3.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 +1227 -0
- package/README.md +6 -1
- package/component-tokens.d.ts +505 -96
- package/components.tokens.json +34636 -25846
- 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 +55 -58
- 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 +23 -0
- package/css/date-picker.css +57 -22
- package/css/date-range-picker.css +301 -12
- 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 +16 -18
- package/css/file-upload.css +125 -135
- package/css/flex.css +324 -8
- package/css/float-button.css +165 -38
- package/css/floating-panel.css +53 -19
- package/css/form.css +23 -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 +429 -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 +158 -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 +44 -15
- 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 +201 -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 +22997 -13678
- package/index.unlayered.css +12928 -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/icon.css
CHANGED
|
@@ -122,4 +122,104 @@
|
|
|
122
122
|
[data-scope='icon'][data-part='root'][data-flip='both'] {
|
|
123
123
|
scale: -1 -1;
|
|
124
124
|
}
|
|
125
|
+
|
|
126
|
+
/* —— 底框 —— */
|
|
127
|
+
/*
|
|
128
|
+
* 加了框的图标是一个定直径的圆底座:框画在 <svg> 自己的盒上,图元落在内容盒里居中。
|
|
129
|
+
* sm / md / lg 三档框与头像同档(取同一支控件高度令牌),图元按自己的档位取字形直径,
|
|
130
|
+
* 内衬由两者之差算出,框换档时图元跟着一起换。
|
|
131
|
+
* 框里的图元不读外层统一图元直径的通道 --xh-icon-size:框自己就是一个定尺对象,
|
|
132
|
+
* 落在按钮、提示条这类下发图元直径的容器里也不被改小。
|
|
133
|
+
* 排在档位与语气之后:框接管了盒的尺寸与配色。
|
|
134
|
+
*/
|
|
135
|
+
[data-scope='icon'][data-part='root'][data-frame] {
|
|
136
|
+
/* 三档之外的档位经两支 step 槽给出字形直径与框直径,三档本身在下面的档位块里换 */
|
|
137
|
+
--xh-_icon-glyph: var(--xh-icon-frame-glyph-size, var(--xh-_icon-glyph-step, var(--xh-glyph-size-md)));
|
|
138
|
+
--xh-_icon-frame-size: var(--xh-icon-frame-size, var(--xh-_icon-frame-step, var(--xh-control-h-md)));
|
|
139
|
+
|
|
140
|
+
inline-size: var(--xh-_icon-frame-size);
|
|
141
|
+
block-size: var(--xh-_icon-frame-size);
|
|
142
|
+
padding: calc((var(--xh-_icon-frame-size) - var(--xh-_icon-glyph)) / 2 - var(--xh-stroke-thin));
|
|
143
|
+
border: var(--xh-stroke-thin) solid transparent;
|
|
144
|
+
border-radius: var(--xh-icon-frame-radius, var(--xh-shape-circle));
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
[data-scope='icon'][data-part='root'][data-frame][data-size='sm'] {
|
|
148
|
+
--xh-_icon-glyph: var(--xh-icon-frame-glyph-size, var(--xh-glyph-size-sm));
|
|
149
|
+
--xh-_icon-frame-size: var(--xh-icon-frame-size, var(--xh-control-h-sm));
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
[data-scope='icon'][data-part='root'][data-frame][data-size='lg'] {
|
|
153
|
+
--xh-_icon-glyph: var(--xh-icon-frame-glyph-size, var(--xh-glyph-size-lg));
|
|
154
|
+
--xh-_icon-frame-size: var(--xh-icon-frame-size, var(--xh-control-h-lg));
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* 头像只有三档;其余档的框沿用 md 档的内衬厚度:框直径 = 本档字形 + md 档框与字形之差 */
|
|
158
|
+
[data-scope='icon'][data-part='root'][data-frame][data-size='text'] {
|
|
159
|
+
--xh-_icon-glyph-step: var(--xh-glyph-size-text);
|
|
160
|
+
--xh-_icon-frame-step: calc(var(--xh-glyph-size-text) + var(--xh-control-h-md) - var(--xh-glyph-size-md));
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
[data-scope='icon'][data-part='root'][data-frame][data-size='xl'] {
|
|
164
|
+
--xh-_icon-glyph-step: var(--xh-glyph-size-xl);
|
|
165
|
+
--xh-_icon-frame-step: calc(var(--xh-glyph-size-xl) + var(--xh-control-h-md) - var(--xh-glyph-size-md));
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
[data-scope='icon'][data-part='root'][data-frame][data-size='2xl'] {
|
|
169
|
+
--xh-_icon-glyph-step: var(--xh-glyph-size-2xl);
|
|
170
|
+
--xh-_icon-frame-step: calc(var(--xh-glyph-size-2xl) + var(--xh-control-h-md) - var(--xh-glyph-size-md));
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
[data-scope='icon'][data-part='root'][data-frame][data-size='3xl'] {
|
|
174
|
+
--xh-_icon-glyph-step: var(--xh-glyph-size-3xl);
|
|
175
|
+
--xh-_icon-frame-step: calc(var(--xh-glyph-size-3xl) + var(--xh-control-h-md) - var(--xh-glyph-size-md));
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
[data-scope='icon'][data-part='root'][data-frame][data-size='4xl'] {
|
|
179
|
+
--xh-_icon-glyph-step: var(--xh-glyph-size-4xl);
|
|
180
|
+
--xh-_icon-frame-step: calc(var(--xh-glyph-size-4xl) + var(--xh-control-h-md) - var(--xh-glyph-size-md));
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* 框的四种形态只决定颜色怎么用;用哪族颜色由 data-tone 决定,没写语气取品牌实心 / 中性。
|
|
184
|
+
语气只认自己身上的 data-tone:语气槽会沿继承流下来,放在语气容器里的框不跟着改色。
|
|
185
|
+
实心档在顶边画一条极浅的内高光,把这块底座衬出厚度;另外三档面上没有实心底,不画 */
|
|
186
|
+
[data-scope='icon'][data-part='root'][data-frame='solid'] {
|
|
187
|
+
background: var(--xh-icon-frame-bg, var(--xh-bg-brand));
|
|
188
|
+
box-shadow: var(--xh-icon-frame-shadow, var(--xh-_highlight-brand));
|
|
189
|
+
color: var(--xh-icon-fg, var(--xh-fg-on-brand));
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
[data-scope='icon'][data-part='root'][data-frame='solid'][data-tone] {
|
|
193
|
+
background: var(--xh-icon-frame-bg, var(--xh-_tone));
|
|
194
|
+
box-shadow: var(--xh-icon-frame-shadow, var(--xh-_highlight-tone));
|
|
195
|
+
color: var(--xh-icon-fg, var(--xh-_tone-on));
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
[data-scope='icon'][data-part='root'][data-frame='subtle'] {
|
|
199
|
+
background: var(--xh-icon-frame-bg, var(--xh-bg-subtle));
|
|
200
|
+
color: var(--xh-icon-fg, var(--xh-fg-default));
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
[data-scope='icon'][data-part='root'][data-frame='subtle'][data-tone] {
|
|
204
|
+
background: var(--xh-icon-frame-bg, var(--xh-_tone-subtle));
|
|
205
|
+
color: var(--xh-icon-fg, var(--xh-_tone-fg));
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
[data-scope='icon'][data-part='root'][data-frame='outline'] {
|
|
209
|
+
border-color: var(--xh-icon-frame-border, var(--xh-border-default));
|
|
210
|
+
color: var(--xh-icon-fg, var(--xh-fg-default));
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
[data-scope='icon'][data-part='root'][data-frame='outline'][data-tone] {
|
|
214
|
+
border-color: var(--xh-icon-frame-border, var(--xh-_tone-border));
|
|
215
|
+
color: var(--xh-icon-fg, var(--xh-_tone-fg));
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
[data-scope='icon'][data-part='root'][data-frame='ghost'] {
|
|
219
|
+
color: var(--xh-icon-fg, var(--xh-fg-default));
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
[data-scope='icon'][data-part='root'][data-frame='ghost'][data-tone] {
|
|
223
|
+
color: var(--xh-icon-fg, var(--xh-_tone-fg));
|
|
224
|
+
}
|
|
125
225
|
}
|
package/css/image-cropper.css
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
/* 定义 image cropper 样式。 */
|
|
7
7
|
|
|
8
|
+
@import '../family/action-control.css';
|
|
9
|
+
|
|
8
10
|
@layer xihan.components {
|
|
9
11
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
10
12
|
[data-scope='image-cropper'] {
|
|
@@ -90,17 +92,17 @@
|
|
|
90
92
|
linear-gradient(
|
|
91
93
|
to right,
|
|
92
94
|
transparent 0 33.3333%,
|
|
93
|
-
var(--xh-image-cropper-grid-line, var(--xh-
|
|
95
|
+
var(--xh-image-cropper-grid-line, var(--xh-bg-subtle-opaque)) 33.3333% calc(33.3333% + var(--xh-_image-cropper-grid-w)),
|
|
94
96
|
transparent calc(33.3333% + var(--xh-_image-cropper-grid-w)) 66.6667%,
|
|
95
|
-
var(--xh-image-cropper-grid-line, var(--xh-
|
|
97
|
+
var(--xh-image-cropper-grid-line, var(--xh-bg-subtle-opaque)) 66.6667% calc(66.6667% + var(--xh-_image-cropper-grid-w)),
|
|
96
98
|
transparent calc(66.6667% + var(--xh-_image-cropper-grid-w)) 100%
|
|
97
99
|
),
|
|
98
100
|
linear-gradient(
|
|
99
101
|
to bottom,
|
|
100
102
|
transparent 0 33.3333%,
|
|
101
|
-
var(--xh-image-cropper-grid-line, var(--xh-
|
|
103
|
+
var(--xh-image-cropper-grid-line, var(--xh-bg-subtle-opaque)) 33.3333% calc(33.3333% + var(--xh-_image-cropper-grid-w)),
|
|
102
104
|
transparent calc(33.3333% + var(--xh-_image-cropper-grid-w)) 66.6667%,
|
|
103
|
-
var(--xh-image-cropper-grid-line, var(--xh-
|
|
105
|
+
var(--xh-image-cropper-grid-line, var(--xh-bg-subtle-opaque)) 66.6667% calc(66.6667% + var(--xh-_image-cropper-grid-w)),
|
|
104
106
|
transparent calc(66.6667% + var(--xh-_image-cropper-grid-w)) 100%
|
|
105
107
|
);
|
|
106
108
|
pointer-events: none;
|
|
@@ -133,7 +135,7 @@
|
|
|
133
135
|
background: var(--xh-_image-cropper-handle-color);
|
|
134
136
|
pointer-events: none;
|
|
135
137
|
transition:
|
|
136
|
-
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
138
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
137
139
|
border-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
138
140
|
}
|
|
139
141
|
|
|
@@ -145,9 +147,10 @@
|
|
|
145
147
|
content: '';
|
|
146
148
|
}
|
|
147
149
|
|
|
148
|
-
/* 把手静息是白面(bg-surface
|
|
150
|
+
/* 把手静息是白面(bg-surface),悬停从同一语义面派生一档,不切到品牌淡底;拖动中才是品牌实心。
|
|
151
|
+
把手与网格线都压在照片上,取淡底的不透明档,照片深浅不一时才看得见 */
|
|
149
152
|
[data-scope='image-cropper'][data-part='crop-handle']:hover:not([data-disabled], [data-readonly]) {
|
|
150
|
-
--xh-_image-cropper-handle-color: var(--xh-image-cropper-handle-bg-hover, var(--xh-bg-subtle));
|
|
153
|
+
--xh-_image-cropper-handle-color: var(--xh-image-cropper-handle-bg-hover, var(--xh-bg-subtle-opaque));
|
|
151
154
|
}
|
|
152
155
|
|
|
153
156
|
[data-scope='image-cropper'][data-part='crop-handle'][data-resizing] {
|
|
@@ -327,6 +330,29 @@
|
|
|
327
330
|
accent-color: var(--xh-image-cropper-slider-accent, var(--xh-bg-brand));
|
|
328
331
|
}
|
|
329
332
|
|
|
333
|
+
/*
|
|
334
|
+
* 翻转按钮是裁切器旁的独立开关钮:盒型、sm 档几何、outline 四态面、0.97 按压与粗指针命中区由家族配方
|
|
335
|
+
* 按连接层投影的 data-xh-action-* 给出。翻着(data-state='on')是无滑块开关的选中面:品牌淡底 12 → 悬停 20
|
|
336
|
+
* → 按压 28,前景 fg-on-brand-subtle;outline 的描边不换,淡底面上没有描边就与悬停面分不开。
|
|
337
|
+
*/
|
|
338
|
+
[data-scope='image-cropper'][data-part='flip-trigger'] {
|
|
339
|
+
/* 作者塞进来的图标随档取字形尺(sm = 16px) */
|
|
340
|
+
--xh-icon-size: var(--xh-_action-profile-glyph-size);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
[data-scope='image-cropper'][data-part='flip-trigger'][data-state='on'] {
|
|
344
|
+
--xh-action-bg-rest: var(--xh-bg-brand-subtle);
|
|
345
|
+
--xh-action-bg-hover: var(--xh-bg-brand-subtle-hover);
|
|
346
|
+
--xh-action-bg-pressed: var(--xh-bg-brand-subtle-active);
|
|
347
|
+
--xh-action-bg-focus-visible: var(--xh-bg-brand-subtle);
|
|
348
|
+
/* 翻着又被禁用:底色掺一半中性面,选中信息不丢。掺的是淡底的不透明档,墨色淡底半透明 */
|
|
349
|
+
--xh-action-bg-disabled: color-mix(in oklab, var(--xh-bg-brand-subtle) 50%, var(--xh-bg-subtle-opaque));
|
|
350
|
+
--xh-action-fg-rest: var(--xh-fg-on-brand-subtle);
|
|
351
|
+
--xh-action-fg-hover: var(--xh-fg-on-brand-subtle);
|
|
352
|
+
--xh-action-fg-pressed: var(--xh-fg-on-brand-subtle);
|
|
353
|
+
--xh-action-fg-focus-visible: var(--xh-fg-on-brand-subtle);
|
|
354
|
+
}
|
|
355
|
+
|
|
330
356
|
/* 禁用的整体压暗只做一次,落在最外层:视口、裁切框、把手各自再叠一层会越叠越黑。
|
|
331
357
|
这里只用 opacity、不换前景色:框里是图像,没有文字可换。 */
|
|
332
358
|
[data-scope='image-cropper'][data-part='root'][data-disabled] {
|
package/css/image-viewer.css
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
/* 定义 image viewer 样式。 */
|
|
7
7
|
|
|
8
8
|
@import '../family/action-control.css';
|
|
9
|
+
@import '../family/loading-ring.css';
|
|
9
10
|
|
|
10
11
|
/* 共享关键帧由 family/motion.css 提供,本皮肤 @import 它,单独引入仍成立。 */
|
|
11
12
|
@import '../family/motion.css';
|
|
@@ -35,7 +36,7 @@
|
|
|
35
36
|
background: transparent;
|
|
36
37
|
}
|
|
37
38
|
|
|
38
|
-
[data-scope='image-viewer'][data-part='backdrop'][data-state='open'] {
|
|
39
|
+
[data-scope='image-viewer'][data-part='backdrop'][data-state='open']:not([data-instant]) {
|
|
39
40
|
animation: xh-fade-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter);
|
|
40
41
|
}
|
|
41
42
|
|
|
@@ -75,7 +76,8 @@
|
|
|
75
76
|
color: var(--xh-image-viewer-fg, var(--xh-color-neutral-0));
|
|
76
77
|
}
|
|
77
78
|
|
|
78
|
-
|
|
79
|
+
/* 挂载时就开着的那一段(data-instant)属于首帧,直接呈现 */
|
|
80
|
+
[data-scope='image-viewer'][data-part='content'][data-state='open']:not([data-instant]) {
|
|
79
81
|
animation: xh-fade-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter);
|
|
80
82
|
}
|
|
81
83
|
|
|
@@ -104,29 +106,67 @@
|
|
|
104
106
|
cursor: progress;
|
|
105
107
|
}
|
|
106
108
|
|
|
107
|
-
/*
|
|
108
|
-
|
|
109
|
-
|
|
109
|
+
/* 取图期间画面正中一枚加载环:不给的话打开一张几 MB 的原图,台前是一整块什么都没有的暗底,
|
|
110
|
+
用户分不清是在加载还是这张图坏了。环由加载环配方画(连接层投影 data-xh-loading-ring),
|
|
111
|
+
随 data-loading 淡入淡出;前景随看片层的白墨域 */
|
|
112
|
+
[data-scope='image-viewer'][data-part='viewport'] {
|
|
113
|
+
/* 画面正中那两枚状态图形(加载环与警示字形)的尺:看片台是整幅画面,取控件图标档的最大一档 */
|
|
114
|
+
--xh-icon-size: var(--xh-image-viewer-status-size, var(--xh-glyph-size-lg));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
[data-scope='image-viewer'][data-part='viewport']::before {
|
|
118
|
+
content: '';
|
|
119
|
+
position: absolute;
|
|
120
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-md));
|
|
121
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-md));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* 取图失败:画面正中一枚警示字形(取危险色,非颜色通道),替掉浏览器画的破图与替代文字 */
|
|
125
|
+
[data-scope='image-viewer'][data-part='viewport'][data-error]::after {
|
|
110
126
|
content: '';
|
|
111
127
|
position: absolute;
|
|
112
|
-
inline-size: var(--xh-
|
|
113
|
-
block-size: var(--xh-
|
|
114
|
-
|
|
115
|
-
|
|
128
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-md));
|
|
129
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-md));
|
|
130
|
+
background-color: var(--xh-image-viewer-error-fg, var(--xh-fg-danger));
|
|
131
|
+
-webkit-mask: var(--xh-glyph-mark-warning) center / contain no-repeat;
|
|
132
|
+
mask: var(--xh-glyph-mark-warning) center / contain no-repeat;
|
|
116
133
|
}
|
|
117
134
|
|
|
118
135
|
[data-scope='image-viewer'][data-part='image'] {
|
|
119
136
|
max-inline-size: 90%;
|
|
120
137
|
max-block-size: 85%;
|
|
121
138
|
user-select: none;
|
|
122
|
-
/*
|
|
123
|
-
|
|
139
|
+
/* 位移、旋转与缩放都是内联 style 写的,只给按钮带来的缩放旋转一点缓动;拖拽平移要跟手,不缓。
|
|
140
|
+
新图取到之后淡入 */
|
|
141
|
+
transition:
|
|
142
|
+
translate var(--xh-motion-duration-nudge) var(--xh-motion-ease-continuous),
|
|
143
|
+
rotate var(--xh-motion-duration-nudge) var(--xh-motion-ease-continuous),
|
|
144
|
+
scale var(--xh-motion-duration-nudge) var(--xh-motion-ease-continuous),
|
|
145
|
+
opacity var(--xh-motion-duration-enter) var(--xh-motion-ease-enter);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* 取图期间(打开与换下标):换图那一刻变换直接归位、不补间——转过、放大过的旧图不当着用户转回、缩回;
|
|
149
|
+
旧图随即让位,视口垫着的占位面顶上,不露底色闪一拍。取到之后撤掉这一档,按上面的进场档淡入 */
|
|
150
|
+
[data-scope='image-viewer'][data-part='image'][data-loading] {
|
|
151
|
+
opacity: 0;
|
|
152
|
+
transition: none;
|
|
124
153
|
}
|
|
125
154
|
|
|
126
|
-
/*
|
|
155
|
+
/* 载不出来的图不露浏览器的破图:整张让位给视口正中的警示字形,替代文字仍在可及树里 */
|
|
156
|
+
[data-scope='image-viewer'][data-part='image'][data-error] {
|
|
157
|
+
visibility: hidden;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* 拖拽期间平移每帧都在改:只在这一档备好合成层,松手后随 data-dragging 一起撤掉 */
|
|
127
161
|
[data-scope='image-viewer'][data-part='image'][data-dragging] {
|
|
128
162
|
transition: none;
|
|
129
|
-
will-change:
|
|
163
|
+
will-change: translate;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* 松手后弹簧带着平移惯性滑行、越出范围时回弹,同样逐帧写变换,不能再叠一层过渡;落定即撤 */
|
|
167
|
+
[data-scope='image-viewer'][data-part='image'][data-animating] {
|
|
168
|
+
transition: none;
|
|
169
|
+
will-change: translate;
|
|
130
170
|
}
|
|
131
171
|
|
|
132
172
|
/* —— 悬浮件共用:半透明深底加浅字 ——
|
|
@@ -155,6 +195,11 @@
|
|
|
155
195
|
border-radius: var(--xh-image-viewer-toolbar-radius-outer, var(--xh-image-viewer-overlay-radius, var(--xh-shape-surface)));
|
|
156
196
|
}
|
|
157
197
|
|
|
198
|
+
/* 起点是逻辑属性、平移是物理通道:rtl 下行内分量掉头,工具条与计数才落回中线 */
|
|
199
|
+
[data-scope='image-viewer'][data-part='toolbar']:dir(rtl) {
|
|
200
|
+
translate: 50% 0;
|
|
201
|
+
}
|
|
202
|
+
|
|
158
203
|
/* 工具条里的七颗钮:接 Action Control icon 档 xs(24px 视觉盒),底色交给工具条,本体只管命中区与按压。
|
|
159
204
|
悬停 / 按下的底从 chrome 那层深底派生,不取页面的 --xh-bg-subtle-* 阶梯。
|
|
160
205
|
position 交给配方的 relative:粗指针下 44px 命中区 ::after 以钮自身为包含块;
|
|
@@ -169,7 +214,7 @@
|
|
|
169
214
|
--xh-action-fg-hover: currentColor;
|
|
170
215
|
--xh-action-fg-pressed: currentColor;
|
|
171
216
|
--xh-action-fg-focus-visible: currentColor;
|
|
172
|
-
--xh-action-fg-disabled:
|
|
217
|
+
--xh-action-fg-disabled: var(--xh-fg-disabled);
|
|
173
218
|
--xh-action-border-rest: transparent;
|
|
174
219
|
--xh-action-border-hover: transparent;
|
|
175
220
|
--xh-action-border-pressed: transparent;
|
|
@@ -188,6 +233,10 @@
|
|
|
188
233
|
font-size: var(--xh-text-secondary-size);
|
|
189
234
|
}
|
|
190
235
|
|
|
236
|
+
[data-scope='image-viewer'][data-part='counter']:dir(rtl) {
|
|
237
|
+
translate: 50% 0;
|
|
238
|
+
}
|
|
239
|
+
|
|
191
240
|
/* 两颗翻页钮:浮在图上的单图标圆钮,接 Action Control floating 档 md(48px,正方盒取 circle)。
|
|
192
241
|
面桥接到自家深色 chrome:跟的是图上那层半透明深底不是页面底色,所以不取 frosted 缺省面,
|
|
193
242
|
也不取语义档的 --xh-bg-subtle-*;到头时是原生 disabled,压不动的东西不给回应 */
|
|
@@ -202,7 +251,7 @@
|
|
|
202
251
|
--xh-action-fg-hover: currentColor;
|
|
203
252
|
--xh-action-fg-pressed: currentColor;
|
|
204
253
|
--xh-action-fg-focus-visible: currentColor;
|
|
205
|
-
--xh-action-fg-disabled:
|
|
254
|
+
--xh-action-fg-disabled: var(--xh-fg-disabled);
|
|
206
255
|
--xh-action-border-rest: transparent;
|
|
207
256
|
--xh-action-border-hover: transparent;
|
|
208
257
|
--xh-action-border-pressed: transparent;
|
|
@@ -227,7 +276,8 @@
|
|
|
227
276
|
translate: 0 -50%;
|
|
228
277
|
}
|
|
229
278
|
|
|
230
|
-
/*
|
|
279
|
+
/* 右上角的关闭钮:悬浮在媒体上的单图标动作,与翻页钮同走 Action Control floating 档(sm = 40px、圆形);
|
|
280
|
+
面与翻页钮同一层深色 chrome */
|
|
231
281
|
[data-scope='image-viewer'][data-part='close-trigger'] {
|
|
232
282
|
--xh-action-bg-rest: var(--xh-_image-viewer-chrome-bg);
|
|
233
283
|
--xh-action-bg-hover: var(--xh-image-viewer-close-bg-hover, var(--xh-_image-viewer-chrome-bg-hover));
|
|
@@ -239,13 +289,13 @@
|
|
|
239
289
|
--xh-action-fg-hover: var(--xh-image-viewer-close-fg, currentColor);
|
|
240
290
|
--xh-action-fg-pressed: var(--xh-image-viewer-close-fg, currentColor);
|
|
241
291
|
--xh-action-fg-focus-visible: var(--xh-image-viewer-close-fg, currentColor);
|
|
242
|
-
--xh-action-fg-disabled: var(--xh-
|
|
292
|
+
--xh-action-fg-disabled: var(--xh-fg-disabled);
|
|
243
293
|
--xh-action-border-rest: transparent;
|
|
244
294
|
--xh-action-border-hover: transparent;
|
|
245
295
|
--xh-action-border-pressed: transparent;
|
|
246
296
|
--xh-action-border-focus-visible: transparent;
|
|
247
297
|
--xh-action-border-disabled: transparent;
|
|
248
|
-
--xh-action-radius: var(--xh-image-viewer-close-radius, var(--xh-shape-
|
|
298
|
+
--xh-action-radius: var(--xh-image-viewer-close-radius, var(--xh-shape-circle));
|
|
249
299
|
--xh-action-visual-size: var(--xh-image-viewer-close-size, var(--xh-_action-profile-visual-size));
|
|
250
300
|
--xh-icon-size: var(--xh-image-viewer-icon-size, var(--xh-_action-profile-glyph-size));
|
|
251
301
|
|
|
@@ -255,6 +305,80 @@
|
|
|
255
305
|
inset-inline-end: max(var(--xh-space-6), env(safe-area-inset-left), env(safe-area-inset-right));
|
|
256
306
|
}
|
|
257
307
|
|
|
308
|
+
/* liquid 档:data-material="liquid" 下控制层换成液态面,深色纱那一套只属于 standard 档。
|
|
309
|
+
液态面按下层(使用者的图片、遮罩)写墨色域,前景跟着墨色走,不再钉在浅字上。
|
|
310
|
+
工具条是不贴边的一维栏、计数是一行字的 chip,取 pill;翻页与关闭是媒体控制钮,取 circle */
|
|
311
|
+
:where([data-material='liquid']) [data-scope='image-viewer'][data-part='toolbar'][data-xh-liquid],
|
|
312
|
+
:where([data-material='liquid']) [data-scope='image-viewer'][data-part='counter'][data-xh-liquid] {
|
|
313
|
+
border: var(--xh-stroke-thin) solid var(--xh-material-liquid-border);
|
|
314
|
+
background: var(--xh-image-viewer-chrome-bg, var(--xh-_liquid-bg));
|
|
315
|
+
color: var(--xh-material-liquid-fg);
|
|
316
|
+
box-shadow: var(--xh-_liquid-shadow);
|
|
317
|
+
-webkit-backdrop-filter: var(--xh-material-liquid-backdrop);
|
|
318
|
+
backdrop-filter: var(--xh-material-liquid-backdrop);
|
|
319
|
+
/* 换到深浅不同的图上时色调翻转:底色、字色、细线与投影一起淡变 */
|
|
320
|
+
transition:
|
|
321
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
322
|
+
border-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
323
|
+
color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
324
|
+
box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
:where([data-material='liquid']) [data-scope='image-viewer'][data-part='toolbar'][data-xh-liquid] {
|
|
328
|
+
border-radius: var(--xh-image-viewer-toolbar-radius-outer, var(--xh-image-viewer-overlay-radius, var(--xh-shape-pill)));
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
:where([data-material='liquid']) [data-scope='image-viewer'][data-part='counter'][data-xh-liquid] {
|
|
332
|
+
border-radius: var(--xh-image-viewer-counter-radius, var(--xh-image-viewer-overlay-radius, var(--xh-shape-pill)));
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/* 工具条里的钮:悬停 / 按下取墨色淡底阶梯,工具条这块液态面就是它们的墨色域 */
|
|
336
|
+
:where([data-material='liquid']) [data-scope='image-viewer'][data-part='toolbar'][data-xh-liquid] > [data-part] {
|
|
337
|
+
--xh-action-bg-hover: var(--xh-image-viewer-action-bg-hover, var(--xh-bg-subtle));
|
|
338
|
+
--xh-action-bg-pressed: var(--xh-image-viewer-action-bg-active, var(--xh-bg-subtle-hover));
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
:where([data-material='liquid']) [data-scope='image-viewer'][data-part='prev-trigger'][data-xh-liquid],
|
|
342
|
+
:where([data-material='liquid']) [data-scope='image-viewer'][data-part='next-trigger'][data-xh-liquid],
|
|
343
|
+
:where([data-material='liquid']) [data-scope='image-viewer'][data-part='close-trigger'][data-xh-liquid] {
|
|
344
|
+
--xh-action-bg-rest: var(--xh-image-viewer-chrome-bg, var(--xh-_liquid-bg));
|
|
345
|
+
--xh-action-bg-hover: var(--xh-image-viewer-action-bg-hover, var(--xh-_liquid-bg-hover));
|
|
346
|
+
--xh-action-bg-pressed: var(--xh-image-viewer-action-bg-active, var(--xh-_liquid-bg-pressed));
|
|
347
|
+
--xh-action-bg-focus-visible: var(--xh-image-viewer-chrome-bg, var(--xh-material-liquid-focus-surface));
|
|
348
|
+
--xh-action-bg-disabled: var(--xh-image-viewer-chrome-bg, var(--xh-_liquid-bg));
|
|
349
|
+
--xh-action-fg-rest: var(--xh-material-liquid-fg);
|
|
350
|
+
--xh-action-fg-hover: var(--xh-material-liquid-fg);
|
|
351
|
+
--xh-action-fg-pressed: var(--xh-material-liquid-fg);
|
|
352
|
+
--xh-action-fg-focus-visible: var(--xh-material-liquid-fg);
|
|
353
|
+
--xh-action-border-rest: var(--xh-material-liquid-border);
|
|
354
|
+
--xh-action-border-hover: var(--xh-material-liquid-border);
|
|
355
|
+
--xh-action-border-pressed: var(--xh-material-liquid-border);
|
|
356
|
+
--xh-action-border-focus-visible: var(--xh-material-liquid-border);
|
|
357
|
+
--xh-action-border-disabled: var(--xh-material-liquid-border);
|
|
358
|
+
--xh-action-fg-disabled: var(--xh-fg-disabled);
|
|
359
|
+
--xh-action-shadow-rest: var(--xh-_liquid-shadow);
|
|
360
|
+
--xh-action-shadow-hover: var(--xh-_liquid-shadow);
|
|
361
|
+
--xh-action-shadow-pressed: var(--xh-_liquid-shadow);
|
|
362
|
+
--xh-action-shadow-focus-visible: var(--xh-_liquid-shadow);
|
|
363
|
+
--xh-action-shadow-disabled: var(--xh-_liquid-shadow);
|
|
364
|
+
|
|
365
|
+
color: var(--xh-material-liquid-fg);
|
|
366
|
+
-webkit-backdrop-filter: var(--xh-material-liquid-backdrop);
|
|
367
|
+
backdrop-filter: var(--xh-material-liquid-backdrop);
|
|
368
|
+
transform: var(--xh-_liquid-deform);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/* 叉的前景仍认使用者的那支槽;圆钮取 circle */
|
|
372
|
+
:where([data-material='liquid']) [data-scope='image-viewer'][data-part='close-trigger'][data-xh-liquid] {
|
|
373
|
+
--xh-action-fg-rest: var(--xh-image-viewer-close-fg, var(--xh-material-liquid-fg));
|
|
374
|
+
--xh-action-fg-hover: var(--xh-image-viewer-close-fg, var(--xh-material-liquid-fg));
|
|
375
|
+
--xh-action-fg-pressed: var(--xh-image-viewer-close-fg, var(--xh-material-liquid-fg));
|
|
376
|
+
--xh-action-fg-focus-visible: var(--xh-image-viewer-close-fg, var(--xh-material-liquid-fg));
|
|
377
|
+
--xh-action-bg-hover: var(--xh-image-viewer-close-bg-hover, var(--xh-_liquid-bg-hover));
|
|
378
|
+
--xh-action-bg-pressed: var(--xh-image-viewer-close-bg-active, var(--xh-_liquid-bg-pressed));
|
|
379
|
+
--xh-action-radius: var(--xh-image-viewer-close-radius, var(--xh-shape-circle));
|
|
380
|
+
}
|
|
381
|
+
|
|
258
382
|
/* 三颗钮的面是一层深色纱,纱底下是使用者的图片,环色算不出稳定的取值。
|
|
259
383
|
content 把前景钉死在浅字上、三颗钮的前景随它继承,环取 currentColor 即是那支浅字,
|
|
260
384
|
不随图片内容也不随主题翻 */
|
|
@@ -268,10 +392,6 @@
|
|
|
268
392
|
display: none;
|
|
269
393
|
}
|
|
270
394
|
|
|
271
|
-
[data-scope='image-viewer'] button[data-part]:disabled {
|
|
272
|
-
opacity: var(--xh-state-disabled-opacity);
|
|
273
|
-
}
|
|
274
|
-
|
|
275
395
|
/* 没写内容就由皮肤画兜底字形;作者往部件里塞了自己的图形,这几条即不命中 */
|
|
276
396
|
[data-scope='image-viewer'][data-part='zoom-in-trigger']:empty::before {
|
|
277
397
|
content: '';
|
|
@@ -390,4 +510,29 @@
|
|
|
390
510
|
display: none;
|
|
391
511
|
}
|
|
392
512
|
}
|
|
513
|
+
|
|
514
|
+
@media (forced-colors: active) {
|
|
515
|
+
/* 兜底字形是 mask 挖出来的一块底色,这一档里底色被系统换成 Canvas,字形跟着消失。
|
|
516
|
+
字形退出强制换色、直接写系统色(不能取 currentColor:退出强制换色的伪元素读到的是被系统换掉之前的作者色):
|
|
517
|
+
按钮面上取 ButtonText,悬停与按下时家族把按钮涂成 Highlight、字形换 HighlightText;
|
|
518
|
+
落在 Canvas 面上的取 CanvasText;
|
|
519
|
+
禁用取 GrayText */
|
|
520
|
+
[data-scope='image-viewer'][data-part='viewport'][data-error]::after {
|
|
521
|
+
forced-color-adjust: none;
|
|
522
|
+
background-color: CanvasText;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
[data-scope='image-viewer']:is([data-part='zoom-in-trigger'], [data-part='zoom-out-trigger'], [data-part='rotate-left-trigger'], [data-part='rotate-right-trigger'], [data-part='flip-horizontal-trigger'], [data-part='flip-vertical-trigger'], [data-part='prev-trigger'], [data-part='next-trigger'], [data-part='close-trigger']):empty::before {
|
|
526
|
+
forced-color-adjust: none;
|
|
527
|
+
background-color: ButtonText;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
[data-scope='image-viewer']:is([data-part='zoom-in-trigger'], [data-part='zoom-out-trigger'], [data-part='rotate-left-trigger'], [data-part='rotate-right-trigger'], [data-part='flip-horizontal-trigger'], [data-part='flip-vertical-trigger'], [data-part='prev-trigger'], [data-part='next-trigger'], [data-part='close-trigger']):not([data-disabled]):not([data-loading]):is(:hover, :active, [data-pressed]):empty::before {
|
|
531
|
+
background-color: HighlightText;
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
[data-scope='image-viewer']:is([data-part='zoom-in-trigger'], [data-part='zoom-out-trigger'], [data-part='rotate-left-trigger'], [data-part='rotate-right-trigger'], [data-part='flip-horizontal-trigger'], [data-part='flip-vertical-trigger'], [data-part='prev-trigger'], [data-part='next-trigger'], [data-part='close-trigger'])[data-disabled]:empty::before {
|
|
535
|
+
background-color: GrayText;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
393
538
|
}
|
package/css/image.css
CHANGED
|
@@ -42,18 +42,30 @@
|
|
|
42
42
|
animation: xh-fade-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter);
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
/*
|
|
45
|
+
/* 占位层还在(正淡出)时图片不再自己淡入:它在占位层底下直接落位,由占位层的淡出揭开,
|
|
46
|
+
模糊小图与图片交叉,不先透出一拍底色 */
|
|
47
|
+
[data-scope='image'][data-part='root']:has(> [data-part='placeholder']:not([hidden])) > [data-part='image'] {
|
|
48
|
+
animation: none;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* 铺满图位的占位层:加载期间占住画面,作者往里放骨架屏或模糊小图。它叠在图位自己的淡底上,
|
|
52
|
+
取不透明档,不与底下那层叠深 */
|
|
46
53
|
[data-scope='image'][data-part='placeholder'] {
|
|
47
54
|
position: absolute;
|
|
48
55
|
inset: 0;
|
|
49
56
|
display: flex;
|
|
50
57
|
align-items: center;
|
|
51
58
|
justify-content: center;
|
|
52
|
-
background: var(--xh-image-placeholder-bg, var(--xh-bg-subtle-hover));
|
|
59
|
+
background: var(--xh-image-placeholder-bg, var(--xh-bg-subtle-hover-opaque));
|
|
53
60
|
color: var(--xh-image-placeholder-fg, var(--xh-fg-subtle));
|
|
54
61
|
}
|
|
55
62
|
|
|
56
|
-
/*
|
|
63
|
+
/* 图片落位或失败:占位层原地淡出(它盖在图位之上),播完连接层才写 hidden */
|
|
64
|
+
[data-scope='image'][data-part='placeholder']:is([data-state='loaded'], [data-state='error']) {
|
|
65
|
+
animation: xh-fade-out var(--xh-motion-duration-enter) var(--xh-motion-ease-enter) forwards;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* display 会盖掉 hidden 属性的 UA 规则:淡出播完之后靠这条收起 */
|
|
57
69
|
[data-scope='image'][data-part='placeholder'][hidden] {
|
|
58
70
|
display: none;
|
|
59
71
|
}
|
|
@@ -72,7 +84,14 @@
|
|
|
72
84
|
user-select: none;
|
|
73
85
|
}
|
|
74
86
|
|
|
75
|
-
/*
|
|
87
|
+
/* 图片载好:回退内容浮到图片之上原地淡出,与图片的淡入交叉;播完连接层才写 hidden */
|
|
88
|
+
[data-scope='image'][data-part='fallback'][data-state='loaded'] {
|
|
89
|
+
position: absolute;
|
|
90
|
+
inset: 0;
|
|
91
|
+
animation: xh-fade-out var(--xh-motion-duration-enter) var(--xh-motion-ease-enter) forwards;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* display 会盖掉 hidden 属性的 UA 规则:延迟窗口内与淡出播完之后靠这条收起 */
|
|
76
95
|
[data-scope='image'][data-part='fallback'][hidden] {
|
|
77
96
|
display: none;
|
|
78
97
|
}
|
package/css/input-group.css
CHANGED
|
@@ -33,6 +33,8 @@
|
|
|
33
33
|
display: inline-flex;
|
|
34
34
|
box-sizing: border-box;
|
|
35
35
|
align-items: stretch;
|
|
36
|
+
/* 整组是一个字段:不传尺寸时与单个字段同宽,组里的字段让位占满前后缀之外的那段 */
|
|
37
|
+
inline-size: var(--xh-input-group-w, var(--xh-control-w));
|
|
36
38
|
border-radius: var(--xh-input-group-radius, var(--xh-shape-control));
|
|
37
39
|
background: var(--xh-input-group-bg, var(--xh-_input-group-bg));
|
|
38
40
|
box-shadow: var(--xh-input-group-shadow, var(--xh-_input-group-shadow));
|
|
@@ -40,7 +42,7 @@
|
|
|
40
42
|
/* 父容器给不出这么宽时整组跟着收,不越出父容器 */
|
|
41
43
|
max-inline-size: 100%;
|
|
42
44
|
transition:
|
|
43
|
-
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
45
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
44
46
|
box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
45
47
|
}
|
|
46
48
|
|
|
@@ -175,6 +177,14 @@
|
|
|
175
177
|
box-shadow: none;
|
|
176
178
|
}
|
|
177
179
|
|
|
180
|
+
/* 组里的字段(带字段外壳的控件)占满前后缀与动作之外的剩余宽度,自己的缺省宽让位;
|
|
181
|
+
前后缀、按钮这些段按内容宽,不跟着撑开 */
|
|
182
|
+
[data-scope='input-group'][data-part='root'] > :is([data-xh-field-chrome], :has([data-xh-field-chrome])) {
|
|
183
|
+
flex: 1 1 0%;
|
|
184
|
+
min-inline-size: 0;
|
|
185
|
+
inline-size: auto;
|
|
186
|
+
}
|
|
187
|
+
|
|
178
188
|
/* 每一段都是定位元素,动作控件的悬停面可以浮到外轮廓之上。 */
|
|
179
189
|
[data-scope='input-group'][data-part='root'] > * {
|
|
180
190
|
position: relative;
|
|
@@ -239,18 +249,6 @@
|
|
|
239
249
|
display: none;
|
|
240
250
|
}
|
|
241
251
|
|
|
242
|
-
@media (prefers-reduced-motion: reduce) {
|
|
243
|
-
[data-scope='input-group'][data-part='root'],
|
|
244
|
-
[data-scope='input-group'][data-part='root']::before {
|
|
245
|
-
transition: none;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
:where([data-motion='reduce']) [data-scope='input-group'][data-part='root'],
|
|
250
|
-
:where([data-motion='reduce']) [data-scope='input-group'][data-part='root']::before {
|
|
251
|
-
transition: none;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
252
|
@media (forced-colors: active) {
|
|
255
253
|
[data-scope='input-group'][data-part='root'] {
|
|
256
254
|
background: Canvas;
|