@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/description.css
CHANGED
|
@@ -7,9 +7,10 @@
|
|
|
7
7
|
* 字段族说明与错误文案的公共层,按 [data-part='description'] / [data-part='error-text']
|
|
8
8
|
* 匹配下面逐个列出的 scope。
|
|
9
9
|
*
|
|
10
|
-
* 收在这里的是逐值相同的角色规则:说明 = --xh-text-
|
|
11
|
-
* --xh-leading-normal;错误文案 = --xh-text-
|
|
12
|
-
*
|
|
10
|
+
* 收在这里的是逐值相同的角色规则:说明 = --xh-text-caption-size / --xh-fg-subtle /
|
|
11
|
+
* --xh-leading-normal;错误文案 = --xh-text-caption-size / --xh-fg-danger / --xh-leading-normal;
|
|
12
|
+
* 两者外边距归零、紧贴控件(字段根的 gap 缺省为 0),最小高 --xh-space-5:这一行辅助行在表单里
|
|
13
|
+
* 就是字段之间的项距,有它的字段不再另留项距。挂了 --xh-<组件>-description-* /
|
|
13
14
|
* --xh-<组件>-error-* 覆盖槽的组件在各自皮肤里只另写带槽的 color / font-size 压过这里,
|
|
14
15
|
* margin 与 line-height 不再重写。
|
|
15
16
|
*
|
|
@@ -30,9 +31,10 @@
|
|
|
30
31
|
[data-scope='field'][data-part='description'],
|
|
31
32
|
[data-scope='fieldset'][data-part='description'] {
|
|
32
33
|
margin: 0;
|
|
33
|
-
|
|
34
|
+
min-block-size: var(--xh-space-5);
|
|
35
|
+
font-size: var(--xh-text-caption-size);
|
|
34
36
|
line-height: var(--xh-leading-normal);
|
|
35
|
-
color: var(--xh-fg-
|
|
37
|
+
color: var(--xh-fg-subtle);
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
/* 错误文案出现时淡入。不 invalid 时节点带 hidden,但不交给浏览器的 [hidden] 规则收成 display: none:
|
|
@@ -43,7 +45,8 @@
|
|
|
43
45
|
[data-scope='field'][data-part='error-text'],
|
|
44
46
|
[data-scope='fieldset'][data-part='error-text'] {
|
|
45
47
|
margin: 0;
|
|
46
|
-
|
|
48
|
+
min-block-size: var(--xh-space-5);
|
|
49
|
+
font-size: var(--xh-text-caption-size);
|
|
47
50
|
line-height: var(--xh-leading-normal);
|
|
48
51
|
color: var(--xh-fg-danger);
|
|
49
52
|
transition: opacity var(--xh-motion-duration-enter) var(--xh-motion-ease-enter);
|
|
@@ -54,6 +57,7 @@
|
|
|
54
57
|
display: block;
|
|
55
58
|
position: absolute;
|
|
56
59
|
block-size: 0;
|
|
60
|
+
min-block-size: 0;
|
|
57
61
|
overflow: clip;
|
|
58
62
|
visibility: hidden;
|
|
59
63
|
opacity: 0;
|
package/css/descriptions.css
CHANGED
|
@@ -14,12 +14,16 @@
|
|
|
14
14
|
[data-scope='descriptions'][data-part='root'] {
|
|
15
15
|
/* 一个尺寸档只换这几个私有槽,每一格与格内两段都从根上继承它们,
|
|
16
16
|
换档不必给每个部件各写一条选择器 */
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
/* 格与格之间行距窄、列距宽:一行里的几组左右分得开,上下读起来连成一列 */
|
|
18
|
+
--xh-_descriptions-row-gap: var(--xh-space-2);
|
|
19
|
+
--xh-_descriptions-column-gap: var(--xh-space-5);
|
|
20
|
+
/* 标签是每一格的集合标题:叠着排时与取值隔 space-2(集合标题与集合的间距);标签在左时隔 20px */
|
|
19
21
|
--xh-_descriptions-pair-gap: var(--xh-space-2);
|
|
20
|
-
--xh-_descriptions-label-gap: var(--xh-space-
|
|
21
|
-
|
|
22
|
-
--xh-_descriptions-
|
|
22
|
+
--xh-_descriptions-label-gap: var(--xh-space-5);
|
|
23
|
+
/* 描边档的单元格:上下 6px、左右 20px,单行格高约 33px */
|
|
24
|
+
--xh-_descriptions-py: var(--xh-space-1_5);
|
|
25
|
+
--xh-_descriptions-px: var(--xh-space-5);
|
|
26
|
+
/* 字号三档同为正文字号:尺寸档只换间距与格内距,不换字 */
|
|
23
27
|
--xh-_descriptions-font-size: var(--xh-control-font-md);
|
|
24
28
|
/* 标签在左时那一列的宽度:收到最长的那个标签 */
|
|
25
29
|
--xh-_descriptions-label-w: max-content;
|
|
@@ -27,7 +31,7 @@
|
|
|
27
31
|
display: grid;
|
|
28
32
|
/* 不写 columns 即每行一组;二到六列各有一条规则 */
|
|
29
33
|
grid-template-columns: minmax(0, 1fr);
|
|
30
|
-
gap: var(--xh-descriptions-gap, var(--xh-_descriptions-gap));
|
|
34
|
+
gap: var(--xh-descriptions-gap, var(--xh-_descriptions-row-gap) var(--xh-_descriptions-column-gap));
|
|
31
35
|
/* 根可能写成 dl,UA 的上下外边距在这里清掉 */
|
|
32
36
|
margin: 0;
|
|
33
37
|
color: var(--xh-descriptions-fg, var(--xh-fg-default));
|
|
@@ -63,19 +67,20 @@
|
|
|
63
67
|
|
|
64
68
|
/* —— 尺寸 —— */
|
|
65
69
|
[data-scope='descriptions'][data-part='root'][data-size='sm'] {
|
|
66
|
-
--xh-_descriptions-gap: var(--xh-space-
|
|
70
|
+
--xh-_descriptions-row-gap: var(--xh-space-1);
|
|
71
|
+
--xh-_descriptions-column-gap: var(--xh-space-4);
|
|
72
|
+
--xh-_descriptions-label-gap: var(--xh-space-4);
|
|
67
73
|
--xh-_descriptions-py: var(--xh-space-1);
|
|
68
|
-
--xh-_descriptions-px: var(--xh-space-
|
|
69
|
-
--xh-_descriptions-font-size: var(--xh-control-font-sm);
|
|
74
|
+
--xh-_descriptions-px: var(--xh-space-4);
|
|
70
75
|
}
|
|
71
76
|
|
|
72
77
|
[data-scope='descriptions'][data-part='root'][data-size='lg'] {
|
|
73
|
-
--xh-_descriptions-gap: var(--xh-space-4);
|
|
78
|
+
--xh-_descriptions-row-gap: var(--xh-space-4);
|
|
79
|
+
--xh-_descriptions-column-gap: var(--xh-space-6);
|
|
74
80
|
--xh-_descriptions-pair-gap: var(--xh-space-2);
|
|
75
|
-
--xh-_descriptions-label-gap: var(--xh-space-
|
|
76
|
-
--xh-_descriptions-py: var(--xh-space-
|
|
77
|
-
--xh-_descriptions-px: var(--xh-space-
|
|
78
|
-
--xh-_descriptions-font-size: var(--xh-control-font-lg);
|
|
81
|
+
--xh-_descriptions-label-gap: var(--xh-space-6);
|
|
82
|
+
--xh-_descriptions-py: var(--xh-space-2);
|
|
83
|
+
--xh-_descriptions-px: var(--xh-space-6);
|
|
79
84
|
}
|
|
80
85
|
|
|
81
86
|
/* —— 头部 ——
|
|
@@ -104,8 +109,8 @@
|
|
|
104
109
|
min-inline-size: 0;
|
|
105
110
|
margin: 0;
|
|
106
111
|
color: var(--xh-descriptions-title-fg, var(--xh-fg-default));
|
|
107
|
-
font-size: var(--xh-descriptions-title-font-size, var(--xh-text-
|
|
108
|
-
font-weight: var(--xh-descriptions-title-font-weight, var(--xh-
|
|
112
|
+
font-size: var(--xh-descriptions-title-font-size, var(--xh-text-heading-3-size));
|
|
113
|
+
font-weight: var(--xh-descriptions-title-font-weight, var(--xh-text-heading-3-weight));
|
|
109
114
|
line-height: var(--xh-leading-relaxed);
|
|
110
115
|
}
|
|
111
116
|
|
|
@@ -132,9 +137,10 @@
|
|
|
132
137
|
gap: var(--xh-descriptions-pair-gap, var(--xh-_descriptions-pair-gap));
|
|
133
138
|
}
|
|
134
139
|
|
|
140
|
+
/* 标签比取值重一档、颜色弱一档:扫读时先抓标签,读值时不被标签抢走 */
|
|
135
141
|
[data-scope='descriptions'][data-part='label'] {
|
|
136
142
|
color: var(--xh-descriptions-label-fg, var(--xh-fg-muted));
|
|
137
|
-
font-weight: var(--xh-descriptions-label-font-weight, var(--xh-
|
|
143
|
+
font-weight: var(--xh-descriptions-label-font-weight, var(--xh-font-weight-medium));
|
|
138
144
|
}
|
|
139
145
|
|
|
140
146
|
[data-scope='descriptions'][data-part='value'] {
|
|
@@ -161,9 +167,9 @@
|
|
|
161
167
|
> [data-scope='descriptions'][data-part='item'] {
|
|
162
168
|
padding-block: var(--xh-descriptions-item-py, var(--xh-_descriptions-py));
|
|
163
169
|
padding-inline: var(--xh-descriptions-item-px, var(--xh-_descriptions-px));
|
|
164
|
-
border-block-start: var(--xh-stroke-thin) solid var(--xh-descriptions-divider, var(--xh-border-
|
|
170
|
+
border-block-start: var(--xh-stroke-thin) solid var(--xh-descriptions-divider, var(--xh-border-default));
|
|
165
171
|
/* 每行一组时左边没有邻居,宽度按列数补回来 */
|
|
166
|
-
border-inline-start: 0 solid var(--xh-descriptions-divider, var(--xh-border-
|
|
172
|
+
border-inline-start: 0 solid var(--xh-descriptions-divider, var(--xh-border-default));
|
|
167
173
|
}
|
|
168
174
|
|
|
169
175
|
[data-scope='descriptions'][data-part='root'][data-variant='outline']
|
|
@@ -195,6 +201,28 @@
|
|
|
195
201
|
column-gap: var(--xh-descriptions-label-gap, var(--xh-_descriptions-label-gap));
|
|
196
202
|
}
|
|
197
203
|
|
|
204
|
+
/* 描边档标签在左:标签单成一列淡底格,与取值之间一条竖线;内距从格上下放到标签与取值各自身上 */
|
|
205
|
+
[data-scope='descriptions'][data-part='root'][data-variant='outline'][data-placement='left']
|
|
206
|
+
> [data-scope='descriptions'][data-part='item'] {
|
|
207
|
+
align-items: stretch;
|
|
208
|
+
column-gap: 0;
|
|
209
|
+
padding: 0;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
[data-scope='descriptions'][data-part='root'][data-variant='outline'][data-placement='left']
|
|
213
|
+
> [data-scope='descriptions'][data-part='item']
|
|
214
|
+
> :is([data-scope='descriptions'][data-part='label'], [data-scope='descriptions'][data-part='value']) {
|
|
215
|
+
padding-block: var(--xh-descriptions-item-py, var(--xh-_descriptions-py));
|
|
216
|
+
padding-inline: var(--xh-descriptions-item-px, var(--xh-_descriptions-px));
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
[data-scope='descriptions'][data-part='root'][data-variant='outline'][data-placement='left']
|
|
220
|
+
> [data-scope='descriptions'][data-part='item']
|
|
221
|
+
> [data-scope='descriptions'][data-part='label'] {
|
|
222
|
+
border-inline-end: var(--xh-stroke-thin) solid var(--xh-descriptions-divider, var(--xh-border-default));
|
|
223
|
+
background: var(--xh-descriptions-label-bg, var(--xh-bg-muted));
|
|
224
|
+
}
|
|
225
|
+
|
|
198
226
|
/* 二列与三列在这一档按作者写的列数摆,作者写在格上的 span 从这一档起认 */
|
|
199
227
|
[data-scope='descriptions'][data-part='root'][data-columns='2']
|
|
200
228
|
> [data-scope='descriptions'][data-part='item'],
|
package/css/dialog.css
CHANGED
|
@@ -88,6 +88,18 @@
|
|
|
88
88
|
选择器只认得它自己身上那一份 data-size。 */
|
|
89
89
|
--xh-_dialog-max-w: var(--xh-overlay-sheet-w-md);
|
|
90
90
|
|
|
91
|
+
/* 头部带:标题首行与角上的关闭钮都落在这条带的中线上。分三段时它就是 header,
|
|
92
|
+
不分三段时它是面板顶上那一截——两种写法的标题行与叉落在同一处。
|
|
93
|
+
带的上沿就是面板内沿(安全区由 positioner 让出),与抽屉同一组槽,抽屉在这里补安全区 */
|
|
94
|
+
--xh-_dialog-header-top: var(--xh-space-0);
|
|
95
|
+
/* 关闭钮行向让出的安全区:对话框不贴屏幕边(安全区同样由 positioner 让出),与抽屉同一组槽,抽屉在这里补安全区 */
|
|
96
|
+
--xh-_dialog-safe-inline: var(--xh-space-0);
|
|
97
|
+
--xh-_dialog-header-h: var(--xh-overlay-header-h);
|
|
98
|
+
/* 标题首行在带里居中要让出的上内衬:带高减标题行高再对半 */
|
|
99
|
+
--xh-_dialog-header-pt: calc((var(--xh-_dialog-header-h) - var(--xh-text-heading-3-size) * var(--xh-leading-normal)) / 2);
|
|
100
|
+
/* 分三段时头的下内衬扣掉分隔线那 1px,只有标题时整条带恰好是带高 */
|
|
101
|
+
--xh-_dialog-header-pb: calc(var(--xh-_dialog-header-pt) - var(--xh-stroke-thin));
|
|
102
|
+
|
|
91
103
|
/* positioner 不吃指针,面板自身恢复交互。 */
|
|
92
104
|
pointer-events: auto;
|
|
93
105
|
|
|
@@ -97,26 +109,14 @@
|
|
|
97
109
|
display: flex;
|
|
98
110
|
flex-direction: column;
|
|
99
111
|
gap: var(--xh-dialog-gap, var(--xh-stack-gap-md));
|
|
100
|
-
|
|
101
|
-
padding-
|
|
112
|
+
/* 不分三段时内衬由面板一层给:上沿让标题行落在头部带中线,横向与三段同一档 */
|
|
113
|
+
padding-block-start: var(--xh-dialog-py, var(--xh-_dialog-header-pt));
|
|
114
|
+
padding-block-end: var(--xh-dialog-py, var(--xh-overlay-sheet-body-py));
|
|
115
|
+
padding-inline: var(--xh-dialog-px, var(--xh-overlay-sheet-px));
|
|
102
116
|
border: var(--xh-stroke-thin) solid var(--xh-dialog-border, var(--xh-material-elevated-border));
|
|
103
117
|
border-radius: var(--xh-dialog-radius, var(--xh-shape-overlay));
|
|
104
|
-
/*
|
|
105
|
-
|
|
106
|
-
background:
|
|
107
|
-
linear-gradient(
|
|
108
|
-
to bottom,
|
|
109
|
-
var(--xh-dialog-highlight, var(--xh-material-elevated-highlight)) 0 var(--xh-stroke-thin),
|
|
110
|
-
transparent var(--xh-stroke-thin)
|
|
111
|
-
),
|
|
112
|
-
linear-gradient(
|
|
113
|
-
to bottom,
|
|
114
|
-
var(--xh-dialog-content-lens-bg, var(--xh-dialog-header-bg, var(--xh-material-elevated-bg))),
|
|
115
|
-
var(
|
|
116
|
-
--xh-dialog-bg,
|
|
117
|
-
var(--xh-material-elevated-bg)
|
|
118
|
-
) var(--xh-dialog-content-lens-depth, var(--xh-dialog-header-lens-depth, calc(var(--xh-dialog-py, var(--xh-surface-py-md)) + var(--xh-control-h-md))))
|
|
119
|
-
);
|
|
118
|
+
/* sheet 实体面:1px 描边 + 不透明底 + 单层投影,不叠渐变与顶光 */
|
|
119
|
+
background: var(--xh-dialog-bg, var(--xh-material-elevated-bg));
|
|
120
120
|
color: var(--xh-dialog-fg, var(--xh-material-elevated-fg));
|
|
121
121
|
box-shadow: var(--xh-dialog-shadow, var(--xh-material-elevated-shadow));
|
|
122
122
|
-webkit-backdrop-filter: var(--xh-dialog-content-backdrop-filter, var(--xh-dialog-backdrop-filter, var(--xh-material-elevated-backdrop)));
|
|
@@ -222,12 +222,13 @@
|
|
|
222
222
|
/* —— 面板三段 —— */
|
|
223
223
|
/* header / body / footer 把面板切成「头尾定在原处、正文自己滚」三段,
|
|
224
224
|
与抽屉、浮动面板同一套角色划分:头尾不参与压缩,正文吃掉剩下的高度并自己滚。
|
|
225
|
-
|
|
226
|
-
|
|
225
|
+
分三段时内衬由三段各自给,面板一层归零:头下、尾上的分隔线才能贴着面板两侧的边。
|
|
226
|
+
安全区由 positioner 让出,面板自己不碰视口边,三段不用各算一遍。
|
|
227
227
|
写了正文段的这一档同时封顶:不封顶正文永远没有可滚的余量,滚动条出不来。 */
|
|
228
228
|
[data-scope='dialog'][data-part='content']:has([data-scope='dialog'][data-part='body']) {
|
|
229
229
|
max-block-size: 100%;
|
|
230
230
|
gap: 0;
|
|
231
|
+
padding: 0;
|
|
231
232
|
overflow: hidden;
|
|
232
233
|
}
|
|
233
234
|
|
|
@@ -240,9 +241,16 @@
|
|
|
240
241
|
padding-block-end: var(--xh-dialog-header-pb, var(--xh-space-2));
|
|
241
242
|
}
|
|
242
243
|
|
|
243
|
-
/*
|
|
244
|
+
/* 三段结构的头:一条 48px 的头部带,标题首行落在带的中线上(说明在下面接着排,带随之长高),
|
|
245
|
+
横向内衬 20px;下沿一条 1px 的内部分隔线走 sheet 分隔令牌,贴着面板两侧的边。
|
|
246
|
+
下内衬扣掉分隔线那 1px,只有标题时整条带恰好是带高。无 body 的轻量对话框不会凭空多一条线 */
|
|
244
247
|
[data-scope='dialog'][data-part='content']:has([data-scope='dialog'][data-part='body'])
|
|
245
248
|
[data-scope='dialog'][data-part='header'] {
|
|
249
|
+
justify-content: center;
|
|
250
|
+
min-block-size: var(--xh-_dialog-header-h);
|
|
251
|
+
padding-block-start: var(--xh-dialog-header-pt, var(--xh-_dialog-header-pt));
|
|
252
|
+
padding-block-end: var(--xh-dialog-header-pb, var(--xh-_dialog-header-pb));
|
|
253
|
+
padding-inline: var(--xh-dialog-header-px, var(--xh-overlay-sheet-px));
|
|
246
254
|
border-block-end: var(--xh-stroke-thin) solid var(--xh-dialog-separator, var(--xh-material-elevated-separator));
|
|
247
255
|
}
|
|
248
256
|
|
|
@@ -293,12 +301,15 @@
|
|
|
293
301
|
|
|
294
302
|
/* 正文段:面板里唯一会滚的一段。最小高度归零,
|
|
295
303
|
否则弹性项按内容撑高,容器再矮也不产生溢出,滚动条永远出不来。
|
|
296
|
-
模态 body 是原生细条滚动面:细条由 reset
|
|
304
|
+
模态 body 是原生细条滚动面:细条由 reset 层统一给,滚到头不把页面一起带走。
|
|
305
|
+
内衬纵 24 横 20 */
|
|
297
306
|
[data-scope='dialog'][data-part='body'] {
|
|
298
307
|
flex: 1 1 auto;
|
|
299
308
|
min-block-size: 0;
|
|
300
309
|
overflow: auto;
|
|
301
310
|
overscroll-behavior: contain;
|
|
311
|
+
padding-block: var(--xh-dialog-body-py, var(--xh-overlay-sheet-body-py));
|
|
312
|
+
padding-inline: var(--xh-dialog-body-px, var(--xh-overlay-sheet-px));
|
|
302
313
|
}
|
|
303
314
|
|
|
304
315
|
/* 正文高度随交互变化(表单校验、展开段落):还在用原生滚动条的正文留一条稳定空道,
|
|
@@ -322,6 +333,13 @@
|
|
|
322
333
|
border-block-start: var(--xh-stroke-thin) solid var(--xh-dialog-separator, var(--xh-material-elevated-separator));
|
|
323
334
|
}
|
|
324
335
|
|
|
336
|
+
/* 三段结构的尾:纵 16 横 20,上沿的分隔线随尾段铺满面板宽 */
|
|
337
|
+
[data-scope='dialog'][data-part='content']:has([data-scope='dialog'][data-part='body'])
|
|
338
|
+
[data-scope='dialog'][data-part='footer'] {
|
|
339
|
+
padding-block: var(--xh-dialog-footer-py, var(--xh-overlay-sheet-footer-py));
|
|
340
|
+
padding-inline: var(--xh-dialog-footer-px, var(--xh-overlay-sheet-px));
|
|
341
|
+
}
|
|
342
|
+
|
|
325
343
|
/* 声明过 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去 */
|
|
326
344
|
[data-scope='dialog'][data-part='header'][hidden],
|
|
327
345
|
[data-scope='dialog'][data-part='body'][hidden],
|
|
@@ -329,10 +347,12 @@
|
|
|
329
347
|
display: none;
|
|
330
348
|
}
|
|
331
349
|
|
|
350
|
+
/* 面板标题:页面级面板标题档、正文色;行高钉在 normal,头部带按它算标题行居中 */
|
|
332
351
|
[data-scope='dialog'][data-part='title'] {
|
|
333
352
|
margin: 0;
|
|
334
353
|
font-size: var(--xh-dialog-title-font-size, var(--xh-text-heading-3-size));
|
|
335
354
|
font-weight: var(--xh-dialog-title-font-weight, var(--xh-text-heading-3-weight));
|
|
355
|
+
line-height: var(--xh-leading-normal);
|
|
336
356
|
color: var(--xh-dialog-title-fg, var(--xh-fg-default));
|
|
337
357
|
}
|
|
338
358
|
|
|
@@ -347,15 +367,16 @@
|
|
|
347
367
|
否则长标题会直接钻到按钮底下。只在真有关闭按钮时让位。 */
|
|
348
368
|
[data-scope='dialog'][data-part='content']:has([data-scope='dialog'][data-part='close-trigger'])
|
|
349
369
|
[data-scope='dialog'][data-part='title'] {
|
|
350
|
-
padding-inline-end: calc(var(--xh-dialog-close-size, var(--xh-control-h-sm)) + var(--xh-
|
|
370
|
+
padding-inline-end: calc(var(--xh-dialog-close-size, var(--xh-control-h-sm)) + var(--xh-space-4));
|
|
351
371
|
}
|
|
352
372
|
|
|
353
373
|
/*
|
|
354
|
-
* 关闭钮是面板角落的单图标钮:正方盒、sm 档几何、ghost
|
|
374
|
+
* 关闭钮是面板角落的单图标钮:正方盒、sm 档几何、ghost 四态面、按压换底与粗指针命中区
|
|
355
375
|
* 由家族配方给出——白面上走画布承载阶梯悬停 --xh-bg-subtle(100)→ 按下 --xh-bg-subtle-hover(200),
|
|
356
376
|
* 焦点面透明吃库环。这里只把公开槽桥接到矩阵之前(使用者槽 → 形态矩阵 → 家族缺省)与摆放,
|
|
357
377
|
* 聚焦档的 -bg-focus / -fg-focus 两槽同样桥到配方的 focus-visible 面,缺省仍是透明底与悬停字色;
|
|
358
378
|
* 静息前景取 muted 字色,悬停 / 按下回到 fg-default。
|
|
379
|
+
* 叉取 12px(--xh-glyph-size-xs),比钮的随档字形低一档;钮距右 16px,竖向落在头部带的中线上。
|
|
359
380
|
*/
|
|
360
381
|
[data-scope='dialog'][data-part='close-trigger'] {
|
|
361
382
|
--xh-action-visual-size: var(--xh-dialog-close-size, var(--xh-_action-profile-visual-size));
|
|
@@ -367,12 +388,13 @@
|
|
|
367
388
|
--xh-action-fg-hover: var(--xh-dialog-close-fg-hover, var(--xh-_action-variant-fg-hover));
|
|
368
389
|
--xh-action-fg-pressed: var(--xh-dialog-close-fg-hover, var(--xh-_action-variant-fg-pressed));
|
|
369
390
|
--xh-action-fg-focus-visible: var(--xh-dialog-close-fg-focus, var(--xh-dialog-close-fg-hover, var(--xh-_action-variant-fg-focus-visible)));
|
|
370
|
-
/*
|
|
371
|
-
--xh-icon-size: var(--xh-dialog-icon-size, var(--xh-
|
|
391
|
+
/* 作者塞进按钮的图标与皮肤画的兜底叉同一把尺 */
|
|
392
|
+
--xh-icon-size: var(--xh-dialog-icon-size, var(--xh-glyph-size-xs));
|
|
372
393
|
|
|
373
394
|
position: absolute;
|
|
374
|
-
|
|
375
|
-
inset-
|
|
395
|
+
/* 钮的视觉盒在头部带里竖向居中:按钮自己的边长从带高里扣掉再对半 */
|
|
396
|
+
inset-block-start: calc(var(--xh-_dialog-header-top) + (var(--xh-_dialog-header-h) - var(--xh-dialog-close-size, var(--xh-_action-profile-visual-size))) / 2);
|
|
397
|
+
inset-inline-end: calc(var(--xh-_dialog-safe-inline) + var(--xh-space-4));
|
|
376
398
|
}
|
|
377
399
|
|
|
378
400
|
[data-scope='dialog'][data-part='close-trigger'][hidden] {
|
|
@@ -412,13 +434,6 @@
|
|
|
412
434
|
}
|
|
413
435
|
}
|
|
414
436
|
|
|
415
|
-
@media (forced-colors: active) {
|
|
416
|
-
/* 强制色会接管渐变;改回同名实体 M4 底,保留 Canvas / CanvasText 的轮廓与正文。 */
|
|
417
|
-
[data-scope='dialog'][data-part='content'] {
|
|
418
|
-
background: var(--xh-dialog-bg, var(--xh-material-elevated-bg));
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
|
|
422
437
|
@media print {
|
|
423
438
|
/* 打印:定位层与遮罩是交互期才存在的东西,落到纸上只会盖住底下的正文。
|
|
424
439
|
收起写在这份皮肤里而不是 reset:reset 层排在组件层之前,组件层里任何一条 display 都压得住它。 */
|
package/css/diff-view.css
CHANGED
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
/* 窄档的并排视图:一行的两侧改成上下两段,旧行在上、新行在下。
|
|
165
165
|
行由横排 flex 换成两列栅格——行号一列、正文一列,一行里的四个格按 DOM 次序
|
|
166
166
|
自然落成两行,正文列因此只按单侧的最长行撑宽,不再是两侧之和 */
|
|
167
|
-
[data-scope='diff-view'][data-part='root'][data-view='split'] [data-part='row']:not([hidden]) {
|
|
167
|
+
[data-scope='diff-view'][data-part='root'][data-view='split'] [data-part='row']:where([data-scope='diff-view']):not([hidden]) {
|
|
168
168
|
display: grid;
|
|
169
169
|
grid-template-columns: auto minmax(0, 1fr);
|
|
170
170
|
}
|
|
@@ -197,13 +197,13 @@
|
|
|
197
197
|
|
|
198
198
|
/* 开了换行:pre-wrap 仍保留缩进与连续空白,只是允许行尾折下来;
|
|
199
199
|
anywhere 让没有空格的长串(url、base64)也能断 */
|
|
200
|
-
[data-scope='diff-view'][data-part='root'][data-wrap] [data-part='line-content'] {
|
|
200
|
+
[data-scope='diff-view'][data-part='root'][data-wrap] [data-part='line-content']:where([data-scope='diff-view']) {
|
|
201
201
|
white-space: pre-wrap;
|
|
202
202
|
overflow-wrap: anywhere;
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
/* 正文原本按最长行撑宽,不解除就折不下来 */
|
|
206
|
-
[data-scope='diff-view'][data-part='root'][data-wrap] [data-part='body'] {
|
|
206
|
+
[data-scope='diff-view'][data-part='root'][data-wrap] [data-part='body']:where([data-scope='diff-view']) {
|
|
207
207
|
min-inline-size: 0;
|
|
208
208
|
}
|
|
209
209
|
|
|
@@ -348,7 +348,7 @@
|
|
|
348
348
|
--xh-_diff-view-comment-col: var(--xh-diff-view-comment-col, var(--xh-diff-view-line-height, var(--xh-text-code-leading)));
|
|
349
349
|
}
|
|
350
350
|
|
|
351
|
-
[data-scope='diff-view'][data-part='root'][data-commentable] [data-part='line-content'] {
|
|
351
|
+
[data-scope='diff-view'][data-part='root'][data-commentable] [data-part='line-content']:where([data-scope='diff-view']) {
|
|
352
352
|
position: relative;
|
|
353
353
|
padding-inline-start: var(--xh-_diff-view-comment-col);
|
|
354
354
|
}
|
|
@@ -387,8 +387,8 @@
|
|
|
387
387
|
--xh-action-opacity-rest: 0;
|
|
388
388
|
}
|
|
389
389
|
|
|
390
|
-
[data-scope='diff-view'][data-part='row']:hover [data-part='comment-trigger'],
|
|
391
|
-
[data-scope='diff-view'][data-part='viewport']:focus-within [data-part='comment-trigger'] {
|
|
390
|
+
[data-scope='diff-view'][data-part='row']:hover [data-part='comment-trigger']:where([data-scope='diff-view']),
|
|
391
|
+
[data-scope='diff-view'][data-part='viewport']:focus-within [data-part='comment-trigger']:where([data-scope='diff-view']) {
|
|
392
392
|
--xh-action-opacity-rest: 1;
|
|
393
393
|
}
|
|
394
394
|
}
|
|
@@ -434,13 +434,13 @@
|
|
|
434
434
|
|
|
435
435
|
/* 宽档:视口放得下两列,并排视图回到一行两侧 */
|
|
436
436
|
@media (min-width: 1024px) {
|
|
437
|
-
[data-scope='diff-view'][data-part='root'][data-view='split'] [data-part='row']:not([hidden]) {
|
|
437
|
+
[data-scope='diff-view'][data-part='root'][data-view='split'] [data-part='row']:where([data-scope='diff-view']):not([hidden]) {
|
|
438
438
|
display: flex;
|
|
439
439
|
}
|
|
440
440
|
|
|
441
441
|
/* 两列之间的接缝:新侧的行号槽再补一条左边线。只在并排时是接缝,
|
|
442
442
|
堆叠时它落在段首,成了一条与任何东西都不相接的竖线 */
|
|
443
|
-
[data-scope='diff-view'][data-part='root'][data-view='split'] [data-part='line-number'][data-side='new'] {
|
|
443
|
+
[data-scope='diff-view'][data-part='root'][data-view='split'] [data-part='line-number'][data-side='new']:where([data-scope='diff-view']) {
|
|
444
444
|
border-inline-start: var(--xh-stroke-thin) solid var(--xh-diff-view-divider, var(--xh-border-subtle));
|
|
445
445
|
}
|
|
446
446
|
}
|
package/css/drawer.css
CHANGED
|
@@ -102,11 +102,16 @@
|
|
|
102
102
|
position: absolute;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
/* 挂在局部容器里的面板碰不到屏幕边,安全区那一段让位收回去:留着会在容器内白让出一条。
|
|
105
|
+
/* 挂在局部容器里的面板碰不到屏幕边,安全区那一段让位收回去:留着会在容器内白让出一条。
|
|
106
|
+
三段排版读的那几支安全区私有槽一并归零 */
|
|
106
107
|
[data-scope='drawer'][data-part='content'][data-contained] {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
--xh-_drawer-safe-top: var(--xh-space-0);
|
|
109
|
+
--xh-_drawer-safe-bottom: var(--xh-space-0);
|
|
110
|
+
--xh-_drawer-safe-inline: var(--xh-space-0);
|
|
111
|
+
|
|
112
|
+
padding-block-start: var(--xh-drawer-py, var(--xh-_drawer-header-pt));
|
|
113
|
+
padding-block-end: var(--xh-drawer-py, var(--xh-overlay-sheet-footer-py));
|
|
114
|
+
padding-inline: var(--xh-drawer-px, var(--xh-surface-px-sm));
|
|
110
115
|
}
|
|
111
116
|
|
|
112
117
|
/* 同一层底色之上再糊背后的页面;与 dialog 同写法,两个前缀都写 */
|
|
@@ -154,25 +159,38 @@
|
|
|
154
159
|
两种取法都在下面「四条边」那两条规则里。声明在 content 而不是 root:
|
|
155
160
|
content 会被 portal 到 body,root 上的槽位继承不过来(data-side 也是同一个道理) */
|
|
156
161
|
--xh-_drawer-size: var(--xh-overlay-drawer-w-md);
|
|
162
|
+
/* 系统占着的那几段:分三段时面板一层只让出它们,设计内衬交给三段各自给。
|
|
163
|
+
安全区只有物理方向的四个名字,行内轴上两侧同取较宽的那一段,RTL 下不会翻错边 */
|
|
164
|
+
--xh-_drawer-safe-top: env(safe-area-inset-top, 0px);
|
|
165
|
+
--xh-_drawer-safe-bottom: env(safe-area-inset-bottom, 0px);
|
|
166
|
+
--xh-_drawer-safe-inline: max(env(safe-area-inset-left, 0px), env(safe-area-inset-right, 0px));
|
|
167
|
+
/* 头部带:标题首行与角上的关闭钮都落在这条带的中线上,与对话框同一组槽 */
|
|
168
|
+
--xh-_drawer-header-h: var(--xh-overlay-header-h);
|
|
169
|
+
/* 标题首行在带里居中要让出的上内衬:带高减标题行高再对半 */
|
|
170
|
+
--xh-_drawer-header-pt: calc((var(--xh-_drawer-header-h) - var(--xh-text-heading-3-size) * var(--xh-leading-normal)) / 2);
|
|
171
|
+
/* 分三段时头的下内衬扣掉分隔线那 1px,只有标题时整条带恰好是带高 */
|
|
172
|
+
--xh-_drawer-header-pb: calc(var(--xh-_drawer-header-pt) - var(--xh-stroke-thin));
|
|
173
|
+
/* 带的上沿:不分三段时上内衬与安全区取大的一头,安全区更深时整条带往下让出差值 */
|
|
174
|
+
--xh-_drawer-header-top: calc(max(var(--xh-_drawer-header-pt), var(--xh-_drawer-safe-top)) - var(--xh-_drawer-header-pt));
|
|
157
175
|
|
|
158
176
|
position: fixed;
|
|
159
177
|
z-index: var(--xh-drawer-layer, var(--xh-_layer, var(--xh-layer-drawer)));
|
|
160
178
|
display: flex;
|
|
161
179
|
flex-direction: column;
|
|
162
180
|
gap: var(--xh-drawer-gap, var(--xh-stack-gap-md));
|
|
163
|
-
/*
|
|
181
|
+
/* 不分三段时内衬由面板一层给:上沿让标题行落在头部带中线,横向 16px。
|
|
182
|
+
面板贴死视口的某一条边、另一向满铺,内衬与安全区取大的一头:
|
|
164
183
|
刘海、圆角与底部横条压住的那一段由系统给出,内衬比它窄时首尾两行会被切掉。
|
|
165
|
-
桌面上 env() 恒为 0
|
|
166
|
-
|
|
167
|
-
padding-block-
|
|
168
|
-
padding-block-end: max(var(--xh-drawer-py, var(--xh-surface-py-md)), env(safe-area-inset-bottom));
|
|
184
|
+
桌面上 env() 恒为 0,取值与内衬槽完全一致。 */
|
|
185
|
+
padding-block-start: max(var(--xh-drawer-py, var(--xh-_drawer-header-pt)), env(safe-area-inset-top));
|
|
186
|
+
padding-block-end: max(var(--xh-drawer-py, var(--xh-overlay-sheet-footer-py)), env(safe-area-inset-bottom));
|
|
169
187
|
padding-inline: max(
|
|
170
|
-
var(--xh-drawer-px, var(--xh-surface-px-
|
|
188
|
+
var(--xh-drawer-px, var(--xh-surface-px-sm)),
|
|
171
189
|
env(safe-area-inset-left),
|
|
172
190
|
env(safe-area-inset-right)
|
|
173
191
|
);
|
|
174
|
-
/*
|
|
175
|
-
1px
|
|
192
|
+
/* sheet 三件套:任何浮层不得只靠 box-shadow 分层,亮色下面板与页面同色,
|
|
193
|
+
1px 描边才是它的边界;影只是加成。面就是实体底,不叠渐变与顶光 */
|
|
176
194
|
border: var(--xh-stroke-thin) solid var(--xh-drawer-border, var(--xh-material-elevated-border));
|
|
177
195
|
background: var(--xh-drawer-bg, var(--xh-material-elevated-bg));
|
|
178
196
|
color: var(--xh-drawer-fg, var(--xh-material-elevated-fg));
|
|
@@ -230,7 +248,8 @@
|
|
|
230
248
|
max-inline-size: 100%;
|
|
231
249
|
}
|
|
232
250
|
|
|
233
|
-
/*
|
|
251
|
+
/* 贴住视口(或容器)的那条边不取圆角:圆了反而露出底下的页面。朝向页面那两个角与别的浮层同一把尺,
|
|
252
|
+
取 overlay 圆角:使用者把圆角调大时抽屉不会单独方着;要另定经 --xh-drawer-radius */
|
|
234
253
|
[data-scope='drawer'][data-part='content'][data-side='left'] {
|
|
235
254
|
inset-inline-start: 0;
|
|
236
255
|
border-start-end-radius: var(--xh-drawer-radius, var(--xh-shape-overlay));
|
|
@@ -306,11 +325,16 @@
|
|
|
306
325
|
/* —— 面板三段 —— */
|
|
307
326
|
/* header / body / footer 把面板切成「头尾定在原处、正文自己滚」三段,
|
|
308
327
|
与弹窗、浮动面板同一套角色划分:头尾不参与压缩,正文吃掉剩下的高度并自己滚。
|
|
309
|
-
|
|
328
|
+
分三段时面板一层只让出安全区,设计内衬由三段各自给:头下、尾上的分隔线才能贴着面板两侧的边;
|
|
310
329
|
整块的滚动交还给正文段——两层都能滚时滚轮落在哪一层要看指针停在哪,
|
|
311
330
|
贴边的头尾会跟着一起走。 */
|
|
312
331
|
[data-scope='drawer'][data-part='content']:has([data-scope='drawer'][data-part='body']) {
|
|
332
|
+
--xh-_drawer-header-top: var(--xh-_drawer-safe-top);
|
|
333
|
+
|
|
313
334
|
gap: 0;
|
|
335
|
+
padding-block-start: var(--xh-_drawer-safe-top);
|
|
336
|
+
padding-block-end: var(--xh-_drawer-safe-bottom);
|
|
337
|
+
padding-inline: var(--xh-_drawer-safe-inline);
|
|
314
338
|
overflow: hidden;
|
|
315
339
|
}
|
|
316
340
|
|
|
@@ -323,14 +347,30 @@
|
|
|
323
347
|
padding-block-end: var(--xh-drawer-header-pb, var(--xh-space-2));
|
|
324
348
|
}
|
|
325
349
|
|
|
350
|
+
/* 三段结构的头:一条 48px 的头部带,标题首行落在带的中线上(说明在下面接着排,带随之长高),
|
|
351
|
+
横向内衬 16px;下沿一条 1px 的内部分隔线走 sheet 分隔令牌,贴着面板两侧的边。
|
|
352
|
+
下内衬扣掉分隔线那 1px,只有标题时整条带恰好是带高 */
|
|
353
|
+
[data-scope='drawer'][data-part='content']:has([data-scope='drawer'][data-part='body'])
|
|
354
|
+
[data-scope='drawer'][data-part='header'] {
|
|
355
|
+
justify-content: center;
|
|
356
|
+
min-block-size: var(--xh-_drawer-header-h);
|
|
357
|
+
padding-block-start: var(--xh-drawer-header-pt, var(--xh-_drawer-header-pt));
|
|
358
|
+
padding-block-end: var(--xh-drawer-header-pb, var(--xh-_drawer-header-pb));
|
|
359
|
+
padding-inline: var(--xh-drawer-header-px, var(--xh-surface-px-sm));
|
|
360
|
+
border-block-end: var(--xh-stroke-thin) solid var(--xh-drawer-separator, var(--xh-material-elevated-separator));
|
|
361
|
+
}
|
|
362
|
+
|
|
326
363
|
/* 正文段:面板里唯一会滚的一段。最小高度归零,
|
|
327
364
|
否则弹性项按内容撑高,容器再矮也不产生溢出,滚动条永远出不来。
|
|
328
|
-
模态 body 是原生细条滚动面:细条由 reset
|
|
365
|
+
模态 body 是原生细条滚动面:细条由 reset 层统一给,滚到头不把页面一起带走。
|
|
366
|
+
内衬纵 12 横 16 */
|
|
329
367
|
[data-scope='drawer'][data-part='body'] {
|
|
330
368
|
flex: 1 1 auto;
|
|
331
369
|
min-block-size: 0;
|
|
332
370
|
overflow: auto;
|
|
333
371
|
overscroll-behavior: contain;
|
|
372
|
+
padding-block: var(--xh-drawer-body-py, var(--xh-surface-py-sm));
|
|
373
|
+
padding-inline: var(--xh-drawer-body-px, var(--xh-surface-px-sm));
|
|
334
374
|
}
|
|
335
375
|
|
|
336
376
|
/* 正文高度随交互变化(表单校验、展开段落):还在用原生滚动条的正文留一条稳定空道,
|
|
@@ -349,6 +389,14 @@
|
|
|
349
389
|
padding-block-start: var(--xh-drawer-footer-pt, var(--xh-space-2));
|
|
350
390
|
}
|
|
351
391
|
|
|
392
|
+
/* 三段结构的尾:纵 16 横 16,上沿一条贴边的 1px 内部分隔线 */
|
|
393
|
+
[data-scope='drawer'][data-part='content']:has([data-scope='drawer'][data-part='body'])
|
|
394
|
+
[data-scope='drawer'][data-part='footer'] {
|
|
395
|
+
padding-block: var(--xh-drawer-footer-py, var(--xh-overlay-sheet-footer-py));
|
|
396
|
+
padding-inline: var(--xh-drawer-footer-px, var(--xh-surface-px-sm));
|
|
397
|
+
border-block-start: var(--xh-stroke-thin) solid var(--xh-drawer-separator, var(--xh-material-elevated-separator));
|
|
398
|
+
}
|
|
399
|
+
|
|
352
400
|
/* 声明过 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去 */
|
|
353
401
|
[data-scope='drawer'][data-part='header'][hidden],
|
|
354
402
|
[data-scope='drawer'][data-part='body'][hidden],
|
|
@@ -356,10 +404,12 @@
|
|
|
356
404
|
display: none;
|
|
357
405
|
}
|
|
358
406
|
|
|
407
|
+
/* 面板标题:页面级面板标题档、正文色;行高钉在 normal,头部带按它算标题行居中 */
|
|
359
408
|
[data-scope='drawer'][data-part='title'] {
|
|
360
409
|
margin: 0;
|
|
361
410
|
font-size: var(--xh-drawer-title-font-size, var(--xh-text-heading-3-size));
|
|
362
411
|
font-weight: var(--xh-drawer-title-font-weight, var(--xh-text-heading-3-weight));
|
|
412
|
+
line-height: var(--xh-leading-normal);
|
|
363
413
|
color: var(--xh-drawer-title-fg, var(--xh-fg-default));
|
|
364
414
|
}
|
|
365
415
|
|
|
@@ -374,15 +424,16 @@
|
|
|
374
424
|
否则长标题会直接钻到按钮底下。只在真有关闭按钮时让位。 */
|
|
375
425
|
[data-scope='drawer'][data-part='content']:has([data-scope='drawer'][data-part='close-trigger'])
|
|
376
426
|
[data-scope='drawer'][data-part='title'] {
|
|
377
|
-
padding-inline-end: calc(var(--xh-drawer-close-size, var(--xh-control-h-sm)) + var(--xh-
|
|
427
|
+
padding-inline-end: calc(var(--xh-drawer-close-size, var(--xh-control-h-sm)) + var(--xh-space-4));
|
|
378
428
|
}
|
|
379
429
|
|
|
380
430
|
/*
|
|
381
|
-
* 关闭钮是面板角落的单图标钮:正方盒、sm 档几何、ghost
|
|
431
|
+
* 关闭钮是面板角落的单图标钮:正方盒、sm 档几何、ghost 四态面、按压换底与粗指针命中区
|
|
382
432
|
* 由家族配方给出——白面上走画布承载阶梯悬停 --xh-bg-subtle(100)→ 按下 --xh-bg-subtle-hover(200),
|
|
383
433
|
* 焦点面透明吃库环。这里只把公开槽桥接到矩阵之前(使用者槽 → 形态矩阵 → 家族缺省)与摆放,
|
|
384
434
|
* 聚焦档的 -bg-focus / -fg-focus 两槽同样桥到配方的 focus-visible 面(与 dialog 一致),缺省仍是透明底与悬停字色;
|
|
385
435
|
* 静息前景取 muted 字色,悬停 / 按下回到 fg-default。
|
|
436
|
+
* 叉取 12px(--xh-glyph-size-xs),比钮的随档字形低一档;钮距右 16px,竖向落在头部带的中线上。
|
|
386
437
|
*/
|
|
387
438
|
[data-scope='drawer'][data-part='close-trigger'] {
|
|
388
439
|
--xh-action-visual-size: var(--xh-drawer-close-size, var(--xh-_action-profile-visual-size));
|
|
@@ -394,12 +445,15 @@
|
|
|
394
445
|
--xh-action-fg-hover: var(--xh-drawer-close-fg-hover, var(--xh-_action-variant-fg-hover));
|
|
395
446
|
--xh-action-fg-pressed: var(--xh-drawer-close-fg-hover, var(--xh-_action-variant-fg-pressed));
|
|
396
447
|
--xh-action-fg-focus-visible: var(--xh-drawer-close-fg-focus, var(--xh-drawer-close-fg-hover, var(--xh-_action-variant-fg-focus-visible)));
|
|
397
|
-
/*
|
|
398
|
-
--xh-icon-size: var(--xh-drawer-icon-size, var(--xh-
|
|
448
|
+
/* 作者塞进按钮的图标与皮肤画的兜底叉同一把尺 */
|
|
449
|
+
--xh-icon-size: var(--xh-drawer-icon-size, var(--xh-glyph-size-xs));
|
|
399
450
|
|
|
400
451
|
position: absolute;
|
|
401
|
-
|
|
402
|
-
inset-
|
|
452
|
+
/* 钮的视觉盒在头部带里竖向居中:按钮自己的边长从带高里扣掉再对半 */
|
|
453
|
+
inset-block-start: calc(var(--xh-_drawer-header-top) + (var(--xh-_drawer-header-h) - var(--xh-drawer-close-size, var(--xh-_action-profile-visual-size))) / 2);
|
|
454
|
+
/* 行向先让出安全区再距边 16px:绝对定位从面板的内边距盒量起,横屏刘海压住的那一段不让,叉就落进去;
|
|
455
|
+
局部容器里的抽屉安全区槽归零,仍是 16px */
|
|
456
|
+
inset-inline-end: calc(var(--xh-_drawer-safe-inline) + var(--xh-space-4));
|
|
403
457
|
}
|
|
404
458
|
|
|
405
459
|
[data-scope='drawer'][data-part='close-trigger'][hidden] {
|