@xihan-ui/styles 2.1.0 → 3.1.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 +1261 -0
- package/README.md +6 -1
- package/component-tokens.d.ts +533 -96
- package/components.tokens.json +35461 -26045
- package/css/accordion.css +34 -8
- package/css/alert.css +59 -1
- package/css/anchor.css +46 -8
- package/css/approval.css +116 -76
- package/css/avatar-group.css +1 -1
- package/css/avatar.css +13 -5
- package/css/back-top.css +61 -42
- package/css/badge.css +62 -12
- package/css/bar-code.css +1 -1
- package/css/breadcrumb.css +62 -3
- package/css/button-group.css +4 -4
- package/css/button.css +67 -19
- package/css/calendar-picker.css +19 -0
- package/css/calendar-range-picker.css +39 -2
- package/css/card.css +115 -1
- package/css/carousel.css +148 -43
- package/css/cartesian-chart.css +830 -0
- package/css/cascader.css +181 -65
- package/css/checkbox-group.css +59 -89
- package/css/checkbox.css +16 -49
- package/css/citation.css +470 -0
- package/css/clipboard.css +20 -63
- package/css/code-view.css +101 -6
- package/css/collapsible.css +34 -8
- package/css/color-field.css +18 -0
- package/css/color-picker.css +128 -50
- package/css/color-slider.css +22 -15
- package/css/color-swatch-picker.css +3 -1
- package/css/combobox.css +80 -33
- package/css/command.css +45 -43
- package/css/context-menu.css +39 -22
- package/css/date-field.css +56 -0
- package/css/date-picker.css +132 -26
- package/css/date-range-picker.css +337 -14
- package/css/description.css +17 -1
- package/css/descriptions.css +42 -0
- package/css/dialog.css +94 -36
- package/css/diff-view.css +97 -12
- package/css/download-trigger.css +44 -78
- package/css/drawer.css +160 -119
- package/css/editable.css +19 -0
- package/css/empty-state.css +7 -6
- package/css/field-array.css +36 -0
- package/css/field.css +20 -18
- package/css/file-upload.css +125 -135
- package/css/flex.css +324 -8
- package/css/float-button.css +263 -38
- package/css/floating-panel.css +53 -19
- package/css/form.css +31 -17
- package/css/funnel-chart.css +106 -0
- package/css/graph-chart.css +205 -0
- package/css/grid-list.css +235 -0
- package/css/grid.css +252 -1
- package/css/heatmap.css +119 -36
- package/css/hierarchy-chart.css +298 -0
- package/css/hover-card.css +31 -14
- package/css/icon.css +100 -0
- package/css/image-cropper.css +33 -7
- package/css/image-viewer.css +167 -22
- package/css/image.css +23 -4
- package/css/input-group.css +11 -13
- package/css/json-viewer.css +50 -2
- package/css/layout.css +68 -18
- package/css/liquid.css +106 -0
- package/css/list.css +1 -1
- package/css/listbox.css +46 -6
- package/css/loading-bar.css +27 -13
- package/css/log.css +129 -33
- package/css/markdown-stream.css +1 -1
- package/css/marquee.css +163 -7
- package/css/matrix-code.css +1 -1
- package/css/mention.css +35 -19
- package/css/menu.css +35 -21
- package/css/menubar.css +36 -20
- package/css/message-feed.css +172 -51
- package/css/navigation-menu.css +172 -11
- package/css/notification.css +435 -108
- package/css/number-field.css +22 -0
- package/css/page-header.css +3 -1
- package/css/pagination.css +126 -24
- package/css/password-input.css +40 -8
- package/css/pie-chart.css +247 -0
- package/css/popconfirm.css +44 -50
- package/css/popover.css +50 -14
- package/css/progress.css +308 -10
- package/css/prompt-input.css +36 -0
- package/css/question-flow.css +97 -57
- package/css/radar-chart.css +233 -0
- package/css/radio-group.css +363 -5
- package/css/rating.css +21 -23
- package/css/reasoning.css +61 -54
- package/css/resizable.css +6 -1
- package/css/sankey-chart.css +174 -0
- package/css/scroll-area.css +32 -0
- package/css/scrollbar.css +1 -1
- package/css/select.css +74 -55
- package/css/side-nav.css +173 -24
- package/css/signature-pad.css +16 -1
- package/css/skeleton.css +13 -14
- package/css/slider.css +35 -13
- package/css/sortable.css +37 -7
- package/css/sparkline.css +164 -0
- package/css/spinner.css +50 -22
- package/css/splitter.css +7 -1
- package/css/statistic.css +10 -0
- package/css/steps.css +248 -29
- package/css/switch.css +23 -48
- package/css/table.css +175 -118
- package/css/tabs.css +231 -19
- package/css/tag-group.css +27 -3
- package/css/tag.css +53 -12
- package/css/tags-input.css +40 -3
- package/css/text-field.css +19 -0
- package/css/time-field.css +20 -1
- package/css/time-picker.css +103 -17
- package/css/time-range-picker.css +45 -16
- package/css/timeline.css +1 -1
- package/css/toggle-group.css +4 -4
- package/css/toggle.css +4 -3
- package/css/tool-call.css +59 -51
- package/css/toolbar.css +101 -3
- package/css/tooltip.css +15 -2
- package/css/tour.css +42 -12
- package/css/transfer.css +98 -75
- package/css/tree-select.css +232 -53
- package/css/tree.css +271 -55
- package/css/truncate.css +55 -12
- package/css/typography.css +93 -0
- package/css/virtualizer.css +56 -0
- package/css/watermark.css +23 -0
- package/family/action-control.css +14 -5
- package/family/chart.css +480 -0
- package/family/check-mark.css +94 -0
- package/family/choice-card.css +97 -0
- package/family/collection-item.css +9 -15
- package/family/field-chrome.css +1 -12
- package/family/loading-ring.css +95 -0
- package/family/material.css +72 -0
- package/family/menu-choice.css +56 -0
- package/family/motion.css +207 -10
- package/family/tag-list.css +59 -0
- package/index.css +13824 -4030
- package/index.unlayered.css +13403 -3605
- package/package.json +20 -8
- package/css/gradient-text.css +0 -91
- package/css/icon-wrapper.css +0 -81
- package/css/segmented.css +0 -280
- package/css/toast.css +0 -499
package/css/reasoning.css
CHANGED
|
@@ -16,15 +16,14 @@
|
|
|
16
16
|
--xh-reasoning-skin: 1;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
/*
|
|
20
|
-
|
|
19
|
+
/* 一张描边面:--xh-border-default 描边 + surface 底 + 无影(静态内容面),与同族的 ToolCall 等一致。
|
|
20
|
+
白底承载开关:向它下发 hover 100 → pressed 200 的阶梯,淡底档在形态规则里改成 200 → 300 */
|
|
21
21
|
[data-scope='reasoning'][data-part='root'] {
|
|
22
|
-
--xh-action-host-bg-hover: var(--xh-bg-subtle
|
|
23
|
-
--xh-action-host-bg-pressed: var(--xh-bg-subtle-
|
|
22
|
+
--xh-action-host-bg-hover: var(--xh-bg-subtle);
|
|
23
|
+
--xh-action-host-bg-pressed: var(--xh-bg-subtle-hover);
|
|
24
24
|
|
|
25
|
-
/*
|
|
26
|
-
|
|
27
|
-
--xh-_reasoning-icon-size: var(--xh-glyph-size-sm);
|
|
25
|
+
/* 作者塞进两个图形位的图标与皮肤画的兜底字形同一把尺:按档取,与开关的家族档同步 */
|
|
26
|
+
--xh-_reasoning-icon-size: var(--xh-glyph-size-md);
|
|
28
27
|
--xh-icon-size: var(--xh-reasoning-icon-size, var(--xh-_reasoning-icon-size));
|
|
29
28
|
|
|
30
29
|
/* 影另落一份进私有槽给语气档:它要把影与左侧色条叠成一条 box-shadow,缺省无影写成零影占位 */
|
|
@@ -32,15 +31,15 @@
|
|
|
32
31
|
|
|
33
32
|
/* 尺寸缺省档:不写 data-size 时的取值。三档都只写这三个私有槽,
|
|
34
33
|
公开槽留在读处当首选,作者在祖先上设的覆盖才赢得过档位声明 */
|
|
35
|
-
--xh-_reasoning-px: var(--xh-space-
|
|
36
|
-
--xh-_reasoning-py: var(--xh-space-
|
|
37
|
-
--xh-_reasoning-font-size: var(--xh-control-font-
|
|
34
|
+
--xh-_reasoning-px: var(--xh-space-4);
|
|
35
|
+
--xh-_reasoning-py: var(--xh-space-4);
|
|
36
|
+
--xh-_reasoning-font-size: var(--xh-control-font-md);
|
|
38
37
|
|
|
39
38
|
display: block;
|
|
40
39
|
overflow: hidden;
|
|
41
|
-
border: var(--xh-stroke-thin) solid
|
|
40
|
+
border: var(--xh-stroke-thin) solid var(--xh-reasoning-border, var(--xh-border-default));
|
|
42
41
|
border-radius: var(--xh-reasoning-radius, var(--xh-shape-surface));
|
|
43
|
-
background: var(--xh-reasoning-bg, var(--xh-bg-
|
|
42
|
+
background: var(--xh-reasoning-bg, var(--xh-bg-surface));
|
|
44
43
|
box-shadow: var(--xh-reasoning-shadow, none);
|
|
45
44
|
}
|
|
46
45
|
|
|
@@ -50,17 +49,21 @@
|
|
|
50
49
|
}
|
|
51
50
|
|
|
52
51
|
/* —— 形态 —— */
|
|
53
|
-
/* 缺省档即
|
|
54
|
-
/* 描边分区:--xh-border-default 描边 + surface 底(静态内容面);
|
|
55
|
-
白底承载面把开关的阶梯改回 hover 100 → pressed 200 */
|
|
52
|
+
/* 缺省档即 outline;显式写 outline 时与缺省同形 */
|
|
56
53
|
[data-scope='reasoning'][data-part='root'][data-variant='outline'] {
|
|
57
|
-
--xh-action-host-bg-hover: var(--xh-bg-subtle);
|
|
58
|
-
--xh-action-host-bg-pressed: var(--xh-bg-subtle-hover);
|
|
59
|
-
|
|
60
54
|
border: var(--xh-stroke-thin) solid var(--xh-reasoning-border, var(--xh-border-default));
|
|
61
55
|
background: var(--xh-reasoning-bg, var(--xh-bg-surface));
|
|
62
56
|
}
|
|
63
57
|
|
|
58
|
+
/* 底色分区:--xh-bg-subtle 底 + 透明边位 + 无影;淡底承载面向开关下发 hover 200 → pressed 300 */
|
|
59
|
+
[data-scope='reasoning'][data-part='root'][data-variant='subtle'] {
|
|
60
|
+
--xh-action-host-bg-hover: var(--xh-bg-subtle-hover);
|
|
61
|
+
--xh-action-host-bg-pressed: var(--xh-bg-subtle-active);
|
|
62
|
+
|
|
63
|
+
border-color: transparent;
|
|
64
|
+
background: var(--xh-reasoning-bg, var(--xh-bg-subtle));
|
|
65
|
+
}
|
|
66
|
+
|
|
64
67
|
/* 无壳内联:思考过程贴着正文走,不占一块面;开关落在正文的白底上,阶梯同 outline 档 */
|
|
65
68
|
[data-scope='reasoning'][data-part='root'][data-variant='ghost'] {
|
|
66
69
|
--xh-action-host-bg-hover: var(--xh-bg-subtle);
|
|
@@ -118,14 +121,18 @@
|
|
|
118
121
|
display: none;
|
|
119
122
|
}
|
|
120
123
|
|
|
121
|
-
/*
|
|
124
|
+
/* 指示随开合转向,纯装饰。转向与正文开合取同一档时长,两件事一起收尾:收起取 collapse 档,展开取 expand 档 */
|
|
122
125
|
[data-scope='reasoning'][data-part='indicator'] {
|
|
123
126
|
display: inline-flex;
|
|
124
127
|
flex: none;
|
|
125
128
|
align-items: center;
|
|
126
129
|
justify-content: center;
|
|
127
130
|
color: var(--xh-reasoning-indicator-fg, var(--xh-fg-subtle));
|
|
128
|
-
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* 首帧就在的朝向直接呈现(data-instant),第一次开合起才转 */
|
|
134
|
+
[data-scope='reasoning'][data-part='indicator']:not([data-instant]) {
|
|
135
|
+
transition: rotate var(--xh-motion-duration-collapse) var(--xh-motion-ease-enter-strong);
|
|
129
136
|
}
|
|
130
137
|
|
|
131
138
|
/* 没写内容就由皮肤画;作者往部件里塞了自己的图形,这条规则即不命中 */
|
|
@@ -144,6 +151,10 @@
|
|
|
144
151
|
rotate: 180deg;
|
|
145
152
|
}
|
|
146
153
|
|
|
154
|
+
[data-scope='reasoning'][data-part='indicator'][data-state='open']:not([data-instant]) {
|
|
155
|
+
transition: rotate var(--xh-motion-duration-expand) var(--xh-motion-ease-enter-strong);
|
|
156
|
+
}
|
|
157
|
+
|
|
147
158
|
[data-scope='reasoning'][data-part='indicator'][hidden] {
|
|
148
159
|
display: none;
|
|
149
160
|
}
|
|
@@ -174,7 +185,7 @@
|
|
|
174
185
|
-webkit-background-clip: text;
|
|
175
186
|
background-clip: text;
|
|
176
187
|
color: transparent;
|
|
177
|
-
animation: xh-
|
|
188
|
+
animation: xh-shimmer var(--xh-reasoning-shimmer-duration, var(--xh-motion-loop-shimmer)) var(--xh-motion-ease-loop) infinite;
|
|
178
189
|
}
|
|
179
190
|
|
|
180
191
|
/*
|
|
@@ -213,10 +224,10 @@
|
|
|
213
224
|
display: none;
|
|
214
225
|
}
|
|
215
226
|
|
|
216
|
-
/*
|
|
217
|
-
[data-scope='reasoning'][data-part='label']:not([data-streaming]),
|
|
218
|
-
[data-scope='reasoning'][data-part='duration']:not([data-streaming]) {
|
|
219
|
-
animation: xh-
|
|
227
|
+
/* 想完那一下两句文案整句换掉,淡入接住这次替换;首帧就已想完的直接呈现(data-instant) */
|
|
228
|
+
[data-scope='reasoning'][data-part='label']:not([data-streaming], [data-instant]),
|
|
229
|
+
[data-scope='reasoning'][data-part='duration']:not([data-streaming], [data-instant]) {
|
|
230
|
+
animation: xh-fade-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong) both;
|
|
220
231
|
}
|
|
221
232
|
|
|
222
233
|
/*
|
|
@@ -243,35 +254,34 @@
|
|
|
243
254
|
line-height: var(--xh-reasoning-content-leading, var(--xh-text-prose-leading));
|
|
244
255
|
}
|
|
245
256
|
|
|
246
|
-
/*
|
|
247
|
-
[data-scope='reasoning'][data-part='content'][data-state='open'] {
|
|
248
|
-
|
|
249
|
-
animation: xh-disclosure-expand var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
|
|
257
|
+
/* 展开与收起只在开合时播:首帧就在的展开 / 收起直接呈现(data-instant) */
|
|
258
|
+
[data-scope='reasoning'][data-part='content'][data-state='open']:not([data-instant]) {
|
|
259
|
+
animation: xh-disclosure-expand var(--xh-motion-duration-expand) var(--xh-motion-ease-enter-strong);
|
|
250
260
|
}
|
|
251
261
|
|
|
252
|
-
[data-scope='reasoning'][data-part='content'][data-state='closed'] {
|
|
253
|
-
animation: xh-disclosure-collapse var(--xh-motion-duration-
|
|
262
|
+
[data-scope='reasoning'][data-part='content'][data-state='closed']:not([data-instant]) {
|
|
263
|
+
animation: xh-disclosure-collapse var(--xh-motion-duration-collapse) var(--xh-motion-ease-exit) forwards;
|
|
254
264
|
}
|
|
255
265
|
|
|
256
266
|
/* 尺寸档改内衬、字号与图标档 */
|
|
257
267
|
[data-scope='reasoning'][data-part='root'][data-size='sm'] {
|
|
258
268
|
--xh-_reasoning-icon-size: var(--xh-glyph-size-sm);
|
|
259
|
-
--xh-_reasoning-px: var(--xh-space-
|
|
260
|
-
--xh-_reasoning-py: var(--xh-space-
|
|
269
|
+
--xh-_reasoning-px: var(--xh-space-3);
|
|
270
|
+
--xh-_reasoning-py: var(--xh-space-3);
|
|
261
271
|
--xh-_reasoning-font-size: var(--xh-control-font-sm);
|
|
262
272
|
}
|
|
263
273
|
|
|
264
274
|
[data-scope='reasoning'][data-part='root'][data-size='md'] {
|
|
265
275
|
--xh-_reasoning-icon-size: var(--xh-glyph-size-md);
|
|
266
|
-
--xh-_reasoning-px: var(--xh-space-
|
|
267
|
-
--xh-_reasoning-py: var(--xh-space-
|
|
276
|
+
--xh-_reasoning-px: var(--xh-space-4);
|
|
277
|
+
--xh-_reasoning-py: var(--xh-space-4);
|
|
268
278
|
--xh-_reasoning-font-size: var(--xh-control-font-md);
|
|
269
279
|
}
|
|
270
280
|
|
|
271
281
|
[data-scope='reasoning'][data-part='root'][data-size='lg'] {
|
|
272
282
|
--xh-_reasoning-icon-size: var(--xh-glyph-size-lg);
|
|
273
|
-
--xh-_reasoning-px: var(--xh-space-
|
|
274
|
-
--xh-_reasoning-py: var(--xh-space-
|
|
283
|
+
--xh-_reasoning-px: var(--xh-space-5);
|
|
284
|
+
--xh-_reasoning-py: var(--xh-space-5);
|
|
275
285
|
--xh-_reasoning-font-size: var(--xh-control-font-lg);
|
|
276
286
|
}
|
|
277
287
|
|
|
@@ -281,31 +291,28 @@
|
|
|
281
291
|
inset var(--xh-reasoning-tone-bar, var(--xh-stroke-thick)) 0 0 0 var(--xh-reasoning-tone-fg, var(--xh-_tone-soft, var(--xh-bg-brand))),
|
|
282
292
|
var(--xh-_reasoning-shadow);
|
|
283
293
|
}
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
@layer xihan.motion {
|
|
287
|
-
/* 文案整句换掉时接住这次替换 */
|
|
288
|
-
@keyframes xh-reasoning-fade-in {
|
|
289
|
-
from {
|
|
290
|
-
opacity: 0;
|
|
291
|
-
}
|
|
292
294
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
+
@media (forced-colors: active) {
|
|
296
|
+
/* 兜底字形是 mask 挖出来的一块底色,这一档里底色被系统换成 Canvas,字形跟着消失。
|
|
297
|
+
字形退出强制换色、直接写系统色(不能取 currentColor:退出强制换色的伪元素读到的是被系统换掉之前的作者色):
|
|
298
|
+
按钮面上取 ButtonText,悬停与按下时家族把按钮涂成 Highlight、字形换 HighlightText;
|
|
299
|
+
禁用取 GrayText */
|
|
300
|
+
[data-scope='reasoning'][data-part='indicator']:empty::before {
|
|
301
|
+
forced-color-adjust: none;
|
|
302
|
+
background-color: ButtonText;
|
|
295
303
|
}
|
|
296
|
-
}
|
|
297
304
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
from {
|
|
301
|
-
background-position: 150% center;
|
|
305
|
+
[data-scope='reasoning'][data-part='trigger']:not([data-disabled]):not([data-loading]):is(:hover, :active, [data-pressed]) [data-scope='reasoning'][data-part='indicator']:empty::before {
|
|
306
|
+
background-color: HighlightText;
|
|
302
307
|
}
|
|
303
308
|
|
|
304
|
-
|
|
305
|
-
background-
|
|
309
|
+
[data-scope='reasoning'][data-part='trigger'][data-disabled] [data-scope='reasoning'][data-part='indicator']:empty::before {
|
|
310
|
+
background-color: GrayText;
|
|
306
311
|
}
|
|
307
312
|
}
|
|
313
|
+
}
|
|
308
314
|
|
|
315
|
+
@layer xihan.motion {
|
|
309
316
|
@media print {
|
|
310
317
|
/* 打印:动画会被定格在任意一帧——转了一半的圈、扫到一半的微光。这里换成静止的表达,
|
|
311
318
|
取值与减弱动效那一档相同。两档各写一块、不并进一条媒体查询列表:减弱动效另有一份
|
package/css/resizable.css
CHANGED
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
background: var(--xh-_resizable-indicator-color);
|
|
62
62
|
pointer-events: none;
|
|
63
63
|
transition:
|
|
64
|
-
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
64
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
65
65
|
border-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -124,6 +124,11 @@
|
|
|
124
124
|
translate: -50% 0;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
+
/* 起点是逻辑属性、平移是物理通道:rtl 下行内分量掉头,指示条才落回把手正中 */
|
|
128
|
+
[data-scope='resizable'][data-part='handle']:is([data-edge='n'], [data-edge='s']):dir(rtl)::after {
|
|
129
|
+
translate: 50% 0;
|
|
130
|
+
}
|
|
131
|
+
|
|
127
132
|
[data-scope='resizable'][data-part='handle'][data-edge='n']::after {
|
|
128
133
|
inset-block-start: var(--xh-resizable-indicator-inset, 0);
|
|
129
134
|
}
|
|
@@ -0,0 +1,174 @@
|
|
|
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
|
+
/* 定义 sankey chart 样式。 */
|
|
7
|
+
|
|
8
|
+
/* 标题、视口、图例、提示框、空态与焦点环走 Chart 家族配方。本皮肤 @import 它,单独引入仍成立。 */
|
|
9
|
+
@import '../family/motion.css';
|
|
10
|
+
@import '../family/chart.css';
|
|
11
|
+
@import '../family/loading-ring.css';
|
|
12
|
+
|
|
13
|
+
@layer xihan.components {
|
|
14
|
+
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
15
|
+
[data-scope='sankey-chart'] {
|
|
16
|
+
--xh-sankey-chart-skin: 1;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* 几何要用的像素值以这里的私有槽为真源:机器挂载后从计算样式读它们,作者覆盖组件槽即改变几何。
|
|
20
|
+
节点的厚度借柱的最大厚度那一格传进去 */
|
|
21
|
+
[data-scope='sankey-chart'][data-part='root'] {
|
|
22
|
+
--xh-_chart-metric-bar-max: var(--xh-sankey-chart-node-width, var(--xh-space-3));
|
|
23
|
+
--xh-_chart-metric-gap: var(--xh-chart-gap);
|
|
24
|
+
--xh-_chart-metric-line-width: var(--xh-chart-line-width);
|
|
25
|
+
--xh-_chart-metric-point-size: var(--xh-chart-point-size);
|
|
26
|
+
--xh-_chart-metric-hit-min: var(--xh-chart-hit-min);
|
|
27
|
+
--xh-_chart-metric-tick-length: var(--xh-chart-tick-length);
|
|
28
|
+
--xh-_chart-metric-label-gap: var(--xh-chart-label-gap);
|
|
29
|
+
--xh-_chart-metric-radius: var(--xh-sankey-chart-node-radius, var(--xh-shape-inset));
|
|
30
|
+
--xh-_chart-metric-font-size: var(--xh-text-caption-size);
|
|
31
|
+
--xh-_chart-metric-leading: var(--xh-leading-tight);
|
|
32
|
+
--xh-_chart-gap: var(--xh-sankey-chart-gap, var(--xh-space-3));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* —— 家族配方的组件槽:标题、视口、图例、提示框与空态由 family/chart.css 画,本图表的覆盖槽写在
|
|
36
|
+
对应部件上接进配方的私有槽,作者在部件或它的祖先上覆盖都生效 —— */
|
|
37
|
+
[data-scope='sankey-chart'][data-part='viewport'] {
|
|
38
|
+
--xh-_chart-height: var(--xh-sankey-chart-height, var(--xh-chart-height));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
[data-scope='sankey-chart'][data-part='legend'] {
|
|
42
|
+
--xh-_chart-legend-gap: var(--xh-sankey-chart-legend-gap, var(--xh-space-1));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
[data-scope='sankey-chart'][data-part='legend-swatch'] {
|
|
46
|
+
--xh-_chart-legend-swatch-radius: var(--xh-sankey-chart-legend-swatch-radius, var(--xh-shape-inset));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
[data-scope='sankey-chart'][data-part='tooltip'] {
|
|
50
|
+
--xh-_chart-tooltip-gap: var(--xh-sankey-chart-tooltip-gap, var(--xh-space-1));
|
|
51
|
+
--xh-_chart-tooltip-py: var(--xh-sankey-chart-tooltip-py, var(--xh-surface-pad-sm));
|
|
52
|
+
--xh-_chart-tooltip-px: var(--xh-sankey-chart-tooltip-px, var(--xh-surface-pad-sm));
|
|
53
|
+
--xh-_chart-tooltip-radius: var(--xh-sankey-chart-tooltip-radius, var(--xh-shape-overlay));
|
|
54
|
+
--xh-_chart-tooltip-shadow: var(--xh-sankey-chart-tooltip-shadow, var(--xh-material-frosted-shadow));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
[data-scope='sankey-chart'][data-part='tooltip-row'] {
|
|
58
|
+
--xh-_chart-tooltip-row-gap: var(--xh-sankey-chart-tooltip-row-gap, var(--xh-space-2));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
[data-scope='sankey-chart'][data-part='tooltip-swatch'] {
|
|
62
|
+
--xh-_chart-tooltip-swatch-radius: var(--xh-sankey-chart-tooltip-swatch-radius, var(--xh-shape-inset));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
[data-scope='sankey-chart'][data-part='empty'][data-state='loading'] {
|
|
66
|
+
--xh-_chart-empty-gap: var(--xh-sankey-chart-empty-gap, var(--xh-space-2));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* —— 色槽:分组由色槽承担,作者可以在节点上覆盖 --xh-sankey-chart-series-color ——
|
|
70
|
+
节点、取了颜色的流带、渐变的色标、图例项与提示框的行都带着色槽,各自从这里取系列色 */
|
|
71
|
+
[data-scope='sankey-chart'][data-xh-chart-slot='1'] {
|
|
72
|
+
--xh-_chart-series: var(--xh-sankey-chart-series-color, var(--xh-chart-categorical-1));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
[data-scope='sankey-chart'][data-xh-chart-slot='2'] {
|
|
76
|
+
--xh-_chart-series: var(--xh-sankey-chart-series-color, var(--xh-chart-categorical-2));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
[data-scope='sankey-chart'][data-xh-chart-slot='3'] {
|
|
80
|
+
--xh-_chart-series: var(--xh-sankey-chart-series-color, var(--xh-chart-categorical-3));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
[data-scope='sankey-chart'][data-xh-chart-slot='4'] {
|
|
84
|
+
--xh-_chart-series: var(--xh-sankey-chart-series-color, var(--xh-chart-categorical-4));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
[data-scope='sankey-chart'][data-xh-chart-slot='5'] {
|
|
88
|
+
--xh-_chart-series: var(--xh-sankey-chart-series-color, var(--xh-chart-categorical-5));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
[data-scope='sankey-chart'][data-xh-chart-slot='6'] {
|
|
92
|
+
--xh-_chart-series: var(--xh-sankey-chart-series-color, var(--xh-chart-categorical-6));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
[data-scope='sankey-chart'][data-xh-chart-slot='7'] {
|
|
96
|
+
--xh-_chart-series: var(--xh-sankey-chart-series-color, var(--xh-chart-categorical-7));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
[data-scope='sankey-chart'][data-xh-chart-slot='8'] {
|
|
100
|
+
--xh-_chart-series: var(--xh-sankey-chart-series-color, var(--xh-chart-categorical-8));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* —— 流带:缺省是半透明的中性色,交叠处叠深、读得出汇合;取了颜色或渐变时换成对应的面。
|
|
104
|
+
指着一个节点或一条流带时相连的流带换色,其余淡出 —— */
|
|
105
|
+
[data-scope='sankey-chart'][data-part='link'] {
|
|
106
|
+
--xh-_sankey-link: var(--xh-sankey-chart-link-color, var(--xh-chart-categorical-other));
|
|
107
|
+
|
|
108
|
+
fill: var(--xh-_sankey-link);
|
|
109
|
+
fill-opacity: var(--xh-sankey-chart-link-alpha, var(--xh-chart-link-alpha));
|
|
110
|
+
stroke: none;
|
|
111
|
+
transition: opacity var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
[data-scope='sankey-chart'][data-part='link'][data-xh-chart-slot] {
|
|
115
|
+
--xh-_sankey-link: var(--xh-_chart-series);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
[data-scope='sankey-chart'][data-part='link'][data-gradient] {
|
|
119
|
+
--xh-_sankey-link: var(--xh-_sankey-gradient);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
[data-scope='sankey-chart'][data-part='gradient-stop'] {
|
|
123
|
+
stop-color: var(--xh-_chart-series);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* —— 节点:取分组的系列色,压在流带两端上 —— */
|
|
127
|
+
[data-scope='sankey-chart'][data-part='node'] {
|
|
128
|
+
fill: var(--xh-_chart-series);
|
|
129
|
+
stroke: none;
|
|
130
|
+
transition: opacity var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
[data-scope='sankey-chart'][data-part='link'][data-dimmed],
|
|
134
|
+
[data-scope='sankey-chart'][data-part='node'][data-dimmed],
|
|
135
|
+
[data-scope='sankey-chart'][data-part='node-label'][data-dimmed] {
|
|
136
|
+
opacity: var(--xh-chart-dim-alpha);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* 节点名写在列间的空当里,底下可能压着流带:正文色,描一圈承载面色,交叠处也读得清。名字不接指针,命中归节点 */
|
|
140
|
+
[data-scope='sankey-chart'][data-part='node-label'] {
|
|
141
|
+
fill: var(--xh-fg-default);
|
|
142
|
+
stroke: var(--xh-chart-surface);
|
|
143
|
+
stroke-width: var(--xh-stroke-thick);
|
|
144
|
+
stroke-linejoin: round;
|
|
145
|
+
paint-order: stroke;
|
|
146
|
+
pointer-events: none;
|
|
147
|
+
transition: opacity var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* 强制色:节点改成系统色的面与描边,流带取次级系统色、被指着的取高亮色,名字取正文色;
|
|
151
|
+
焦点环、图例与色标在配方里 */
|
|
152
|
+
@media (forced-colors: active) {
|
|
153
|
+
[data-scope='sankey-chart'][data-part='node'] {
|
|
154
|
+
fill: Canvas;
|
|
155
|
+
stroke: CanvasText;
|
|
156
|
+
stroke-width: var(--xh-stroke-thin);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
[data-scope='sankey-chart'][data-part='link'],
|
|
160
|
+
[data-scope='sankey-chart'][data-part='link'][data-xh-chart-slot],
|
|
161
|
+
[data-scope='sankey-chart'][data-part='link'][data-gradient] {
|
|
162
|
+
--xh-_sankey-link: GrayText;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
[data-scope='sankey-chart'][data-part='link'][data-highlighted] {
|
|
166
|
+
--xh-_sankey-link: Highlight;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
[data-scope='sankey-chart'][data-part='node-label'] {
|
|
170
|
+
fill: CanvasText;
|
|
171
|
+
stroke: Canvas;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
package/css/scroll-area.css
CHANGED
|
@@ -5,6 +5,32 @@
|
|
|
5
5
|
|
|
6
6
|
/* 定义 scroll area 样式。 */
|
|
7
7
|
|
|
8
|
+
/* 边缘渐隐的四条带宽登记成长度:滚到头时带子收起、离开端点时铺开,才能沿过渡淡变。
|
|
9
|
+
不认 @property 的引擎把它们当普通自定义属性,带子照旧按端点收放,只是没有过渡 */
|
|
10
|
+
@property --xh-_scroll-area-fade-block-start {
|
|
11
|
+
syntax: '<length>';
|
|
12
|
+
inherits: false;
|
|
13
|
+
initial-value: 0px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@property --xh-_scroll-area-fade-block-end {
|
|
17
|
+
syntax: '<length>';
|
|
18
|
+
inherits: false;
|
|
19
|
+
initial-value: 0px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@property --xh-_scroll-area-fade-inline-start {
|
|
23
|
+
syntax: '<length>';
|
|
24
|
+
inherits: false;
|
|
25
|
+
initial-value: 0px;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@property --xh-_scroll-area-fade-inline-end {
|
|
29
|
+
syntax: '<length>';
|
|
30
|
+
inherits: false;
|
|
31
|
+
initial-value: 0px;
|
|
32
|
+
}
|
|
33
|
+
|
|
8
34
|
@layer xihan.components {
|
|
9
35
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
10
36
|
[data-scope='scroll-area'] {
|
|
@@ -100,6 +126,12 @@
|
|
|
100
126
|
linear-gradient(to right, transparent 0, black var(--xh-_scroll-area-fade-left), black calc(100% - var(--xh-_scroll-area-fade-right)), transparent 100%);
|
|
101
127
|
-webkit-mask-composite: source-in;
|
|
102
128
|
mask-composite: intersect;
|
|
129
|
+
/* 滚到头时那一侧的带子淡去、离开端点时淡回,不在到端那一帧瞬间消失 */
|
|
130
|
+
transition:
|
|
131
|
+
--xh-_scroll-area-fade-block-start var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
132
|
+
--xh-_scroll-area-fade-block-end var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
133
|
+
--xh-_scroll-area-fade-inline-start var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
134
|
+
--xh-_scroll-area-fade-inline-end var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
103
135
|
}
|
|
104
136
|
|
|
105
137
|
[data-scope='scroll-area'][data-part='viewport'][data-variant='fade'][data-size='sm'] {
|
package/css/scrollbar.css
CHANGED
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
color: var(--xh-fg-default);
|
|
125
125
|
cursor: default;
|
|
126
126
|
transition:
|
|
127
|
-
background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
127
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
128
128
|
color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
129
129
|
}
|
|
130
130
|
|