@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/listbox.css
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
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
|
+
/* 定义 listbox 样式。 */
|
|
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='listbox'] {
|
|
@@ -5,9 +15,24 @@
|
|
|
5
15
|
}
|
|
6
16
|
|
|
7
17
|
[data-scope='listbox'][data-part='root'] {
|
|
8
|
-
/*
|
|
9
|
-
|
|
18
|
+
/* 条目外的字形(空态 / 在途占位里作者塞的图标)按档取尺,缺省 md;条目内的字形由家族随
|
|
19
|
+
data-xh-collection-size 下发(§6.5)。列表框自绘的状态字形(前导对号所在的标记盒与盒里的勾)不读这支:
|
|
20
|
+
它们是指示符,走 --xh-control-indicator-* 一族——标记盒在自己身上把 --xh-icon-size 改接到盒的尺 */
|
|
21
|
+
--xh-icon-size: var(--xh-listbox-icon-size, var(--xh-glyph-size-md));
|
|
22
|
+
/* 定高小列表的自绘条挂在根上(§6.6):根是条子的定位盒,轨道底色关掉才不会在列表右缘糊出一条灰带 */
|
|
23
|
+
--xh-scrollbar-track-bg: transparent;
|
|
24
|
+
|
|
25
|
+
/* 尺寸档只换这四个私有槽,条目、分组标题与空态占位都从 root 继承它们,
|
|
26
|
+
换档不必给每个部件各写一条选择器 */
|
|
27
|
+
--xh-_listbox-item-py: var(--xh-list-option-py-md);
|
|
28
|
+
--xh-_listbox-item-px: var(--xh-control-px-md);
|
|
29
|
+
--xh-_listbox-gap: var(--xh-control-gap-md);
|
|
30
|
+
--xh-_listbox-font-size: var(--xh-control-font-md);
|
|
10
31
|
|
|
32
|
+
/* 强调色随语气走,只落在勾选标记上;没写 data-tone 时退回品牌色 */
|
|
33
|
+
--xh-_listbox-accent: var(--xh-_tone, var(--xh-fg-brand));
|
|
34
|
+
|
|
35
|
+
position: relative;
|
|
11
36
|
display: flex;
|
|
12
37
|
flex-direction: column;
|
|
13
38
|
gap: var(--xh-listbox-gap, var(--xh-space-2));
|
|
@@ -17,6 +42,43 @@
|
|
|
17
42
|
display: none;
|
|
18
43
|
}
|
|
19
44
|
|
|
45
|
+
/* —— 尺寸 —— */
|
|
46
|
+
/* 缺省档写在上面的基础规则里 */
|
|
47
|
+
[data-scope='listbox'][data-part='root'][data-size='sm'] {
|
|
48
|
+
--xh-icon-size: var(--xh-listbox-icon-size, var(--xh-glyph-size-sm));
|
|
49
|
+
--xh-_listbox-item-py: var(--xh-list-option-py-sm);
|
|
50
|
+
--xh-_listbox-item-px: var(--xh-control-px-sm);
|
|
51
|
+
--xh-_listbox-gap: var(--xh-control-gap-sm);
|
|
52
|
+
--xh-_listbox-font-size: var(--xh-control-font-sm);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
[data-scope='listbox'][data-part='root'][data-size='lg'] {
|
|
56
|
+
--xh-icon-size: var(--xh-listbox-icon-size, var(--xh-glyph-size-lg));
|
|
57
|
+
--xh-_listbox-item-py: var(--xh-list-option-py-lg);
|
|
58
|
+
--xh-_listbox-item-px: var(--xh-control-px-lg);
|
|
59
|
+
--xh-_listbox-gap: var(--xh-control-gap-lg);
|
|
60
|
+
--xh-_listbox-font-size: var(--xh-control-font-lg);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* 校验失败:整块列表框换成错误描边,与其余表单控件同一套表达 */
|
|
64
|
+
[data-scope='listbox'][data-part='content'][data-invalid] {
|
|
65
|
+
border-color: var(--xh-listbox-content-border-invalid, var(--xh-border-invalid));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* 只读改不动选中值,但不是禁用:颜色照常,只把"可点"这个暗示收回来。
|
|
69
|
+
光标由家族按态解算,这里在各态的槽上统一收回;禁用项的 not-allowed 由家族按 aria-disabled 给,不在此列 */
|
|
70
|
+
[data-scope='listbox'][data-part='root'][data-readonly]
|
|
71
|
+
[data-scope='listbox'][data-part='item']:not([data-disabled]) {
|
|
72
|
+
--xh-collection-cursor-rest: default;
|
|
73
|
+
--xh-collection-cursor-hover: default;
|
|
74
|
+
--xh-collection-cursor-keyboard-highlight: default;
|
|
75
|
+
--xh-collection-cursor-pressed: default;
|
|
76
|
+
--xh-collection-cursor-selected: default;
|
|
77
|
+
--xh-collection-cursor-selected-hover: default;
|
|
78
|
+
--xh-collection-cursor-selected-highlight: default;
|
|
79
|
+
--xh-collection-cursor-selected-pressed: default;
|
|
80
|
+
}
|
|
81
|
+
|
|
20
82
|
[data-scope='listbox'][data-part='label'] {
|
|
21
83
|
color: var(--xh-listbox-label-fg, var(--xh-fg-muted));
|
|
22
84
|
font-size: var(--xh-listbox-label-font-size, var(--xh-text-label-size));
|
|
@@ -24,7 +86,7 @@
|
|
|
24
86
|
line-height: var(--xh-leading-none);
|
|
25
87
|
}
|
|
26
88
|
|
|
27
|
-
/* 整组禁用会把 data-disabled 一路打到 label / content /
|
|
89
|
+
/* 整组禁用会把 data-disabled 一路打到 label / content / group 上,各处观感保持一致 */
|
|
28
90
|
[data-scope='listbox'][data-part='label'][data-disabled] {
|
|
29
91
|
color: var(--xh-fg-subtle);
|
|
30
92
|
}
|
|
@@ -52,6 +114,18 @@
|
|
|
52
114
|
display: none;
|
|
53
115
|
}
|
|
54
116
|
|
|
117
|
+
/* 手写结构按真正的条目判断,空白文本与分组标题都不算候选。
|
|
118
|
+
只排除 content 内部的 hidden 祖先;外层浮层退场时不改变本列表的几何。
|
|
119
|
+
禁用条目仍是有效内容,不参与此处排除。 */
|
|
120
|
+
[data-scope='listbox'][data-part='content']:not(:has(
|
|
121
|
+
[data-scope='listbox'][data-part='item']:not([hidden]):not([data-scope='listbox'][data-part='content'] [hidden] *)
|
|
122
|
+
)),
|
|
123
|
+
[data-scope='listbox'][data-part='group']:not(:has(
|
|
124
|
+
[data-scope='listbox'][data-part='item']:not([hidden]):not([data-scope='listbox'][data-part='content'] [hidden] *)
|
|
125
|
+
)) {
|
|
126
|
+
display: none;
|
|
127
|
+
}
|
|
128
|
+
|
|
55
129
|
/* 横向列表沿主轴排,此时高度由内容决定,再压最大高度只会白留一条滚动条 */
|
|
56
130
|
[data-scope='listbox'][data-part='content'][data-orientation='horizontal'] {
|
|
57
131
|
flex-direction: row;
|
|
@@ -64,27 +138,32 @@
|
|
|
64
138
|
outline: none;
|
|
65
139
|
}
|
|
66
140
|
|
|
67
|
-
[data-scope='listbox'][data-part='
|
|
141
|
+
[data-scope='listbox'][data-part='group'] {
|
|
68
142
|
display: flex;
|
|
69
143
|
flex-direction: column;
|
|
70
|
-
gap: var(--xh-listbox-
|
|
144
|
+
gap: var(--xh-listbox-group-gap, var(--xh-list-option-gap));
|
|
71
145
|
}
|
|
72
146
|
|
|
73
|
-
[data-scope='listbox'][data-part='
|
|
147
|
+
[data-scope='listbox'][data-part='group'][hidden] {
|
|
74
148
|
display: none;
|
|
75
149
|
}
|
|
76
150
|
|
|
77
|
-
/*
|
|
78
|
-
[data-scope='listbox'][data-part='
|
|
79
|
-
|
|
151
|
+
/* 只在两个有可见条目的分组之间留白;已收起的空组不能把首组额外向下推。 */
|
|
152
|
+
[data-scope='listbox'][data-part='group']:has(
|
|
153
|
+
[data-scope='listbox'][data-part='item']:not([hidden]):not([data-scope='listbox'][data-part='content'] [hidden] *)
|
|
154
|
+
)
|
|
155
|
+
~ [data-scope='listbox'][data-part='group']:has(
|
|
156
|
+
[data-scope='listbox'][data-part='item']:not([hidden]):not([data-scope='listbox'][data-part='content'] [hidden] *)
|
|
157
|
+
) {
|
|
158
|
+
margin-block-start: var(--xh-listbox-group-spacing, var(--xh-space-1_5));
|
|
80
159
|
}
|
|
81
160
|
|
|
82
161
|
/* 分组标题不是选项、进不了导航,画成小号次要文字,
|
|
83
162
|
内缩与条目对齐(同一个 padding-inline),标题与条目文字才在一条竖线上 */
|
|
84
|
-
[data-scope='listbox'][data-part='
|
|
163
|
+
[data-scope='listbox'][data-part='group-label'] {
|
|
85
164
|
display: block;
|
|
86
165
|
padding-block: var(--xh-listbox-group-label-py, var(--xh-space-1));
|
|
87
|
-
padding-inline: var(--xh-listbox-group-label-px, var(--xh-
|
|
166
|
+
padding-inline: var(--xh-listbox-group-label-px, var(--xh-_listbox-item-px));
|
|
88
167
|
color: var(--xh-listbox-group-label-fg, var(--xh-fg-subtle));
|
|
89
168
|
font-size: var(--xh-listbox-group-label-font-size, var(--xh-text-caption-size));
|
|
90
169
|
font-weight: var(--xh-listbox-group-label-font-weight, var(--xh-font-weight-medium));
|
|
@@ -92,93 +171,163 @@
|
|
|
92
171
|
user-select: none;
|
|
93
172
|
}
|
|
94
173
|
|
|
95
|
-
[data-scope='listbox'][data-part='
|
|
174
|
+
[data-scope='listbox'][data-part='group-label'][hidden] {
|
|
96
175
|
display: none;
|
|
97
176
|
}
|
|
98
177
|
|
|
99
|
-
[data-scope='listbox'][data-part='
|
|
178
|
+
[data-scope='listbox'][data-part='group-label'][data-disabled] {
|
|
100
179
|
color: var(--xh-fg-disabled);
|
|
101
180
|
}
|
|
102
181
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
padding-block: var(--xh-listbox-
|
|
108
|
-
padding-inline: var(--xh-listbox-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
line-height: var(--xh-listbox-item-leading, var(--xh-leading-normal));
|
|
114
|
-
white-space: nowrap;
|
|
115
|
-
cursor: pointer;
|
|
116
|
-
user-select: none;
|
|
117
|
-
transition:
|
|
118
|
-
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
119
|
-
color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
182
|
+
/* 空态占位:待在 root 里、content 的兄弟(列表框只许拥有 option 与 group)。
|
|
183
|
+
它只画作者提供的居中文字;零候选的 content 自身收起,不再留下空描边或留白。 */
|
|
184
|
+
[data-scope='listbox'][data-part='empty'] {
|
|
185
|
+
display: block;
|
|
186
|
+
padding-block: var(--xh-listbox-empty-py, var(--xh-space-3));
|
|
187
|
+
padding-inline: var(--xh-listbox-empty-px, var(--xh-_listbox-item-px));
|
|
188
|
+
color: var(--xh-listbox-empty-fg, var(--xh-fg-subtle));
|
|
189
|
+
font-size: var(--xh-listbox-empty-font-size, var(--xh-_listbox-font-size));
|
|
190
|
+
line-height: var(--xh-leading-none);
|
|
191
|
+
text-align: center;
|
|
120
192
|
}
|
|
121
193
|
|
|
122
|
-
/*
|
|
123
|
-
[data-scope='listbox'][data-part='
|
|
194
|
+
/* 上面给了 display,UA 的 [hidden]{display:none} 已被盖掉,这里补回来 */
|
|
195
|
+
[data-scope='listbox'][data-part='empty'][hidden] {
|
|
196
|
+
display: none;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
[data-scope='listbox'][data-part='empty'][data-disabled] {
|
|
200
|
+
color: var(--xh-fg-disabled);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* 在途占位:与空态占位同一个位置、同一副观感,两者不同屏 */
|
|
204
|
+
[data-scope='listbox'][data-part='loading'] {
|
|
205
|
+
display: block;
|
|
206
|
+
padding-block: var(--xh-listbox-loading-py, var(--xh-space-3));
|
|
207
|
+
padding-inline: var(--xh-listbox-loading-px, var(--xh-_listbox-item-px));
|
|
208
|
+
color: var(--xh-listbox-loading-fg, var(--xh-fg-subtle));
|
|
209
|
+
font-size: var(--xh-listbox-loading-font-size, var(--xh-_listbox-font-size));
|
|
210
|
+
line-height: var(--xh-leading-none);
|
|
211
|
+
text-align: center;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
[data-scope='listbox'][data-part='loading'][hidden] {
|
|
124
215
|
display: none;
|
|
125
216
|
}
|
|
126
217
|
|
|
127
|
-
/*
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
218
|
+
/* 取下一页的按钮:铺满一行摆在列表尾——铺满一行的独立动作条目,接 Action Control 的 row 档、
|
|
219
|
+
ghost 形态(§9.2):宽度由容器给、高度随内容、按下只换面不缩放;盒几何、悬停 / 按下 / 禁用面、
|
|
220
|
+
焦点环与粗指针热区全由家族给,白底承载 hover 100 → pressed 200。
|
|
221
|
+
这里只把使用者槽映射到桥接槽并把文案居中:它是一行里唯一的东西,靠起始缘会像一条没对齐的条目 */
|
|
222
|
+
[data-scope='listbox'][data-part='load-more-trigger'] {
|
|
223
|
+
--xh-action-gap: var(--xh-listbox-load-more-trigger-gap, var(--xh-_listbox-gap));
|
|
224
|
+
--xh-action-padding-block: var(--xh-listbox-load-more-trigger-py, var(--xh-_listbox-item-py));
|
|
225
|
+
--xh-action-padding-inline: var(--xh-listbox-load-more-trigger-px, var(--xh-_listbox-item-px));
|
|
226
|
+
--xh-action-radius: var(--xh-listbox-load-more-trigger-radius, var(--xh-shape-control));
|
|
227
|
+
--xh-action-bg-hover: var(--xh-listbox-load-more-trigger-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
228
|
+
--xh-action-fg-rest: var(--xh-listbox-load-more-trigger-fg, var(--xh-_tone-fg, var(--xh-fg-brand-strong)));
|
|
229
|
+
--xh-action-fg-hover: var(--xh-listbox-load-more-trigger-fg, var(--xh-_tone-fg, var(--xh-fg-brand-strong)));
|
|
230
|
+
--xh-action-fg-pressed: var(--xh-listbox-load-more-trigger-fg, var(--xh-_tone-fg, var(--xh-fg-brand-strong)));
|
|
231
|
+
--xh-action-font-size: var(--xh-listbox-load-more-trigger-font-size, var(--xh-_listbox-font-size));
|
|
232
|
+
|
|
233
|
+
justify-content: center;
|
|
234
|
+
text-align: center;
|
|
235
|
+
/* row 档允许换行、高度随内容,折行的文案走正文行高(§6.4) */
|
|
236
|
+
line-height: var(--xh-leading-normal);
|
|
131
237
|
}
|
|
132
238
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
[data-scope='listbox'][data-part='item'][data-state='checked'] {
|
|
136
|
-
color: var(--xh-listbox-item-fg-selected, var(--xh-fg-brand-strong));
|
|
137
|
-
font-weight: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-medium));
|
|
239
|
+
[data-scope='listbox'][data-part='load-more-trigger'][hidden] {
|
|
240
|
+
display: none;
|
|
138
241
|
}
|
|
139
242
|
|
|
140
|
-
/*
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
243
|
+
/* 条目走 Collection Item 的 page 语境(页内持久集合,§7.3):网格、尺寸档、悬停 / 高亮 / 按下面
|
|
244
|
+
(白底承载 hover 100 → pressed 200)与选中面(品牌淡底 + 淡底前景 + 前导对号,selected+hover 20% /
|
|
245
|
+
+pressed 28%)都由家族按 aria-selected / aria-disabled 给出;禁用面(字色降级、not-allowed、不换面)
|
|
246
|
+
也归家族。这里只把公开槽映射到桥接槽,不复制任何状态选择器。
|
|
247
|
+
page 集合坐在 surface 白底上,前景走 fg-default 而不是浮层的 frosted 前景 */
|
|
248
|
+
[data-scope='listbox'][data-part='item'] {
|
|
249
|
+
--xh-collection-block-padding: var(--xh-listbox-item-py, var(--xh-_listbox-item-py));
|
|
250
|
+
--xh-collection-inline-padding: var(--xh-listbox-item-px, var(--xh-_listbox-item-px));
|
|
251
|
+
--xh-collection-gap: var(--xh-listbox-item-gap, var(--xh-_listbox-gap));
|
|
252
|
+
--xh-collection-font-size: var(--xh-listbox-item-font-size, var(--xh-_listbox-font-size));
|
|
253
|
+
--xh-collection-radius: var(--xh-listbox-item-radius, var(--xh-shape-control));
|
|
254
|
+
/* 作者的图标尺槽经桥接槽下发到条目,家族缺省按 data-xh-collection-size 取档 */
|
|
255
|
+
--xh-collection-glyph-size: var(--xh-listbox-icon-size, var(--xh-_collection-glyph-size));
|
|
256
|
+
--xh-collection-fg-rest: var(--xh-listbox-item-fg, var(--xh-fg-default));
|
|
257
|
+
--xh-collection-fg-hover: var(--xh-listbox-item-fg, var(--xh-fg-default));
|
|
258
|
+
--xh-collection-fg-keyboard-highlight: var(--xh-listbox-item-fg, var(--xh-fg-default));
|
|
259
|
+
--xh-collection-fg-pressed: var(--xh-listbox-item-fg, var(--xh-fg-default));
|
|
260
|
+
--xh-collection-fg-selected: var(--xh-listbox-item-fg-selected, var(--xh-fg-on-brand-subtle));
|
|
261
|
+
--xh-collection-fg-selected-hover: var(--xh-listbox-item-fg-selected, var(--xh-fg-on-brand-subtle));
|
|
262
|
+
--xh-collection-fg-selected-highlight: var(--xh-listbox-item-fg-selected, var(--xh-fg-on-brand-subtle));
|
|
263
|
+
--xh-collection-fg-selected-pressed: var(--xh-listbox-item-fg-selected, var(--xh-fg-on-brand-subtle));
|
|
264
|
+
--xh-collection-font-weight-selected: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-regular));
|
|
265
|
+
--xh-collection-font-weight-selected-hover: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-regular));
|
|
266
|
+
--xh-collection-font-weight-selected-highlight: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-regular));
|
|
267
|
+
--xh-collection-font-weight-selected-pressed: var(--xh-listbox-item-font-weight-selected, var(--xh-font-weight-regular));
|
|
268
|
+
--xh-collection-bg-hover: var(--xh-listbox-item-bg-hover, var(--xh-bg-subtle));
|
|
269
|
+
--xh-collection-bg-keyboard-highlight: var(--xh-listbox-item-bg-hover, var(--xh-bg-subtle));
|
|
270
|
+
--xh-collection-bg-pressed: var(--xh-listbox-item-bg-pressed, var(--xh-bg-subtle-hover));
|
|
271
|
+
--xh-collection-bg-selected: var(--xh-listbox-item-bg-selected, var(--xh-bg-brand-subtle));
|
|
272
|
+
/* data-highlighted 跟的是连接层记的焦点条目(指针点选也会落焦):只换面,焦点环在 :focus-visible 下再接回 */
|
|
273
|
+
--xh-collection-outline-keyboard-highlight: transparent;
|
|
274
|
+
--xh-collection-outline-selected-highlight: transparent;
|
|
275
|
+
/* 对号随语气走:没写 data-tone 时退回品牌色;槽按本部件取名(item-check-fg),标记部件的旧槽留在兜底位 */
|
|
276
|
+
--xh-collection-indicator-fg-rest: var(--xh-listbox-item-check-fg, var(--xh-listbox-item-indicator-fg, var(--xh-_listbox-accent)));
|
|
277
|
+
--xh-collection-indicator-fg-checked: var(--xh-listbox-item-check-fg, var(--xh-listbox-item-indicator-fg, var(--xh-_listbox-accent)));
|
|
278
|
+
--xh-collection-indicator-fg-selected: var(--xh-listbox-item-check-fg, var(--xh-listbox-item-indicator-fg, var(--xh-_listbox-accent)));
|
|
279
|
+
--xh-collection-indicator-fg-selected-hover: var(--xh-listbox-item-check-fg, var(--xh-listbox-item-indicator-fg, var(--xh-_listbox-accent)));
|
|
280
|
+
--xh-collection-indicator-fg-selected-highlight: var(--xh-listbox-item-check-fg, var(--xh-listbox-item-indicator-fg, var(--xh-_listbox-accent)));
|
|
281
|
+
--xh-collection-indicator-fg-selected-pressed: var(--xh-listbox-item-check-fg, var(--xh-listbox-item-indicator-fg, var(--xh-_listbox-accent)));
|
|
282
|
+
|
|
283
|
+
/* 行高留出文字的上下伸展空间,行内那层 overflow:hidden 才不会把字削掉 */
|
|
284
|
+
line-height: var(--xh-listbox-item-leading, var(--xh-leading-normal));
|
|
285
|
+
white-space: nowrap;
|
|
286
|
+
user-select: none;
|
|
144
287
|
}
|
|
145
288
|
|
|
146
|
-
[
|
|
147
|
-
|
|
289
|
+
/* 家族给了 display,UA 的 [hidden]{display:none} 已被盖掉:条目可以按需收起(过滤掉的选项) */
|
|
290
|
+
[data-scope='listbox'][data-part='item'][hidden] {
|
|
291
|
+
display: none;
|
|
148
292
|
}
|
|
149
293
|
|
|
150
|
-
/*
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
294
|
+
/* 键盘焦点出现时环才接回并立即到位,不压在背景过渡的中间帧上 */
|
|
295
|
+
[data-scope='listbox'][data-part='item']:focus-visible:not(:hover) {
|
|
296
|
+
--xh-collection-outline-keyboard-highlight: var(--xh-ring-focus);
|
|
297
|
+
--xh-collection-outline-selected-highlight: var(--xh-ring-focus);
|
|
298
|
+
|
|
299
|
+
transition: none;
|
|
155
300
|
}
|
|
156
301
|
|
|
157
302
|
[data-scope='listbox'][data-part='item-text'] {
|
|
158
|
-
|
|
159
|
-
/* 弹性子项默认最小尺寸是内容尺寸,不归零则长文本把行撑破、省略号轮不上 */
|
|
303
|
+
/* 网格子项默认最小尺寸是内容尺寸,不归零则长文本把行撑破、省略号轮不上 */
|
|
160
304
|
min-inline-size: 0;
|
|
161
305
|
overflow: hidden;
|
|
162
306
|
white-space: nowrap;
|
|
163
307
|
text-overflow: ellipsis;
|
|
164
308
|
}
|
|
165
309
|
|
|
166
|
-
/*
|
|
310
|
+
/* 勾选标记落在家族网格的 indicator 列(page 语境下前置为前导对号);显隐与颜色由家族按选中态给,
|
|
311
|
+
未选中时占位不塌,切换选中不引起行宽抖动。
|
|
312
|
+
盒与盒里的勾是指示符(§6.5):盒按指示符档取尺,并在自己身上把 --xh-icon-size 改接到盒的尺,皮肤画的
|
|
313
|
+
兜底勾与作者塞进盒里的 XhIcon 读同一把尺、与盒同边长(前导对号不是勾选格,不取 × 0.75,与 Menu 族同口径);
|
|
314
|
+
不读家族按档下发到行的 --xh-icon-size——那支只管作者放进条目里的图标,按图标档取的 20px 比 16 / 14 的指示符档大一圈 */
|
|
167
315
|
[data-scope='listbox'][data-part='item-indicator'] {
|
|
316
|
+
--xh-icon-size: var(--xh-listbox-item-indicator-size, var(--xh-control-indicator-size));
|
|
317
|
+
|
|
168
318
|
display: inline-flex;
|
|
169
|
-
flex: none;
|
|
170
319
|
align-items: center;
|
|
171
320
|
justify-content: center;
|
|
172
321
|
inline-size: var(--xh-listbox-item-indicator-size, var(--xh-control-indicator-size));
|
|
173
|
-
|
|
174
|
-
visibility: hidden;
|
|
322
|
+
block-size: var(--xh-listbox-item-indicator-size, var(--xh-control-indicator-size));
|
|
175
323
|
}
|
|
176
324
|
|
|
177
325
|
[data-scope='listbox'][data-part='item-indicator'][hidden] {
|
|
178
326
|
display: none;
|
|
179
327
|
}
|
|
180
328
|
|
|
181
|
-
/*
|
|
329
|
+
/* 没写内容就由皮肤画勾;作者往部件里塞了自己的图形,这条规则即不命中。
|
|
330
|
+
尺寸读标记盒自己改接过的 --xh-icon-size:与盒同边长,随指示符档换档(见上面标记盒那块) */
|
|
182
331
|
[data-scope='listbox'][data-part='item-indicator']:empty::before {
|
|
183
332
|
content: '';
|
|
184
333
|
display: inline-block;
|
|
@@ -189,12 +338,4 @@
|
|
|
189
338
|
-webkit-mask: var(--xh-glyph-mark-check) center / contain no-repeat;
|
|
190
339
|
mask: var(--xh-glyph-mark-check) center / contain no-repeat;
|
|
191
340
|
}
|
|
192
|
-
|
|
193
|
-
[data-scope='listbox'][data-part='item-indicator'][data-state='checked'] {
|
|
194
|
-
visibility: visible;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
[data-scope='listbox'][data-part='item-indicator'][data-disabled] {
|
|
198
|
-
color: var(--xh-fg-disabled);
|
|
199
|
-
}
|
|
200
341
|
}
|
package/css/loading-bar.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
|
+
/* 定义 loading bar 样式。 */
|
|
7
|
+
|
|
1
8
|
@layer xihan.components {
|
|
2
9
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
3
10
|
[data-scope='loading-bar'] {
|
|
@@ -14,7 +21,9 @@
|
|
|
14
21
|
*/
|
|
15
22
|
[data-scope='loading-bar'][data-part='root'] {
|
|
16
23
|
position: fixed;
|
|
17
|
-
|
|
24
|
+
/* 顶到视口上沿的那一条:刘海或状态栏压住的那一段由系统给出,不让位就整条藏在下面。
|
|
25
|
+
桌面上 env() 恒为 0,条子照旧贴着上沿。 */
|
|
26
|
+
inset-block-start: env(safe-area-inset-top);
|
|
18
27
|
inset-inline: 0;
|
|
19
28
|
z-index: var(--xh-loading-bar-layer, var(--xh-layer-sticky));
|
|
20
29
|
|
|
@@ -49,7 +58,7 @@
|
|
|
49
58
|
|
|
50
59
|
/*
|
|
51
60
|
* 进度段。宽度那条轴(inline-size)由连接层写进内联样式,这里绝不重复写。
|
|
52
|
-
*
|
|
61
|
+
* 背景色不走内联:要别的颜色改 --xh-loading-bar-range 这个槽,或者换语气。
|
|
53
62
|
*
|
|
54
63
|
* 语气取装饰档 --xh-_tone-soft:那一档压在画布上够 3:1,细带才看得出来。
|
|
55
64
|
* 槽位由 root 上的 data-tone 声明,继承下来。
|
|
@@ -58,7 +67,40 @@
|
|
|
58
67
|
[data-scope='loading-bar'][data-part='range'] {
|
|
59
68
|
block-size: 100%;
|
|
60
69
|
background: var(--xh-loading-bar-range, var(--xh-_tone-soft, var(--xh-bg-brand)));
|
|
61
|
-
transition: inline-size var(--xh-loading-bar-speed, var(--xh-motion-duration-enter)) var(--xh-motion-ease-
|
|
70
|
+
transition: inline-size var(--xh-loading-bar-speed, var(--xh-motion-duration-enter)) var(--xh-motion-ease-continuous);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* 渲染了亮边才把进度段变成定位面:亮边贴在它的末端 */
|
|
74
|
+
[data-scope='loading-bar'][data-part='range']:has([data-part='peg']) {
|
|
75
|
+
position: relative;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/*
|
|
79
|
+
* 进度段末端那道亮边。它把「条子在往前走」这件事画出来:只有一条渐宽的色带时,
|
|
80
|
+
* 200ms 一跳的推进读起来像卡顿。
|
|
81
|
+
* 颜色接进度段自己的那一支,宽度与厚度各留一个槽。
|
|
82
|
+
*/
|
|
83
|
+
[data-scope='loading-bar'][data-part='peg'] {
|
|
84
|
+
position: absolute;
|
|
85
|
+
inset-block: 0;
|
|
86
|
+
inset-inline-end: 0;
|
|
87
|
+
inline-size: var(--xh-loading-bar-peg-w, var(--xh-space-8));
|
|
88
|
+
/* 两端渐隐、中间最亮:亮斑对称,文字方向翻过来也不必再配一次 */
|
|
89
|
+
background: linear-gradient(
|
|
90
|
+
90deg,
|
|
91
|
+
transparent,
|
|
92
|
+
var(--xh-loading-bar-peg-fg, var(--xh-loading-bar-range, var(--xh-_tone-soft, var(--xh-bg-brand)))),
|
|
93
|
+
transparent
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* 条子还没起步时亮边一起收着:0% 宽的进度段末端不该先亮出一道边 */
|
|
98
|
+
[data-scope='loading-bar'][data-part='peg'][data-state='idle'] {
|
|
99
|
+
opacity: 0;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
[data-scope='loading-bar'][data-part='peg'][hidden] {
|
|
103
|
+
display: none;
|
|
62
104
|
}
|
|
63
105
|
|
|
64
106
|
/* 减少动效:宽度与淡出都立刻到位。进度本身照常推进,只是不再有过渡的过程——
|
|
@@ -75,4 +117,11 @@
|
|
|
75
117
|
:where([data-motion='reduce']) [data-scope='loading-bar'][data-part='range'] {
|
|
76
118
|
transition: none;
|
|
77
119
|
}
|
|
120
|
+
|
|
121
|
+
@media print {
|
|
122
|
+
/* 打印:加载进度条画的是「正在等」,落到纸上是一条没有含义的色带。 */
|
|
123
|
+
[data-scope='loading-bar'][data-part='root'] {
|
|
124
|
+
display: none;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
78
127
|
}
|
package/css/log.css
CHANGED
|
@@ -1,3 +1,30 @@
|
|
|
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
|
+
/* 定义 log 样式。 */
|
|
7
|
+
|
|
8
|
+
/* 独立皮肤同时传递引入回底钮的动作控件配方;full bundle 递归去重。 */
|
|
9
|
+
@import '../family/action-control.css';
|
|
10
|
+
|
|
11
|
+
@layer xihan.motion {
|
|
12
|
+
/* 关键帧写在本文件里:动画名的查找只认「文档里有没有这个名字」,
|
|
13
|
+
引用别处文件里的名字时那份文件不一定在场,动画会静默地整个不跑。
|
|
14
|
+
幅度与缩放走令牌,减弱动效时由令牌层归零 */
|
|
15
|
+
@keyframes xh-log-button-in {
|
|
16
|
+
from {
|
|
17
|
+
opacity: 0;
|
|
18
|
+
scale: var(--xh-motion-scale-enter);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
to {
|
|
22
|
+
opacity: 1;
|
|
23
|
+
scale: 1;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
1
28
|
@layer xihan.components {
|
|
2
29
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
3
30
|
[data-scope='log'] {
|
|
@@ -9,13 +36,22 @@
|
|
|
9
36
|
[data-scope='log'][data-part='root'] {
|
|
10
37
|
--xh-_log-line-h: var(--xh-log-line-height, 1.25rem);
|
|
11
38
|
|
|
39
|
+
/* 尺寸缺省档:不写 data-size 时的取值。三档只改这两个私有槽,
|
|
40
|
+
公开槽留在读处当首选,作者在祖先上设的覆盖才赢得过档位声明。
|
|
41
|
+
行高不在档内:视口按 rows 定高读的是同一个基准,三档同值才对得上整数行 */
|
|
42
|
+
--xh-_log-font-size: var(--xh-text-secondary-size);
|
|
43
|
+
--xh-_log-content-px: var(--xh-space-3);
|
|
44
|
+
|
|
45
|
+
/* 一张静态内容面:--xh-border-default 描边 + surface 底 + 无影(§5.3 描边与淡底互斥),
|
|
46
|
+
与 code-view / diff-view / json-viewer 同走 solid */
|
|
12
47
|
position: relative;
|
|
13
48
|
display: flex;
|
|
14
49
|
flex-direction: column;
|
|
15
50
|
overflow: hidden;
|
|
16
51
|
border: var(--xh-stroke-thin) solid var(--xh-log-border, var(--xh-border-default));
|
|
17
52
|
border-radius: var(--xh-log-radius, var(--xh-shape-surface));
|
|
18
|
-
background: var(--xh-log-bg, var(--xh-bg-
|
|
53
|
+
background: var(--xh-log-bg, var(--xh-bg-surface));
|
|
54
|
+
box-shadow: var(--xh-log-shadow, none);
|
|
19
55
|
color: var(--xh-log-fg, var(--xh-fg-default));
|
|
20
56
|
}
|
|
21
57
|
|
|
@@ -43,12 +79,6 @@
|
|
|
43
79
|
scrollbar-gutter: stable;
|
|
44
80
|
}
|
|
45
81
|
|
|
46
|
-
/* 视口带 tabindex=0,需要焦点环;偏移取负画在内侧,避免被 root 裁掉 */
|
|
47
|
-
[data-scope='log'][data-part='viewport']:focus-visible {
|
|
48
|
-
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
49
|
-
outline-offset: calc(-1 * var(--xh-ring-width));
|
|
50
|
-
}
|
|
51
|
-
|
|
52
82
|
/* 取行期间指针给出忙的反馈 */
|
|
53
83
|
[data-scope='log'][data-part='root'][data-loading] [data-scope='log'][data-part='viewport'] {
|
|
54
84
|
cursor: progress;
|
|
@@ -57,9 +87,9 @@
|
|
|
57
87
|
/* 等宽排版落在包裹层上,各行继承;行与行之间不留空隙,视口高度才等于整数行 */
|
|
58
88
|
[data-scope='log'][data-part='content'] {
|
|
59
89
|
display: block;
|
|
60
|
-
padding-inline: var(--xh-log-content-px, var(--xh-
|
|
90
|
+
padding-inline: var(--xh-log-content-px, var(--xh-_log-content-px));
|
|
61
91
|
font-family: var(--xh-log-font, var(--xh-font-family-mono));
|
|
62
|
-
font-size: var(--xh-log-font-size, var(--xh-
|
|
92
|
+
font-size: var(--xh-log-font-size, var(--xh-_log-font-size));
|
|
63
93
|
}
|
|
64
94
|
|
|
65
95
|
[data-scope='log'][data-part='content'][hidden] {
|
|
@@ -72,4 +102,109 @@
|
|
|
72
102
|
white-space: pre;
|
|
73
103
|
tab-size: var(--xh-log-tab-size, 4);
|
|
74
104
|
}
|
|
105
|
+
|
|
106
|
+
/* 级别只染行文颜色,不动排版:一行的高度是定高基准,四档必须等高。
|
|
107
|
+
没写级别的行走内容层的前景色 */
|
|
108
|
+
[data-scope='log'][data-part='line'][data-level='debug'] {
|
|
109
|
+
color: var(--xh-log-level-debug-fg, var(--xh-fg-subtle));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
[data-scope='log'][data-part='line'][data-level='info'] {
|
|
113
|
+
color: var(--xh-log-level-info-fg, var(--xh-fg-default));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
[data-scope='log'][data-part='line'][data-level='warn'] {
|
|
117
|
+
color: var(--xh-log-level-warn-fg, var(--xh-fg-warning));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
[data-scope='log'][data-part='line'][data-level='error'] {
|
|
121
|
+
color: var(--xh-log-level-error-fg, var(--xh-fg-danger));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* 回到底部:浮在视口右下角,收起时不卸载只隐藏。盒型、悬停 / 按下面与缩放由 Action Control 的
|
|
125
|
+
floating 档给(circle 正方盒、ghost 形态:白底承载 hover 100 → pressed 200);材质随角落浮钮族走
|
|
126
|
+
frosted 四件套(底 + 边 + 影 + 磨砂,§8),这里只把使用者槽映射到桥接槽:
|
|
127
|
+
字形按 xs 档取 --xh-_action-profile-glyph-size(16px),与 back-top 同一把尺 */
|
|
128
|
+
[data-scope='log'][data-part='scroll-to-end-trigger'] {
|
|
129
|
+
--xh-_log-scroll-to-end-trigger-shadow: var(--xh-log-scroll-to-end-trigger-shadow, var(--xh-material-frosted-shadow));
|
|
130
|
+
--xh-action-visual-size: var(--xh-log-scroll-to-end-trigger-size, var(--xh-_action-profile-visual-size));
|
|
131
|
+
--xh-action-radius: var(--xh-log-scroll-to-end-trigger-radius, var(--xh-shape-circle));
|
|
132
|
+
--xh-action-bg-rest: var(--xh-log-scroll-to-end-trigger-bg, var(--xh-material-frosted-bg));
|
|
133
|
+
--xh-action-bg-hover: var(--xh-log-scroll-to-end-trigger-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
134
|
+
--xh-action-border-rest: var(--xh-log-scroll-to-end-trigger-border, var(--xh-material-frosted-border));
|
|
135
|
+
--xh-action-border-hover: var(--xh-log-scroll-to-end-trigger-border, var(--xh-material-frosted-border));
|
|
136
|
+
--xh-action-border-pressed: var(--xh-log-scroll-to-end-trigger-border, var(--xh-material-frosted-border));
|
|
137
|
+
--xh-action-border-focus-visible: var(--xh-log-scroll-to-end-trigger-border, var(--xh-material-frosted-border));
|
|
138
|
+
--xh-action-shadow-rest: var(--xh-_log-scroll-to-end-trigger-shadow);
|
|
139
|
+
--xh-action-shadow-hover: var(--xh-_log-scroll-to-end-trigger-shadow);
|
|
140
|
+
--xh-action-shadow-pressed: var(--xh-_log-scroll-to-end-trigger-shadow);
|
|
141
|
+
--xh-action-fg-rest: var(--xh-log-scroll-to-end-trigger-fg, var(--xh-material-frosted-fg));
|
|
142
|
+
--xh-icon-size: var(--xh-log-icon-size, var(--xh-_action-profile-glyph-size));
|
|
143
|
+
|
|
144
|
+
position: absolute;
|
|
145
|
+
inset-block-end: var(--xh-log-scroll-to-end-trigger-inset, var(--xh-space-3));
|
|
146
|
+
inset-inline-end: var(--xh-log-scroll-to-end-trigger-inset, var(--xh-space-3));
|
|
147
|
+
-webkit-backdrop-filter: var(--xh-material-frosted-backdrop);
|
|
148
|
+
backdrop-filter: var(--xh-material-frosted-backdrop);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* 连接层收起按钮时写 hidden 属性,上面的 display 会盖掉 UA 规则,这里补回 */
|
|
152
|
+
[data-scope='log'][data-part='scroll-to-end-trigger'][hidden] {
|
|
153
|
+
display: none;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* 收起不卸载,冒出来时靠这条进场动画;不写 display,可见性归上面那条 [hidden] 管 */
|
|
157
|
+
[data-scope='log'][data-part='scroll-to-end-trigger'][data-state='visible'] {
|
|
158
|
+
animation: xh-log-button-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/* 没写内容就由皮肤画一枚向下的字形;作者往按钮里塞了自己的图形,这条规则即不命中。
|
|
162
|
+
不画的话这颗按钮就是一枚空盒,看不出它是干什么的——名字只在 aria-label 上 */
|
|
163
|
+
[data-scope='log'][data-part='scroll-to-end-trigger']:empty::before {
|
|
164
|
+
content: '';
|
|
165
|
+
display: inline-block;
|
|
166
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-sm));
|
|
167
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-sm));
|
|
168
|
+
vertical-align: var(--xh-glyph-baseline-shift);
|
|
169
|
+
background-color: currentColor;
|
|
170
|
+
-webkit-mask: var(--xh-glyph-mark-chevron-down) center / contain no-repeat;
|
|
171
|
+
mask: var(--xh-glyph-mark-chevron-down) center / contain no-repeat;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/* 尺寸档只改行文字号与内衬 */
|
|
175
|
+
[data-scope='log'][data-part='root'][data-size='sm'] {
|
|
176
|
+
--xh-_log-font-size: var(--xh-text-caption-size);
|
|
177
|
+
--xh-_log-content-px: var(--xh-space-2);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
[data-scope='log'][data-part='root'][data-size='md'] {
|
|
181
|
+
--xh-_log-font-size: var(--xh-text-secondary-size);
|
|
182
|
+
--xh-_log-content-px: var(--xh-space-3);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
[data-scope='log'][data-part='root'][data-size='lg'] {
|
|
186
|
+
--xh-_log-font-size: var(--xh-text-body-size);
|
|
187
|
+
--xh-_log-content-px: var(--xh-space-4);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* 视觉隐藏但仍参与播报:用 clip-path 裁到不可见,不能用 display:none 或 visibility:hidden;
|
|
191
|
+
white-space: nowrap 防止 1px 宽把文本挤成竖排。 */
|
|
192
|
+
[data-scope='log'][data-part='live-region'] {
|
|
193
|
+
position: absolute;
|
|
194
|
+
inline-size: 1px;
|
|
195
|
+
block-size: 1px;
|
|
196
|
+
padding: 0;
|
|
197
|
+
margin: -1px;
|
|
198
|
+
overflow: hidden;
|
|
199
|
+
clip-path: inset(50%);
|
|
200
|
+
white-space: nowrap;
|
|
201
|
+
border: 0;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
@media print {
|
|
205
|
+
/* 打印:回到底部这颗钮只有在能滚的地方才成立,落到纸上是一颗按不动的按钮。 */
|
|
206
|
+
[data-scope='log'][data-part='scroll-to-end-trigger'] {
|
|
207
|
+
display: none;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
75
210
|
}
|