@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/checkbox.css
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
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
|
+
/* 定义 checkbox 样式。 */
|
|
7
|
+
|
|
8
|
+
@import '../family/action-control.css';
|
|
9
|
+
|
|
1
10
|
@layer xihan.components {
|
|
2
11
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
3
12
|
[data-scope='checkbox'] {
|
|
@@ -5,51 +14,83 @@
|
|
|
5
14
|
}
|
|
6
15
|
|
|
7
16
|
[data-scope='checkbox'][data-part='root'] {
|
|
8
|
-
/* 作者塞进指示符槽的图标跟着字号走,与皮肤画的兜底字形同一把尺 */
|
|
9
|
-
--xh-icon-size: var(--xh-checkbox-icon-size, var(--xh-glyph-size-text));
|
|
10
|
-
|
|
11
17
|
/* 尺寸档只换方框边长这一个私有槽,勾的字号按边长的比例跟着走;
|
|
12
18
|
指示器从 root 继承这两个槽,换档不必给每个部件各写一条选择器 */
|
|
13
19
|
--xh-_checkbox-box: var(--xh-control-indicator-md);
|
|
14
20
|
--xh-_checkbox-glyph: calc(var(--xh-_checkbox-box) * 0.75);
|
|
21
|
+
/* 作者塞进指示符槽的图标和兜底字形共用盒比例;显式 icon-size 仍可覆盖。 */
|
|
22
|
+
--xh-icon-size: var(--xh-checkbox-icon-size, var(--xh-_checkbox-glyph));
|
|
15
23
|
|
|
16
|
-
/*
|
|
17
|
-
--xh-_checkbox-accent: var(--xh-_tone, var(--xh-bg-brand));
|
|
24
|
+
/* 选中态是小面积控件边界,使用保证 3:1 的语气 control 色;没写 tone 时退回品牌底。 */
|
|
25
|
+
--xh-_checkbox-accent: var(--xh-_tone-border-control, var(--xh-bg-brand));
|
|
18
26
|
|
|
19
27
|
/* 实心底上的勾与横杠,同样没写 data-tone 时退回原来的品牌底前景色 */
|
|
20
28
|
--xh-_checkbox-on-accent: var(--xh-_tone-on, var(--xh-fg-on-brand));
|
|
21
29
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
/* 方框接 Action Control icon 档(§9.1 定尺方框):盒型、悬停 / 按下 / 禁用面、0.97 缩放与换底、粗指针热区、
|
|
31
|
+
焦点环由家族配方给,这里只把使用者槽映射到桥接槽。面按字段静息形态取值(§8.3):透明底 +
|
|
32
|
+
--xh-border-control 描边 + 无影,不消费海拔与顶光;悬停只把描边升一档,底不动;按下换到 200 档中性面
|
|
33
|
+
(白底承载);边长随 --xh-control-indicator-* 走,不取家族的 profile 尺寸。
|
|
34
|
+
常态 / 勾中 / 校验失败 / 只读只换下面四支私有槽,桥接槽的映射写一次 */
|
|
35
|
+
--xh-_checkbox-bg: var(--xh-checkbox-bg, transparent);
|
|
36
|
+
--xh-_checkbox-bg-pressed: var(--xh-checkbox-bg-pressed, var(--xh-bg-subtle-hover));
|
|
37
|
+
--xh-_checkbox-border: var(--xh-checkbox-border, var(--xh-border-control));
|
|
38
|
+
--xh-_checkbox-border-hover: var(--xh-checkbox-border-hover, var(--xh-border-control-hover));
|
|
39
|
+
|
|
40
|
+
--xh-action-visual-size: var(--xh-_checkbox-box);
|
|
41
|
+
--xh-action-min-inline-size: var(--xh-_checkbox-box);
|
|
42
|
+
--xh-action-radius: var(--xh-checkbox-radius, var(--xh-shape-inset));
|
|
43
|
+
--xh-action-bg-rest: var(--xh-_checkbox-bg);
|
|
44
|
+
--xh-action-bg-hover: var(--xh-_checkbox-bg);
|
|
45
|
+
--xh-action-bg-pressed: var(--xh-_checkbox-bg-pressed);
|
|
46
|
+
--xh-action-bg-focus-visible: var(--xh-_checkbox-bg);
|
|
47
|
+
--xh-action-bg-disabled: var(--xh-checkbox-bg-disabled, var(--xh-bg-subtle));
|
|
48
|
+
--xh-action-border-rest: var(--xh-_checkbox-border);
|
|
49
|
+
--xh-action-border-hover: var(--xh-_checkbox-border-hover);
|
|
50
|
+
--xh-action-border-pressed: var(--xh-_checkbox-border-hover);
|
|
51
|
+
--xh-action-border-focus-visible: var(--xh-_checkbox-border);
|
|
52
|
+
--xh-action-border-disabled: var(--xh-checkbox-border-disabled, var(--xh-border-default));
|
|
53
|
+
--xh-action-fg-rest: var(--xh-checkbox-fg, var(--xh-_checkbox-on-accent));
|
|
54
|
+
--xh-action-fg-hover: var(--xh-checkbox-fg, var(--xh-_checkbox-on-accent));
|
|
55
|
+
--xh-action-fg-pressed: var(--xh-checkbox-fg, var(--xh-_checkbox-on-accent));
|
|
56
|
+
--xh-action-fg-focus-visible: var(--xh-checkbox-fg, var(--xh-_checkbox-on-accent));
|
|
57
|
+
--xh-action-fg-disabled: var(--xh-checkbox-fg-disabled, var(--xh-fg-disabled));
|
|
58
|
+
--xh-action-shadow-rest: var(--xh-checkbox-shadow, none);
|
|
59
|
+
--xh-action-shadow-hover: var(--xh-checkbox-shadow, none);
|
|
60
|
+
--xh-action-shadow-pressed: var(--xh-checkbox-shadow, none);
|
|
61
|
+
--xh-action-shadow-focus-visible: var(--xh-checkbox-shadow, none);
|
|
62
|
+
--xh-action-shadow-disabled: var(--xh-checkbox-shadow, none);
|
|
63
|
+
|
|
64
|
+
/* 家族的 icon 档不写 padding-block;UA 给 button 的 1px 上下内距会把 16px 盒里的勾挤扁 */
|
|
28
65
|
padding: 0;
|
|
29
|
-
border: var(--xh-stroke-thin) solid var(--xh-checkbox-border, var(--xh-border-control));
|
|
30
|
-
border-radius: var(--xh-checkbox-radius, var(--xh-shape-inset));
|
|
31
|
-
background: var(--xh-checkbox-bg, var(--xh-bg-canvas));
|
|
32
|
-
color: var(--xh-checkbox-fg, var(--xh-_checkbox-on-accent));
|
|
33
|
-
cursor: pointer;
|
|
34
|
-
transition:
|
|
35
|
-
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
36
|
-
border-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
37
66
|
}
|
|
38
67
|
|
|
39
68
|
/* 半选与全选同样是「有值」,方框都得填上:
|
|
40
|
-
|
|
69
|
+
只填全选的话,半选那条横杠是实心底上的前景色,压在同色画布上等于没画。
|
|
70
|
+
面是实心的,环色与面同族,画在面里就看不出来;环改取面自己的前景色——
|
|
71
|
+
那一族色本来就要在这块面上把字读清楚,与面的对比是按可读性定的。
|
|
72
|
+
勾中的方框描边与底同色,悬停不换描边——填色本身已经在表达状态;按下换到语气的 active 档 */
|
|
41
73
|
[data-scope='checkbox'][data-part='root'][data-state='checked'],
|
|
42
74
|
[data-scope='checkbox'][data-part='root'][data-state='indeterminate'] {
|
|
43
|
-
|
|
44
|
-
|
|
75
|
+
--xh-_checkbox-bg: var(--xh-checkbox-bg-checked, var(--xh-_checkbox-accent));
|
|
76
|
+
--xh-_checkbox-bg-pressed: var(--xh-checkbox-bg-checked-pressed, var(--xh-_tone-active, var(--xh-bg-brand-active)));
|
|
77
|
+
--xh-_checkbox-border: var(--xh-checkbox-border-checked, var(--xh-_checkbox-accent));
|
|
78
|
+
--xh-_checkbox-border-hover: var(--xh-checkbox-border-checked, var(--xh-_checkbox-accent));
|
|
79
|
+
--xh-action-ring-color-focus-visible: currentColor;
|
|
45
80
|
}
|
|
46
81
|
|
|
47
|
-
/*
|
|
82
|
+
/* 高对比轴把未选中边界提到 strong;有值两态仍由实心语气底与配对勾形表达。 */
|
|
83
|
+
:where([data-contrast='more']) [data-scope='checkbox'][data-part='root'][data-state='unchecked'] {
|
|
84
|
+
--xh-_checkbox-border: var(--xh-checkbox-border, var(--xh-border-strong));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* 校验失败:方框描边转警示色,悬停与按下都不换回控件边。未勾时只有描边,勾上后填充仍走语气色,
|
|
48
88
|
两者不打架——描边压在 checked 规则之后,选择器同特指度靠书写顺序取胜 */
|
|
49
89
|
[data-scope='checkbox'][data-part='root'][data-invalid],
|
|
50
90
|
[data-scope='checkbox'][data-part='root'][data-state='checked'][data-invalid],
|
|
51
91
|
[data-scope='checkbox'][data-part='root'][data-state='indeterminate'][data-invalid] {
|
|
52
|
-
border
|
|
92
|
+
--xh-_checkbox-border: var(--xh-checkbox-border-invalid, var(--xh-border-invalid));
|
|
93
|
+
--xh-_checkbox-border-hover: var(--xh-checkbox-border-invalid, var(--xh-border-invalid));
|
|
53
94
|
}
|
|
54
95
|
|
|
55
96
|
/* 文字随方框一起转警示色:给了默认插槽时外层是 <label>,方框自己的描边够不到那段文字 */
|
|
@@ -58,14 +99,31 @@
|
|
|
58
99
|
color: var(--xh-checkbox-fg-invalid, var(--xh-fg-danger));
|
|
59
100
|
}
|
|
60
101
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
102
|
+
/* 悬停标签文字时也让控制盒回应,整行可点不再只有移到 16px 小盒上才看得出来:
|
|
103
|
+
指针落在方框上时由家族的悬停块换到 --xh-action-border-hover,落在标签文字上时这里补同一档;
|
|
104
|
+
未勾选的方框描边升一档(字段静息 → hover 的同一条阶梯,§8.3),勾中 / 校验失败的方框由上面的映射钉住不换 */
|
|
105
|
+
@media (hover: hover) {
|
|
106
|
+
[data-scope='checkbox'][data-part='label']:not([data-disabled]):not([data-readonly]):hover
|
|
107
|
+
[data-scope='checkbox'][data-part='root'] {
|
|
108
|
+
border-color: var(--xh-_checkbox-border-hover);
|
|
109
|
+
}
|
|
64
110
|
}
|
|
65
111
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
112
|
+
/* 只读改不动值,但不是禁用:颜色与不透明度都照常,只把「可点」这个暗示与悬停 / 按下的回应一起收回来。
|
|
113
|
+
方框与整行文字一起收——给了默认插槽时外层是 <label>,只收方框的话文字那半仍摆着手型。
|
|
114
|
+
排掉禁用是因为这条选择器权重高过禁用那条,不排就会把 not-allowed 覆盖回 default */
|
|
115
|
+
[data-scope='checkbox'][data-part='root'][data-readonly]:not([data-disabled]) {
|
|
116
|
+
--xh-_checkbox-bg-pressed: var(--xh-_checkbox-bg);
|
|
117
|
+
--xh-_checkbox-border-hover: var(--xh-_checkbox-border);
|
|
118
|
+
--xh-action-scale-pressed: none;
|
|
119
|
+
--xh-action-cursor-rest: default;
|
|
120
|
+
--xh-action-cursor-hover: default;
|
|
121
|
+
--xh-action-cursor-pressed: default;
|
|
122
|
+
--xh-action-cursor-focus-visible: default;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
[data-scope='checkbox'][data-part='label'][data-readonly]:not([data-disabled]) {
|
|
126
|
+
cursor: default;
|
|
69
127
|
}
|
|
70
128
|
|
|
71
129
|
/* —— 尺寸 —— */
|
|
@@ -78,14 +136,39 @@
|
|
|
78
136
|
--xh-_checkbox-box: var(--xh-control-indicator-lg);
|
|
79
137
|
}
|
|
80
138
|
|
|
139
|
+
/* 鼠标落点:方框只有一档指示符那么大,命中区靠一枚绝对定位的伪元素往外扩,
|
|
140
|
+
盒子本身一动不动——放大盒子会把并排的文字挤开。常态外扩 6px,最小的 sm 档由 12px 到 24px;
|
|
141
|
+
粗指针下的 44px 热区由家族 icon 档的 ::after 给,这里只把起点交还 */
|
|
142
|
+
[data-scope='checkbox'][data-part='root']::after {
|
|
143
|
+
content: '';
|
|
144
|
+
position: absolute;
|
|
145
|
+
inset: calc(-1 * var(--xh-space-1_5));
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* 粗指针:家族在同一个 ::after 上写 44×44 的盒、50% 起点与 -50% 平移把它钉在方框中心。
|
|
149
|
+
上面那条 inset 负值特指度更高,留着的话起点被钉在 -6px、再被家族的平移拉走半个盒,
|
|
150
|
+
热区的中心落到方框左上角外面,方框右下大半摸不着 */
|
|
151
|
+
@media (pointer: coarse) {
|
|
152
|
+
[data-scope='checkbox'][data-part='root']::after {
|
|
153
|
+
inset-block: 50% auto;
|
|
154
|
+
inset-inline: 50% auto;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
81
158
|
[data-scope='checkbox'][data-part='indicator'] {
|
|
82
159
|
display: inline-flex;
|
|
83
160
|
align-items: center;
|
|
84
161
|
justify-content: center;
|
|
85
162
|
inline-size: 100%;
|
|
86
163
|
block-size: 100%;
|
|
164
|
+
opacity: 0;
|
|
87
165
|
line-height: var(--xh-leading-none);
|
|
88
166
|
font-size: var(--xh-_checkbox-glyph);
|
|
167
|
+
pointer-events: none;
|
|
168
|
+
scale: var(--xh-motion-scale-enter);
|
|
169
|
+
transition:
|
|
170
|
+
opacity var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
171
|
+
scale var(--xh-motion-duration-micro) var(--xh-motion-ease-enter-strong);
|
|
89
172
|
}
|
|
90
173
|
|
|
91
174
|
/* 没写内容就由皮肤画;作者往部件里塞了自己的图形,这条规则即不命中 */
|
|
@@ -100,8 +183,9 @@
|
|
|
100
183
|
mask: var(--xh-glyph-mark-check) center / contain no-repeat;
|
|
101
184
|
}
|
|
102
185
|
|
|
103
|
-
[data-scope='checkbox'][data-part='indicator'][data-state='
|
|
104
|
-
|
|
186
|
+
[data-scope='checkbox'][data-part='indicator']:is([data-state='checked'], [data-state='indeterminate']) {
|
|
187
|
+
opacity: 1;
|
|
188
|
+
scale: 1;
|
|
105
189
|
}
|
|
106
190
|
|
|
107
191
|
/* 半选换一枚横杠字形盖住勾:aria-checked=mixed 在视觉上也得与「全选」分得开。
|
|
@@ -122,23 +206,46 @@
|
|
|
122
206
|
mask: var(--xh-glyph-mark-minus) center / contain no-repeat;
|
|
123
207
|
}
|
|
124
208
|
|
|
125
|
-
/*
|
|
209
|
+
/* 禁用时横杠也走置灰色:它自己画底色,不从 root 的 color 继承 */
|
|
210
|
+
[data-scope='checkbox'][data-part='root'][data-disabled]
|
|
211
|
+
[data-scope='checkbox'][data-part='indicator'][data-state='indeterminate']::after {
|
|
212
|
+
background-color: var(--xh-checkbox-fg-disabled, var(--xh-fg-disabled));
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* —— 带文字的整行:<label> 包住控件与文字,与 checkbox-group 的条目、switch 的标签同一副样子 ——
|
|
216
|
+
文字是控件自己的文字,字号随 size 档取 --xh-control-font-*(§6.4 控件字号随档);
|
|
217
|
+
行高取正文档,长文字可以自然换行 */
|
|
126
218
|
[data-scope='checkbox'][data-part='label'] {
|
|
219
|
+
--xh-_checkbox-label-gap: var(--xh-control-gap-md);
|
|
220
|
+
--xh-_checkbox-label-font-size: var(--xh-control-font-md);
|
|
221
|
+
|
|
127
222
|
display: inline-flex;
|
|
128
223
|
align-items: center;
|
|
129
|
-
gap: var(--xh-checkbox-label-gap, var(--xh-
|
|
224
|
+
gap: var(--xh-checkbox-label-gap, var(--xh-_checkbox-label-gap));
|
|
130
225
|
color: var(--xh-checkbox-label-fg, var(--xh-fg-default));
|
|
131
|
-
font-size: var(--xh-checkbox-label-font-size, var(--xh-
|
|
132
|
-
line-height: var(--xh-leading-
|
|
226
|
+
font-size: var(--xh-checkbox-label-font-size, var(--xh-_checkbox-label-font-size));
|
|
227
|
+
line-height: var(--xh-checkbox-label-leading, var(--xh-leading-normal));
|
|
133
228
|
cursor: pointer;
|
|
134
229
|
}
|
|
135
230
|
|
|
231
|
+
[data-scope='checkbox'][data-part='label'][data-size='sm'] {
|
|
232
|
+
--xh-_checkbox-label-gap: var(--xh-control-gap-sm);
|
|
233
|
+
--xh-_checkbox-label-font-size: var(--xh-control-font-sm);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
[data-scope='checkbox'][data-part='label'][data-size='lg'] {
|
|
237
|
+
--xh-_checkbox-label-gap: var(--xh-control-gap-lg);
|
|
238
|
+
--xh-_checkbox-label-font-size: var(--xh-control-font-lg);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/* 禁用标签色统一 --xh-fg-subtle(§6.4) */
|
|
136
242
|
[data-scope='checkbox'][data-part='label'][data-disabled] {
|
|
137
|
-
color: var(--xh-checkbox-label-fg-disabled, var(--xh-fg-
|
|
243
|
+
color: var(--xh-checkbox-label-fg-disabled, var(--xh-fg-subtle));
|
|
138
244
|
cursor: not-allowed;
|
|
139
245
|
}
|
|
140
246
|
|
|
141
247
|
[data-scope='checkbox'][data-part='text'] {
|
|
248
|
+
min-inline-size: 0;
|
|
142
249
|
color: inherit;
|
|
143
250
|
user-select: none;
|
|
144
251
|
}
|
|
@@ -150,4 +257,34 @@
|
|
|
150
257
|
[data-scope='checkbox'][data-part='label'][hidden] {
|
|
151
258
|
display: none;
|
|
152
259
|
}
|
|
260
|
+
|
|
261
|
+
@media (forced-colors: active) {
|
|
262
|
+
/* 真实 border 保住盒,系统前景重新画出勾与半选横杠。 */
|
|
263
|
+
[data-scope='checkbox'][data-part='indicator']:empty::before,
|
|
264
|
+
[data-scope='checkbox'][data-part='indicator'][data-state='indeterminate']::after {
|
|
265
|
+
background-color: CanvasText;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
[data-scope='checkbox'][data-part='root'][data-disabled]
|
|
269
|
+
[data-scope='checkbox'][data-part='indicator']:empty::before,
|
|
270
|
+
[data-scope='checkbox'][data-part='root'][data-disabled]
|
|
271
|
+
[data-scope='checkbox'][data-part='indicator'][data-state='indeterminate']::after {
|
|
272
|
+
background-color: GrayText;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
@media print {
|
|
277
|
+
/* 打印默认丢底色:勾上与半选两档全靠实心底加底上那枚浅色标记表达,落到纸上与没勾的一模一样
|
|
278
|
+
(标记本身也是一块 background,同样印不出来)。改用描边这条印得出来的通道:
|
|
279
|
+
两档各加粗一级把方框分出来,半选再换成虚线,三档在纸上各不相同。
|
|
280
|
+
描边吃进定尺盒里(reset 层已把 box-sizing 收成 border-box),方框边长不变。 */
|
|
281
|
+
[data-scope='checkbox'][data-part='root'][data-state='checked'] {
|
|
282
|
+
border-width: var(--xh-stroke-thick);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
[data-scope='checkbox'][data-part='root'][data-state='indeterminate'] {
|
|
286
|
+
border-width: var(--xh-stroke-thick);
|
|
287
|
+
border-style: dashed;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
153
290
|
}
|