@xihan-ui/styles 1.0.0-alpha.2 → 1.0.0-alpha.3
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 +447 -0
- package/README.md +1 -1
- package/css/accordion.css +56 -5
- package/css/alert.css +30 -5
- package/css/anchor.css +7 -7
- package/css/avatar-group.css +3 -3
- package/css/avatar.css +3 -3
- package/css/back-top.css +16 -1
- package/css/badge.css +16 -2
- package/css/breadcrumb.css +24 -4
- package/css/button-group.css +14 -13
- package/css/button.css +42 -11
- package/css/calendar.css +119 -2
- package/css/card.css +5 -5
- package/css/carousel.css +36 -5
- package/css/cascader.css +183 -102
- package/css/checkbox-group.css +41 -19
- package/css/checkbox.css +54 -8
- package/css/clipboard.css +2 -1
- package/css/code-block.css +12 -7
- package/css/collapsible.css +42 -2
- package/css/color-picker.css +111 -45
- package/css/combobox.css +114 -53
- package/css/composer.css +5 -3
- package/css/context-menu.css +97 -69
- package/css/date-field.css +91 -14
- package/css/date-picker.css +276 -65
- package/css/descriptions.css +2 -2
- package/css/dialog.css +40 -13
- package/css/download-trigger.css +76 -0
- package/css/drawer.css +45 -14
- package/css/dynamic-input.css +68 -17
- package/css/editable.css +12 -10
- package/css/ellipsis.css +1 -1
- package/css/empty-state.css +7 -7
- package/css/field.css +9 -6
- package/css/fieldset.css +69 -0
- package/css/file-upload.css +45 -7
- package/css/float-button.css +16 -1
- package/css/floating-panel.css +310 -0
- package/css/form.css +4 -4
- package/css/heatmap.css +410 -0
- package/css/highlight.css +1 -1
- package/css/hotkeys.css +90 -0
- package/css/hover-card.css +40 -45
- package/css/image-cropper.css +231 -0
- package/css/image-viewer.css +137 -12
- package/css/image.css +2 -2
- package/css/infinite-scroll.css +1 -1
- package/css/json-viewer.css +241 -0
- package/css/layout.css +6 -10
- package/css/list.css +8 -8
- package/css/listbox.css +20 -4
- package/css/loading-bar.css +7 -1
- package/css/log.css +1 -1
- package/css/marquee.css +9 -0
- package/css/masonry.css +63 -0
- package/css/mention.css +87 -33
- package/css/menu.css +113 -47
- package/css/menubar.css +146 -60
- package/css/navigation-menu.css +54 -29
- package/css/number-animation.css +3 -3
- package/css/number-field.css +173 -16
- package/css/overlay-arrow.css +51 -0
- package/css/page-header.css +5 -5
- package/css/pagination.css +13 -13
- package/css/password-input.css +356 -0
- package/css/pin-input.css +13 -10
- package/css/popconfirm.css +46 -10
- package/css/popover.css +70 -45
- package/css/popselect.css +183 -53
- package/css/progress.css +47 -7
- package/css/qr-code.css +1 -1
- package/css/radio-group.css +14 -8
- package/css/rating.css +2 -2
- package/css/reset.css +17 -0
- package/css/result.css +6 -6
- package/css/scroll-area.css +61 -89
- package/css/scrollbar.css +167 -0
- package/css/segmented.css +215 -0
- package/css/select.css +274 -125
- package/css/separator.css +2 -2
- package/css/side-nav.css +111 -19
- package/css/signature-pad.css +144 -0
- package/css/skeleton.css +7 -1
- package/css/slider.css +10 -10
- package/css/space.css +117 -0
- package/css/spinner.css +22 -10
- package/css/statistic.css +9 -9
- package/css/steps.css +25 -8
- package/css/switch.css +48 -6
- package/css/table.css +131 -37
- package/css/tabs.css +4 -4
- package/css/tag.css +177 -0
- package/css/tags-input.css +78 -40
- package/css/text-field.css +149 -36
- package/css/thread.css +1 -1
- package/css/time-field.css +97 -16
- package/css/time-picker.css +259 -69
- package/css/timeline.css +10 -10
- package/css/timer.css +119 -0
- package/css/toast.css +34 -10
- package/css/toaster.css +1 -1
- package/css/toggle.css +6 -6
- package/css/tone.css +10 -5
- package/css/toolbar.css +1 -1
- package/css/tooltip.css +36 -33
- package/css/tour.css +103 -58
- package/css/transfer.css +68 -17
- package/css/tree-select.css +185 -84
- package/css/tree.css +85 -1
- package/css/typography.css +4 -4
- package/css/undefined.css +11 -1
- package/css/virtualizer.css +3 -1
- package/css/watermark.css +1 -2
- package/index.css +17 -0
- package/index.unlayered.css +8659 -2799
- package/package.json +19 -3
package/css/number-field.css
CHANGED
|
@@ -5,16 +5,25 @@
|
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
/* 与文本框同一套堆叠:标签一行、输入行一行。
|
|
8
|
-
|
|
8
|
+
输入框与加减钮放进 control 部件即得一体式:视觉盒画在 control 上,
|
|
9
|
+
减在左、加在右、输入框居中,前后缀图标/文字可直接流式插在框内。
|
|
10
|
+
不写 control 时退回旧式三件并排的观感(下方 input / 按钮的基础规则原样生效) */
|
|
9
11
|
[data-scope='number-field'][data-part='root'] {
|
|
12
|
+
/* 作者塞进来的图标跟着控件的尺寸档走;它自己写了 size 时仍以作者的为准 */
|
|
13
|
+
--xh-icon-size: var(--xh-number-field-icon-size, var(--xh-glyph-size-md));
|
|
14
|
+
|
|
10
15
|
/* 尺寸档只换这几个私有槽,标题、输入框与加减钮都从 root 继承它们,
|
|
11
16
|
换档不必给每个部件各写一条选择器 */
|
|
12
17
|
--xh-_number-field-h: var(--xh-control-h-md);
|
|
13
18
|
--xh-_number-field-px: var(--xh-control-px-md);
|
|
19
|
+
--xh-_number-field-gap: var(--xh-control-gap-md);
|
|
14
20
|
--xh-_number-field-font-size: var(--xh-text-body-size);
|
|
15
21
|
--xh-_number-field-label-font-size: var(--xh-text-label-size);
|
|
16
22
|
--xh-_number-field-trigger-font-size: var(--xh-text-body-size);
|
|
17
23
|
|
|
24
|
+
/* 盒子的圆角 */
|
|
25
|
+
--xh-_number-field-radius: var(--xh-number-field-input-radius, var(--xh-shape-control));
|
|
26
|
+
|
|
18
27
|
/* 形态档只换这几个私有槽:输入框的底与描边,加减钮的底与描边 */
|
|
19
28
|
--xh-_number-field-bg: var(--xh-bg-canvas);
|
|
20
29
|
--xh-_number-field-border: var(--xh-border-control);
|
|
@@ -28,7 +37,7 @@
|
|
|
28
37
|
/* 语气只落在聚焦这一处:环与聚焦态描边。框里的数字不归它管。
|
|
29
38
|
没写 data-tone 时 --xh-_tone 没被声明,退回原来的聚焦环色与常态描边 */
|
|
30
39
|
--xh-_number-field-ring: var(--xh-ring-focus);
|
|
31
|
-
--xh-_number-field-border-focus: var(--xh-number-field-input-border, var(--xh-_tone, var(--xh-border-control)));
|
|
40
|
+
--xh-_number-field-border-focus: var(--xh-number-field-input-border, var(--xh-_tone, var(--xh-border-control-focus)));
|
|
32
41
|
|
|
33
42
|
display: inline-flex;
|
|
34
43
|
flex-direction: column;
|
|
@@ -43,19 +52,23 @@
|
|
|
43
52
|
/* —— 尺寸 —— */
|
|
44
53
|
/* 缺省档写在上面的基础规则里 */
|
|
45
54
|
[data-scope='number-field'][data-part='root'][data-size='sm'] {
|
|
55
|
+
--xh-icon-size: var(--xh-number-field-icon-size, var(--xh-glyph-size-sm));
|
|
46
56
|
--xh-_number-field-h: var(--xh-control-h-sm);
|
|
47
57
|
--xh-_number-field-px: var(--xh-control-px-sm);
|
|
48
|
-
--xh-_number-field-
|
|
49
|
-
--xh-_number-field-
|
|
50
|
-
--xh-_number-field-
|
|
58
|
+
--xh-_number-field-gap: var(--xh-control-gap-sm);
|
|
59
|
+
--xh-_number-field-font-size: var(--xh-control-font-sm);
|
|
60
|
+
--xh-_number-field-label-font-size: var(--xh-control-font-sm);
|
|
61
|
+
--xh-_number-field-trigger-font-size: var(--xh-control-font-sm);
|
|
51
62
|
}
|
|
52
63
|
|
|
53
64
|
[data-scope='number-field'][data-part='root'][data-size='lg'] {
|
|
65
|
+
--xh-icon-size: var(--xh-number-field-icon-size, var(--xh-glyph-size-lg));
|
|
54
66
|
--xh-_number-field-h: var(--xh-control-h-lg);
|
|
55
67
|
--xh-_number-field-px: var(--xh-control-px-lg);
|
|
56
|
-
--xh-_number-field-
|
|
57
|
-
--xh-_number-field-
|
|
58
|
-
--xh-_number-field-
|
|
68
|
+
--xh-_number-field-gap: var(--xh-control-gap-lg);
|
|
69
|
+
--xh-_number-field-font-size: var(--xh-control-font-lg);
|
|
70
|
+
--xh-_number-field-label-font-size: var(--xh-control-font-lg);
|
|
71
|
+
--xh-_number-field-trigger-font-size: var(--xh-control-font-lg);
|
|
59
72
|
}
|
|
60
73
|
|
|
61
74
|
/* —— 形态 —— */
|
|
@@ -70,7 +83,7 @@
|
|
|
70
83
|
--xh-_number-field-trigger-bg-active: var(--xh-bg-subtle-active);
|
|
71
84
|
--xh-_number-field-trigger-border: var(--xh-border-control);
|
|
72
85
|
--xh-_number-field-trigger-border-hover: var(--xh-border-control-hover);
|
|
73
|
-
--xh-_number-field-border-focus: var(--xh-number-field-input-border, var(--xh-_tone, var(--xh-border-control)));
|
|
86
|
+
--xh-_number-field-border-focus: var(--xh-number-field-input-border, var(--xh-_tone, var(--xh-border-control-focus)));
|
|
74
87
|
}
|
|
75
88
|
|
|
76
89
|
/* 填充式:底色顶替描边表达边界。描边只退成透明而不去掉,1px 的位置留着,
|
|
@@ -84,10 +97,10 @@
|
|
|
84
97
|
--xh-_number-field-trigger-bg-active: var(--xh-_tone-subtle-active, var(--xh-bg-subtle-active));
|
|
85
98
|
--xh-_number-field-trigger-border: transparent;
|
|
86
99
|
--xh-_number-field-trigger-border-hover: var(--xh-_tone-border, var(--xh-border-control-hover));
|
|
87
|
-
--xh-_number-field-border-focus: var(--xh-_tone, var(--xh-border-control));
|
|
100
|
+
--xh-_number-field-border-focus: var(--xh-_tone, var(--xh-border-control-focus));
|
|
88
101
|
}
|
|
89
102
|
|
|
90
|
-
/*
|
|
103
|
+
/* 无框:底与常态描边透明,悬停与聚焦浮出描边 */
|
|
91
104
|
[data-scope='number-field'][data-part='root'][data-variant='ghost'] {
|
|
92
105
|
--xh-_number-field-bg: transparent;
|
|
93
106
|
--xh-_number-field-border: transparent;
|
|
@@ -97,7 +110,7 @@
|
|
|
97
110
|
--xh-_number-field-trigger-bg-active: var(--xh-_tone-subtle-active, var(--xh-bg-subtle-active));
|
|
98
111
|
--xh-_number-field-trigger-border: transparent;
|
|
99
112
|
--xh-_number-field-trigger-border-hover: var(--xh-_tone-border, var(--xh-border-control-hover));
|
|
100
|
-
--xh-_number-field-border-focus: var(--xh-_tone, var(--xh-border-control));
|
|
113
|
+
--xh-_number-field-border-focus: var(--xh-_tone, var(--xh-border-control-focus));
|
|
101
114
|
}
|
|
102
115
|
|
|
103
116
|
[data-scope='number-field'][data-part='label'] {
|
|
@@ -111,12 +124,130 @@
|
|
|
111
124
|
color: var(--xh-number-field-label-fg-disabled, var(--xh-fg-subtle));
|
|
112
125
|
}
|
|
113
126
|
|
|
127
|
+
/* —— 一体式 control:输入框与加减钮同框 —— */
|
|
128
|
+
/* control 是唯一的视觉盒:描边、底色、圆角、聚焦环全画在它身上,盒内三件都退成透明分段,
|
|
129
|
+
整枚控件从头到尾只有这一道描边。减钮在前、input 居中、加钮在后(作者在模板里的顺序决定),
|
|
130
|
+
前后缀内容直接流式插在框里。
|
|
131
|
+
focus-within 而不是 :focus 上的聚焦态:按钮也能触发聚焦环 */
|
|
132
|
+
[data-scope='number-field'][data-part='control'] {
|
|
133
|
+
position: relative;
|
|
134
|
+
display: inline-flex;
|
|
135
|
+
/* 居中而不是拉伸:作者插在框里的前后缀是一行文字,被拉满整框高度后字会贴着框顶 */
|
|
136
|
+
align-items: center;
|
|
137
|
+
gap: var(--xh-number-field-control-gap, var(--xh-_number-field-gap));
|
|
138
|
+
min-inline-size: var(--xh-number-field-control-min-w, var(--xh-control-min-w));
|
|
139
|
+
block-size: var(--xh-number-field-control-h, var(--xh-_number-field-h));
|
|
140
|
+
padding-inline: var(--xh-number-field-control-px, var(--xh-_number-field-px));
|
|
141
|
+
border: var(--xh-stroke-thin) solid var(--xh-number-field-input-border, var(--xh-_number-field-border));
|
|
142
|
+
border-radius: var(--xh-_number-field-radius);
|
|
143
|
+
background: var(--xh-number-field-input-bg, var(--xh-_number-field-bg));
|
|
144
|
+
transition: border-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
[data-scope='number-field'][data-part='control']:hover:not([data-disabled], [data-invalid]) {
|
|
148
|
+
border-color: var(--xh-number-field-input-border-hover, var(--xh-_number-field-border-hover));
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
[data-scope='number-field'][data-part='control']:focus-within:not([data-disabled]) {
|
|
152
|
+
border-color: var(--xh-number-field-input-border-focus, var(--xh-_number-field-border-focus));
|
|
153
|
+
outline: var(--xh-ring-width) solid var(--xh-_number-field-ring);
|
|
154
|
+
outline-offset: var(--xh-ring-offset);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
[data-scope='number-field'][data-part='control'][data-invalid] {
|
|
158
|
+
border-color: var(--xh-number-field-input-border-invalid, var(--xh-border-invalid));
|
|
159
|
+
|
|
160
|
+
/* 校验失败时环也跟着变红:两圈等宽相邻却一红一蓝,读的人不知道哪个才是当前状态 */
|
|
161
|
+
--xh-_number-field-ring: var(--xh-ring-invalid);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
[data-scope='number-field'][data-part='control'][data-readonly] {
|
|
165
|
+
background: var(--xh-number-field-input-bg-readonly, var(--xh-bg-subtle));
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
[data-scope='number-field'][data-part='control'][data-disabled] {
|
|
169
|
+
background: var(--xh-number-field-input-bg-disabled, var(--xh-bg-subtle));
|
|
170
|
+
color: var(--xh-fg-disabled);
|
|
171
|
+
cursor: not-allowed;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/* 盒内 input:无边框无底无圆角,观感全归 control;行内内衬也归 control,
|
|
175
|
+
这里再留一份就是框内套了一圈空白。数字居中排在两个按钮之间;
|
|
176
|
+
前后缀图标/文字直接流式排在 input 两侧,不用再绝对定位 */
|
|
177
|
+
[data-scope='number-field'][data-part='control'] [data-part='input'] {
|
|
178
|
+
flex: 1 1 auto;
|
|
179
|
+
inline-size: var(--xh-number-field-input-w, 5em);
|
|
180
|
+
min-inline-size: 0;
|
|
181
|
+
block-size: 100%;
|
|
182
|
+
padding-inline: 0;
|
|
183
|
+
border: 0;
|
|
184
|
+
border-radius: 0;
|
|
185
|
+
background: transparent;
|
|
186
|
+
text-align: var(--xh-number-field-input-align, center);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* 盒内 input 不再自己画各态,全部交还 control。hover 这条带上与基础规则同样的
|
|
190
|
+
:not 条件:基础 hover 的特异度里有它们,不带就打不过 */
|
|
191
|
+
[data-scope='number-field'][data-part='control'] [data-part='input']:hover:not(:disabled, [data-invalid]) {
|
|
192
|
+
border-color: transparent;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
[data-scope='number-field'][data-part='control'] [data-part='input']:focus-visible {
|
|
196
|
+
border-color: transparent;
|
|
197
|
+
outline: none;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
[data-scope='number-field'][data-part='control'] [data-part='input'][data-invalid] {
|
|
201
|
+
border-color: transparent;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
[data-scope='number-field'][data-part='control'] [data-part='input']:disabled,
|
|
205
|
+
[data-scope='number-field'][data-part='control'] [data-part='input'][readonly] {
|
|
206
|
+
background: transparent;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/* 盒内按钮:尺寸与圆角走基础规则那枚行内动作方钮,这里只把底与描边交还 control——
|
|
210
|
+
按钮自带一块底色就会把一个盒子读成三块拼起来的;
|
|
211
|
+
常态只剩符号,符号取次级前景,悬停与按下才浮出底色 */
|
|
212
|
+
[data-scope='number-field'][data-part='control'] [data-part='increment-trigger'],
|
|
213
|
+
[data-scope='number-field'][data-part='control'] [data-part='decrement-trigger'] {
|
|
214
|
+
margin: 0;
|
|
215
|
+
border: 0;
|
|
216
|
+
background: transparent;
|
|
217
|
+
color: var(--xh-number-field-trigger-fg, var(--xh-fg-muted));
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/* 悬停只在分段自己身上浮出一块底色与更实的符号,盒子的描边纹丝不动 */
|
|
221
|
+
[data-scope='number-field'][data-part='control'] [data-part='increment-trigger']:hover:not(:disabled),
|
|
222
|
+
[data-scope='number-field'][data-part='control'] [data-part='decrement-trigger']:hover:not(:disabled) {
|
|
223
|
+
background: var(--xh-number-field-trigger-bg-hover, var(--xh-_number-field-trigger-bg-hover));
|
|
224
|
+
color: var(--xh-number-field-trigger-fg-hover, var(--xh-fg-default));
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
[data-scope='number-field'][data-part='control'] [data-part='increment-trigger']:active:not(:disabled),
|
|
228
|
+
[data-scope='number-field'][data-part='control'] [data-part='decrement-trigger']:active:not(:disabled) {
|
|
229
|
+
background: var(--xh-number-field-trigger-bg-active, var(--xh-_number-field-trigger-bg-active));
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/* 焦点落到盒内按钮时 control 已经 focus-within 起了环,按钮自己再画一圈就是框里套框 */
|
|
233
|
+
[data-scope='number-field'][data-part='control'] [data-part='increment-trigger']:focus-visible,
|
|
234
|
+
[data-scope='number-field'][data-part='control'] [data-part='decrement-trigger']:focus-visible {
|
|
235
|
+
outline: none;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/* 贴住 min / max 的那一侧只把符号压灰,不铺一块灰底:铺了底就又成了框上贴着的一个方块 */
|
|
239
|
+
[data-scope='number-field'][data-part='control'] [data-part='increment-trigger']:disabled,
|
|
240
|
+
[data-scope='number-field'][data-part='control'] [data-part='decrement-trigger']:disabled {
|
|
241
|
+
background: transparent;
|
|
242
|
+
color: var(--xh-fg-disabled);
|
|
243
|
+
}
|
|
244
|
+
|
|
114
245
|
[data-scope='number-field'][data-part='input'] {
|
|
115
246
|
block-size: var(--xh-number-field-input-h, var(--xh-_number-field-h));
|
|
116
247
|
padding-inline: var(--xh-number-field-input-px, var(--xh-_number-field-px));
|
|
117
248
|
padding-block: 0;
|
|
118
249
|
border: var(--xh-stroke-thin) solid var(--xh-number-field-input-border, var(--xh-_number-field-border));
|
|
119
|
-
border-radius: var(--xh-
|
|
250
|
+
border-radius: var(--xh-_number-field-radius);
|
|
120
251
|
background: var(--xh-number-field-input-bg, var(--xh-_number-field-bg));
|
|
121
252
|
color: var(--xh-number-field-input-fg, var(--xh-fg-default));
|
|
122
253
|
/* 表单控件不继承页面字体,只给字号会让输入框用 UA 默认字族 */
|
|
@@ -146,7 +277,10 @@
|
|
|
146
277
|
}
|
|
147
278
|
|
|
148
279
|
[data-scope='number-field'][data-part='input'][data-invalid] {
|
|
149
|
-
border-color: var(--xh-number-field-input-border-invalid, var(--xh-
|
|
280
|
+
border-color: var(--xh-number-field-input-border-invalid, var(--xh-border-invalid));
|
|
281
|
+
|
|
282
|
+
/* 校验失败时环也跟着变红:两圈等宽相邻却一红一蓝,读的人不知道哪个才是当前状态 */
|
|
283
|
+
--xh-_number-field-ring: var(--xh-ring-invalid);
|
|
150
284
|
}
|
|
151
285
|
|
|
152
286
|
/* 只读仍可聚焦、可复制,不置灰,只把底色压下去表示"改不动" */
|
|
@@ -169,8 +303,8 @@
|
|
|
169
303
|
flex: none;
|
|
170
304
|
align-items: center;
|
|
171
305
|
justify-content: center;
|
|
172
|
-
inline-size: var(--xh-number-field-trigger-size, var(--xh-
|
|
173
|
-
block-size: var(--xh-number-field-trigger-size, var(--xh-
|
|
306
|
+
inline-size: var(--xh-number-field-trigger-size, var(--xh-control-action-size));
|
|
307
|
+
block-size: var(--xh-number-field-trigger-size, var(--xh-control-action-size));
|
|
174
308
|
padding: 0;
|
|
175
309
|
border: var(--xh-stroke-thin) solid var(--xh-number-field-trigger-border, var(--xh-_number-field-trigger-border));
|
|
176
310
|
border-radius: var(--xh-number-field-trigger-radius, var(--xh-shape-control));
|
|
@@ -221,4 +355,27 @@
|
|
|
221
355
|
color: var(--xh-fg-disabled);
|
|
222
356
|
cursor: not-allowed;
|
|
223
357
|
}
|
|
358
|
+
|
|
359
|
+
/* 没写内容就由皮肤画兜底字形;作者往部件里塞了自己的图形,这几条即不命中 */
|
|
360
|
+
[data-scope='number-field'][data-part='increment-trigger']:empty::before {
|
|
361
|
+
content: '';
|
|
362
|
+
display: inline-block;
|
|
363
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
364
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
365
|
+
vertical-align: var(--xh-glyph-baseline-shift);
|
|
366
|
+
background-color: currentColor;
|
|
367
|
+
-webkit-mask: var(--xh-glyph-mark-plus) center / contain no-repeat;
|
|
368
|
+
mask: var(--xh-glyph-mark-plus) center / contain no-repeat;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
[data-scope='number-field'][data-part='decrement-trigger']:empty::before {
|
|
372
|
+
content: '';
|
|
373
|
+
display: inline-block;
|
|
374
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
375
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
376
|
+
vertical-align: var(--xh-glyph-baseline-shift);
|
|
377
|
+
background-color: currentColor;
|
|
378
|
+
-webkit-mask: var(--xh-glyph-mark-minus) center / contain no-repeat;
|
|
379
|
+
mask: var(--xh-glyph-mark-minus) center / contain no-repeat;
|
|
380
|
+
}
|
|
224
381
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* 浮层箭头的几何,六份浮层皮肤共用一份,按 [data-part='arrow'] 匹配。
|
|
3
|
+
*
|
|
4
|
+
* 箭头是正方形转 45°,构成尖角的是哪两条物理边,所以贴边与摘边框都写物理属性。
|
|
5
|
+
* 行内轴上的中心点仍写逻辑属性:定位引擎在 RTL 下已把 arrow-x 镜像成逻辑量。
|
|
6
|
+
*
|
|
7
|
+
* 底色与描边色留在各组件皮肤,它们同时把自己的内联落点槽接到这里的统一名字上。
|
|
8
|
+
* 引入顺序排在六份浮层皮肤之后:摘边框那几条要压过各皮肤的 border 简写。
|
|
9
|
+
*/
|
|
10
|
+
@layer xihan.components {
|
|
11
|
+
[data-part='arrow'] {
|
|
12
|
+
position: absolute;
|
|
13
|
+
inline-size: var(--xh-_overlay-arrow-size);
|
|
14
|
+
block-size: var(--xh-_overlay-arrow-size);
|
|
15
|
+
rotate: 45deg;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* 浮层落在锚点下方:箭头贴 content 上缘,摘掉埋进 content 的下、右两条边 */
|
|
19
|
+
[data-part='arrow'][data-placement^='bottom'] {
|
|
20
|
+
top: calc(var(--xh-_overlay-arrow-size) / -2);
|
|
21
|
+
inset-inline-start: calc(var(--xh-_overlay-arrow-x) - var(--xh-_overlay-arrow-size) / 2);
|
|
22
|
+
border-right: 0;
|
|
23
|
+
border-bottom: 0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* 浮层落在锚点上方:箭头贴 content 下缘,摘掉上、左两条边 */
|
|
27
|
+
[data-part='arrow'][data-placement^='top'] {
|
|
28
|
+
bottom: calc(var(--xh-_overlay-arrow-size) / -2);
|
|
29
|
+
inset-inline-start: calc(var(--xh-_overlay-arrow-x) - var(--xh-_overlay-arrow-size) / 2);
|
|
30
|
+
border-top: 0;
|
|
31
|
+
border-left: 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* 浮层落在锚点右侧:箭头贴 content 左缘,摘掉上、右两条边 */
|
|
35
|
+
[data-part='arrow'][data-placement^='right'] {
|
|
36
|
+
top: calc(var(--xh-_overlay-arrow-y) - var(--xh-_overlay-arrow-size) / 2);
|
|
37
|
+
/* stylelint-disable-next-line property-disallowed-list -- 旋转是物理的,贴边跟着物理走 */
|
|
38
|
+
left: calc(var(--xh-_overlay-arrow-size) / -2);
|
|
39
|
+
border-top: 0;
|
|
40
|
+
border-right: 0;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* 浮层落在锚点左侧:箭头贴 content 右缘,摘掉下、左两条边 */
|
|
44
|
+
[data-part='arrow'][data-placement^='left'] {
|
|
45
|
+
top: calc(var(--xh-_overlay-arrow-y) - var(--xh-_overlay-arrow-size) / 2);
|
|
46
|
+
/* stylelint-disable-next-line property-disallowed-list -- 旋转是物理的,贴边跟着物理走 */
|
|
47
|
+
right: calc(var(--xh-_overlay-arrow-size) / -2);
|
|
48
|
+
border-bottom: 0;
|
|
49
|
+
border-left: 0;
|
|
50
|
+
}
|
|
51
|
+
}
|
package/css/page-header.css
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
/* 尺寸档只换这三个私有槽,各段从根上继承它们,换档不必给每个部件各写一条选择器 */
|
|
9
9
|
--xh-_page-header-py: var(--xh-space-4);
|
|
10
10
|
--xh-_page-header-row-gap: var(--xh-space-2);
|
|
11
|
-
--xh-_page-header-title-size: var(--xh-
|
|
11
|
+
--xh-_page-header-title-size: var(--xh-text-heading-3-size);
|
|
12
12
|
|
|
13
13
|
/* 一行排不下就折行;返回位、标题、副标题排在同一行,操作贴到行尾,页脚整行另起 */
|
|
14
14
|
display: flex;
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
[data-scope='page-header'][data-part='root'][data-size='sm'] {
|
|
30
30
|
--xh-_page-header-py: var(--xh-space-3);
|
|
31
31
|
--xh-_page-header-row-gap: var(--xh-space-1);
|
|
32
|
-
--xh-_page-header-title-size: var(--xh-font-
|
|
32
|
+
--xh-_page-header-title-size: var(--xh-control-font-lg);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
[data-scope='page-header'][data-part='root'][data-size='lg'] {
|
|
36
36
|
--xh-_page-header-py: var(--xh-space-6);
|
|
37
37
|
--xh-_page-header-row-gap: var(--xh-space-3);
|
|
38
|
-
--xh-_page-header-title-size: var(--xh-
|
|
38
|
+
--xh-_page-header-title-size: var(--xh-text-heading-2-size);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
/* —— 分隔线 —— */
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
flex: 1 1 auto;
|
|
68
68
|
min-inline-size: 0;
|
|
69
69
|
color: var(--xh-page-header-subtitle-fg, var(--xh-fg-muted));
|
|
70
|
-
font-size: var(--xh-page-header-subtitle-font-size, var(--xh-
|
|
70
|
+
font-size: var(--xh-page-header-subtitle-font-size, var(--xh-text-secondary-size));
|
|
71
71
|
line-height: var(--xh-leading-normal);
|
|
72
72
|
}
|
|
73
73
|
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
[data-scope='page-header'][data-part='footer'] {
|
|
85
85
|
flex: 1 0 100%;
|
|
86
86
|
color: var(--xh-page-header-footer-fg, var(--xh-fg-muted));
|
|
87
|
-
font-size: var(--xh-page-header-footer-font-size, var(--xh-
|
|
87
|
+
font-size: var(--xh-page-header-footer-font-size, var(--xh-text-secondary-size));
|
|
88
88
|
line-height: var(--xh-leading-normal);
|
|
89
89
|
}
|
|
90
90
|
}
|
package/css/pagination.css
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
/* 尺寸档只换这三个私有槽,上一页/下一页、页码与省略号都从 root 继承它们,
|
|
12
12
|
换档不必给每个部件各写一条选择器 */
|
|
13
13
|
--xh-_pagination-item-size: var(--xh-control-h-md);
|
|
14
|
-
--xh-_pagination-item-px: var(--xh-
|
|
14
|
+
--xh-_pagination-item-px: var(--xh-control-px-md);
|
|
15
15
|
--xh-_pagination-font-size: var(--xh-text-label-size);
|
|
16
16
|
|
|
17
17
|
/* 当前页的选中态随语气走。没写 data-tone 时这几个 --xh-_tone-* 都没被声明,
|
|
@@ -29,18 +29,18 @@
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/* —— 尺寸 —— */
|
|
32
|
-
/*
|
|
33
|
-
|
|
32
|
+
/* 缺省档写在上面的基础规则里。格子高度、内边距、字号三者各走控件尺的同一档;
|
|
33
|
+
页码格子靠最小宽度撑等宽,内边距只在页码超出最小宽度时才起作用 */
|
|
34
34
|
[data-scope='pagination'][data-part='root'][data-size='sm'] {
|
|
35
35
|
--xh-_pagination-item-size: var(--xh-control-h-sm);
|
|
36
|
-
--xh-_pagination-item-px: var(--xh-
|
|
37
|
-
--xh-_pagination-font-size: var(--xh-font-
|
|
36
|
+
--xh-_pagination-item-px: var(--xh-control-px-sm);
|
|
37
|
+
--xh-_pagination-font-size: var(--xh-control-font-sm);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
[data-scope='pagination'][data-part='root'][data-size='lg'] {
|
|
41
41
|
--xh-_pagination-item-size: var(--xh-control-h-lg);
|
|
42
|
-
--xh-_pagination-item-px: var(--xh-
|
|
43
|
-
--xh-_pagination-font-size: var(--xh-font-
|
|
42
|
+
--xh-_pagination-item-px: var(--xh-control-px-lg);
|
|
43
|
+
--xh-_pagination-font-size: var(--xh-control-font-lg);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
[data-scope='pagination'][data-part='root'][hidden] {
|
|
@@ -98,13 +98,13 @@
|
|
|
98
98
|
页码条目从不禁用(连接层只给上一页/下一页发原生 disabled),故这边不必再排除 :disabled */
|
|
99
99
|
[data-scope='pagination'][data-part='prev-trigger']:hover:not(:disabled),
|
|
100
100
|
[data-scope='pagination'][data-part='next-trigger']:hover:not(:disabled),
|
|
101
|
-
[data-scope='pagination'][data-part='item']:not([data-
|
|
101
|
+
[data-scope='pagination'][data-part='item']:not([data-current]):hover {
|
|
102
102
|
background: var(--xh-pagination-item-bg-hover, var(--xh-bg-subtle-hover));
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
[data-scope='pagination'][data-part='prev-trigger']:active:not(:disabled),
|
|
106
106
|
[data-scope='pagination'][data-part='next-trigger']:active:not(:disabled),
|
|
107
|
-
[data-scope='pagination'][data-part='item']:not([data-
|
|
107
|
+
[data-scope='pagination'][data-part='item']:not([data-current]):active {
|
|
108
108
|
background: var(--xh-pagination-item-bg-active, var(--xh-bg-subtle-active));
|
|
109
109
|
}
|
|
110
110
|
|
|
@@ -124,21 +124,21 @@
|
|
|
124
124
|
cursor: not-allowed;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
/* 当前页:data-
|
|
127
|
+
/* 当前页:data-current 与 aria-current='page' 由连接层成对给出,
|
|
128
128
|
样式挂在 data 钩子上,无障碍语义留给 aria,两边各司其职。
|
|
129
129
|
只换底色不加粗——字重一变字形就变宽,页码格子会跟着长一点,正是这里要避免的抖动 */
|
|
130
|
-
[data-scope='pagination'][data-part='item'][data-
|
|
130
|
+
[data-scope='pagination'][data-part='item'][data-current] {
|
|
131
131
|
border-color: var(--xh-pagination-item-border-selected, var(--xh-_pagination-selected-bg));
|
|
132
132
|
background: var(--xh-pagination-item-bg-selected, var(--xh-_pagination-selected-bg));
|
|
133
133
|
color: var(--xh-pagination-item-fg-selected, var(--xh-_pagination-selected-fg));
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
[data-scope='pagination'][data-part='item'][data-
|
|
136
|
+
[data-scope='pagination'][data-part='item'][data-current]:hover {
|
|
137
137
|
border-color: var(--xh-pagination-item-border-selected-hover, var(--xh-_pagination-selected-bg-hover));
|
|
138
138
|
background: var(--xh-pagination-item-bg-selected-hover, var(--xh-_pagination-selected-bg-hover));
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
[data-scope='pagination'][data-part='item'][data-
|
|
141
|
+
[data-scope='pagination'][data-part='item'][data-current]:active {
|
|
142
142
|
border-color: var(--xh-pagination-item-border-selected-active, var(--xh-_pagination-selected-bg-active));
|
|
143
143
|
background: var(--xh-pagination-item-bg-selected-active, var(--xh-_pagination-selected-bg-active));
|
|
144
144
|
}
|