@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
|
@@ -0,0 +1,149 @@
|
|
|
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
|
+
/* 定义 markdown stream 样式。 */
|
|
7
|
+
|
|
8
|
+
@layer xihan.motion {
|
|
9
|
+
/* 光标的两段动效都定义在本文件里。皮肤可以按需单独引入,
|
|
10
|
+
引用别处文件里的动画名时那份文件不一定在场,动画会静默地整个不跑 */
|
|
11
|
+
@keyframes xh-markdown-stream-caret {
|
|
12
|
+
50% {
|
|
13
|
+
opacity: 0;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@keyframes xh-markdown-stream-caret-in {
|
|
18
|
+
from {
|
|
19
|
+
opacity: 0;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@layer xihan.components {
|
|
25
|
+
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
26
|
+
[data-scope='markdown-stream'] {
|
|
27
|
+
--xh-markdown-stream-skin: 1;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
[data-scope='markdown-stream'][data-part='root'] {
|
|
31
|
+
/* 尺寸缺省档:不写 data-size 时的取值。三档都只写这两个私有槽,
|
|
32
|
+
公开槽留在读处当首选,作者在祖先上设的覆盖才赢得过档位声明 */
|
|
33
|
+
--xh-_markdown-stream-font-size: var(--xh-text-body-size);
|
|
34
|
+
--xh-_markdown-stream-gap: var(--xh-space-3);
|
|
35
|
+
|
|
36
|
+
color: var(--xh-markdown-stream-fg, var(--xh-fg-default));
|
|
37
|
+
font-size: var(--xh-markdown-stream-font-size, var(--xh-_markdown-stream-font-size));
|
|
38
|
+
line-height: var(--xh-markdown-stream-leading, var(--xh-text-prose-leading));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* 块之间的距离由这一层给,块内部的排版归作者的正文样式 */
|
|
42
|
+
[data-scope='markdown-stream'][data-part='content'] {
|
|
43
|
+
display: flex;
|
|
44
|
+
flex-direction: column;
|
|
45
|
+
gap: var(--xh-markdown-stream-gap, var(--xh-_markdown-stream-gap));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
[data-scope='markdown-stream'][data-part='content'][hidden] {
|
|
49
|
+
display: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
[data-scope='markdown-stream'][data-part='block'] {
|
|
53
|
+
display: block;
|
|
54
|
+
min-inline-size: 0;
|
|
55
|
+
/* 块里铺的是渲染好的 Markdown,宽表格与不断行的长串由内容自己带;
|
|
56
|
+
行内一轴可横滚,这类块自己滚,不把整篇正文顶宽 */
|
|
57
|
+
overflow-x: auto;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
[data-scope='markdown-stream'][data-part='block'][hidden] {
|
|
61
|
+
display: none;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* 代码块与公式块没人接管时铺的是原文,保住换行与缩进 */
|
|
65
|
+
[data-scope='markdown-stream'][data-part='block'][data-kind='code'],
|
|
66
|
+
[data-scope='markdown-stream'][data-part='block'][data-kind='math'] {
|
|
67
|
+
font-family: var(--xh-markdown-stream-mono, var(--xh-font-family-mono));
|
|
68
|
+
white-space: pre-wrap;
|
|
69
|
+
overflow-wrap: anywhere;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* 流式光标落在带 data-caret 的那一格上:正文在长的时候是生长块的末尾,
|
|
73
|
+
一个字都还没到的时候是外壳,所以「请求已经发出去」这件事第一帧就看得见。
|
|
74
|
+
它落在块的最后一个顶层元素之后,不是最后一句话的末尾——要贴进段落里就得往已消毒的
|
|
75
|
+
html 注入节点,那会打穿「原生 HTML 一律不透传」这条约束 */
|
|
76
|
+
[data-scope='markdown-stream'][data-part='root'][data-caret]::after,
|
|
77
|
+
[data-scope='markdown-stream'][data-part='block'][data-caret]::after {
|
|
78
|
+
display: inline-block;
|
|
79
|
+
background: var(--xh-markdown-stream-caret-bg, var(--xh-fg-default));
|
|
80
|
+
border-radius: var(--xh-markdown-stream-caret-radius, var(--xh-shape-inset));
|
|
81
|
+
content: '';
|
|
82
|
+
inline-size: var(--xh-markdown-stream-caret-w, var(--xh-stroke-thick));
|
|
83
|
+
block-size: var(--xh-markdown-stream-caret-h, 1.05em);
|
|
84
|
+
margin-inline-start: var(--xh-markdown-stream-caret-gap, 0.1em);
|
|
85
|
+
vertical-align: text-bottom;
|
|
86
|
+
translate: 0 var(--xh-markdown-stream-caret-shift, -0.5px);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* 正文在长的时候光标只淡入一次然后停在实心:旁边的字每帧都在变,再闪一下只是噪声 */
|
|
90
|
+
[data-scope='markdown-stream'][data-part='block'][data-caret]::after {
|
|
91
|
+
animation: xh-markdown-stream-caret-in var(--xh-markdown-stream-caret-enter-duration, var(--xh-motion-duration-enter)) var(--xh-motion-ease-enter-strong) both;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* 还没出字的那一段页面上只有这一竖,让它闪着,等的人才分得清是在等还是卡住了 */
|
|
95
|
+
[data-scope='markdown-stream'][data-part='root'][data-caret]::after {
|
|
96
|
+
animation: xh-markdown-stream-caret var(--xh-markdown-stream-caret-duration, var(--xh-caret-duration)) steps(1, end) infinite;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/* 减少动效:等待时的光标停在实心不闪,「还在等」这件事仍然看得出来。
|
|
100
|
+
两组规则是同一件事的两个触发条件:系统偏好与作者打的 data-motion */
|
|
101
|
+
@media (prefers-reduced-motion: reduce) {
|
|
102
|
+
[data-scope='markdown-stream'][data-part='root'][data-caret]::after {
|
|
103
|
+
animation: none;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
:where([data-motion='reduce']) [data-scope='markdown-stream'][data-part='root'][data-caret]::after {
|
|
108
|
+
animation: none;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* 尺寸档只改正文字号与块间距 */
|
|
112
|
+
[data-scope='markdown-stream'][data-part='root'][data-size='sm'] {
|
|
113
|
+
--xh-_markdown-stream-font-size: var(--xh-control-font-sm);
|
|
114
|
+
--xh-_markdown-stream-gap: var(--xh-space-2);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
[data-scope='markdown-stream'][data-part='root'][data-size='md'] {
|
|
118
|
+
--xh-_markdown-stream-font-size: var(--xh-control-font-md);
|
|
119
|
+
--xh-_markdown-stream-gap: var(--xh-space-3);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
[data-scope='markdown-stream'][data-part='root'][data-size='lg'] {
|
|
123
|
+
--xh-_markdown-stream-font-size: var(--xh-control-font-lg);
|
|
124
|
+
--xh-_markdown-stream-gap: var(--xh-space-4);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* 视觉隐藏的原子播报区:不能 display:none,那样读屏就取不到它了 */
|
|
128
|
+
[data-scope='markdown-stream'][data-part='live-region'] {
|
|
129
|
+
position: absolute;
|
|
130
|
+
inline-size: 1px;
|
|
131
|
+
block-size: 1px;
|
|
132
|
+
padding: 0;
|
|
133
|
+
margin: -1px;
|
|
134
|
+
border: 0;
|
|
135
|
+
overflow: hidden;
|
|
136
|
+
clip-path: inset(50%);
|
|
137
|
+
white-space: nowrap;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@media print {
|
|
141
|
+
/* 打印:动画会被定格在任意一帧——转了一半的圈、扫到一半的微光。这里换成静止的表达,
|
|
142
|
+
取值与减弱动效那一档相同。两档各写一块、不并进一条媒体查询列表:减弱动效另有一份
|
|
143
|
+
:where([data-motion='reduce']) 的钩子版本与它成对,打印没有对应的钩子可配,
|
|
144
|
+
并成一条之后这层配对关系在文本上就断了。 */
|
|
145
|
+
[data-scope='markdown-stream'][data-part='root'][data-caret]::after {
|
|
146
|
+
animation: none;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
package/css/marquee.css
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
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
|
+
/* 定义 marquee 样式。 */
|
|
7
|
+
|
|
1
8
|
@layer xihan.motion {
|
|
2
9
|
/*
|
|
3
10
|
* 横轴一条、纵轴一条。四个方向乘两种铺法共八组起止点,若不外提就要写八份几乎一样的关键帧。
|
|
@@ -139,6 +146,11 @@
|
|
|
139
146
|
--xh-_marquee-play: paused;
|
|
140
147
|
}
|
|
141
148
|
|
|
149
|
+
/* 受控暂停:作者说了停就停,排在悬停两条之后,指针离开也不会把它带回去走 */
|
|
150
|
+
[data-scope='marquee'][data-part='root'][data-paused] {
|
|
151
|
+
--xh-_marquee-play: paused;
|
|
152
|
+
}
|
|
153
|
+
|
|
142
154
|
/* 轨道:走的是这一层,一圈走完立刻回到起点接着走 */
|
|
143
155
|
[data-scope='marquee'][data-part='content'] {
|
|
144
156
|
display: flex;
|
|
@@ -150,7 +162,7 @@
|
|
|
150
162
|
min-block-size: var(--xh-_marquee-fill-block);
|
|
151
163
|
animation-name: var(--xh-_marquee-name);
|
|
152
164
|
animation-duration: var(--xh-_marquee-duration);
|
|
153
|
-
animation-timing-function:
|
|
165
|
+
animation-timing-function: var(--xh-motion-ease-loop);
|
|
154
166
|
animation-iteration-count: infinite;
|
|
155
167
|
animation-play-state: var(--xh-_marquee-play);
|
|
156
168
|
}
|
|
@@ -193,4 +205,18 @@
|
|
|
193
205
|
:where([data-motion='reduce']) [data-scope='marquee'][data-part='root'] {
|
|
194
206
|
overflow: auto;
|
|
195
207
|
}
|
|
208
|
+
|
|
209
|
+
@media print {
|
|
210
|
+
/* 打印:动画会被定格在任意一帧——转了一半的圈、扫到一半的微光。这里换成静止的表达,
|
|
211
|
+
取值与减弱动效那一档相同。两档各写一块、不并进一条媒体查询列表:减弱动效另有一份
|
|
212
|
+
:where([data-motion='reduce']) 的钩子版本与它成对,打印没有对应的钩子可配,
|
|
213
|
+
并成一条之后这层配对关系在文本上就断了。 */
|
|
214
|
+
[data-scope='marquee'][data-part='content'] {
|
|
215
|
+
animation: none;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
[data-scope='marquee'][data-part='root'] {
|
|
219
|
+
overflow: auto;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
196
222
|
}
|
package/css/masonry.css
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
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
|
+
/* 定义 masonry 样式。 */
|
|
7
|
+
|
|
1
8
|
@layer xihan.components {
|
|
2
9
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
3
10
|
[data-scope='masonry'] {
|
|
@@ -0,0 +1,67 @@
|
|
|
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
|
+
/* 定义 matrix code 样式。 */
|
|
7
|
+
|
|
8
|
+
@layer xihan.components {
|
|
9
|
+
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
10
|
+
[data-scope='matrix-code'] {
|
|
11
|
+
--xh-matrix-code-skin: 1;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
* 根 <svg>。深浅两色取固定档而不是语义前景/背景:语义色跟着主题走,深色主题下整张码
|
|
16
|
+
* 会翻成浅底深模块的反相图,一部分读码器不认反相码。要换配色改下面这三个覆盖槽。
|
|
17
|
+
*
|
|
18
|
+
* 换色只有一条硬约束:码点必须比底色深,且两者对比要足。反相(浅码点深底)与
|
|
19
|
+
* 深浅相近都会让一部分读码器扫不出来,而这件事肉眼看不出来。
|
|
20
|
+
*
|
|
21
|
+
* --xh-matrix-code-fg 码点色,同时经 currentColor 传给码眼
|
|
22
|
+
* --xh-matrix-code-bg 底色,挖空矩形也用它
|
|
23
|
+
* --xh-matrix-code-eye-fg 码眼色,缺省跟随码点色
|
|
24
|
+
*/
|
|
25
|
+
[data-scope='matrix-code'][data-part='root'] {
|
|
26
|
+
display: block;
|
|
27
|
+
border-radius: var(--xh-matrix-code-radius, var(--xh-shape-control));
|
|
28
|
+
background: var(--xh-matrix-code-bg, var(--xh-color-neutral-0));
|
|
29
|
+
|
|
30
|
+
/* 模块那条 path 不带自己的填充色,从这里继承下去 */
|
|
31
|
+
color: var(--xh-matrix-code-fg, var(--xh-color-neutral-950));
|
|
32
|
+
fill: currentColor;
|
|
33
|
+
|
|
34
|
+
/* 占位与码面之间来回时,底色与那圈描边淡变 */
|
|
35
|
+
transition:
|
|
36
|
+
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
37
|
+
box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* 声明了 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去 */
|
|
41
|
+
[data-scope='matrix-code'][data-part='root'][hidden] {
|
|
42
|
+
display: none;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* 码眼那条 path 恒在(与形状无关),没单独指定就退回 currentColor,跟码点同色 */
|
|
46
|
+
[data-scope='matrix-code'][data-part='root'] > [data-xh-geom='eyes'] {
|
|
47
|
+
fill: var(--xh-matrix-code-eye-fg, currentColor);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
* logo 底下那块挖空:填的必须与根的背景逐字同一个表达式,两处一起改。
|
|
52
|
+
* 差一点就会在 logo 四周露出一圈色差,读码器会把那圈当成模块边界。
|
|
53
|
+
*/
|
|
54
|
+
[data-scope='matrix-code'][data-part='root'] > [data-xh-geom='logo-clear'] {
|
|
55
|
+
fill: var(--xh-matrix-code-bg, var(--xh-color-neutral-0));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/*
|
|
59
|
+
* 没有可编码的内容、以及内容超出容量:两种情形都一个模块不铺,留一块带描边的占位。
|
|
60
|
+
* 占位用的是语义色——它是界面元素不是码面,跟着主题走才对。
|
|
61
|
+
*/
|
|
62
|
+
[data-scope='matrix-code'][data-part='root'][data-state='empty'],
|
|
63
|
+
[data-scope='matrix-code'][data-part='root'][data-state='error'] {
|
|
64
|
+
background: var(--xh-matrix-code-placeholder-bg, var(--xh-bg-subtle));
|
|
65
|
+
box-shadow: inset 0 0 0 var(--xh-stroke-thin) var(--xh-matrix-code-placeholder-border, var(--xh-border-default));
|
|
66
|
+
}
|
|
67
|
+
}
|