@xihan-ui/styles 1.0.0-alpha.2 → 1.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 +2177 -0
- package/README.md +1 -1
- package/css/accordion.css +80 -6
- package/css/alert.css +43 -14
- package/css/anchor.css +8 -8
- package/css/avatar-group.css +7 -3
- package/css/avatar.css +9 -3
- package/css/back-top.css +22 -1
- package/css/badge.css +104 -32
- package/css/breadcrumb.css +25 -5
- package/css/button-group.css +18 -13
- package/css/button.css +48 -11
- package/css/calendar.css +150 -7
- package/css/card.css +20 -11
- package/css/carousel.css +36 -5
- package/css/cascader.css +211 -124
- package/css/checkbox-group.css +72 -22
- package/css/checkbox.css +70 -13
- package/css/clipboard.css +2 -1
- package/css/code-block.css +12 -7
- package/css/collapsible.css +49 -3
- package/css/color-picker.css +132 -46
- package/css/combobox.css +132 -60
- package/css/composer.css +5 -3
- package/css/context-menu.css +113 -74
- package/css/date-field.css +93 -16
- package/css/date-picker.css +293 -72
- package/css/descriptions.css +11 -5
- package/css/dialog.css +47 -14
- package/css/download-trigger.css +76 -0
- package/css/drawer.css +57 -16
- package/css/dynamic-input.css +75 -17
- package/css/editable.css +12 -10
- package/css/ellipsis.css +7 -1
- package/css/empty-state.css +22 -12
- package/css/field.css +16 -6
- package/css/fieldset.css +69 -0
- package/css/file-upload.css +46 -8
- package/css/flex.css +13 -7
- package/css/float-button.css +23 -1
- package/css/floating-panel.css +316 -0
- package/css/form.css +4 -4
- package/css/grid.css +11 -5
- package/css/heatmap.css +411 -0
- package/css/highlight.css +2 -2
- package/css/hotkeys.css +90 -0
- package/css/hover-card.css +43 -45
- package/css/image-cropper.css +233 -0
- package/css/image-viewer.css +155 -17
- package/css/image.css +2 -2
- package/css/infinite-scroll.css +1 -1
- package/css/json-viewer.css +274 -0
- package/css/layout.css +19 -15
- package/css/list.css +22 -13
- package/css/listbox.css +24 -6
- package/css/loading-bar.css +12 -5
- package/css/log.css +7 -3
- package/css/marquee.css +9 -0
- package/css/masonry.css +63 -0
- package/css/mention.css +100 -36
- package/css/menu.css +127 -50
- package/css/menubar.css +155 -61
- package/css/navigation-menu.css +56 -31
- package/css/notification.css +377 -0
- package/css/number-animation.css +3 -3
- package/css/number-field.css +182 -19
- package/css/overlay-arrow.css +51 -0
- package/css/page-header.css +12 -5
- package/css/pagination.css +171 -14
- package/css/password-input.css +356 -0
- package/css/pin-input.css +15 -12
- package/css/popconfirm.css +55 -12
- package/css/popover.css +73 -45
- package/css/popselect.css +207 -57
- package/css/progress.css +54 -8
- package/css/qr-code.css +1 -1
- package/css/radio-group.css +27 -10
- package/css/rating.css +4 -4
- package/css/reset.css +17 -0
- package/css/result.css +21 -11
- package/css/scroll-area.css +61 -89
- package/css/scrollbar.css +170 -0
- package/css/segmented.css +215 -0
- package/css/select.css +298 -131
- package/css/separator.css +2 -2
- package/css/side-nav.css +127 -24
- package/css/signature-pad.css +144 -0
- package/css/skeleton.css +7 -1
- package/css/slider.css +14 -12
- package/css/space.css +117 -0
- package/css/spinner.css +22 -10
- package/css/statistic.css +9 -9
- package/css/steps.css +29 -12
- package/css/switch.css +57 -8
- package/css/table.css +146 -44
- package/css/tabs.css +13 -5
- package/css/tag.css +179 -0
- package/css/tags-input.css +80 -42
- package/css/text-field.css +151 -38
- package/css/thread.css +11 -3
- package/css/time-field.css +99 -18
- package/css/time-picker.css +261 -71
- package/css/timeline.css +15 -15
- package/css/timer.css +119 -0
- package/css/toast.css +129 -55
- package/css/toggle-group.css +30 -4
- package/css/toggle.css +12 -6
- package/css/tone.css +57 -22
- package/css/toolbar.css +1 -1
- package/css/tooltip.css +40 -31
- package/css/tour.css +112 -61
- package/css/transfer.css +98 -21
- package/css/tree-select.css +215 -89
- package/css/tree.css +131 -5
- package/css/typography.css +5 -5
- package/css/undefined.css +12 -1
- package/css/virtualizer.css +3 -1
- package/css/watermark.css +1 -2
- package/index.css +18 -1
- package/index.unlayered.css +10356 -3255
- package/package.json +20 -4
- package/css/toaster.css +0 -74
package/css/timer.css
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
@layer xihan.components {
|
|
2
|
+
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
3
|
+
[data-scope='timer'] {
|
|
4
|
+
--xh-timer-skin: 1;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/* 三个尺寸档只换这几个私有槽,各部件从 root 继承它们,换档不必给每个部件各写一条选择器 */
|
|
8
|
+
[data-scope='timer'][data-part='root'] {
|
|
9
|
+
--xh-_timer-digit-size: var(--xh-text-heading-2-size);
|
|
10
|
+
--xh-_timer-gap: var(--xh-space-3);
|
|
11
|
+
--xh-_timer-control-h: var(--xh-control-h-md);
|
|
12
|
+
--xh-_timer-control-px: var(--xh-control-px-md);
|
|
13
|
+
--xh-_timer-control-gap: var(--xh-control-gap-md);
|
|
14
|
+
|
|
15
|
+
display: inline-flex;
|
|
16
|
+
align-items: center;
|
|
17
|
+
gap: var(--xh-timer-gap, var(--xh-_timer-gap));
|
|
18
|
+
color: var(--xh-timer-fg, var(--xh-fg-default));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* 上面声明了 display,会盖掉 UA 的 [hidden] 规则,收起态要在这里接回来 */
|
|
22
|
+
[data-scope='timer'][data-part='root'][hidden] {
|
|
23
|
+
display: none;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* —— 尺寸 —— */
|
|
27
|
+
[data-scope='timer'][data-part='root'][data-size='sm'] {
|
|
28
|
+
--xh-_timer-digit-size: var(--xh-text-heading-3-size);
|
|
29
|
+
--xh-_timer-gap: var(--xh-space-2);
|
|
30
|
+
--xh-_timer-control-h: var(--xh-control-h-sm);
|
|
31
|
+
--xh-_timer-control-px: var(--xh-control-px-sm);
|
|
32
|
+
--xh-_timer-control-gap: var(--xh-control-gap-sm);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
[data-scope='timer'][data-part='root'][data-size='lg'] {
|
|
36
|
+
--xh-_timer-digit-size: var(--xh-text-heading-1-size);
|
|
37
|
+
--xh-_timer-gap: var(--xh-space-4);
|
|
38
|
+
--xh-_timer-control-h: var(--xh-control-h-lg);
|
|
39
|
+
--xh-_timer-control-px: var(--xh-control-px-lg);
|
|
40
|
+
--xh-_timer-control-gap: var(--xh-control-gap-lg);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* —— 时间区 —— */
|
|
44
|
+
/* 等宽数字:逐位宽度一致,秒数换位时分隔符与后面的段都不会左右挪动。
|
|
45
|
+
direction 钉成 ltr:每段是一个独立的 flex 项,主轴方向跟着文字方向走,
|
|
46
|
+
不钉住的话 rtl 页面上时分秒会整体倒过来排——时间串的读序两个方向都一样。 */
|
|
47
|
+
[data-scope='timer'][data-part='area'] {
|
|
48
|
+
display: inline-flex;
|
|
49
|
+
align-items: baseline;
|
|
50
|
+
direction: ltr;
|
|
51
|
+
color: var(--xh-timer-area-fg, var(--xh-fg-default));
|
|
52
|
+
font-size: var(--xh-timer-digit-font-size, var(--xh-_timer-digit-size));
|
|
53
|
+
font-variant-numeric: tabular-nums;
|
|
54
|
+
font-weight: var(--xh-font-weight-semibold);
|
|
55
|
+
line-height: var(--xh-leading-tight);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
[data-scope='timer'][data-part='area'][hidden] {
|
|
59
|
+
display: none;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* 走完之后这串数字不再是活的信息,退一档;暂停在半路的仍是要盯着看的数,不退 */
|
|
63
|
+
[data-scope='timer'][data-part='area'][data-state='completed'] {
|
|
64
|
+
color: var(--xh-timer-completed-fg, var(--xh-fg-muted));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* 记号只是排版,比数字弱一档、两侧留一点气口 */
|
|
68
|
+
[data-scope='timer'][data-part='separator'] {
|
|
69
|
+
padding-inline: var(--xh-timer-separator-px, var(--xh-space-0_5));
|
|
70
|
+
color: var(--xh-timer-separator-fg, var(--xh-fg-subtle));
|
|
71
|
+
font-weight: var(--xh-font-weight-regular);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* —— 起停按钮 —— */
|
|
75
|
+
[data-scope='timer'][data-part='control'] {
|
|
76
|
+
display: inline-flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
justify-content: center;
|
|
79
|
+
gap: var(--xh-timer-control-gap, var(--xh-_timer-control-gap));
|
|
80
|
+
block-size: var(--xh-timer-control-h, var(--xh-_timer-control-h));
|
|
81
|
+
padding-inline: var(--xh-timer-control-px, var(--xh-_timer-control-px));
|
|
82
|
+
border: var(--xh-stroke-thin) solid var(--xh-timer-control-border, var(--xh-border-control));
|
|
83
|
+
border-radius: var(--xh-timer-control-radius, var(--xh-shape-control));
|
|
84
|
+
background: var(--xh-timer-control-bg, var(--xh-bg-surface));
|
|
85
|
+
color: var(--xh-timer-control-fg, var(--xh-fg-default));
|
|
86
|
+
font-size: var(--xh-text-label-size);
|
|
87
|
+
font-weight: var(--xh-text-label-weight);
|
|
88
|
+
line-height: var(--xh-leading-none);
|
|
89
|
+
cursor: pointer;
|
|
90
|
+
transition: background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
[data-scope='timer'][data-part='control'][hidden] {
|
|
94
|
+
display: none;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
[data-scope='timer'][data-part='control']:hover {
|
|
98
|
+
border-color: var(--xh-timer-control-border-hover, var(--xh-border-control-hover));
|
|
99
|
+
background: var(--xh-timer-control-bg-hover, var(--xh-bg-subtle-hover));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
[data-scope='timer'][data-part='control']:active {
|
|
103
|
+
background: var(--xh-timer-control-bg-active, var(--xh-bg-subtle-active));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
[data-scope='timer'][data-part='control']:focus-visible {
|
|
107
|
+
border-color: var(--xh-timer-control-border-focus, var(--xh-_tone, var(--xh-border-control-focus)));
|
|
108
|
+
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
109
|
+
outline-offset: var(--xh-ring-offset);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* 作者把按钮禁掉时的样子。文字改用 fg-disabled 就不再叠 opacity,两条一起上会掉到读不出来 */
|
|
113
|
+
[data-scope='timer'][data-part='control']:disabled {
|
|
114
|
+
border-color: var(--xh-timer-control-border-disabled, var(--xh-border-subtle));
|
|
115
|
+
background: var(--xh-timer-control-bg-disabled, var(--xh-bg-muted));
|
|
116
|
+
color: var(--xh-fg-disabled);
|
|
117
|
+
cursor: not-allowed;
|
|
118
|
+
}
|
|
119
|
+
}
|
package/css/toast.css
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
@layer xihan.motion {
|
|
2
2
|
/*
|
|
3
|
-
*
|
|
4
|
-
* data-placement
|
|
5
|
-
*
|
|
3
|
+
* 九个位共用同一条进出场,位移不跟着落位走:要按位置分方向就得从摞的
|
|
4
|
+
* data-placement 反向选到条子上,落位一改名整条动效静默失效。
|
|
5
|
+
* 竖向一小段位移在九个位上都说得通。
|
|
6
6
|
*/
|
|
7
7
|
@keyframes xh-toast-in {
|
|
8
8
|
from {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
|
|
28
28
|
to {
|
|
29
29
|
opacity: 0;
|
|
30
|
-
translate: 0 var(--xh-motion-distance-
|
|
30
|
+
translate: 0 var(--xh-motion-distance-md);
|
|
31
31
|
scale: var(--xh-motion-scale-enter);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -39,42 +39,95 @@
|
|
|
39
39
|
--xh-toast-skin: 1;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
/*
|
|
43
|
+
* 一摞 = 一整面视口大小的定位面:贴边靠 padding,落位靠 justify/align 表达。
|
|
44
|
+
* 不用四角 inset 逐个摆,是因为 column flex 的 align-items 走的是行内轴,
|
|
45
|
+
* RTL 下 start/end 自动跟着翻;写死 inset-inline-start 的话居中那三个位
|
|
46
|
+
* 还得再配一次 translate,方向一变就错。
|
|
47
|
+
* 摞由全局服务渲染,没有对应的容器组件——一次操作的反馈落在哪儿是整个服务的口径。
|
|
48
|
+
*/
|
|
49
|
+
[data-scope='toast'][data-part='group'] {
|
|
50
|
+
position: fixed;
|
|
51
|
+
inset-block: 0;
|
|
52
|
+
inset-inline: 0;
|
|
53
|
+
z-index: var(--xh-toast-layer, var(--xh-layer-toast));
|
|
43
54
|
display: flex;
|
|
44
55
|
flex-direction: column;
|
|
45
|
-
|
|
46
|
-
|
|
56
|
+
/* 基线按默认落位 top 写,下面只覆盖跟它不同的那几个位 */
|
|
57
|
+
justify-content: flex-start;
|
|
58
|
+
align-items: center;
|
|
59
|
+
padding-block: var(--xh-toast-inset, var(--xh-space-6));
|
|
60
|
+
padding-inline: var(--xh-toast-inset, var(--xh-space-6));
|
|
61
|
+
/* 摞内间距由服务写进内联 style,这里绝不重复写:
|
|
62
|
+
写了也会被内联盖掉,只会让人误以为间距归样式层管 */
|
|
63
|
+
/* 整面铺开就等于罩住了整块视口。面本身不吃指针,只有条子吃(见下),
|
|
64
|
+
否则底下的页面就再也点不动了 */
|
|
65
|
+
pointer-events: none;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
[data-scope='toast'][data-part='group'][hidden] {
|
|
69
|
+
display: none;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* 块轴落位:^= 一次吃掉某一行的三个位(top / top-start / top-end) */
|
|
73
|
+
[data-scope='toast'][data-part='group'][data-placement^='middle'] {
|
|
74
|
+
justify-content: center;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
[data-scope='toast'][data-part='group'][data-placement^='bottom'] {
|
|
78
|
+
justify-content: flex-end;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* 行内轴落位:不带后缀的 top / middle / bottom 用基线的居中 */
|
|
82
|
+
[data-scope='toast'][data-part='group'][data-placement$='-start'] {
|
|
83
|
+
align-items: flex-start;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
[data-scope='toast'][data-part='group'][data-placement$='-end'] {
|
|
87
|
+
align-items: flex-end;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
* 一条轻提示是「一句话 + 一枚状态字形」,横排一行、贴着文字收缩。
|
|
92
|
+
* 语气由淡底、描边与字形三者一起承载,正文留中性——正文也跟着兑成语气色的话,
|
|
93
|
+
* 绿字压在绿底上,对比度是整条里最差的那一处。
|
|
94
|
+
*/
|
|
95
|
+
[data-scope='toast'][data-part='root'] {
|
|
96
|
+
/* 状态字形按控件指示符那一档走,与 alert 的图标框同一把尺 */
|
|
97
|
+
--xh-icon-size: var(--xh-toast-icon-size, var(--xh-control-indicator-size));
|
|
98
|
+
|
|
99
|
+
/* 底与描边取语气层派生好的槽,不在这儿自己再兑一遍:
|
|
100
|
+
兑法差一档,字形压上去的对比度就跟着差一档(alert 踩过这个坑) */
|
|
101
|
+
--xh-_toast-tint: var(--xh-_tone-subtle);
|
|
102
|
+
--xh-_toast-edge: var(--xh-_tone-border);
|
|
103
|
+
|
|
104
|
+
display: flex;
|
|
105
|
+
align-items: center;
|
|
106
|
+
gap: var(--xh-toast-gap, var(--xh-control-gap-md));
|
|
107
|
+
/* 收缩包裹:一句「已保存」撑成定宽方块,右边那片空白会让它读起来像一张公告卡 */
|
|
108
|
+
inline-size: var(--xh-toast-w, auto);
|
|
47
109
|
/* 摞是整面视口宽的定位面且带内边距,取 100% 就等于自动让出两侧留白,
|
|
48
|
-
窄屏上不必再算一遍 viewport
|
|
49
|
-
max-inline-size: 100
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
就能把某一条整体改色;两者都没有时退回原来的 info 蓝 */
|
|
57
|
-
border-inline-start-width: var(--xh-toast-accent-width, 4px);
|
|
58
|
-
border-inline-start-color: var(--xh-toast-accent, var(--xh-_tone-soft, var(--xh-color-info-500)));
|
|
110
|
+
窄屏上不必再算一遍 viewport 减法;再叠一道绝对上限,免得一条长文案铺成横幅 */
|
|
111
|
+
max-inline-size: min(var(--xh-overlay-max-w-xl), 100%);
|
|
112
|
+
/* 纵内衬取控件档而不是面档:面档(12px)叠上 21px 行盒与两道细边就是 47px 高,
|
|
113
|
+
那是卡片的体量;控件档(8px)落在 39px,与短消息该有的高度一致
|
|
114
|
+
(带叉 42px、带操作钮 46px,那两档本就不是默认排版) */
|
|
115
|
+
padding-block: var(--xh-toast-py, var(--xh-field-py));
|
|
116
|
+
padding-inline: var(--xh-toast-px, var(--xh-surface-px-sm));
|
|
117
|
+
border: var(--xh-stroke-thin) solid var(--xh-toast-border, var(--xh-_toast-edge));
|
|
59
118
|
border-radius: var(--xh-toast-radius, var(--xh-shape-surface));
|
|
60
|
-
background: var(--xh-toast-bg, var(--xh-
|
|
119
|
+
background: var(--xh-toast-bg, var(--xh-_toast-tint));
|
|
61
120
|
color: var(--xh-toast-fg, var(--xh-fg-default));
|
|
62
|
-
box-shadow: var(--xh-toast-shadow, var(--xh-elevation-
|
|
63
|
-
font-size: var(--xh-toast-font-size, var(--xh-
|
|
64
|
-
line-height: var(--xh-toast-leading, var(--xh-leading
|
|
65
|
-
/*
|
|
121
|
+
box-shadow: var(--xh-toast-shadow, var(--xh-elevation-sheet));
|
|
122
|
+
font-size: var(--xh-toast-font-size, var(--xh-text-body-size));
|
|
123
|
+
line-height: var(--xh-toast-leading, var(--xh-text-body-leading));
|
|
124
|
+
/* 摞的定位面整面铺开且不吃指针,条子必须自己吃回来:
|
|
66
125
|
悬停按住计时、按钮可点、焦点进出,全指着这一条 */
|
|
67
126
|
pointer-events: auto;
|
|
68
127
|
}
|
|
69
128
|
|
|
70
|
-
/* loading 说的是「事情还没完」,不是好消息也不是坏消息,走中性灰。
|
|
71
|
-
它不是语气:连接层给它派生的 neutral 档是 500,而这里要的是 fg-muted(600) */
|
|
72
|
-
[data-scope='toast'][data-part='root'][data-type='loading'] {
|
|
73
|
-
border-inline-start-color: var(--xh-toast-accent, var(--xh-fg-muted));
|
|
74
|
-
}
|
|
75
|
-
|
|
76
129
|
/* 退场窗口走完连接层给的是 hidden 属性,而上面声明了 display——
|
|
77
|
-
漏掉这条,已经"卸载"
|
|
130
|
+
漏掉这条,已经"卸载"的提示会一直杵在屏幕上,且再也没人来收 */
|
|
78
131
|
[data-scope='toast'][data-part='root'][hidden] {
|
|
79
132
|
display: none;
|
|
80
133
|
}
|
|
@@ -85,41 +138,39 @@
|
|
|
85
138
|
}
|
|
86
139
|
|
|
87
140
|
/* forwards 不能省:退场窗口(removeDelay 默认 200ms)比退场动画长,
|
|
88
|
-
|
|
141
|
+
不定住末帧的话动画跑完会弹回全不透明,条子在被收起前先闪一下 */
|
|
89
142
|
[data-scope='toast'][data-part='root'][data-state='dismissing'] {
|
|
90
143
|
animation: xh-toast-out var(--xh-motion-duration-exit) var(--xh-motion-ease-exit) forwards;
|
|
91
144
|
}
|
|
92
145
|
|
|
93
146
|
[data-scope='toast'][data-part='title'] {
|
|
94
|
-
/* 作者可能把它写成 h2/p
|
|
147
|
+
/* 作者可能把它写成 h2/p,外边距得先归零,否则条子内的行距对不上 */
|
|
95
148
|
margin: 0;
|
|
149
|
+
/* 吃掉剩余宽度,把操作钮与叉推到行尾;min-inline-size 让它在撞上宽度上限时能换行,
|
|
150
|
+
flex 项的 min-width 默认是 auto,不归零的话长文案会把条子顶出上限 */
|
|
151
|
+
flex: 1 1 auto;
|
|
152
|
+
min-inline-size: 0;
|
|
96
153
|
color: var(--xh-toast-title-fg, var(--xh-fg-default));
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
[data-scope='toast'][data-part='description'] {
|
|
103
|
-
margin: 0;
|
|
104
|
-
color: var(--xh-toast-description-fg, var(--xh-fg-muted));
|
|
105
|
-
font-size: var(--xh-toast-description-font-size, var(--xh-font-size-sm));
|
|
154
|
+
/* 与条子同字号同行高、不加粗:加粗是"这是标题、下面还有正文"的信号,
|
|
155
|
+
而轻提示没有正文——那一层是 notification 的 */
|
|
156
|
+
font-size: var(--xh-toast-title-font-size, var(--xh-text-body-size));
|
|
157
|
+
font-weight: var(--xh-toast-title-font-weight, var(--xh-text-body-weight));
|
|
158
|
+
line-height: var(--xh-toast-title-leading, var(--xh-text-body-leading));
|
|
106
159
|
}
|
|
107
160
|
|
|
108
|
-
/*
|
|
109
|
-
但空盒子会照吃一份 gap
|
|
110
|
-
[data-scope='toast'][data-part='title']:empty
|
|
111
|
-
[data-scope='toast'][data-part='description']:empty {
|
|
161
|
+
/* 没给文案时仍然要留在 DOM 里(aria-labelledby 指着它),
|
|
162
|
+
但空盒子会照吃一份 gap,条子看着就多出一截莫名的留白 */
|
|
163
|
+
[data-scope='toast'][data-part='title']:empty {
|
|
112
164
|
display: none;
|
|
113
165
|
}
|
|
114
166
|
|
|
115
|
-
[data-scope='toast'][data-part='title'][hidden]
|
|
116
|
-
[data-scope='toast'][data-part='description'][hidden] {
|
|
167
|
+
[data-scope='toast'][data-part='title'][hidden] {
|
|
117
168
|
display: none;
|
|
118
169
|
}
|
|
119
170
|
|
|
120
171
|
[data-scope='toast'][data-part='action-trigger'] {
|
|
121
|
-
/*
|
|
122
|
-
|
|
172
|
+
/* 条子是单行 flex,按钮不参与伸缩:文案长了该换行的是文字,不是把按钮压扁 */
|
|
173
|
+
flex: none;
|
|
123
174
|
display: inline-flex;
|
|
124
175
|
align-items: center;
|
|
125
176
|
justify-content: center;
|
|
@@ -129,7 +180,7 @@
|
|
|
129
180
|
border-radius: var(--xh-toast-action-radius, var(--xh-shape-control));
|
|
130
181
|
background: var(--xh-toast-action-bg, var(--xh-bg-subtle));
|
|
131
182
|
color: var(--xh-toast-action-fg, var(--xh-fg-default));
|
|
132
|
-
/*
|
|
183
|
+
/* 按钮不继承字族字号,不接回来的话条子里会突然冒出一段系统 UI 字体 */
|
|
133
184
|
font: inherit;
|
|
134
185
|
font-weight: var(--xh-toast-action-font-weight, var(--xh-font-weight-medium));
|
|
135
186
|
line-height: var(--xh-leading-none);
|
|
@@ -154,14 +205,16 @@
|
|
|
154
205
|
}
|
|
155
206
|
|
|
156
207
|
[data-scope='toast'][data-part='close-trigger'] {
|
|
157
|
-
|
|
158
|
-
/*
|
|
208
|
+
flex: none;
|
|
209
|
+
/* 推到行内末侧;和操作按钮同处一行时排在它后面 */
|
|
159
210
|
margin-inline-start: auto;
|
|
160
211
|
display: inline-flex;
|
|
161
212
|
align-items: center;
|
|
162
213
|
justify-content: center;
|
|
163
|
-
|
|
164
|
-
|
|
214
|
+
/* 行级动作钮那一档(24px),不是浮层角落钮的 28px:
|
|
215
|
+
后者比一行正文的行盒还高,单它就把整条顶高一截 */
|
|
216
|
+
block-size: var(--xh-toast-close-size, var(--xh-control-action-size));
|
|
217
|
+
inline-size: var(--xh-toast-close-size, var(--xh-control-action-size));
|
|
165
218
|
border: 0;
|
|
166
219
|
border-radius: var(--xh-toast-close-radius, var(--xh-shape-control));
|
|
167
220
|
background: transparent;
|
|
@@ -169,6 +222,10 @@
|
|
|
169
222
|
font: inherit;
|
|
170
223
|
line-height: var(--xh-leading-none);
|
|
171
224
|
cursor: pointer;
|
|
225
|
+
transition:
|
|
226
|
+
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
227
|
+
color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
228
|
+
scale var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
172
229
|
}
|
|
173
230
|
|
|
174
231
|
/* closable=false 时连接层同时给了 hidden 与 disabled,这条是它真正收起的那一半:
|
|
@@ -178,10 +235,15 @@
|
|
|
178
235
|
}
|
|
179
236
|
|
|
180
237
|
[data-scope='toast'][data-part='close-trigger']:hover:not(:disabled) {
|
|
181
|
-
background: var(--xh-toast-close-bg-hover, var(--xh-bg-subtle));
|
|
238
|
+
background: var(--xh-toast-close-bg-hover, var(--xh-bg-subtle-hover));
|
|
182
239
|
color: var(--xh-toast-close-fg-hover, var(--xh-fg-default));
|
|
183
240
|
}
|
|
184
241
|
|
|
242
|
+
[data-scope='toast'][data-part='close-trigger']:active {
|
|
243
|
+
background: var(--xh-toast-close-bg-active, var(--xh-bg-subtle-active));
|
|
244
|
+
scale: var(--xh-motion-scale-press);
|
|
245
|
+
}
|
|
246
|
+
|
|
185
247
|
/* 单体控件用原生 disabled。常规路径下它与 hidden 同时出现看不见,
|
|
186
248
|
但作者若在覆盖层把收起改了回来,至少还能看出这颗叉是按不动的 */
|
|
187
249
|
[data-scope='toast'][data-part='close-trigger']:disabled {
|
|
@@ -193,4 +255,16 @@
|
|
|
193
255
|
outline: var(--xh-ring-width) solid var(--xh-ring-focus);
|
|
194
256
|
outline-offset: var(--xh-ring-offset);
|
|
195
257
|
}
|
|
258
|
+
|
|
259
|
+
/* 没写内容就由皮肤画兜底字形;作者往部件里塞了自己的图形,这几条即不命中 */
|
|
260
|
+
[data-scope='toast'][data-part='close-trigger']:empty::before {
|
|
261
|
+
content: '';
|
|
262
|
+
display: inline-block;
|
|
263
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
264
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
265
|
+
vertical-align: var(--xh-glyph-baseline-shift);
|
|
266
|
+
background-color: currentColor;
|
|
267
|
+
-webkit-mask: var(--xh-glyph-mark-close) center / contain no-repeat;
|
|
268
|
+
mask: var(--xh-glyph-mark-close) center / contain no-repeat;
|
|
269
|
+
}
|
|
196
270
|
}
|
package/css/toggle-group.css
CHANGED
|
@@ -7,10 +7,36 @@
|
|
|
7
7
|
/* 分段控件:段与段之间不留缝,靠共边连成一体,所以 root 不设 gap。
|
|
8
8
|
排布只能读 data-orientation——aria-orientation 在多选模式下连接层根本不输出(role=group 不收) */
|
|
9
9
|
[data-scope='toggle-group'][data-part='root'] {
|
|
10
|
+
/* 组件内那几档层号只在自己人之间排序:建一个层叠上下文把它们关起来,
|
|
11
|
+
既不让页面上的层号插进来,也不让它们漏出去压住别人 */
|
|
12
|
+
isolation: isolate;
|
|
13
|
+
|
|
14
|
+
/* 段的度量与字号走私有槽中转,与同族的分段控件一处对一处 */
|
|
15
|
+
--xh-_toggle-group-h: var(--xh-control-h-md);
|
|
16
|
+
--xh-_toggle-group-px: var(--xh-control-px-md);
|
|
17
|
+
--xh-_toggle-group-gap: var(--xh-control-gap-md);
|
|
18
|
+
--xh-_toggle-group-font-size: var(--xh-control-font-md);
|
|
19
|
+
|
|
10
20
|
display: inline-flex;
|
|
11
21
|
align-items: stretch;
|
|
12
22
|
}
|
|
13
23
|
|
|
24
|
+
/* —— 尺寸 —— */
|
|
25
|
+
/* 缺省档写在上面的基础规则里 */
|
|
26
|
+
[data-scope='toggle-group'][data-part='root'][data-size='sm'] {
|
|
27
|
+
--xh-_toggle-group-h: var(--xh-control-h-sm);
|
|
28
|
+
--xh-_toggle-group-px: var(--xh-control-px-sm);
|
|
29
|
+
--xh-_toggle-group-gap: var(--xh-control-gap-sm);
|
|
30
|
+
--xh-_toggle-group-font-size: var(--xh-control-font-sm);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
[data-scope='toggle-group'][data-part='root'][data-size='lg'] {
|
|
34
|
+
--xh-_toggle-group-h: var(--xh-control-h-lg);
|
|
35
|
+
--xh-_toggle-group-px: var(--xh-control-px-lg);
|
|
36
|
+
--xh-_toggle-group-gap: var(--xh-control-gap-lg);
|
|
37
|
+
--xh-_toggle-group-font-size: var(--xh-control-font-lg);
|
|
38
|
+
}
|
|
39
|
+
|
|
14
40
|
[data-scope='toggle-group'][data-part='root'][data-orientation='horizontal'] {
|
|
15
41
|
flex-direction: row;
|
|
16
42
|
}
|
|
@@ -45,15 +71,15 @@
|
|
|
45
71
|
display: inline-flex;
|
|
46
72
|
align-items: center;
|
|
47
73
|
justify-content: center;
|
|
48
|
-
gap: var(--xh-toggle-group-item-gap, var(--xh-
|
|
49
|
-
block-size: var(--xh-toggle-group-item-h, var(--xh-
|
|
50
|
-
padding-inline: var(--xh-toggle-group-item-px, var(--xh-
|
|
74
|
+
gap: var(--xh-toggle-group-item-gap, var(--xh-_toggle-group-gap));
|
|
75
|
+
block-size: var(--xh-toggle-group-item-h, var(--xh-_toggle-group-h));
|
|
76
|
+
padding-inline: var(--xh-toggle-group-item-px, var(--xh-_toggle-group-px));
|
|
51
77
|
border: var(--xh-stroke-thin) solid var(--xh-_border);
|
|
52
78
|
/* 中间段一律直角,圆角只由首末两端补回来 */
|
|
53
79
|
border-radius: 0;
|
|
54
80
|
background: var(--xh-_bg);
|
|
55
81
|
color: var(--xh-_fg);
|
|
56
|
-
font-size: var(--xh-toggle-group-item-font-size, var(--xh-
|
|
82
|
+
font-size: var(--xh-toggle-group-item-font-size, var(--xh-_toggle-group-font-size));
|
|
57
83
|
font-weight: var(--xh-toggle-group-item-font-weight, var(--xh-text-label-weight));
|
|
58
84
|
line-height: var(--xh-leading-none);
|
|
59
85
|
white-space: nowrap;
|
package/css/toggle.css
CHANGED
|
@@ -95,14 +95,20 @@
|
|
|
95
95
|
|
|
96
96
|
/* —— 尺寸 —— */
|
|
97
97
|
[data-scope='toggle'][data-part='root'][data-size='sm'] {
|
|
98
|
-
block-size: var(--xh-control-h-sm);
|
|
99
|
-
padding-inline: var(--xh-control-px-sm);
|
|
100
|
-
font-size: var(--xh-font-size-sm);
|
|
98
|
+
block-size: var(--xh-toggle-h, var(--xh-control-h-sm));
|
|
99
|
+
padding-inline: var(--xh-toggle-px, var(--xh-control-px-sm));
|
|
100
|
+
font-size: var(--xh-toggle-font-size, var(--xh-control-font-sm));
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
[data-scope='toggle'][data-part='root'][data-size='lg'] {
|
|
104
|
-
block-size: var(--xh-control-h-lg);
|
|
105
|
-
padding-inline: var(--xh-control-px-lg);
|
|
106
|
-
font-size: var(--xh-font-size-lg);
|
|
104
|
+
block-size: var(--xh-toggle-h, var(--xh-control-h-lg));
|
|
105
|
+
padding-inline: var(--xh-toggle-px, var(--xh-control-px-lg));
|
|
106
|
+
font-size: var(--xh-toggle-font-size, var(--xh-control-font-lg));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* 声明过任何 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去。
|
|
110
|
+
写在文件末尾:兜底必须排在该部件所有 display 声明之后 */
|
|
111
|
+
[data-scope='toggle'][data-part='root'][hidden] {
|
|
112
|
+
display: none;
|
|
107
113
|
}
|
|
108
114
|
}
|
package/css/tone.css
CHANGED
|
@@ -9,15 +9,25 @@
|
|
|
9
9
|
* 这里只声明私有槽,各组件的形态规则去消费。所以加一个语气是改这一处 6 条规则,
|
|
10
10
|
* 而不是逐个组件写 6 遍。
|
|
11
11
|
*
|
|
12
|
-
* --xh-_tone-on
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* --xh-_tone-on 是实心底上的前景色,--xh-_tone-shift 是交互态要往哪个方向挪
|
|
13
|
+
* (永远背离前景色走,悬停与按下才不会反过来压低对比度)。两者都由 --xh-_tone 现推:
|
|
14
|
+
* 按 WCAG 的权重算出语气色的相对亮度,低于 0.179 配白字、高于配深字,shift 取反面。
|
|
15
|
+
* 0.179 是白字与黑字对比度相等的那一点,解析解。
|
|
16
|
+
*
|
|
17
|
+
* 现推是因为语气色可换肤:写死的分派只对本仓这套 600 档成立,使用者换一套调色板
|
|
18
|
+
* 配对就不再成立,而门禁只验本仓的色,换肤后的失配一路绿灯。
|
|
15
19
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
20
|
+
* 够不到相对颜色语法的引擎退回逐族写死的那一份,取值是本仓这套色的实测结果:
|
|
21
|
+
* 600 档上白字对 brand 5.08、neutral 7.80、danger 4.83 达标,而 success 3.04、
|
|
22
|
+
* warning 2.70、info 3.47 都不到 4.5,这三族配深字。兜底那一份用的是固定原语而不是
|
|
23
|
+
* --xh-fg-default:实心底本身是原语色、不随主题翻,配色若跟着主题翻,暗色下就会变成
|
|
24
|
+
* 白字压在浅黄底上(实测对比度 2.70)。
|
|
18
25
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
26
|
+
* brand 是例外:那一族的色相归使用者,所以它的底与前景走 --xh-bg-brand / --xh-fg-on-brand
|
|
27
|
+
* 这两个语义令牌。缺省主题下它们就解析成 brand-600 与 neutral-0,与其余五族同值;
|
|
28
|
+
* 改写过品牌色的使用者只改这两个令牌,实心底与它上面的字就一起跟着走。
|
|
29
|
+
* 底与前景既然随主题翻,brand 的 shift 也必须随主题翻——现推那一档自动跟着底色走,
|
|
30
|
+
* 文件末尾那条深色覆盖是给兜底那一档用的。
|
|
21
31
|
*/
|
|
22
32
|
@layer xihan.components {
|
|
23
33
|
[data-tone] {
|
|
@@ -25,9 +35,6 @@
|
|
|
25
35
|
而不是让 --xh-_tone 悬空——悬空会让下面每条 color-mix 变成计算期无效,
|
|
26
36
|
用它的声明会整条失效,且 var() 兜底也救不回来(槽位是「已声明但无效」)。 */
|
|
27
37
|
--xh-_tone: var(--xh-color-neutral-600);
|
|
28
|
-
/* 装饰性强调(色条、图标这类)用 500 档:600 是给实心底与文字用的强调档,
|
|
29
|
-
压在细长的色条上偏重。alert 与 toast 原本就用 500,接语气层不该改变它们的观感 */
|
|
30
|
-
--xh-_tone-soft: var(--xh-color-neutral-500);
|
|
31
38
|
--xh-_tone-on: var(--xh-color-neutral-0);
|
|
32
39
|
--xh-_tone-shift: var(--xh-color-neutral-950);
|
|
33
40
|
|
|
@@ -41,14 +48,19 @@
|
|
|
41
48
|
/* 控件的可操作区边界要 3:1,兑了底色的 --xh-_tone-border 六族全在 1.44–2.18,够不着。
|
|
42
49
|
这一支直接取主色本体;两族在各自的底上仍不够,在下面按主题单独兜 */
|
|
43
50
|
--xh-_tone-border-control: var(--xh-_tone);
|
|
44
|
-
/*
|
|
45
|
-
|
|
51
|
+
/* 装饰性强调(色条、指示条、锚点高亮这类)是非文字图形,同样要 3:1,
|
|
52
|
+
要求与可操作区边界一模一样,就直接跟着那一支走,连它按主题兜的两族一并继承。
|
|
53
|
+
要读得清的状态文字不在此列,那些走 --xh-_tone-fg */
|
|
54
|
+
--xh-_tone-soft: var(--xh-_tone-border-control);
|
|
55
|
+
/* 在普通背景上表达该语气的文字色:往前景色兑,浅色态变深、深色态变浅。
|
|
56
|
+
兑到 60% 是实测出来的:这一档要同时压得住淡底的静态/悬停/按下三态、面与抬起的面
|
|
57
|
+
共五种底,72% 时六族里有三族够不到 4.5(最低 3.66),60% 全部达标且留有余量 */
|
|
58
|
+
--xh-_tone-fg: color-mix(in oklab, var(--xh-_tone) 60%, var(--xh-fg-default));
|
|
46
59
|
}
|
|
47
60
|
|
|
48
61
|
[data-tone='brand'] {
|
|
49
|
-
--xh-_tone: var(--xh-
|
|
50
|
-
--xh-_tone-
|
|
51
|
-
--xh-_tone-on: var(--xh-color-neutral-0);
|
|
62
|
+
--xh-_tone: var(--xh-bg-brand);
|
|
63
|
+
--xh-_tone-on: var(--xh-fg-on-brand);
|
|
52
64
|
--xh-_tone-shift: var(--xh-color-neutral-950);
|
|
53
65
|
}
|
|
54
66
|
|
|
@@ -60,40 +72,37 @@
|
|
|
60
72
|
|
|
61
73
|
[data-tone='danger'] {
|
|
62
74
|
--xh-_tone: var(--xh-color-danger-600);
|
|
63
|
-
--xh-_tone-soft: var(--xh-color-danger-500);
|
|
64
75
|
--xh-_tone-on: var(--xh-color-neutral-0);
|
|
65
76
|
--xh-_tone-shift: var(--xh-color-neutral-950);
|
|
66
77
|
}
|
|
67
78
|
|
|
68
79
|
[data-tone='success'] {
|
|
69
80
|
--xh-_tone: var(--xh-color-success-600);
|
|
70
|
-
--xh-_tone-soft: var(--xh-color-success-500);
|
|
71
81
|
--xh-_tone-on: var(--xh-color-neutral-950);
|
|
72
82
|
--xh-_tone-shift: var(--xh-color-neutral-0);
|
|
73
83
|
}
|
|
74
84
|
|
|
75
85
|
[data-tone='warning'] {
|
|
76
86
|
--xh-_tone: var(--xh-color-warning-600);
|
|
77
|
-
--xh-_tone-soft: var(--xh-color-warning-500);
|
|
78
87
|
--xh-_tone-on: var(--xh-color-neutral-950);
|
|
79
88
|
--xh-_tone-shift: var(--xh-color-neutral-0);
|
|
80
89
|
}
|
|
81
90
|
|
|
82
91
|
[data-tone='info'] {
|
|
83
92
|
--xh-_tone: var(--xh-color-info-600);
|
|
84
|
-
--xh-_tone-soft: var(--xh-color-info-500);
|
|
85
93
|
--xh-_tone-on: var(--xh-color-neutral-950);
|
|
86
94
|
--xh-_tone-shift: var(--xh-color-neutral-0);
|
|
87
95
|
}
|
|
88
96
|
|
|
89
97
|
/* 主色本体在各自的底上有两族够不到 3:1:黄在白底上只有 2.70,中性在深色底上只有 2.54。
|
|
90
98
|
语气色是固定原语、不随主题翻,所以这两族只能按主题各兜一次。
|
|
91
|
-
浅色是缺省态(不写 data-theme
|
|
99
|
+
浅色是缺省态(不写 data-theme 也算浅色),深色靠属性选择器压过它。
|
|
100
|
+
data-theme 写在语气容器自己身上还是写在祖先上都算,两种用法都成立 */
|
|
92
101
|
[data-tone='warning'] {
|
|
93
102
|
--xh-_tone-border-control: var(--xh-color-warning-700);
|
|
94
103
|
}
|
|
95
104
|
|
|
96
|
-
[data-theme='dark'] [data-tone='warning'] {
|
|
105
|
+
:is([data-theme='dark'] *, [data-theme='dark'])[data-tone='warning'] {
|
|
97
106
|
--xh-_tone-border-control: var(--xh-color-warning-600);
|
|
98
107
|
}
|
|
99
108
|
|
|
@@ -101,7 +110,33 @@
|
|
|
101
110
|
--xh-_tone-border-control: var(--xh-color-neutral-600);
|
|
102
111
|
}
|
|
103
112
|
|
|
104
|
-
[data-theme='dark'] [data-tone='neutral'] {
|
|
113
|
+
:is([data-theme='dark'] *, [data-theme='dark'])[data-tone='neutral'] {
|
|
105
114
|
--xh-_tone-border-control: var(--xh-color-neutral-550);
|
|
106
115
|
}
|
|
116
|
+
|
|
117
|
+
/* 把语气色转成线性 sRGB 分量、按 WCAG 的权重算出相对亮度:低于 0.179 前景取白、
|
|
118
|
+
高于取黑,挪动方向取前景的反面。三个通道写同一个式子,算出来的是纯白或纯黑;
|
|
119
|
+
alpha 显式写 1,不然会连语气色的透明度一起继承过来。
|
|
120
|
+
探针按这里实际用到的整个形态测,只测得起 color(from …) 的引擎不会落进半截支持。
|
|
121
|
+
上面各族写死的那一份是兜底:引擎不认这条语法时整块丢弃,退回那一份 */
|
|
122
|
+
@supports (color: color(from red srgb-linear clamp(0, (0.179 - (0.2126 * r + 0.7152 * g + 0.0722 * b)) * infinity, 1) 0 0 / 1)) {
|
|
123
|
+
[data-tone] {
|
|
124
|
+
--xh-_tone-on: color(from var(--xh-_tone) srgb-linear
|
|
125
|
+
clamp(0, (0.179 - (0.2126 * r + 0.7152 * g + 0.0722 * b)) * infinity, 1)
|
|
126
|
+
clamp(0, (0.179 - (0.2126 * r + 0.7152 * g + 0.0722 * b)) * infinity, 1)
|
|
127
|
+
clamp(0, (0.179 - (0.2126 * r + 0.7152 * g + 0.0722 * b)) * infinity, 1) / 1);
|
|
128
|
+
--xh-_tone-shift: color(from var(--xh-_tone) srgb-linear
|
|
129
|
+
clamp(0, ((0.2126 * r + 0.7152 * g + 0.0722 * b) - 0.179) * infinity, 1)
|
|
130
|
+
clamp(0, ((0.2126 * r + 0.7152 * g + 0.0722 * b) - 0.179) * infinity, 1)
|
|
131
|
+
clamp(0, ((0.2126 * r + 0.7152 * g + 0.0722 * b) - 0.179) * infinity, 1) / 1);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* brand 的底与前景走语义令牌、随主题翻,所以它的 shift 也必须跟着翻,
|
|
136
|
+
否则深色下前景是深字而 shift 仍往深处挪,悬停与按下反而压低对比度
|
|
137
|
+
(实测 5.29 → 4.25 → 3.49,而不写 tone 的品牌链是 5.29 → 7.33 → 10.85)。
|
|
138
|
+
其余五族的底是固定原语、不随主题翻,shift 也就不必翻 */
|
|
139
|
+
:is([data-theme='dark'] *, [data-theme='dark'])[data-tone='brand'] {
|
|
140
|
+
--xh-_tone-shift: var(--xh-color-neutral-0);
|
|
141
|
+
}
|
|
107
142
|
}
|
package/css/toolbar.css
CHANGED
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
[data-scope='toolbar'][data-part='separator'] {
|
|
102
102
|
flex: none;
|
|
103
103
|
align-self: stretch;
|
|
104
|
-
border-radius: var(--xh-toolbar-separator-radius, var(--xh-
|
|
104
|
+
border-radius: var(--xh-toolbar-separator-radius, var(--xh-shape-pill));
|
|
105
105
|
background: var(--xh-toolbar-separator-color, var(--xh-border-default));
|
|
106
106
|
}
|
|
107
107
|
|