@xihan-ui/styles 3.2.0 → 4.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 +441 -0
- package/component-tokens.d.ts +229 -60
- package/components.tokens.json +5124 -1555
- package/css/accordion.css +47 -20
- package/css/alert.css +14 -15
- package/css/anchor.css +2 -2
- package/css/approval.css +37 -13
- package/css/avatar-group.css +9 -12
- package/css/avatar.css +20 -18
- package/css/back-top.css +21 -7
- package/css/badge.css +5 -5
- package/css/breadcrumb.css +18 -16
- package/css/button-group.css +4 -6
- package/css/button.css +4 -7
- package/css/calendar-picker.css +177 -94
- package/css/calendar-range-picker.css +206 -121
- package/css/card.css +34 -6
- package/css/carousel.css +65 -49
- package/css/cascader.css +41 -29
- package/css/checkbox-group.css +9 -6
- package/css/checkbox.css +5 -4
- package/css/citation.css +7 -2
- package/css/clipboard.css +20 -4
- package/css/collapsible.css +29 -14
- package/css/color-field.css +4 -4
- package/css/color-picker.css +77 -23
- package/css/color-slider.css +10 -8
- package/css/color-swatch-picker.css +5 -5
- package/css/combobox.css +14 -10
- package/css/command.css +13 -8
- package/css/context-menu.css +10 -5
- package/css/date-field.css +4 -4
- package/css/date-picker.css +165 -102
- package/css/date-range-picker.css +186 -123
- package/css/description.css +10 -6
- package/css/descriptions.css +47 -19
- package/css/dialog.css +50 -35
- package/css/drawer.css +75 -21
- package/css/editable.css +15 -41
- package/css/empty-state.css +21 -3
- package/css/field-array.css +4 -1
- package/css/field.css +17 -18
- package/css/fieldset.css +33 -13
- package/css/file-upload.css +65 -32
- package/css/float-button.css +25 -15
- package/css/floating-panel.css +1 -1
- package/css/form.css +24 -10
- package/css/grid-list.css +1 -1
- package/css/highlight.css +4 -4
- package/css/hover-card.css +19 -12
- package/css/image-viewer.css +77 -27
- package/css/image.css +12 -4
- package/css/infinite-scroll.css +8 -4
- package/css/input-group.css +74 -26
- package/css/kbd.css +1 -1
- package/css/label.css +27 -11
- package/css/layout.css +17 -10
- package/css/list.css +13 -9
- package/css/listbox.css +12 -7
- package/css/loading-bar.css +3 -0
- package/css/mention.css +10 -8
- package/css/menu.css +10 -5
- package/css/menubar.css +13 -8
- package/css/navigation-menu.css +2 -2
- package/css/notification.css +114 -31
- package/css/number-animation.css +2 -2
- package/css/number-field.css +60 -37
- package/css/page-header.css +63 -26
- package/css/pagination.css +35 -38
- package/css/password-input.css +10 -66
- package/css/pin-input.css +18 -26
- package/css/popconfirm.css +20 -11
- package/css/popover.css +18 -12
- package/css/progress.css +14 -13
- package/css/prompt-input.css +3 -3
- package/css/question-flow.css +33 -7
- package/css/radio-group.css +120 -55
- package/css/rating.css +31 -14
- package/css/select.css +14 -10
- package/css/separator.css +22 -4
- package/css/side-nav.css +16 -11
- package/css/signature-pad.css +23 -9
- package/css/skeleton.css +7 -7
- package/css/slider.css +71 -42
- package/css/sparkline.css +8 -2
- package/css/spinner.css +40 -20
- package/css/statistic.css +14 -14
- package/css/steps.css +115 -84
- package/css/switch.css +9 -7
- package/css/table.css +27 -10
- package/css/tabs.css +35 -12
- package/css/tag-group.css +17 -6
- package/css/tag.css +54 -29
- package/css/tags-input.css +38 -19
- package/css/text-field.css +5 -5
- package/css/time-field.css +4 -4
- package/css/time-picker.css +150 -64
- package/css/time-range-picker.css +91 -62
- package/css/timeline.css +37 -20
- package/css/timer.css +3 -3
- package/css/toggle-group.css +4 -4
- package/css/tool-call.css +6 -4
- package/css/toolbar.css +6 -5
- package/css/tooltip.css +15 -16
- package/css/tour.css +14 -7
- package/css/transfer.css +22 -16
- package/css/tree-select.css +10 -10
- package/css/tree.css +26 -25
- package/css/typography.css +28 -25
- package/dist/css/accordion.css +47 -20
- package/dist/css/alert.css +14 -15
- package/dist/css/anchor.css +2 -2
- package/dist/css/approval.css +37 -13
- package/dist/css/avatar-group.css +9 -12
- package/dist/css/avatar.css +20 -18
- package/dist/css/back-top.css +21 -7
- package/dist/css/badge.css +5 -5
- package/dist/css/breadcrumb.css +18 -16
- package/dist/css/button-group.css +4 -6
- package/dist/css/button.css +4 -7
- package/dist/css/calendar-picker.css +177 -94
- package/dist/css/calendar-range-picker.css +206 -121
- package/dist/css/card.css +34 -6
- package/dist/css/carousel.css +65 -49
- package/dist/css/cascader.css +41 -29
- package/dist/css/checkbox-group.css +9 -6
- package/dist/css/checkbox.css +5 -4
- package/dist/css/citation.css +7 -2
- package/dist/css/clipboard.css +20 -4
- package/dist/css/collapsible.css +29 -14
- package/dist/css/color-field.css +4 -4
- package/dist/css/color-picker.css +77 -23
- package/dist/css/color-slider.css +10 -8
- package/dist/css/color-swatch-picker.css +5 -5
- package/dist/css/combobox.css +14 -10
- package/dist/css/command.css +13 -8
- package/dist/css/context-menu.css +10 -5
- package/dist/css/date-field.css +4 -4
- package/dist/css/date-picker.css +165 -102
- package/dist/css/date-range-picker.css +186 -123
- package/dist/css/description.css +10 -6
- package/dist/css/descriptions.css +47 -19
- package/dist/css/dialog.css +50 -35
- package/dist/css/drawer.css +75 -21
- package/dist/css/editable.css +15 -41
- package/dist/css/empty-state.css +21 -3
- package/dist/css/field-array.css +4 -1
- package/dist/css/field.css +17 -18
- package/dist/css/fieldset.css +33 -13
- package/dist/css/file-upload.css +65 -32
- package/dist/css/float-button.css +25 -15
- package/dist/css/floating-panel.css +1 -1
- package/dist/css/form.css +24 -10
- package/dist/css/grid-list.css +1 -1
- package/dist/css/highlight.css +4 -4
- package/dist/css/hover-card.css +19 -12
- package/dist/css/image-viewer.css +77 -27
- package/dist/css/image.css +12 -4
- package/dist/css/infinite-scroll.css +8 -4
- package/dist/css/input-group.css +74 -26
- package/dist/css/kbd.css +1 -1
- package/dist/css/label.css +27 -11
- package/dist/css/layout.css +17 -10
- package/dist/css/list.css +13 -9
- package/dist/css/listbox.css +12 -7
- package/dist/css/loading-bar.css +3 -0
- package/dist/css/mention.css +10 -8
- package/dist/css/menu.css +10 -5
- package/dist/css/menubar.css +13 -8
- package/dist/css/navigation-menu.css +2 -2
- package/dist/css/notification.css +114 -31
- package/dist/css/number-animation.css +2 -2
- package/dist/css/number-field.css +60 -37
- package/dist/css/page-header.css +63 -26
- package/dist/css/pagination.css +35 -38
- package/dist/css/password-input.css +10 -66
- package/dist/css/pin-input.css +18 -26
- package/dist/css/popconfirm.css +20 -11
- package/dist/css/popover.css +18 -12
- package/dist/css/progress.css +14 -13
- package/dist/css/prompt-input.css +3 -3
- package/dist/css/question-flow.css +33 -7
- package/dist/css/radio-group.css +120 -55
- package/dist/css/rating.css +31 -14
- package/dist/css/select.css +14 -10
- package/dist/css/separator.css +22 -4
- package/dist/css/side-nav.css +16 -11
- package/dist/css/signature-pad.css +23 -9
- package/dist/css/skeleton.css +7 -7
- package/dist/css/slider.css +71 -42
- package/dist/css/sparkline.css +8 -2
- package/dist/css/spinner.css +40 -20
- package/dist/css/statistic.css +14 -14
- package/dist/css/steps.css +115 -84
- package/dist/css/switch.css +9 -7
- package/dist/css/table.css +27 -10
- package/dist/css/tabs.css +35 -12
- package/dist/css/tag-group.css +17 -6
- package/dist/css/tag.css +54 -29
- package/dist/css/tags-input.css +38 -19
- package/dist/css/text-field.css +5 -5
- package/dist/css/time-field.css +4 -4
- package/dist/css/time-picker.css +150 -64
- package/dist/css/time-range-picker.css +91 -62
- package/dist/css/timeline.css +37 -20
- package/dist/css/timer.css +3 -3
- package/dist/css/toggle-group.css +4 -4
- package/dist/css/tool-call.css +6 -4
- package/dist/css/toolbar.css +6 -5
- package/dist/css/tooltip.css +15 -16
- package/dist/css/tour.css +14 -7
- package/dist/css/transfer.css +22 -16
- package/dist/css/tree-select.css +10 -10
- package/dist/css/tree.css +26 -25
- package/dist/css/typography.css +28 -25
- package/dist/family/action-control.css +30 -24
- package/dist/family/chart.css +57 -0
- package/dist/family/collection-item.css +12 -8
- package/dist/family/field-chrome.css +28 -19
- package/dist/family/loading-ring.css +20 -13
- package/dist/family/swatch.css +4 -4
- package/dist/family/tag-list.css +6 -0
- package/family/action-control.css +30 -24
- package/family/chart.css +57 -0
- package/family/collection-item.css +12 -8
- package/family/field-chrome.css +28 -19
- package/family/loading-ring.css +20 -13
- package/family/swatch.css +4 -4
- package/family/tag-list.css +6 -0
- package/index.css +3580 -2060
- package/index.unlayered.css +3579 -2060
- package/package.json +2 -2
package/css/slider.css
CHANGED
|
@@ -17,11 +17,12 @@
|
|
|
17
17
|
切换 orientation 的那一帧还会跟连接层清空另一轴的动作抢位置,把拇指钉在两轴都被约束的地方。
|
|
18
18
|
皮肤只管另一条轴(交叉轴)的尺寸、颜色、圆角与状态表现。 */
|
|
19
19
|
|
|
20
|
-
/* 私有槽位:组件令牌 →
|
|
21
|
-
三个角色节点用到,收成两个槽位挂在 root 上,尺寸档只改这两处,靠继承发到子部件。
|
|
20
|
+
/* 私有槽位:组件令牌 → 中档两级回退。轨道厚度与拇指直径同时被 control / track / thumb
|
|
21
|
+
三个角色节点用到,收成两个槽位挂在 root 上,尺寸档只改这两处,靠继承发到子部件。
|
|
22
|
+
中档是一条 2px 的细轨(描边粗档)配 12px 的拇指(轨道拇指的 md 档) */
|
|
22
23
|
[data-scope='slider'][data-part='root'] {
|
|
23
|
-
--xh-_thumb-size: var(--xh-slider-thumb-size, var(--xh-track-thumb-size));
|
|
24
|
-
--xh-_track-thickness: var(--xh-slider-track-thickness, var(--xh-
|
|
24
|
+
--xh-_thumb-size: var(--xh-slider-thumb-size, var(--xh-track-thumb-size-md));
|
|
25
|
+
--xh-_track-thickness: var(--xh-slider-track-thickness, var(--xh-stroke-thick));
|
|
25
26
|
|
|
26
27
|
display: flex;
|
|
27
28
|
flex-direction: column;
|
|
@@ -38,15 +39,17 @@
|
|
|
38
39
|
/* 禁用不整体压暗:前景与表面各自降级——连接层把 data-disabled 发到每个角色节点上,
|
|
39
40
|
轨道、区间、拇指、刻度与标签就近消费,写在各自的规则里 */
|
|
40
41
|
|
|
41
|
-
/* 字段标签:14 /
|
|
42
|
+
/* 字段标签:14 / 400 / fg-muted,与控件隔 space-2,禁用不另变色 */
|
|
42
43
|
[data-scope='slider'][data-part='label'] {
|
|
43
|
-
|
|
44
|
+
/* 竖排时标签与控件之间的距离:根的 gap 之上补一段差值,--xh-slider-label-gap 给多少最终就是多少 */
|
|
45
|
+
margin-block-end: calc(var(--xh-slider-label-gap, var(--xh-space-2)) - var(--xh-slider-gap, var(--xh-space-1)));
|
|
46
|
+
color: var(--xh-slider-label-fg, var(--xh-fg-muted));
|
|
44
47
|
font-size: var(--xh-slider-label-font-size, var(--xh-text-label-size));
|
|
45
48
|
font-weight: var(--xh-slider-label-font-weight, var(--xh-text-label-weight));
|
|
46
49
|
}
|
|
47
50
|
|
|
48
51
|
[data-scope='slider'][data-part='label'][data-disabled] {
|
|
49
|
-
color: var(--xh-slider-label-fg-disabled, var(--xh-fg-
|
|
52
|
+
color: var(--xh-slider-label-fg-disabled, var(--xh-fg-muted));
|
|
50
53
|
}
|
|
51
54
|
|
|
52
55
|
/* 拇指以它为定位上下文(拇指常常浮出轨道,挂在 track 上会被轨道的盒子束住)。
|
|
@@ -88,12 +91,40 @@
|
|
|
88
91
|
cursor: not-allowed;
|
|
89
92
|
}
|
|
90
93
|
|
|
94
|
+
/* 粗指针:控件只有拇指那么厚,命中区沿交叉轴外扩,补足到粗指针命中下限(--xh-control-hit-coarse)。
|
|
95
|
+
外扩总量是「下限 − 拇指直径」,按拇指算而不是写死一格,sm 档 10px 的拇指也补得到下限。
|
|
96
|
+
横排时块首朝着标签:那一侧只扩半个余量、且不越过标签与控件之间的间距,点在标签上仍归标签、不直接跳值;
|
|
97
|
+
少扩的那一截挪到块尾补齐。竖排时标签不在行内轴上,两侧对称各扩一半。
|
|
98
|
+
落指在轨道上下这一截也能按下即跳、接着拖;伪元素排在刻度之前,刻度文案仍压在它上面接得到点按 */
|
|
99
|
+
@media (pointer: coarse) {
|
|
100
|
+
[data-scope='slider'][data-part='control'][data-orientation='horizontal']::before {
|
|
101
|
+
--xh-_slider-hit-start: min(
|
|
102
|
+
var(--xh-slider-label-gap, var(--xh-space-2)),
|
|
103
|
+
(var(--xh-control-hit-coarse) - var(--xh-_thumb-size)) / 2
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
content: '';
|
|
107
|
+
position: absolute;
|
|
108
|
+
inset-block-start: calc(-1 * var(--xh-_slider-hit-start));
|
|
109
|
+
inset-block-end: calc(var(--xh-_slider-hit-start) + var(--xh-_thumb-size) - var(--xh-control-hit-coarse));
|
|
110
|
+
inset-inline: 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
[data-scope='slider'][data-part='control'][data-orientation='vertical']::before {
|
|
114
|
+
content: '';
|
|
115
|
+
position: absolute;
|
|
116
|
+
inset-block: 0;
|
|
117
|
+
inset-inline: calc((var(--xh-_thumb-size) - var(--xh-control-hit-coarse)) / 2);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
91
121
|
/* 已选区间以它为定位上下文。不写 overflow: hidden:作者把拇指写进轨道里也是合法结构,
|
|
92
122
|
一裁就把拇指切掉半个;区间的圆角由它自己那条 border-radius 兜住,本就不靠轨道来裁。 */
|
|
93
123
|
[data-scope='slider'][data-part='track'] {
|
|
94
124
|
position: relative;
|
|
95
125
|
border-radius: var(--xh-slider-track-radius, var(--xh-shape-pill));
|
|
96
|
-
|
|
126
|
+
/* 底槽取淡底阶梯的 200 档(--xh-bg-subtle-hover) */
|
|
127
|
+
background: var(--xh-slider-track-bg, var(--xh-bg-subtle-hover));
|
|
97
128
|
}
|
|
98
129
|
|
|
99
130
|
[data-scope='slider'][data-part='track'][data-orientation='horizontal'] {
|
|
@@ -106,7 +137,7 @@
|
|
|
106
137
|
inline-size: var(--xh-_track-thickness);
|
|
107
138
|
}
|
|
108
139
|
|
|
109
|
-
/* 禁用:底槽退到 100
|
|
140
|
+
/* 禁用:底槽退到 100 档淡底,已选区间退到 200 档——两者仍分得开,值还读得出,只是没了品牌色 */
|
|
110
141
|
[data-scope='slider'][data-part='track'][data-disabled] {
|
|
111
142
|
background: var(--xh-slider-track-bg-disabled, var(--xh-bg-subtle));
|
|
112
143
|
}
|
|
@@ -146,39 +177,35 @@
|
|
|
146
177
|
background: var(--xh-slider-range-bg-invalid, var(--xh-border-invalid));
|
|
147
178
|
}
|
|
148
179
|
|
|
180
|
+
/* 区间叠在底槽上:取不透明档,半透明的墨色压在半透明的底槽上会再叠深一层 */
|
|
149
181
|
[data-scope='slider'][data-part='range'][data-disabled] {
|
|
150
|
-
background: var(--xh-slider-range-bg-disabled, var(--xh-
|
|
182
|
+
background: var(--xh-slider-range-bg-disabled, var(--xh-bg-subtle-hover-opaque));
|
|
151
183
|
}
|
|
152
184
|
|
|
153
185
|
/* 圆点浮在轨道之上:轨道是流内的,拇指是绝对定位的,天然后来居上,不必再堆 z-index。
|
|
154
186
|
box-sizing 必须显式写:描边要吃进直径里,否则实际盒子比 --xh-_thumb-size 宽两条边,
|
|
155
187
|
下面按半个直径回拉的负外边距就对不上圆心。
|
|
156
|
-
|
|
188
|
+
拇指是平面的白底圆:2px 强调色描边就是它的边界,静止不投影;跟着手走时才抬起(见拖动那档) */
|
|
157
189
|
[data-scope='slider'][data-part='thumb'] {
|
|
158
190
|
position: absolute;
|
|
159
191
|
box-sizing: border-box;
|
|
160
192
|
inline-size: var(--xh-_thumb-size);
|
|
161
193
|
block-size: var(--xh-_thumb-size);
|
|
162
|
-
|
|
163
|
-
拇指就与同色的已选区间糊成一片 */
|
|
164
|
-
border: var(--xh-stroke-thick) solid var(--xh-slider-thumb-border, var(--xh-border-default-opaque));
|
|
194
|
+
border: var(--xh-stroke-thick) solid var(--xh-slider-thumb-border, var(--xh-_tone, var(--xh-bg-brand)));
|
|
165
195
|
border-radius: var(--xh-slider-thumb-radius, var(--xh-shape-circle));
|
|
166
|
-
background: var(--xh-slider-thumb-bg, var(--xh-
|
|
167
|
-
|
|
168
|
-
不写就取到从页面继承下来的正文色 */
|
|
169
|
-
color: var(--xh-_tone-on, var(--xh-fg-on-brand));
|
|
170
|
-
box-shadow: var(--xh-slider-thumb-shadow, var(--xh-elevation-raised));
|
|
196
|
+
background: var(--xh-slider-thumb-bg, var(--xh-bg-surface));
|
|
197
|
+
box-shadow: var(--xh-slider-thumb-shadow, none);
|
|
171
198
|
cursor: grab;
|
|
172
199
|
transition:
|
|
173
200
|
scale var(--xh-motion-duration-nudge) var(--xh-motion-ease-enter-strong),
|
|
174
201
|
box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
175
202
|
}
|
|
176
203
|
|
|
177
|
-
/*
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
204
|
+
/* 可悬停设备上指针落到拇指即放大一档,与拖动中同一比例:提示它抓得起来 */
|
|
205
|
+
@media (hover: hover) {
|
|
206
|
+
[data-scope='slider'][data-part='thumb']:hover:not([data-disabled], [data-readonly]) {
|
|
207
|
+
scale: var(--xh-slider-thumb-scale-dragging, var(--xh-motion-scale-drag));
|
|
208
|
+
}
|
|
182
209
|
}
|
|
183
210
|
|
|
184
211
|
/* 内联样式把 inset-inline-start 定在值所在的比例上,那是拇指的**起始边**不是圆心;
|
|
@@ -201,7 +228,7 @@
|
|
|
201
228
|
|
|
202
229
|
/* 多拇指时只有手真正推着的那一个带 data-dragging,放大与光标因此不会全组一起变。
|
|
203
230
|
放大用 scale 而不是改尺寸:变换绕自身中心发生,圆心不动,负外边距的算式也不用跟着改。
|
|
204
|
-
|
|
231
|
+
静止时不投影,拖动中才抬起到 lifted:跟着手走的东西离开页面一档,
|
|
205
232
|
又不到锚定浮层那一层——用 floating 会让拇指和下拉面板一样重。 */
|
|
206
233
|
[data-scope='slider'][data-part='thumb'][data-dragging] {
|
|
207
234
|
/* 放大比例落进私有槽:挂在拇指里的值气泡读同一支反向缩回原尺寸 */
|
|
@@ -213,16 +240,16 @@
|
|
|
213
240
|
}
|
|
214
241
|
|
|
215
242
|
[data-scope='slider'][data-part='thumb'][data-invalid] {
|
|
216
|
-
|
|
243
|
+
border-color: var(--xh-slider-thumb-border-invalid, var(--xh-border-invalid));
|
|
217
244
|
}
|
|
218
245
|
|
|
219
246
|
[data-scope='slider'][data-part='thumb'][data-readonly]:not([data-disabled]) {
|
|
220
247
|
cursor: default;
|
|
221
248
|
}
|
|
222
249
|
|
|
223
|
-
/*
|
|
224
|
-
不写 color:圆点上没有字,禁用拇指不进 Tab 序列也不会聚焦,环的前景在这里没有消费者 */
|
|
250
|
+
/* 禁用:白面留着、描边退到 200 档(不透明档:描边压在拇指自己的白底上,半透明的墨色要先兑实)、影收掉 */
|
|
225
251
|
[data-scope='slider'][data-part='thumb'][data-disabled] {
|
|
252
|
+
border-color: var(--xh-slider-thumb-border-disabled, var(--xh-bg-subtle-hover-opaque));
|
|
226
253
|
background: var(--xh-slider-thumb-bg-disabled, var(--xh-bg-surface));
|
|
227
254
|
box-shadow: var(--xh-slider-thumb-shadow-disabled, none);
|
|
228
255
|
cursor: not-allowed;
|
|
@@ -280,15 +307,14 @@
|
|
|
280
307
|
|
|
281
308
|
/* —— 尺寸 —— */
|
|
282
309
|
/* 尺寸只改 root 上那两个槽位,control / track / thumb 跟着一起走;中间档不写规则,缺省即中档。
|
|
283
|
-
|
|
310
|
+
拇指按轨道拇指的三档取 10 / 12 / 16px;轨道小档沿用中档的 2px(再细就读不出是条轨道),大档加到 3px */
|
|
284
311
|
[data-scope='slider'][data-part='root'][data-size='sm'] {
|
|
285
|
-
--xh-_thumb-size: var(--xh-slider-thumb-size, var(--xh-
|
|
286
|
-
--xh-_track-thickness: var(--xh-slider-track-thickness, var(--xh-space-1));
|
|
312
|
+
--xh-_thumb-size: var(--xh-slider-thumb-size, var(--xh-track-thumb-size-sm));
|
|
287
313
|
}
|
|
288
314
|
|
|
289
315
|
[data-scope='slider'][data-part='root'][data-size='lg'] {
|
|
290
|
-
--xh-_thumb-size: var(--xh-slider-thumb-size, var(--xh-
|
|
291
|
-
--xh-_track-thickness: var(--xh-slider-track-thickness, var(--xh-
|
|
316
|
+
--xh-_thumb-size: var(--xh-slider-thumb-size, var(--xh-track-thumb-size-lg));
|
|
317
|
+
--xh-_track-thickness: var(--xh-slider-track-thickness, var(--xh-stroke-strong));
|
|
292
318
|
}
|
|
293
319
|
|
|
294
320
|
/* —— 刻度:圆点钉在轨道上、文案排在轨道外侧,坐标由连接层按百分比内联给出 —— */
|
|
@@ -298,21 +324,24 @@
|
|
|
298
324
|
pointer-events: none;
|
|
299
325
|
}
|
|
300
326
|
|
|
301
|
-
/*
|
|
327
|
+
/* 刻度点是 8px 的白底小圆,2px 描边取轨道色;正方盒取 circle(正方盒不得用 pill 冒充圆)。
|
|
328
|
+
box-sizing 显式写:描边吃进直径里,平移回中才落在比例点上 */
|
|
302
329
|
[data-scope='slider'][data-part='tick'] {
|
|
303
330
|
position: absolute;
|
|
304
331
|
inset-block-start: 50%;
|
|
305
|
-
|
|
306
|
-
|
|
332
|
+
box-sizing: border-box;
|
|
333
|
+
inline-size: var(--xh-slider-tick-size, var(--xh-space-2));
|
|
334
|
+
block-size: var(--xh-slider-tick-size, var(--xh-space-2));
|
|
335
|
+
border: var(--xh-stroke-thick) solid var(--xh-slider-tick-border, var(--xh-bg-subtle-hover));
|
|
307
336
|
border-radius: var(--xh-slider-tick-radius, var(--xh-shape-circle));
|
|
308
|
-
background: var(--xh-slider-tick-bg, var(--xh-
|
|
337
|
+
background: var(--xh-slider-tick-bg, var(--xh-bg-surface));
|
|
309
338
|
/* 连接层把比例点写在 inset-inline-start 上:平移的行内分量乘书写方向的符号,rtl 下掉头,刻度点才以比例点为中心 */
|
|
310
339
|
translate: calc(-50% * var(--xh-direction-sign)) -50%;
|
|
311
340
|
}
|
|
312
341
|
|
|
313
|
-
/*
|
|
342
|
+
/* 落进已选区间的刻度点描边跟 range 同色 */
|
|
314
343
|
[data-scope='slider'][data-part='tick'][data-passed] {
|
|
315
|
-
|
|
344
|
+
border-color: var(--xh-slider-tick-border-active, var(--xh-_tone, var(--xh-bg-brand)));
|
|
316
345
|
}
|
|
317
346
|
|
|
318
347
|
[data-scope='slider'][data-part='tick-label'] {
|
|
@@ -334,13 +363,13 @@
|
|
|
334
363
|
}
|
|
335
364
|
|
|
336
365
|
/* 禁用:刻度点与文案由 tick-group 上的 data-disabled 下发(连接层不给每个刻度单发),
|
|
337
|
-
|
|
366
|
+
刻度点描边与底槽同退到 100 档、已过的与区间同退到 200 档,文案换禁用前景,点它跳档的手型收掉 */
|
|
338
367
|
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick']:where([data-scope='slider']) {
|
|
339
|
-
|
|
368
|
+
border-color: var(--xh-slider-tick-border-disabled, var(--xh-bg-subtle));
|
|
340
369
|
}
|
|
341
370
|
|
|
342
371
|
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick'][data-passed]:where([data-scope='slider']) {
|
|
343
|
-
|
|
372
|
+
border-color: var(--xh-slider-tick-border-active-disabled, var(--xh-bg-subtle-hover-opaque));
|
|
344
373
|
}
|
|
345
374
|
|
|
346
375
|
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick-label']:where([data-scope='slider']) {
|
package/css/sparkline.css
CHANGED
|
@@ -23,6 +23,12 @@
|
|
|
23
23
|
--xh-_chart-metric-gap: var(--xh-chart-gap);
|
|
24
24
|
--xh-_chart-metric-bar-max: var(--xh-sparkline-bar-max, var(--xh-chart-bar-max));
|
|
25
25
|
--xh-_chart-metric-radius: var(--xh-sparkline-bar-radius, var(--xh-shape-inset));
|
|
26
|
+
/* 迷你图不画轴、标签与命中区,这几项照样写全:度量槽登记成了长度,不写的那项读到的是初始值 0,不是缺省 */
|
|
27
|
+
--xh-_chart-metric-hit-min: var(--xh-chart-hit-min);
|
|
28
|
+
--xh-_chart-metric-tick-length: var(--xh-chart-tick-length);
|
|
29
|
+
--xh-_chart-metric-label-gap: var(--xh-chart-label-gap);
|
|
30
|
+
--xh-_chart-metric-font-size: var(--xh-text-caption-size);
|
|
31
|
+
--xh-_chart-metric-leading: var(--xh-leading-tight);
|
|
26
32
|
|
|
27
33
|
/* 缺省中性:线与柱退到弱化色,只让标记点取品牌色相的色槽 1,读者先看到「现在在哪」 */
|
|
28
34
|
--xh-_sparkline-color: var(--xh-sparkline-color, var(--xh-chart-deemphasis));
|
|
@@ -30,9 +36,9 @@
|
|
|
30
36
|
|
|
31
37
|
display: inline-block;
|
|
32
38
|
inline-size: var(--xh-sparkline-width, 6rem);
|
|
33
|
-
/*
|
|
39
|
+
/* 级联兜底:先写一行正文的行框令牌(正文字号 × 正文行距),再写 1lh。
|
|
34
40
|
1lh 晚于本库声明的浏览器地板,取不到时旧引擎丢掉后一条、留下前一条。 */
|
|
35
|
-
block-size: var(--xh-sparkline-height,
|
|
41
|
+
block-size: var(--xh-sparkline-height, var(--xh-text-body-line-h));
|
|
36
42
|
block-size: var(--xh-sparkline-height, 1lh);
|
|
37
43
|
/* 高度正好是一个行盒:顶边贴行盒顶边,行高不被撑开;居中对齐会按字的 x 高度再挪半格,行盒就多出一截 */
|
|
38
44
|
vertical-align: top;
|
package/css/spinner.css
CHANGED
|
@@ -40,6 +40,12 @@
|
|
|
40
40
|
vertical-align: middle;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
/* 竖排:转圈在上、配文在下居中,整块区域的等待用它 */
|
|
44
|
+
[data-scope='spinner'][data-part='root'][data-orientation='vertical'] {
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
gap: var(--xh-spinner-gap, var(--xh-space-1_5));
|
|
47
|
+
}
|
|
48
|
+
|
|
43
49
|
/* 露面前的等待:整块藏起、位置照留,露面那一刻布局不跳;visibility 同时把它从读屏里摘掉 */
|
|
44
50
|
[data-scope='spinner'][data-part='root'][data-state='hidden'] {
|
|
45
51
|
visibility: hidden;
|
|
@@ -53,10 +59,10 @@
|
|
|
53
59
|
flex: none;
|
|
54
60
|
inline-size: var(--xh-spinner-size, var(--xh-glyph-size-md));
|
|
55
61
|
block-size: var(--xh-spinner-size, var(--xh-glyph-size-md));
|
|
56
|
-
border: var(--xh-spinner-thickness, var(--xh-stroke-thick)) solid var(--xh-spinner-
|
|
62
|
+
border: var(--xh-spinner-thickness, var(--xh-stroke-thick)) solid var(--xh-spinner-fg, var(--xh-fg-brand));
|
|
57
63
|
|
|
58
|
-
/*
|
|
59
|
-
border-block-start-color: var(--xh-spinner-
|
|
64
|
+
/* 一段 270° 的品牌色弧:起始边那一段是缺口(不画轨道,缺省透明),缺口转起来就看得出方向 */
|
|
65
|
+
border-block-start-color: var(--xh-spinner-track, transparent);
|
|
60
66
|
border-radius: var(--xh-spinner-radius, var(--xh-shape-circle));
|
|
61
67
|
animation: xh-spin var(--xh-spinner-duration, var(--xh-motion-loop-spin)) var(--xh-motion-ease-loop) infinite;
|
|
62
68
|
}
|
|
@@ -73,12 +79,12 @@
|
|
|
73
79
|
block-size: var(--xh-glyph-size-lg);
|
|
74
80
|
}
|
|
75
81
|
|
|
76
|
-
/*
|
|
77
|
-
两者同时换成同一族颜色,转到哪儿就看不出来了。
|
|
82
|
+
/* 语气只换弧那三段,缺口照旧:弧与缺口的反差就是转向的读法。
|
|
78
83
|
选择器上带 [data-tone] 是必需的:语气槽会沿继承流下来,不限定在写了语气的
|
|
79
84
|
那个节点上,放在语气容器里的转圈会跟着一起改色 */
|
|
80
85
|
[data-scope='spinner'][data-part='root'][data-tone]::before {
|
|
81
|
-
border-
|
|
86
|
+
border-color: var(--xh-spinner-fg, var(--xh-_tone));
|
|
87
|
+
border-block-start-color: var(--xh-spinner-track, transparent);
|
|
82
88
|
}
|
|
83
89
|
|
|
84
90
|
/*
|
|
@@ -88,7 +94,7 @@
|
|
|
88
94
|
*/
|
|
89
95
|
[data-scope='spinner'][data-part='root'][data-variant='arc']::before {
|
|
90
96
|
border: 0;
|
|
91
|
-
background: conic-gradient(transparent, var(--xh-spinner-fg,
|
|
97
|
+
background: conic-gradient(transparent, var(--xh-spinner-fg, var(--xh-fg-brand)));
|
|
92
98
|
-webkit-mask: radial-gradient(
|
|
93
99
|
farthest-side,
|
|
94
100
|
transparent calc(100% - var(--xh-spinner-thickness, var(--xh-stroke-thick))),
|
|
@@ -107,7 +113,7 @@
|
|
|
107
113
|
|
|
108
114
|
/*
|
|
109
115
|
* 三点:一行三枚圆点,依次亮起成一道波。它不转,因此圆角与描边都撤掉,
|
|
110
|
-
*
|
|
116
|
+
* 图形改由三层径向渐变画;点取品牌色,语气档只换这一处。
|
|
111
117
|
* 明暗不靠整组的不透明度(那样三点同步明灭,读起来像整体在闪),而是一层三倍宽的遮罩:
|
|
112
118
|
* 两端压在禁用档的不透明度,正中一道满不透明度的亮带,遮罩位置从行首外扫到行尾外,
|
|
113
119
|
* 亮带依次掠过三枚点。
|
|
@@ -118,9 +124,9 @@
|
|
|
118
124
|
border: 0;
|
|
119
125
|
border-radius: 0;
|
|
120
126
|
background:
|
|
121
|
-
radial-gradient(circle closest-side, var(--xh-spinner-fg,
|
|
122
|
-
radial-gradient(circle closest-side, var(--xh-spinner-fg,
|
|
123
|
-
radial-gradient(circle closest-side, var(--xh-spinner-fg,
|
|
127
|
+
radial-gradient(circle closest-side, var(--xh-spinner-fg, var(--xh-fg-brand)) 100%, transparent) 0 50% / 25% 25% no-repeat,
|
|
128
|
+
radial-gradient(circle closest-side, var(--xh-spinner-fg, var(--xh-fg-brand)) 100%, transparent) 50% 50% / 25% 25% no-repeat,
|
|
129
|
+
radial-gradient(circle closest-side, var(--xh-spinner-fg, var(--xh-fg-brand)) 100%, transparent) 100% 50% / 25% 25% no-repeat;
|
|
124
130
|
-webkit-mask: linear-gradient(90deg, var(--xh-_spinner-dot-dim) 40%, currentColor 50%, var(--xh-_spinner-dot-dim) 60%) 100% 0 / 300% 100% no-repeat;
|
|
125
131
|
mask: linear-gradient(90deg, var(--xh-_spinner-dot-dim) 40%, currentColor 50%, var(--xh-_spinner-dot-dim) 60%) 100% 0 / 300% 100% no-repeat;
|
|
126
132
|
animation: xh-spinner-dots var(--xh-spinner-duration, var(--xh-motion-loop-spin)) var(--xh-motion-ease-loop) infinite;
|
|
@@ -159,9 +165,11 @@
|
|
|
159
165
|
}
|
|
160
166
|
}
|
|
161
167
|
|
|
168
|
+
/* 配文与转圈同一族颜色:品牌色、正文字号、中等字重 */
|
|
162
169
|
[data-scope='spinner'][data-part='label'] {
|
|
163
|
-
color: var(--xh-spinner-label-fg, var(--xh-fg-
|
|
164
|
-
font-size: var(--xh-spinner-label-size, var(--xh-text-
|
|
170
|
+
color: var(--xh-spinner-label-fg, var(--xh-fg-brand));
|
|
171
|
+
font-size: var(--xh-spinner-label-size, var(--xh-text-body-size));
|
|
172
|
+
font-weight: var(--xh-spinner-label-weight, var(--xh-font-weight-medium));
|
|
165
173
|
line-height: var(--xh-leading-none);
|
|
166
174
|
}
|
|
167
175
|
|
|
@@ -171,7 +179,7 @@
|
|
|
171
179
|
@media (prefers-reduced-motion: reduce) {
|
|
172
180
|
[data-scope='spinner'][data-part='root']::before {
|
|
173
181
|
border-style: dotted;
|
|
174
|
-
border-color: var(--xh-spinner-fg,
|
|
182
|
+
border-color: var(--xh-spinner-fg, var(--xh-fg-brand));
|
|
175
183
|
animation: none;
|
|
176
184
|
}
|
|
177
185
|
|
|
@@ -183,7 +191,7 @@
|
|
|
183
191
|
|
|
184
192
|
:where([data-motion='reduce']) [data-scope='spinner'][data-part='root']::before {
|
|
185
193
|
border-style: dotted;
|
|
186
|
-
border-color: var(--xh-spinner-fg,
|
|
194
|
+
border-color: var(--xh-spinner-fg, var(--xh-fg-brand));
|
|
187
195
|
animation: none;
|
|
188
196
|
}
|
|
189
197
|
|
|
@@ -204,7 +212,7 @@
|
|
|
204
212
|
并成一条之后这层配对关系在文本上就断了。 */
|
|
205
213
|
[data-scope='spinner'][data-part='root']::before {
|
|
206
214
|
border-style: dotted;
|
|
207
|
-
border-color: var(--xh-spinner-fg,
|
|
215
|
+
border-color: var(--xh-spinner-fg, var(--xh-fg-brand));
|
|
208
216
|
animation: none;
|
|
209
217
|
}
|
|
210
218
|
|
|
@@ -215,13 +223,25 @@
|
|
|
215
223
|
|
|
216
224
|
/*
|
|
217
225
|
* 高对比档:这一档把整层背景图丢掉,而渐隐弧与三点都画在背景上——屏幕上会一片空白。
|
|
218
|
-
*
|
|
226
|
+
* 三档一并退回环档的画法:高亮色的弧加一段画布色的缺口,转的还是同一条动画。
|
|
227
|
+
* 伪元素退出强制换色、直接写系统色,缺口不被换成别的颜色。
|
|
228
|
+
* 带语气的那几条([data-tone]、[data-variant][data-tone])特指度更高,这里逐条写上同样的限定:
|
|
229
|
+
* 退出了强制换色的伪元素不会再被系统改色,少一条语气色的弧或渐变就原样画出来
|
|
219
230
|
*/
|
|
220
231
|
@media (forced-colors: active) {
|
|
232
|
+
[data-scope='spinner'][data-part='root']::before,
|
|
233
|
+
[data-scope='spinner'][data-part='root'][data-tone]::before {
|
|
234
|
+
forced-color-adjust: none;
|
|
235
|
+
border-color: Highlight;
|
|
236
|
+
border-block-start-color: Canvas;
|
|
237
|
+
}
|
|
238
|
+
|
|
221
239
|
[data-scope='spinner'][data-part='root'][data-variant='arc']::before,
|
|
222
|
-
[data-scope='spinner'][data-part='root'][data-variant='
|
|
223
|
-
|
|
224
|
-
|
|
240
|
+
[data-scope='spinner'][data-part='root'][data-variant='arc'][data-tone]::before,
|
|
241
|
+
[data-scope='spinner'][data-part='root'][data-variant='dots']::before,
|
|
242
|
+
[data-scope='spinner'][data-part='root'][data-variant='dots'][data-tone]::before {
|
|
243
|
+
border: var(--xh-spinner-thickness, var(--xh-stroke-thick)) solid Highlight;
|
|
244
|
+
border-block-start-color: Canvas;
|
|
225
245
|
border-radius: var(--xh-spinner-radius, var(--xh-shape-circle));
|
|
226
246
|
background-image: none;
|
|
227
247
|
}
|
package/css/statistic.css
CHANGED
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
|
|
14
14
|
/* 三个尺寸档只换这几个私有槽,各段从 root 继承它们,换档不必给每个部件各写一条选择器 */
|
|
15
15
|
[data-scope='statistic'][data-part='root'] {
|
|
16
|
-
--xh-_statistic-label-size: var(--xh-control-
|
|
17
|
-
--xh-_statistic-value-size: var(--xh-text-heading-
|
|
16
|
+
--xh-_statistic-label-size: var(--xh-control-font-md);
|
|
17
|
+
--xh-_statistic-value-size: var(--xh-text-heading-1-size);
|
|
18
18
|
--xh-_statistic-affix-size: var(--xh-control-font-md);
|
|
19
|
-
--xh-_statistic-row-gap: var(--xh-space-
|
|
19
|
+
--xh-_statistic-row-gap: var(--xh-space-2);
|
|
20
20
|
/* 涨跌箭头与作者塞进来的图标同一把尺:跟着前后缀那一档字(14px)走,取 sm 字形 16px,大档抬到 md */
|
|
21
21
|
--xh-_statistic-icon-size: var(--xh-glyph-size-sm);
|
|
22
22
|
--xh-icon-size: var(--xh-statistic-icon-size, var(--xh-_statistic-icon-size));
|
|
@@ -38,17 +38,17 @@
|
|
|
38
38
|
|
|
39
39
|
/* —— 尺寸 —— */
|
|
40
40
|
[data-scope='statistic'][data-part='root'][data-size='sm'] {
|
|
41
|
-
--xh-_statistic-label-size: var(--xh-control-
|
|
42
|
-
--xh-_statistic-value-size: var(--xh-text-heading-
|
|
41
|
+
--xh-_statistic-label-size: var(--xh-control-font-sm);
|
|
42
|
+
--xh-_statistic-value-size: var(--xh-text-heading-2-size);
|
|
43
43
|
--xh-_statistic-affix-size: var(--xh-control-font-sm);
|
|
44
|
-
--xh-_statistic-row-gap: var(--xh-space-
|
|
44
|
+
--xh-_statistic-row-gap: var(--xh-space-1);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
[data-scope='statistic'][data-part='root'][data-size='lg'] {
|
|
48
|
-
--xh-_statistic-label-size: var(--xh-control-
|
|
49
|
-
--xh-_statistic-value-size: var(--xh-text-
|
|
48
|
+
--xh-_statistic-label-size: var(--xh-control-font-lg);
|
|
49
|
+
--xh-_statistic-value-size: var(--xh-text-display-size);
|
|
50
50
|
--xh-_statistic-affix-size: var(--xh-control-font-lg);
|
|
51
|
-
--xh-_statistic-row-gap: var(--xh-space-
|
|
51
|
+
--xh-_statistic-row-gap: var(--xh-space-3);
|
|
52
52
|
--xh-_statistic-icon-size: var(--xh-glyph-size-md);
|
|
53
53
|
}
|
|
54
54
|
|
|
@@ -67,17 +67,17 @@
|
|
|
67
67
|
color: var(--xh-statistic-value-fg, var(--xh-_tone-fg, var(--xh-fg-default)));
|
|
68
68
|
font-size: var(--xh-statistic-value-font-size, var(--xh-_statistic-value-size));
|
|
69
69
|
font-variant-numeric: tabular-nums;
|
|
70
|
-
font-weight: var(--xh-font-weight-
|
|
71
|
-
line-height: var(--xh-leading-
|
|
70
|
+
font-weight: var(--xh-font-weight-medium);
|
|
71
|
+
line-height: var(--xh-leading-normal);
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
/*
|
|
74
|
+
/* 前后缀比数值小一档,颜色与字重同数值:它们是这个数的一部分(货币符号、单位),不是旁注 */
|
|
75
75
|
[data-scope='statistic'][data-part='prefix'],
|
|
76
76
|
[data-scope='statistic'][data-part='suffix'] {
|
|
77
|
-
color: var(--xh-statistic-affix-fg, var(--xh-_tone-fg, var(--xh-fg-
|
|
77
|
+
color: var(--xh-statistic-affix-fg, var(--xh-_tone-fg, var(--xh-fg-default)));
|
|
78
78
|
font-size: var(--xh-statistic-affix-font-size, var(--xh-_statistic-affix-size));
|
|
79
79
|
font-variant-numeric: tabular-nums;
|
|
80
|
-
font-weight: var(--xh-font-weight-
|
|
80
|
+
font-weight: var(--xh-font-weight-medium);
|
|
81
81
|
line-height: var(--xh-leading-tight);
|
|
82
82
|
}
|
|
83
83
|
|