@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/breadcrumb.css
CHANGED
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
|
|
24
24
|
/* 尺寸档只换这两个私有槽,列表与链接都从 root 继承它们,换档不必给每个部件各写一条选择器 */
|
|
25
25
|
--xh-_breadcrumb-font-size: var(--xh-control-font-md);
|
|
26
|
-
|
|
26
|
+
/* 链接自带 4px 横向内衬,列表间距再给 4px:文字到分隔符一共 8px */
|
|
27
|
+
--xh-_breadcrumb-gap: var(--xh-space-1);
|
|
27
28
|
/* 当前项与链接悬停的强调色随语气走。没写 data-tone 时 --xh-_tone-fg 没被声明,
|
|
28
29
|
退回原来的前景色。聚焦环不在其列,它恒是 --xh-ring-focus */
|
|
29
30
|
--xh-_breadcrumb-accent-text: var(--xh-_tone-fg, var(--xh-fg-default));
|
|
@@ -38,12 +39,12 @@
|
|
|
38
39
|
不在控件间距那把尺上(那把尺的大档与中档同值),三档一律取空间尺 */
|
|
39
40
|
[data-scope='breadcrumb'][data-part='root'][data-size='sm'] {
|
|
40
41
|
--xh-_breadcrumb-font-size: var(--xh-control-font-sm);
|
|
41
|
-
--xh-_breadcrumb-gap: var(--xh-space-
|
|
42
|
+
--xh-_breadcrumb-gap: var(--xh-space-0_5);
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
[data-scope='breadcrumb'][data-part='root'][data-size='lg'] {
|
|
45
46
|
--xh-_breadcrumb-font-size: var(--xh-control-font-lg);
|
|
46
|
-
--xh-_breadcrumb-gap: var(--xh-space-
|
|
47
|
+
--xh-_breadcrumb-gap: var(--xh-space-2);
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
/* ol 的项目符号与内外边距是 UA 给的,库里没有全局 preflight,只能在这儿自己抹平 */
|
|
@@ -75,8 +76,9 @@
|
|
|
75
76
|
display: none;
|
|
76
77
|
}
|
|
77
78
|
|
|
78
|
-
/* 链接的几何、字号与面全经家族桥接槽:静息 muted / regular,悬停走白底承载 hover 100 +
|
|
79
|
-
按下 pressed 200
|
|
79
|
+
/* 链接的几何、字号与面全经家族桥接槽:静息 muted / regular,悬停走白底承载 hover 100 + 品牌字(写了语气随语气),
|
|
80
|
+
按下 pressed 200 + 深一档品牌字(品牌字压在 200 档上只有 4:1,按下必须取 strong);
|
|
81
|
+
链接盒最少 24px 高,够得上目标尺寸下限;当前页那条不再是"可去的地方":连接层投影
|
|
80
82
|
data-xh-collection-terminal,家族给透明面 + 随语气的 fg-default + medium + cursor default,不响应悬停与按下,
|
|
81
83
|
并压过它同时带的 aria-disabled 禁用面。本条 (0,2,0) 压过家族基础块 (0,1,0),不能再写 color / background */
|
|
82
84
|
[data-scope='breadcrumb'][data-part='link'] {
|
|
@@ -88,14 +90,16 @@
|
|
|
88
90
|
--xh-collection-glyph-size: var(--xh-breadcrumb-icon-size, var(--xh-glyph-size-text));
|
|
89
91
|
--xh-collection-fg-rest: var(--xh-breadcrumb-fg, var(--xh-fg-muted));
|
|
90
92
|
--xh-collection-bg-hover: var(--xh-breadcrumb-link-bg-hover, var(--xh-bg-subtle));
|
|
91
|
-
--xh-collection-fg-hover: var(--xh-breadcrumb-link-fg-hover, var(--xh-
|
|
93
|
+
--xh-collection-fg-hover: var(--xh-breadcrumb-link-fg-hover, var(--xh-_tone-fg, var(--xh-fg-brand)));
|
|
92
94
|
--xh-collection-bg-pressed: var(--xh-breadcrumb-link-bg-pressed, var(--xh-bg-subtle-hover));
|
|
95
|
+
--xh-collection-fg-pressed: var(--xh-breadcrumb-link-fg-pressed, var(--xh-_tone-fg, var(--xh-fg-brand-strong)));
|
|
93
96
|
--xh-collection-fg-terminal: var(--xh-breadcrumb-link-fg-current, var(--xh-_breadcrumb-accent-text));
|
|
94
97
|
--xh-collection-font-weight-terminal: var(--xh-breadcrumb-link-font-weight-current, var(--xh-font-weight-medium));
|
|
95
98
|
|
|
96
99
|
display: inline-flex;
|
|
97
100
|
align-items: center;
|
|
98
101
|
gap: var(--xh-breadcrumb-link-gap, var(--xh-space-1));
|
|
102
|
+
min-block-size: var(--xh-breadcrumb-link-h, var(--xh-control-action-size));
|
|
99
103
|
/* 一层的名字可能很长(文档标题、订单号),压不住会把整条路径撑开 */
|
|
100
104
|
max-inline-size: var(--xh-breadcrumb-link-max-w, var(--xh-nav-link-max-w));
|
|
101
105
|
/* 行高随 root 的行距槽:家族基础块给条目写了 leading-normal,这里接回 root 那一支 */
|
|
@@ -133,7 +137,8 @@
|
|
|
133
137
|
margin: 0;
|
|
134
138
|
align-items: center;
|
|
135
139
|
justify-content: center;
|
|
136
|
-
|
|
140
|
+
/* 分隔符是 aria-hidden 的纯装饰,取最弱一档前景,不与可点的链接抢层级 */
|
|
141
|
+
color: var(--xh-breadcrumb-separator-fg, var(--xh-fg-disabled));
|
|
137
142
|
user-select: none;
|
|
138
143
|
}
|
|
139
144
|
|
|
@@ -167,11 +172,13 @@
|
|
|
167
172
|
--xh-collection-glyph-size: var(--xh-breadcrumb-icon-size, var(--xh-glyph-size-text));
|
|
168
173
|
--xh-collection-fg-rest: var(--xh-breadcrumb-fg, var(--xh-fg-muted));
|
|
169
174
|
--xh-collection-bg-hover: var(--xh-bg-subtle);
|
|
170
|
-
--xh-collection-fg-hover: var(--xh-
|
|
175
|
+
--xh-collection-fg-hover: var(--xh-_tone-fg, var(--xh-fg-brand));
|
|
171
176
|
--xh-collection-bg-pressed: var(--xh-bg-subtle-hover);
|
|
177
|
+
--xh-collection-fg-pressed: var(--xh-_tone-fg, var(--xh-fg-brand-strong));
|
|
172
178
|
|
|
173
179
|
display: inline-flex;
|
|
174
180
|
align-items: center;
|
|
181
|
+
min-block-size: var(--xh-breadcrumb-ellipsis-trigger-h, var(--xh-breadcrumb-link-h, var(--xh-control-action-size)));
|
|
175
182
|
line-height: var(--xh-breadcrumb-leading, var(--xh-leading-tight));
|
|
176
183
|
}
|
|
177
184
|
|
|
@@ -190,7 +197,7 @@
|
|
|
190
197
|
display: none;
|
|
191
198
|
}
|
|
192
199
|
|
|
193
|
-
/*
|
|
200
|
+
/* 没写内容就由皮肤画兜底字形(一条斜线);作者写了自己的字符或图形,这条即不命中 */
|
|
194
201
|
[data-scope='breadcrumb'][data-part='separator']:empty::before {
|
|
195
202
|
content: '';
|
|
196
203
|
display: inline-block;
|
|
@@ -198,13 +205,8 @@
|
|
|
198
205
|
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
199
206
|
vertical-align: var(--xh-glyph-baseline-shift);
|
|
200
207
|
background-color: currentColor;
|
|
201
|
-
-webkit-mask: var(--xh-glyph-mark-
|
|
202
|
-
mask: var(--xh-glyph-mark-
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/* 从右往左排版时「向前」在左边 */
|
|
206
|
-
[dir='rtl'] [data-scope='breadcrumb'][data-part='separator']:empty::before {
|
|
207
|
-
rotate: 180deg;
|
|
208
|
+
-webkit-mask: var(--xh-glyph-mark-slash) center / contain no-repeat;
|
|
209
|
+
mask: var(--xh-glyph-mark-slash) center / contain no-repeat;
|
|
208
210
|
}
|
|
209
211
|
|
|
210
212
|
@media (forced-colors: active) {
|
package/css/button-group.css
CHANGED
|
@@ -31,12 +31,10 @@
|
|
|
31
31
|
后者是使用者的入口,写死它,进了组的胶囊按钮就再也圆不起来 */
|
|
32
32
|
--xh-_button-group-radius: 0;
|
|
33
33
|
|
|
34
|
-
/* 段与段共边焊成一条,solid
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
--xh-_button-group-shadow-rest: var(--xh-_highlight-tone);
|
|
39
|
-
--xh-_button-group-shadow-hover: var(--xh-_highlight-tone);
|
|
34
|
+
/* 段与段共边焊成一条,solid 段悬停那一档不抬:抬起其中一段,投影会压到左右两段的面上。
|
|
35
|
+
其余形态的影本来就是 none,这一支只被 button.css 的 solid 块消费。颜色不在这里灌:段自带
|
|
36
|
+
data-xh-action-variant,底 / 前景 / 描边由家族形态矩阵按段自己的形态给出 */
|
|
37
|
+
--xh-_button-group-shadow-hover: none;
|
|
40
38
|
--xh-_group-separator-size: calc(var(--xh-_button-group-h, var(--xh-control-h-md)) / 2);
|
|
41
39
|
|
|
42
40
|
display: inline-flex;
|
package/css/button.css
CHANGED
|
@@ -50,14 +50,11 @@
|
|
|
50
50
|
font-weight: var(--xh-button-font-weight, var(--xh-text-label-weight));
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
/* Button
|
|
54
|
-
|
|
55
|
-
ButtonGroup 用 --xh-_button-group-shadow-
|
|
53
|
+
/* Button 是登记在册的 raised 消费者:solid 一档悬停抬到 raised。raised 缺省 none,实心钮是平的——
|
|
54
|
+
不画顶光、不落软影,层级只靠面色(主题给 raised 一层影,悬停才抬起来)。
|
|
55
|
+
成组时段与段共边焊成一条,悬停不抬起:投影会压到左右两段的面上,ButtonGroup 用 --xh-_button-group-shadow-hover 关掉 */
|
|
56
56
|
[data-scope='button'][data-part='root'][data-variant='solid'] {
|
|
57
|
-
--xh-
|
|
58
|
-
--xh-_button-shadow-rest: var(--xh-_button-group-shadow-rest, var(--xh-_highlight-tone), var(--xh-material-soft-shadow));
|
|
59
|
-
--xh-_button-shadow-hover: var(--xh-_button-group-shadow-hover, var(--xh-_highlight-tone), var(--xh-elevation-raised));
|
|
60
|
-
--xh-_button-shadow-pressed: var(--xh-_highlight-tone);
|
|
57
|
+
--xh-_button-shadow-hover: var(--xh-_button-group-shadow-hover, var(--xh-elevation-raised));
|
|
61
58
|
}
|
|
62
59
|
|
|
63
60
|
/* 实心面用对比前景作内环,再加品牌外环;不覆盖表面 box-shadow。 */
|
|
@@ -156,16 +153,20 @@
|
|
|
156
153
|
content: none;
|
|
157
154
|
}
|
|
158
155
|
|
|
156
|
+
/* 作者的图形是任意节点,规则主体没有可认的特征:加载与否写在 indicator 自己的私有槽上,
|
|
157
|
+
图形只读槽。翻转 data-loading 时失效的只有 indicator 本身,不会让全页同名属性的变化整棵子树重算 */
|
|
159
158
|
[data-scope='button'][data-part='indicator'] > * {
|
|
160
|
-
opacity: 0;
|
|
159
|
+
opacity: var(--xh-_button-indicator-opacity, 0);
|
|
161
160
|
transition: opacity var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
161
|
+
transition-delay: calc(var(--xh-motion-duration-micro) * var(--xh-_button-indicator-delay, 0));
|
|
162
162
|
animation: xh-spin var(--xh-button-spin-duration, var(--xh-motion-loop-spin)) var(--xh-motion-ease-loop) infinite paused;
|
|
163
|
+
animation-play-state: var(--xh-_button-indicator-play, paused);
|
|
163
164
|
}
|
|
164
165
|
|
|
165
|
-
[data-scope='button'][data-part='root'][data-loading] > [data-scope='button'][data-part='indicator']
|
|
166
|
-
opacity: 1;
|
|
167
|
-
|
|
168
|
-
|
|
166
|
+
[data-scope='button'][data-part='root'][data-loading] > [data-scope='button'][data-part='indicator'] {
|
|
167
|
+
--xh-_button-indicator-opacity: 1;
|
|
168
|
+
--xh-_button-indicator-delay: 1;
|
|
169
|
+
--xh-_button-indicator-play: running;
|
|
169
170
|
}
|
|
170
171
|
|
|
171
172
|
/* 钮里原有的内容与环交叉:进入在途同样等一个 micro 才淡出、留位不塌,退出不等 */
|
package/css/calendar-picker.css
CHANGED
|
@@ -14,14 +14,11 @@
|
|
|
14
14
|
--xh-calendar-picker-skin: 1;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
/* 标题栏与网格各自带内衬、彼此不留空当:标题栏下沿那道分隔线就是两块的界 */
|
|
17
18
|
[data-scope='calendar-picker'][data-part='root'] {
|
|
18
|
-
/* 翻页钮是 sm 档的图标钮(--xh-control-h-sm 见方),钮里的图标按 sm 档取 --xh-glyph-size-sm;
|
|
19
|
-
作者塞进去的图标与皮肤画的兜底字形同一把尺 */
|
|
20
|
-
--xh-icon-size: var(--xh-calendar-picker-icon-size, var(--xh-glyph-size-sm));
|
|
21
|
-
|
|
22
19
|
display: flex;
|
|
23
20
|
flex-direction: column;
|
|
24
|
-
gap: var(--xh-calendar-picker-gap, var(--xh-space-
|
|
21
|
+
gap: var(--xh-calendar-picker-gap, var(--xh-space-0));
|
|
25
22
|
/* 数字等宽:1 与 7 的字形宽度在比例字体里并不相同,不定住会让整张网格随月份抖动 */
|
|
26
23
|
font-variant-numeric: tabular-nums;
|
|
27
24
|
}
|
|
@@ -30,12 +27,20 @@
|
|
|
30
27
|
display: none;
|
|
31
28
|
}
|
|
32
29
|
|
|
30
|
+
/* 标题栏:上下 8、左右 16 的内衬里放一排 24 高的钮与标题,下沿一道通栏分隔线。
|
|
31
|
+
翻页钮里的字形取 xs 图标钮的字形档(--xh-glyph-size-sm),作者塞进钮里的图标与皮肤画的兜底字形同一把尺;
|
|
32
|
+
这一档写在标题栏上而不是日历根上:日期选择器里的日历没有根节点,标题栏两边都有 */
|
|
33
33
|
[data-scope='calendar-picker'][data-part='header'] {
|
|
34
|
+
--xh-icon-size: var(--xh-calendar-picker-icon-size, var(--xh-glyph-size-sm));
|
|
35
|
+
|
|
34
36
|
display: flex;
|
|
35
37
|
align-items: center;
|
|
36
38
|
justify-content: space-between;
|
|
37
|
-
gap: var(--xh-calendar-picker-header-gap, var(--xh-space-
|
|
38
|
-
min-block-size: var(--xh-control-
|
|
39
|
+
gap: var(--xh-calendar-picker-header-gap, var(--xh-space-1));
|
|
40
|
+
min-block-size: calc(var(--xh-control-action-size) + 2 * var(--xh-calendar-picker-header-py, var(--xh-space-2)) + var(--xh-stroke-thin));
|
|
41
|
+
padding-block: var(--xh-calendar-picker-header-py, var(--xh-space-2));
|
|
42
|
+
padding-inline: var(--xh-calendar-picker-header-px, var(--xh-space-4));
|
|
43
|
+
border-block-end: var(--xh-stroke-thin) solid var(--xh-calendar-picker-header-border, var(--xh-material-solid-border));
|
|
39
44
|
}
|
|
40
45
|
|
|
41
46
|
[data-scope='calendar-picker'][data-part='header'][hidden] {
|
|
@@ -47,32 +52,30 @@
|
|
|
47
52
|
text-align: center;
|
|
48
53
|
color: var(--xh-calendar-picker-heading-fg, var(--xh-fg-default));
|
|
49
54
|
font-size: var(--xh-calendar-picker-heading-font-size, var(--xh-text-label-size));
|
|
50
|
-
font-weight: var(--xh-calendar-picker-heading-font-weight, var(--xh-font-weight-
|
|
55
|
+
font-weight: var(--xh-calendar-picker-heading-font-weight, var(--xh-font-weight-medium));
|
|
51
56
|
line-height: var(--xh-leading-none);
|
|
52
57
|
user-select: none;
|
|
53
58
|
}
|
|
54
59
|
|
|
55
60
|
/* 标题里的年与月:点它们逐级钻上去(年 → 十年格、月 → 月格)。
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
悬停只换字色不换底(标题不是一枚按钮面),按下换到 200 档中性面(白底承载);到顶那一层只作标题显示,
|
|
60
|
-
光标别装成能点,也不再换面 */
|
|
61
|
+
接 Action Control text 档(日期翻页按钮同族)、xs 档 24 高:盒、悬停 / 按下 / 禁用面、焦点环与过渡由家族配方给,
|
|
62
|
+
这里只把使用者槽映射到桥接槽。长得像标题而不像按钮——它本来就是标题,只是可点:静息透明(ghost)、
|
|
63
|
+
字色始终是标题色,悬停 100 → 按下 200 只换底(白底承载);到顶那一层只作标题显示,光标别装成能点 */
|
|
61
64
|
[data-scope='calendar-picker'][data-part='heading-year-trigger']:not([hidden]),
|
|
62
65
|
[data-scope='calendar-picker'][data-part='heading-month-trigger']:not([hidden]) {
|
|
63
|
-
--xh-action-padding-inline: var(--xh-calendar-picker-heading-trigger-px, var(--xh-space-
|
|
66
|
+
--xh-action-padding-inline: var(--xh-calendar-picker-heading-trigger-px, var(--xh-space-0_5));
|
|
64
67
|
--xh-action-radius: var(--xh-calendar-picker-heading-trigger-radius, var(--xh-shape-control));
|
|
65
|
-
--xh-action-bg-hover:
|
|
68
|
+
--xh-action-bg-hover: var(--xh-calendar-picker-heading-trigger-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
66
69
|
--xh-action-bg-pressed: var(--xh-calendar-picker-heading-trigger-bg-pressed, var(--xh-_action-variant-bg-pressed));
|
|
67
70
|
--xh-action-fg-rest: var(--xh-calendar-picker-heading-fg, var(--xh-fg-default));
|
|
68
|
-
--xh-action-fg-hover: var(--xh-calendar-picker-heading-
|
|
69
|
-
--xh-action-fg-pressed: var(--xh-calendar-picker-heading-
|
|
71
|
+
--xh-action-fg-hover: var(--xh-calendar-picker-heading-fg, var(--xh-fg-default));
|
|
72
|
+
--xh-action-fg-pressed: var(--xh-calendar-picker-heading-fg, var(--xh-fg-default));
|
|
70
73
|
--xh-action-fg-focus-visible: var(--xh-calendar-picker-heading-fg, var(--xh-fg-default));
|
|
71
74
|
--xh-action-fg-disabled: var(--xh-calendar-picker-heading-fg, var(--xh-fg-default));
|
|
72
75
|
--xh-action-font-size: var(--xh-calendar-picker-heading-font-size, var(--xh-text-label-size));
|
|
73
76
|
--xh-action-cursor-disabled: default;
|
|
74
77
|
|
|
75
|
-
font-weight: var(--xh-calendar-picker-heading-font-weight, var(--xh-font-weight-
|
|
78
|
+
font-weight: var(--xh-calendar-picker-heading-font-weight, var(--xh-font-weight-medium));
|
|
76
79
|
}
|
|
77
80
|
|
|
78
81
|
[data-scope='calendar-picker'][data-part='heading-year-trigger'][hidden],
|
|
@@ -80,15 +83,15 @@
|
|
|
80
83
|
display: none;
|
|
81
84
|
}
|
|
82
85
|
|
|
83
|
-
/* 四颗方向钮接 Action Control icon
|
|
84
|
-
|
|
86
|
+
/* 四颗方向钮接 Action Control icon 档 xs(24 见方)、ghost 形态:悬停 / 按下 / 禁用面、粗指针热区、焦点环与过渡
|
|
87
|
+
由家族配方给,这里只把使用者槽映射到桥接槽。钮是正方的单图标动作,取圆;坐在日历的白底上,悬停 100 → 按下 200 */
|
|
85
88
|
[data-scope='calendar-picker'][data-part='prev-year-trigger'],
|
|
86
89
|
[data-scope='calendar-picker'][data-part='prev-trigger'],
|
|
87
90
|
[data-scope='calendar-picker'][data-part='next-year-trigger'],
|
|
88
91
|
[data-scope='calendar-picker'][data-part='next-trigger'] {
|
|
89
92
|
--xh-action-visual-size: var(--xh-calendar-picker-nav-size, var(--xh-_action-profile-visual-size));
|
|
90
93
|
--xh-action-min-inline-size: var(--xh-calendar-picker-nav-size, var(--xh-_action-profile-visual-size));
|
|
91
|
-
--xh-action-radius: var(--xh-calendar-picker-nav-radius, var(--xh-shape-
|
|
94
|
+
--xh-action-radius: var(--xh-calendar-picker-nav-radius, var(--xh-shape-circle));
|
|
92
95
|
--xh-action-bg-rest: var(--xh-calendar-picker-nav-bg, var(--xh-_action-variant-bg-rest));
|
|
93
96
|
--xh-action-bg-hover: var(--xh-calendar-picker-nav-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
94
97
|
--xh-action-bg-pressed: var(--xh-calendar-picker-nav-bg-pressed, var(--xh-_action-variant-bg-pressed));
|
|
@@ -106,18 +109,25 @@
|
|
|
106
109
|
display: none;
|
|
107
110
|
}
|
|
108
111
|
|
|
109
|
-
|
|
112
|
+
/* 网格:上下 12、左右 16 的内衬;星期行与第一行日期之间不留空当 */
|
|
110
113
|
[data-scope='calendar-picker'][data-part='grid'] {
|
|
111
114
|
display: flex;
|
|
112
115
|
flex-direction: column;
|
|
113
|
-
gap: var(--xh-calendar-picker-grid-gap, var(--xh-space-
|
|
116
|
+
gap: var(--xh-calendar-picker-grid-gap, var(--xh-space-0));
|
|
117
|
+
padding-block: var(--xh-calendar-picker-grid-py, var(--xh-space-3));
|
|
118
|
+
padding-inline: var(--xh-calendar-picker-grid-px, var(--xh-space-4));
|
|
114
119
|
}
|
|
115
120
|
|
|
116
|
-
/*
|
|
121
|
+
/* 周期视图与日视图同宽:钻上一层看月、年时面板不变窄,宽度按七列日期格加两侧内衬算 */
|
|
122
|
+
[data-scope='calendar-picker'][data-part='grid']:is([data-view='week'], [data-view='month'], [data-view='quarter'], [data-view='year']) {
|
|
123
|
+
min-inline-size: calc(7 * var(--xh-calendar-picker-cell-min-w, var(--xh-control-h-md)) + 2 * var(--xh-calendar-picker-grid-px, var(--xh-space-4)));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* 周期视图:格子直接铺进网格,不再有周行那一层;格与格之间不留缝,区间的底色在一行里连成一条 */
|
|
117
127
|
[data-scope='calendar-picker'][data-part='grid'][data-view='week'] {
|
|
118
128
|
display: grid;
|
|
119
129
|
grid-template-columns: minmax(0, 1fr);
|
|
120
|
-
gap: var(--xh-calendar-picker-period-gap, var(--xh-space-
|
|
130
|
+
gap: var(--xh-calendar-picker-period-gap, var(--xh-space-0));
|
|
121
131
|
}
|
|
122
132
|
|
|
123
133
|
/* 月 3 列 × 4 行、季度 4 列一行、年 3 列。 */
|
|
@@ -125,40 +135,23 @@
|
|
|
125
135
|
[data-scope='calendar-picker'][data-part='grid'][data-view='year'] {
|
|
126
136
|
display: grid;
|
|
127
137
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
128
|
-
gap: var(--xh-calendar-picker-period-gap, var(--xh-space-
|
|
138
|
+
gap: var(--xh-calendar-picker-period-gap, var(--xh-space-0));
|
|
129
139
|
}
|
|
130
140
|
|
|
131
141
|
[data-scope='calendar-picker'][data-part='grid'][data-view='quarter'] {
|
|
132
142
|
display: grid;
|
|
133
143
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
134
|
-
gap: var(--xh-calendar-picker-period-gap, var(--xh-space-
|
|
144
|
+
gap: var(--xh-calendar-picker-period-gap, var(--xh-space-0));
|
|
135
145
|
}
|
|
136
146
|
|
|
147
|
+
/* 年网格限高自滚:原生细条落在内衬之外的边缘,内衬两侧仍对称 */
|
|
137
148
|
[data-scope='calendar-picker'][data-part='grid'][data-view='year'] {
|
|
138
149
|
align-content: start;
|
|
139
150
|
max-block-size: var(--xh-calendar-picker-year-grid-max-h, var(--xh-viewport-h-sm));
|
|
140
|
-
padding-inline-end: var(--xh-calendar-picker-year-grid-pe, var(--xh-space-1));
|
|
141
151
|
/* 页内结构容器走原生细条(reset 层统一给)、滚动链保持 auto;嵌进 date-picker 浮层时由那份皮肤补 contain */
|
|
142
152
|
overflow-y: auto;
|
|
143
153
|
}
|
|
144
154
|
|
|
145
|
-
/* 周期格沿横轴铺开,但始终保持控制件高度;选中面只换颜色,不改变几何尺寸。 */
|
|
146
|
-
[data-scope='calendar-picker'][data-part='grid']:is([data-view='week'], [data-view='month'], [data-view='quarter'], [data-view='year']) [data-part='cell-trigger'] {
|
|
147
|
-
flex: 0 0 auto;
|
|
148
|
-
aspect-ratio: auto;
|
|
149
|
-
min-inline-size: 0;
|
|
150
|
-
inline-size: min(3.5rem, 100%);
|
|
151
|
-
padding-block: var(--xh-calendar-picker-period-py, var(--xh-space-2));
|
|
152
|
-
border-radius: var(--xh-calendar-picker-period-radius, var(--xh-shape-control));
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
[data-scope='calendar-picker'][data-part='grid'][data-view='week'] [data-part='cell-trigger'] {
|
|
156
|
-
flex: 1 1 auto;
|
|
157
|
-
justify-content: flex-start;
|
|
158
|
-
inline-size: 100%;
|
|
159
|
-
padding-inline: var(--xh-calendar-picker-week-cell-px, var(--xh-space-3));
|
|
160
|
-
}
|
|
161
|
-
|
|
162
155
|
[data-scope='calendar-picker'][data-part='grid'][hidden] {
|
|
163
156
|
display: none;
|
|
164
157
|
}
|
|
@@ -180,17 +173,20 @@
|
|
|
180
173
|
display: none;
|
|
181
174
|
}
|
|
182
175
|
|
|
183
|
-
/*
|
|
176
|
+
/* 七等分:表头行与日期行共用同一条轨道定义,列才对得齐。每列不窄于中号控件高,
|
|
177
|
+
浮层里的日历按内容收时由这条下限撑出面板宽(七列加两侧内衬) */
|
|
184
178
|
[data-scope='calendar-picker'][data-part='week-row'] {
|
|
185
179
|
display: grid;
|
|
186
|
-
grid-template-columns: repeat(7, minmax(
|
|
180
|
+
grid-template-columns: repeat(7, minmax(var(--xh-calendar-picker-cell-min-w, var(--xh-control-h-md)), 1fr));
|
|
187
181
|
}
|
|
188
182
|
|
|
189
183
|
/* 摆了周序号格的行多让出行首一列。写 :not([hidden]) 而不是靠顺序压过下面那条兜底——
|
|
190
184
|
同特指度的规则谁在后面谁赢,收起态会被这条 display 掀开 */
|
|
191
185
|
[data-scope='calendar-picker'][data-part='week-row']:not([hidden]):has(> [data-part='week-number']) {
|
|
192
186
|
display: grid;
|
|
193
|
-
grid-template-columns:
|
|
187
|
+
grid-template-columns:
|
|
188
|
+
var(--xh-calendar-picker-week-number-w, var(--xh-control-h-md))
|
|
189
|
+
repeat(7, minmax(var(--xh-calendar-picker-cell-min-w, var(--xh-control-h-md)), 1fr));
|
|
194
190
|
}
|
|
195
191
|
|
|
196
192
|
/* 周序号只是行的标号:比日子小一号、颜色压下去,不跟着选中态走 */
|
|
@@ -210,14 +206,15 @@
|
|
|
210
206
|
display: none;
|
|
211
207
|
}
|
|
212
208
|
|
|
209
|
+
/* 星期行:与中号控件同高,正文字号、常规字重,颜色压一档 */
|
|
213
210
|
[data-scope='calendar-picker'][data-part='week-day'] {
|
|
214
211
|
display: flex;
|
|
215
212
|
align-items: center;
|
|
216
213
|
justify-content: center;
|
|
217
|
-
block-size: var(--xh-calendar-picker-week-day-h, var(--xh-control-h-
|
|
214
|
+
block-size: var(--xh-calendar-picker-week-day-h, var(--xh-control-h-md));
|
|
218
215
|
color: var(--xh-calendar-picker-week-day-fg, var(--xh-fg-subtle));
|
|
219
|
-
font-size: var(--xh-calendar-picker-week-day-font-size, var(--xh-text-
|
|
220
|
-
font-weight: var(--xh-calendar-picker-week-day-font-weight, var(--xh-font-weight-
|
|
216
|
+
font-size: var(--xh-calendar-picker-week-day-font-size, var(--xh-text-body-size));
|
|
217
|
+
font-weight: var(--xh-calendar-picker-week-day-font-weight, var(--xh-font-weight-regular));
|
|
221
218
|
line-height: var(--xh-leading-none);
|
|
222
219
|
user-select: none;
|
|
223
220
|
}
|
|
@@ -226,93 +223,171 @@
|
|
|
226
223
|
display: none;
|
|
227
224
|
}
|
|
228
225
|
|
|
229
|
-
/*
|
|
226
|
+
/* 格子是等分轨道里的一格,也是格内几样东西的定位盒:禁用横条画在 ::before、今天的圆点画在 ::after,
|
|
227
|
+
日期钮的命中区(钮的 ::after)同样以它为包含块。上下各 6 的内衬把 24 高的钮撑成 36 的行距。
|
|
228
|
+
格子自成一层:横条压在钮的下面,不盖住钮(钮不当定位盒) */
|
|
230
229
|
[data-scope='calendar-picker'][data-part='cell'] {
|
|
230
|
+
/* 这副行距的半高:格内横条以格子中线为轴、按它收边,行距被拉高(粗指针)时横条不跟着变粗 */
|
|
231
|
+
--xh-_calendar-picker-row-half: calc(
|
|
232
|
+
var(--xh-calendar-picker-cell-size, var(--xh-control-action-size)) / 2
|
|
233
|
+
+ var(--xh-calendar-picker-cell-py, var(--xh-space-1_5))
|
|
234
|
+
);
|
|
235
|
+
|
|
231
236
|
position: relative;
|
|
232
237
|
display: flex;
|
|
233
238
|
align-items: center;
|
|
234
239
|
justify-content: center;
|
|
235
|
-
|
|
240
|
+
isolation: isolate;
|
|
241
|
+
padding-block: var(--xh-calendar-picker-cell-py, var(--xh-space-1_5));
|
|
242
|
+
padding-inline: var(--xh-calendar-picker-cell-px, var(--xh-space-0));
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/* 周期格左右各留 4:钮在格里缩进一截,相邻两格的钮不贴在一起 */
|
|
246
|
+
[data-scope='calendar-picker'][data-part='cell']:is([data-view='week'], [data-view='month'], [data-view='quarter'], [data-view='year']) {
|
|
247
|
+
padding-inline: var(--xh-calendar-picker-period-px, var(--xh-space-1));
|
|
236
248
|
}
|
|
237
249
|
|
|
238
250
|
[data-scope='calendar-picker'][data-part='cell'][hidden] {
|
|
239
251
|
display: none;
|
|
240
252
|
}
|
|
241
253
|
|
|
242
|
-
/*
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
254
|
+
/* 不可用的日子:整格一条淡底横条,上下各收 2,相邻几天的横条连成一条带 */
|
|
255
|
+
[data-scope='calendar-picker'][data-part='cell'][data-disabled]::before {
|
|
256
|
+
content: '';
|
|
257
|
+
position: absolute;
|
|
258
|
+
z-index: -1;
|
|
259
|
+
inset-block: calc(50% - var(--xh-_calendar-picker-row-half) + var(--xh-calendar-picker-disabled-inset, var(--xh-space-0_5)));
|
|
260
|
+
inset-inline: 0;
|
|
261
|
+
background-color: var(--xh-calendar-picker-cell-bg-disabled, var(--xh-bg-subtle));
|
|
262
|
+
pointer-events: none;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/* 今天:数字下方一颗 4px 品牌圆点,数字保持正文色(brand-subtle 只留给选中);
|
|
266
|
+
选中格换实心面后圆点仍落在面的外面,两个状态叠加时互不遮挡 */
|
|
267
|
+
[data-scope='calendar-picker'][data-part='cell'][data-today]::after {
|
|
268
|
+
content: '';
|
|
269
|
+
position: absolute;
|
|
270
|
+
inset-block-start: calc(50% + var(--xh-calendar-picker-cell-size, var(--xh-control-action-size)) / 2 + var(--xh-space-0_5));
|
|
271
|
+
inset-inline-start: 50%;
|
|
272
|
+
inline-size: var(--xh-calendar-picker-today-mark-size, var(--xh-space-1));
|
|
273
|
+
block-size: var(--xh-calendar-picker-today-mark-size, var(--xh-space-1));
|
|
274
|
+
border-radius: var(--xh-shape-circle);
|
|
275
|
+
background-color: var(--xh-calendar-picker-today-mark-bg, var(--xh-fg-brand));
|
|
276
|
+
translate: -50% 0;
|
|
277
|
+
pointer-events: none;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
[dir='rtl'] [data-scope='calendar-picker'][data-part='cell'][data-today]::after {
|
|
281
|
+
translate: 50% 0;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/* 日期格接 Action Control text 档 xs(日历格是定尺控件,属格状当前)、ghost 形态:悬停 / 按下 / 禁用面、
|
|
285
|
+
焦点环与过渡由家族配方给,这里只把使用者槽映射到桥接槽。日视图是 24 见方的圆(下一条),
|
|
286
|
+
周期视图是铺满格宽的 24 高钮、控件圆角。钮不当定位盒:命中区挂在格子上。
|
|
287
|
+
格子坐在日历的白底上:悬停 100 → 按下 200;选中 / 邻月 / 不可用只换下面的私有槽 */
|
|
246
288
|
[data-scope='calendar-picker'][data-part='cell-trigger'] {
|
|
247
289
|
--xh-_calendar-picker-cell-bg: transparent;
|
|
248
290
|
--xh-_calendar-picker-cell-bg-hover: var(--xh-calendar-picker-cell-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
249
291
|
--xh-_calendar-picker-cell-bg-pressed: var(--xh-calendar-picker-cell-bg-pressed, var(--xh-_action-variant-bg-pressed));
|
|
250
|
-
--xh-_calendar-picker-cell-border: transparent;
|
|
251
292
|
--xh-_calendar-picker-cell-fg: var(--xh-calendar-picker-cell-fg, var(--xh-fg-default));
|
|
252
293
|
|
|
253
|
-
--xh-action-visual-size:
|
|
254
|
-
--xh-action-min-inline-size: var(--xh-calendar-picker-cell-size, var(--xh-
|
|
294
|
+
--xh-action-visual-size: var(--xh-calendar-picker-cell-size, var(--xh-_action-profile-visual-size));
|
|
295
|
+
--xh-action-min-inline-size: var(--xh-calendar-picker-cell-size, var(--xh-_action-profile-visual-size));
|
|
255
296
|
--xh-action-padding-inline: 0;
|
|
256
|
-
--xh-action-radius: var(--xh-calendar-picker-
|
|
297
|
+
--xh-action-radius: var(--xh-calendar-picker-period-radius, var(--xh-shape-control));
|
|
257
298
|
--xh-action-bg-rest: var(--xh-_calendar-picker-cell-bg);
|
|
258
299
|
--xh-action-bg-hover: var(--xh-_calendar-picker-cell-bg-hover);
|
|
259
300
|
--xh-action-bg-pressed: var(--xh-_calendar-picker-cell-bg-pressed);
|
|
260
301
|
--xh-action-bg-focus-visible: var(--xh-_calendar-picker-cell-bg);
|
|
261
302
|
--xh-action-bg-disabled: var(--xh-_calendar-picker-cell-bg);
|
|
262
|
-
--xh-action-border-rest:
|
|
263
|
-
--xh-action-border-hover:
|
|
264
|
-
--xh-action-border-pressed:
|
|
265
|
-
--xh-action-border-focus-visible:
|
|
266
|
-
--xh-action-border-disabled:
|
|
303
|
+
--xh-action-border-rest: transparent;
|
|
304
|
+
--xh-action-border-hover: transparent;
|
|
305
|
+
--xh-action-border-pressed: transparent;
|
|
306
|
+
--xh-action-border-focus-visible: transparent;
|
|
307
|
+
--xh-action-border-disabled: transparent;
|
|
267
308
|
--xh-action-fg-rest: var(--xh-_calendar-picker-cell-fg);
|
|
268
309
|
--xh-action-fg-hover: var(--xh-_calendar-picker-cell-fg);
|
|
269
310
|
--xh-action-fg-pressed: var(--xh-_calendar-picker-cell-fg);
|
|
270
311
|
--xh-action-fg-focus-visible: var(--xh-_calendar-picker-cell-fg);
|
|
271
312
|
--xh-action-font-size: var(--xh-calendar-picker-cell-font-size, var(--xh-text-body-size));
|
|
313
|
+
/* 按下只换面不缩放:缩放会让钮成为包含块,挂在格子上的命中区当场缩回钮里,抬起落空 */
|
|
314
|
+
--xh-action-scale-pressed: none;
|
|
272
315
|
|
|
273
|
-
|
|
274
|
-
flex:
|
|
275
|
-
/* 正方格:宽度由 week-row 的等分轨道给,高度跟着走 */
|
|
276
|
-
aspect-ratio: 1;
|
|
316
|
+
position: static;
|
|
317
|
+
flex: none;
|
|
277
318
|
font-weight: var(--xh-calendar-picker-cell-font-weight, var(--xh-font-weight-medium));
|
|
278
319
|
}
|
|
279
320
|
|
|
280
|
-
/*
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
321
|
+
/* 日视图:24 见方的日期钮取圆 */
|
|
322
|
+
[data-scope='calendar-picker'][data-part='cell-trigger'][data-view='day'] {
|
|
323
|
+
--xh-action-radius: var(--xh-calendar-picker-cell-radius, var(--xh-shape-circle));
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/* 周期格(周、月、季、年):钮铺满格子的内容宽,仍是 24 高、控件圆角;选中面只换颜色,不改变几何尺寸 */
|
|
327
|
+
[data-scope='calendar-picker'][data-part='cell-trigger']:is([data-view='week'], [data-view='month'], [data-view='quarter'], [data-view='year']) {
|
|
328
|
+
--xh-action-min-inline-size: 0;
|
|
329
|
+
|
|
330
|
+
inline-size: 100%;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/* 一行一个整周:文字从行首排起 */
|
|
334
|
+
[data-scope='calendar-picker'][data-part='cell-trigger'][data-view='week'] {
|
|
335
|
+
--xh-action-padding-inline: var(--xh-calendar-picker-week-cell-px, var(--xh-space-3));
|
|
336
|
+
|
|
337
|
+
justify-content: flex-start;
|
|
289
338
|
}
|
|
290
339
|
|
|
291
340
|
[data-scope='calendar-picker'][data-part='cell-trigger'][hidden] {
|
|
292
341
|
display: none;
|
|
293
342
|
}
|
|
294
343
|
|
|
295
|
-
/*
|
|
344
|
+
/* 命中区铺满整格:格子上下那截内衬也归它,指尖落在两行之间的空隙不会落空 */
|
|
296
345
|
[data-scope='calendar-picker'][data-part='cell-trigger']::after {
|
|
297
346
|
content: '';
|
|
298
347
|
position: absolute;
|
|
299
|
-
inset:
|
|
348
|
+
inset: 0;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* 粗指针:格子首尾相接,家族 text 档那套 ::after 外扩会压到上下相邻的格。改由格子自己长到 44 见方——
|
|
352
|
+
行距加到 44、列宽下限抬到 44,铺满整格的命中区随之到 44×44、彼此不重叠;钮仍是 24 的圆,
|
|
353
|
+
横条仍以格子中线为轴、按细指针那副行距收边。::after 钉回整格那副几何。
|
|
354
|
+
列宽下限再按视口收:七列放不下 44 时(手机窄屏)取「视口宽扣掉两侧页边、网格内衬与周数列」的七分之一,
|
|
355
|
+
日历不撑出视口;不按容器收——按内容定宽的宿主(行内块、浮层)里百分比会退成 auto,格子塌回钮宽 */
|
|
356
|
+
@media (pointer: coarse) {
|
|
357
|
+
[data-scope='calendar-picker'][data-part='grid']:is([data-view='week'], [data-view='month'], [data-view='quarter'], [data-view='year']) {
|
|
358
|
+
min-inline-size: calc(7 * max(var(--xh-calendar-picker-cell-min-w, var(--xh-control-h-md)), min(var(--xh-control-hit-coarse), calc((100vw - 2 * var(--xh-space-4) - 2 * var(--xh-calendar-picker-grid-px, var(--xh-space-4))) / 7))) + 2 * var(--xh-calendar-picker-grid-px, var(--xh-space-4)));
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
[data-scope='calendar-picker'][data-part='week-row'] {
|
|
362
|
+
grid-template-columns: repeat(7, minmax(max(var(--xh-calendar-picker-cell-min-w, var(--xh-control-h-md)), min(var(--xh-control-hit-coarse), calc((100vw - 2 * var(--xh-space-4) - 2 * var(--xh-calendar-picker-grid-px, var(--xh-space-4))) / 7))), 1fr));
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
[data-scope='calendar-picker'][data-part='week-row']:not([hidden]):has(> [data-part='week-number']) {
|
|
366
|
+
grid-template-columns:
|
|
367
|
+
var(--xh-calendar-picker-week-number-w, var(--xh-control-h-md))
|
|
368
|
+
repeat(7, minmax(max(var(--xh-calendar-picker-cell-min-w, var(--xh-control-h-md)), min(var(--xh-control-hit-coarse), calc((100vw - 2 * var(--xh-space-4) - 2 * var(--xh-calendar-picker-grid-px, var(--xh-space-4)) - var(--xh-calendar-picker-week-number-w, var(--xh-control-h-md))) / 7))), 1fr));
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
[data-scope='calendar-picker'][data-part='cell'] {
|
|
372
|
+
min-block-size: var(--xh-control-hit-coarse);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
[data-scope='calendar-picker'][data-part='cell-trigger']::after {
|
|
376
|
+
inline-size: auto;
|
|
377
|
+
block-size: auto;
|
|
378
|
+
min-block-size: 0;
|
|
379
|
+
translate: none;
|
|
380
|
+
}
|
|
300
381
|
}
|
|
301
382
|
|
|
302
|
-
/*
|
|
383
|
+
/* 邻月的日子照样可点,只是压暗、字重回到常规——它们不是占位符 */
|
|
303
384
|
[data-scope='calendar-picker'][data-part='cell-trigger'][data-outside-month] {
|
|
304
385
|
--xh-_calendar-picker-cell-fg: var(--xh-calendar-picker-cell-fg-outside, var(--xh-fg-subtle));
|
|
305
|
-
}
|
|
306
386
|
|
|
307
|
-
|
|
308
|
-
选中仍用后面的实心强调面,两个状态叠加时不会混成同一种反馈 */
|
|
309
|
-
[data-scope='calendar-picker'][data-part='cell-trigger'][data-today] {
|
|
310
|
-
--xh-_calendar-picker-cell-bg: var(--xh-calendar-picker-today-bg, transparent);
|
|
311
|
-
--xh-_calendar-picker-cell-border: var(--xh-calendar-picker-today-border, var(--xh-fg-brand));
|
|
312
|
-
--xh-_calendar-picker-cell-fg: var(--xh-calendar-picker-today-fg, var(--xh-fg-brand));
|
|
387
|
+
font-weight: var(--xh-calendar-picker-cell-font-weight-outside, var(--xh-font-weight-regular));
|
|
313
388
|
}
|
|
314
389
|
|
|
315
|
-
/* 实心强调面给单选 / 多选的选中格(格状当前):悬停不换面,按下压到 active
|
|
390
|
+
/* 实心强调面给单选 / 多选的选中格(格状当前):悬停不换面,按下压到 active 档。
|
|
316
391
|
面是实心的,环色与面同族,画在面里就看不出来;环改取面自己的前景色——
|
|
317
392
|
那一族色本来就要在这块面上把字读清楚,与面的对比是按可读性定的 */
|
|
318
393
|
[data-scope='calendar-picker'][data-part='cell-trigger'][data-selected] {
|
|
@@ -332,8 +407,10 @@
|
|
|
332
407
|
}
|
|
333
408
|
|
|
334
409
|
@media (forced-colors: active) {
|
|
335
|
-
|
|
336
|
-
|
|
410
|
+
/* 今天的圆点是一块底色,这一档会被系统抹掉:退出强制换色,直接取系统前景 */
|
|
411
|
+
[data-scope='calendar-picker'][data-part='cell'][data-today]::after {
|
|
412
|
+
forced-color-adjust: none;
|
|
413
|
+
background-color: CanvasText;
|
|
337
414
|
}
|
|
338
415
|
|
|
339
416
|
/* 强制色下底色被抹平,选中格只剩描边能说明身份 */
|
|
@@ -352,16 +429,17 @@
|
|
|
352
429
|
--xh-action-ring-color-focus-visible: var(--xh-ring-focus);
|
|
353
430
|
}
|
|
354
431
|
|
|
355
|
-
/*
|
|
432
|
+
/* 不可用又选中的格:压在淡底横条上,钮退到再深一档的中性面 + 置灰字(禁用面),
|
|
433
|
+
选中身份仍由这块底与未选中的透明格分开 */
|
|
356
434
|
[data-scope='calendar-picker'][data-part='cell-trigger'][data-disabled][data-selected] {
|
|
357
|
-
--xh-action-bg-disabled: var(--xh-calendar-picker-cell-bg-selected-disabled, var(--xh-bg-subtle));
|
|
435
|
+
--xh-action-bg-disabled: var(--xh-calendar-picker-cell-bg-selected-disabled, var(--xh-bg-subtle-hover));
|
|
358
436
|
}
|
|
359
437
|
|
|
360
438
|
/* 只读:日子改不动,但不是禁用——颜色照常,只把"可点"这个暗示收回来。
|
|
361
439
|
只收日视图这一档:粗粒度视图(月格、年格)点一格是往下钻一层,只读也照做,
|
|
362
440
|
那些格子仍是按得动的按钮,手型不能撤 */
|
|
363
441
|
[data-scope='calendar-picker'][data-part='grid'][data-readonly][data-view='day']
|
|
364
|
-
[data-part='cell-trigger']:not([data-disabled]) {
|
|
442
|
+
[data-part='cell-trigger']:where([data-scope='calendar-picker']):not([data-disabled]) {
|
|
365
443
|
--xh-action-cursor-rest: default;
|
|
366
444
|
--xh-action-cursor-hover: default;
|
|
367
445
|
--xh-action-cursor-pressed: default;
|
|
@@ -444,6 +522,11 @@
|
|
|
444
522
|
color: var(--xh-calendar-picker-cell-fg, var(--xh-fg-default));
|
|
445
523
|
font-weight: var(--xh-font-weight-bold);
|
|
446
524
|
}
|
|
525
|
+
|
|
526
|
+
/* 今天的圆点同样是底色:改由描边把这颗点画满 */
|
|
527
|
+
[data-scope='calendar-picker'][data-part='cell'][data-today]::after {
|
|
528
|
+
border: calc(var(--xh-calendar-picker-today-mark-size, var(--xh-space-1)) / 2) solid var(--xh-fg-default);
|
|
529
|
+
}
|
|
447
530
|
}
|
|
448
531
|
|
|
449
532
|
@media (forced-colors: active) {
|