@xihan-ui/styles 3.1.0 → 4.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 +470 -0
- package/component-tokens.d.ts +230 -60
- package/components.tokens.json +5156 -1557
- package/css/accordion.css +47 -20
- package/css/alert.css +16 -17
- package/css/anchor.css +2 -2
- package/css/approval.css +41 -17
- package/css/avatar-group.css +9 -12
- package/css/avatar.css +20 -18
- package/css/back-top.css +21 -7
- package/css/badge.css +5 -5
- package/css/breadcrumb.css +18 -16
- package/css/button-group.css +4 -6
- package/css/button.css +13 -12
- package/css/calendar-picker.css +178 -95
- package/css/calendar-range-picker.css +207 -122
- package/css/card.css +34 -6
- package/css/carousel.css +94 -46
- package/css/cartesian-chart.css +11 -11
- package/css/cascader.css +51 -39
- package/css/checkbox-group.css +9 -6
- package/css/checkbox.css +5 -4
- package/css/citation.css +9 -4
- package/css/clipboard.css +20 -4
- package/css/code-view.css +6 -6
- package/css/collapsible.css +29 -14
- package/css/color-field.css +4 -4
- package/css/color-picker.css +77 -23
- package/css/color-slider.css +10 -8
- package/css/color-swatch-picker.css +14 -9
- package/css/combobox.css +26 -14
- package/css/command.css +14 -9
- package/css/context-menu.css +10 -5
- package/css/date-field.css +12 -6
- package/css/date-picker.css +178 -109
- package/css/date-range-picker.css +199 -130
- package/css/description.css +10 -6
- package/css/descriptions.css +47 -19
- package/css/dialog.css +50 -35
- package/css/diff-view.css +8 -8
- package/css/drawer.css +75 -21
- package/css/editable.css +15 -41
- package/css/empty-state.css +21 -3
- package/css/field-array.css +5 -2
- package/css/field.css +17 -18
- package/css/fieldset.css +33 -13
- package/css/file-upload.css +66 -33
- package/css/float-button.css +60 -35
- package/css/floating-panel.css +1 -1
- package/css/form.css +30 -16
- package/css/graph-chart.css +2 -2
- package/css/grid-list.css +1 -1
- package/css/highlight.css +5 -5
- package/css/hover-card.css +19 -12
- package/css/image-viewer.css +77 -27
- package/css/image.css +13 -5
- package/css/infinite-scroll.css +8 -4
- package/css/input-group.css +74 -26
- package/css/kbd.css +1 -1
- package/css/label.css +27 -11
- package/css/layout.css +17 -10
- package/css/list.css +13 -9
- package/css/listbox.css +12 -7
- package/css/loading-bar.css +3 -0
- package/css/mention.css +11 -9
- package/css/menu.css +10 -5
- package/css/menubar.css +13 -8
- package/css/message-feed.css +1 -1
- package/css/navigation-menu.css +2 -2
- package/css/notification.css +132 -49
- package/css/number-animation.css +2 -2
- package/css/number-field.css +75 -52
- package/css/page-header.css +64 -27
- package/css/pagination.css +35 -38
- package/css/password-input.css +12 -68
- package/css/pin-input.css +18 -26
- package/css/popconfirm.css +23 -14
- package/css/popover.css +18 -12
- package/css/progress.css +14 -13
- package/css/prompt-input.css +3 -3
- package/css/question-flow.css +41 -15
- package/css/radar-chart.css +6 -6
- package/css/radio-group.css +120 -55
- package/css/rating.css +32 -15
- package/css/select.css +16 -12
- package/css/separator.css +24 -6
- package/css/side-nav.css +29 -24
- package/css/signature-pad.css +23 -9
- package/css/skeleton.css +12 -12
- package/css/slider.css +77 -48
- package/css/sortable.css +2 -2
- package/css/sparkline.css +8 -2
- package/css/spinner.css +40 -20
- package/css/statistic.css +14 -14
- package/css/steps.css +115 -84
- package/css/switch.css +9 -7
- package/css/table.css +29 -12
- package/css/tabs.css +35 -12
- package/css/tag-group.css +17 -6
- package/css/tag.css +54 -29
- package/css/tags-input.css +39 -20
- package/css/text-field.css +5 -5
- package/css/time-field.css +4 -4
- package/css/time-picker.css +150 -64
- package/css/time-range-picker.css +91 -62
- package/css/timeline.css +37 -20
- package/css/timer.css +3 -3
- package/css/toggle-group.css +4 -4
- package/css/tool-call.css +13 -11
- package/css/toolbar.css +6 -5
- package/css/tooltip.css +16 -17
- package/css/tour.css +14 -7
- package/css/transfer.css +22 -16
- package/css/tree-select.css +12 -12
- package/css/tree.css +26 -25
- package/css/typography.css +28 -25
- package/dist/css/accordion.css +296 -0
- package/dist/css/affix.css +47 -0
- package/dist/css/alert.css +246 -0
- package/dist/css/anchor.css +252 -0
- package/dist/css/approval.css +525 -0
- package/dist/css/avatar-group.css +96 -0
- package/dist/css/avatar.css +100 -0
- package/dist/css/back-top.css +175 -0
- package/dist/css/badge.css +205 -0
- package/dist/css/bar-code.css +62 -0
- package/dist/css/breadcrumb.css +232 -0
- package/dist/css/button-group.css +261 -0
- package/dist/css/button.css +216 -0
- package/dist/css/calendar-picker.css +550 -0
- package/dist/css/calendar-range-picker.css +639 -0
- package/dist/css/card.css +249 -0
- package/dist/css/carousel.css +726 -0
- package/dist/css/cartesian-chart.css +830 -0
- package/dist/css/cascader.css +973 -0
- package/dist/css/checkbox-group.css +361 -0
- package/dist/css/checkbox.css +258 -0
- package/dist/css/citation.css +475 -0
- package/dist/css/clipboard.css +331 -0
- package/dist/css/code-view.css +374 -0
- package/dist/css/collapsible.css +200 -0
- package/dist/css/color-field.css +176 -0
- package/dist/css/color-picker.css +649 -0
- package/dist/css/color-slider.css +283 -0
- package/dist/css/color-swatch-picker.css +250 -0
- package/dist/css/color-swatch.css +35 -0
- package/dist/css/combobox.css +578 -0
- package/dist/css/command.css +404 -0
- package/dist/css/context-menu.css +425 -0
- package/dist/css/date-field.css +317 -0
- package/dist/css/date-picker.css +931 -0
- package/dist/css/date-range-picker.css +949 -0
- package/dist/css/description.css +71 -0
- package/dist/css/descriptions.css +327 -0
- package/dist/css/dialog.css +470 -0
- package/dist/css/diff-view.css +513 -0
- package/dist/css/download-trigger.css +151 -0
- package/dist/css/drawer.css +606 -0
- package/dist/css/editable.css +269 -0
- package/dist/css/empty-state.css +181 -0
- package/dist/css/field-array.css +229 -0
- package/dist/css/field.css +165 -0
- package/dist/css/fieldset.css +122 -0
- package/dist/css/file-upload.css +462 -0
- package/dist/css/flex.css +441 -0
- package/dist/css/float-button.css +579 -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 +407 -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 +233 -0
- package/dist/css/icon.css +225 -0
- package/dist/css/image-cropper.css +373 -0
- package/dist/css/image-viewer.css +588 -0
- package/dist/css/image.css +106 -0
- package/dist/css/infinite-scroll.css +81 -0
- package/dist/css/input-group.css +323 -0
- package/dist/css/json-viewer.css +379 -0
- package/dist/css/kbd.css +72 -0
- package/dist/css/label.css +94 -0
- package/dist/css/layers.css +7 -0
- package/dist/css/layout.css +379 -0
- package/dist/css/liquid.css +106 -0
- package/dist/css/list.css +156 -0
- package/dist/css/listbox.css +395 -0
- package/dist/css/loading-bar.css +144 -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 +395 -0
- package/dist/css/menu.css +369 -0
- package/dist/css/menubar.css +461 -0
- package/dist/css/message-feed.css +318 -0
- package/dist/css/navigation-menu.css +513 -0
- package/dist/css/notification.css +865 -0
- package/dist/css/number-animation.css +44 -0
- package/dist/css/number-field.css +275 -0
- package/dist/css/overlay-arrow.css +56 -0
- package/dist/css/page-header.css +221 -0
- package/dist/css/pagination.css +447 -0
- package/dist/css/password-input.css +335 -0
- package/dist/css/pie-chart.css +247 -0
- package/dist/css/pin-input.css +191 -0
- package/dist/css/pointer.css +36 -0
- package/dist/css/popconfirm.css +329 -0
- package/dist/css/popover.css +285 -0
- package/dist/css/progress.css +502 -0
- package/dist/css/prompt-input.css +260 -0
- package/dist/css/question-flow.css +579 -0
- package/dist/css/radar-chart.css +233 -0
- package/dist/css/radio-group.css +663 -0
- package/dist/css/rating.css +311 -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 +616 -0
- package/dist/css/separator.css +140 -0
- package/dist/css/side-nav.css +481 -0
- package/dist/css/signature-pad.css +193 -0
- package/dist/css/skeleton.css +161 -0
- package/dist/css/slider.css +403 -0
- package/dist/css/sortable.css +228 -0
- package/dist/css/sparkline.css +170 -0
- package/dist/css/spinner.css +256 -0
- package/dist/css/splitter.css +159 -0
- package/dist/css/statistic.css +137 -0
- package/dist/css/steps.css +658 -0
- package/dist/css/switch.css +353 -0
- package/dist/css/table.css +1162 -0
- package/dist/css/tabs.css +967 -0
- package/dist/css/tag-group.css +258 -0
- package/dist/css/tag.css +335 -0
- package/dist/css/tags-input.css +341 -0
- package/dist/css/text-field.css +197 -0
- package/dist/css/time-field.css +277 -0
- package/dist/css/time-picker.css +793 -0
- package/dist/css/time-range-picker.css +775 -0
- package/dist/css/timeline.css +440 -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 +431 -0
- package/dist/css/toolbar.css +366 -0
- package/dist/css/tooltip.css +217 -0
- package/dist/css/tour.css +446 -0
- package/dist/css/transfer.css +644 -0
- package/dist/css/tree-select.css +878 -0
- package/dist/css/tree.css +734 -0
- package/dist/css/truncate.css +108 -0
- package/dist/css/typography.css +475 -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 +493 -0
- package/dist/family/chart.css +537 -0
- package/dist/family/check-mark.css +94 -0
- package/dist/family/choice-card.css +97 -0
- package/dist/family/collection-item.css +768 -0
- package/dist/family/field-chrome.css +296 -0
- package/dist/family/loading-ring.css +102 -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 +65 -0
- package/family/action-control.css +33 -36
- package/family/chart.css +57 -0
- package/family/collection-item.css +12 -8
- package/family/field-chrome.css +28 -19
- package/family/loading-ring.css +20 -13
- package/family/swatch.css +4 -4
- package/family/tag-list.css +6 -0
- package/index.css +10349 -8756
- package/index.unlayered.css +10350 -8758
- package/package.json +165 -164
package/css/card.css
CHANGED
|
@@ -13,17 +13,22 @@
|
|
|
13
13
|
--xh-card-skin: 1;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
/* Card
|
|
16
|
+
/* Card 是一块描边内容面:根自己不留内衬,头部条、正文与页脚各带各的内衬,头部条的分隔线才能贯通整宽,
|
|
17
|
+
直接放进根的媒体也贴边铺满;布局方向可由作者在根上覆盖。
|
|
17
18
|
边界由 --xh-border-default 描边承担,raised 落影只是抬起的加成(Card 是唯一登记 raised 的静态面,
|
|
18
|
-
且 raised
|
|
19
|
+
且 raised 必带描边)。横向内衬 16px 不随密度;正文纵向内衬走 --xh-surface-pad-lg(16,紧凑 12)。
|
|
20
|
+
--xh-card-p 改的是各部件的内衬,四边同值 */
|
|
19
21
|
[data-scope='card'][data-part='root'] {
|
|
22
|
+
--xh-_card-px: var(--xh-card-p, var(--xh-space-4));
|
|
23
|
+
--xh-_card-py: var(--xh-card-p, var(--xh-surface-pad-lg));
|
|
24
|
+
|
|
20
25
|
position: relative;
|
|
21
26
|
display: flex;
|
|
22
27
|
flex-direction: column;
|
|
23
|
-
gap: var(--xh-card-gap,
|
|
28
|
+
gap: var(--xh-card-gap, 0);
|
|
24
29
|
min-inline-size: 0;
|
|
25
30
|
overflow: visible;
|
|
26
|
-
padding:
|
|
31
|
+
padding: 0;
|
|
27
32
|
border: var(--xh-stroke-thin) solid var(--xh-card-border, var(--xh-border-default));
|
|
28
33
|
border-radius: var(--xh-card-radius, var(--xh-shape-surface));
|
|
29
34
|
background: var(--xh-card-bg, var(--xh-bg-surface));
|
|
@@ -159,15 +164,26 @@
|
|
|
159
164
|
flex-direction: column;
|
|
160
165
|
}
|
|
161
166
|
|
|
167
|
+
/* 头部条:根的直接子节点才是条——一行区块标题时高 46px(紧凑 40px),标题在条里竖向居中,
|
|
168
|
+
横向内衬与正文同起点,底边一道 1px 内部分隔线。嵌在正文里的 header(横向卡片把标题与正文排在一列)不画条 */
|
|
169
|
+
[data-scope='card'][data-part='root'] > [data-scope='card'][data-part='header'] {
|
|
170
|
+
justify-content: center;
|
|
171
|
+
min-block-size: var(--xh-card-header-h, var(--xh-surface-header-h));
|
|
172
|
+
padding-block: var(--xh-card-header-py, var(--xh-space-2));
|
|
173
|
+
padding-inline: var(--xh-_card-px);
|
|
174
|
+
border-block-end: var(--xh-stroke-thin) solid var(--xh-card-header-border, var(--xh-border-subtle));
|
|
175
|
+
}
|
|
176
|
+
|
|
162
177
|
[data-scope='card'][data-part='title'],
|
|
163
178
|
[data-scope='card'][data-part='description'] {
|
|
164
179
|
margin: 0;
|
|
165
180
|
}
|
|
166
181
|
|
|
182
|
+
/* 标题取区块标题档(heading-3)、正文色 */
|
|
167
183
|
[data-scope='card'][data-part='title'] {
|
|
168
184
|
color: var(--xh-card-title-fg, var(--xh-fg-default));
|
|
169
|
-
font-size: var(--xh-card-title-font-size, var(--xh-text-
|
|
170
|
-
font-weight: var(--xh-card-title-font-weight, var(--xh-
|
|
185
|
+
font-size: var(--xh-card-title-font-size, var(--xh-text-heading-3-size));
|
|
186
|
+
font-weight: var(--xh-card-title-font-weight, var(--xh-text-heading-3-weight));
|
|
171
187
|
line-height: var(--xh-card-title-leading, var(--xh-leading-tight));
|
|
172
188
|
}
|
|
173
189
|
|
|
@@ -177,12 +193,16 @@
|
|
|
177
193
|
line-height: var(--xh-card-description-leading, var(--xh-leading-normal));
|
|
178
194
|
}
|
|
179
195
|
|
|
196
|
+
/* 正文:四边内衬、14px 次级色 */
|
|
180
197
|
[data-scope='card'][data-part='content'] {
|
|
181
198
|
display: flex;
|
|
182
199
|
flex: 1 1 auto;
|
|
183
200
|
flex-direction: column;
|
|
184
201
|
gap: var(--xh-card-content-gap, var(--xh-space-1));
|
|
185
202
|
min-inline-size: 0;
|
|
203
|
+
padding: var(--xh-_card-py) var(--xh-_card-px);
|
|
204
|
+
color: var(--xh-card-content-fg, var(--xh-fg-muted));
|
|
205
|
+
font-size: var(--xh-card-content-font-size, var(--xh-text-body-size));
|
|
186
206
|
}
|
|
187
207
|
|
|
188
208
|
[data-scope='card'][data-part='footer'] {
|
|
@@ -192,6 +212,14 @@
|
|
|
192
212
|
gap: var(--xh-card-footer-gap, var(--xh-space-2));
|
|
193
213
|
}
|
|
194
214
|
|
|
215
|
+
/* 页脚是正文的延续:与正文同起点,顶上不再留白(正文的底内衬就是两者的间距),底边留正文同档的内衬。
|
|
216
|
+
嵌在正文里的页脚随正文的内衬走,不另加 */
|
|
217
|
+
[data-scope='card'][data-part='root'] > [data-scope='card'][data-part='footer'] {
|
|
218
|
+
padding-block-start: 0;
|
|
219
|
+
padding-block-end: var(--xh-_card-py);
|
|
220
|
+
padding-inline: var(--xh-_card-px);
|
|
221
|
+
}
|
|
222
|
+
|
|
195
223
|
@media print {
|
|
196
224
|
[data-scope='card'][data-part='root'] {
|
|
197
225
|
border-color: currentColor;
|
package/css/carousel.css
CHANGED
|
@@ -19,8 +19,9 @@
|
|
|
19
19
|
[data-scope='carousel'][data-part='root'] {
|
|
20
20
|
/* 自动播放开启时由 Headless 写入真实间隔;0ms 只用于未接入运行时的静态标记。 */
|
|
21
21
|
--xh-_carousel-autoplay-duration: 0ms;
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
/* 进度条起步时裁掉的四边(inset 的上 右 下 左):横轨从行尾那一侧整条裁掉。
|
|
23
|
+
clip-path 只认物理方向,行内轴两侧取书写方向的位置,rtl 下改从左往右收 */
|
|
24
|
+
--xh-_carousel-progress-cut: 0 var(--xh-direction-end) 0 var(--xh-direction-start);
|
|
24
25
|
|
|
25
26
|
position: relative;
|
|
26
27
|
display: block;
|
|
@@ -32,9 +33,9 @@
|
|
|
32
33
|
display: none;
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
/* 纵轨:从下沿整条裁掉,进度条从上往下长 */
|
|
35
37
|
[data-scope='carousel'][data-part='root'][data-orientation='vertical'] {
|
|
36
|
-
--xh-_carousel-progress-
|
|
37
|
-
--xh-_carousel-progress-to: 1 1;
|
|
38
|
+
--xh-_carousel-progress-cut: 0 0 100% 0;
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
/* 视口是裁切窗口:轨道比它宽(高),露在外面的那些张全靠它切掉。
|
|
@@ -131,7 +132,10 @@
|
|
|
131
132
|
}
|
|
132
133
|
|
|
133
134
|
/* 两端按钮与播放开关:浮在媒体之上的单图标圆钮,接 Action Control floating 档:
|
|
134
|
-
|
|
135
|
+
圆形、四态面、按压与 44px 命中区由家族配方给出;视觉盒比 floating 档小,不压画面:
|
|
136
|
+
sm / md / lg 取 24 / 24 / 28px、字形 12 / 16 / 20px(sm 不低于 24px 的最小目标,只把字形收小)。
|
|
137
|
+
sm / md 直接取细指针最小目标 --xh-control-target-min,不随密度收:floating 档在细指针下不外扩命中区,
|
|
138
|
+
视觉盒就是命中区,紧凑档再收到 20px 就够不着 24px。
|
|
135
139
|
连接层不投影 variant:面由这里桥接到磨砂缺省(使用者槽 → 磨砂面),悬停 / 按下的底走画布承载的阶梯
|
|
136
140
|
(100 → 200,取不透明档:钮压在图上,半透明的墨色盖不住画面),边缘与投影不动;这里只留定位、桥接槽与图标尺 */
|
|
137
141
|
[data-scope='carousel'][data-part='prev-trigger'],
|
|
@@ -167,14 +171,26 @@
|
|
|
167
171
|
--xh-action-bg-pressed: var(--xh-carousel-trigger-bg-active, var(--xh-bg-subtle-hover-opaque));
|
|
168
172
|
/* M2 顶光走配方的高光通道 */
|
|
169
173
|
--xh-action-radius: var(--xh-carousel-trigger-radius, var(--xh-_action-profile-radius));
|
|
170
|
-
--xh-
|
|
171
|
-
|
|
172
|
-
--xh-
|
|
174
|
+
--xh-_carousel-trigger-size: var(--xh-control-target-min);
|
|
175
|
+
--xh-_carousel-trigger-glyph: var(--xh-glyph-size-sm);
|
|
176
|
+
--xh-action-visual-size: var(--xh-carousel-trigger-size, var(--xh-_carousel-trigger-size));
|
|
177
|
+
--xh-action-min-inline-size: var(--xh-carousel-trigger-size, var(--xh-_carousel-trigger-size));
|
|
178
|
+
/* 作者塞进来的图标与皮肤画的兜底字形同一把尺 */
|
|
179
|
+
--xh-icon-size: var(--xh-carousel-icon-size, var(--xh-_carousel-trigger-glyph));
|
|
173
180
|
|
|
174
181
|
position: absolute;
|
|
175
182
|
z-index: 1;
|
|
176
183
|
}
|
|
177
184
|
|
|
185
|
+
[data-scope='carousel']:is([data-part='prev-trigger'], [data-part='next-trigger'], [data-part='autoplay-trigger'])[data-xh-action-size='sm'] {
|
|
186
|
+
--xh-_carousel-trigger-glyph: var(--xh-control-indicator-sm);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
[data-scope='carousel']:is([data-part='prev-trigger'], [data-part='next-trigger'], [data-part='autoplay-trigger'])[data-xh-action-size='lg'] {
|
|
190
|
+
--xh-_carousel-trigger-size: var(--xh-control-h-sm);
|
|
191
|
+
--xh-_carousel-trigger-glyph: var(--xh-glyph-size-md);
|
|
192
|
+
}
|
|
193
|
+
|
|
178
194
|
[data-scope='carousel'][data-part='prev-trigger'],
|
|
179
195
|
[data-scope='carousel'][data-part='next-trigger'] {
|
|
180
196
|
inset-block-start: 50%;
|
|
@@ -224,7 +240,7 @@
|
|
|
224
240
|
flex-wrap: nowrap;
|
|
225
241
|
align-items: center;
|
|
226
242
|
justify-content: center;
|
|
227
|
-
gap: var(--xh-carousel-indicator-gap, var(--xh-space-
|
|
243
|
+
gap: var(--xh-carousel-indicator-gap, var(--xh-space-2));
|
|
228
244
|
}
|
|
229
245
|
|
|
230
246
|
[data-scope='carousel'][data-part='indicator-group'][hidden] {
|
|
@@ -267,24 +283,26 @@
|
|
|
267
283
|
box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
268
284
|
}
|
|
269
285
|
|
|
270
|
-
/* 分页点与 Tour
|
|
286
|
+
/* 分页点与 Tour 的步骤点同一种语言:圆点(压在媒体上的这一排 6px、点距 8px),当前页拉长成 20px 胶囊并换品牌色。
|
|
271
287
|
本体就是那颗点:没有文字(页码交给作者,默认不显示),底色即标记。
|
|
272
|
-
悬停 /
|
|
288
|
+
悬停 / 按下的回执落在点的颜色上:中性标记按前景阶梯加深一档、再加深一档;当前页按品牌阶梯压一档。
|
|
289
|
+
沿轨道的长度取 indicator-size(当前页 indicator-size-current),垂直于轨道的粗细取 indicator-thickness,
|
|
290
|
+
缺省与长度同值、仍是圆点;粗细单独调小就成细横条(横条不是正方盒,圆角另把 indicator-radius 换成胶囊) */
|
|
273
291
|
[data-scope='carousel'][data-part='indicator'] {
|
|
274
292
|
position: relative;
|
|
275
293
|
display: inline-flex;
|
|
276
294
|
flex: none;
|
|
277
295
|
align-items: center;
|
|
278
296
|
justify-content: center;
|
|
279
|
-
inline-size: var(--xh-carousel-indicator-size, var(--xh-space-
|
|
280
|
-
block-size: var(--xh-carousel-indicator-size, var(--xh-space-
|
|
297
|
+
inline-size: var(--xh-carousel-indicator-size, var(--xh-space-1_5));
|
|
298
|
+
block-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-1_5)));
|
|
281
299
|
padding: 0;
|
|
282
300
|
border: 0;
|
|
283
301
|
border-radius: var(--xh-carousel-indicator-radius, var(--xh-shape-circle));
|
|
284
302
|
background: var(--xh-carousel-indicator-bg, var(--xh-bg-subtle-hover-opaque));
|
|
285
303
|
font-size: 0;
|
|
286
|
-
/*
|
|
287
|
-
|
|
304
|
+
/* 不裁切:细指针下 ::after 把命中区外扩到点外,overflow 一裁命中区就缩回 6px 的点里;
|
|
305
|
+
自动播放的进度条自己带圆角、由 clip-path 裁出来,不靠点来裁 */
|
|
288
306
|
cursor: pointer;
|
|
289
307
|
transition:
|
|
290
308
|
inline-size var(--xh-motion-duration-move) var(--xh-motion-ease-continuous),
|
|
@@ -297,11 +315,32 @@
|
|
|
297
315
|
display: none;
|
|
298
316
|
}
|
|
299
317
|
|
|
300
|
-
/*
|
|
318
|
+
/* 细指针的命中区外扩到不低于 24×24:两向都取「外扩 8px」与「补足到最小目标 --xh-control-target-min」
|
|
319
|
+
中大的一头(6px 点四面各扩 9px);粗指针下这颗伪元素改画点,盒子自己承担命中。点调细了,垂直于轨道那一向照样补足。
|
|
320
|
+
相邻两点节距 14px,命中区沿轨道互相叠一截:后一颗画在上层,叠住的那段归它,每颗点自己的盒子仍只命中自己 */
|
|
301
321
|
[data-scope='carousel'][data-part='indicator']::after {
|
|
302
322
|
content: '';
|
|
303
323
|
position: absolute;
|
|
304
|
-
inset:
|
|
324
|
+
inset-inline: min(
|
|
325
|
+
calc(-1 * var(--xh-space-2)),
|
|
326
|
+
calc((var(--xh-carousel-indicator-size, var(--xh-space-1_5)) - var(--xh-control-target-min)) / 2)
|
|
327
|
+
);
|
|
328
|
+
inset-block: min(
|
|
329
|
+
calc(-1 * var(--xh-space-2)),
|
|
330
|
+
calc((var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-1_5))) - var(--xh-control-target-min)) / 2)
|
|
331
|
+
);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
[data-scope='carousel'][data-part='indicator-group'][data-orientation='vertical']
|
|
335
|
+
> [data-scope='carousel'][data-part='indicator']::after {
|
|
336
|
+
inset-inline: min(
|
|
337
|
+
calc(-1 * var(--xh-space-2)),
|
|
338
|
+
calc((var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-1_5))) - var(--xh-control-target-min)) / 2)
|
|
339
|
+
);
|
|
340
|
+
inset-block: min(
|
|
341
|
+
calc(-1 * var(--xh-space-2)),
|
|
342
|
+
calc((var(--xh-carousel-indicator-size, var(--xh-space-1_5)) - var(--xh-control-target-min)) / 2)
|
|
343
|
+
);
|
|
305
344
|
}
|
|
306
345
|
|
|
307
346
|
[data-scope='carousel'][data-part='indicator']:hover:not([data-current]) {
|
|
@@ -355,7 +394,9 @@
|
|
|
355
394
|
|
|
356
395
|
/* 自动播放的进度:胶囊是品牌淡底当轨道(仍是「当前」语义;淡底上公共环够对比,不灌环色),
|
|
357
396
|
品牌填充条从起点沿轨道方向长满这一页的时长。计时器每次恢复都重计一整个间隔,
|
|
358
|
-
|
|
397
|
+
进度条跟它同一口径:暂停时回到起点,恢复时从头走。
|
|
398
|
+
填充条铺满胶囊、自己带同一副圆角,未走的那一截由 clip-path 从行尾(纵轨从下沿)裁掉,裁口也取圆角:
|
|
399
|
+
不缩放就不会把圆头压扁,也不用点的盒子来裁——盒子一裁,细指针外扩的命中区跟着被裁掉 */
|
|
359
400
|
[data-scope='carousel'][data-part='root'][data-autoplay]
|
|
360
401
|
[data-scope='carousel'][data-part='indicator'][data-current],
|
|
361
402
|
[data-scope='carousel'][data-part='root'][data-paused]
|
|
@@ -367,40 +408,37 @@
|
|
|
367
408
|
[data-scope='carousel'][data-part='indicator'][data-current]::before,
|
|
368
409
|
[data-scope='carousel'][data-part='root'][data-paused]
|
|
369
410
|
[data-scope='carousel'][data-part='indicator'][data-current]::before {
|
|
411
|
+
--xh-_carousel-progress-radius: var(--xh-carousel-indicator-radius-current, var(--xh-shape-pill));
|
|
412
|
+
|
|
370
413
|
content: '';
|
|
371
414
|
position: absolute;
|
|
372
415
|
inset: 0;
|
|
373
|
-
border-radius:
|
|
416
|
+
border-radius: var(--xh-_carousel-progress-radius);
|
|
374
417
|
background: var(--xh-carousel-indicator-bg-selected, var(--xh-bg-brand));
|
|
375
|
-
transform-origin: left center;
|
|
376
418
|
animation: xh-carousel-indicator-progress var(--xh-_carousel-autoplay-duration) var(--xh-motion-ease-loop) both;
|
|
377
419
|
}
|
|
378
420
|
|
|
379
421
|
[data-scope='carousel'][data-part='root'][data-paused]
|
|
380
422
|
[data-scope='carousel'][data-part='indicator'][data-current]::before {
|
|
381
423
|
animation: none;
|
|
382
|
-
|
|
424
|
+
clip-path: inset(var(--xh-_carousel-progress-cut) round var(--xh-_carousel-progress-radius));
|
|
383
425
|
}
|
|
384
426
|
|
|
385
427
|
/* 纵轨:胶囊沿块轴拉长,进度条从上往下长 */
|
|
386
428
|
[data-scope='carousel'][data-part='indicator-group'][data-orientation='vertical']
|
|
387
|
-
> [data-scope='carousel'][data-part='indicator']
|
|
388
|
-
inline-size: var(--xh-carousel-indicator-size, var(--xh-space-
|
|
389
|
-
block-size: var(--xh-carousel-indicator-size
|
|
429
|
+
> [data-scope='carousel'][data-part='indicator'] {
|
|
430
|
+
inline-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-1_5)));
|
|
431
|
+
block-size: var(--xh-carousel-indicator-size, var(--xh-space-1_5));
|
|
390
432
|
}
|
|
391
433
|
|
|
392
434
|
[data-scope='carousel'][data-part='indicator-group'][data-orientation='vertical']
|
|
393
|
-
> [data-scope='carousel'][data-part='indicator'][data-current]
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
[dir='rtl'] [data-scope='carousel'][data-part='indicator-group'][data-orientation='horizontal']
|
|
398
|
-
> [data-scope='carousel'][data-part='indicator']::before {
|
|
399
|
-
transform-origin: right center;
|
|
435
|
+
> [data-scope='carousel'][data-part='indicator'][data-current] {
|
|
436
|
+
inline-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-1_5)));
|
|
437
|
+
block-size: var(--xh-carousel-indicator-size-current, var(--xh-space-5));
|
|
400
438
|
}
|
|
401
439
|
|
|
402
440
|
[data-scope='carousel'][data-part='root'][data-orientation='vertical']
|
|
403
|
-
> :is([data-part='prev-trigger'], [data-part='next-trigger']) {
|
|
441
|
+
> :is([data-part='prev-trigger'], [data-part='next-trigger']):where([data-scope='carousel']) {
|
|
404
442
|
inset-inline-start: 50%;
|
|
405
443
|
inset-inline-end: auto;
|
|
406
444
|
translate: -50% 0;
|
|
@@ -408,23 +446,23 @@
|
|
|
408
446
|
}
|
|
409
447
|
|
|
410
448
|
[data-scope='carousel'][data-part='root'][data-orientation='vertical']
|
|
411
|
-
> :is([data-part='prev-trigger'], [data-part='next-trigger']):dir(rtl) {
|
|
449
|
+
> :is([data-part='prev-trigger'], [data-part='next-trigger']):where([data-scope='carousel']):dir(rtl) {
|
|
412
450
|
translate: 50% 0;
|
|
413
451
|
}
|
|
414
452
|
|
|
415
453
|
/* 纵轨的翻页钮整颗转了 90°,形变会跟着转到错的方向,这一档不挂 */
|
|
416
454
|
:where([data-material='liquid']) [data-scope='carousel'][data-part='root'][data-orientation='vertical']
|
|
417
|
-
> :is([data-part='prev-trigger'], [data-part='next-trigger'])[data-xh-liquid] {
|
|
455
|
+
> :is([data-part='prev-trigger'], [data-part='next-trigger']):where([data-scope='carousel'])[data-xh-liquid] {
|
|
418
456
|
transform: none;
|
|
419
457
|
}
|
|
420
458
|
|
|
421
459
|
[data-scope='carousel'][data-part='root'][data-orientation='vertical']
|
|
422
|
-
> [data-part='prev-trigger'] {
|
|
460
|
+
> [data-part='prev-trigger']:where([data-scope='carousel']) {
|
|
423
461
|
inset-block-start: var(--xh-carousel-control-inset, var(--xh-space-3));
|
|
424
462
|
}
|
|
425
463
|
|
|
426
464
|
[data-scope='carousel'][data-part='root'][data-orientation='vertical']
|
|
427
|
-
> [data-part='next-trigger'] {
|
|
465
|
+
> [data-part='next-trigger']:where([data-scope='carousel']) {
|
|
428
466
|
inset-block-start: auto;
|
|
429
467
|
inset-block-end: var(--xh-carousel-control-inset, var(--xh-space-3));
|
|
430
468
|
}
|
|
@@ -438,7 +476,7 @@
|
|
|
438
476
|
|
|
439
477
|
[data-scope='carousel'][data-part='indicator'][data-current]::before {
|
|
440
478
|
animation: none;
|
|
441
|
-
|
|
479
|
+
clip-path: none;
|
|
442
480
|
}
|
|
443
481
|
}
|
|
444
482
|
|
|
@@ -448,7 +486,7 @@
|
|
|
448
486
|
|
|
449
487
|
:where([data-motion='reduce']) [data-scope='carousel'][data-part='indicator'][data-current]::before {
|
|
450
488
|
animation: none;
|
|
451
|
-
|
|
489
|
+
clip-path: none;
|
|
452
490
|
}
|
|
453
491
|
|
|
454
492
|
@media (forced-colors: active) {
|
|
@@ -533,7 +571,7 @@
|
|
|
533
571
|
}
|
|
534
572
|
|
|
535
573
|
/* 手指落点:三颗钮的 44px 命中区由配方的 ::after 给(floating 档)。
|
|
536
|
-
分页点的视觉仍是
|
|
574
|
+
分页点的视觉仍是 6 / 20px,按钮盒改成首尾相接的 44px 分区:直接用负 inset 外扩会让相邻页的命中区重叠,
|
|
537
575
|
落点归属取决于绘制顺序;这里让真实按钮盒承担命中,点与进度条改由伪元素画在盒子中央 */
|
|
538
576
|
@media (pointer: coarse) {
|
|
539
577
|
[data-scope='carousel'][data-part='indicator-group'] {
|
|
@@ -556,15 +594,14 @@
|
|
|
556
594
|
min-block-size: var(--xh-carousel-indicator-target-size, 44px);
|
|
557
595
|
border-radius: 0;
|
|
558
596
|
background: transparent;
|
|
559
|
-
overflow: visible;
|
|
560
597
|
}
|
|
561
598
|
|
|
562
599
|
[data-scope='carousel'][data-part='indicator']::after {
|
|
563
600
|
inset: auto;
|
|
564
601
|
inset-block-start: 50%;
|
|
565
602
|
inset-inline-start: 50%;
|
|
566
|
-
inline-size: var(--xh-carousel-indicator-size, var(--xh-space-
|
|
567
|
-
block-size: var(--xh-carousel-indicator-size, var(--xh-space-
|
|
603
|
+
inline-size: var(--xh-carousel-indicator-size, var(--xh-space-1_5));
|
|
604
|
+
block-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-1_5)));
|
|
568
605
|
border-radius: var(--xh-carousel-indicator-radius, var(--xh-shape-circle));
|
|
569
606
|
background: var(--xh-carousel-indicator-bg, var(--xh-bg-subtle-hover-opaque));
|
|
570
607
|
translate: -50% -50%;
|
|
@@ -614,7 +651,7 @@
|
|
|
614
651
|
inset-inline-start: 50%;
|
|
615
652
|
z-index: 1;
|
|
616
653
|
inline-size: var(--xh-carousel-indicator-size-current, var(--xh-space-5));
|
|
617
|
-
block-size: var(--xh-carousel-indicator-size, var(--xh-space-
|
|
654
|
+
block-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-1_5)));
|
|
618
655
|
border-radius: var(--xh-carousel-indicator-radius-current, var(--xh-shape-pill));
|
|
619
656
|
translate: -50% -50%;
|
|
620
657
|
}
|
|
@@ -626,6 +663,16 @@
|
|
|
626
663
|
translate: 50% -50%;
|
|
627
664
|
}
|
|
628
665
|
|
|
666
|
+
/* 纵轨:细指针那条按轨道方向外扩命中区的规则更具体,这里把点的定位一并收回到居中 */
|
|
667
|
+
[data-scope='carousel'][data-part='indicator-group'][data-orientation='vertical']
|
|
668
|
+
> [data-scope='carousel'][data-part='indicator']::after {
|
|
669
|
+
inset: auto;
|
|
670
|
+
inset-block-start: 50%;
|
|
671
|
+
inset-inline-start: 50%;
|
|
672
|
+
inline-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-1_5)));
|
|
673
|
+
block-size: var(--xh-carousel-indicator-size, var(--xh-space-1_5));
|
|
674
|
+
}
|
|
675
|
+
|
|
629
676
|
[data-scope='carousel'][data-part='indicator-group'][data-orientation='vertical']
|
|
630
677
|
> [data-scope='carousel'][data-part='indicator'][data-current]::after,
|
|
631
678
|
[data-scope='carousel'][data-part='root'][data-autoplay]
|
|
@@ -634,7 +681,7 @@
|
|
|
634
681
|
[data-scope='carousel'][data-part='root'][data-paused]
|
|
635
682
|
[data-scope='carousel'][data-part='indicator-group'][data-orientation='vertical']
|
|
636
683
|
> [data-scope='carousel'][data-part='indicator'][data-current]::before {
|
|
637
|
-
inline-size: var(--xh-carousel-indicator-size, var(--xh-space-
|
|
684
|
+
inline-size: var(--xh-carousel-indicator-thickness, var(--xh-carousel-indicator-size, var(--xh-space-1_5)));
|
|
638
685
|
block-size: var(--xh-carousel-indicator-size-current, var(--xh-space-5));
|
|
639
686
|
}
|
|
640
687
|
}
|
|
@@ -666,13 +713,14 @@
|
|
|
666
713
|
}
|
|
667
714
|
|
|
668
715
|
@layer xihan.motion {
|
|
716
|
+
/* 进度条从整条裁掉长到整条露出:只重绘、不重排,裁口取填充条自己的圆角 */
|
|
669
717
|
@keyframes xh-carousel-indicator-progress {
|
|
670
718
|
from {
|
|
671
|
-
|
|
719
|
+
clip-path: inset(var(--xh-_carousel-progress-cut) round var(--xh-_carousel-progress-radius));
|
|
672
720
|
}
|
|
673
721
|
|
|
674
722
|
to {
|
|
675
|
-
|
|
723
|
+
clip-path: inset(0 round var(--xh-_carousel-progress-radius));
|
|
676
724
|
}
|
|
677
725
|
}
|
|
678
726
|
}
|
package/css/cartesian-chart.css
CHANGED
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
/* 裁切出来的形状画不出空心:隐藏的项改为淡出,名字的删除线与次级字色照常 */
|
|
112
|
-
[data-scope='cartesian-chart'][data-part='legend-item'][aria-pressed='false'] > [data-part='legend-swatch'][data-mark='point']:not([data-symbol='circle'], [data-symbol='square']) {
|
|
112
|
+
[data-scope='cartesian-chart'][data-part='legend-item'][aria-pressed='false'] > [data-part='legend-swatch'][data-mark='point']:where([data-scope='cartesian-chart']):not([data-symbol='circle'], [data-symbol='square']) {
|
|
113
113
|
background: var(--xh-_chart-series);
|
|
114
114
|
opacity: var(--xh-chart-dim-alpha);
|
|
115
115
|
}
|
|
@@ -241,7 +241,7 @@
|
|
|
241
241
|
cursor: grab;
|
|
242
242
|
}
|
|
243
243
|
|
|
244
|
-
[data-scope='cartesian-chart'][data-part='zoom-slider'][data-dragging] [data-part='zoom-window'] {
|
|
244
|
+
[data-scope='cartesian-chart'][data-part='zoom-slider'][data-dragging] [data-part='zoom-window']:where([data-scope='cartesian-chart']) {
|
|
245
245
|
cursor: grabbing;
|
|
246
246
|
}
|
|
247
247
|
|
|
@@ -633,15 +633,15 @@
|
|
|
633
633
|
|
|
634
634
|
/* —— 纹理:颜色不可用或不可靠时(强制色、打印、祖先写了 data-xh-chart-patterns),柱与面积改用本系列在
|
|
635
635
|
defs 里的纹理填充、描出轮廓,折线换线型;压在柱上的标签改用标签色、描一圈承载面色。色标的纹理在配方里 —— */
|
|
636
|
-
:where([data-xh-chart-patterns]) [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='bar'],
|
|
637
|
-
:where([data-xh-chart-patterns]) [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='area-fill'] {
|
|
636
|
+
:where([data-xh-chart-patterns]) [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='bar']:where([data-scope='cartesian-chart']),
|
|
637
|
+
:where([data-xh-chart-patterns]) [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='area-fill']:where([data-scope='cartesian-chart']) {
|
|
638
638
|
fill: var(--xh-_chart-pattern);
|
|
639
639
|
fill-opacity: 1;
|
|
640
640
|
stroke: var(--xh-_chart-series);
|
|
641
641
|
stroke-width: var(--xh-stroke-thin);
|
|
642
642
|
}
|
|
643
643
|
|
|
644
|
-
:where([data-xh-chart-patterns]) [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='line']:not([data-drawing]) {
|
|
644
|
+
:where([data-xh-chart-patterns]) [data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='line']:where([data-scope='cartesian-chart']):not([data-drawing]) {
|
|
645
645
|
stroke-dasharray: var(--xh-_chart-dash);
|
|
646
646
|
}
|
|
647
647
|
|
|
@@ -775,8 +775,8 @@
|
|
|
775
775
|
stroke: Highlight;
|
|
776
776
|
}
|
|
777
777
|
|
|
778
|
-
[data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='bar'],
|
|
779
|
-
[data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='area-fill'] {
|
|
778
|
+
[data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='bar']:where([data-scope='cartesian-chart']),
|
|
779
|
+
[data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='area-fill']:where([data-scope='cartesian-chart']) {
|
|
780
780
|
forced-color-adjust: none;
|
|
781
781
|
fill: var(--xh-_chart-pattern);
|
|
782
782
|
fill-opacity: 1;
|
|
@@ -784,7 +784,7 @@
|
|
|
784
784
|
stroke-width: var(--xh-stroke-thin);
|
|
785
785
|
}
|
|
786
786
|
|
|
787
|
-
[data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='line']:not([data-drawing]) {
|
|
787
|
+
[data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='line']:where([data-scope='cartesian-chart']):not([data-drawing]) {
|
|
788
788
|
stroke-dasharray: var(--xh-_chart-dash);
|
|
789
789
|
}
|
|
790
790
|
|
|
@@ -803,15 +803,15 @@
|
|
|
803
803
|
display: none;
|
|
804
804
|
}
|
|
805
805
|
|
|
806
|
-
[data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='bar'],
|
|
807
|
-
[data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='area-fill'] {
|
|
806
|
+
[data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='bar']:where([data-scope='cartesian-chart']),
|
|
807
|
+
[data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='area-fill']:where([data-scope='cartesian-chart']) {
|
|
808
808
|
fill: var(--xh-_chart-pattern);
|
|
809
809
|
fill-opacity: 1;
|
|
810
810
|
stroke: var(--xh-_chart-series);
|
|
811
811
|
stroke-width: var(--xh-stroke-thin);
|
|
812
812
|
}
|
|
813
813
|
|
|
814
|
-
[data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='line']:not([data-drawing]) {
|
|
814
|
+
[data-scope='cartesian-chart'][data-xh-chart-pattern] > [data-part='line']:where([data-scope='cartesian-chart']):not([data-drawing]) {
|
|
815
815
|
stroke-dasharray: var(--xh-_chart-dash);
|
|
816
816
|
}
|
|
817
817
|
|