@xihan-ui/styles 1.0.0-alpha.2 → 1.0.0-alpha.3
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 +447 -0
- package/README.md +1 -1
- package/css/accordion.css +56 -5
- package/css/alert.css +30 -5
- package/css/anchor.css +7 -7
- package/css/avatar-group.css +3 -3
- package/css/avatar.css +3 -3
- package/css/back-top.css +16 -1
- package/css/badge.css +16 -2
- package/css/breadcrumb.css +24 -4
- package/css/button-group.css +14 -13
- package/css/button.css +42 -11
- package/css/calendar.css +119 -2
- package/css/card.css +5 -5
- package/css/carousel.css +36 -5
- package/css/cascader.css +183 -102
- package/css/checkbox-group.css +41 -19
- package/css/checkbox.css +54 -8
- package/css/clipboard.css +2 -1
- package/css/code-block.css +12 -7
- package/css/collapsible.css +42 -2
- package/css/color-picker.css +111 -45
- package/css/combobox.css +114 -53
- package/css/composer.css +5 -3
- package/css/context-menu.css +97 -69
- package/css/date-field.css +91 -14
- package/css/date-picker.css +276 -65
- package/css/descriptions.css +2 -2
- package/css/dialog.css +40 -13
- package/css/download-trigger.css +76 -0
- package/css/drawer.css +45 -14
- package/css/dynamic-input.css +68 -17
- package/css/editable.css +12 -10
- package/css/ellipsis.css +1 -1
- package/css/empty-state.css +7 -7
- package/css/field.css +9 -6
- package/css/fieldset.css +69 -0
- package/css/file-upload.css +45 -7
- package/css/float-button.css +16 -1
- package/css/floating-panel.css +310 -0
- package/css/form.css +4 -4
- package/css/heatmap.css +410 -0
- package/css/highlight.css +1 -1
- package/css/hotkeys.css +90 -0
- package/css/hover-card.css +40 -45
- package/css/image-cropper.css +231 -0
- package/css/image-viewer.css +137 -12
- package/css/image.css +2 -2
- package/css/infinite-scroll.css +1 -1
- package/css/json-viewer.css +241 -0
- package/css/layout.css +6 -10
- package/css/list.css +8 -8
- package/css/listbox.css +20 -4
- package/css/loading-bar.css +7 -1
- package/css/log.css +1 -1
- package/css/marquee.css +9 -0
- package/css/masonry.css +63 -0
- package/css/mention.css +87 -33
- package/css/menu.css +113 -47
- package/css/menubar.css +146 -60
- package/css/navigation-menu.css +54 -29
- package/css/number-animation.css +3 -3
- package/css/number-field.css +173 -16
- package/css/overlay-arrow.css +51 -0
- package/css/page-header.css +5 -5
- package/css/pagination.css +13 -13
- package/css/password-input.css +356 -0
- package/css/pin-input.css +13 -10
- package/css/popconfirm.css +46 -10
- package/css/popover.css +70 -45
- package/css/popselect.css +183 -53
- package/css/progress.css +47 -7
- package/css/qr-code.css +1 -1
- package/css/radio-group.css +14 -8
- package/css/rating.css +2 -2
- package/css/reset.css +17 -0
- package/css/result.css +6 -6
- package/css/scroll-area.css +61 -89
- package/css/scrollbar.css +167 -0
- package/css/segmented.css +215 -0
- package/css/select.css +274 -125
- package/css/separator.css +2 -2
- package/css/side-nav.css +111 -19
- package/css/signature-pad.css +144 -0
- package/css/skeleton.css +7 -1
- package/css/slider.css +10 -10
- package/css/space.css +117 -0
- package/css/spinner.css +22 -10
- package/css/statistic.css +9 -9
- package/css/steps.css +25 -8
- package/css/switch.css +48 -6
- package/css/table.css +131 -37
- package/css/tabs.css +4 -4
- package/css/tag.css +177 -0
- package/css/tags-input.css +78 -40
- package/css/text-field.css +149 -36
- package/css/thread.css +1 -1
- package/css/time-field.css +97 -16
- package/css/time-picker.css +259 -69
- package/css/timeline.css +10 -10
- package/css/timer.css +119 -0
- package/css/toast.css +34 -10
- package/css/toaster.css +1 -1
- package/css/toggle.css +6 -6
- package/css/tone.css +10 -5
- package/css/toolbar.css +1 -1
- package/css/tooltip.css +36 -33
- package/css/tour.css +103 -58
- package/css/transfer.css +68 -17
- package/css/tree-select.css +185 -84
- package/css/tree.css +85 -1
- package/css/typography.css +4 -4
- package/css/undefined.css +11 -1
- package/css/virtualizer.css +3 -1
- package/css/watermark.css +1 -2
- package/index.css +17 -0
- package/index.unlayered.css +8659 -2799
- package/package.json +19 -3
package/css/date-picker.css
CHANGED
|
@@ -4,13 +4,104 @@
|
|
|
4
4
|
--xh-date-picker-skin: 1;
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
+
/* 坐标由定位引擎写进 style(inset-inline-start / inset-block-start),这里只定位模式与层级 */
|
|
8
|
+
[data-scope='date-picker'][data-part='positioner'] {
|
|
9
|
+
/* 落定那一侧的可用高度,由定位引擎经内联自定义属性写进来,内容层继承它限高;
|
|
10
|
+
引擎没算(尚未落位 / 无引擎 / 贴边归零)时不额外限高 */
|
|
11
|
+
--xh-_date-picker-available-h: 100vh;
|
|
12
|
+
|
|
13
|
+
position: fixed;
|
|
14
|
+
z-index: var(--xh-date-picker-layer, var(--xh-layer-popover));
|
|
15
|
+
/* 空壳不吃指针,交互只发生在 content 里 */
|
|
16
|
+
pointer-events: none;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* 锚点被滚出可视区:整个浮层随之收起 */
|
|
20
|
+
[data-scope='date-picker'][data-part='positioner'][data-hidden] {
|
|
21
|
+
visibility: hidden;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* 私有槽同时声明在根与 positioner 上:浮层被搬到 portal 落点,不是根的后代,继承不过去 */
|
|
25
|
+
[data-scope='date-picker']:is([data-part='root'], [data-part='positioner']) {
|
|
26
|
+
/* 尺寸档只换这几个私有槽,标题、输入行与浮层里的部件都从这两处继承它们,
|
|
27
|
+
换档不必给每个部件各写一条选择器 */
|
|
28
|
+
--xh-_date-picker-control-h: var(--xh-control-h-md);
|
|
29
|
+
--xh-_date-picker-control-px: var(--xh-control-px-md);
|
|
30
|
+
--xh-_date-picker-gap: var(--xh-control-gap-md);
|
|
31
|
+
--xh-_date-picker-font-size: var(--xh-text-body-size);
|
|
32
|
+
--xh-_date-picker-label-font-size: var(--xh-text-label-size);
|
|
33
|
+
|
|
34
|
+
/* 形态档只换这三个私有槽:底色与两档描边 */
|
|
35
|
+
--xh-_date-picker-control-bg: var(--xh-bg-canvas);
|
|
36
|
+
--xh-_date-picker-control-border: var(--xh-border-control);
|
|
37
|
+
--xh-_date-picker-control-border-hover: var(--xh-border-control-hover);
|
|
38
|
+
|
|
39
|
+
/* 聚焦环、时间列选中与确认按钮随语气走。没写 data-tone 时这几个 --xh-_tone* 没被声明,
|
|
40
|
+
退回原来的焦点色与品牌色 */
|
|
41
|
+
--xh-_date-picker-ring: var(--xh-ring-focus);
|
|
42
|
+
--xh-_date-picker-accent: var(--xh-_tone, var(--xh-bg-brand));
|
|
43
|
+
--xh-_date-picker-accent-hover: var(--xh-_tone-hover, var(--xh-bg-brand-hover));
|
|
44
|
+
--xh-_date-picker-accent-fg: var(--xh-_tone-on, var(--xh-fg-on-brand));
|
|
45
|
+
--xh-_date-picker-accent-subtle: var(--xh-_tone-subtle, var(--xh-bg-brand-subtle));
|
|
46
|
+
/* 淡底上的字与实心底上的字是两档:--xh-_tone-fg 是语气层为淡底配的那一档,
|
|
47
|
+
没写 data-tone 时退到 fg-brand-strong——fg-brand(600)压在 brand-100 上只有 4.21 */
|
|
48
|
+
--xh-_date-picker-accent-subtle-fg: var(--xh-_tone-fg, var(--xh-fg-brand-strong));
|
|
49
|
+
}
|
|
50
|
+
|
|
7
51
|
/* 与文本框、分段日期同一套堆叠:标签一行、输入行一行 */
|
|
8
52
|
[data-scope='date-picker'][data-part='root'] {
|
|
53
|
+
/* 作者塞进指示符槽的图标跟着字号走,与皮肤画的兜底字形同一把尺 */
|
|
54
|
+
--xh-icon-size: var(--xh-date-picker-icon-size, var(--xh-glyph-size-md));
|
|
55
|
+
|
|
9
56
|
display: inline-flex;
|
|
10
57
|
flex-direction: column;
|
|
11
58
|
gap: var(--xh-date-picker-gap, var(--xh-space-1));
|
|
12
59
|
}
|
|
13
60
|
|
|
61
|
+
/* —— 尺寸 —— */
|
|
62
|
+
/* 缺省档写在上面的基础规则里 */
|
|
63
|
+
[data-scope='date-picker']:is([data-part='root'], [data-part='positioner'])[data-size='sm'] {
|
|
64
|
+
--xh-icon-size: var(--xh-date-picker-icon-size, var(--xh-glyph-size-sm));
|
|
65
|
+
--xh-_date-picker-control-h: var(--xh-control-h-sm);
|
|
66
|
+
--xh-_date-picker-control-px: var(--xh-control-px-sm);
|
|
67
|
+
--xh-_date-picker-gap: var(--xh-control-gap-sm);
|
|
68
|
+
--xh-_date-picker-font-size: var(--xh-control-font-sm);
|
|
69
|
+
--xh-_date-picker-label-font-size: var(--xh-control-font-sm);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
[data-scope='date-picker']:is([data-part='root'], [data-part='positioner'])[data-size='lg'] {
|
|
73
|
+
--xh-icon-size: var(--xh-date-picker-icon-size, var(--xh-glyph-size-lg));
|
|
74
|
+
--xh-_date-picker-control-h: var(--xh-control-h-lg);
|
|
75
|
+
--xh-_date-picker-control-px: var(--xh-control-px-lg);
|
|
76
|
+
--xh-_date-picker-gap: var(--xh-control-gap-lg);
|
|
77
|
+
--xh-_date-picker-font-size: var(--xh-control-font-lg);
|
|
78
|
+
--xh-_date-picker-label-font-size: var(--xh-control-font-lg);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* —— 形态 —— */
|
|
82
|
+
/* 输入类不做实心档:填满一个要往里打字的框,字与底就没法同时读。
|
|
83
|
+
形态只决定底与描边怎么画,用哪族颜色由 data-tone 决定 */
|
|
84
|
+
[data-scope='date-picker']:is([data-part='root'], [data-part='positioner'])[data-variant='outline'] {
|
|
85
|
+
--xh-_date-picker-control-bg: var(--xh-bg-canvas);
|
|
86
|
+
--xh-_date-picker-control-border: var(--xh-border-control);
|
|
87
|
+
--xh-_date-picker-control-border-hover: var(--xh-border-control-hover);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* 填充式:底色顶替描边表达边界。描边只退成透明而不去掉,1px 的位置留着,
|
|
91
|
+
与 outline 档并排时基线对得上、聚焦画描边也不引起跳动 */
|
|
92
|
+
[data-scope='date-picker']:is([data-part='root'], [data-part='positioner'])[data-variant='subtle'] {
|
|
93
|
+
--xh-_date-picker-control-bg: var(--xh-_tone-subtle, var(--xh-bg-subtle));
|
|
94
|
+
--xh-_date-picker-control-border: transparent;
|
|
95
|
+
--xh-_date-picker-control-border-hover: var(--xh-_tone-border, var(--xh-border-control-hover));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* 无框:底与常态描边透明,悬停与聚焦浮出描边 */
|
|
99
|
+
[data-scope='date-picker']:is([data-part='root'], [data-part='positioner'])[data-variant='ghost'] {
|
|
100
|
+
--xh-_date-picker-control-bg: transparent;
|
|
101
|
+
--xh-_date-picker-control-border: transparent;
|
|
102
|
+
--xh-_date-picker-control-border-hover: var(--xh-_tone-border, var(--xh-border-control-hover));
|
|
103
|
+
}
|
|
104
|
+
|
|
14
105
|
/* 只要声明了 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去 */
|
|
15
106
|
[data-scope='date-picker'][data-part='root'][hidden] {
|
|
16
107
|
display: none;
|
|
@@ -18,11 +109,9 @@
|
|
|
18
109
|
|
|
19
110
|
[data-scope='date-picker'][data-part='label'] {
|
|
20
111
|
color: var(--xh-date-picker-label-fg, var(--xh-fg-default));
|
|
21
|
-
font-size: var(--xh-date-picker-label-font-size, var(--xh-
|
|
112
|
+
font-size: var(--xh-date-picker-label-font-size, var(--xh-_date-picker-label-font-size));
|
|
22
113
|
font-weight: var(--xh-date-picker-label-font-weight, var(--xh-text-label-weight));
|
|
23
114
|
line-height: var(--xh-leading-none);
|
|
24
|
-
/* 点标题会把焦点送进首段,指针得说明这件事 */
|
|
25
|
-
cursor: default;
|
|
26
115
|
}
|
|
27
116
|
|
|
28
117
|
[data-scope='date-picker'][data-part='label'][hidden] {
|
|
@@ -39,14 +128,14 @@
|
|
|
39
128
|
[data-scope='date-picker'][data-part='control'] {
|
|
40
129
|
display: inline-flex;
|
|
41
130
|
align-items: center;
|
|
42
|
-
gap: var(--xh-date-picker-control-gap, var(--xh-
|
|
43
|
-
min-inline-size: var(--xh-date-picker-control-min-w, var(--xh-
|
|
44
|
-
block-size: var(--xh-date-picker-control-h, var(--xh-control-h
|
|
45
|
-
padding-inline: var(--xh-date-picker-control-px, var(--xh-control-px
|
|
131
|
+
gap: var(--xh-date-picker-control-gap, var(--xh-_date-picker-gap));
|
|
132
|
+
min-inline-size: var(--xh-date-picker-control-min-w, var(--xh-control-min-w));
|
|
133
|
+
block-size: var(--xh-date-picker-control-h, var(--xh-_date-picker-control-h));
|
|
134
|
+
padding-inline: var(--xh-date-picker-control-px, var(--xh-_date-picker-control-px));
|
|
46
135
|
padding-block: 0;
|
|
47
|
-
border: var(--xh-stroke-thin) solid var(--xh-date-picker-control-border, var(--xh-
|
|
136
|
+
border: var(--xh-stroke-thin) solid var(--xh-date-picker-control-border, var(--xh-_date-picker-control-border));
|
|
48
137
|
border-radius: var(--xh-date-picker-control-radius, var(--xh-shape-control));
|
|
49
|
-
background: var(--xh-date-picker-control-bg, var(--xh-bg
|
|
138
|
+
background: var(--xh-date-picker-control-bg, var(--xh-_date-picker-control-bg));
|
|
50
139
|
color: var(--xh-date-picker-control-fg, var(--xh-fg-default));
|
|
51
140
|
transition: border-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
52
141
|
}
|
|
@@ -57,19 +146,22 @@
|
|
|
57
146
|
|
|
58
147
|
/* hover 只在中性态换描边:invalid 正拿边框颜色说事,被 hover 盖掉那条信息就没了 */
|
|
59
148
|
[data-scope='date-picker'][data-part='control']:hover:not([data-disabled], [data-invalid]) {
|
|
60
|
-
border-color: var(--xh-date-picker-control-border-hover, var(--xh-
|
|
149
|
+
border-color: var(--xh-date-picker-control-border-hover, var(--xh-_date-picker-control-border-hover));
|
|
61
150
|
}
|
|
62
151
|
|
|
63
152
|
/* 焦点落在某一段或某个按钮上,而边框长在 control 上:焦点环得由内向外借一层。
|
|
64
153
|
control 自己不占 Tab 位,:focus-within 是它唯一能感知组内焦点的方式 */
|
|
65
|
-
[data-scope='date-picker'][data-part='control']:focus-within {
|
|
66
|
-
border-color: var(--xh-date-picker-control-border-focus, var(--xh-
|
|
67
|
-
outline: var(--xh-ring-width) solid var(--xh-ring
|
|
154
|
+
[data-scope='date-picker'][data-part='control']:focus-within:not([data-disabled]) {
|
|
155
|
+
border-color: var(--xh-date-picker-control-border-focus, var(--xh-_tone, var(--xh-border-control-focus)));
|
|
156
|
+
outline: var(--xh-ring-width) solid var(--xh-_date-picker-ring);
|
|
68
157
|
outline-offset: var(--xh-ring-offset);
|
|
69
158
|
}
|
|
70
159
|
|
|
71
160
|
[data-scope='date-picker'][data-part='control'][data-invalid] {
|
|
72
|
-
border-color: var(--xh-date-picker-control-border-invalid, var(--xh-
|
|
161
|
+
border-color: var(--xh-date-picker-control-border-invalid, var(--xh-border-invalid));
|
|
162
|
+
|
|
163
|
+
/* 校验失败时环也跟着变红:两圈等宽相邻却一红一蓝,读的人不知道哪个才是当前状态 */
|
|
164
|
+
--xh-_date-picker-ring: var(--xh-ring-invalid);
|
|
73
165
|
}
|
|
74
166
|
|
|
75
167
|
/* 只读仍可聚焦、日历仍能展开来看,不置灰,只把底色压下去表示"改不动" */
|
|
@@ -83,27 +175,27 @@
|
|
|
83
175
|
cursor: not-allowed;
|
|
84
176
|
}
|
|
85
177
|
|
|
86
|
-
/*
|
|
87
|
-
|
|
88
|
-
[data-scope='date-picker'][data-part='
|
|
178
|
+
/* 段位与作者写在段间的分隔符都在这一层里:段位自己那身皮由 date-field 那份样式负责
|
|
179
|
+
(它们戴的是那一份解剖的标记),这里只管把一排段位横过来、占满输入行剩下的宽度 */
|
|
180
|
+
[data-scope='date-picker'][data-part='segment-group'] {
|
|
89
181
|
display: inline-flex;
|
|
90
|
-
flex: 1;
|
|
182
|
+
flex: 1 1 auto;
|
|
91
183
|
align-items: center;
|
|
92
184
|
min-inline-size: 0;
|
|
93
185
|
block-size: 100%;
|
|
94
186
|
color: inherit;
|
|
95
187
|
/* 表单控件不继承页面字体,只给字号会让段位用 UA 默认字族,与周围文本对不上 */
|
|
96
188
|
font-family: inherit;
|
|
97
|
-
font-size: var(--xh-date-picker-font-size, var(--xh-
|
|
189
|
+
font-size: var(--xh-date-picker-font-size, var(--xh-_date-picker-font-size));
|
|
98
190
|
line-height: var(--xh-leading-none);
|
|
99
191
|
}
|
|
100
192
|
|
|
101
|
-
[data-scope='date-picker'][data-part='
|
|
193
|
+
[data-scope='date-picker'][data-part='segment-group'][hidden] {
|
|
102
194
|
display: none;
|
|
103
195
|
}
|
|
104
196
|
|
|
105
197
|
/* 容器自己不占 Tab 位、也不承载焦点,环由 control 画,这里不再套一圈 */
|
|
106
|
-
[data-scope='date-picker'][data-part='
|
|
198
|
+
[data-scope='date-picker'][data-part='segment-group']:focus-visible {
|
|
107
199
|
outline: none;
|
|
108
200
|
}
|
|
109
201
|
|
|
@@ -122,77 +214,74 @@
|
|
|
122
214
|
background: var(--xh-date-picker-action-bg, transparent);
|
|
123
215
|
color: var(--xh-date-picker-action-fg, var(--xh-fg-muted));
|
|
124
216
|
font-family: inherit;
|
|
125
|
-
font-size: var(--xh-date-picker-action-font-size, var(--xh-
|
|
217
|
+
font-size: var(--xh-date-picker-action-font-size, var(--xh-text-secondary-size));
|
|
126
218
|
line-height: var(--xh-leading-none);
|
|
127
219
|
cursor: pointer;
|
|
128
220
|
user-select: none;
|
|
129
|
-
transition: background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
221
|
+
transition: background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter), scale var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
130
222
|
}
|
|
131
223
|
|
|
224
|
+
|
|
132
225
|
[data-scope='date-picker'][data-part='trigger'][hidden],
|
|
133
226
|
[data-scope='date-picker'][data-part='clear-trigger'][hidden] {
|
|
134
227
|
display: none;
|
|
135
228
|
}
|
|
136
229
|
|
|
137
230
|
[data-scope='date-picker'][data-part='trigger']:hover:not(:disabled),
|
|
138
|
-
[data-scope='date-picker'][data-part='clear-trigger']:hover
|
|
231
|
+
[data-scope='date-picker'][data-part='clear-trigger']:hover {
|
|
139
232
|
background: var(--xh-date-picker-action-bg-hover, var(--xh-bg-subtle-hover));
|
|
140
233
|
color: var(--xh-date-picker-action-fg-hover, var(--xh-fg-default));
|
|
141
234
|
}
|
|
142
235
|
|
|
143
|
-
[data-scope='date-picker'][data-part='trigger']:active:not(:disabled)
|
|
144
|
-
[data-scope='date-picker'][data-part='clear-trigger']:active:not(:disabled) {
|
|
236
|
+
[data-scope='date-picker'][data-part='trigger']:active:not(:disabled) {
|
|
145
237
|
background: var(--xh-date-picker-action-bg-active, var(--xh-bg-subtle-active));
|
|
146
238
|
}
|
|
147
239
|
|
|
240
|
+
[data-scope='date-picker'][data-part='clear-trigger']:active {
|
|
241
|
+
background: var(--xh-date-picker-action-bg-active, var(--xh-bg-subtle-active));
|
|
242
|
+
scale: var(--xh-motion-scale-press);
|
|
243
|
+
}
|
|
244
|
+
|
|
148
245
|
/* 展开时按钮压一层底色,与浮层的存在互相印证 */
|
|
149
246
|
[data-scope='date-picker'][data-part='trigger'][data-state='open'] {
|
|
150
247
|
background: var(--xh-date-picker-action-bg-active, var(--xh-bg-subtle-active));
|
|
151
248
|
color: var(--xh-date-picker-action-fg-hover, var(--xh-fg-default));
|
|
152
249
|
}
|
|
153
250
|
|
|
154
|
-
/*
|
|
155
|
-
|
|
251
|
+
/* 清空按钮不占 Tab 位(tabindex=-1),这条是给程序化聚焦兜底:落焦时得看得见。
|
|
252
|
+
展开钮是常规 Tab 停靠点,它落焦时环由盒的 :focus-within 画,这里不再套一圈 */
|
|
156
253
|
[data-scope='date-picker'][data-part='clear-trigger']:focus-visible {
|
|
157
|
-
outline: var(--xh-ring-width) solid var(--xh-ring
|
|
254
|
+
outline: var(--xh-ring-width) solid var(--xh-_date-picker-ring);
|
|
158
255
|
outline-offset: var(--xh-ring-offset);
|
|
159
256
|
}
|
|
160
257
|
|
|
161
|
-
[data-scope='date-picker'][data-part='trigger']:disabled
|
|
162
|
-
[data-scope='date-picker'][data-part='clear-trigger']:disabled {
|
|
258
|
+
[data-scope='date-picker'][data-part='trigger']:disabled {
|
|
163
259
|
background: var(--xh-date-picker-action-bg, transparent);
|
|
164
260
|
color: var(--xh-fg-disabled);
|
|
165
261
|
cursor: not-allowed;
|
|
166
262
|
}
|
|
167
263
|
|
|
168
|
-
/* 坐标由定位引擎写进 style(inset-inline-start / inset-block-start),这里只定位模式与层级 */
|
|
169
|
-
[data-scope='date-picker'][data-part='positioner'] {
|
|
170
|
-
position: fixed;
|
|
171
|
-
z-index: var(--xh-layer-popover);
|
|
172
|
-
/* 空壳不吃指针,交互只发生在 content 里 */
|
|
173
|
-
pointer-events: none;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/* 锚点被滚出可视区:整个浮层随之收起 */
|
|
177
|
-
[data-scope='date-picker'][data-part='positioner'][data-hidden] {
|
|
178
|
-
visibility: hidden;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
264
|
[data-scope='date-picker'][data-part='content'] {
|
|
182
265
|
display: block;
|
|
183
|
-
padding: var(--xh-date-picker-content-
|
|
266
|
+
padding-block: var(--xh-date-picker-content-py, var(--xh-space-3));
|
|
267
|
+
padding-inline: var(--xh-date-picker-content-px, var(--xh-space-3));
|
|
184
268
|
border: var(--xh-stroke-thin) solid var(--xh-date-picker-content-border, var(--xh-border-default));
|
|
185
269
|
border-radius: var(--xh-date-picker-content-radius, var(--xh-shape-surface));
|
|
186
270
|
background: var(--xh-date-picker-content-bg, var(--xh-bg-surface));
|
|
187
271
|
color: var(--xh-date-picker-content-fg, var(--xh-fg-default));
|
|
188
|
-
|
|
272
|
+
/* 日历是定高结构:六行日期加表头本来就有固定高度,上限走页内滚动面那一档;
|
|
273
|
+
可用高度是定位引擎算出的视口余量,视口真放不下时再收一截 */
|
|
274
|
+
max-block-size: min(var(--xh-date-picker-max-h, var(--xh-viewport-h-lg)), var(--xh-_date-picker-available-h));
|
|
275
|
+
overflow-y: auto;
|
|
276
|
+
box-shadow: var(--xh-date-picker-content-shadow, var(--xh-elevation-floating));
|
|
189
277
|
pointer-events: auto;
|
|
190
278
|
}
|
|
191
279
|
|
|
192
|
-
/*
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
280
|
+
/* 这里刻意没有 [data-part='content'][hidden] { display: none },与 dialog 一致:
|
|
281
|
+
收起态连接层会给 content 打 hidden,而上面那条 display 正是要盖掉 UA 的
|
|
282
|
+
[hidden]{display:none}——退场动画得先能播。presence 读的是 content 的 animationName,
|
|
283
|
+
真正的收起由宿主在退场结束后落成内联 display:none(Vue 那边直接不渲染)。
|
|
284
|
+
其余声明了 display 的角色节点仍补 [hidden],那几处没有退场动画。 */
|
|
196
285
|
|
|
197
286
|
/* 浮层壳不承载焦点(焦点直接落到聚焦日那一格),但它写着 tabindex=-1,
|
|
198
287
|
程序化落焦时不该再画一圈环 */
|
|
@@ -201,12 +290,42 @@
|
|
|
201
290
|
}
|
|
202
291
|
|
|
203
292
|
[data-scope='date-picker'][data-part='content'][data-state='open'] {
|
|
204
|
-
animation: xh-
|
|
293
|
+
animation: xh-pop-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/* 退场:收起那一帧 hidden 由退场闸门押后,这里才播得出来。forwards 把末态钉住,
|
|
297
|
+
免得动画结束到真收起之间闪一下原样 */
|
|
298
|
+
[data-scope='date-picker'][data-part='content'][data-state='closed'] {
|
|
299
|
+
animation: xh-pop-out var(--xh-motion-duration-exit) var(--xh-motion-ease-exit) forwards;
|
|
205
300
|
}
|
|
206
301
|
|
|
207
302
|
/* 内嵌日历的挂载点同时充当日历的根节点:日历那份样式的 root 规则落在
|
|
208
303
|
[data-scope='calendar'][data-part='root'] 上,而这里没有那个节点,
|
|
209
304
|
所以网格外层该有的排布得在这儿补齐(网格内部的皮仍归 calendar 那一份) */
|
|
305
|
+
/* 真的摆了两张日历才横过来。写成 :has 而不是无条件 flex 行:
|
|
306
|
+
showTime 那套结构里 content 直属子节点是作者自己的包裹块与确认行,
|
|
307
|
+
无条件横排会把它们并到日历旁边去。
|
|
308
|
+
不加 :not([hidden]):content 收起态带 hidden 但仍在播退场动画,
|
|
309
|
+
排除掉会让它在那几帧退回 block、两张日历竖着堆一下 */
|
|
310
|
+
[data-scope='date-picker'][data-part='content']:has(> [data-part='calendar'] + [data-part='calendar']) {
|
|
311
|
+
display: flex;
|
|
312
|
+
align-items: flex-start;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/* 快捷选项列摆在日历的行内起始一侧,同样只在它真在场时才横过来。
|
|
316
|
+
与上一条同理:不加 :not([hidden]),退场那几帧塌回 block 会让两块竖着堆一下 */
|
|
317
|
+
[data-scope='date-picker'][data-part='content']:has(> [data-part='presets']) {
|
|
318
|
+
display: flex;
|
|
319
|
+
align-items: stretch;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/* 第二个起的面板画一道左分隔线:两张网格挨着排时要有条界,
|
|
323
|
+
否则 8 月末与 9 月初那两列看着像同一张表 */
|
|
324
|
+
[data-scope='date-picker'][data-part='calendar'] + [data-scope='date-picker'][data-part='calendar'] {
|
|
325
|
+
padding-inline-start: var(--xh-date-picker-panel-gap, var(--xh-space-3));
|
|
326
|
+
border-inline-start: var(--xh-stroke-thin) solid var(--xh-date-picker-panel-divider, var(--xh-border-subtle));
|
|
327
|
+
}
|
|
328
|
+
|
|
210
329
|
[data-scope='date-picker'][data-part='calendar'] {
|
|
211
330
|
display: flex;
|
|
212
331
|
flex-direction: column;
|
|
@@ -219,13 +338,64 @@
|
|
|
219
338
|
display: none;
|
|
220
339
|
}
|
|
221
340
|
|
|
341
|
+
/* —— 快捷选项:一列按钮式条目,贴在日历的行内起始一侧 —— */
|
|
342
|
+
[data-scope='date-picker'][data-part='presets'] {
|
|
343
|
+
display: flex;
|
|
344
|
+
flex: none;
|
|
345
|
+
flex-direction: column;
|
|
346
|
+
gap: var(--xh-date-picker-presets-gap, var(--xh-space-0_5));
|
|
347
|
+
/* 选项多起来时这一列自己滚,不把整张面板撑高 */
|
|
348
|
+
max-block-size: var(--xh-date-picker-presets-h, var(--xh-viewport-h-sm));
|
|
349
|
+
padding: var(--xh-space-1);
|
|
350
|
+
overflow-y: auto;
|
|
351
|
+
border-inline-end: var(--xh-stroke-thin) solid var(--xh-date-picker-content-border, var(--xh-border-default));
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
[data-scope='date-picker'][data-part='presets'][hidden] {
|
|
355
|
+
display: none;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
[data-scope='date-picker'][data-part='preset'] {
|
|
359
|
+
padding-block: var(--xh-space-1);
|
|
360
|
+
padding-inline: var(--xh-space-3);
|
|
361
|
+
border-radius: var(--xh-shape-control);
|
|
362
|
+
font-size: var(--xh-text-secondary-size);
|
|
363
|
+
line-height: var(--xh-leading-normal);
|
|
364
|
+
white-space: nowrap;
|
|
365
|
+
cursor: pointer;
|
|
366
|
+
user-select: none;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/* 悬停与键盘锚点共用中性轻档,命中那一条才走品牌淡底——两档靠色相分家;禁用的不响应悬停 */
|
|
370
|
+
[data-scope='date-picker'][data-part='preset']:hover:not([data-disabled]) {
|
|
371
|
+
background: var(--xh-date-picker-preset-bg-hover, var(--xh-bg-subtle));
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
[data-scope='date-picker'][data-part='preset']:focus-visible,
|
|
375
|
+
[data-scope='date-picker'][data-part='presets']:focus-visible {
|
|
376
|
+
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
377
|
+
outline-offset: calc(-1 * var(--xh-ring-width));
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
[data-scope='date-picker'][data-part='preset'][data-state='checked'] {
|
|
381
|
+
background: var(--xh-date-picker-preset-bg-selected, var(--xh-_date-picker-accent-subtle));
|
|
382
|
+
color: var(--xh-date-picker-preset-fg-selected, var(--xh-_date-picker-accent-subtle-fg));
|
|
383
|
+
font-weight: var(--xh-font-weight-medium);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
[data-scope='date-picker'][data-part='preset'][data-disabled] {
|
|
387
|
+
color: var(--xh-date-picker-preset-fg-disabled, var(--xh-fg-disabled));
|
|
388
|
+
cursor: not-allowed;
|
|
389
|
+
}
|
|
390
|
+
|
|
222
391
|
/* —— showTime:时间列贴在日历右侧、逐列滚动,确认按钮收口 ——
|
|
223
392
|
content 是 block,作者把日历与时间列包进一行排布;列自身只管滚与选项画法 */
|
|
224
393
|
[data-scope='date-picker'][data-part='time-column'] {
|
|
225
394
|
display: flex;
|
|
226
395
|
flex-direction: column;
|
|
227
|
-
gap:
|
|
228
|
-
|
|
396
|
+
gap: var(--xh-date-picker-time-column-gap, var(--xh-space-0_5));
|
|
397
|
+
/* 几列并排:定高而不是随内容收,否则时列与分列的可选值一多一少就错位 */
|
|
398
|
+
block-size: var(--xh-date-picker-time-column-h, var(--xh-viewport-h-sm));
|
|
229
399
|
padding: var(--xh-space-1);
|
|
230
400
|
overflow-y: auto;
|
|
231
401
|
border-inline-start: var(--xh-stroke-thin) solid var(--xh-date-picker-content-border, var(--xh-border-default));
|
|
@@ -239,7 +409,7 @@
|
|
|
239
409
|
padding-block: var(--xh-space-1);
|
|
240
410
|
padding-inline: var(--xh-space-3);
|
|
241
411
|
border-radius: var(--xh-shape-control);
|
|
242
|
-
font-size: var(--xh-
|
|
412
|
+
font-size: var(--xh-text-secondary-size);
|
|
243
413
|
line-height: var(--xh-leading-normal);
|
|
244
414
|
text-align: center;
|
|
245
415
|
cursor: pointer;
|
|
@@ -250,9 +420,16 @@
|
|
|
250
420
|
background: var(--xh-date-picker-time-item-bg-hover, var(--xh-bg-subtle));
|
|
251
421
|
}
|
|
252
422
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
423
|
+
/* 键盘走到哪一格要看得见:这几列靠方向键逐格走,没有这一条就等于闭着眼挑 */
|
|
424
|
+
[data-scope='date-picker'][data-part='time-item']:focus-visible,
|
|
425
|
+
[data-scope='date-picker'][data-part='time-column']:focus-visible {
|
|
426
|
+
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
427
|
+
outline-offset: calc(-1 * var(--xh-ring-width));
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
[data-scope='date-picker'][data-part='time-item'][data-state='checked'] {
|
|
431
|
+
background: var(--xh-date-picker-time-item-bg-selected, var(--xh-_date-picker-accent-subtle));
|
|
432
|
+
color: var(--xh-date-picker-time-item-fg-selected, var(--xh-_date-picker-accent-subtle-fg));
|
|
256
433
|
font-weight: var(--xh-font-weight-medium);
|
|
257
434
|
}
|
|
258
435
|
|
|
@@ -264,37 +441,71 @@
|
|
|
264
441
|
padding-inline: var(--xh-control-px-sm);
|
|
265
442
|
border: none;
|
|
266
443
|
border-radius: var(--xh-shape-control);
|
|
267
|
-
background: var(--xh-date-picker-confirm-bg, var(--xh-
|
|
268
|
-
color: var(--xh-date-picker-confirm-fg, var(--xh-
|
|
269
|
-
font-size: var(--xh-
|
|
444
|
+
background: var(--xh-date-picker-confirm-bg, var(--xh-_date-picker-accent));
|
|
445
|
+
color: var(--xh-date-picker-confirm-fg, var(--xh-_date-picker-accent-fg));
|
|
446
|
+
font-size: var(--xh-text-secondary-size);
|
|
270
447
|
cursor: pointer;
|
|
271
448
|
}
|
|
272
449
|
|
|
273
450
|
[data-scope='date-picker'][data-part='confirm-trigger']:hover {
|
|
274
|
-
background: var(--xh-date-picker-confirm-bg-hover, var(--xh-
|
|
451
|
+
background: var(--xh-date-picker-confirm-bg-hover, var(--xh-_date-picker-accent-hover));
|
|
275
452
|
}
|
|
276
453
|
|
|
277
454
|
[data-scope='date-picker'][data-part='confirm-trigger']:focus-visible {
|
|
278
|
-
outline: var(--xh-ring-width) solid var(--xh-ring
|
|
455
|
+
outline: var(--xh-ring-width) solid var(--xh-_date-picker-ring);
|
|
279
456
|
outline-offset: var(--xh-ring-offset);
|
|
280
457
|
}
|
|
281
458
|
|
|
282
459
|
[data-scope='date-picker'][data-part='confirm-trigger'][hidden] {
|
|
283
460
|
display: none;
|
|
284
461
|
}
|
|
462
|
+
|
|
463
|
+
/* 没写内容就由皮肤画兜底字形;作者往部件里塞了自己的图形,这几条即不命中 */
|
|
464
|
+
[data-scope='date-picker'][data-part='clear-trigger']:empty::before {
|
|
465
|
+
content: '';
|
|
466
|
+
display: inline-block;
|
|
467
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
468
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
469
|
+
vertical-align: var(--xh-glyph-baseline-shift);
|
|
470
|
+
background-color: currentColor;
|
|
471
|
+
-webkit-mask: var(--xh-glyph-mark-close) center / contain no-repeat;
|
|
472
|
+
mask: var(--xh-glyph-mark-close) center / contain no-repeat;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
[data-scope='date-picker'][data-part='trigger']:empty::before {
|
|
476
|
+
content: '';
|
|
477
|
+
display: inline-block;
|
|
478
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
479
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
480
|
+
vertical-align: var(--xh-glyph-baseline-shift);
|
|
481
|
+
background-color: currentColor;
|
|
482
|
+
-webkit-mask: var(--xh-glyph-mark-chevron-down) center / contain no-repeat;
|
|
483
|
+
mask: var(--xh-glyph-mark-chevron-down) center / contain no-repeat;
|
|
484
|
+
}
|
|
285
485
|
}
|
|
286
486
|
|
|
287
487
|
@layer xihan.motion {
|
|
288
488
|
/* 浮层进场:淡入 + 轻微上浮。名字带组件前缀,不与公共关键帧抢名 */
|
|
289
|
-
@keyframes xh-
|
|
489
|
+
@keyframes xh-pop-in {
|
|
290
490
|
from {
|
|
291
491
|
opacity: 0;
|
|
292
|
-
|
|
492
|
+
scale: var(--xh-motion-scale-enter);
|
|
293
493
|
}
|
|
294
494
|
|
|
295
495
|
to {
|
|
296
496
|
opacity: 1;
|
|
297
|
-
|
|
497
|
+
scale: 1;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
@keyframes xh-pop-out {
|
|
501
|
+
from {
|
|
502
|
+
opacity: 1;
|
|
503
|
+
scale: 1;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
to {
|
|
507
|
+
opacity: 0;
|
|
508
|
+
scale: var(--xh-motion-scale-enter);
|
|
298
509
|
}
|
|
299
510
|
}
|
|
300
511
|
}
|
package/css/descriptions.css
CHANGED
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
--xh-_descriptions-gap: var(--xh-space-2);
|
|
59
59
|
--xh-_descriptions-py: var(--xh-space-1);
|
|
60
60
|
--xh-_descriptions-px: var(--xh-space-2);
|
|
61
|
-
--xh-_descriptions-font-size: var(--xh-font-
|
|
61
|
+
--xh-_descriptions-font-size: var(--xh-control-font-sm);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
[data-scope='descriptions'][data-part='root'][data-size='lg'] {
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
--xh-_descriptions-label-gap: var(--xh-space-3);
|
|
68
68
|
--xh-_descriptions-py: var(--xh-space-3);
|
|
69
69
|
--xh-_descriptions-px: var(--xh-space-4);
|
|
70
|
-
--xh-_descriptions-font-size: var(--xh-font-
|
|
70
|
+
--xh-_descriptions-font-size: var(--xh-control-font-lg);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
/* —— 每一格 —— */
|
package/css/dialog.css
CHANGED
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
[data-scope='dialog'][data-part='backdrop'] {
|
|
62
62
|
position: fixed;
|
|
63
63
|
inset: 0;
|
|
64
|
-
z-index: var(--xh-layer-modal);
|
|
64
|
+
z-index: var(--xh-dialog-backdrop-layer, var(--xh-layer-modal));
|
|
65
65
|
background: var(--xh-dialog-backdrop-bg, var(--xh-bg-overlay));
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
[data-scope='dialog'][data-part='positioner'] {
|
|
78
78
|
position: fixed;
|
|
79
79
|
inset: 0;
|
|
80
|
-
z-index: var(--xh-layer-modal);
|
|
80
|
+
z-index: var(--xh-dialog-layer, var(--xh-layer-modal));
|
|
81
81
|
display: flex;
|
|
82
82
|
align-items: center;
|
|
83
83
|
justify-content: center;
|
|
@@ -89,10 +89,13 @@
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
[data-scope='dialog'][data-part='content'] {
|
|
92
|
+
/* 作者塞进指示符槽的图标跟着字号走,与皮肤画的兜底字形同一把尺 */
|
|
93
|
+
--xh-icon-size: var(--xh-dialog-icon-size, var(--xh-glyph-size-text));
|
|
94
|
+
|
|
92
95
|
/* 尺寸档只换这一个私有槽。它声明在 content 而不是别处:dialog 的解剖里没有 root,
|
|
93
96
|
positioner 又不是必需部件,content 才是这层浮层恒在的最外层,且它会被 portal 到 body,
|
|
94
97
|
选择器只认得它自己身上那一份 data-size。 */
|
|
95
|
-
--xh-_dialog-max-w:
|
|
98
|
+
--xh-_dialog-max-w: var(--xh-overlay-sheet-w-md);
|
|
96
99
|
|
|
97
100
|
position: relative;
|
|
98
101
|
inline-size: 100%;
|
|
@@ -100,12 +103,12 @@
|
|
|
100
103
|
display: flex;
|
|
101
104
|
flex-direction: column;
|
|
102
105
|
gap: var(--xh-dialog-gap, var(--xh-stack-gap-md));
|
|
103
|
-
padding-block: var(--xh-dialog-py, var(--xh-
|
|
104
|
-
padding-inline: var(--xh-dialog-px, var(--xh-
|
|
106
|
+
padding-block: var(--xh-dialog-py, var(--xh-surface-py-md));
|
|
107
|
+
padding-inline: var(--xh-dialog-px, var(--xh-surface-px-md));
|
|
105
108
|
border-radius: var(--xh-dialog-radius, var(--xh-shape-surface));
|
|
106
109
|
background: var(--xh-dialog-bg, var(--xh-bg-surface));
|
|
107
110
|
color: var(--xh-dialog-fg, var(--xh-fg-default));
|
|
108
|
-
box-shadow: var(--xh-dialog-shadow, var(--xh-elevation-
|
|
111
|
+
box-shadow: var(--xh-dialog-shadow, var(--xh-elevation-sheet));
|
|
109
112
|
}
|
|
110
113
|
|
|
111
114
|
/* 这里刻意没有 [data-part='content'][hidden] { display: none },与 drawer 一致:
|
|
@@ -120,11 +123,11 @@
|
|
|
120
123
|
/* 只有最大宽度分档;中间档不写规则,缺省即中档。
|
|
121
124
|
宽度上限之外的一切(内边距、字号、圆角)都不随档位动:弹层的语气归里面的内容表达。 */
|
|
122
125
|
[data-scope='dialog'][data-part='content'][data-size='sm'] {
|
|
123
|
-
--xh-_dialog-max-w:
|
|
126
|
+
--xh-_dialog-max-w: var(--xh-overlay-sheet-w-sm);
|
|
124
127
|
}
|
|
125
128
|
|
|
126
129
|
[data-scope='dialog'][data-part='content'][data-size='lg'] {
|
|
127
|
-
--xh-_dialog-max-w:
|
|
130
|
+
--xh-_dialog-max-w: var(--xh-overlay-sheet-w-lg);
|
|
128
131
|
}
|
|
129
132
|
|
|
130
133
|
[data-scope='dialog'][data-part='content']:focus-visible {
|
|
@@ -156,7 +159,7 @@
|
|
|
156
159
|
否则长标题会直接钻到按钮底下。只在真有关闭按钮时让位。 */
|
|
157
160
|
[data-scope='dialog'][data-part='content']:has([data-scope='dialog'][data-part='close-trigger'])
|
|
158
161
|
[data-scope='dialog'][data-part='title'] {
|
|
159
|
-
padding-inline-end: calc(var(--xh-control-h-sm) + var(--xh-space-3));
|
|
162
|
+
padding-inline-end: calc(var(--xh-dialog-close-size, var(--xh-control-h-sm)) + var(--xh-space-3));
|
|
160
163
|
}
|
|
161
164
|
|
|
162
165
|
[data-scope='dialog'][data-part='close-trigger'] {
|
|
@@ -166,22 +169,46 @@
|
|
|
166
169
|
display: inline-flex;
|
|
167
170
|
align-items: center;
|
|
168
171
|
justify-content: center;
|
|
169
|
-
block-size: var(--xh-control-h-sm);
|
|
170
|
-
inline-size: var(--xh-control-h-sm);
|
|
172
|
+
block-size: var(--xh-dialog-close-size, var(--xh-control-h-sm));
|
|
173
|
+
inline-size: var(--xh-dialog-close-size, var(--xh-control-h-sm));
|
|
171
174
|
border: 0;
|
|
172
|
-
border-radius: var(--xh-shape-control);
|
|
175
|
+
border-radius: var(--xh-dialog-close-radius, var(--xh-shape-control));
|
|
173
176
|
background: transparent;
|
|
174
177
|
color: var(--xh-fg-muted);
|
|
175
178
|
cursor: pointer;
|
|
179
|
+
transition:
|
|
180
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
181
|
+
scale var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
[data-scope='dialog'][data-part='close-trigger'][hidden] {
|
|
185
|
+
display: none;
|
|
176
186
|
}
|
|
177
187
|
|
|
178
188
|
[data-scope='dialog'][data-part='close-trigger']:hover {
|
|
179
|
-
background: var(--xh-bg-subtle);
|
|
189
|
+
background: var(--xh-dialog-close-bg-hover, var(--xh-bg-subtle-hover));
|
|
180
190
|
color: var(--xh-fg-default);
|
|
181
191
|
}
|
|
182
192
|
|
|
193
|
+
[data-scope='dialog'][data-part='close-trigger']:active {
|
|
194
|
+
background: var(--xh-dialog-close-bg-active, var(--xh-bg-subtle-active));
|
|
195
|
+
scale: var(--xh-motion-scale-press);
|
|
196
|
+
}
|
|
197
|
+
|
|
183
198
|
[data-scope='dialog'][data-part='close-trigger']:focus-visible {
|
|
184
199
|
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
185
200
|
outline-offset: var(--xh-ring-offset);
|
|
186
201
|
}
|
|
202
|
+
|
|
203
|
+
/* 没写内容就由皮肤画兜底字形;作者往部件里塞了自己的图形,这几条即不命中 */
|
|
204
|
+
[data-scope='dialog'][data-part='close-trigger']:empty::before {
|
|
205
|
+
content: '';
|
|
206
|
+
display: inline-block;
|
|
207
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
208
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
209
|
+
vertical-align: var(--xh-glyph-baseline-shift);
|
|
210
|
+
background-color: currentColor;
|
|
211
|
+
-webkit-mask: var(--xh-glyph-mark-close) center / contain no-repeat;
|
|
212
|
+
mask: var(--xh-glyph-mark-close) center / contain no-repeat;
|
|
213
|
+
}
|
|
187
214
|
}
|