@xihan-ui/styles 3.0.0 → 3.2.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 +63 -0
- package/README.md +1 -1
- package/component-tokens.d.ts +29 -0
- package/components.tokens.json +683 -27
- package/css/alert.css +2 -2
- package/css/approval.css +4 -4
- package/css/button.css +9 -5
- package/css/calendar-picker.css +3 -3
- package/css/calendar-range-picker.css +7 -7
- package/css/carousel.css +45 -13
- package/css/cartesian-chart.css +11 -11
- package/css/cascader.css +10 -10
- package/css/citation.css +2 -2
- package/css/code-view.css +6 -6
- package/css/color-picker.css +81 -0
- package/css/color-swatch-picker.css +9 -4
- package/css/combobox.css +12 -4
- package/css/command.css +1 -1
- package/css/date-field.css +39 -0
- package/css/date-picker.css +86 -9
- package/css/date-range-picker.css +47 -7
- package/css/diff-view.css +8 -8
- package/css/field-array.css +1 -1
- package/css/field.css +4 -0
- package/css/file-upload.css +1 -1
- package/css/float-button.css +140 -27
- package/css/form.css +14 -6
- package/css/graph-chart.css +2 -2
- package/css/highlight.css +1 -1
- package/css/image.css +1 -1
- package/css/mention.css +1 -1
- package/css/message-feed.css +1 -1
- package/css/notification.css +26 -20
- package/css/number-field.css +18 -18
- package/css/page-header.css +2 -2
- package/css/password-input.css +2 -2
- package/css/popconfirm.css +3 -3
- package/css/question-flow.css +8 -8
- package/css/radar-chart.css +6 -6
- package/css/rating.css +1 -1
- package/css/select.css +2 -2
- package/css/separator.css +2 -2
- package/css/side-nav.css +13 -13
- package/css/skeleton.css +5 -5
- package/css/slider.css +6 -6
- package/css/sortable.css +2 -2
- package/css/table.css +19 -2
- package/css/tags-input.css +1 -1
- package/css/time-picker.css +59 -2
- package/css/tool-call.css +7 -7
- package/css/tooltip.css +1 -1
- package/css/tree-select.css +2 -2
- package/css/tree.css +81 -11
- package/dist/css/accordion.css +269 -0
- package/dist/css/affix.css +47 -0
- package/dist/css/alert.css +247 -0
- package/dist/css/anchor.css +252 -0
- package/dist/css/approval.css +501 -0
- package/dist/css/avatar-group.css +99 -0
- package/dist/css/avatar.css +98 -0
- package/dist/css/back-top.css +161 -0
- package/dist/css/badge.css +205 -0
- package/dist/css/bar-code.css +62 -0
- package/dist/css/breadcrumb.css +230 -0
- package/dist/css/button-group.css +263 -0
- package/dist/css/button.css +219 -0
- package/dist/css/calendar-picker.css +467 -0
- package/dist/css/calendar-range-picker.css +554 -0
- package/dist/css/card.css +221 -0
- package/dist/css/carousel.css +710 -0
- package/dist/css/cartesian-chart.css +830 -0
- package/dist/css/cascader.css +961 -0
- package/dist/css/checkbox-group.css +358 -0
- package/dist/css/checkbox.css +257 -0
- package/dist/css/citation.css +470 -0
- package/dist/css/clipboard.css +315 -0
- package/dist/css/code-view.css +374 -0
- package/dist/css/collapsible.css +185 -0
- package/dist/css/color-field.css +176 -0
- package/dist/css/color-picker.css +595 -0
- package/dist/css/color-slider.css +281 -0
- package/dist/css/color-swatch-picker.css +250 -0
- package/dist/css/color-swatch.css +35 -0
- package/dist/css/combobox.css +574 -0
- package/dist/css/command.css +399 -0
- package/dist/css/context-menu.css +420 -0
- package/dist/css/date-field.css +317 -0
- package/dist/css/date-picker.css +868 -0
- package/dist/css/date-range-picker.css +886 -0
- package/dist/css/description.css +67 -0
- package/dist/css/descriptions.css +299 -0
- package/dist/css/dialog.css +455 -0
- package/dist/css/diff-view.css +513 -0
- package/dist/css/download-trigger.css +151 -0
- package/dist/css/drawer.css +552 -0
- package/dist/css/editable.css +295 -0
- package/dist/css/empty-state.css +163 -0
- package/dist/css/field-array.css +226 -0
- package/dist/css/field.css +166 -0
- package/dist/css/fieldset.css +102 -0
- package/dist/css/file-upload.css +429 -0
- package/dist/css/flex.css +441 -0
- package/dist/css/float-button.css +569 -0
- package/dist/css/floating-panel.css +429 -0
- package/dist/css/focus.css +46 -0
- package/dist/css/forced-colors.css +93 -0
- package/dist/css/form.css +393 -0
- package/dist/css/funnel-chart.css +106 -0
- package/dist/css/graph-chart.css +205 -0
- package/dist/css/grid-list.css +235 -0
- package/dist/css/grid.css +1201 -0
- package/dist/css/heatmap.css +552 -0
- package/dist/css/hierarchy-chart.css +298 -0
- package/dist/css/highlight.css +41 -0
- package/dist/css/hover-card.css +226 -0
- package/dist/css/icon.css +225 -0
- package/dist/css/image-cropper.css +373 -0
- package/dist/css/image-viewer.css +538 -0
- package/dist/css/image.css +98 -0
- package/dist/css/infinite-scroll.css +77 -0
- package/dist/css/input-group.css +275 -0
- package/dist/css/json-viewer.css +379 -0
- package/dist/css/kbd.css +72 -0
- package/dist/css/label.css +78 -0
- package/dist/css/layers.css +7 -0
- package/dist/css/layout.css +372 -0
- package/dist/css/liquid.css +106 -0
- package/dist/css/list.css +152 -0
- package/dist/css/listbox.css +390 -0
- package/dist/css/loading-bar.css +141 -0
- package/dist/css/log.css +306 -0
- package/dist/css/markdown-stream.css +149 -0
- package/dist/css/marquee.css +378 -0
- package/dist/css/masonry.css +70 -0
- package/dist/css/matrix-code.css +67 -0
- package/dist/css/mention.css +393 -0
- package/dist/css/menu.css +364 -0
- package/dist/css/menubar.css +456 -0
- package/dist/css/message-feed.css +318 -0
- package/dist/css/navigation-menu.css +513 -0
- package/dist/css/notification.css +782 -0
- package/dist/css/number-animation.css +44 -0
- package/dist/css/number-field.css +252 -0
- package/dist/css/overlay-arrow.css +56 -0
- package/dist/css/page-header.css +184 -0
- package/dist/css/pagination.css +450 -0
- package/dist/css/password-input.css +391 -0
- package/dist/css/pie-chart.css +247 -0
- package/dist/css/pin-input.css +199 -0
- package/dist/css/pointer.css +36 -0
- package/dist/css/popconfirm.css +320 -0
- package/dist/css/popover.css +279 -0
- package/dist/css/progress.css +501 -0
- package/dist/css/prompt-input.css +260 -0
- package/dist/css/question-flow.css +553 -0
- package/dist/css/radar-chart.css +233 -0
- package/dist/css/radio-group.css +598 -0
- package/dist/css/rating.css +294 -0
- package/dist/css/reasoning.css +343 -0
- package/dist/css/reset.css +117 -0
- package/dist/css/resizable.css +242 -0
- package/dist/css/sankey-chart.css +174 -0
- package/dist/css/scroll-area.css +240 -0
- package/dist/css/scrollbar.css +204 -0
- package/dist/css/select.css +612 -0
- package/dist/css/separator.css +122 -0
- package/dist/css/side-nav.css +476 -0
- package/dist/css/signature-pad.css +179 -0
- package/dist/css/skeleton.css +161 -0
- package/dist/css/slider.css +374 -0
- package/dist/css/sortable.css +228 -0
- package/dist/css/sparkline.css +164 -0
- package/dist/css/spinner.css +236 -0
- package/dist/css/splitter.css +159 -0
- package/dist/css/statistic.css +137 -0
- package/dist/css/steps.css +627 -0
- package/dist/css/switch.css +351 -0
- package/dist/css/table.css +1145 -0
- package/dist/css/tabs.css +944 -0
- package/dist/css/tag-group.css +247 -0
- package/dist/css/tag.css +310 -0
- package/dist/css/tags-input.css +322 -0
- package/dist/css/text-field.css +197 -0
- package/dist/css/time-field.css +277 -0
- package/dist/css/time-picker.css +707 -0
- package/dist/css/time-range-picker.css +746 -0
- package/dist/css/timeline.css +423 -0
- package/dist/css/timer.css +123 -0
- package/dist/css/timestamp.css +34 -0
- package/dist/css/toggle-group.css +424 -0
- package/dist/css/toggle.css +146 -0
- package/dist/css/tone.css +189 -0
- package/dist/css/tool-call.css +429 -0
- package/dist/css/toolbar.css +365 -0
- package/dist/css/tooltip.css +218 -0
- package/dist/css/tour.css +439 -0
- package/dist/css/transfer.css +638 -0
- package/dist/css/tree-select.css +878 -0
- package/dist/css/tree.css +733 -0
- package/dist/css/truncate.css +108 -0
- package/dist/css/typography.css +472 -0
- package/dist/css/undefined.css +58 -0
- package/dist/css/virtualizer.css +166 -0
- package/dist/css/visually-hidden.css +20 -0
- package/dist/css/watermark.css +82 -0
- package/dist/family/action-control.css +487 -0
- package/dist/family/chart.css +480 -0
- package/dist/family/check-mark.css +94 -0
- package/dist/family/choice-card.css +97 -0
- package/dist/family/collection-item.css +764 -0
- package/dist/family/field-chrome.css +287 -0
- package/dist/family/loading-ring.css +95 -0
- package/dist/family/material.css +72 -0
- package/dist/family/menu-choice.css +56 -0
- package/dist/family/motion.css +363 -0
- package/dist/family/swatch.css +59 -0
- package/dist/family/tag-list.css +59 -0
- package/family/action-control.css +3 -12
- package/index.css +7307 -6759
- package/index.unlayered.css +7309 -6761
- package/package.json +165 -164
|
@@ -0,0 +1,365 @@
|
|
|
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
|
+
/* 定义 toolbar 样式。 */
|
|
7
|
+
|
|
8
|
+
/* 独立皮肤传递引入条目的动作控件配方,full bundle 递归去重。 */
|
|
9
|
+
@import '../family/action-control.css';
|
|
10
|
+
|
|
11
|
+
@layer xihan.components {
|
|
12
|
+
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
13
|
+
.xh-scope-toolbar {
|
|
14
|
+
--xh-toolbar-skin: 1;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* 一条控件带:条目之间留固定间距,分隔线再把它们切成语义上的几段。
|
|
18
|
+
排布只能读 data-orientation——它与 aria-orientation 同源,但样式不该去读 ARIA */
|
|
19
|
+
.xh-scope-toolbar[data-part='root'] {
|
|
20
|
+
/* 尺寸档同时约束工具条排布与默认条目。 */
|
|
21
|
+
--xh-_toolbar-gap: var(--xh-space-2);
|
|
22
|
+
--xh-_toolbar-p: var(--xh-space-1);
|
|
23
|
+
--xh-_toolbar-item-h: var(--xh-control-h-md);
|
|
24
|
+
--xh-_toolbar-separator-size: calc(var(--xh-_toolbar-item-h) / 2);
|
|
25
|
+
--xh-icon-size: var(--xh-toolbar-icon-size, var(--xh-glyph-size-md));
|
|
26
|
+
|
|
27
|
+
/* 缺省 ghost:工具条只组织控件,不额外画外框;条目按画布承载走 hover 100 → pressed 200。 */
|
|
28
|
+
--xh-_toolbar-root-p: 0;
|
|
29
|
+
--xh-_toolbar-root-border-width: 0;
|
|
30
|
+
--xh-_toolbar-root-border: transparent;
|
|
31
|
+
--xh-_toolbar-root-bg: transparent;
|
|
32
|
+
--xh-_toolbar-root-bg-disabled: transparent;
|
|
33
|
+
|
|
34
|
+
/* 一行排不下就折行:条目宽度由各自的控件决定,硬撑一行会把整条顶出容器。
|
|
35
|
+
放了「更多」钮时改为收纳,见下方收纳一节 */
|
|
36
|
+
display: flex;
|
|
37
|
+
flex-wrap: wrap;
|
|
38
|
+
align-items: center;
|
|
39
|
+
gap: var(--xh-toolbar-gap, var(--xh-_toolbar-gap));
|
|
40
|
+
padding-block: var(--xh-toolbar-py, var(--xh-_toolbar-root-p));
|
|
41
|
+
padding-inline: var(--xh-toolbar-px, var(--xh-_toolbar-root-p));
|
|
42
|
+
border: var(--xh-_toolbar-root-border-width) solid var(--xh-toolbar-border, var(--xh-_toolbar-root-border));
|
|
43
|
+
border-radius: var(--xh-toolbar-radius, var(--xh-shape-surface));
|
|
44
|
+
background: var(--xh-toolbar-bg, var(--xh-_toolbar-root-bg));
|
|
45
|
+
color: var(--xh-toolbar-fg, var(--xh-fg-default));
|
|
46
|
+
/* 整条置灰与恢复是一次状态切换,底色与字色淡着换,不硬切 */
|
|
47
|
+
transition:
|
|
48
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
49
|
+
color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.xh-scope-toolbar[data-part='root'][data-orientation='horizontal'] {
|
|
53
|
+
flex-direction: row;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* 竖排时交叉轴改为拉伸:竖着的一条里每个条目该一样宽,居中会让它们参差不齐 */
|
|
57
|
+
.xh-scope-toolbar[data-part='root'][data-orientation='vertical'] {
|
|
58
|
+
flex-direction: column;
|
|
59
|
+
align-items: stretch;
|
|
60
|
+
flex-wrap: nowrap;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* —— 变体 —— */
|
|
64
|
+
.xh-scope-toolbar[data-part='root'][data-variant='ghost'] {
|
|
65
|
+
--xh-_toolbar-root-p: 0;
|
|
66
|
+
--xh-_toolbar-root-border-width: 0;
|
|
67
|
+
--xh-_toolbar-root-border: transparent;
|
|
68
|
+
--xh-_toolbar-root-bg: transparent;
|
|
69
|
+
--xh-_toolbar-root-bg-disabled: transparent;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* 淡底档:带内距、换成 subtle 底,描边让位给底色但留住 1px 边位(与 outline 几何一致),无影;
|
|
73
|
+
淡底承载面向条目下发 hover 200 → pressed 300 */
|
|
74
|
+
.xh-scope-toolbar[data-part='root'][data-variant='subtle'] {
|
|
75
|
+
--xh-_toolbar-root-p: var(--xh-_toolbar-p);
|
|
76
|
+
--xh-_toolbar-root-border-width: var(--xh-stroke-thin);
|
|
77
|
+
--xh-_toolbar-root-bg: var(--xh-bg-subtle);
|
|
78
|
+
--xh-action-host-bg-hover: var(--xh-bg-subtle-hover);
|
|
79
|
+
--xh-action-host-bg-pressed: var(--xh-bg-subtle-active);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* 附着式工具面:一张静态内容面,--xh-border-default 描边 + surface 底 + 无影(边界只由描边承担)。 */
|
|
83
|
+
.xh-scope-toolbar[data-part='root'][data-variant='outline'] {
|
|
84
|
+
--xh-_toolbar-root-p: var(--xh-_toolbar-p);
|
|
85
|
+
--xh-_toolbar-root-border-width: var(--xh-stroke-thin);
|
|
86
|
+
--xh-_toolbar-root-border: var(--xh-border-default);
|
|
87
|
+
--xh-_toolbar-root-bg: var(--xh-bg-surface);
|
|
88
|
+
--xh-_toolbar-root-bg-disabled: var(--xh-bg-muted);
|
|
89
|
+
|
|
90
|
+
border-radius: var(--xh-toolbar-radius, var(--xh-shape-surface));
|
|
91
|
+
box-shadow: var(--xh-toolbar-shadow, none);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* —— 尺寸 —— */
|
|
95
|
+
/* 缺省档写在上面的基础规则里。工具条自己不定条目的高度与字号(那归条目的皮肤),
|
|
96
|
+
这里只换排布尺寸;缺省的 --xh-space-1 已经是控件间距那把尺的小档,容不下三档,故一律取空间尺 */
|
|
97
|
+
.xh-scope-toolbar[data-part='root'][data-size='sm'] {
|
|
98
|
+
--xh-_toolbar-gap: var(--xh-space-0_5);
|
|
99
|
+
--xh-_toolbar-p: var(--xh-space-0_5);
|
|
100
|
+
--xh-_toolbar-item-h: var(--xh-control-h-sm);
|
|
101
|
+
--xh-icon-size: var(--xh-toolbar-icon-size, var(--xh-glyph-size-sm));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.xh-scope-toolbar[data-part='root'][data-size='lg'] {
|
|
105
|
+
--xh-_toolbar-gap: var(--xh-space-3);
|
|
106
|
+
--xh-_toolbar-p: var(--xh-space-2);
|
|
107
|
+
--xh-_toolbar-item-h: var(--xh-control-h-lg);
|
|
108
|
+
--xh-icon-size: var(--xh-toolbar-icon-size, var(--xh-glyph-size-lg));
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* root 会在焦点进条前短暂拿到 tabindex=0,但它的 onFocus 立刻把焦点转投给条目,
|
|
112
|
+
在它身上画环只会闪一下就跳走,高亮要长在条目上 */
|
|
113
|
+
.xh-scope-toolbar[data-part='root']:focus-visible {
|
|
114
|
+
outline: none;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.xh-scope-toolbar[data-part='root'][data-disabled] {
|
|
118
|
+
background: var(--xh-toolbar-bg-disabled, var(--xh-_toolbar-root-bg-disabled));
|
|
119
|
+
color: var(--xh-fg-disabled);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* 给了 display 的角色节点必须补这条:display 声明会盖掉 UA 的 [hidden]{display:none},
|
|
123
|
+
不补的话作者给节点加 hidden 后它照样显示 */
|
|
124
|
+
.xh-scope-toolbar[data-part='root'][hidden] {
|
|
125
|
+
display: none;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* 分组只负责把相关操作连成一条,表面与交互状态由每个分段自己绘制。 */
|
|
129
|
+
.xh-scope-toolbar[data-part='group'] {
|
|
130
|
+
display: inline-flex;
|
|
131
|
+
flex-wrap: nowrap;
|
|
132
|
+
align-items: stretch;
|
|
133
|
+
gap: var(--xh-toolbar-group-gap, var(--xh-space-0));
|
|
134
|
+
background: transparent;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.xh-scope-toolbar[data-part='group'][data-orientation='vertical'] {
|
|
138
|
+
flex-direction: column;
|
|
139
|
+
align-items: stretch;
|
|
140
|
+
flex-wrap: nowrap;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.xh-scope-toolbar[data-part='group'][hidden] {
|
|
144
|
+
display: none;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/* 默认条目是一枚无描边工具按钮:盒型、三档几何、悬停 / 按下 / 禁用面与按压缩放由 Action Control 的
|
|
148
|
+
text 档给(ghost 形态:ghost 根按画布承载 hover 100 → pressed 200,subtle 根与分组由 host 槽下发
|
|
149
|
+
200 → 300);这里只把使用者槽映射到桥接槽(-gap / -h / -px / -radius / -bg / -bg-hover /
|
|
150
|
+
-bg-active / -bg-disabled / -fg / -font-size 保留为第一参数)。作者仍可用类名或内联样式完整覆盖。 */
|
|
151
|
+
.xh-scope-toolbar[data-part='item'] {
|
|
152
|
+
--xh-action-gap: var(--xh-toolbar-item-gap, var(--xh-control-gap-sm));
|
|
153
|
+
--xh-action-visual-size: var(--xh-toolbar-item-h, var(--xh-_action-profile-visual-size));
|
|
154
|
+
--xh-action-padding-inline: var(--xh-toolbar-item-px, var(--xh-_action-profile-padding-inline));
|
|
155
|
+
--xh-action-radius: var(--xh-toolbar-item-radius, var(--xh-_action-profile-radius));
|
|
156
|
+
--xh-action-bg-rest: var(--xh-toolbar-item-bg, var(--xh-_action-variant-bg-rest));
|
|
157
|
+
--xh-action-bg-hover: var(--xh-toolbar-item-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
158
|
+
--xh-action-bg-pressed: var(--xh-toolbar-item-bg-active, var(--xh-_action-variant-bg-pressed));
|
|
159
|
+
--xh-action-bg-disabled: var(--xh-toolbar-item-bg-disabled, var(--xh-_action-variant-bg-disabled));
|
|
160
|
+
--xh-action-fg-rest: var(--xh-toolbar-item-fg, var(--xh-_action-variant-fg-rest));
|
|
161
|
+
--xh-action-fg-hover: var(--xh-toolbar-item-fg, var(--xh-_action-variant-fg-hover));
|
|
162
|
+
--xh-action-fg-pressed: var(--xh-toolbar-item-fg, var(--xh-_action-variant-fg-pressed));
|
|
163
|
+
--xh-action-font-size: var(--xh-toolbar-item-font-size, var(--xh-_action-profile-font-size));
|
|
164
|
+
|
|
165
|
+
font-weight: var(--xh-toolbar-item-font-weight, var(--xh-text-label-weight));
|
|
166
|
+
touch-action: manipulation;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/* 无滑块开关的按下态:品牌淡底 + 淡底前景,hover / 按下沿 12% → 20% → 28% 三档走;
|
|
170
|
+
三态都经桥接槽交给家族画,禁用面仍由家族按 data-disabled 给 */
|
|
171
|
+
.xh-scope-toolbar[data-part='item'][aria-pressed='true'] {
|
|
172
|
+
--xh-action-bg-rest: var(--xh-toolbar-item-bg-pressed, var(--xh-bg-brand-subtle));
|
|
173
|
+
--xh-action-bg-hover: var(--xh-toolbar-item-bg-pressed-hover, var(--xh-bg-brand-subtle-hover));
|
|
174
|
+
--xh-action-bg-pressed: var(--xh-toolbar-item-bg-pressed-active, var(--xh-bg-brand-subtle-active));
|
|
175
|
+
--xh-action-fg-rest: var(--xh-toolbar-item-fg-pressed, var(--xh-fg-on-brand-subtle));
|
|
176
|
+
--xh-action-fg-hover: var(--xh-toolbar-item-fg-pressed, var(--xh-fg-on-brand-subtle));
|
|
177
|
+
--xh-action-fg-pressed: var(--xh-toolbar-item-fg-pressed, var(--xh-fg-on-brand-subtle));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.xh-scope-toolbar[data-part='item'][hidden] {
|
|
181
|
+
display: none;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/* 组内分段使用同一块中性操作面(淡底承载:hover 200 → pressed 300 由 host 槽下发);
|
|
185
|
+
中间段保持直角,只给整组两端补回控件圆角。按下态 / 禁用面与散落条目同一套规则。
|
|
186
|
+
分段零间距直角相接,按下只换面不缩放:缩放任一段都会把两侧接缝撕开 */
|
|
187
|
+
.xh-scope-toolbar[data-part='group'] > .xh-scope-toolbar[data-part='item'] {
|
|
188
|
+
--xh-action-host-bg-hover: var(--xh-bg-subtle-hover);
|
|
189
|
+
--xh-action-host-bg-pressed: var(--xh-bg-subtle-active);
|
|
190
|
+
--xh-action-radius: 0;
|
|
191
|
+
--xh-action-scale-pressed: none;
|
|
192
|
+
--xh-action-bg-disabled: var(--xh-toolbar-item-bg-disabled, var(--xh-bg-subtle));
|
|
193
|
+
/* 组末端补回的控件圆角:尾部几段收进「更多」菜单后,由留下的最后一段接过去 */
|
|
194
|
+
--xh-_toolbar-segment-end-radius: var(--xh-toolbar-item-radius, var(--xh-shape-control));
|
|
195
|
+
|
|
196
|
+
position: relative;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/* 组内未选中的段才铺中性面:选中段的品牌淡底由上面 aria-pressed 那条给,这条比它更特定,不守卫会把它盖掉 */
|
|
200
|
+
.xh-scope-toolbar[data-part='group'] > .xh-scope-toolbar[data-part='item']:not([aria-pressed='true']) {
|
|
201
|
+
--xh-action-bg-rest: var(--xh-toolbar-item-bg, var(--xh-bg-subtle));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.xh-scope-toolbar[data-part='group'][data-orientation='horizontal']
|
|
205
|
+
> .xh-scope-toolbar[data-part='item']:first-of-type {
|
|
206
|
+
border-start-start-radius: var(--xh-toolbar-item-radius, var(--xh-shape-control));
|
|
207
|
+
border-end-start-radius: var(--xh-toolbar-item-radius, var(--xh-shape-control));
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.xh-scope-toolbar[data-part='group'][data-orientation='horizontal']
|
|
211
|
+
> .xh-scope-toolbar[data-part='item']:last-of-type {
|
|
212
|
+
border-start-end-radius: var(--xh-toolbar-item-radius, var(--xh-shape-control));
|
|
213
|
+
border-end-end-radius: var(--xh-toolbar-item-radius, var(--xh-shape-control));
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.xh-scope-toolbar[data-part='group'][data-orientation='vertical']
|
|
217
|
+
> .xh-scope-toolbar[data-part='item']:first-of-type {
|
|
218
|
+
border-start-start-radius: var(--xh-toolbar-item-radius, var(--xh-shape-control));
|
|
219
|
+
border-start-end-radius: var(--xh-toolbar-item-radius, var(--xh-shape-control));
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.xh-scope-toolbar[data-part='group'][data-orientation='vertical']
|
|
223
|
+
> .xh-scope-toolbar[data-part='item']:last-of-type {
|
|
224
|
+
border-end-start-radius: var(--xh-toolbar-item-radius, var(--xh-shape-control));
|
|
225
|
+
border-end-end-radius: var(--xh-toolbar-item-radius, var(--xh-shape-control));
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/* 分隔线取控件高度的一半;横排工具条里画竖线,竖排工具条里画横线。 */
|
|
229
|
+
.xh-scope-toolbar[data-part='separator'] {
|
|
230
|
+
flex: none;
|
|
231
|
+
align-self: center;
|
|
232
|
+
border-radius: var(--xh-toolbar-separator-radius, var(--xh-shape-pill));
|
|
233
|
+
background: var(--xh-toolbar-separator-color, var(--xh-border-default));
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.xh-scope-toolbar[data-part='separator'][data-orientation='vertical'] {
|
|
237
|
+
inline-size: var(--xh-toolbar-separator-thickness, var(--xh-stroke-thin));
|
|
238
|
+
block-size: var(--xh-_toolbar-separator-size);
|
|
239
|
+
margin-block: var(--xh-toolbar-separator-inset, var(--xh-space-0));
|
|
240
|
+
margin-inline: var(--xh-toolbar-separator-gap, var(--xh-space-0));
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.xh-scope-toolbar[data-part='separator'][data-orientation='horizontal'] {
|
|
244
|
+
block-size: var(--xh-toolbar-separator-thickness, var(--xh-stroke-thin));
|
|
245
|
+
inline-size: var(--xh-_toolbar-separator-size);
|
|
246
|
+
margin-block: var(--xh-toolbar-separator-gap, var(--xh-space-0));
|
|
247
|
+
margin-inline: var(--xh-toolbar-separator-inset, var(--xh-space-0));
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/* 组内分隔线覆盖在相邻分段的接缝上,不占额外宽度;半高弱线保留整体连续感。 */
|
|
251
|
+
.xh-scope-toolbar[data-part='group'] > .xh-scope-toolbar[data-part='separator'] {
|
|
252
|
+
background: var(--xh-toolbar-separator-color, var(--xh-fg-default));
|
|
253
|
+
opacity: var(--xh-toolbar-separator-opacity, var(--xh-control-separator-opacity));
|
|
254
|
+
pointer-events: none;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.xh-scope-toolbar[data-part='group'] > .xh-scope-toolbar[data-part='separator'][data-orientation='vertical'] {
|
|
258
|
+
margin-inline-start: calc(-1 * var(--xh-toolbar-separator-thickness, var(--xh-stroke-thin)));
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.xh-scope-toolbar[data-part='group'] > .xh-scope-toolbar[data-part='separator'][data-orientation='horizontal'] {
|
|
262
|
+
margin-block-start: calc(-1 * var(--xh-toolbar-separator-thickness, var(--xh-stroke-thin)));
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/* —— 收纳 —— */
|
|
266
|
+
/* 放了「更多」钮就不折行:放不下的条目按次序收进它弹出的菜单。条目与分组不压缩——压缩了,
|
|
267
|
+
量到的就不是自然长度;root 在 flex 父容器里可以被压到比内容窄,可用长度由外面给 */
|
|
268
|
+
.xh-scope-toolbar[data-part='root']:has(> .xh-scope-toolbar[data-part='overflow-trigger']) {
|
|
269
|
+
flex-wrap: nowrap;
|
|
270
|
+
min-inline-size: 0;
|
|
271
|
+
min-block-size: 0;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.xh-scope-toolbar[data-part='root']:has(> .xh-scope-toolbar[data-part='overflow-trigger'])
|
|
275
|
+
> :is(.xh-scope-toolbar[data-part='item'], .xh-scope-toolbar[data-part='group']) {
|
|
276
|
+
flex-shrink: 0;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/* 收起的条目之前的分隔线与整组收空的分组一并让开:它们分隔的那一侧已经没有露着的条目,
|
|
280
|
+
留着会在「更多」钮前多出一道线、多出一截间距 */
|
|
281
|
+
.xh-scope-toolbar[data-part='root']:has(> .xh-scope-toolbar[data-part='overflow-trigger']:not([hidden]))
|
|
282
|
+
> .xh-scope-toolbar[data-part='separator']:not(
|
|
283
|
+
:has(
|
|
284
|
+
~ .xh-scope-toolbar[data-part='item']:not([hidden]),
|
|
285
|
+
~ .xh-scope-toolbar[data-part='group'] > .xh-scope-toolbar[data-part='item']:not([hidden])
|
|
286
|
+
)
|
|
287
|
+
),
|
|
288
|
+
.xh-scope-toolbar[data-part='root']:has(> .xh-scope-toolbar[data-part='overflow-trigger']:not([hidden]))
|
|
289
|
+
> .xh-scope-toolbar[data-part='group']:not(:has(> .xh-scope-toolbar[data-part='item']:not([hidden]))),
|
|
290
|
+
.xh-scope-toolbar[data-part='root']:has(> .xh-scope-toolbar[data-part='overflow-trigger']:not([hidden]))
|
|
291
|
+
> .xh-scope-toolbar[data-part='group']
|
|
292
|
+
> .xh-scope-toolbar[data-part='separator']:not(:has(~ .xh-scope-toolbar[data-part='item']:not([hidden]))) {
|
|
293
|
+
display: none;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/* 组的尾部几段收进菜单后,留下的最后一段补回末端圆角 */
|
|
297
|
+
.xh-scope-toolbar[data-part='group'][data-orientation='horizontal']
|
|
298
|
+
> .xh-scope-toolbar[data-part='item']:not([hidden]):not(:has(~ .xh-scope-toolbar[data-part='item']:not([hidden]))) {
|
|
299
|
+
border-start-end-radius: var(--xh-_toolbar-segment-end-radius);
|
|
300
|
+
border-end-end-radius: var(--xh-_toolbar-segment-end-radius);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.xh-scope-toolbar[data-part='group'][data-orientation='vertical']
|
|
304
|
+
> .xh-scope-toolbar[data-part='item']:not([hidden]):not(:has(~ .xh-scope-toolbar[data-part='item']:not([hidden]))) {
|
|
305
|
+
border-end-start-radius: var(--xh-_toolbar-segment-end-radius);
|
|
306
|
+
border-end-end-radius: var(--xh-_toolbar-segment-end-radius);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/* 「更多」钮:行尾一枚单图标钮,接 Action Control icon 档 ghost 面,与条目同档(连接层投影 profile /
|
|
310
|
+
variant / size)。盒取条目同高的正方形,四态面、0.97 按压、焦点环与粗指针 44px 命中区由家族配方给;
|
|
311
|
+
承载面的阶梯随根的 variant 经 host 槽下发(ghost 根白底 100 → 200,subtle 根淡底 200 → 300) */
|
|
312
|
+
.xh-scope-toolbar[data-part='overflow-trigger'] {
|
|
313
|
+
touch-action: manipulation;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/* 菜单开着:与悬停同档的中性面,不用品牌色、不另画环;收起的是哪几条由菜单本身说明 */
|
|
317
|
+
.xh-scope-toolbar[data-part='overflow-trigger'][data-state='open'] {
|
|
318
|
+
--xh-action-bg-rest: var(--xh-_action-variant-bg-hover);
|
|
319
|
+
--xh-action-bg-focus-visible: var(--xh-_action-variant-bg-hover);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/* 没写内容就由皮肤画兜底字形:横排三点。作者塞了自己的图标这条即不命中;
|
|
323
|
+
字形与条目里的图标同一把尺(根按尺寸档下发的 --xh-icon-size) */
|
|
324
|
+
.xh-scope-toolbar[data-part='overflow-trigger']:empty::before {
|
|
325
|
+
content: '';
|
|
326
|
+
display: inline-block;
|
|
327
|
+
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
328
|
+
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
329
|
+
background-color: currentColor;
|
|
330
|
+
-webkit-mask: var(--xh-glyph-mark-ellipsis) center / contain no-repeat;
|
|
331
|
+
mask: var(--xh-glyph-mark-ellipsis) center / contain no-repeat;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/* 全部放得下时连接层给的是 hidden 属性;家族那条 display 会把 UA 规则盖掉 */
|
|
335
|
+
.xh-scope-toolbar[data-part='overflow-trigger'][hidden] {
|
|
336
|
+
display: none;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
@media (forced-colors: active) {
|
|
340
|
+
/* 分段之间那条线画的是一块纯底色,这一档里底色被统一换成 Canvas,线整条消失,
|
|
341
|
+
几段控件就连成了一长串。换成前景色画回来 */
|
|
342
|
+
.xh-scope-toolbar[data-part='separator'] {
|
|
343
|
+
background: CanvasText;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
@media (forced-colors: active) {
|
|
348
|
+
/* 兜底字形是 mask 挖出来的一块底色,这一档里底色被系统换成 Canvas,字形跟着消失。
|
|
349
|
+
字形退出强制换色、直接写系统色(不能取 currentColor:退出强制换色的伪元素读到的是被系统换掉之前的作者色):
|
|
350
|
+
按钮面上取 ButtonText,悬停与按下时家族把按钮涂成 Highlight、字形换 HighlightText;
|
|
351
|
+
禁用取 GrayText */
|
|
352
|
+
.xh-scope-toolbar[data-part='overflow-trigger']:empty::before {
|
|
353
|
+
forced-color-adjust: none;
|
|
354
|
+
background-color: ButtonText;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.xh-scope-toolbar[data-part='overflow-trigger']:not([data-disabled]):not([data-loading]):is(:hover, :active, [data-pressed]):empty::before {
|
|
358
|
+
background-color: HighlightText;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.xh-scope-toolbar[data-part='overflow-trigger'][data-disabled]:empty::before {
|
|
362
|
+
background-color: GrayText;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
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
|
+
/* 定义 tooltip 样式。 */
|
|
7
|
+
|
|
8
|
+
/* 共享关键帧由 family/motion.css 提供,本皮肤 @import 它,单独引入仍成立。 */
|
|
9
|
+
@import '../family/motion.css';
|
|
10
|
+
|
|
11
|
+
@layer xihan.components {
|
|
12
|
+
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
13
|
+
.xh-scope-tooltip {
|
|
14
|
+
--xh-tooltip-skin: 1;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.xh-scope-tooltip[data-part='trigger'] {
|
|
18
|
+
display: inline-flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
justify-content: center;
|
|
21
|
+
gap: var(--xh-tooltip-trigger-gap, var(--xh-control-gap-sm));
|
|
22
|
+
border: 0;
|
|
23
|
+
background: transparent;
|
|
24
|
+
color: inherit;
|
|
25
|
+
font: inherit;
|
|
26
|
+
cursor: inherit;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* 这里的 data-disabled 关掉的是提示,不是宿主控件:光标仍旧交给宿主 */
|
|
30
|
+
.xh-scope-tooltip[data-part='trigger'][data-disabled] {
|
|
31
|
+
cursor: inherit;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* 坐标由定位引擎写在行内 style 上,这里只兜底 SSR 首帧 */
|
|
35
|
+
.xh-scope-tooltip[data-part='positioner'] {
|
|
36
|
+
/* 先截断祖先浮层的方向,再按本次实际 placement 只启用一侧。 */
|
|
37
|
+
--xh-_overlay-enter-up: 0;
|
|
38
|
+
--xh-_overlay-enter-down: 0;
|
|
39
|
+
--xh-_overlay-enter-left: 0;
|
|
40
|
+
--xh-_overlay-enter-right: 0;
|
|
41
|
+
|
|
42
|
+
position: fixed;
|
|
43
|
+
inset-block-start: 0;
|
|
44
|
+
inset-inline-start: 0;
|
|
45
|
+
z-index: var(--xh-tooltip-layer, var(--xh-_layer, var(--xh-layer-tooltip)));
|
|
46
|
+
/* 浮层不承载交互:指针必须能穿过去点到底下的东西 */
|
|
47
|
+
pointer-events: none;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* 锚点滚出可视区时连浮层一起隐藏 */
|
|
51
|
+
.xh-scope-tooltip[data-part='positioner'][data-hidden] {
|
|
52
|
+
visibility: hidden;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* 进退位移按落定的那一侧给。placement 与 translate 都是物理方向,不随书写方向翻。 */
|
|
56
|
+
.xh-scope-tooltip[data-part='positioner'][data-placement^='top'] {
|
|
57
|
+
--xh-_overlay-enter-down: 1;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.xh-scope-tooltip[data-part='positioner'][data-placement^='bottom'] {
|
|
61
|
+
--xh-_overlay-enter-up: 1;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.xh-scope-tooltip[data-part='positioner'][data-placement^='left'] {
|
|
65
|
+
--xh-_overlay-enter-right: 1;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.xh-scope-tooltip[data-part='positioner'][data-placement^='right'] {
|
|
69
|
+
--xh-_overlay-enter-left: 1;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.xh-scope-tooltip[data-part='content'] {
|
|
73
|
+
/* 尺寸档只换这三个私有槽。tooltip 没有 root 部件,两轴都落在浮层树最外层的 content 上,
|
|
74
|
+
箭头是它的后代,语气槽一并继承 */
|
|
75
|
+
--xh-_tooltip-py: var(--xh-space-1);
|
|
76
|
+
--xh-_tooltip-px: var(--xh-space-2);
|
|
77
|
+
--xh-_tooltip-font-size: var(--xh-control-caption-md);
|
|
78
|
+
/* Tooltip 保留反白身份(登记的反白 compact frosted):短提示要与可交互的普通主题浮层一眼分开。
|
|
79
|
+
94% 是六种 tone 在纯黑/纯白最坏底色上仍托住 4.5:1 正文的首个安全档。
|
|
80
|
+
边不取 --xh-material-frosted-border:那是深色 14% 的透明边,压在反白深底上看不见,
|
|
81
|
+
浮层要的 1px 可见边界由 on 色 20% 拼色承担;浮层不用玻璃高光,顶光缺省不画 */
|
|
82
|
+
--xh-_tooltip-solid: var(--xh-_tone, var(--xh-fg-default));
|
|
83
|
+
--xh-_tooltip-on: var(--xh-_tone-on, var(--xh-bg-surface));
|
|
84
|
+
--xh-_tooltip-border: color-mix(in oklab, var(--xh-_tooltip-on) 20%, transparent);
|
|
85
|
+
|
|
86
|
+
/* 与 positioner 相反:浮层本体要能接指针,指针停在提示上就不该收起
|
|
87
|
+
(长文案需要停留细看)。positioner 仍是 none,空白区域照样点得穿。 */
|
|
88
|
+
/* 显式声明 display 是为了盖掉 UA 的 [hidden]{display:none}:收起那一帧 content 仍带 hidden,
|
|
89
|
+
盒子得先在,退场动画才播得出来。真正的收起由宿主在退场结束后落成内联 display */
|
|
90
|
+
display: block;
|
|
91
|
+
position: relative;
|
|
92
|
+
isolation: isolate;
|
|
93
|
+
pointer-events: auto;
|
|
94
|
+
max-inline-size: var(--xh-tooltip-max-w, var(--xh-overlay-max-w));
|
|
95
|
+
padding-block: var(--xh-tooltip-py, var(--xh-_tooltip-py));
|
|
96
|
+
padding-inline: var(--xh-tooltip-px, var(--xh-_tooltip-px));
|
|
97
|
+
/* 这里刻意用 control 而不是浮层那档 surface:提示气泡通常只有一行字、高度接近控件,
|
|
98
|
+
8px 圆角在这个尺寸上占比过大,看着会发胖。档位定义里为此单列了一条 */
|
|
99
|
+
border-radius: var(--xh-tooltip-radius, var(--xh-shape-control));
|
|
100
|
+
border: var(--xh-stroke-thin) solid var(--xh-tooltip-border, var(--xh-_tooltip-border));
|
|
101
|
+
background: transparent;
|
|
102
|
+
color: var(--xh-tooltip-fg, var(--xh-_tooltip-on));
|
|
103
|
+
font-size: var(--xh-tooltip-font-size, var(--xh-_tooltip-font-size));
|
|
104
|
+
line-height: var(--xh-leading-normal);
|
|
105
|
+
overflow-wrap: anywhere;
|
|
106
|
+
text-wrap: pretty;
|
|
107
|
+
--xh-_tooltip-elevation-shadow: var(--xh-tooltip-shadow, var(--xh-material-frosted-compact-shadow));
|
|
108
|
+
|
|
109
|
+
/* 顶光槽缺省透明(不用顶部高光),使用者要加自行灌色 */
|
|
110
|
+
box-shadow:
|
|
111
|
+
inset 0 var(--xh-stroke-thin) 0 var(--xh-tooltip-highlight, transparent),
|
|
112
|
+
var(--xh-_tooltip-elevation-shadow);
|
|
113
|
+
-webkit-backdrop-filter: var(--xh-tooltip-backdrop, var(--xh-material-frosted-compact-backdrop));
|
|
114
|
+
backdrop-filter: var(--xh-tooltip-backdrop, var(--xh-material-frosted-compact-backdrop));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* 跟随鼠标的提示压在指针旁边、随指针挪:它接了指针就会挡住 trigger 上的移动,指针一滑进去便算离开了 trigger。
|
|
118
|
+
这一档浮层本体同样让指针穿过去,停留细看交给 trigger 本身 */
|
|
119
|
+
.xh-scope-tooltip[data-part='positioner'][data-follow-cursor] .xh-scope-tooltip[data-part='content'] {
|
|
120
|
+
pointer-events: none;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* 反白面是一块彩色面(连接层打 data-xh-ink-surface):面内的作者内容按这块底取墨色。
|
|
124
|
+
底色取自被墨色域改写的令牌,所以域只落在面内的子元素上,这里的取值仍按外层主题解析 */
|
|
125
|
+
.xh-scope-tooltip[data-part='content'][data-xh-ink-surface] {
|
|
126
|
+
--xh-ink-surface: var(--xh-tooltip-bg, var(--xh-_tooltip-solid));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* 光学层单独承载 tint 与透明度;backdrop-filter 只采样元素背后,不处理正文。 */
|
|
130
|
+
.xh-scope-tooltip[data-part='content']::before {
|
|
131
|
+
content: '';
|
|
132
|
+
position: absolute;
|
|
133
|
+
z-index: -1;
|
|
134
|
+
inset: 0;
|
|
135
|
+
border-radius: inherit;
|
|
136
|
+
background: var(--xh-tooltip-bg, var(--xh-_tooltip-solid));
|
|
137
|
+
opacity: var(--xh-material-frosted-compact-alpha);
|
|
138
|
+
pointer-events: none;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* 入场走 enter 档(锚定列表族的 tooltip 入场 --xh-motion-duration-enter),退场仍是 exit。
|
|
142
|
+
接替上一个提示打开的(data-instant)直接呈现:横扫一排钮时提示一个个跟上,不再一个个滑入 */
|
|
143
|
+
.xh-scope-tooltip[data-part='content'][data-state='open']:not([data-instant]) {
|
|
144
|
+
animation: xh-overlay-slide-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/* 退场:收起那一帧 hidden 由退场闸门押后,这里才播得出来。forwards 把末态钉住,
|
|
148
|
+
免得动画结束到真收起之间闪一下原样 */
|
|
149
|
+
.xh-scope-tooltip[data-part='content'][data-state='closed'] {
|
|
150
|
+
will-change: opacity, translate;
|
|
151
|
+
animation: xh-overlay-slide-out var(--xh-motion-duration-exit) var(--xh-motion-ease-exit) forwards;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/* —— 尺寸 —— */
|
|
155
|
+
/* 缺省档写在 content 的基础规则里。提示的内边距与字号本就不在 control-* 那把尺上
|
|
156
|
+
(它是浮层不是控件),故按 space / font-size 档上下各挪一级 */
|
|
157
|
+
.xh-scope-tooltip[data-part='content'][data-size='sm'] {
|
|
158
|
+
--xh-_tooltip-py: var(--xh-space-0_5);
|
|
159
|
+
--xh-_tooltip-px: var(--xh-space-1_5);
|
|
160
|
+
--xh-_tooltip-font-size: var(--xh-control-caption-sm);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.xh-scope-tooltip[data-part='content'][data-size='lg'] {
|
|
164
|
+
--xh-_tooltip-py: var(--xh-space-1_5);
|
|
165
|
+
--xh-_tooltip-px: var(--xh-space-2_5);
|
|
166
|
+
--xh-_tooltip-font-size: var(--xh-control-caption-lg);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/* 箭头的底色与描边色,几何在 overlay-arrow.css。
|
|
170
|
+
交叉轴落点由定位引擎经内联自定义属性写进来,没给时退回居中 */
|
|
171
|
+
.xh-scope-tooltip[data-part='arrow'] {
|
|
172
|
+
--xh-_tooltip-arrow-x: 50%;
|
|
173
|
+
--xh-_tooltip-arrow-y: 50%;
|
|
174
|
+
--xh-_overlay-arrow-size: var(--xh-tooltip-arrow-size, var(--xh-overlay-arrow-size));
|
|
175
|
+
--xh-_overlay-arrow-x: var(--xh-_tooltip-arrow-x);
|
|
176
|
+
--xh-_overlay-arrow-y: var(--xh-_tooltip-arrow-y);
|
|
177
|
+
|
|
178
|
+
background: var(--xh-tooltip-bg, var(--xh-_tooltip-solid));
|
|
179
|
+
border: var(--xh-stroke-thin) solid var(--xh-tooltip-border, var(--xh-_tooltip-border));
|
|
180
|
+
opacity: var(--xh-material-frosted-compact-alpha);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* 高对比仍保持反白语义:compact 配方已把 tint / blur / shadow 换成实体档,此处只加强同色边界。 */
|
|
184
|
+
:is([data-contrast='more'] :where(.xh-scope-tooltip), [data-contrast='more']).xh-scope-tooltip[data-part='content'] {
|
|
185
|
+
--xh-_tooltip-border: var(--xh-_tooltip-on);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
@media (forced-colors: active) {
|
|
189
|
+
.xh-scope-tooltip[data-part='content'],
|
|
190
|
+
.xh-scope-tooltip[data-part='arrow'] {
|
|
191
|
+
border-color: CanvasText;
|
|
192
|
+
background: Canvas;
|
|
193
|
+
color: CanvasText;
|
|
194
|
+
box-shadow: none;
|
|
195
|
+
-webkit-backdrop-filter: none;
|
|
196
|
+
backdrop-filter: none;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.xh-scope-tooltip[data-part='content']::before {
|
|
200
|
+
background: Canvas;
|
|
201
|
+
opacity: 1;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/* 声明过任何 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去。
|
|
206
|
+
写在文件末尾:兜底必须排在该部件所有 display 声明之后 */
|
|
207
|
+
.xh-scope-tooltip[data-part='trigger'][hidden] {
|
|
208
|
+
display: none;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
@media print {
|
|
212
|
+
/* 打印:定位层与遮罩是交互期才存在的东西,落到纸上只会盖住底下的正文。
|
|
213
|
+
收起写在这份皮肤里而不是 reset:reset 层排在组件层之前,组件层里任何一条 display 都压得住它。 */
|
|
214
|
+
.xh-scope-tooltip[data-part='positioner'] {
|
|
215
|
+
display: none;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|