@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/page-header.css
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
/* 定义 page header 样式。 */
|
|
7
7
|
|
|
8
|
+
/* 返回钮接动作钮家族:独立引入本皮肤时同样带上家族配方,full bundle 递归去重。 */
|
|
9
|
+
@import '../family/action-control.css';
|
|
10
|
+
|
|
8
11
|
@layer xihan.components {
|
|
9
12
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
10
13
|
[data-scope='page-header'] {
|
|
@@ -14,16 +17,17 @@
|
|
|
14
17
|
[data-scope='page-header'][data-part='root'] {
|
|
15
18
|
/* 尺寸档只换这三个私有槽,各段从根上继承它们,换档不必给每个部件各写一条选择器 */
|
|
16
19
|
--xh-_page-header-py: var(--xh-space-4);
|
|
17
|
-
--xh-_page-header-row-gap: var(--xh-space-
|
|
18
|
-
--xh-_page-header-title-size: var(--xh-text-heading-
|
|
20
|
+
--xh-_page-header-row-gap: var(--xh-space-1);
|
|
21
|
+
--xh-_page-header-title-size: var(--xh-text-heading-2-size);
|
|
19
22
|
/* 形态档只换这两个:不画面的那一档左右不留内衬、也不切圆角 */
|
|
20
23
|
--xh-_page-header-px: 0;
|
|
21
24
|
--xh-_page-header-radius: 0;
|
|
22
25
|
|
|
23
|
-
/*
|
|
26
|
+
/* 返回、媒体、标题、副标题与操作区分列:副标题跟在标题后面同一行,中间一条竖线隔开。
|
|
27
|
+
标题列按内容宽、但能收到 0,副标题列至少留下竖线与一个字:不可断的长标题在列内断行,不把页头撑出容器 */
|
|
24
28
|
display: grid;
|
|
25
29
|
grid-auto-flow: dense;
|
|
26
|
-
grid-template-columns: auto auto minmax(0, 1fr) auto;
|
|
30
|
+
grid-template-columns: auto auto minmax(0, max-content) minmax(min-content, 1fr) auto;
|
|
27
31
|
align-items: center;
|
|
28
32
|
row-gap: var(--xh-page-header-row-gap, var(--xh-_page-header-row-gap));
|
|
29
33
|
padding-block: var(--xh-page-header-py, var(--xh-_page-header-py));
|
|
@@ -40,21 +44,26 @@
|
|
|
40
44
|
/* —— 尺寸 —— */
|
|
41
45
|
[data-scope='page-header'][data-part='root'][data-size='sm'] {
|
|
42
46
|
--xh-_page-header-py: var(--xh-space-3);
|
|
43
|
-
--xh-_page-header-row-gap: var(--xh-space-
|
|
47
|
+
--xh-_page-header-row-gap: var(--xh-space-0_5);
|
|
44
48
|
--xh-_page-header-title-size: var(--xh-control-font-lg);
|
|
45
49
|
}
|
|
46
50
|
|
|
47
51
|
[data-scope='page-header'][data-part='root'][data-size='lg'] {
|
|
48
52
|
--xh-_page-header-py: var(--xh-space-6);
|
|
49
|
-
--xh-_page-header-row-gap: var(--xh-space-
|
|
50
|
-
--xh-_page-header-title-size: var(--xh-text-heading-
|
|
53
|
+
--xh-_page-header-row-gap: var(--xh-space-2);
|
|
54
|
+
--xh-_page-header-title-size: var(--xh-text-heading-1-size);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* 带面包屑的缺省档上下收一档:面包屑本身已在标题之上占了一行 */
|
|
58
|
+
[data-scope='page-header'][data-part='root']:not([data-size='sm'], [data-size='lg']):has(> [data-part='breadcrumb']) {
|
|
59
|
+
--xh-_page-header-py: var(--xh-space-3);
|
|
51
60
|
}
|
|
52
61
|
|
|
53
62
|
/* —— 分隔线 —— */
|
|
54
63
|
/* 只有贴底的 ghost 画这条下边线:一块切了圆角的面底下横一条直线,两头会露在圆角外面,
|
|
55
64
|
有面的两档由自己的边界接手同一件事——把页头与下面的内容分开 */
|
|
56
65
|
[data-scope='page-header'][data-part='root'][data-variant='ghost'][data-split] {
|
|
57
|
-
border-block-end: var(--xh-stroke-thin) solid var(--xh-page-header-border, var(--xh-border-
|
|
66
|
+
border-block-end: var(--xh-stroke-thin) solid var(--xh-page-header-border, var(--xh-border-default));
|
|
58
67
|
}
|
|
59
68
|
|
|
60
69
|
/* —— 形态 —— */
|
|
@@ -96,13 +105,14 @@
|
|
|
96
105
|
justify-content: center;
|
|
97
106
|
}
|
|
98
107
|
|
|
99
|
-
/*
|
|
108
|
+
/* 返回位是 icon ghost 档的动作钮:盒与三态面由家族给,这里只摆位置并把字色压到次级前景 */
|
|
100
109
|
[data-scope='page-header'][data-part='back-trigger'] {
|
|
110
|
+
--xh-action-fg-rest: var(--xh-page-header-back-fg, var(--xh-fg-muted));
|
|
111
|
+
--xh-action-fg-hover: var(--xh-page-header-back-fg-hover, var(--xh-fg-default));
|
|
112
|
+
--xh-action-fg-pressed: var(--xh-page-header-back-fg-hover, var(--xh-fg-default));
|
|
113
|
+
|
|
101
114
|
grid-column: 1;
|
|
102
115
|
margin-inline-end: var(--xh-page-header-column-gap, var(--xh-space-3));
|
|
103
|
-
display: inline-flex;
|
|
104
|
-
align-items: center;
|
|
105
|
-
justify-content: center;
|
|
106
116
|
}
|
|
107
117
|
|
|
108
118
|
[data-scope='page-header'][data-part='title'] {
|
|
@@ -115,23 +125,36 @@
|
|
|
115
125
|
color: var(--xh-page-header-title-fg, var(--xh-fg-default));
|
|
116
126
|
font-size: var(--xh-page-header-title-font-size, var(--xh-_page-header-title-size));
|
|
117
127
|
/* 页面级标题:字重走标题档令牌,不直接下探字重原语 */
|
|
118
|
-
font-weight: var(--xh-page-header-title-font-weight, var(--xh-text-heading-
|
|
128
|
+
font-weight: var(--xh-page-header-title-font-weight, var(--xh-text-heading-2-weight));
|
|
119
129
|
line-height: var(--xh-leading-tight);
|
|
120
130
|
}
|
|
121
131
|
|
|
122
|
-
/*
|
|
132
|
+
/* 副标题跟在标题后面、吃掉到操作区之间的剩余宽度,长文本在这里收窄换行;
|
|
133
|
+
与标题之间一条 1 × 16px 的竖线,两侧各 12px */
|
|
123
134
|
[data-scope='page-header'][data-part='description'] {
|
|
124
|
-
grid-column:
|
|
135
|
+
grid-column: 4;
|
|
136
|
+
display: flex;
|
|
137
|
+
align-items: center;
|
|
125
138
|
margin: 0;
|
|
126
139
|
min-inline-size: 0;
|
|
127
|
-
color: var(--xh-page-header-description-fg, var(--xh-fg-
|
|
128
|
-
font-size: var(--xh-page-header-description-font-size, var(--xh-text-
|
|
140
|
+
color: var(--xh-page-header-description-fg, var(--xh-fg-subtle));
|
|
141
|
+
font-size: var(--xh-page-header-description-font-size, var(--xh-text-body-size));
|
|
129
142
|
line-height: var(--xh-leading-normal);
|
|
130
143
|
}
|
|
131
144
|
|
|
145
|
+
[data-scope='page-header'][data-part='title'] + [data-scope='page-header'][data-part='description']::before {
|
|
146
|
+
content: '';
|
|
147
|
+
flex: none;
|
|
148
|
+
align-self: center;
|
|
149
|
+
inline-size: var(--xh-stroke-thin);
|
|
150
|
+
block-size: var(--xh-glyph-size-sm);
|
|
151
|
+
margin-inline: var(--xh-space-3);
|
|
152
|
+
background: var(--xh-page-header-divider, var(--xh-border-default));
|
|
153
|
+
}
|
|
154
|
+
|
|
132
155
|
/* 操作区贴到行尾,没有副标题占位时也一样靠边 */
|
|
133
156
|
[data-scope='page-header'][data-part='extra'] {
|
|
134
|
-
grid-column:
|
|
157
|
+
grid-column: 5;
|
|
135
158
|
display: flex;
|
|
136
159
|
flex-wrap: wrap;
|
|
137
160
|
align-items: center;
|
|
@@ -140,21 +163,17 @@
|
|
|
140
163
|
justify-self: end;
|
|
141
164
|
}
|
|
142
165
|
|
|
143
|
-
/*
|
|
166
|
+
/* 页脚占满一整行,前面有内容时自然被挤到下一行;与标题行之间再让出 12px */
|
|
144
167
|
[data-scope='page-header'][data-part='footer'] {
|
|
145
168
|
grid-column: 1 / -1;
|
|
169
|
+
margin-block-start: var(--xh-space-3);
|
|
146
170
|
color: var(--xh-page-header-footer-fg, var(--xh-fg-muted));
|
|
147
171
|
font-size: var(--xh-page-header-footer-font-size, var(--xh-text-secondary-size));
|
|
148
172
|
line-height: var(--xh-leading-normal);
|
|
149
173
|
}
|
|
150
174
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
grid-row: span 2;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/* 窄于 sm 断点时标题区占满第二列、操作区换到下一行。写成 min-width 的补集:640px 本身归宽档,
|
|
157
|
-
与其余皮肤在同一宽度切换 */
|
|
175
|
+
/* 窄于 sm 断点时标题区占满第二列、副标题回到标题下一行、操作区换到再下一行。
|
|
176
|
+
写成 min-width 的补集:640px 本身归宽档,与其余皮肤在同一宽度切换 */
|
|
158
177
|
@media not all and (min-width: 640px) {
|
|
159
178
|
[data-scope='page-header'][data-part='root'] {
|
|
160
179
|
grid-template-columns: auto minmax(0, 1fr);
|
|
@@ -166,7 +185,16 @@
|
|
|
166
185
|
grid-column: 2;
|
|
167
186
|
}
|
|
168
187
|
|
|
169
|
-
[data-scope='page-header'][data-part='
|
|
188
|
+
[data-scope='page-header'][data-part='title'] + [data-scope='page-header'][data-part='description']::before {
|
|
189
|
+
display: none;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
[data-scope='page-header'][data-part='root']:has(> [data-part='description'])
|
|
193
|
+
> :is([data-part='back-trigger'], [data-part='media']):where([data-scope='page-header']) {
|
|
194
|
+
grid-row: span 2;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
[data-scope='page-header'][data-part='root'] > [data-part='extra']:where([data-scope='page-header']) {
|
|
170
198
|
grid-column: 1 / -1;
|
|
171
199
|
grid-row: auto;
|
|
172
200
|
margin-inline-start: 0;
|
|
@@ -174,10 +202,19 @@
|
|
|
174
202
|
}
|
|
175
203
|
}
|
|
176
204
|
|
|
205
|
+
/* 强制色:标题与副标题之间的竖线是底色画的,系统换掉底色线就消失,改写 CanvasText */
|
|
206
|
+
@media (forced-colors: active) {
|
|
207
|
+
[data-scope='page-header'][data-part='title'] + [data-scope='page-header'][data-part='description']::before {
|
|
208
|
+
forced-color-adjust: none;
|
|
209
|
+
background: CanvasText;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
177
213
|
/* 声明过任何 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去。
|
|
178
214
|
写在文件末尾:兜底必须排在该部件所有 display 声明之后 */
|
|
179
215
|
[data-scope='page-header'][data-part='back-trigger'][hidden],
|
|
180
216
|
[data-scope='page-header'][data-part='media'][hidden],
|
|
217
|
+
[data-scope='page-header'][data-part='description'][hidden],
|
|
181
218
|
[data-scope='page-header'][data-part='extra'][hidden] {
|
|
182
219
|
display: none;
|
|
183
220
|
}
|
package/css/pagination.css
CHANGED
|
@@ -22,20 +22,22 @@
|
|
|
22
22
|
/* 作者塞进面板或分页行里的图标按档取字形尺;四类格子上另按家族档位取同一把尺 */
|
|
23
23
|
--xh-icon-size: var(--xh-pagination-icon-size, var(--xh-glyph-size-md));
|
|
24
24
|
|
|
25
|
-
/*
|
|
26
|
-
|
|
25
|
+
/* 尺寸档只换这几个私有槽,上一页/下一页、页码与省略号都从这两处继承它们,
|
|
26
|
+
换档不必给每个部件各写一条选择器。格子的横内衬比控件尺窄一档:一位数的页码加两侧内衬
|
|
27
|
+
要收得进方格的最小宽度,格子才是正方的;跳页输入框是字段,仍取控件尺的横内衬 */
|
|
27
28
|
--xh-_pagination-item-size: var(--xh-control-h-md);
|
|
28
|
-
--xh-_pagination-item-px: var(--xh-
|
|
29
|
+
--xh-_pagination-item-px: var(--xh-space-2);
|
|
30
|
+
--xh-_pagination-jumper-px: var(--xh-control-px-md);
|
|
29
31
|
--xh-_pagination-font-size: var(--xh-control-font-md);
|
|
30
32
|
|
|
31
33
|
/* 当前页的选中态随语气走。没写 data-tone 时这几个 --xh-_tone-* 都没被声明,
|
|
32
34
|
退回原来的品牌底与其配色。聚焦环不在其列,它恒是 --xh-ring-focus */
|
|
33
|
-
--xh-_pagination-selected-bg: var(--xh-_tone, var(--xh-bg-brand));
|
|
34
|
-
--xh-_pagination-selected-bg-hover: var(--xh-_tone-hover, var(--xh-bg-brand-hover));
|
|
35
|
-
--xh-_pagination-selected-bg-active: var(--xh-_tone-active, var(--xh-bg-brand-active));
|
|
36
|
-
--xh-_pagination-selected-fg: var(--xh-_tone-
|
|
35
|
+
--xh-_pagination-selected-bg: var(--xh-_tone-subtle, var(--xh-bg-brand-subtle));
|
|
36
|
+
--xh-_pagination-selected-bg-hover: var(--xh-_tone-subtle-hover, var(--xh-bg-brand-subtle-hover));
|
|
37
|
+
--xh-_pagination-selected-bg-active: var(--xh-_tone-subtle-active, var(--xh-bg-brand-subtle-active));
|
|
38
|
+
--xh-_pagination-selected-fg: var(--xh-_tone-fg, var(--xh-fg-on-brand-subtle));
|
|
39
|
+
--xh-_pagination-selected-border: var(--xh-_tone-border-control, var(--xh-bg-brand));
|
|
37
40
|
/* 当前页那一格是实心底,顶边画一条极浅的内高光把它衬出厚度(solid 面允许顶高光,经家族的 highlight 槽画) */
|
|
38
|
-
--xh-_pagination-highlight: var(--xh-_highlight-tone);
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
/* 根节点是 nav 地标,只负责把上一页 / 页码 / 下一页排成一行。
|
|
@@ -55,14 +57,16 @@
|
|
|
55
57
|
[data-scope='pagination']:is([data-part='root'], [data-part='positioner'])[data-size='sm'] {
|
|
56
58
|
--xh-icon-size: var(--xh-pagination-icon-size, var(--xh-glyph-size-sm));
|
|
57
59
|
--xh-_pagination-item-size: var(--xh-control-h-sm);
|
|
58
|
-
--xh-_pagination-item-px: var(--xh-
|
|
60
|
+
--xh-_pagination-item-px: var(--xh-space-1_5);
|
|
61
|
+
--xh-_pagination-jumper-px: var(--xh-control-px-sm);
|
|
59
62
|
--xh-_pagination-font-size: var(--xh-control-font-sm);
|
|
60
63
|
}
|
|
61
64
|
|
|
62
65
|
[data-scope='pagination']:is([data-part='root'], [data-part='positioner'])[data-size='lg'] {
|
|
63
66
|
--xh-icon-size: var(--xh-pagination-icon-size, var(--xh-glyph-size-lg));
|
|
64
67
|
--xh-_pagination-item-size: var(--xh-control-h-lg);
|
|
65
|
-
--xh-_pagination-item-px: var(--xh-
|
|
68
|
+
--xh-_pagination-item-px: var(--xh-space-2_5);
|
|
69
|
+
--xh-_pagination-jumper-px: var(--xh-control-px-lg);
|
|
66
70
|
--xh-_pagination-font-size: var(--xh-control-font-lg);
|
|
67
71
|
}
|
|
68
72
|
|
|
@@ -70,9 +74,9 @@
|
|
|
70
74
|
display: none;
|
|
71
75
|
}
|
|
72
76
|
|
|
73
|
-
/* 各类格子接 Action Control 的 text
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
/* 各类格子接 Action Control 的 text 档(连接层投影 ghost 形态):盒型、三档几何、禁用面、按压与过渡都由家族给。
|
|
78
|
+
分页把每一格画成描边方块:静息一道装饰边、透明底,悬停边加深一档、字转正文色,底走家族的承载面阶梯;
|
|
79
|
+
省略位也占同样一格,几种格子内容盒等高,一行里对得齐。这里把使用者槽映射到桥接槽并保留分页自己的排版。
|
|
76
80
|
等宽的关键:1 与 10 的内容宽度不同,靠最小宽度把它们撑到同一格,行宽才不会随当前页左右抖动 */
|
|
77
81
|
[data-scope='pagination'][data-part='first-trigger'],
|
|
78
82
|
[data-scope='pagination'][data-part='prev-trigger'],
|
|
@@ -83,14 +87,19 @@
|
|
|
83
87
|
--xh-action-min-inline-size: var(--xh-pagination-item-min-size, var(--xh-_pagination-item-size));
|
|
84
88
|
--xh-action-visual-size: var(--xh-pagination-item-h, var(--xh-_pagination-item-size));
|
|
85
89
|
--xh-action-padding-inline: var(--xh-pagination-item-px, var(--xh-_pagination-item-px));
|
|
86
|
-
--xh-action-radius: var(--xh-pagination-item-radius, var(--xh-shape-
|
|
90
|
+
--xh-action-radius: var(--xh-pagination-item-radius, var(--xh-shape-surface));
|
|
87
91
|
--xh-action-font-size: var(--xh-pagination-font-size, var(--xh-_pagination-font-size));
|
|
88
92
|
--xh-action-bg-rest: var(--xh-pagination-item-bg, var(--xh-_action-variant-bg-rest));
|
|
89
93
|
--xh-action-bg-hover: var(--xh-pagination-item-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
90
94
|
--xh-action-bg-pressed: var(--xh-pagination-item-bg-active, var(--xh-_action-variant-bg-pressed));
|
|
95
|
+
--xh-action-border-rest: var(--xh-pagination-item-border, var(--xh-border-default));
|
|
96
|
+
--xh-action-border-hover: var(--xh-pagination-item-border-hover, var(--xh-border-strong));
|
|
97
|
+
--xh-action-border-pressed: var(--xh-pagination-item-border-hover, var(--xh-border-strong));
|
|
98
|
+
--xh-action-border-focus-visible: var(--xh-pagination-item-border, var(--xh-border-default));
|
|
99
|
+
--xh-action-border-disabled: var(--xh-pagination-item-border, var(--xh-border-default));
|
|
91
100
|
--xh-action-fg-rest: var(--xh-pagination-item-fg, var(--xh-_action-variant-fg-rest));
|
|
92
|
-
--xh-action-fg-hover: var(--xh-pagination-item-fg, var(--xh-
|
|
93
|
-
--xh-action-fg-pressed: var(--xh-pagination-item-fg, var(--xh-
|
|
101
|
+
--xh-action-fg-hover: var(--xh-pagination-item-fg, var(--xh-fg-default));
|
|
102
|
+
--xh-action-fg-pressed: var(--xh-pagination-item-fg, var(--xh-fg-default));
|
|
94
103
|
/* 作者塞进翻页钮的图标按档取字形尺,与皮肤画的兜底字形同一把尺 */
|
|
95
104
|
--xh-icon-size: var(--xh-pagination-icon-size, var(--xh-_action-profile-glyph-size));
|
|
96
105
|
|
|
@@ -112,10 +121,9 @@
|
|
|
112
121
|
/* 到头那一侧的翻页钮是原生 disabled(不可聚焦、进不了 Tab 序列),连接层同时给 data-disabled,
|
|
113
122
|
家族按 data-disabled 画禁用面(透明底 + --xh-fg-disabled);整组 disabled 时页码与省略位同样如此 */
|
|
114
123
|
|
|
115
|
-
/*
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
solid 面允许一条顶高光,环色改取面自己的前景 */
|
|
124
|
+
/* 当前页:data-current 与 aria-current='page' 由连接层成对给出,样式挂在 data 钩子上,无障碍语义留给 aria。
|
|
125
|
+
品牌描边 + 品牌淡底 + 淡底前景、不加粗——字重一变字形就变宽,页码格子会跟着长一点,正是这里要避免的抖动;
|
|
126
|
+
悬停 / 按下沿淡底 12% → 20% → 28% 走,边不变,三态都经桥接槽交给家族画 */
|
|
119
127
|
[data-scope='pagination'][data-part='item'][data-current] {
|
|
120
128
|
--xh-action-bg-rest: var(--xh-pagination-item-bg-selected, var(--xh-_pagination-selected-bg));
|
|
121
129
|
--xh-action-bg-hover: var(--xh-pagination-item-bg-selected-hover, var(--xh-_pagination-selected-bg-hover));
|
|
@@ -125,22 +133,17 @@
|
|
|
125
133
|
--xh-action-fg-hover: var(--xh-pagination-item-fg-selected, var(--xh-_pagination-selected-fg));
|
|
126
134
|
--xh-action-fg-pressed: var(--xh-pagination-item-fg-selected, var(--xh-_pagination-selected-fg));
|
|
127
135
|
--xh-action-fg-focus-visible: var(--xh-pagination-item-fg-selected, var(--xh-_pagination-selected-fg));
|
|
128
|
-
--xh-action-border-rest: var(--xh-pagination-item-border-selected, var(--xh-_pagination-selected-
|
|
129
|
-
--xh-action-border-hover: var(--xh-pagination-item-border-selected-hover, var(--xh-_pagination-selected-
|
|
130
|
-
--xh-action-border-pressed: var(--xh-pagination-item-border-selected-active, var(--xh-_pagination-selected-
|
|
131
|
-
--xh-action-border-focus-visible: var(--xh-pagination-item-border-selected, var(--xh-_pagination-selected-
|
|
132
|
-
--xh-action-highlight-rest: var(--xh-_pagination-highlight);
|
|
133
|
-
--xh-action-highlight-hover: var(--xh-_pagination-highlight);
|
|
134
|
-
--xh-action-highlight-pressed: var(--xh-_pagination-highlight);
|
|
135
|
-
--xh-action-highlight-focus-visible: var(--xh-_pagination-highlight);
|
|
136
|
+
--xh-action-border-rest: var(--xh-pagination-item-border-selected, var(--xh-_pagination-selected-border));
|
|
137
|
+
--xh-action-border-hover: var(--xh-pagination-item-border-selected-hover, var(--xh-_pagination-selected-border));
|
|
138
|
+
--xh-action-border-pressed: var(--xh-pagination-item-border-selected-active, var(--xh-_pagination-selected-border));
|
|
139
|
+
--xh-action-border-focus-visible: var(--xh-pagination-item-border-selected, var(--xh-_pagination-selected-border));
|
|
136
140
|
--xh-action-shadow-rest: var(--xh-pagination-item-shadow, none);
|
|
137
141
|
--xh-action-shadow-hover: var(--xh-pagination-item-shadow, none);
|
|
138
142
|
--xh-action-shadow-pressed: var(--xh-pagination-item-shadow, none);
|
|
139
143
|
--xh-action-shadow-focus-visible: var(--xh-pagination-item-shadow, none);
|
|
140
|
-
--xh-action-ring-color-focus-visible: currentColor;
|
|
141
144
|
}
|
|
142
145
|
|
|
143
|
-
/*
|
|
146
|
+
/* 整组禁用时当前页不跟着透明:品牌淡底退成中性淡底、字取禁用色,格子仍标得出位置,又一眼看得出按不动 */
|
|
144
147
|
[data-scope='pagination'][data-part='item'][data-current][data-disabled] {
|
|
145
148
|
--xh-action-bg-disabled: var(--xh-bg-subtle);
|
|
146
149
|
--xh-action-border-disabled: var(--xh-bg-subtle);
|
|
@@ -192,7 +195,7 @@
|
|
|
192
195
|
高度、内衬与圆角跟页码格子同一把尺,宽度按页码位数留够 */
|
|
193
196
|
[data-scope='pagination'][data-part='jumper'] {
|
|
194
197
|
--xh-field-control-height: var(--xh-pagination-item-h, var(--xh-_pagination-item-size));
|
|
195
|
-
--xh-field-control-padding-inline: var(--xh-pagination-item-px, var(--xh-_pagination-
|
|
198
|
+
--xh-field-control-padding-inline: var(--xh-pagination-item-px, var(--xh-_pagination-jumper-px));
|
|
196
199
|
--xh-field-control-min-inline-size: 0;
|
|
197
200
|
--xh-field-control-radius: var(--xh-pagination-item-radius, var(--xh-shape-control));
|
|
198
201
|
--xh-field-bg-rest: var(--xh-pagination-jumper-bg, var(--xh-_field-variant-bg-rest));
|
|
@@ -203,8 +206,6 @@
|
|
|
203
206
|
--xh-field-border-hover: var(--xh-pagination-jumper-border-hover, var(--xh-_field-variant-border-hover));
|
|
204
207
|
--xh-field-border-focus: var(--xh-pagination-jumper-border-focus, var(--xh-_field-variant-border-focus));
|
|
205
208
|
--xh-field-border-invalid: var(--xh-pagination-jumper-border-invalid, var(--xh-_field-variant-border-invalid));
|
|
206
|
-
--xh-field-ring-focus: var(--xh-ring-focus);
|
|
207
|
-
--xh-field-ring-invalid: var(--xh-ring-invalid);
|
|
208
209
|
--xh-field-shadow-rest: none;
|
|
209
210
|
|
|
210
211
|
flex: none;
|
|
@@ -220,16 +221,12 @@
|
|
|
220
221
|
display: none;
|
|
221
222
|
}
|
|
222
223
|
|
|
223
|
-
/* 越界的页码(超出 1
|
|
224
|
+
/* 越界的页码(超出 1 到总页数):浏览器的约束校验在用户动过之后判失败,与字段家族的校验失败同一副边。
|
|
224
225
|
家族的失败档认 data-invalid,跳页框的取值不进状态机,失败由原生约束给出 */
|
|
225
226
|
[data-scope='pagination'][data-part='jumper']:user-invalid {
|
|
226
227
|
border-color: var(--xh-field-border-invalid, var(--xh-_field-variant-border-invalid));
|
|
227
228
|
}
|
|
228
229
|
|
|
229
|
-
[data-scope='pagination'][data-part='jumper']:user-invalid:focus-within {
|
|
230
|
-
outline-color: var(--xh-field-ring-invalid, var(--xh-ring-invalid));
|
|
231
|
-
}
|
|
232
|
-
|
|
233
230
|
/* 摊开省略位的定位层。三处坐标系必须同为 fixed:机器交给引擎的 strategy、
|
|
234
231
|
连接层的内联 position、这里 —— 差一处就会算在错的坐标系里 */
|
|
235
232
|
[data-scope='pagination'][data-part='positioner'] {
|
package/css/password-input.css
CHANGED
|
@@ -31,8 +31,6 @@
|
|
|
31
31
|
/* 提示与切换钮里的字形都比正文小一档,三个尺寸档各自换过,不是一个恒等的中转 */
|
|
32
32
|
--xh-_password-input-caps-lock-font-size: var(--xh-control-caption-md);
|
|
33
33
|
--xh-_password-input-trigger-font-size: var(--xh-control-caption-md);
|
|
34
|
-
/* 切换钮与输入之间那道线的长度:取钮高的一半,线的上下各留一截空白 */
|
|
35
|
-
--xh-_password-input-divider-h: 50%;
|
|
36
34
|
|
|
37
35
|
/* 盒里有两个 Tab 停靠点,切换钮上再画一圈自己的环;环恒用 --xh-ring-focus,校验失败时随盒换红 */
|
|
38
36
|
--xh-_password-input-ring: var(--xh-ring-focus);
|
|
@@ -77,13 +75,15 @@
|
|
|
77
75
|
|
|
78
76
|
/* —— 标题 —— */
|
|
79
77
|
[data-scope='password-input'][data-part='label'] {
|
|
80
|
-
|
|
78
|
+
/* 竖排时标签与控件之间的距离:根的 gap 之上补一段差值,--xh-password-input-label-gap 给多少最终就是多少 */
|
|
79
|
+
margin-block-end: calc(var(--xh-password-input-label-gap, var(--xh-space-2)) - var(--xh-password-input-gap, var(--xh-space-1)));
|
|
80
|
+
color: var(--xh-password-input-label-fg, var(--xh-fg-muted));
|
|
81
81
|
font-size: var(--xh-password-input-label-font-size, var(--xh-text-label-size));
|
|
82
82
|
font-weight: var(--xh-password-input-label-font-weight, var(--xh-text-label-weight));
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
[data-scope='password-input'][data-part='label'][data-disabled] {
|
|
86
|
-
color: var(--xh-password-input-label-fg-disabled, var(--xh-fg-
|
|
86
|
+
color: var(--xh-password-input-label-fg-disabled, var(--xh-fg-muted));
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
/* —— 一体式 control:输入框、切换钮与提示同框 —— */
|
|
@@ -104,8 +104,6 @@
|
|
|
104
104
|
--xh-field-border-hover: var(--xh-password-input-control-border-hover, var(--xh-_field-variant-border-hover));
|
|
105
105
|
--xh-field-border-focus: var(--xh-password-input-control-border-focus, var(--xh-_field-variant-border-focus));
|
|
106
106
|
--xh-field-border-invalid: var(--xh-password-input-control-border-invalid, var(--xh-_field-variant-border-invalid));
|
|
107
|
-
--xh-field-ring-focus: var(--xh-ring-focus);
|
|
108
|
-
--xh-field-ring-invalid: var(--xh-ring-invalid);
|
|
109
107
|
--xh-field-shadow-rest: var(--xh-password-input-control-shadow, none);
|
|
110
108
|
/* 家族 chrome 会重写 --xh-icon-size,使用者图标槽必须经桥接槽下发才能在盒内生效 */
|
|
111
109
|
--xh-field-glyph-size: var(--xh-password-input-icon-size, var(--xh-_field-size-glyph-size));
|
|
@@ -131,8 +129,10 @@
|
|
|
131
129
|
}
|
|
132
130
|
|
|
133
131
|
/* —— 明暗切换钮 —— */
|
|
134
|
-
/*
|
|
135
|
-
|
|
132
|
+
/* inset 圆角、按承载面取的悬停 / 按下阶梯、粗指针热区全由 Action Control 的 field-inset ghost 档给,
|
|
133
|
+
组件只映射既有覆盖槽;常态只剩符号,符号取次级前景。
|
|
134
|
+
视觉盒按字段内钮尺寸表随字段档(sm 取控件内动作档、md 取 control-h-sm、lg 取 control-h-md),
|
|
135
|
+
由 field-inset 档按 data-xh-action-size 给:比字段矮一档,是框里的辅助动作、不与输入抢 */
|
|
136
136
|
[data-scope='password-input'][data-part='visibility-trigger'] {
|
|
137
137
|
--xh-action-visual-size: var(--xh-password-input-trigger-size, var(--xh-_action-profile-visual-size));
|
|
138
138
|
--xh-action-min-inline-size: var(--xh-password-input-trigger-size, var(--xh-_action-profile-visual-size));
|
|
@@ -161,48 +161,11 @@
|
|
|
161
161
|
display: none;
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
/*
|
|
165
|
-
44px 热区,线只能落在 background-image 上:一条 1px × 半高的渐变贴在靠输入的那一侧,
|
|
166
|
-
不随按钮悬停底或圆角变化。background-position 是物理轴,RTL 另给两条换边。 */
|
|
167
|
-
[data-scope='password-input'][data-part='control']
|
|
168
|
-
> [data-scope='password-input'][data-part='visibility-trigger']:has(~ [data-scope='password-input'][data-part='input']),
|
|
169
|
-
[data-scope='password-input'][data-part='control']
|
|
170
|
-
> [data-scope='password-input'][data-part='input'] ~ [data-scope='password-input'][data-part='visibility-trigger'] {
|
|
171
|
-
background-image: linear-gradient(
|
|
172
|
-
var(--xh-password-input-visibility-trigger-separator-color, var(--xh-border-subtle)),
|
|
173
|
-
var(--xh-password-input-visibility-trigger-separator-color, var(--xh-border-subtle))
|
|
174
|
-
);
|
|
175
|
-
background-repeat: no-repeat;
|
|
176
|
-
background-size: var(--xh-stroke-thin) var(--xh-password-input-visibility-trigger-separator-h, var(--xh-_password-input-divider-h));
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/* 钮排在输入之前:线贴在钮的逻辑末端 */
|
|
180
|
-
[data-scope='password-input'][data-part='control']
|
|
181
|
-
> [data-scope='password-input'][data-part='visibility-trigger']:has(~ [data-scope='password-input'][data-part='input']) {
|
|
182
|
-
background-position: 100% 50%;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
[dir='rtl'] [data-scope='password-input'][data-part='control']
|
|
186
|
-
> [data-scope='password-input'][data-part='visibility-trigger']:has(~ [data-scope='password-input'][data-part='input']) {
|
|
187
|
-
background-position: 0 50%;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/* 钮排在输入之后:线贴在钮的逻辑起始侧 */
|
|
191
|
-
[data-scope='password-input'][data-part='control']
|
|
192
|
-
> [data-scope='password-input'][data-part='input'] ~ [data-scope='password-input'][data-part='visibility-trigger'] {
|
|
193
|
-
background-position: 0 50%;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
[dir='rtl'] [data-scope='password-input'][data-part='control']
|
|
197
|
-
> [data-scope='password-input'][data-part='input'] ~ [data-scope='password-input'][data-part='visibility-trigger'] {
|
|
198
|
-
background-position: 100% 50%;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/* 盒里有两个 Tab 停靠点,盒子在 :focus-within 上画的那一圈两者完全一样,
|
|
164
|
+
/* 盒里有两个 Tab 停靠点,盒子在 :focus-within 上换的聚焦描边两者完全一样,
|
|
202
165
|
分不出焦点在框里还是在钮上,所以钮上再画一圈自己的环(家族只对不占 Tab 位的内嵌钮关环)。
|
|
203
166
|
环往内收,压在按钮自己的方框里,不与盒子外面那一圈叠在一起。
|
|
204
167
|
指示焦点只能用环不能用底色:可用的几档底色压在盒底上都到不了 3:1,换了色也等于没画 */
|
|
205
|
-
[data-scope='password-input'][data-part='control'] [data-part='visibility-trigger']:focus-visible {
|
|
168
|
+
[data-scope='password-input'][data-part='control'] [data-part='visibility-trigger']:where([data-scope='password-input']):focus-visible {
|
|
206
169
|
outline: var(--xh-ring-width) solid var(--xh-_password-input-ring);
|
|
207
170
|
outline-offset: var(--xh-ring-offset);
|
|
208
171
|
}
|
|
@@ -338,29 +301,10 @@
|
|
|
338
301
|
--xh-_password-input-strength-fg: var(--xh-fg-disabled);
|
|
339
302
|
}
|
|
340
303
|
|
|
341
|
-
/* 高对比档整层丢弃 background-image,分隔线改用系统色重画,并关掉这一颗钮的强制换色 */
|
|
342
304
|
@media (forced-colors: active) {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
[data-scope='password-input'][data-part='control']
|
|
346
|
-
> [data-scope='password-input'][data-part='input'] ~ [data-scope='password-input'][data-part='visibility-trigger'] {
|
|
347
|
-
background-image: linear-gradient(CanvasText, CanvasText);
|
|
348
|
-
forced-color-adjust: none;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
[data-scope='password-input'][data-part='control'][data-disabled]
|
|
352
|
-
> [data-scope='password-input'][data-part='visibility-trigger']:has(~ [data-scope='password-input'][data-part='input']),
|
|
353
|
-
[data-scope='password-input'][data-part='control'][data-disabled]
|
|
354
|
-
> [data-scope='password-input'][data-part='input'] ~ [data-scope='password-input'][data-part='visibility-trigger'] {
|
|
355
|
-
background-image: linear-gradient(GrayText, GrayText);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
/* 关掉强制换色后,上面那圈自留的 :focus-visible 环与家族普通态的焦点底/字都会按作者色落地;
|
|
359
|
-
家族高对比块的特指度压不过它们,这里用同一选择器把环、底、字改回系统色 */
|
|
360
|
-
[data-scope='password-input'][data-part='control'] [data-part='visibility-trigger']:focus-visible {
|
|
305
|
+
/* 钮上那圈自留的 :focus-visible 环取系统高亮色:家族高对比块的特指度压不过上面那条环规则 */
|
|
306
|
+
[data-scope='password-input'][data-part='control'] [data-part='visibility-trigger']:where([data-scope='password-input']):focus-visible {
|
|
361
307
|
outline-color: Highlight;
|
|
362
|
-
background-color: ButtonFace;
|
|
363
|
-
color: ButtonText;
|
|
364
308
|
}
|
|
365
309
|
}
|
|
366
310
|
|
package/css/pin-input.css
CHANGED
|
@@ -15,10 +15,11 @@
|
|
|
15
15
|
/* 与文本框、数字框同一套堆叠:标签一行、格子一行。
|
|
16
16
|
格子的描边、底、圆角、五态与悬停由 Field Chrome 家族按格子上的 data-variant 生成,皮肤不再声明形态三档 */
|
|
17
17
|
[data-scope='pin-input'][data-part='root'] {
|
|
18
|
-
/*
|
|
19
|
-
|
|
20
|
-
--xh-_pin-input-box-
|
|
21
|
-
--xh-_pin-input-box-
|
|
18
|
+
/* 尺寸档只换这两个私有槽,格子与分隔都从 root 继承它们,换档不必给每个部件各写一条选择器。
|
|
19
|
+
格子边长取控件高档,与同一行里的字段等高;字号取控件字号档;格间距三档同为 --xh-space-1 */
|
|
20
|
+
--xh-_pin-input-box-size: var(--xh-control-h-md);
|
|
21
|
+
--xh-_pin-input-box-gap: var(--xh-space-1);
|
|
22
|
+
--xh-_pin-input-box-font-size: var(--xh-control-font-md);
|
|
22
23
|
/* 填满态的强调色随语气走。没写 data-tone 时 --xh-_tone 没被声明,退回品牌色 */
|
|
23
24
|
--xh-_pin-input-accent: var(--xh-_tone, var(--xh-bg-brand));
|
|
24
25
|
|
|
@@ -38,26 +39,25 @@
|
|
|
38
39
|
|
|
39
40
|
/* —— 尺寸 —— */
|
|
40
41
|
[data-scope='pin-input'][data-part='root'][data-size='sm'] {
|
|
41
|
-
--xh-_pin-input-box-size: var(--xh-control-
|
|
42
|
-
--xh-_pin-input-box-
|
|
43
|
-
--xh-_pin-input-box-font-size: var(--xh-control-font-lg);
|
|
42
|
+
--xh-_pin-input-box-size: var(--xh-control-h-sm);
|
|
43
|
+
--xh-_pin-input-box-font-size: var(--xh-control-font-sm);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
/* 格子是正方形,缺省档已经占到控件高度表的顶档,lg 档由顶档加一格间距合成,不另立数值 */
|
|
47
46
|
[data-scope='pin-input'][data-part='root'][data-size='lg'] {
|
|
48
|
-
--xh-_pin-input-box-size: var(--xh-control-
|
|
49
|
-
--xh-_pin-input-box-
|
|
50
|
-
--xh-_pin-input-box-font-size: var(--xh-text-heading-2-size);
|
|
47
|
+
--xh-_pin-input-box-size: var(--xh-control-h-lg);
|
|
48
|
+
--xh-_pin-input-box-font-size: var(--xh-control-font-lg);
|
|
51
49
|
}
|
|
52
50
|
|
|
53
51
|
[data-scope='pin-input'][data-part='label'] {
|
|
54
|
-
|
|
52
|
+
/* 竖排时标签与控件之间的距离:根的 gap 之上补一段差值,--xh-pin-input-label-gap 给多少最终就是多少 */
|
|
53
|
+
margin-block-end: calc(var(--xh-pin-input-label-gap, var(--xh-space-2)) - var(--xh-pin-input-gap, var(--xh-space-1)));
|
|
54
|
+
color: var(--xh-pin-input-label-fg, var(--xh-fg-muted));
|
|
55
55
|
font-size: var(--xh-pin-input-label-font-size, var(--xh-text-label-size));
|
|
56
56
|
font-weight: var(--xh-pin-input-label-font-weight, var(--xh-text-label-weight));
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
[data-scope='pin-input'][data-part='label'][data-disabled] {
|
|
60
|
-
color: var(--xh-pin-input-label-fg-disabled, var(--xh-fg-
|
|
60
|
+
color: var(--xh-pin-input-label-fg-disabled, var(--xh-fg-muted));
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
/* 分段:连着的几格圈成一段。它只排版,格间距仍由格子自己的相邻兄弟规则给 */
|
|
@@ -109,8 +109,6 @@
|
|
|
109
109
|
--xh-field-border-hover: var(--xh-pin-input-box-border-hover, var(--xh-_field-variant-border-hover));
|
|
110
110
|
--xh-field-border-focus: var(--xh-pin-input-box-border-focus, var(--xh-_field-variant-border-focus));
|
|
111
111
|
--xh-field-border-invalid: var(--xh-pin-input-box-border-invalid, var(--xh-_field-variant-border-invalid));
|
|
112
|
-
--xh-field-ring-focus: var(--xh-ring-focus);
|
|
113
|
-
--xh-field-ring-invalid: var(--xh-ring-invalid);
|
|
114
112
|
--xh-field-shadow-rest: var(--xh-pin-input-box-shadow, none);
|
|
115
113
|
|
|
116
114
|
/* 一行放不下时逐格收窄,收不动就整行顶出屏幕。
|
|
@@ -141,19 +139,13 @@
|
|
|
141
139
|
color: var(--xh-pin-input-placeholder-fg, var(--xh-fg-subtle));
|
|
142
140
|
}
|
|
143
141
|
|
|
144
|
-
/*
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
142
|
+
/* 一行格子长得一模一样,光标那道竖线太细,看不出正在填哪一格:当前格与字段外壳的聚焦态同一副面——
|
|
143
|
+
换承载面 + 聚焦描边,压在别的格子的字段淡底之间一眼分得出,不另画环(强制色档由家族补系统色环)。
|
|
144
|
+
data-focus 由机器给(它知道谁是当前格),家族的 :focus-within 兜住机器状态还没回流的那一帧,
|
|
145
|
+
两条同时写不冲突。焦点边一律家族的 --xh-border-control-focus,不随 tone */
|
|
148
146
|
[data-scope='pin-input'][data-part='input'][data-focus] {
|
|
149
147
|
border-color: var(--xh-pin-input-box-border-focus, var(--xh-_field-variant-border-focus));
|
|
150
|
-
|
|
151
|
-
outline-offset: var(--xh-ring-offset);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/* 校验失败时环也跟着变红:两圈等宽相邻却一红一蓝,读的人不知道哪个才是当前状态 */
|
|
155
|
-
[data-scope='pin-input'][data-part='input'][data-invalid][data-focus] {
|
|
156
|
-
outline-color: var(--xh-ring-invalid);
|
|
148
|
+
background-color: var(--xh-_field-variant-bg-focus);
|
|
157
149
|
}
|
|
158
150
|
|
|
159
151
|
/* 填满只代表"格子都有字",不代表"验证码对",所以用品牌色而不是成功色收个尾。
|