@xihan-ui/styles 2.0.0 → 3.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 +1328 -0
- package/README.md +6 -1
- package/component-tokens.d.ts +505 -111
- package/components.tokens.json +34750 -26291
- package/css/accordion.css +39 -13
- package/css/alert.css +61 -3
- package/css/anchor.css +49 -11
- package/css/approval.css +124 -84
- package/css/avatar-group.css +1 -1
- package/css/avatar.css +13 -5
- package/css/back-top.css +63 -44
- package/css/badge.css +63 -13
- package/css/bar-code.css +1 -1
- package/css/breadcrumb.css +63 -4
- package/css/button-group.css +5 -5
- package/css/button.css +69 -21
- package/css/calendar-picker.css +27 -8
- package/css/calendar-range-picker.css +48 -11
- package/css/card.css +116 -2
- package/css/carousel.css +153 -48
- package/css/cartesian-chart.css +830 -0
- package/css/cascader.css +184 -70
- package/css/checkbox-group.css +69 -99
- package/css/checkbox.css +21 -54
- package/css/citation.css +470 -0
- package/css/clipboard.css +23 -66
- package/css/code-view.css +103 -8
- package/css/collapsible.css +37 -11
- package/css/color-field.css +18 -0
- package/css/color-picker.css +57 -62
- package/css/color-slider.css +26 -19
- package/css/color-swatch-picker.css +8 -6
- package/css/combobox.css +82 -37
- package/css/command.css +48 -48
- package/css/context-menu.css +43 -28
- package/css/date-field.css +23 -0
- package/css/date-picker.css +57 -24
- package/css/date-range-picker.css +301 -14
- package/css/description.css +17 -1
- package/css/descriptions.css +43 -1
- package/css/dialog.css +99 -43
- package/css/diff-view.css +101 -16
- package/css/download-trigger.css +46 -80
- package/css/drawer.css +168 -133
- package/css/editable.css +19 -0
- package/css/empty-state.css +8 -7
- package/css/field-array.css +36 -0
- package/css/field.css +17 -19
- package/css/fieldset.css +1 -1
- package/css/file-upload.css +126 -136
- package/css/flex.css +324 -8
- package/css/float-button.css +168 -41
- package/css/floating-panel.css +59 -27
- package/css/form.css +26 -20
- 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 +33 -18
- package/css/icon.css +100 -0
- package/css/image-cropper.css +34 -8
- package/css/image-viewer.css +169 -26
- package/css/image.css +23 -4
- package/css/infinite-scroll.css +2 -2
- package/css/input-group.css +13 -15
- package/css/json-viewer.css +55 -7
- package/css/kbd.css +1 -1
- package/css/layout.css +71 -21
- package/css/liquid.css +106 -0
- package/css/list.css +2 -2
- package/css/listbox.css +72 -23
- package/css/loading-bar.css +27 -13
- package/css/log.css +131 -35
- 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 -21
- package/css/menu.css +40 -28
- package/css/menubar.css +42 -28
- package/css/message-feed.css +174 -53
- package/css/navigation-menu.css +177 -18
- package/css/notification.css +431 -110
- package/css/number-field.css +22 -0
- package/css/page-header.css +4 -2
- package/css/pagination.css +129 -29
- package/css/password-input.css +40 -8
- package/css/pie-chart.css +247 -0
- package/css/popconfirm.css +50 -58
- package/css/popover.css +55 -21
- package/css/progress.css +308 -10
- package/css/prompt-input.css +37 -1
- package/css/question-flow.css +104 -64
- package/css/radar-chart.css +233 -0
- package/css/radio-group.css +372 -14
- package/css/rating.css +25 -27
- package/css/reasoning.css +62 -55
- package/css/reset.css +1 -1
- 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 +76 -59
- package/css/side-nav.css +177 -30
- package/css/signature-pad.css +23 -8
- package/css/skeleton.css +13 -14
- package/css/slider.css +39 -17
- package/css/sortable.css +38 -8
- package/css/sparkline.css +164 -0
- package/css/spinner.css +50 -22
- package/css/splitter.css +8 -2
- package/css/statistic.css +10 -0
- package/css/steps.css +257 -38
- package/css/switch.css +30 -55
- package/css/table.css +168 -128
- package/css/tabs.css +243 -31
- package/css/tag-group.css +65 -37
- package/css/tag.css +55 -14
- 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 +44 -17
- package/css/time-range-picker.css +45 -18
- package/css/timeline.css +1 -1
- package/css/toggle-group.css +8 -8
- package/css/toggle.css +6 -5
- package/css/tool-call.css +64 -56
- package/css/toolbar.css +105 -7
- package/css/tooltip.css +18 -7
- package/css/tour.css +49 -21
- package/css/transfer.css +104 -81
- package/css/tree-select.css +235 -58
- package/css/tree.css +240 -147
- package/css/truncate.css +55 -12
- package/css/typography.css +93 -0
- package/css/virtualizer.css +57 -1
- 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 +70 -27
- 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 +208 -11
- package/family/tag-list.css +59 -0
- package/index.css +23363 -14091
- package/index.unlayered.css +23198 -13922
- 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/calendar-picker.css
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
[data-scope='calendar-picker'][data-part='root'] {
|
|
18
|
-
/* 翻页钮是 sm 档的图标钮(--xh-control-h-sm 见方),钮里的图标按 sm 档取 --xh-glyph-size-sm
|
|
18
|
+
/* 翻页钮是 sm 档的图标钮(--xh-control-h-sm 见方),钮里的图标按 sm 档取 --xh-glyph-size-sm;
|
|
19
19
|
作者塞进去的图标与皮肤画的兜底字形同一把尺 */
|
|
20
20
|
--xh-icon-size: var(--xh-calendar-picker-icon-size, var(--xh-glyph-size-sm));
|
|
21
21
|
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
|
|
55
55
|
/* 标题里的年与月:点它们逐级钻上去(年 → 十年格、月 → 月格)。
|
|
56
56
|
长得像标题而不像按钮——它本来就是标题,只是可点 */
|
|
57
|
-
/* 标题里的年与月接 Action Control text
|
|
57
|
+
/* 标题里的年与月接 Action Control text 档(日期翻页按钮同族):盒、按下 / 禁用面、0.97 缩放与换底、焦点环与过渡
|
|
58
58
|
由家族配方给,这里只把使用者槽映射到桥接槽。长得像标题而不像按钮——它本来就是标题,只是可点:静息透明(ghost),
|
|
59
59
|
悬停只换字色不换底(标题不是一枚按钮面),按下换到 200 档中性面(白底承载);到顶那一层只作标题显示,
|
|
60
60
|
光标别装成能点,也不再换面 */
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
display: none;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
/* 四颗方向钮接 Action Control icon
|
|
83
|
+
/* 四颗方向钮接 Action Control icon 档(日期翻页按钮)、ghost 形态:正方盒、悬停 / 按下 / 禁用面、0.97 缩放与换底、
|
|
84
84
|
粗指针热区、焦点环与过渡由家族配方给,这里只把使用者槽映射到桥接槽;钮坐在日历的白底上,悬停 100 → 按下 200 */
|
|
85
85
|
[data-scope='calendar-picker'][data-part='prev-year-trigger'],
|
|
86
86
|
[data-scope='calendar-picker'][data-part='prev-trigger'],
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
align-content: start;
|
|
139
139
|
max-block-size: var(--xh-calendar-picker-year-grid-max-h, var(--xh-viewport-h-sm));
|
|
140
140
|
padding-inline-end: var(--xh-calendar-picker-year-grid-pe, var(--xh-space-1));
|
|
141
|
-
/* 页内结构容器走原生细条(reset 层统一给)、滚动链保持 auto
|
|
141
|
+
/* 页内结构容器走原生细条(reset 层统一给)、滚动链保持 auto;嵌进 date-picker 浮层时由那份皮肤补 contain */
|
|
142
142
|
overflow-y: auto;
|
|
143
143
|
}
|
|
144
144
|
|
|
@@ -239,7 +239,7 @@
|
|
|
239
239
|
display: none;
|
|
240
240
|
}
|
|
241
241
|
|
|
242
|
-
/* 日期格接 Action Control text
|
|
242
|
+
/* 日期格接 Action Control text 档(日历格是定尺控件,属格状当前)、ghost 形态:悬停 / 按下 / 禁用面、
|
|
243
243
|
0.97 缩放与换底、焦点环与过渡由家族配方给,这里只把使用者槽映射到桥接槽。几何仍由网格给:宽度由 week-row 的
|
|
244
244
|
等分轨道给、高度按 aspect-ratio 跟着走(block-size 归 auto,不取家族的固定高),日历才不会被长月份拉扁。
|
|
245
245
|
格子坐在日历的白底上:悬停 100 → 按下 200;今天 / 选中 / 邻月 / 不可用只换下面的私有槽 */
|
|
@@ -304,7 +304,7 @@
|
|
|
304
304
|
--xh-_calendar-picker-cell-fg: var(--xh-calendar-picker-cell-fg-outside, var(--xh-fg-subtle));
|
|
305
305
|
}
|
|
306
306
|
|
|
307
|
-
/* 今天:1px 品牌环 +
|
|
307
|
+
/* 今天:1px 品牌环 + 品牌字(brand-subtle 退出 today 语义),底透明、悬停走普通格的阶梯;
|
|
308
308
|
选中仍用后面的实心强调面,两个状态叠加时不会混成同一种反馈 */
|
|
309
309
|
[data-scope='calendar-picker'][data-part='cell-trigger'][data-today] {
|
|
310
310
|
--xh-_calendar-picker-cell-bg: var(--xh-calendar-picker-today-bg, transparent);
|
|
@@ -312,7 +312,7 @@
|
|
|
312
312
|
--xh-_calendar-picker-cell-fg: var(--xh-calendar-picker-today-fg, var(--xh-fg-brand));
|
|
313
313
|
}
|
|
314
314
|
|
|
315
|
-
/* 实心强调面给单选 /
|
|
315
|
+
/* 实心强调面给单选 / 多选的选中格(格状当前):悬停不换面,按下压到 active 档(光缩放在深色底上看不出回执)。
|
|
316
316
|
面是实心的,环色与面同族,画在面里就看不出来;环改取面自己的前景色——
|
|
317
317
|
那一族色本来就要在这块面上把字读清楚,与面的对比是按可读性定的 */
|
|
318
318
|
[data-scope='calendar-picker'][data-part='cell-trigger'][data-selected] {
|
|
@@ -352,7 +352,7 @@
|
|
|
352
352
|
--xh-action-ring-color-focus-visible: var(--xh-ring-focus);
|
|
353
353
|
}
|
|
354
354
|
|
|
355
|
-
/* 不可用又选中的格:退到中性淡底 +
|
|
355
|
+
/* 不可用又选中的格:退到中性淡底 + 置灰字(禁用面),选中身份仍由这块底与未选中的透明格分开 */
|
|
356
356
|
[data-scope='calendar-picker'][data-part='cell-trigger'][data-disabled][data-selected] {
|
|
357
357
|
--xh-action-bg-disabled: var(--xh-calendar-picker-cell-bg-selected-disabled, var(--xh-bg-subtle));
|
|
358
358
|
}
|
|
@@ -445,4 +445,23 @@
|
|
|
445
445
|
font-weight: var(--xh-font-weight-bold);
|
|
446
446
|
}
|
|
447
447
|
}
|
|
448
|
+
|
|
449
|
+
@media (forced-colors: active) {
|
|
450
|
+
/* 兜底字形是 mask 挖出来的一块底色,这一档里底色被系统换成 Canvas,字形跟着消失。
|
|
451
|
+
字形退出强制换色、直接写系统色(不能取 currentColor:退出强制换色的伪元素读到的是被系统换掉之前的作者色):
|
|
452
|
+
按钮面上取 ButtonText,悬停与按下时家族把按钮涂成 Highlight、字形换 HighlightText;
|
|
453
|
+
禁用取 GrayText */
|
|
454
|
+
[data-scope='calendar-picker']:is([data-part='prev-trigger'], [data-part='next-trigger'], [data-part='prev-year-trigger'], [data-part='next-year-trigger']):empty::before {
|
|
455
|
+
forced-color-adjust: none;
|
|
456
|
+
background-color: ButtonText;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
[data-scope='calendar-picker']:is([data-part='prev-trigger'], [data-part='next-trigger'], [data-part='prev-year-trigger'], [data-part='next-year-trigger']):not([data-disabled]):not([data-loading]):is(:hover, :active, [data-pressed]):empty::before {
|
|
460
|
+
background-color: HighlightText;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
[data-scope='calendar-picker']:is([data-part='prev-trigger'], [data-part='next-trigger'], [data-part='prev-year-trigger'], [data-part='next-year-trigger'])[data-disabled]:empty::before {
|
|
464
|
+
background-color: GrayText;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
448
467
|
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
[data-scope='calendar-range-picker'][data-part='root'] {
|
|
18
|
-
/* 翻页钮是 sm 档的图标钮(--xh-control-h-sm 见方),钮里的图标按 sm 档取 --xh-glyph-size-sm
|
|
18
|
+
/* 翻页钮是 sm 档的图标钮(--xh-control-h-sm 见方),钮里的图标按 sm 档取 --xh-glyph-size-sm;
|
|
19
19
|
作者塞进去的图标与皮肤画的兜底字形同一把尺 */
|
|
20
20
|
--xh-icon-size: var(--xh-calendar-range-picker-icon-size, var(--xh-glyph-size-sm));
|
|
21
21
|
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
|
|
55
55
|
/* 标题里的年与月:点它们逐级钻上去(年 → 十年格、月 → 月格)。
|
|
56
56
|
长得像标题而不像按钮——它本来就是标题,只是可点 */
|
|
57
|
-
/* 标题里的年与月接 Action Control text
|
|
57
|
+
/* 标题里的年与月接 Action Control text 档(日期翻页按钮同族):盒、按下 / 禁用面、0.97 缩放与换底、焦点环与过渡
|
|
58
58
|
由家族配方给,这里只把使用者槽映射到桥接槽。长得像标题而不像按钮——它本来就是标题,只是可点:静息透明(ghost),
|
|
59
59
|
悬停只换字色不换底(标题不是一枚按钮面),按下换到 200 档中性面(白底承载);到顶那一层只作标题显示,
|
|
60
60
|
光标别装成能点,也不再换面 */
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
display: none;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
/* 四颗方向钮接 Action Control icon
|
|
83
|
+
/* 四颗方向钮接 Action Control icon 档(日期翻页按钮)、ghost 形态:正方盒、悬停 / 按下 / 禁用面、0.97 缩放与换底、
|
|
84
84
|
粗指针热区、焦点环与过渡由家族配方给,这里只把使用者槽映射到桥接槽;钮坐在日历的白底上,悬停 100 → 按下 200 */
|
|
85
85
|
[data-scope='calendar-range-picker'][data-part='prev-year-trigger'],
|
|
86
86
|
[data-scope='calendar-range-picker'][data-part='prev-trigger'],
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
align-content: start;
|
|
139
139
|
max-block-size: var(--xh-calendar-range-picker-year-grid-max-h, var(--xh-viewport-h-sm));
|
|
140
140
|
padding-inline-end: var(--xh-calendar-range-picker-year-grid-pe, var(--xh-space-1));
|
|
141
|
-
/* 页内结构容器走原生细条(reset 层统一给)、滚动链保持 auto
|
|
141
|
+
/* 页内结构容器走原生细条(reset 层统一给)、滚动链保持 auto;嵌进 date-picker 浮层时由那份皮肤补 contain */
|
|
142
142
|
overflow-y: auto;
|
|
143
143
|
}
|
|
144
144
|
|
|
@@ -245,14 +245,21 @@
|
|
|
245
245
|
display: none;
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
-
/*
|
|
248
|
+
/* 区间底色:横向铺满格子,相邻两格接成一条;纵向收在格子内衬里,行与行之间留出空当。
|
|
249
|
+
轨道随 data-in-range 生灭,出现与消失都是当场的;过渡只在同一段轨道换底时走——
|
|
250
|
+
挑到一半的预览落定成区间,中性淡底淡变到品牌淡底 */
|
|
249
251
|
[data-scope='calendar-range-picker'][data-part='cell'][data-in-range]:not([data-outside-month])::before {
|
|
250
252
|
content: '';
|
|
251
253
|
position: absolute;
|
|
252
254
|
inset-block: var(--xh-calendar-range-picker-cell-gap, var(--xh-space-0_5));
|
|
253
255
|
inset-inline: 0;
|
|
254
256
|
background: var(--xh-calendar-range-picker-range-bg, var(--xh-bg-brand-subtle));
|
|
255
|
-
transition: background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
257
|
+
transition: background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/* 挑到一半的预览还不是选中:品牌淡底专属选中 / 当前,预览铺中性淡底,与已落定的区间分开 */
|
|
261
|
+
[data-scope='calendar-range-picker'][data-part='cell'][data-in-range][data-range-preview]:not([data-outside-month])::before {
|
|
262
|
+
background: var(--xh-calendar-range-picker-range-preview-bg, var(--xh-bg-subtle));
|
|
256
263
|
}
|
|
257
264
|
|
|
258
265
|
/* 行首与行尾收圆:区间跨周时每一行各是一条两头圆的横杠。
|
|
@@ -283,7 +290,7 @@
|
|
|
283
290
|
border-radius: var(--xh-calendar-range-picker-cell-radius, var(--xh-shape-inset));
|
|
284
291
|
}
|
|
285
292
|
|
|
286
|
-
/* 日期格接 Action Control text
|
|
293
|
+
/* 日期格接 Action Control text 档(日历格是定尺控件,属格状当前)、ghost 形态:悬停 / 按下 / 禁用面、
|
|
287
294
|
0.97 缩放与换底、焦点环与过渡由家族配方给,这里只把使用者槽映射到桥接槽。几何仍由网格给:宽度由 week-row 的
|
|
288
295
|
等分轨道给、高度按 aspect-ratio 跟着走(block-size 归 auto,不取家族的固定高),日历才不会被长月份拉扁。
|
|
289
296
|
格子坐在日历的白底上:悬停 100 → 按下 200;今天 / 选中 / 邻月 / 不可用只换下面的私有槽 */
|
|
@@ -348,13 +355,19 @@
|
|
|
348
355
|
--xh-_calendar-range-picker-cell-fg: var(--xh-calendar-range-picker-cell-fg-outside, var(--xh-fg-subtle));
|
|
349
356
|
}
|
|
350
357
|
|
|
351
|
-
/*
|
|
358
|
+
/* 区间中段的格坐在品牌淡底的轨道上(页内选中 12%):悬停 20%、按下 28%,铺在格子自己的选中片上 */
|
|
352
359
|
[data-scope='calendar-range-picker'][data-part='cell-trigger'][data-in-range]:not([data-outside-month], [data-disabled], [data-range-start], [data-range-end]) {
|
|
353
360
|
--xh-_calendar-range-picker-cell-bg-hover: var(--xh-calendar-range-picker-range-cell-bg-hover, var(--xh-bg-brand-subtle-hover));
|
|
354
361
|
--xh-_calendar-range-picker-cell-bg-pressed: var(--xh-calendar-range-picker-range-cell-bg-pressed, var(--xh-bg-brand-subtle-active));
|
|
355
362
|
}
|
|
356
363
|
|
|
357
|
-
/*
|
|
364
|
+
/* 预览中段坐在中性淡底上:交互阶梯按淡底承载走,悬停 200、按下 300 */
|
|
365
|
+
[data-scope='calendar-range-picker'][data-part='cell-trigger'][data-in-range][data-range-preview]:not([data-outside-month], [data-disabled], [data-range-start], [data-range-end]) {
|
|
366
|
+
--xh-_calendar-range-picker-cell-bg-hover: var(--xh-calendar-range-picker-range-preview-cell-bg-hover, var(--xh-bg-subtle-hover));
|
|
367
|
+
--xh-_calendar-range-picker-cell-bg-pressed: var(--xh-calendar-range-picker-range-preview-cell-bg-pressed, var(--xh-bg-subtle-active));
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/* 今天:1px 品牌环 + 品牌字(brand-subtle 退出 today 语义),底透明、悬停走普通格的阶梯;
|
|
358
371
|
落在区间里时环压在轨道上,选中仍用后面的实心强调面,状态叠加时不会混成同一种反馈 */
|
|
359
372
|
[data-scope='calendar-range-picker'][data-part='cell-trigger'][data-today] {
|
|
360
373
|
--xh-_calendar-range-picker-cell-bg: var(--xh-calendar-range-picker-today-bg, transparent);
|
|
@@ -362,7 +375,7 @@
|
|
|
362
375
|
--xh-_calendar-range-picker-cell-fg: var(--xh-calendar-range-picker-today-fg, var(--xh-fg-brand));
|
|
363
376
|
}
|
|
364
377
|
|
|
365
|
-
/* 实心强调面只给单选 /
|
|
378
|
+
/* 实心强调面只给单选 / 多选的选中格与区间的两端(格状当前):悬停不换面,按下压到 active 档(光缩放在深色底上
|
|
366
379
|
看不出回执);区间中段的格子由格子上的轨道铺底,自己不换面——不然一整段都是实心圆,就分不出哪两格是端点。
|
|
367
380
|
面是实心的,环色与面同族,画在面里就看不出来;环改取面自己的前景色——
|
|
368
381
|
那一族色本来就要在这块面上把字读清楚,与面的对比是按可读性定的 */
|
|
@@ -393,6 +406,11 @@
|
|
|
393
406
|
border-color: Highlight;
|
|
394
407
|
}
|
|
395
408
|
|
|
409
|
+
/* 预览与落定的区间在这一档没有底色可分:还没确认的那一段在轨道上下沿画虚线 */
|
|
410
|
+
[data-scope='calendar-range-picker'][data-part='cell'][data-in-range][data-range-preview]:not([data-outside-month])::before {
|
|
411
|
+
border-block: var(--xh-stroke-thin) dashed Highlight;
|
|
412
|
+
}
|
|
413
|
+
|
|
396
414
|
/* 按下换的底在这一档由家族的按压块换成 Highlight(格子、方向钮与标题钮同走),这里不再另画 */
|
|
397
415
|
}
|
|
398
416
|
|
|
@@ -404,7 +422,7 @@
|
|
|
404
422
|
--xh-action-ring-color-focus-visible: var(--xh-ring-focus);
|
|
405
423
|
}
|
|
406
424
|
|
|
407
|
-
/* 不可用又选中的格:退到中性淡底 +
|
|
425
|
+
/* 不可用又选中的格:退到中性淡底 + 置灰字(禁用面),选中身份仍由这块底与未选中的透明格分开 */
|
|
408
426
|
[data-scope='calendar-range-picker'][data-part='cell-trigger'][data-disabled][data-selected] {
|
|
409
427
|
--xh-action-bg-disabled: var(--xh-calendar-range-picker-cell-bg-selected-disabled, var(--xh-bg-subtle));
|
|
410
428
|
}
|
|
@@ -514,4 +532,23 @@
|
|
|
514
532
|
border-block-end: var(--xh-stroke-thick) solid currentColor;
|
|
515
533
|
}
|
|
516
534
|
}
|
|
535
|
+
|
|
536
|
+
@media (forced-colors: active) {
|
|
537
|
+
/* 兜底字形是 mask 挖出来的一块底色,这一档里底色被系统换成 Canvas,字形跟着消失。
|
|
538
|
+
字形退出强制换色、直接写系统色(不能取 currentColor:退出强制换色的伪元素读到的是被系统换掉之前的作者色):
|
|
539
|
+
按钮面上取 ButtonText,悬停与按下时家族把按钮涂成 Highlight、字形换 HighlightText;
|
|
540
|
+
禁用取 GrayText */
|
|
541
|
+
[data-scope='calendar-range-picker']:is([data-part='prev-trigger'], [data-part='next-trigger'], [data-part='prev-year-trigger'], [data-part='next-year-trigger']):empty::before {
|
|
542
|
+
forced-color-adjust: none;
|
|
543
|
+
background-color: ButtonText;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
[data-scope='calendar-range-picker']:is([data-part='prev-trigger'], [data-part='next-trigger'], [data-part='prev-year-trigger'], [data-part='next-year-trigger']):not([data-disabled]):not([data-loading]):is(:hover, :active, [data-pressed]):empty::before {
|
|
547
|
+
background-color: HighlightText;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
[data-scope='calendar-range-picker']:is([data-part='prev-trigger'], [data-part='next-trigger'], [data-part='prev-year-trigger'], [data-part='next-year-trigger'])[data-disabled]:empty::before {
|
|
551
|
+
background-color: GrayText;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
517
554
|
}
|
package/css/card.css
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
/* 定义 card 样式。 */
|
|
7
7
|
|
|
8
|
+
@import '../family/motion.css';
|
|
9
|
+
|
|
8
10
|
@layer xihan.components {
|
|
9
11
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
10
12
|
[data-scope='card'] {
|
|
@@ -12,7 +14,7 @@
|
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
/* Card 是带统一内边距与节奏的内容面;布局方向可由作者在根上覆盖。
|
|
15
|
-
边界由 --xh-border-default 描边承担,raised
|
|
17
|
+
边界由 --xh-border-default 描边承担,raised 落影只是抬起的加成(Card 是唯一登记 raised 的静态面,
|
|
16
18
|
且 raised 必带描边);内衬只走 --xh-surface-* 阶梯。 */
|
|
17
19
|
[data-scope='card'][data-part='root'] {
|
|
18
20
|
position: relative;
|
|
@@ -34,6 +36,13 @@
|
|
|
34
36
|
/* 形态按根面三选一:outline 即基础规则(描边 + surface 底 + raised),subtle 淡底 + 透明占位边 + 无影
|
|
35
37
|
(淡底与阴影互斥),ghost 三件都不画(占位边保住 1px 边位,三档几何一致);不承诺悬停或尺寸等额外行为。 */
|
|
36
38
|
[data-scope='card'][data-part='root'][data-variant='subtle'] {
|
|
39
|
+
/* 淡底容器:坐在它上面的控件按淡底阶梯换面(200 → 300),可交互卡片自己的悬停与按下读同一支私有槽。
|
|
40
|
+
host 槽只写不读,值由私有槽供给,两边同源 */
|
|
41
|
+
--xh-_card-host-bg-hover: var(--xh-bg-subtle-hover);
|
|
42
|
+
--xh-_card-host-bg-pressed: var(--xh-bg-subtle-active);
|
|
43
|
+
--xh-action-host-bg-hover: var(--xh-_card-host-bg-hover);
|
|
44
|
+
--xh-action-host-bg-pressed: var(--xh-_card-host-bg-pressed);
|
|
45
|
+
|
|
37
46
|
border-color: transparent;
|
|
38
47
|
background: var(--xh-card-bg, var(--xh-bg-subtle));
|
|
39
48
|
box-shadow: var(--xh-card-shadow, none);
|
|
@@ -45,6 +54,106 @@
|
|
|
45
54
|
box-shadow: var(--xh-card-shadow, none);
|
|
46
55
|
}
|
|
47
56
|
|
|
57
|
+
/* —— 整卡可交互 ——
|
|
58
|
+
点击区由 trigger 的 ::after 铺满整张卡片,可及名与 Tab 位只归 trigger 这个原生链接或按钮。
|
|
59
|
+
反馈按根面分:outline 是 raised 面,悬停抬高一档海拔(raised → lifted),按下换到白底阶梯的 200;
|
|
60
|
+
subtle / ghost 没有影,按承载面阶梯换面(淡底 200 → 300,无壳 100 → 200)。
|
|
61
|
+
抬起只走影、不走位移,减弱动效下仍是淡变。按下 press 时长切面,松开按 micro 回落。
|
|
62
|
+
按下认根的 :active:点击区是 trigger 的伪元素,按在卡片任一处都会让根进入 :active;
|
|
63
|
+
脚部叠在点击区之上,按脚部里的按钮时根也是 :active,这一档排除掉 */
|
|
64
|
+
[data-scope='card'][data-part='root'][data-interactive] {
|
|
65
|
+
transition-property: background-color, box-shadow;
|
|
66
|
+
transition-duration: var(--xh-motion-duration-micro);
|
|
67
|
+
transition-timing-function: var(--xh-motion-ease-enter);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
[data-scope='card'][data-part='root'][data-interactive][data-variant='outline']:hover {
|
|
71
|
+
box-shadow: var(--xh-card-shadow-hover, var(--xh-elevation-lifted));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
[data-scope='card'][data-part='root'][data-interactive][data-variant='subtle']:hover {
|
|
75
|
+
background: var(--xh-card-bg-hover, var(--xh-_card-host-bg-hover));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
[data-scope='card'][data-part='root'][data-interactive][data-variant='ghost']:hover {
|
|
79
|
+
background: var(--xh-card-bg-hover, var(--xh-bg-subtle));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
[data-scope='card'][data-part='root'][data-interactive]:active:not(:has([data-scope='card'][data-part='footer']:active)) {
|
|
83
|
+
transition-duration: var(--xh-motion-duration-press);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
[data-scope='card'][data-part='root'][data-interactive][data-variant='outline']:active:not(:has([data-scope='card'][data-part='footer']:active)) {
|
|
87
|
+
background: var(--xh-card-bg-pressed, var(--xh-bg-subtle-hover-opaque));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
[data-scope='card'][data-part='root'][data-interactive][data-variant='subtle']:active:not(:has([data-scope='card'][data-part='footer']:active)) {
|
|
91
|
+
background: var(--xh-card-bg-pressed, var(--xh-_card-host-bg-pressed));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
[data-scope='card'][data-part='root'][data-interactive][data-variant='ghost']:active:not(:has([data-scope='card'][data-part='footer']:active)) {
|
|
95
|
+
background: var(--xh-card-bg-pressed, var(--xh-bg-subtle-hover));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* trigger 读作标题本身:链接不带 UA 的蓝字下划线,按钮不带 UA 的框与底 */
|
|
99
|
+
[data-scope='card'][data-part='trigger'] {
|
|
100
|
+
padding: 0;
|
|
101
|
+
border: 0;
|
|
102
|
+
background: none;
|
|
103
|
+
color: inherit;
|
|
104
|
+
font: inherit;
|
|
105
|
+
text-align: inherit;
|
|
106
|
+
text-decoration: none;
|
|
107
|
+
cursor: pointer;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/* 点击区铺满整张卡片:相对根定位(根是 position: relative),外扩一条描边宽盖住边框。
|
|
111
|
+
trigger 与根之间的祖先不能再建定位上下文,否则点击区只铺到那一层 */
|
|
112
|
+
[data-scope='card'][data-part='root'][data-interactive] [data-scope='card'][data-part='trigger']::after {
|
|
113
|
+
content: '';
|
|
114
|
+
position: absolute;
|
|
115
|
+
inset: calc(-1 * var(--xh-stroke-thin));
|
|
116
|
+
border-radius: var(--xh-card-radius, var(--xh-shape-surface));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* 焦点环画在整张卡片外沿:环是点击区的轮廓,读者看到的可交互范围与点得到的范围一致 */
|
|
120
|
+
[data-scope='card'][data-part='root'][data-interactive] [data-scope='card'][data-part='trigger']:focus-visible {
|
|
121
|
+
outline: none;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
[data-scope='card'][data-part='root'][data-interactive] [data-scope='card'][data-part='trigger']:focus-visible::after {
|
|
125
|
+
outline: var(--xh-ring-width) solid var(--xh-_ring-color, var(--xh-ring-focus));
|
|
126
|
+
outline-offset: var(--xh-ring-offset);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* footer 叠在点击区之上:里面另放的按钮照常可点,footer 的空白处不触发整卡 */
|
|
130
|
+
[data-scope='card'][data-part='root'][data-interactive] [data-scope='card'][data-part='footer'] {
|
|
131
|
+
position: relative;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* liquid 档的交互光:可交互卡片进入悬停时,一道光沿 1px 描边扫过一次,与 Button 实心钮同一配方。
|
|
135
|
+
光只走描边、不进面,取卡片前景色;只在细指针可悬停的设备上播,强制色下不画装饰光。
|
|
136
|
+
减弱动效下时长归 1ms,一闪即过 */
|
|
137
|
+
@media (hover: hover) and (pointer: fine) and (forced-colors: none) {
|
|
138
|
+
:where([data-material='liquid']) [data-scope='card'][data-part='root'][data-interactive]:hover::after {
|
|
139
|
+
content: '';
|
|
140
|
+
position: absolute;
|
|
141
|
+
inset: calc(-1 * var(--xh-stroke-thin));
|
|
142
|
+
border: var(--xh-stroke-thin) solid transparent;
|
|
143
|
+
border-radius: inherit;
|
|
144
|
+
background: linear-gradient(100deg, transparent 42%, currentColor 50%, transparent 58%) border-box no-repeat;
|
|
145
|
+
background-size: 300% 100%;
|
|
146
|
+
background-position: 0% 0;
|
|
147
|
+
pointer-events: none;
|
|
148
|
+
mask:
|
|
149
|
+
linear-gradient(currentColor 0 0) padding-box exclude,
|
|
150
|
+
linear-gradient(currentColor 0 0);
|
|
151
|
+
animation: xh-glint var(--xh-card-glint-duration, var(--xh-motion-duration-glint)) var(--xh-motion-ease-enter) both;
|
|
152
|
+
/* 光从行首扫向行尾:rtl 下按方向符号把这一圈水平镜像,扫向跟着掉头,缓动不变 */
|
|
153
|
+
scale: var(--xh-direction-sign) 1;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
48
157
|
[data-scope='card'][data-part='header'] {
|
|
49
158
|
display: flex;
|
|
50
159
|
flex-direction: column;
|
|
@@ -59,7 +168,7 @@
|
|
|
59
168
|
color: var(--xh-card-title-fg, var(--xh-fg-default));
|
|
60
169
|
font-size: var(--xh-card-title-font-size, var(--xh-text-label-size));
|
|
61
170
|
font-weight: var(--xh-card-title-font-weight, var(--xh-font-weight-semibold));
|
|
62
|
-
line-height: var(--xh-card-title-leading, var(--xh-leading-
|
|
171
|
+
line-height: var(--xh-card-title-leading, var(--xh-leading-tight));
|
|
63
172
|
}
|
|
64
173
|
|
|
65
174
|
[data-scope='card'][data-part='description'] {
|
|
@@ -95,6 +204,11 @@
|
|
|
95
204
|
border-color: CanvasText;
|
|
96
205
|
box-shadow: none;
|
|
97
206
|
}
|
|
207
|
+
|
|
208
|
+
/* 高对比档里换底与抬起都被系统抹平:可交互卡片的悬停与按下改由描边表出,三档形态同一条 */
|
|
209
|
+
[data-scope='card'][data-part='root'][data-interactive]:is(:hover, :active) {
|
|
210
|
+
border-color: Highlight;
|
|
211
|
+
}
|
|
98
212
|
}
|
|
99
213
|
|
|
100
214
|
/* 声明过 display 就盖掉 UA 的 [hidden]{display:none},各部件在文件末尾统一还原。 */
|