@xihan-ui/styles 1.0.0 → 2.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 +5146 -6
- package/README.md +22 -2
- package/component-tokens.d.ts +4212 -0
- package/component-tokens.js +2 -0
- package/components.tokens.json +80116 -0
- package/css/accordion.css +131 -75
- package/css/affix.css +16 -1
- package/css/alert.css +114 -67
- package/css/anchor.css +99 -27
- package/css/approval.css +461 -0
- package/css/avatar-group.css +14 -6
- package/css/avatar.css +33 -9
- package/css/back-top.css +103 -48
- package/css/badge.css +42 -14
- package/css/bar-code.css +62 -0
- package/css/breadcrumb.css +40 -21
- package/css/button-group.css +146 -24
- package/css/button.css +116 -99
- package/css/calendar-picker.css +448 -0
- package/css/calendar-range-picker.css +517 -0
- package/css/card.css +54 -77
- package/css/carousel.css +412 -68
- package/css/cascader.css +429 -246
- package/css/checkbox-group.css +225 -77
- package/css/checkbox.css +174 -37
- package/css/clipboard.css +266 -47
- package/css/code-view.css +279 -0
- package/css/collapsible.css +108 -63
- package/css/color-field.css +158 -0
- package/css/color-picker.css +172 -184
- package/css/color-slider.css +274 -0
- package/css/color-swatch-picker.css +243 -0
- package/css/color-swatch.css +35 -0
- package/css/combobox.css +267 -273
- package/css/command.css +399 -0
- package/css/context-menu.css +183 -108
- package/css/date-field.css +94 -121
- package/css/date-picker.css +486 -249
- package/css/date-range-picker.css +559 -0
- package/css/description.css +51 -0
- package/css/descriptions.css +133 -87
- package/css/dialog.css +247 -68
- package/css/diff-view.css +428 -0
- package/css/download-trigger.css +155 -46
- package/css/drawer.css +194 -111
- package/css/editable.css +172 -152
- package/css/empty-state.css +80 -11
- package/css/field-array.css +190 -0
- package/css/field.css +84 -31
- package/css/fieldset.css +51 -18
- package/css/file-upload.css +134 -36
- package/css/flex.css +20 -1
- package/css/float-button.css +238 -57
- package/css/floating-panel.css +173 -92
- package/css/focus.css +46 -0
- package/css/forced-colors.css +93 -0
- package/css/form.css +254 -77
- package/css/gradient-text.css +34 -10
- package/css/grid.css +516 -5
- package/css/heatmap.css +87 -29
- package/css/highlight.css +20 -5
- package/css/hover-card.css +97 -47
- package/css/icon-wrapper.css +15 -3
- package/css/icon.css +74 -8
- package/css/image-cropper.css +143 -29
- package/css/image-viewer.css +150 -89
- package/css/image.css +30 -1
- package/css/infinite-scroll.css +51 -1
- package/css/input-group.css +277 -0
- package/css/json-viewer.css +102 -45
- package/css/kbd.css +72 -0
- package/css/label.css +78 -0
- package/css/layers.css +5 -0
- package/css/layout.css +175 -31
- package/css/list.css +24 -3
- package/css/listbox.css +208 -67
- package/css/loading-bar.css +52 -3
- package/css/log.css +144 -9
- package/css/markdown-stream.css +149 -0
- package/css/marquee.css +27 -1
- package/css/masonry.css +7 -0
- package/css/matrix-code.css +67 -0
- package/css/mention.css +234 -152
- package/css/menu.css +180 -83
- package/css/menubar.css +204 -136
- package/css/message-feed.css +197 -0
- package/css/navigation-menu.css +144 -90
- package/css/notification.css +178 -100
- package/css/number-animation.css +7 -0
- package/css/number-field.css +120 -277
- package/css/overlay-arrow.css +12 -7
- package/css/page-header.css +99 -14
- package/css/pagination.css +175 -135
- package/css/password-input.css +222 -219
- package/css/pin-input.css +101 -67
- package/css/pointer.css +36 -0
- package/css/popconfirm.css +185 -94
- package/css/popover.css +121 -77
- package/css/progress.css +60 -12
- package/css/prompt-input.css +224 -0
- package/css/question-flow.css +513 -0
- package/css/radio-group.css +147 -30
- package/css/rating.css +193 -43
- package/css/reasoning.css +336 -0
- package/css/reset.css +84 -6
- package/css/resizable.css +237 -0
- package/css/scroll-area.css +68 -7
- package/css/scrollbar.css +47 -13
- package/css/segmented.css +94 -29
- package/css/select.css +288 -274
- package/css/separator.css +101 -1
- package/css/side-nav.css +133 -75
- package/css/signature-pad.css +74 -54
- package/css/skeleton.css +84 -11
- package/css/slider.css +132 -39
- package/css/sortable.css +198 -0
- package/css/spinner.css +126 -12
- package/css/splitter.css +29 -8
- package/css/statistic.css +55 -0
- package/css/steps.css +206 -72
- package/css/switch.css +268 -36
- package/css/table.css +695 -118
- package/css/tabs.css +604 -42
- package/css/tag-group.css +219 -0
- package/css/tag.css +118 -28
- package/css/tags-input.css +156 -274
- package/css/text-field.css +101 -249
- package/css/time-field.css +100 -128
- package/css/time-picker.css +323 -252
- package/css/time-range-picker.css +719 -0
- package/css/timeline.css +202 -68
- package/css/timer.css +56 -52
- package/css/timestamp.css +34 -0
- package/css/toast.css +373 -144
- package/css/toggle-group.css +309 -76
- package/css/toggle.css +116 -85
- package/css/tone.css +47 -0
- package/css/tool-call.css +421 -0
- package/css/toolbar.css +181 -33
- package/css/tooltip.css +107 -36
- package/css/tour.css +183 -152
- package/css/transfer.css +351 -138
- package/css/tree-select.css +323 -216
- package/css/tree.css +294 -62
- package/css/truncate.css +65 -0
- package/css/typography.css +228 -5
- package/css/undefined.css +10 -1
- package/css/virtualizer.css +9 -10
- package/css/visually-hidden.css +7 -0
- package/css/watermark.css +7 -0
- package/family/action-control.css +487 -0
- package/family/collection-item.css +721 -0
- package/family/field-chrome.css +298 -0
- package/family/motion.css +166 -0
- package/family/swatch.css +59 -0
- package/index.css +41705 -126
- package/index.unlayered.css +33692 -17339
- package/package.json +51 -17
- package/css/calendar.css +0 -367
- package/css/code-block.css +0 -91
- package/css/composer.css +0 -134
- package/css/countdown.css +0 -26
- package/css/dynamic-input.css +0 -220
- package/css/ellipsis.css +0 -52
- package/css/hotkeys.css +0 -90
- package/css/popselect.css +0 -391
- package/css/qr-code.css +0 -55
- package/css/result.css +0 -119
- package/css/space.css +0 -117
- package/css/thread.css +0 -120
- package/css/time.css +0 -25
package/css/popconfirm.css
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021-Present XiHanFun and contributors.
|
|
3
|
+
* Licensed under the MIT License. See LICENSE in the project root for license information.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* 定义 popconfirm 样式。 */
|
|
7
|
+
|
|
8
|
+
/* 共享关键帧由 family/motion.css 提供,本皮肤 @import 它,单独引入仍成立。 */
|
|
9
|
+
@import '../family/motion.css';
|
|
10
|
+
@import '../family/action-control.css';
|
|
11
|
+
|
|
1
12
|
@layer xihan.motion {
|
|
2
13
|
/* 转圈的关键帧定义在本文件里:引用别处文件的动画名时那份文件不一定在场,动画会静默不跑 */
|
|
3
14
|
@keyframes xh-popconfirm-rotate {
|
|
@@ -7,32 +18,6 @@
|
|
|
7
18
|
}
|
|
8
19
|
}
|
|
9
20
|
|
|
10
|
-
@layer xihan.motion {
|
|
11
|
-
/* 动画名的查找只认「文档里有没有这个名字」:引用别处文件里的名字,那份文件不一定在场,
|
|
12
|
-
动画会静默地整个不跑。每份皮肤都能单独引入,所以它用到的关键帧都写在自己身上。 */
|
|
13
|
-
@keyframes xh-pop-in {
|
|
14
|
-
from {
|
|
15
|
-
opacity: 0;
|
|
16
|
-
scale: var(--xh-motion-scale-enter);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
to {
|
|
20
|
-
opacity: 1;
|
|
21
|
-
scale: 1;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
@keyframes xh-pop-out {
|
|
25
|
-
from {
|
|
26
|
-
opacity: 1;
|
|
27
|
-
scale: 1;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
to {
|
|
31
|
-
opacity: 0;
|
|
32
|
-
scale: var(--xh-motion-scale-enter);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
21
|
|
|
37
22
|
@layer xihan.components {
|
|
38
23
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
@@ -45,10 +30,34 @@
|
|
|
45
30
|
display: inline-block;
|
|
46
31
|
}
|
|
47
32
|
|
|
33
|
+
/*
|
|
34
|
+
* 触发器是页面上的独立文字按钮(§9.1):盒型、md 档几何、outline 四态面、0.97 按压并换底与粗指针命中区
|
|
35
|
+
* 由家族配方按连接层投影的 data-xh-action-variant / -size 给出。皮肤没有自己的外观规则,
|
|
36
|
+
* 只把作者塞进按钮的图标接到随档字形尺(md = 20px)。
|
|
37
|
+
*/
|
|
38
|
+
[data-scope='popconfirm'][data-part='trigger'] {
|
|
39
|
+
--xh-icon-size: var(--xh-popconfirm-icon-size, var(--xh-_action-profile-glyph-size));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* 家族配方给了 display,作者手写 hidden 时得把 UA 的 [hidden]{display:none} 还回去 */
|
|
43
|
+
[data-scope='popconfirm'][data-part='trigger'][hidden] {
|
|
44
|
+
display: none;
|
|
45
|
+
}
|
|
46
|
+
|
|
48
47
|
/* 坐标由定位引擎写进 style(inset-inline-start / inset-block-start),这里只定位模式与层级 */
|
|
49
48
|
[data-scope='popconfirm'][data-part='positioner'] {
|
|
49
|
+
/* 落定那一侧的可用高度,由定位引擎经内联自定义属性写进来,面板继承它限高;
|
|
50
|
+
引擎没算(尚未落位 / 无引擎 / 贴边归零)时不额外限高 */
|
|
51
|
+
--xh-_popconfirm-available-h: 100vh;
|
|
52
|
+
/* 落定那一侧的可用宽度,同一路由定位引擎写进来,行内轴据此夹取;
|
|
53
|
+
引擎没算(尚未落位 / 无引擎 / 贴边归零)时退到视口宽 */
|
|
54
|
+
--xh-_popconfirm-available-w: 100vw;
|
|
55
|
+
|
|
56
|
+
/* 面板内容的自绘条浮在内容之上:轨道不上底色,实色轨道会在面板右缘糊一条竖灰带 */
|
|
57
|
+
--xh-scrollbar-track-bg: transparent;
|
|
58
|
+
|
|
50
59
|
position: fixed;
|
|
51
|
-
z-index: var(--xh-popconfirm-layer, var(--xh-layer-popover));
|
|
60
|
+
z-index: var(--xh-popconfirm-layer, var(--xh-_layer, var(--xh-layer-popover)));
|
|
52
61
|
/* 空壳不吃指针,交互只发生在 content 上 */
|
|
53
62
|
pointer-events: none;
|
|
54
63
|
}
|
|
@@ -58,34 +67,81 @@
|
|
|
58
67
|
visibility: hidden;
|
|
59
68
|
}
|
|
60
69
|
|
|
70
|
+
/* 缩放原点与进场位移按落定的那一侧给:面板从贴着锚点的那条边涨开、沿主轴退让一小段。
|
|
71
|
+
两个槽由 content 继承。placement 是物理方向(引擎按 top / right / bottom / left 出值),
|
|
72
|
+
origin 与 translate 也是物理量,两边同轴,不随书写方向翻 */
|
|
73
|
+
[data-scope='popconfirm'][data-part='positioner'][data-placement^='top'] {
|
|
74
|
+
--xh-_overlay-origin-y: 100%;
|
|
75
|
+
--xh-_overlay-enter-down: 1;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
[data-scope='popconfirm'][data-part='positioner'][data-placement^='bottom'] {
|
|
79
|
+
--xh-_overlay-origin-y: 0;
|
|
80
|
+
--xh-_overlay-enter-up: 1;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
[data-scope='popconfirm'][data-part='positioner'][data-placement^='left'] {
|
|
84
|
+
--xh-_overlay-origin-x: 100%;
|
|
85
|
+
--xh-_overlay-enter-right: 1;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
[data-scope='popconfirm'][data-part='positioner'][data-placement^='right'] {
|
|
89
|
+
--xh-_overlay-origin-x: 0;
|
|
90
|
+
--xh-_overlay-enter-left: 1;
|
|
91
|
+
}
|
|
92
|
+
|
|
61
93
|
/* 面板排成三列:左列吃掉剩余宽度,右两列各摆一颗按钮。
|
|
62
94
|
标题、说明与作者塞进来的内容各占一整行,两颗按钮因此并排落在最后一行的右侧。 */
|
|
63
95
|
[data-scope='popconfirm'][data-part='content'] {
|
|
64
|
-
/*
|
|
65
|
-
--xh-
|
|
66
|
-
|
|
96
|
+
/* 作者塞进面板里的图标按控件档取(§6.5);两颗动作钮另由家族配方按 sm 档下发字形尺 */
|
|
97
|
+
--xh-icon-size: var(--xh-popconfirm-icon-size, var(--xh-glyph-size-md));
|
|
98
|
+
/* 尺寸档只换这两个私有槽 */
|
|
99
|
+
--xh-_popconfirm-pad: var(--xh-surface-pad-md);
|
|
67
100
|
--xh-_popconfirm-max-w: var(--xh-overlay-max-w);
|
|
68
101
|
|
|
102
|
+
position: relative;
|
|
69
103
|
display: grid;
|
|
70
104
|
grid-template-columns: 1fr auto auto;
|
|
71
105
|
align-items: center;
|
|
72
106
|
gap: var(--xh-popconfirm-gap, var(--xh-space-2));
|
|
73
107
|
inline-size: max-content;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
108
|
+
/* 静态档与落位后的可用宽度取小:窄视口下面板伸出去,最右侧的两颗钮就点不到了 */
|
|
109
|
+
max-inline-size: min(var(--xh-popconfirm-max-w, var(--xh-_popconfirm-max-w)), var(--xh-_popconfirm-available-w));
|
|
110
|
+
/* 说明文案长度由作者给,矮视口下不限高面板会整块伸出视口且滚不到 */
|
|
111
|
+
max-block-size: min(var(--xh-popconfirm-max-h, var(--xh-overlay-max-h)), var(--xh-_popconfirm-available-h));
|
|
112
|
+
overflow-y: auto;
|
|
113
|
+
/* 浮在页面之上的 Overlay 滚动面(§6.6):滚到头不把页面一起带走 */
|
|
114
|
+
overscroll-behavior: contain;
|
|
115
|
+
padding-block: var(--xh-popconfirm-py, var(--xh-_popconfirm-pad));
|
|
116
|
+
padding-inline: var(--xh-popconfirm-px, var(--xh-_popconfirm-pad));
|
|
117
|
+
border: var(--xh-stroke-thin) solid var(--xh-popconfirm-border, var(--xh-material-frosted-border));
|
|
118
|
+
border-radius: var(--xh-popconfirm-radius, var(--xh-shape-overlay));
|
|
119
|
+
/* 与 Popover 共用 M2 配方:透明 tint 在底层,内侧一像素顶光只表达材质厚度。 */
|
|
120
|
+
background:
|
|
121
|
+
linear-gradient(
|
|
122
|
+
to bottom,
|
|
123
|
+
var(--xh-material-frosted-highlight) 0 var(--xh-stroke-thin),
|
|
124
|
+
transparent var(--xh-stroke-thin)
|
|
125
|
+
),
|
|
126
|
+
var(--xh-popconfirm-bg, var(--xh-material-frosted-bg));
|
|
127
|
+
color: var(--xh-popconfirm-fg, var(--xh-material-frosted-fg));
|
|
128
|
+
box-shadow: var(--xh-popconfirm-shadow, var(--xh-material-frosted-shadow));
|
|
129
|
+
-webkit-backdrop-filter: var(--xh-popconfirm-backdrop, var(--xh-material-frosted-backdrop));
|
|
130
|
+
backdrop-filter: var(--xh-popconfirm-backdrop, var(--xh-material-frosted-backdrop));
|
|
82
131
|
pointer-events: auto;
|
|
132
|
+
/* 进退场的缩放锚在贴着锚点的那条边上;两个分量由 positioner 按 placement 写进私有槽 */
|
|
133
|
+
transform-origin: var(--xh-_overlay-origin-x, 50%) var(--xh-_overlay-origin-y, 50%);
|
|
83
134
|
}
|
|
84
135
|
|
|
85
136
|
[data-scope='popconfirm'][data-part='content'] > * {
|
|
86
137
|
grid-column: 1 / -1;
|
|
87
138
|
}
|
|
88
139
|
|
|
140
|
+
/* 箭头绝对定位挂在 content 上,不占格:吃到栅格位的话它的贴边就从格线起算,被内衬推进面里 */
|
|
141
|
+
[data-scope='popconfirm'][data-part='content'] > [data-part='arrow'] {
|
|
142
|
+
grid-column: auto;
|
|
143
|
+
}
|
|
144
|
+
|
|
89
145
|
/* 这里刻意没有 [data-part='content'][hidden] { display: none },与 dialog 一致:
|
|
90
146
|
收起态连接层会给 content 打 hidden,而上面那条 display 正是要盖掉 UA 的
|
|
91
147
|
[hidden]{display:none}——退场动画得先能播。presence 读的是 content 的 animationName,
|
|
@@ -97,7 +153,9 @@
|
|
|
97
153
|
}
|
|
98
154
|
|
|
99
155
|
[data-scope='popconfirm'][data-part='content'][data-state='open'] {
|
|
100
|
-
animation: xh-pop-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter);
|
|
156
|
+
animation: xh-overlay-pop-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
|
|
157
|
+
/* 只在开着的这一档挂:合成层随 data-state 一起收走,收起后不再占着 */
|
|
158
|
+
will-change: opacity, scale, translate;
|
|
101
159
|
}
|
|
102
160
|
|
|
103
161
|
/* 退场:收起那一帧 hidden 由退场闸门押后,这里才播得出来。forwards 把末态钉住,
|
|
@@ -107,49 +165,66 @@
|
|
|
107
165
|
}
|
|
108
166
|
|
|
109
167
|
/* —— 尺寸 —— */
|
|
110
|
-
/* 缺省档写在 content
|
|
168
|
+
/* 缺省档写在 content 的基础规则里;四边等宽的面板内衬三档取 surface-pad 那把尺 */
|
|
111
169
|
[data-scope='popconfirm'][data-part='content'][data-size='sm'] {
|
|
112
|
-
--xh-_popconfirm-
|
|
113
|
-
--xh-_popconfirm-px: var(--xh-control-px-sm);
|
|
170
|
+
--xh-_popconfirm-pad: var(--xh-surface-pad-sm);
|
|
114
171
|
--xh-_popconfirm-max-w: var(--xh-overlay-max-w-sm);
|
|
115
172
|
}
|
|
116
173
|
|
|
117
174
|
[data-scope='popconfirm'][data-part='content'][data-size='lg'] {
|
|
118
|
-
--xh-_popconfirm-
|
|
119
|
-
--xh-_popconfirm-px: var(--xh-control-px-lg);
|
|
175
|
+
--xh-_popconfirm-pad: var(--xh-surface-pad-lg);
|
|
120
176
|
--xh-_popconfirm-max-w: var(--xh-overlay-max-w-lg);
|
|
121
177
|
}
|
|
122
178
|
|
|
123
179
|
[data-scope='popconfirm'][data-part='title'] {
|
|
124
180
|
margin: 0;
|
|
181
|
+
min-inline-size: 0;
|
|
125
182
|
font-size: var(--xh-popconfirm-title-font-size, var(--xh-text-label-size));
|
|
126
183
|
font-weight: var(--xh-popconfirm-title-font-weight, var(--xh-font-weight-semibold));
|
|
127
|
-
|
|
184
|
+
line-height: var(--xh-leading-tight);
|
|
185
|
+
overflow-wrap: anywhere;
|
|
186
|
+
color: var(--xh-popconfirm-title-fg, var(--xh-material-frosted-fg));
|
|
128
187
|
}
|
|
129
188
|
|
|
189
|
+
/* 说明文字走说明档(§6.4):13px + fg-muted */
|
|
130
190
|
[data-scope='popconfirm'][data-part='description'] {
|
|
131
191
|
margin: 0;
|
|
132
|
-
|
|
192
|
+
min-inline-size: 0;
|
|
193
|
+
font-size: var(--xh-popconfirm-description-font-size, var(--xh-text-secondary-size));
|
|
133
194
|
line-height: var(--xh-leading-normal);
|
|
195
|
+
overflow-wrap: anywhere;
|
|
134
196
|
color: var(--xh-popconfirm-description-fg, var(--xh-fg-muted));
|
|
135
197
|
}
|
|
136
198
|
|
|
137
|
-
/*
|
|
199
|
+
/* 箭头的底色与描边色,几何在 overlay-arrow.css。
|
|
200
|
+
交叉轴落点由定位引擎经内联自定义属性写进来,没给时退回居中 */
|
|
201
|
+
[data-scope='popconfirm'][data-part='arrow'] {
|
|
202
|
+
--xh-_popconfirm-arrow-x: 50%;
|
|
203
|
+
--xh-_popconfirm-arrow-y: 50%;
|
|
204
|
+
--xh-_overlay-arrow-size: var(--xh-popconfirm-arrow-size, var(--xh-overlay-arrow-size));
|
|
205
|
+
--xh-_overlay-arrow-x: var(--xh-_popconfirm-arrow-x);
|
|
206
|
+
--xh-_overlay-arrow-y: var(--xh-_popconfirm-arrow-y);
|
|
207
|
+
|
|
208
|
+
background: var(--xh-popconfirm-bg, var(--xh-material-frosted-bg));
|
|
209
|
+
border: var(--xh-stroke-thin) solid var(--xh-popconfirm-border, var(--xh-material-frosted-border));
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/*
|
|
213
|
+
* —— 两颗按钮 ——
|
|
214
|
+
* 确认与取消都是浮层末行的文字按钮(§9.1):盒型、sm 档几何、四态面、0.97 按压并换底、粗指针命中区与
|
|
215
|
+
* 强制色由家族配方按连接层投影的 data-xh-action-variant / -size 给出。这里只把公开槽桥接到矩阵之前
|
|
216
|
+
* (使用者槽 → 形态矩阵 → 家族缺省)与几何映射;内衬与圆角槽取两颗共用的 action 段。
|
|
217
|
+
*/
|
|
138
218
|
[data-scope='popconfirm'][data-part='confirm-trigger'],
|
|
139
219
|
[data-scope='popconfirm'][data-part='cancel-trigger'] {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
font-
|
|
148
|
-
font-weight: var(--xh-text-label-weight);
|
|
149
|
-
line-height: var(--xh-leading-none);
|
|
150
|
-
white-space: nowrap;
|
|
151
|
-
cursor: pointer;
|
|
152
|
-
transition: background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
220
|
+
--xh-action-padding-inline: var(--xh-popconfirm-action-px, var(--xh-_action-profile-padding-inline));
|
|
221
|
+
--xh-action-radius: var(--xh-popconfirm-action-radius, var(--xh-shape-control));
|
|
222
|
+
--xh-action-shadow-rest: var(--xh-popconfirm-action-shadow, none);
|
|
223
|
+
/* 作者塞进按钮的图标随档取字形尺(sm = 16px) */
|
|
224
|
+
--xh-icon-size: var(--xh-popconfirm-icon-size, var(--xh-_action-profile-glyph-size));
|
|
225
|
+
|
|
226
|
+
/* 动作钮的文字与 Button 同一字重(家族配方不管字重) */
|
|
227
|
+
font-weight: var(--xh-popconfirm-action-font-weight, var(--xh-text-label-weight));
|
|
153
228
|
}
|
|
154
229
|
|
|
155
230
|
/* 并排落在最后一行的右侧两格;取消在左、确认在右 */
|
|
@@ -161,18 +236,27 @@
|
|
|
161
236
|
grid-column: 3;
|
|
162
237
|
}
|
|
163
238
|
|
|
164
|
-
/*
|
|
165
|
-
|
|
239
|
+
/* 确认是实心的主操作(§7.2 第 2 条)。底色走共享语气槽:作者在 content 上写 data-tone="danger"
|
|
240
|
+
就整体换成危险色,不写则用品牌色——配方 solid 列本就读 --xh-_tone,这里只桥接使用者槽 */
|
|
166
241
|
[data-scope='popconfirm'][data-part='confirm-trigger'] {
|
|
167
|
-
|
|
168
|
-
|
|
242
|
+
--xh-action-bg-rest: var(--xh-popconfirm-confirm-bg, var(--xh-_action-variant-bg-rest));
|
|
243
|
+
--xh-action-bg-focus-visible: var(--xh-popconfirm-confirm-bg, var(--xh-_action-variant-bg-focus-visible));
|
|
244
|
+
--xh-action-bg-loading: var(--xh-popconfirm-confirm-bg, var(--xh-_action-variant-bg-loading));
|
|
245
|
+
--xh-action-fg-rest: var(--xh-popconfirm-confirm-fg, var(--xh-_action-variant-fg-rest));
|
|
246
|
+
--xh-action-fg-hover: var(--xh-popconfirm-confirm-fg, var(--xh-_action-variant-fg-hover));
|
|
247
|
+
--xh-action-fg-pressed: var(--xh-popconfirm-confirm-fg, var(--xh-_action-variant-fg-pressed));
|
|
248
|
+
--xh-action-fg-focus-visible: var(--xh-popconfirm-confirm-fg, var(--xh-_action-variant-fg-focus-visible));
|
|
249
|
+
--xh-action-fg-loading: var(--xh-popconfirm-confirm-fg, var(--xh-_action-variant-fg-loading));
|
|
250
|
+
--xh-action-shadow-rest: var(--xh-popconfirm-confirm-shadow, var(--xh-popconfirm-action-shadow, none));
|
|
169
251
|
}
|
|
170
252
|
|
|
171
|
-
/*
|
|
172
|
-
|
|
173
|
-
|
|
253
|
+
/* 面是实心的,环色与面同族,画在面里就看不出来;环改取面自己的前景色——
|
|
254
|
+
那一族色本来就要在这块面上把字读清楚,与面的对比是按可读性定的 */
|
|
255
|
+
[data-scope='popconfirm'][data-part='confirm-trigger'][data-xh-action-variant='solid']:focus-visible {
|
|
256
|
+
--xh-action-ring-color-focus-visible: currentColor;
|
|
174
257
|
}
|
|
175
258
|
|
|
259
|
+
/* 异步确认挂起:确认文案前转一枚圆环;不是禁用,焦点与对比度都保持,在途指针由家族 loading 面给 */
|
|
176
260
|
[data-scope='popconfirm'][data-part='confirm-trigger'][data-loading]::before {
|
|
177
261
|
content: '';
|
|
178
262
|
inline-size: 1em;
|
|
@@ -180,36 +264,27 @@
|
|
|
180
264
|
margin-inline-end: var(--xh-space-1);
|
|
181
265
|
border: var(--xh-stroke-thin) solid transparent;
|
|
182
266
|
border-block-start-color: currentcolor;
|
|
183
|
-
border-radius: var(--xh-shape-
|
|
184
|
-
animation: xh-popconfirm-rotate var(--xh-popconfirm-loading-duration, var(--xh-spin-duration))
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
[data-scope='popconfirm'][data-part='confirm-trigger']:hover {
|
|
188
|
-
background: var(--xh-_tone-hover, var(--xh-bg-brand-hover));
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
[data-scope='popconfirm'][data-part='confirm-trigger']:active {
|
|
192
|
-
background: var(--xh-_tone-active, var(--xh-bg-brand-active));
|
|
267
|
+
border-radius: var(--xh-shape-circle);
|
|
268
|
+
animation: xh-popconfirm-rotate var(--xh-popconfirm-loading-duration, var(--xh-spin-duration)) var(--xh-motion-ease-loop) infinite;
|
|
193
269
|
}
|
|
194
270
|
|
|
195
|
-
/*
|
|
271
|
+
/* 取消是中性的次要出口,不参与语气:content 上的 data-tone 会把 --xh-_tone-* 一路继承下来,
|
|
272
|
+
配方 outline 列的面、字与边都先读它,这里逐档钉回中性令牌——白底 / 磨砂面上走画布承载阶梯
|
|
273
|
+
悬停 --xh-bg-subtle(100)→ 按下 --xh-bg-subtle-hover(200);聚焦档 -bg-focus / -fg-focus 两槽
|
|
274
|
+
桥到配方的 focus-visible 面,缺省透明底 + 静息字色吃库环 */
|
|
196
275
|
[data-scope='popconfirm'][data-part='cancel-trigger'] {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
[data-scope='popconfirm'][data-part='confirm-trigger']:focus-visible,
|
|
210
|
-
[data-scope='popconfirm'][data-part='cancel-trigger']:focus-visible {
|
|
211
|
-
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
212
|
-
outline-offset: var(--xh-ring-offset);
|
|
276
|
+
--xh-action-bg-rest: var(--xh-popconfirm-cancel-bg, transparent);
|
|
277
|
+
--xh-action-bg-hover: var(--xh-popconfirm-cancel-bg-hover, var(--xh-bg-subtle));
|
|
278
|
+
--xh-action-bg-pressed: var(--xh-popconfirm-cancel-bg-active, var(--xh-bg-subtle-hover));
|
|
279
|
+
--xh-action-bg-focus-visible: var(--xh-popconfirm-cancel-bg-focus, var(--xh-popconfirm-cancel-bg, transparent));
|
|
280
|
+
--xh-action-fg-rest: var(--xh-popconfirm-cancel-fg, var(--xh-fg-default));
|
|
281
|
+
--xh-action-fg-hover: var(--xh-popconfirm-cancel-fg, var(--xh-fg-default));
|
|
282
|
+
--xh-action-fg-pressed: var(--xh-popconfirm-cancel-fg, var(--xh-fg-default));
|
|
283
|
+
--xh-action-fg-focus-visible: var(--xh-popconfirm-cancel-fg-focus, var(--xh-popconfirm-cancel-fg, var(--xh-fg-default)));
|
|
284
|
+
--xh-action-border-rest: var(--xh-popconfirm-cancel-border, var(--xh-border-control));
|
|
285
|
+
--xh-action-border-hover: var(--xh-popconfirm-cancel-border-hover, var(--xh-border-control-hover));
|
|
286
|
+
--xh-action-border-pressed: var(--xh-popconfirm-cancel-border-hover, var(--xh-border-control-hover));
|
|
287
|
+
--xh-action-border-focus-visible: var(--xh-popconfirm-cancel-border, var(--xh-border-control));
|
|
213
288
|
}
|
|
214
289
|
|
|
215
290
|
/* 减少动效:圆环停下并整圈换成虚线,静止的形状仍然读得出"还没好"。
|
|
@@ -228,10 +303,26 @@
|
|
|
228
303
|
animation: none;
|
|
229
304
|
}
|
|
230
305
|
|
|
306
|
+
@media (forced-colors: active) {
|
|
307
|
+
/* 系统色接管内容边界;装饰顶光在这一档没有额外信息。两颗按钮的强制色由家族配方给 */
|
|
308
|
+
[data-scope='popconfirm'][data-part='content'] {
|
|
309
|
+
background-image: none;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
231
313
|
/* 声明过任何 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去。
|
|
232
314
|
写在文件末尾:兜底必须排在该部件所有 display 声明之后 */
|
|
233
315
|
[data-scope='popconfirm'][data-part='root'][hidden],
|
|
316
|
+
[data-scope='popconfirm'][data-part='confirm-trigger'][hidden],
|
|
234
317
|
[data-scope='popconfirm'][data-part='cancel-trigger'][hidden] {
|
|
235
318
|
display: none;
|
|
236
319
|
}
|
|
320
|
+
|
|
321
|
+
@media print {
|
|
322
|
+
/* 打印:定位层与遮罩是交互期才存在的东西,落到纸上只会盖住底下的正文。
|
|
323
|
+
收起写在这份皮肤里而不是 reset:reset 层排在组件层之前,组件层里任何一条 display 都压得住它。 */
|
|
324
|
+
[data-scope='popconfirm'][data-part='positioner'] {
|
|
325
|
+
display: none;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
237
328
|
}
|