@xihan-ui/styles 3.1.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 +470 -0
- package/component-tokens.d.ts +230 -60
- package/components.tokens.json +5156 -1557
- package/css/accordion.css +47 -20
- package/css/alert.css +16 -17
- package/css/anchor.css +2 -2
- package/css/approval.css +41 -17
- 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 +13 -12
- package/css/calendar-picker.css +178 -95
- package/css/calendar-range-picker.css +207 -122
- package/css/card.css +34 -6
- package/css/carousel.css +94 -46
- package/css/cartesian-chart.css +11 -11
- package/css/cascader.css +51 -39
- package/css/checkbox-group.css +9 -6
- package/css/checkbox.css +5 -4
- package/css/citation.css +9 -4
- package/css/clipboard.css +20 -4
- package/css/code-view.css +6 -6
- 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 +14 -9
- package/css/combobox.css +26 -14
- package/css/command.css +14 -9
- package/css/context-menu.css +10 -5
- package/css/date-field.css +12 -6
- package/css/date-picker.css +178 -109
- package/css/date-range-picker.css +199 -130
- package/css/description.css +10 -6
- package/css/descriptions.css +47 -19
- package/css/dialog.css +50 -35
- package/css/diff-view.css +8 -8
- package/css/drawer.css +75 -21
- package/css/editable.css +15 -41
- package/css/empty-state.css +21 -3
- package/css/field-array.css +5 -2
- package/css/field.css +17 -18
- package/css/fieldset.css +33 -13
- package/css/file-upload.css +66 -33
- package/css/float-button.css +60 -35
- package/css/floating-panel.css +1 -1
- package/css/form.css +30 -16
- package/css/graph-chart.css +2 -2
- package/css/grid-list.css +1 -1
- package/css/highlight.css +5 -5
- package/css/hover-card.css +19 -12
- package/css/image-viewer.css +77 -27
- package/css/image.css +13 -5
- 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 +11 -9
- package/css/menu.css +10 -5
- package/css/menubar.css +13 -8
- package/css/message-feed.css +1 -1
- package/css/navigation-menu.css +2 -2
- package/css/notification.css +132 -49
- package/css/number-animation.css +2 -2
- package/css/number-field.css +75 -52
- package/css/page-header.css +64 -27
- package/css/pagination.css +35 -38
- package/css/password-input.css +12 -68
- package/css/pin-input.css +18 -26
- package/css/popconfirm.css +23 -14
- package/css/popover.css +18 -12
- package/css/progress.css +14 -13
- package/css/prompt-input.css +3 -3
- package/css/question-flow.css +41 -15
- package/css/radar-chart.css +6 -6
- package/css/radio-group.css +120 -55
- package/css/rating.css +32 -15
- package/css/select.css +16 -12
- package/css/separator.css +24 -6
- package/css/side-nav.css +29 -24
- package/css/signature-pad.css +23 -9
- package/css/skeleton.css +12 -12
- package/css/slider.css +77 -48
- package/css/sortable.css +2 -2
- 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 +29 -12
- package/css/tabs.css +35 -12
- package/css/tag-group.css +17 -6
- package/css/tag.css +54 -29
- package/css/tags-input.css +39 -20
- 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 +13 -11
- package/css/toolbar.css +6 -5
- package/css/tooltip.css +16 -17
- package/css/tour.css +14 -7
- package/css/transfer.css +22 -16
- package/css/tree-select.css +12 -12
- package/css/tree.css +26 -25
- package/css/typography.css +28 -25
- package/dist/css/accordion.css +296 -0
- package/dist/css/affix.css +47 -0
- package/dist/css/alert.css +246 -0
- package/dist/css/anchor.css +252 -0
- package/dist/css/approval.css +525 -0
- package/dist/css/avatar-group.css +96 -0
- package/dist/css/avatar.css +100 -0
- package/dist/css/back-top.css +175 -0
- package/dist/css/badge.css +205 -0
- package/dist/css/bar-code.css +62 -0
- package/dist/css/breadcrumb.css +232 -0
- package/dist/css/button-group.css +261 -0
- package/dist/css/button.css +216 -0
- package/dist/css/calendar-picker.css +550 -0
- package/dist/css/calendar-range-picker.css +639 -0
- package/dist/css/card.css +249 -0
- package/dist/css/carousel.css +726 -0
- package/dist/css/cartesian-chart.css +830 -0
- package/dist/css/cascader.css +973 -0
- package/dist/css/checkbox-group.css +361 -0
- package/dist/css/checkbox.css +258 -0
- package/dist/css/citation.css +475 -0
- package/dist/css/clipboard.css +331 -0
- package/dist/css/code-view.css +374 -0
- package/dist/css/collapsible.css +200 -0
- package/dist/css/color-field.css +176 -0
- package/dist/css/color-picker.css +649 -0
- package/dist/css/color-slider.css +283 -0
- package/dist/css/color-swatch-picker.css +250 -0
- package/dist/css/color-swatch.css +35 -0
- package/dist/css/combobox.css +578 -0
- package/dist/css/command.css +404 -0
- package/dist/css/context-menu.css +425 -0
- package/dist/css/date-field.css +317 -0
- package/dist/css/date-picker.css +931 -0
- package/dist/css/date-range-picker.css +949 -0
- package/dist/css/description.css +71 -0
- package/dist/css/descriptions.css +327 -0
- package/dist/css/dialog.css +470 -0
- package/dist/css/diff-view.css +513 -0
- package/dist/css/download-trigger.css +151 -0
- package/dist/css/drawer.css +606 -0
- package/dist/css/editable.css +269 -0
- package/dist/css/empty-state.css +181 -0
- package/dist/css/field-array.css +229 -0
- package/dist/css/field.css +165 -0
- package/dist/css/fieldset.css +122 -0
- package/dist/css/file-upload.css +462 -0
- package/dist/css/flex.css +441 -0
- package/dist/css/float-button.css +579 -0
- package/dist/css/floating-panel.css +429 -0
- package/dist/css/focus.css +46 -0
- package/dist/css/forced-colors.css +93 -0
- package/dist/css/form.css +407 -0
- package/dist/css/funnel-chart.css +106 -0
- package/dist/css/graph-chart.css +205 -0
- package/dist/css/grid-list.css +235 -0
- package/dist/css/grid.css +1201 -0
- package/dist/css/heatmap.css +552 -0
- package/dist/css/hierarchy-chart.css +298 -0
- package/dist/css/highlight.css +41 -0
- package/dist/css/hover-card.css +233 -0
- package/dist/css/icon.css +225 -0
- package/dist/css/image-cropper.css +373 -0
- package/dist/css/image-viewer.css +588 -0
- package/dist/css/image.css +106 -0
- package/dist/css/infinite-scroll.css +81 -0
- package/dist/css/input-group.css +323 -0
- package/dist/css/json-viewer.css +379 -0
- package/dist/css/kbd.css +72 -0
- package/dist/css/label.css +94 -0
- package/dist/css/layers.css +7 -0
- package/dist/css/layout.css +379 -0
- package/dist/css/liquid.css +106 -0
- package/dist/css/list.css +156 -0
- package/dist/css/listbox.css +395 -0
- package/dist/css/loading-bar.css +144 -0
- package/dist/css/log.css +306 -0
- package/dist/css/markdown-stream.css +149 -0
- package/dist/css/marquee.css +378 -0
- package/dist/css/masonry.css +70 -0
- package/dist/css/matrix-code.css +67 -0
- package/dist/css/mention.css +395 -0
- package/dist/css/menu.css +369 -0
- package/dist/css/menubar.css +461 -0
- package/dist/css/message-feed.css +318 -0
- package/dist/css/navigation-menu.css +513 -0
- package/dist/css/notification.css +865 -0
- package/dist/css/number-animation.css +44 -0
- package/dist/css/number-field.css +275 -0
- package/dist/css/overlay-arrow.css +56 -0
- package/dist/css/page-header.css +221 -0
- package/dist/css/pagination.css +447 -0
- package/dist/css/password-input.css +335 -0
- package/dist/css/pie-chart.css +247 -0
- package/dist/css/pin-input.css +191 -0
- package/dist/css/pointer.css +36 -0
- package/dist/css/popconfirm.css +329 -0
- package/dist/css/popover.css +285 -0
- package/dist/css/progress.css +502 -0
- package/dist/css/prompt-input.css +260 -0
- package/dist/css/question-flow.css +579 -0
- package/dist/css/radar-chart.css +233 -0
- package/dist/css/radio-group.css +663 -0
- package/dist/css/rating.css +311 -0
- package/dist/css/reasoning.css +343 -0
- package/dist/css/reset.css +117 -0
- package/dist/css/resizable.css +242 -0
- package/dist/css/sankey-chart.css +174 -0
- package/dist/css/scroll-area.css +240 -0
- package/dist/css/scrollbar.css +204 -0
- package/dist/css/select.css +616 -0
- package/dist/css/separator.css +140 -0
- package/dist/css/side-nav.css +481 -0
- package/dist/css/signature-pad.css +193 -0
- package/dist/css/skeleton.css +161 -0
- package/dist/css/slider.css +403 -0
- package/dist/css/sortable.css +228 -0
- package/dist/css/sparkline.css +170 -0
- package/dist/css/spinner.css +256 -0
- package/dist/css/splitter.css +159 -0
- package/dist/css/statistic.css +137 -0
- package/dist/css/steps.css +658 -0
- package/dist/css/switch.css +353 -0
- package/dist/css/table.css +1162 -0
- package/dist/css/tabs.css +967 -0
- package/dist/css/tag-group.css +258 -0
- package/dist/css/tag.css +335 -0
- package/dist/css/tags-input.css +341 -0
- package/dist/css/text-field.css +197 -0
- package/dist/css/time-field.css +277 -0
- package/dist/css/time-picker.css +793 -0
- package/dist/css/time-range-picker.css +775 -0
- package/dist/css/timeline.css +440 -0
- package/dist/css/timer.css +123 -0
- package/dist/css/timestamp.css +34 -0
- package/dist/css/toggle-group.css +424 -0
- package/dist/css/toggle.css +146 -0
- package/dist/css/tone.css +189 -0
- package/dist/css/tool-call.css +431 -0
- package/dist/css/toolbar.css +366 -0
- package/dist/css/tooltip.css +217 -0
- package/dist/css/tour.css +446 -0
- package/dist/css/transfer.css +644 -0
- package/dist/css/tree-select.css +878 -0
- package/dist/css/tree.css +734 -0
- package/dist/css/truncate.css +108 -0
- package/dist/css/typography.css +475 -0
- package/dist/css/undefined.css +58 -0
- package/dist/css/virtualizer.css +166 -0
- package/dist/css/visually-hidden.css +20 -0
- package/dist/css/watermark.css +82 -0
- package/dist/family/action-control.css +493 -0
- package/dist/family/chart.css +537 -0
- package/dist/family/check-mark.css +94 -0
- package/dist/family/choice-card.css +97 -0
- package/dist/family/collection-item.css +768 -0
- package/dist/family/field-chrome.css +296 -0
- package/dist/family/loading-ring.css +102 -0
- package/dist/family/material.css +72 -0
- package/dist/family/menu-choice.css +56 -0
- package/dist/family/motion.css +363 -0
- package/dist/family/swatch.css +59 -0
- package/dist/family/tag-list.css +65 -0
- package/family/action-control.css +33 -36
- 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 +10349 -8756
- package/index.unlayered.css +10350 -8758
- package/package.json +165 -164
package/css/side-nav.css
CHANGED
|
@@ -30,8 +30,11 @@
|
|
|
30
30
|
把 --xh-icon-size 改接到 --xh-control-indicator-* 一族的盒尺 */
|
|
31
31
|
--xh-icon-size: var(--xh-side-nav-icon-size, var(--xh-glyph-size-md));
|
|
32
32
|
|
|
33
|
-
/*
|
|
34
|
-
|
|
33
|
+
/* 尺寸档只换这三个私有槽,行从这两处继承它们,换档不必给每个部件各写一条选择器。
|
|
34
|
+
行高取导航行的尺(比同档控件高一截) */
|
|
35
|
+
--xh-_side-nav-row-h: var(--xh-nav-row-h-md);
|
|
36
|
+
/* 面板内的搜索框是字段,高度仍走控件尺 */
|
|
37
|
+
--xh-_side-nav-input-h: var(--xh-control-h-md);
|
|
35
38
|
--xh-_side-nav-row-px: var(--xh-control-px-md);
|
|
36
39
|
--xh-_side-nav-row-gap: var(--xh-control-gap-md);
|
|
37
40
|
--xh-_side-nav-row-font-size: var(--xh-control-font-md);
|
|
@@ -41,7 +44,8 @@
|
|
|
41
44
|
/* 缺省档写在上面那条里 */
|
|
42
45
|
[data-scope='side-nav']:is([data-part='root'], [data-part='positioner'])[data-size='sm'] {
|
|
43
46
|
--xh-icon-size: var(--xh-side-nav-icon-size, var(--xh-glyph-size-sm));
|
|
44
|
-
--xh-_side-nav-row-h: var(--xh-
|
|
47
|
+
--xh-_side-nav-row-h: var(--xh-nav-row-h-sm);
|
|
48
|
+
--xh-_side-nav-input-h: var(--xh-control-h-sm);
|
|
45
49
|
--xh-_side-nav-row-px: var(--xh-control-px-sm);
|
|
46
50
|
--xh-_side-nav-row-gap: var(--xh-control-gap-sm);
|
|
47
51
|
--xh-_side-nav-row-font-size: var(--xh-control-font-sm);
|
|
@@ -49,7 +53,8 @@
|
|
|
49
53
|
|
|
50
54
|
[data-scope='side-nav']:is([data-part='root'], [data-part='positioner'])[data-size='lg'] {
|
|
51
55
|
--xh-icon-size: var(--xh-side-nav-icon-size, var(--xh-glyph-size-lg));
|
|
52
|
-
--xh-_side-nav-row-h: var(--xh-
|
|
56
|
+
--xh-_side-nav-row-h: var(--xh-nav-row-h-lg);
|
|
57
|
+
--xh-_side-nav-input-h: var(--xh-control-h-lg);
|
|
53
58
|
--xh-_side-nav-row-px: var(--xh-control-px-lg);
|
|
54
59
|
--xh-_side-nav-row-gap: var(--xh-control-gap-lg);
|
|
55
60
|
--xh-_side-nav-row-font-size: var(--xh-control-font-lg);
|
|
@@ -79,7 +84,7 @@
|
|
|
79
84
|
|
|
80
85
|
flex: none;
|
|
81
86
|
min-inline-size: 0;
|
|
82
|
-
block-size: var(--xh-side-nav-input-h, var(--xh-_side-nav-
|
|
87
|
+
block-size: var(--xh-side-nav-input-h, var(--xh-_side-nav-input-h));
|
|
83
88
|
padding-block: 0;
|
|
84
89
|
padding-inline: var(--xh-side-nav-input-px, var(--xh-_side-nav-row-px));
|
|
85
90
|
border: none;
|
|
@@ -112,11 +117,11 @@
|
|
|
112
117
|
|
|
113
118
|
/* 折叠一开始搜索框就与行文字一起淡出,展开等整栏宽度落定才淡入;落成图标栏之后让位:
|
|
114
119
|
留着高度、不可见也不可聚焦(过滤此时暂停),下面的行不上下跳 */
|
|
115
|
-
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='input'] {
|
|
120
|
+
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='input']:where([data-scope='side-nav']) {
|
|
116
121
|
opacity: 0;
|
|
117
122
|
}
|
|
118
123
|
|
|
119
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='input'] {
|
|
124
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='input']:where([data-scope='side-nav']) {
|
|
120
125
|
visibility: hidden;
|
|
121
126
|
}
|
|
122
127
|
|
|
@@ -171,13 +176,13 @@
|
|
|
171
176
|
|
|
172
177
|
/* 图标栏里分组标题没有落点:字淡成透明、仍参与播报,标题留着自己的高度,下面的行不上下跳;
|
|
173
178
|
折叠一开始就淡出,展开等整栏宽度落定才淡入。落成图标栏之后在这一格里画一道细分隔,分组仍看得出来 */
|
|
174
|
-
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='group-label'] {
|
|
179
|
+
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='group-label']:where([data-scope='side-nav']) {
|
|
175
180
|
overflow: hidden;
|
|
176
181
|
color: transparent;
|
|
177
182
|
white-space: nowrap;
|
|
178
183
|
}
|
|
179
184
|
|
|
180
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='group-label']::after {
|
|
185
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='group-label']:where([data-scope='side-nav'])::after {
|
|
181
186
|
content: '';
|
|
182
187
|
position: absolute;
|
|
183
188
|
inset-inline: var(--xh-_side-nav-row-px);
|
|
@@ -213,7 +218,7 @@
|
|
|
213
218
|
--xh-collection-inline-padding: var(--xh-side-nav-link-px, var(--xh-_side-nav-row-px));
|
|
214
219
|
--xh-collection-gap: 0;
|
|
215
220
|
--xh-collection-font-size: var(--xh-side-nav-link-font-size, var(--xh-_side-nav-row-font-size));
|
|
216
|
-
--xh-collection-radius: var(--xh-side-nav-link-radius, var(--xh-shape-
|
|
221
|
+
--xh-collection-radius: var(--xh-side-nav-link-radius, var(--xh-shape-surface));
|
|
217
222
|
/* 作者的图标尺槽经桥接槽下发到行,家族缺省按 data-xh-collection-size 取档 */
|
|
218
223
|
--xh-collection-glyph-size: var(--xh-side-nav-icon-size, var(--xh-_collection-glyph-size));
|
|
219
224
|
--xh-collection-fg-rest: var(--xh-side-nav-row-fg, currentColor);
|
|
@@ -223,16 +228,16 @@
|
|
|
223
228
|
--xh-collection-bg-hover: var(--xh-side-nav-row-bg-hover, var(--xh-bg-subtle));
|
|
224
229
|
--xh-collection-bg-keyboard-highlight: var(--xh-side-nav-row-bg-hover, var(--xh-bg-subtle));
|
|
225
230
|
--xh-collection-bg-pressed: var(--xh-side-nav-row-bg-pressed, var(--xh-bg-subtle-hover));
|
|
226
|
-
/*
|
|
231
|
+
/* 当前页:页内持久集合的标记是品牌淡底行面 + 淡底前景;侧栏另把字重提到 semibold,整列扫读时当前项一眼可见 */
|
|
227
232
|
--xh-collection-bg-current: var(--xh-side-nav-row-bg-active, var(--xh-bg-brand-subtle));
|
|
228
233
|
--xh-collection-fg-current: var(--xh-side-nav-row-fg-active, var(--xh-fg-on-brand-subtle));
|
|
229
234
|
--xh-collection-fg-current-hover: var(--xh-side-nav-row-fg-active, var(--xh-fg-on-brand-subtle));
|
|
230
235
|
--xh-collection-fg-current-highlight: var(--xh-side-nav-row-fg-active, var(--xh-fg-on-brand-subtle));
|
|
231
236
|
--xh-collection-fg-current-pressed: var(--xh-side-nav-row-fg-active, var(--xh-fg-on-brand-subtle));
|
|
232
|
-
--xh-collection-font-weight-current: var(--xh-side-nav-row-font-weight-active, var(--xh-font-weight-
|
|
233
|
-
--xh-collection-font-weight-current-hover: var(--xh-side-nav-row-font-weight-active, var(--xh-font-weight-
|
|
234
|
-
--xh-collection-font-weight-current-highlight: var(--xh-side-nav-row-font-weight-active, var(--xh-font-weight-
|
|
235
|
-
--xh-collection-font-weight-current-pressed: var(--xh-side-nav-row-font-weight-active, var(--xh-font-weight-
|
|
237
|
+
--xh-collection-font-weight-current: var(--xh-side-nav-row-font-weight-active, var(--xh-font-weight-semibold));
|
|
238
|
+
--xh-collection-font-weight-current-hover: var(--xh-side-nav-row-font-weight-active, var(--xh-font-weight-semibold));
|
|
239
|
+
--xh-collection-font-weight-current-highlight: var(--xh-side-nav-row-font-weight-active, var(--xh-font-weight-semibold));
|
|
240
|
+
--xh-collection-font-weight-current-pressed: var(--xh-side-nav-row-font-weight-active, var(--xh-font-weight-semibold));
|
|
236
241
|
--xh-collection-indicator-fg-current: var(--xh-side-nav-indicator-color, var(--xh-fg-brand));
|
|
237
242
|
--xh-collection-indicator-fg-current-hover: var(--xh-side-nav-indicator-color, var(--xh-fg-brand));
|
|
238
243
|
--xh-collection-indicator-fg-current-highlight: var(--xh-side-nav-indicator-color, var(--xh-fg-brand));
|
|
@@ -275,9 +280,9 @@
|
|
|
275
280
|
|
|
276
281
|
/* 行文字与展开箭头的淡变:折叠一开始就淡出,此时仍在行里、由收窄的行宽裁着;展开时等整栏宽度落定才淡入。
|
|
277
282
|
弹出面板里的行不在此列 */
|
|
278
|
-
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='branch-text']:not([data-popout]
|
|
279
|
-
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='link-text']:not([data-popout]
|
|
280
|
-
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='branch-indicator']:not([data-popout]
|
|
283
|
+
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='branch-text']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])),
|
|
284
|
+
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='link-text']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])),
|
|
285
|
+
[data-scope='side-nav'][data-part='root']:is([data-collapsed], [data-animating]) [data-part='branch-indicator']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])) {
|
|
281
286
|
opacity: 0;
|
|
282
287
|
}
|
|
283
288
|
|
|
@@ -286,8 +291,8 @@
|
|
|
286
291
|
藏成 display:none 它们就一个名字都没有了。
|
|
287
292
|
white-space: nowrap 防止 1px 宽把文本挤成竖排。
|
|
288
293
|
弹出面板里的行不在此列——面板是正常宽度的浮层,文字照常显示 */
|
|
289
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='branch-text']:not([data-popout]
|
|
290
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='link-text']:not([data-popout]
|
|
294
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='branch-text']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])),
|
|
295
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='link-text']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])) {
|
|
291
296
|
position: absolute;
|
|
292
297
|
inline-size: 1px;
|
|
293
298
|
block-size: 1px;
|
|
@@ -300,12 +305,12 @@
|
|
|
300
305
|
}
|
|
301
306
|
|
|
302
307
|
/* 展开指示是纯装饰(aria-hidden),落成图标栏之后整个不占位 */
|
|
303
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='branch-indicator']:not([data-popout]
|
|
308
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='branch-indicator']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])) {
|
|
304
309
|
display: none;
|
|
305
310
|
}
|
|
306
311
|
|
|
307
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='branch-trigger']:not([data-popout]
|
|
308
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='link']:not([data-popout]
|
|
312
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='branch-trigger']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])),
|
|
313
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='link']:where([data-scope='side-nav']):not([data-popout] :where([data-scope='side-nav'])) {
|
|
309
314
|
--xh-collection-inline-padding: 0;
|
|
310
315
|
|
|
311
316
|
justify-content: center;
|
|
@@ -441,7 +446,7 @@
|
|
|
441
446
|
|
|
442
447
|
@media (forced-colors: active) {
|
|
443
448
|
/* 图标栏里分组之间那道细分隔画的是一块底色,这一档里底色被统一换成 Canvas、整道消失;换成 GrayText 画回来 */
|
|
444
|
-
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='group-label']::after {
|
|
449
|
+
[data-scope='side-nav'][data-part='root'][data-collapsed]:not([data-animating]) [data-part='group-label']:where([data-scope='side-nav'])::after {
|
|
445
450
|
background: GrayText;
|
|
446
451
|
}
|
|
447
452
|
}
|
package/css/signature-pad.css
CHANGED
|
@@ -23,34 +23,34 @@
|
|
|
23
23
|
gap: var(--xh-signature-pad-gap, var(--xh-space-2));
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
/* 复合单字段的标签:14 /
|
|
26
|
+
/* 复合单字段的标签:14 / 400 / fg-muted,不随档;与画布隔 space-2——
|
|
27
27
|
容器的 gap 归画布之后的部件,标签在它之上补一段差值把距离收成目标值 */
|
|
28
28
|
[data-scope='signature-pad'][data-part='label'] {
|
|
29
29
|
margin-block-end: calc(
|
|
30
|
-
var(--xh-signature-pad-label-gap, var(--xh-space-
|
|
30
|
+
var(--xh-signature-pad-label-gap, var(--xh-space-2))
|
|
31
31
|
- var(--xh-signature-pad-gap, var(--xh-space-2))
|
|
32
32
|
);
|
|
33
|
-
color: var(--xh-signature-pad-label-fg, var(--xh-fg-
|
|
33
|
+
color: var(--xh-signature-pad-label-fg, var(--xh-fg-muted));
|
|
34
34
|
font-size: var(--xh-signature-pad-label-font-size, var(--xh-text-label-size));
|
|
35
35
|
font-weight: var(--xh-signature-pad-label-font-weight, var(--xh-text-label-weight));
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
[data-scope='signature-pad'][data-part='label'][data-disabled] {
|
|
39
|
-
color: var(--xh-signature-pad-label-fg-disabled, var(--xh-fg-
|
|
39
|
+
color: var(--xh-signature-pad-label-fg-disabled, var(--xh-fg-muted));
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
/* 画布是块状的写字区:宽度铺满外层,高度由宽高比决定。
|
|
43
43
|
控件行高那把尺量的是一行控件,一块要写字的面积用不上它。
|
|
44
44
|
touch-action 由连接层内联写死,触摸落笔才不会被页面滚动抢走。
|
|
45
45
|
外壳按字段规则自绘(登记的画布型字段例外:字段家族配方钉死控件行高,画布按宽高比撑高吃不下它):
|
|
46
|
-
|
|
46
|
+
静息字段淡底 + border-control 描边 + control 圆角 + 无影,与字段外壳同一副面 */
|
|
47
47
|
[data-scope='signature-pad'][data-part='control'] {
|
|
48
48
|
display: block;
|
|
49
49
|
inline-size: 100%;
|
|
50
50
|
aspect-ratio: var(--xh-signature-pad-aspect-ratio, 5 / 2);
|
|
51
51
|
border: var(--xh-stroke-thin) solid var(--xh-signature-pad-border, var(--xh-border-control));
|
|
52
52
|
border-radius: var(--xh-signature-pad-radius, var(--xh-shape-control));
|
|
53
|
-
background: var(--xh-signature-pad-bg,
|
|
53
|
+
background: var(--xh-signature-pad-bg, var(--xh-bg-field));
|
|
54
54
|
cursor: crosshair;
|
|
55
55
|
/* 一划就会把画布连同旁边的文字一起刷成选中态 */
|
|
56
56
|
user-select: none;
|
|
@@ -60,14 +60,21 @@
|
|
|
60
60
|
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
/* 悬停:底不变、描边升 border-strong,与字段外壳的悬停同一档 */
|
|
64
|
+
[data-scope='signature-pad'][data-part='control']:not([data-disabled]):not([data-readonly]):not([data-invalid]):not([data-drawing]):hover {
|
|
65
|
+
border-color: var(--xh-signature-pad-border-hover, var(--xh-border-strong));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* 校验失败:失效描边 + 4% 失效色淡底,与字段外壳的失效档同一副面 */
|
|
63
69
|
[data-scope='signature-pad'][data-part='control'][data-invalid] {
|
|
64
70
|
border-color: var(--xh-signature-pad-control-border-invalid, var(--xh-border-invalid));
|
|
71
|
+
background: var(--xh-signature-pad-bg-invalid, var(--xh-bg-field-invalid));
|
|
65
72
|
}
|
|
66
73
|
|
|
67
|
-
/*
|
|
68
|
-
用在这儿会让描边在落笔时反而变弱 */
|
|
74
|
+
/* 落笔期间与字段聚焦同一副面:换承载面 + 聚焦描边。排在失效之后,落笔时失效档让位 */
|
|
69
75
|
[data-scope='signature-pad'][data-part='control'][data-drawing] {
|
|
70
|
-
border-color: var(--xh-signature-pad-border-drawing, var(--xh-border-control-
|
|
76
|
+
border-color: var(--xh-signature-pad-border-drawing, var(--xh-border-control-focus));
|
|
77
|
+
background: var(--xh-signature-pad-bg-drawing, var(--xh-bg-surface));
|
|
71
78
|
}
|
|
72
79
|
|
|
73
80
|
/* 只读仍看得见签名,只是改不动:收掉手型,别暗示"在这儿能写";
|
|
@@ -176,4 +183,11 @@
|
|
|
176
183
|
[data-scope='signature-pad'][data-part='clear-trigger'][hidden] {
|
|
177
184
|
display: none;
|
|
178
185
|
}
|
|
186
|
+
|
|
187
|
+
/* 高对比档底色被系统换掉,落笔与失效只剩描边分得开:换系统高亮色 */
|
|
188
|
+
@media (forced-colors: active) {
|
|
189
|
+
[data-scope='signature-pad'][data-part='control']:is([data-drawing], [data-invalid]) {
|
|
190
|
+
border-color: Highlight;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
179
193
|
}
|
package/css/skeleton.css
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
[data-scope='skeleton'][data-part='root'] {
|
|
28
28
|
display: flex;
|
|
29
29
|
flex-direction: column;
|
|
30
|
-
gap: var(--xh-skeleton-gap, var(--xh-space-
|
|
30
|
+
gap: var(--xh-skeleton-gap, var(--xh-space-4));
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
/* 声明了 display 就盖掉了 UA 的 [hidden]{display:none},补这条兜住加载结束后的收起态 */
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
/*
|
|
46
46
|
* 单根骨架条。底色与微光两层叠在一起:
|
|
47
47
|
* background-color 是静止时看到的那层,background-image 是扫过去的那道光。
|
|
48
|
-
*
|
|
49
|
-
*
|
|
48
|
+
* 微光取淡底一档叠在条底上:浅色下黑墨叠深、扫过去是一道比条底深的暗带,
|
|
49
|
+
* 深色下白墨叠亮、是一道亮带;两个主题里都是条底往前景方向再进一档。
|
|
50
50
|
*/
|
|
51
51
|
[data-scope='skeleton'][data-part='item'] {
|
|
52
52
|
inline-size: 100%;
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
background-image: linear-gradient(
|
|
57
57
|
90deg,
|
|
58
58
|
transparent 20%,
|
|
59
|
-
var(--xh-skeleton-sheen, var(--xh-bg-
|
|
59
|
+
var(--xh-skeleton-sheen, var(--xh-bg-subtle)) 50%,
|
|
60
60
|
transparent 80%
|
|
61
61
|
);
|
|
62
62
|
background-repeat: no-repeat;
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
animation: xh-shimmer var(--xh-skeleton-duration, var(--xh-motion-loop-shimmer)) var(--xh-motion-ease-loop) infinite;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
/*
|
|
68
|
+
/* 一行文字的高度取一行正文的行框,小圆角的方条,看起来就是一行还没排出来的字 */
|
|
69
69
|
[data-scope='skeleton'][data-part='item'][data-shape='text'] {
|
|
70
|
-
block-size: var(--xh-skeleton-text-block-size, var(--xh-text-
|
|
71
|
-
border-radius: var(--xh-skeleton-text-radius, var(--xh-shape-
|
|
70
|
+
block-size: var(--xh-skeleton-text-block-size, var(--xh-text-body-line-h));
|
|
71
|
+
border-radius: var(--xh-skeleton-text-radius, var(--xh-shape-inset));
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
/* 头像位:正方形加满圆角。宽度定死不跟着容器拉长,高度也不许被主轴压扁 */
|
|
@@ -90,13 +90,13 @@
|
|
|
90
90
|
* 微光扫的是一道亮带,呼吸改的是整根的浓淡——两者都表达"还在等",
|
|
91
91
|
* 换哪一档由作者定,缺省仍是微光。
|
|
92
92
|
*/
|
|
93
|
-
[data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item'] {
|
|
93
|
+
[data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item']:where([data-scope='skeleton']) {
|
|
94
94
|
background-image: none;
|
|
95
95
|
animation: xh-skeleton-pulse var(--xh-skeleton-pulse-duration, var(--xh-motion-loop-shimmer)) var(--xh-motion-ease-sweep) infinite alternate;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
/* 静止档:底色留着,两层动效都撤掉 */
|
|
99
|
-
[data-scope='skeleton'][data-part='root'][data-animation='none'] [data-part='item'] {
|
|
99
|
+
[data-scope='skeleton'][data-part='root'][data-animation='none'] [data-part='item']:where([data-scope='skeleton']) {
|
|
100
100
|
background-image: none;
|
|
101
101
|
animation: none;
|
|
102
102
|
}
|
|
@@ -104,17 +104,17 @@
|
|
|
104
104
|
/* 呼吸档自带一条动画,压不住下面基础降级里的 animation: none,这一档各自再写一份。
|
|
105
105
|
两组规则是同一件事的两个触发条件:系统偏好与作者打的 data-motion */
|
|
106
106
|
@media (prefers-reduced-motion: reduce) {
|
|
107
|
-
[data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item'] {
|
|
107
|
+
[data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item']:where([data-scope='skeleton']) {
|
|
108
108
|
animation: none;
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
:where([data-motion='reduce']) [data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item'] {
|
|
112
|
+
:where([data-motion='reduce']) [data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item']:where([data-scope='skeleton']) {
|
|
113
113
|
animation: none;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
@media print {
|
|
117
|
-
[data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item'] {
|
|
117
|
+
[data-scope='skeleton'][data-part='root'][data-animation='pulse'] [data-part='item']:where([data-scope='skeleton']) {
|
|
118
118
|
animation: none;
|
|
119
119
|
}
|
|
120
120
|
}
|
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 上会被轨道的盒子束住)。
|
|
@@ -64,7 +67,7 @@
|
|
|
64
67
|
排了刻度文案的横轨两侧各让出一段,那半个文案落进让出来的这一段里。
|
|
65
68
|
让在控件上而不是根上:轨道、刻度、拇指的坐标都以控件为基准,一起让开才不会彼此错位。 */
|
|
66
69
|
[data-scope='slider'][data-part='root']:has([data-part='tick-label'])
|
|
67
|
-
[data-part='control'][data-orientation='horizontal'] {
|
|
70
|
+
[data-part='control'][data-orientation='horizontal']:where([data-scope='slider']) {
|
|
68
71
|
margin-inline: var(--xh-slider-control-gutter, var(--xh-space-6));
|
|
69
72
|
}
|
|
70
73
|
|
|
@@ -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,28 +363,28 @@
|
|
|
334
363
|
}
|
|
335
364
|
|
|
336
365
|
/* 禁用:刻度点与文案由 tick-group 上的 data-disabled 下发(连接层不给每个刻度单发),
|
|
337
|
-
|
|
338
|
-
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick'] {
|
|
339
|
-
|
|
366
|
+
刻度点描边与底槽同退到 100 档、已过的与区间同退到 200 档,文案换禁用前景,点它跳档的手型收掉 */
|
|
367
|
+
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick']:where([data-scope='slider']) {
|
|
368
|
+
border-color: var(--xh-slider-tick-border-disabled, var(--xh-bg-subtle));
|
|
340
369
|
}
|
|
341
370
|
|
|
342
|
-
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick'][data-passed] {
|
|
343
|
-
|
|
371
|
+
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick'][data-passed]:where([data-scope='slider']) {
|
|
372
|
+
border-color: var(--xh-slider-tick-border-active-disabled, var(--xh-bg-subtle-hover-opaque));
|
|
344
373
|
}
|
|
345
374
|
|
|
346
|
-
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick-label'] {
|
|
375
|
+
[data-scope='slider'][data-part='tick-group'][data-disabled] [data-part='tick-label']:where([data-scope='slider']) {
|
|
347
376
|
color: var(--xh-slider-tick-label-fg-disabled, var(--xh-fg-disabled));
|
|
348
377
|
cursor: not-allowed;
|
|
349
378
|
}
|
|
350
379
|
|
|
351
380
|
/* 竖直轨道:点与文案换轴,坐标由连接层写在 block 轴上 */
|
|
352
|
-
[data-scope='slider'][data-part='root'][data-orientation='vertical'] [data-part='tick'] {
|
|
381
|
+
[data-scope='slider'][data-part='root'][data-orientation='vertical'] [data-part='tick']:where([data-scope='slider']) {
|
|
353
382
|
inset-block-start: auto;
|
|
354
383
|
inset-inline-start: 50%;
|
|
355
384
|
translate: calc(-50% * var(--xh-direction-sign)) 50%;
|
|
356
385
|
}
|
|
357
386
|
|
|
358
|
-
[data-scope='slider'][data-part='root'][data-orientation='vertical'] [data-part='tick-label'] {
|
|
387
|
+
[data-scope='slider'][data-part='root'][data-orientation='vertical'] [data-part='tick-label']:where([data-scope='slider']) {
|
|
359
388
|
inset-block-start: auto;
|
|
360
389
|
inset-inline-start: 100%;
|
|
361
390
|
margin-block-start: 0;
|
package/css/sortable.css
CHANGED
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
其余项反过来要过渡:它们是被让开的,瞬移会看不出发生了什么。
|
|
51
51
|
键盘拖动时被拖那一项不跟手、逐格挪,与让位的邻项同一段一起滑;抓起时的抬升照常淡变。
|
|
52
52
|
同组别的列表的一项悬在这里(data-drop='inside')时,插入点及其后的项同样是被让开的 */
|
|
53
|
-
[data-scope='sortable'][data-part='root']:is([data-dragging], [data-drop='inside']) [data-part='item']:not([data-dragging]) {
|
|
53
|
+
[data-scope='sortable'][data-part='root']:is([data-dragging], [data-drop='inside']) [data-part='item']:where([data-scope='sortable']):not([data-dragging]) {
|
|
54
54
|
transition: translate var(--xh-motion-duration-nudge) var(--xh-motion-ease-continuous);
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
flex: 0 0 var(--xh-_sortable-incoming-size);
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
[data-scope='sortable'][data-part='root'][data-drag-mode='keyboard'] [data-part='item'][data-dragging] {
|
|
65
|
+
[data-scope='sortable'][data-part='root'][data-drag-mode='keyboard'] [data-part='item'][data-dragging]:where([data-scope='sortable']) {
|
|
66
66
|
transition:
|
|
67
67
|
translate var(--xh-motion-duration-nudge) var(--xh-motion-ease-continuous),
|
|
68
68
|
box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
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;
|