@xihan-ui/styles 3.2.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +441 -0
- package/component-tokens.d.ts +229 -60
- package/components.tokens.json +5124 -1555
- package/css/accordion.css +47 -20
- package/css/alert.css +14 -15
- package/css/anchor.css +2 -2
- package/css/approval.css +37 -13
- package/css/avatar-group.css +9 -12
- package/css/avatar.css +20 -18
- package/css/back-top.css +21 -7
- package/css/badge.css +5 -5
- package/css/breadcrumb.css +18 -16
- package/css/button-group.css +4 -6
- package/css/button.css +4 -7
- package/css/calendar-picker.css +177 -94
- package/css/calendar-range-picker.css +206 -121
- package/css/card.css +34 -6
- package/css/carousel.css +65 -49
- package/css/cascader.css +41 -29
- package/css/checkbox-group.css +9 -6
- package/css/checkbox.css +5 -4
- package/css/citation.css +7 -2
- package/css/clipboard.css +20 -4
- package/css/collapsible.css +29 -14
- package/css/color-field.css +4 -4
- package/css/color-picker.css +77 -23
- package/css/color-slider.css +10 -8
- package/css/color-swatch-picker.css +5 -5
- package/css/combobox.css +14 -10
- package/css/command.css +13 -8
- package/css/context-menu.css +10 -5
- package/css/date-field.css +4 -4
- package/css/date-picker.css +165 -102
- package/css/date-range-picker.css +186 -123
- package/css/description.css +10 -6
- package/css/descriptions.css +47 -19
- package/css/dialog.css +50 -35
- package/css/drawer.css +75 -21
- package/css/editable.css +15 -41
- package/css/empty-state.css +21 -3
- package/css/field-array.css +4 -1
- package/css/field.css +17 -18
- package/css/fieldset.css +33 -13
- package/css/file-upload.css +65 -32
- package/css/float-button.css +25 -15
- package/css/floating-panel.css +1 -1
- package/css/form.css +24 -10
- package/css/grid-list.css +1 -1
- package/css/highlight.css +4 -4
- package/css/hover-card.css +19 -12
- package/css/image-viewer.css +77 -27
- package/css/image.css +12 -4
- package/css/infinite-scroll.css +8 -4
- package/css/input-group.css +74 -26
- package/css/kbd.css +1 -1
- package/css/label.css +27 -11
- package/css/layout.css +17 -10
- package/css/list.css +13 -9
- package/css/listbox.css +12 -7
- package/css/loading-bar.css +3 -0
- package/css/mention.css +10 -8
- package/css/menu.css +10 -5
- package/css/menubar.css +13 -8
- package/css/navigation-menu.css +2 -2
- package/css/notification.css +114 -31
- package/css/number-animation.css +2 -2
- package/css/number-field.css +60 -37
- package/css/page-header.css +63 -26
- package/css/pagination.css +35 -38
- package/css/password-input.css +10 -66
- package/css/pin-input.css +18 -26
- package/css/popconfirm.css +20 -11
- package/css/popover.css +18 -12
- package/css/progress.css +14 -13
- package/css/prompt-input.css +3 -3
- package/css/question-flow.css +33 -7
- package/css/radio-group.css +120 -55
- package/css/rating.css +31 -14
- package/css/select.css +14 -10
- package/css/separator.css +22 -4
- package/css/side-nav.css +16 -11
- package/css/signature-pad.css +23 -9
- package/css/skeleton.css +7 -7
- package/css/slider.css +71 -42
- package/css/sparkline.css +8 -2
- package/css/spinner.css +40 -20
- package/css/statistic.css +14 -14
- package/css/steps.css +115 -84
- package/css/switch.css +9 -7
- package/css/table.css +27 -10
- package/css/tabs.css +35 -12
- package/css/tag-group.css +17 -6
- package/css/tag.css +54 -29
- package/css/tags-input.css +38 -19
- package/css/text-field.css +5 -5
- package/css/time-field.css +4 -4
- package/css/time-picker.css +150 -64
- package/css/time-range-picker.css +91 -62
- package/css/timeline.css +37 -20
- package/css/timer.css +3 -3
- package/css/toggle-group.css +4 -4
- package/css/tool-call.css +6 -4
- package/css/toolbar.css +6 -5
- package/css/tooltip.css +15 -16
- package/css/tour.css +14 -7
- package/css/transfer.css +22 -16
- package/css/tree-select.css +10 -10
- package/css/tree.css +26 -25
- package/css/typography.css +28 -25
- package/dist/css/accordion.css +47 -20
- package/dist/css/alert.css +14 -15
- package/dist/css/anchor.css +2 -2
- package/dist/css/approval.css +37 -13
- package/dist/css/avatar-group.css +9 -12
- package/dist/css/avatar.css +20 -18
- package/dist/css/back-top.css +21 -7
- package/dist/css/badge.css +5 -5
- package/dist/css/breadcrumb.css +18 -16
- package/dist/css/button-group.css +4 -6
- package/dist/css/button.css +4 -7
- package/dist/css/calendar-picker.css +177 -94
- package/dist/css/calendar-range-picker.css +206 -121
- package/dist/css/card.css +34 -6
- package/dist/css/carousel.css +65 -49
- package/dist/css/cascader.css +41 -29
- package/dist/css/checkbox-group.css +9 -6
- package/dist/css/checkbox.css +5 -4
- package/dist/css/citation.css +7 -2
- package/dist/css/clipboard.css +20 -4
- package/dist/css/collapsible.css +29 -14
- package/dist/css/color-field.css +4 -4
- package/dist/css/color-picker.css +77 -23
- package/dist/css/color-slider.css +10 -8
- package/dist/css/color-swatch-picker.css +5 -5
- package/dist/css/combobox.css +14 -10
- package/dist/css/command.css +13 -8
- package/dist/css/context-menu.css +10 -5
- package/dist/css/date-field.css +4 -4
- package/dist/css/date-picker.css +165 -102
- package/dist/css/date-range-picker.css +186 -123
- package/dist/css/description.css +10 -6
- package/dist/css/descriptions.css +47 -19
- package/dist/css/dialog.css +50 -35
- package/dist/css/drawer.css +75 -21
- package/dist/css/editable.css +15 -41
- package/dist/css/empty-state.css +21 -3
- package/dist/css/field-array.css +4 -1
- package/dist/css/field.css +17 -18
- package/dist/css/fieldset.css +33 -13
- package/dist/css/file-upload.css +65 -32
- package/dist/css/float-button.css +25 -15
- package/dist/css/floating-panel.css +1 -1
- package/dist/css/form.css +24 -10
- package/dist/css/grid-list.css +1 -1
- package/dist/css/highlight.css +4 -4
- package/dist/css/hover-card.css +19 -12
- package/dist/css/image-viewer.css +77 -27
- package/dist/css/image.css +12 -4
- package/dist/css/infinite-scroll.css +8 -4
- package/dist/css/input-group.css +74 -26
- package/dist/css/kbd.css +1 -1
- package/dist/css/label.css +27 -11
- package/dist/css/layout.css +17 -10
- package/dist/css/list.css +13 -9
- package/dist/css/listbox.css +12 -7
- package/dist/css/loading-bar.css +3 -0
- package/dist/css/mention.css +10 -8
- package/dist/css/menu.css +10 -5
- package/dist/css/menubar.css +13 -8
- package/dist/css/navigation-menu.css +2 -2
- package/dist/css/notification.css +114 -31
- package/dist/css/number-animation.css +2 -2
- package/dist/css/number-field.css +60 -37
- package/dist/css/page-header.css +63 -26
- package/dist/css/pagination.css +35 -38
- package/dist/css/password-input.css +10 -66
- package/dist/css/pin-input.css +18 -26
- package/dist/css/popconfirm.css +20 -11
- package/dist/css/popover.css +18 -12
- package/dist/css/progress.css +14 -13
- package/dist/css/prompt-input.css +3 -3
- package/dist/css/question-flow.css +33 -7
- package/dist/css/radio-group.css +120 -55
- package/dist/css/rating.css +31 -14
- package/dist/css/select.css +14 -10
- package/dist/css/separator.css +22 -4
- package/dist/css/side-nav.css +16 -11
- package/dist/css/signature-pad.css +23 -9
- package/dist/css/skeleton.css +7 -7
- package/dist/css/slider.css +71 -42
- package/dist/css/sparkline.css +8 -2
- package/dist/css/spinner.css +40 -20
- package/dist/css/statistic.css +14 -14
- package/dist/css/steps.css +115 -84
- package/dist/css/switch.css +9 -7
- package/dist/css/table.css +27 -10
- package/dist/css/tabs.css +35 -12
- package/dist/css/tag-group.css +17 -6
- package/dist/css/tag.css +54 -29
- package/dist/css/tags-input.css +38 -19
- package/dist/css/text-field.css +5 -5
- package/dist/css/time-field.css +4 -4
- package/dist/css/time-picker.css +150 -64
- package/dist/css/time-range-picker.css +91 -62
- package/dist/css/timeline.css +37 -20
- package/dist/css/timer.css +3 -3
- package/dist/css/toggle-group.css +4 -4
- package/dist/css/tool-call.css +6 -4
- package/dist/css/toolbar.css +6 -5
- package/dist/css/tooltip.css +15 -16
- package/dist/css/tour.css +14 -7
- package/dist/css/transfer.css +22 -16
- package/dist/css/tree-select.css +10 -10
- package/dist/css/tree.css +26 -25
- package/dist/css/typography.css +28 -25
- package/dist/family/action-control.css +30 -24
- package/dist/family/chart.css +57 -0
- package/dist/family/collection-item.css +12 -8
- package/dist/family/field-chrome.css +28 -19
- package/dist/family/loading-ring.css +20 -13
- package/dist/family/swatch.css +4 -4
- package/dist/family/tag-list.css +6 -0
- package/family/action-control.css +30 -24
- package/family/chart.css +57 -0
- package/family/collection-item.css +12 -8
- package/family/field-chrome.css +28 -19
- package/family/loading-ring.css +20 -13
- package/family/swatch.css +4 -4
- package/family/tag-list.css +6 -0
- package/index.css +3580 -2060
- package/index.unlayered.css +3579 -2060
- package/package.json +2 -2
|
@@ -14,12 +14,16 @@
|
|
|
14
14
|
.xh-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
|
.xh-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
|
.xh-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
|
.xh-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
|
.xh-scope-descriptions[data-part='value'] {
|
|
@@ -161,9 +167,9 @@
|
|
|
161
167
|
> .xh-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
|
.xh-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
|
+
.xh-scope-descriptions[data-part='root'][data-variant='outline'][data-placement='left']
|
|
206
|
+
> .xh-scope-descriptions[data-part='item'] {
|
|
207
|
+
align-items: stretch;
|
|
208
|
+
column-gap: 0;
|
|
209
|
+
padding: 0;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.xh-scope-descriptions[data-part='root'][data-variant='outline'][data-placement='left']
|
|
213
|
+
> .xh-scope-descriptions[data-part='item']
|
|
214
|
+
> :is(.xh-scope-descriptions[data-part='label'], .xh-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
|
+
.xh-scope-descriptions[data-part='root'][data-variant='outline'][data-placement='left']
|
|
220
|
+
> .xh-scope-descriptions[data-part='item']
|
|
221
|
+
> .xh-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
|
.xh-scope-descriptions[data-part='root'][data-columns='2']
|
|
200
228
|
> .xh-scope-descriptions[data-part='item'],
|
package/dist/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
|
.xh-scope-dialog[data-part='content']:has(.xh-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
|
.xh-scope-dialog[data-part='content']:has(.xh-scope-dialog[data-part='body'])
|
|
245
248
|
.xh-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
|
.xh-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
|
+
.xh-scope-dialog[data-part='content']:has(.xh-scope-dialog[data-part='body'])
|
|
338
|
+
.xh-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
|
.xh-scope-dialog[data-part='header'][hidden],
|
|
327
345
|
.xh-scope-dialog[data-part='body'][hidden],
|
|
@@ -329,10 +347,12 @@
|
|
|
329
347
|
display: none;
|
|
330
348
|
}
|
|
331
349
|
|
|
350
|
+
/* 面板标题:页面级面板标题档、正文色;行高钉在 normal,头部带按它算标题行居中 */
|
|
332
351
|
.xh-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
|
.xh-scope-dialog[data-part='content']:has(.xh-scope-dialog[data-part='close-trigger'])
|
|
349
369
|
.xh-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
|
.xh-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
|
.xh-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
|
-
.xh-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/dist/css/drawer.css
CHANGED
|
@@ -102,11 +102,16 @@
|
|
|
102
102
|
position: absolute;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
/* 挂在局部容器里的面板碰不到屏幕边,安全区那一段让位收回去:留着会在容器内白让出一条。
|
|
105
|
+
/* 挂在局部容器里的面板碰不到屏幕边,安全区那一段让位收回去:留着会在容器内白让出一条。
|
|
106
|
+
三段排版读的那几支安全区私有槽一并归零 */
|
|
106
107
|
.xh-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
|
.xh-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
|
.xh-scope-drawer[data-part='content']:has(.xh-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
|
+
.xh-scope-drawer[data-part='content']:has(.xh-scope-drawer[data-part='body'])
|
|
354
|
+
.xh-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
|
.xh-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
|
+
.xh-scope-drawer[data-part='content']:has(.xh-scope-drawer[data-part='body'])
|
|
394
|
+
.xh-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
|
.xh-scope-drawer[data-part='header'][hidden],
|
|
354
402
|
.xh-scope-drawer[data-part='body'][hidden],
|
|
@@ -356,10 +404,12 @@
|
|
|
356
404
|
display: none;
|
|
357
405
|
}
|
|
358
406
|
|
|
407
|
+
/* 面板标题:页面级面板标题档、正文色;行高钉在 normal,头部带按它算标题行居中 */
|
|
359
408
|
.xh-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
|
.xh-scope-drawer[data-part='content']:has(.xh-scope-drawer[data-part='close-trigger'])
|
|
376
426
|
.xh-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
|
.xh-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
|
.xh-scope-drawer[data-part='close-trigger'][hidden] {
|
package/dist/css/editable.css
CHANGED
|
@@ -26,9 +26,6 @@
|
|
|
26
26
|
--xh-_editable-font-size: var(--xh-control-font-md);
|
|
27
27
|
--xh-_editable-control-gap: 0;
|
|
28
28
|
|
|
29
|
-
/* 盒内那道分隔线的长度:取钮高的一半,线的上下各留一截空白,不与钮等高 */
|
|
30
|
-
--xh-_editable-divider-h: 50%;
|
|
31
|
-
|
|
32
29
|
display: inline-flex;
|
|
33
30
|
flex-direction: column;
|
|
34
31
|
gap: var(--xh-editable-gap, var(--xh-space-1));
|
|
@@ -61,7 +58,9 @@
|
|
|
61
58
|
}
|
|
62
59
|
|
|
63
60
|
.xh-scope-editable[data-part='label'] {
|
|
64
|
-
|
|
61
|
+
/* 竖排时标签与控件之间的距离:根的 gap 之上补一段差值,--xh-editable-label-gap 给多少最终就是多少 */
|
|
62
|
+
margin-block-end: calc(var(--xh-editable-label-gap, var(--xh-space-2)) - var(--xh-editable-gap, var(--xh-space-1)));
|
|
63
|
+
color: var(--xh-editable-label-fg, var(--xh-fg-muted));
|
|
65
64
|
font-size: var(--xh-editable-label-font-size, var(--xh-text-label-size));
|
|
66
65
|
font-weight: var(--xh-editable-label-font-weight, var(--xh-text-label-weight));
|
|
67
66
|
/* 点标题会把人送进编辑态(预览态下 for 指着的输入框是收起的,点了没反应),
|
|
@@ -70,7 +69,7 @@
|
|
|
70
69
|
}
|
|
71
70
|
|
|
72
71
|
.xh-scope-editable[data-part='label'][data-disabled] {
|
|
73
|
-
color: var(--xh-editable-label-fg-disabled, var(--xh-fg-
|
|
72
|
+
color: var(--xh-editable-label-fg-disabled, var(--xh-fg-muted));
|
|
74
73
|
}
|
|
75
74
|
|
|
76
75
|
/* 预览区只是 control 里的内容段,不再自成一只带圆角的盒子。 */
|
|
@@ -165,8 +164,6 @@
|
|
|
165
164
|
--xh-field-border-focus: var(--xh-editable-control-border-focus, var(--xh-_field-variant-border-focus));
|
|
166
165
|
--xh-field-border-invalid: var(--xh-editable-control-border-invalid, var(--xh-_field-variant-border-invalid));
|
|
167
166
|
--xh-field-border-disabled: var(--xh-editable-control-border-disabled, var(--xh-_field-variant-border-disabled));
|
|
168
|
-
--xh-field-ring-focus: var(--xh-ring-focus);
|
|
169
|
-
--xh-field-ring-invalid: var(--xh-ring-invalid);
|
|
170
167
|
--xh-field-shadow-rest: var(--xh-editable-control-shadow, none);
|
|
171
168
|
/* 家族 chrome 会重写 --xh-icon-size,使用者图标槽必须经桥接槽下发才能在盒内生效 */
|
|
172
169
|
--xh-field-glyph-size: var(--xh-editable-icon-size, var(--xh-_field-size-glyph-size));
|
|
@@ -179,9 +176,10 @@
|
|
|
179
176
|
display: none;
|
|
180
177
|
}
|
|
181
178
|
|
|
182
|
-
/*
|
|
183
|
-
|
|
184
|
-
|
|
179
|
+
/* 三颗动作是 control 内部的分段:inset 圆角、按承载面取的悬停 / 按下阶梯、粗指针热区、
|
|
180
|
+
:focus-visible 关环与禁用面全由 Action Control 的 field-inset ghost 档给,组件只映射既有覆盖槽。
|
|
181
|
+
视觉盒按字段内钮尺寸表随字段档(sm 取控件内动作档、md 取 control-h-sm、lg 取 control-h-md),
|
|
182
|
+
由 field-inset 档按 data-xh-action-size 给;常态只剩符号、取次要前景,悬停与按下才浮出底色 */
|
|
185
183
|
.xh-scope-editable[data-part='edit-trigger'],
|
|
186
184
|
.xh-scope-editable[data-part='submit-trigger'],
|
|
187
185
|
.xh-scope-editable[data-part='cancel-trigger'] {
|
|
@@ -193,7 +191,7 @@
|
|
|
193
191
|
--xh-action-bg-hover: var(--xh-editable-trigger-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
194
192
|
--xh-action-bg-pressed: var(--xh-editable-trigger-bg-active, var(--xh-_action-variant-bg-pressed));
|
|
195
193
|
--xh-action-bg-disabled: var(--xh-editable-trigger-bg-disabled, var(--xh-_action-variant-bg-disabled));
|
|
196
|
-
--xh-action-fg-rest: var(--xh-editable-trigger-fg, var(--xh-fg-
|
|
194
|
+
--xh-action-fg-rest: var(--xh-editable-trigger-fg, var(--xh-fg-muted));
|
|
197
195
|
--xh-action-fg-hover: var(--xh-editable-trigger-fg-hover, var(--xh-fg-default));
|
|
198
196
|
--xh-action-border-rest: transparent;
|
|
199
197
|
--xh-action-highlight-rest: transparent;
|
|
@@ -213,6 +211,12 @@
|
|
|
213
211
|
margin-inline-start: auto;
|
|
214
212
|
}
|
|
215
213
|
|
|
214
|
+
/* 确认与取消两颗挨着:紧凑 sm 档钮只有 20px,两钮中心距凑不够 24px 就落不进 SC 2.5.8 的间距例外,
|
|
215
|
+
两颗之间隔一格 --xh-space-1;其余档钮不低于 24px,这一格只把两块悬停面分开 */
|
|
216
|
+
.xh-scope-editable[data-part='cancel-trigger'] {
|
|
217
|
+
margin-inline-start: var(--xh-space-1);
|
|
218
|
+
}
|
|
219
|
+
|
|
216
220
|
/* 三颗动作默认是纯图标按钮;作者放了自己的图标后 :empty 不命中,不会叠两层。 */
|
|
217
221
|
.xh-scope-editable:is([data-part='edit-trigger'], [data-part='submit-trigger'], [data-part='cancel-trigger']):empty::before {
|
|
218
222
|
content: '';
|
|
@@ -236,27 +240,6 @@
|
|
|
236
240
|
--xh-_editable-trigger-glyph: var(--xh-glyph-mark-close);
|
|
237
241
|
}
|
|
238
242
|
|
|
239
|
-
/* 动作组第一颗与内容段之间只有一道短分隔线;确认与取消之间不再拼第二个按钮框。
|
|
240
|
-
线不画在钮的边框上:边框会跟着钮的圆角与悬停底走,而这道线要独立于钮的各态,长度也短于钮自己。
|
|
241
|
-
::before 已被兜底字形占着,::after 在粗指针下是家族给的 44px 热区,几何只能落在
|
|
242
|
-
background-image 上:一条 1px × 半高的渐变贴在逻辑起始侧,底色换态时它仍叠在上层。
|
|
243
|
-
background-position 是物理轴,RTL 另给一条换边 */
|
|
244
|
-
.xh-scope-editable[data-part='edit-trigger'],
|
|
245
|
-
.xh-scope-editable[data-part='submit-trigger'] {
|
|
246
|
-
background-image: linear-gradient(
|
|
247
|
-
var(--xh-editable-trigger-divider, var(--xh-material-soft-separator)),
|
|
248
|
-
var(--xh-editable-trigger-divider, var(--xh-material-soft-separator))
|
|
249
|
-
);
|
|
250
|
-
background-repeat: no-repeat;
|
|
251
|
-
background-position: 0 50%;
|
|
252
|
-
background-size: var(--xh-stroke-thin) var(--xh-editable-trigger-divider-h, var(--xh-_editable-divider-h));
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
[dir='rtl'] .xh-scope-editable[data-part='edit-trigger'],
|
|
256
|
-
[dir='rtl'] .xh-scope-editable[data-part='submit-trigger'] {
|
|
257
|
-
background-position: 100% 50%;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
243
|
/* 三颗按钮按形态轮流收起,连接层给的是 hidden 属性;
|
|
261
244
|
家族那条 display 已把 UA 规则盖掉,少了这里三条按钮就一直杵着 */
|
|
262
245
|
.xh-scope-editable[data-part='edit-trigger'][hidden],
|
|
@@ -265,15 +248,6 @@
|
|
|
265
248
|
display: none;
|
|
266
249
|
}
|
|
267
250
|
|
|
268
|
-
/* 高对比档整层丢弃 background-image,分隔线改用系统色重画,并关掉这两颗钮的强制换色 */
|
|
269
|
-
@media (forced-colors: active) {
|
|
270
|
-
.xh-scope-editable[data-part='edit-trigger'],
|
|
271
|
-
.xh-scope-editable[data-part='submit-trigger'] {
|
|
272
|
-
background-image: linear-gradient(ButtonText, ButtonText);
|
|
273
|
-
forced-color-adjust: none;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
251
|
@media (forced-colors: active) {
|
|
278
252
|
/* 兜底字形是 mask 挖出来的一块底色,这一档里底色被系统换成 Canvas,字形跟着消失。
|
|
279
253
|
字形退出强制换色、直接写系统色(不能取 currentColor:退出强制换色的伪元素读到的是被系统换掉之前的作者色):
|