@xihan-ui/styles 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/CHANGELOG.md +5146 -6
  2. package/README.md +22 -2
  3. package/component-tokens.d.ts +4212 -0
  4. package/component-tokens.js +2 -0
  5. package/components.tokens.json +80116 -0
  6. package/css/accordion.css +131 -75
  7. package/css/affix.css +16 -1
  8. package/css/alert.css +114 -67
  9. package/css/anchor.css +99 -27
  10. package/css/approval.css +461 -0
  11. package/css/avatar-group.css +14 -6
  12. package/css/avatar.css +33 -9
  13. package/css/back-top.css +103 -48
  14. package/css/badge.css +42 -14
  15. package/css/bar-code.css +62 -0
  16. package/css/breadcrumb.css +40 -21
  17. package/css/button-group.css +146 -24
  18. package/css/button.css +116 -99
  19. package/css/calendar-picker.css +448 -0
  20. package/css/calendar-range-picker.css +517 -0
  21. package/css/card.css +54 -77
  22. package/css/carousel.css +412 -68
  23. package/css/cascader.css +429 -246
  24. package/css/checkbox-group.css +225 -77
  25. package/css/checkbox.css +174 -37
  26. package/css/clipboard.css +266 -47
  27. package/css/code-view.css +279 -0
  28. package/css/collapsible.css +108 -63
  29. package/css/color-field.css +158 -0
  30. package/css/color-picker.css +172 -184
  31. package/css/color-slider.css +274 -0
  32. package/css/color-swatch-picker.css +243 -0
  33. package/css/color-swatch.css +35 -0
  34. package/css/combobox.css +267 -273
  35. package/css/command.css +399 -0
  36. package/css/context-menu.css +183 -108
  37. package/css/date-field.css +94 -121
  38. package/css/date-picker.css +486 -249
  39. package/css/date-range-picker.css +559 -0
  40. package/css/description.css +51 -0
  41. package/css/descriptions.css +133 -87
  42. package/css/dialog.css +247 -68
  43. package/css/diff-view.css +428 -0
  44. package/css/download-trigger.css +155 -46
  45. package/css/drawer.css +194 -111
  46. package/css/editable.css +172 -152
  47. package/css/empty-state.css +80 -11
  48. package/css/field-array.css +190 -0
  49. package/css/field.css +84 -31
  50. package/css/fieldset.css +51 -18
  51. package/css/file-upload.css +134 -36
  52. package/css/flex.css +20 -1
  53. package/css/float-button.css +238 -57
  54. package/css/floating-panel.css +173 -92
  55. package/css/focus.css +46 -0
  56. package/css/forced-colors.css +93 -0
  57. package/css/form.css +254 -77
  58. package/css/gradient-text.css +34 -10
  59. package/css/grid.css +516 -5
  60. package/css/heatmap.css +87 -29
  61. package/css/highlight.css +20 -5
  62. package/css/hover-card.css +97 -47
  63. package/css/icon-wrapper.css +15 -3
  64. package/css/icon.css +74 -8
  65. package/css/image-cropper.css +143 -29
  66. package/css/image-viewer.css +150 -89
  67. package/css/image.css +30 -1
  68. package/css/infinite-scroll.css +51 -1
  69. package/css/input-group.css +277 -0
  70. package/css/json-viewer.css +102 -45
  71. package/css/kbd.css +72 -0
  72. package/css/label.css +78 -0
  73. package/css/layers.css +5 -0
  74. package/css/layout.css +175 -31
  75. package/css/list.css +24 -3
  76. package/css/listbox.css +208 -67
  77. package/css/loading-bar.css +52 -3
  78. package/css/log.css +144 -9
  79. package/css/markdown-stream.css +149 -0
  80. package/css/marquee.css +27 -1
  81. package/css/masonry.css +7 -0
  82. package/css/matrix-code.css +67 -0
  83. package/css/mention.css +234 -152
  84. package/css/menu.css +180 -83
  85. package/css/menubar.css +204 -136
  86. package/css/message-feed.css +197 -0
  87. package/css/navigation-menu.css +144 -90
  88. package/css/notification.css +178 -100
  89. package/css/number-animation.css +7 -0
  90. package/css/number-field.css +120 -277
  91. package/css/overlay-arrow.css +12 -7
  92. package/css/page-header.css +99 -14
  93. package/css/pagination.css +175 -135
  94. package/css/password-input.css +222 -219
  95. package/css/pin-input.css +101 -67
  96. package/css/pointer.css +36 -0
  97. package/css/popconfirm.css +185 -94
  98. package/css/popover.css +121 -77
  99. package/css/progress.css +60 -12
  100. package/css/prompt-input.css +224 -0
  101. package/css/question-flow.css +513 -0
  102. package/css/radio-group.css +147 -30
  103. package/css/rating.css +193 -43
  104. package/css/reasoning.css +336 -0
  105. package/css/reset.css +84 -6
  106. package/css/resizable.css +237 -0
  107. package/css/scroll-area.css +68 -7
  108. package/css/scrollbar.css +47 -13
  109. package/css/segmented.css +94 -29
  110. package/css/select.css +288 -274
  111. package/css/separator.css +101 -1
  112. package/css/side-nav.css +133 -75
  113. package/css/signature-pad.css +74 -54
  114. package/css/skeleton.css +84 -11
  115. package/css/slider.css +132 -39
  116. package/css/sortable.css +198 -0
  117. package/css/spinner.css +126 -12
  118. package/css/splitter.css +29 -8
  119. package/css/statistic.css +55 -0
  120. package/css/steps.css +206 -72
  121. package/css/switch.css +268 -36
  122. package/css/table.css +695 -118
  123. package/css/tabs.css +604 -42
  124. package/css/tag-group.css +219 -0
  125. package/css/tag.css +118 -28
  126. package/css/tags-input.css +156 -274
  127. package/css/text-field.css +101 -249
  128. package/css/time-field.css +100 -128
  129. package/css/time-picker.css +323 -252
  130. package/css/time-range-picker.css +719 -0
  131. package/css/timeline.css +202 -68
  132. package/css/timer.css +56 -52
  133. package/css/timestamp.css +34 -0
  134. package/css/toast.css +373 -144
  135. package/css/toggle-group.css +309 -76
  136. package/css/toggle.css +116 -85
  137. package/css/tone.css +47 -0
  138. package/css/tool-call.css +421 -0
  139. package/css/toolbar.css +181 -33
  140. package/css/tooltip.css +107 -36
  141. package/css/tour.css +183 -152
  142. package/css/transfer.css +351 -138
  143. package/css/tree-select.css +323 -216
  144. package/css/tree.css +294 -62
  145. package/css/truncate.css +65 -0
  146. package/css/typography.css +228 -5
  147. package/css/undefined.css +10 -1
  148. package/css/virtualizer.css +9 -10
  149. package/css/visually-hidden.css +7 -0
  150. package/css/watermark.css +7 -0
  151. package/family/action-control.css +487 -0
  152. package/family/collection-item.css +721 -0
  153. package/family/field-chrome.css +298 -0
  154. package/family/motion.css +166 -0
  155. package/family/swatch.css +59 -0
  156. package/index.css +41705 -126
  157. package/index.unlayered.css +33692 -17339
  158. package/package.json +51 -17
  159. package/css/calendar.css +0 -367
  160. package/css/code-block.css +0 -91
  161. package/css/composer.css +0 -134
  162. package/css/countdown.css +0 -26
  163. package/css/dynamic-input.css +0 -220
  164. package/css/ellipsis.css +0 -52
  165. package/css/hotkeys.css +0 -90
  166. package/css/popselect.css +0 -391
  167. package/css/qr-code.css +0 -55
  168. package/css/result.css +0 -119
  169. package/css/space.css +0 -117
  170. package/css/thread.css +0 -120
  171. package/css/time.css +0 -25
@@ -1,3 +1,10 @@
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
+ /* 定义 typography 样式。 */
7
+
1
8
  @layer xihan.components {
2
9
  /* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
3
10
  [data-scope='typography'] {
@@ -34,6 +41,12 @@
34
41
  display: none;
35
42
  }
36
43
 
44
+ /* 中间没有断点的长串——网址、令牌、无空格的标识——排到行尾就断开,不把整块正文顶宽。
45
+ 属性由后代继承,这里逐个部件写一遍,是为了任一部件单独用时也盖得到 */
46
+ [data-scope='typography']:is([data-part='root'], [data-part='heading'], [data-part='paragraph'], [data-part='prose']) {
47
+ overflow-wrap: break-word;
48
+ }
49
+
37
50
  /* —— 尺寸 —— */
38
51
  /* 小档整体降一级字号档位 */
39
52
  [data-scope='typography'][data-part='root'][data-size='sm'] {
@@ -55,6 +68,40 @@
55
68
  --xh-_typography-heading-gap: var(--xh-space-8);
56
69
  }
57
70
 
71
+ /* —— 对齐与字重 —— */
72
+ /* 两轴都画在根上,整块正文一起换;各段沿继承拿到 */
73
+ [data-scope='typography'][data-part='root'][data-align='start'] {
74
+ text-align: start;
75
+ }
76
+
77
+ [data-scope='typography'][data-part='root'][data-align='center'] {
78
+ text-align: center;
79
+ }
80
+
81
+ [data-scope='typography'][data-part='root'][data-align='end'] {
82
+ text-align: end;
83
+ }
84
+
85
+ [data-scope='typography'][data-part='root'][data-align='justify'] {
86
+ text-align: justify;
87
+ }
88
+
89
+ [data-scope='typography'][data-part='root'][data-weight='regular'] {
90
+ font-weight: var(--xh-typography-font-weight, var(--xh-font-weight-regular));
91
+ }
92
+
93
+ [data-scope='typography'][data-part='root'][data-weight='medium'] {
94
+ font-weight: var(--xh-typography-font-weight, var(--xh-font-weight-medium));
95
+ }
96
+
97
+ [data-scope='typography'][data-part='root'][data-weight='semibold'] {
98
+ font-weight: var(--xh-typography-font-weight, var(--xh-font-weight-semibold));
99
+ }
100
+
101
+ [data-scope='typography'][data-part='root'][data-weight='bold'] {
102
+ font-weight: var(--xh-typography-font-weight, var(--xh-font-weight-bold));
103
+ }
104
+
58
105
  /* —— 块级段落 —— */
59
106
  /* 库里没有全局 preflight,作者写的 hN / p 带着 UA 外边距,在这儿抹平 */
60
107
  [data-scope='typography'][data-part='heading'],
@@ -112,8 +159,10 @@
112
159
 
113
160
  /* —— 行内文字 —— */
114
161
  /* 不写形态与语气时就是一段普通正文,这里只声明形态各自加的那一层 */
162
+ /* 次要文字与语气文字各有各的槽:两者同特异度、共用一个槽的话,
163
+ 调淡次要文字会把六族语气一并换成同一个灰。 */
115
164
  [data-scope='typography'][data-part='text'][data-variant='muted'] {
116
- color: var(--xh-typography-text-fg, var(--xh-fg-muted));
165
+ color: var(--xh-typography-text-fg-muted, var(--xh-fg-muted));
117
166
  }
118
167
 
119
168
  [data-scope='typography'][data-part='text'][data-variant='strong'] {
@@ -131,7 +180,24 @@
131
180
 
132
181
  /* 语气排在形态之后:两个轴一起写时,用哪族颜色由语气说了算 */
133
182
  [data-scope='typography'][data-part='text'][data-tone] {
134
- color: var(--xh-typography-text-fg, var(--xh-_tone-fg));
183
+ color: var(--xh-typography-text-fg-tone, var(--xh-_tone-fg));
184
+ }
185
+
186
+ /* 字重排在形态之后:与 strong 一起写时,粗到哪一档由字重说了算 */
187
+ [data-scope='typography'][data-part='text'][data-weight='regular'] {
188
+ font-weight: var(--xh-font-weight-regular);
189
+ }
190
+
191
+ [data-scope='typography'][data-part='text'][data-weight='medium'] {
192
+ font-weight: var(--xh-font-weight-medium);
193
+ }
194
+
195
+ [data-scope='typography'][data-part='text'][data-weight='semibold'] {
196
+ font-weight: var(--xh-font-weight-semibold);
197
+ }
198
+
199
+ [data-scope='typography'][data-part='text'][data-weight='bold'] {
200
+ font-weight: var(--xh-font-weight-bold);
135
201
  }
136
202
 
137
203
  /* —— 行内链接 —— */
@@ -140,6 +206,7 @@
140
206
  color: var(--xh-typography-link-fg, var(--xh-fg-brand));
141
207
  text-decoration: underline;
142
208
  text-underline-offset: var(--xh-typography-link-underline-offset, var(--xh-space-0_5));
209
+ transition: color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
143
210
  }
144
211
 
145
212
  /* 悬停只在能用指针的设备上生效,触摸端不留一个按不掉的悬停态 */
@@ -149,8 +216,164 @@
149
216
  }
150
217
  }
151
218
 
152
- [data-scope='typography'][data-part='link']:focus-visible {
153
- outline: var(--xh-ring-width) solid var(--xh-ring-focus);
154
- outline-offset: var(--xh-ring-offset);
219
+ /* —— 富文本 —— */
220
+ /*
221
+ * 外来的整段 HTML 铺在这里:Markdown 渲染结果、后端返回的富文本,节点由内容自己带,
222
+ * 作者写不出 data-part,所以样式按标签给。
223
+ *
224
+ * 标签一律包进 :where(),整条规则的特异度只剩 prose 这一层,块里嵌 XiHan 组件时
225
+ * 那份皮肤仍然赢。字号档位与段间距取根上那几支私有槽,跟着 data-size 一起换。
226
+ */
227
+ [data-scope='typography'][data-part='prose'] {
228
+ color: var(--xh-typography-prose-fg, var(--xh-fg-default));
229
+ font-size: var(--xh-typography-prose-font-size, var(--xh-_typography-body-size));
230
+ line-height: var(--xh-typography-prose-leading, var(--xh-text-prose-leading));
231
+ }
232
+
233
+ /* 库里没有全局 preflight,外来节点带着 UA 外边距,先在这儿抹平 */
234
+ [data-scope='typography'][data-part='prose']
235
+ :where(h1, h2, h3, h4, h5, h6, p, ul, ol, pre, blockquote, table, hr) {
236
+ margin: 0;
237
+ }
238
+
239
+ /* 间距画在后一块的上边,块与块之间只留一份,末块也不多出一截 */
240
+ [data-scope='typography'][data-part='prose']
241
+ :where(h1, h2, h3, h4, h5, h6, p, ul, ol, pre, blockquote, table, hr)
242
+ + :where(h1, h2, h3, h4, h5, h6, p, ul, ol, pre, blockquote, table, hr) {
243
+ margin-block-start: var(--xh-typography-prose-block-gap, var(--xh-_typography-block-gap));
244
+ }
245
+
246
+ /* 标题上面留得更开,它带起的是下面一整段 */
247
+ [data-scope='typography'][data-part='prose']
248
+ :where(h1, h2, h3, h4, h5, h6, p, ul, ol, pre, blockquote, table, hr)
249
+ + :where(h1, h2, h3, h4, h5, h6) {
250
+ margin-block-start: var(--xh-typography-prose-heading-gap, var(--xh-_typography-heading-gap));
251
+ }
252
+
253
+ [data-scope='typography'][data-part='prose'] :where(h1, h2, h3, h4, h5, h6) {
254
+ color: var(--xh-typography-prose-heading-fg, var(--xh-fg-default));
255
+ font-weight: var(--xh-typography-prose-heading-font-weight, var(--xh-font-weight-semibold));
256
+ line-height: var(--xh-leading-tight);
257
+ text-wrap: balance;
258
+ }
259
+
260
+ /* 六档字号与 heading 部件同源:同一块正文里,作者写的标题与外来的标题一样大 */
261
+ [data-scope='typography'][data-part='prose'] :where(h1) {
262
+ font-size: var(--xh-typography-prose-h1, var(--xh-_typography-h1));
263
+ }
264
+
265
+ [data-scope='typography'][data-part='prose'] :where(h2) {
266
+ font-size: var(--xh-typography-prose-h2, var(--xh-_typography-h2));
267
+ }
268
+
269
+ [data-scope='typography'][data-part='prose'] :where(h3) {
270
+ font-size: var(--xh-typography-prose-h3, var(--xh-_typography-h3));
271
+ }
272
+
273
+ [data-scope='typography'][data-part='prose'] :where(h4) {
274
+ font-size: var(--xh-typography-prose-h4, var(--xh-_typography-h4));
275
+ }
276
+
277
+ [data-scope='typography'][data-part='prose'] :where(h5) {
278
+ font-size: var(--xh-typography-prose-h5, var(--xh-_typography-h5));
279
+ }
280
+
281
+ [data-scope='typography'][data-part='prose'] :where(h6) {
282
+ font-size: var(--xh-typography-prose-h6, var(--xh-_typography-h6));
283
+ }
284
+
285
+ /* 列表:项目符号要留在容器里面,缩进画在列表自己的起始内衬上 */
286
+ [data-scope='typography'][data-part='prose'] :where(ul, ol) {
287
+ padding-inline-start: var(--xh-typography-prose-list-ps, var(--xh-space-6));
288
+ }
289
+
290
+ [data-scope='typography'][data-part='prose'] :where(li + li) {
291
+ margin-block-start: var(--xh-typography-prose-item-gap, var(--xh-space-1));
292
+ }
293
+
294
+ /* 嵌套列表贴着上一项走,不按块与块之间那一档拉开 */
295
+ [data-scope='typography'][data-part='prose'] :where(li) > :where(ul, ol) {
296
+ margin-block-start: var(--xh-typography-prose-item-gap, var(--xh-space-1));
297
+ }
298
+
299
+ /* 富文本里的链接缺省跟着 link 部件走:同一块正文里两处不同源就会有两种链接样式 */
300
+ [data-scope='typography'][data-part='prose'] :where(a) {
301
+ border-radius: var(--xh-typography-prose-link-radius, var(--xh-typography-link-radius, var(--xh-shape-inset)));
302
+ color: var(--xh-typography-prose-link-fg, var(--xh-typography-link-fg, var(--xh-fg-brand)));
303
+ text-decoration: underline;
304
+ text-underline-offset: var(
305
+ --xh-typography-prose-link-underline-offset,
306
+ var(--xh-typography-link-underline-offset, var(--xh-space-0_5))
307
+ );
308
+ }
309
+
310
+ [data-scope='typography'][data-part='prose'] :where(strong) {
311
+ font-weight: var(--xh-typography-prose-strong-font-weight, var(--xh-font-weight-semibold));
312
+ }
313
+
314
+ /* 行内代码与 text 部件的 code 形态同源,同一块正文里两条路写出来一个样 */
315
+ [data-scope='typography'][data-part='prose'] :where(code) {
316
+ padding-block: var(--xh-typography-code-py, var(--xh-space-0_5));
317
+ padding-inline: var(--xh-typography-code-px, var(--xh-space-1));
318
+ border-radius: var(--xh-typography-code-radius, var(--xh-shape-inset));
319
+ background: var(--xh-typography-code-bg, var(--xh-bg-subtle));
320
+ font-family: var(--xh-typography-code-font, var(--xh-font-family-mono));
321
+ font-size: var(--xh-typography-code-font-size, var(--xh-_typography-code-size));
322
+ }
323
+
324
+ /* 代码块自己成一片面,长行横向滚动而不是把整块正文撑宽 */
325
+ [data-scope='typography'][data-part='prose'] :where(pre) {
326
+ overflow-x: auto;
327
+ padding: var(--xh-typography-prose-pre-padding, var(--xh-space-4));
328
+ border-radius: var(--xh-typography-prose-pre-radius, var(--xh-shape-surface));
329
+ background: var(--xh-typography-prose-pre-bg, var(--xh-bg-subtle));
330
+ font-family: var(--xh-typography-code-font, var(--xh-font-family-mono));
331
+ font-size: var(--xh-typography-code-font-size, var(--xh-_typography-code-size));
332
+ }
333
+
334
+ /* 代码块里的 code 已经在 pre 那片面里,不再各自套一层内衬与底色 */
335
+ [data-scope='typography'][data-part='prose'] :where(pre) :where(code) {
336
+ padding: 0;
337
+ border-radius: 0;
338
+ background: none;
339
+ font-size: inherit;
340
+ }
341
+
342
+ [data-scope='typography'][data-part='prose'] :where(blockquote) {
343
+ padding-inline-start: var(--xh-typography-prose-quote-ps, var(--xh-space-4));
344
+ border-inline-start: var(--xh-stroke-thick) solid
345
+ var(--xh-typography-prose-quote-border, var(--xh-border-subtle));
346
+ color: var(--xh-typography-prose-quote-fg, var(--xh-fg-muted));
347
+ }
348
+
349
+ [data-scope='typography'][data-part='prose'] :where(hr) {
350
+ border: none;
351
+ border-block-start: var(--xh-stroke-thin) solid
352
+ var(--xh-typography-prose-rule-border, var(--xh-border-subtle));
353
+ }
354
+
355
+ /* 图片不许把整块正文撑宽,高度跟着缩才不变形 */
356
+ [data-scope='typography'][data-part='prose'] :where(img) {
357
+ max-inline-size: 100%;
358
+ block-size: auto;
359
+ }
360
+
361
+ [data-scope='typography'][data-part='prose'] :where(table) {
362
+ inline-size: 100%;
363
+ border-collapse: collapse;
364
+ }
365
+
366
+ [data-scope='typography'][data-part='prose'] :where(th, td) {
367
+ padding-block: var(--xh-typography-prose-cell-py, var(--xh-space-2));
368
+ padding-inline: var(--xh-typography-prose-cell-px, var(--xh-space-3));
369
+ border-block-end: var(--xh-stroke-thin) solid
370
+ var(--xh-typography-prose-cell-border, var(--xh-border-subtle));
371
+ text-align: start;
372
+ /* 表格的宽度由各格的最小宽度撑出来,格里的长串断得开,整张表才收得进正文的宽度 */
373
+ overflow-wrap: anywhere;
374
+ }
375
+
376
+ [data-scope='typography'][data-part='prose'] :where(th) {
377
+ font-weight: var(--xh-typography-prose-th-font-weight, var(--xh-font-weight-semibold));
155
378
  }
156
379
  }
package/css/undefined.css CHANGED
@@ -1,3 +1,8 @@
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
+
1
6
  /*
2
7
  * 元素升级前的形态。
3
8
  *
@@ -15,8 +20,10 @@
15
20
  xh-collapsible,
16
21
  xh-color-picker,
17
22
  xh-combobox,
23
+ xh-command,
18
24
  xh-context-menu,
19
25
  xh-date-picker,
26
+ xh-date-range-picker,
20
27
  xh-dialog,
21
28
  xh-drawer,
22
29
  xh-floating-panel,
@@ -29,11 +36,13 @@
29
36
  xh-pagination,
30
37
  xh-popconfirm,
31
38
  xh-popover,
32
- xh-popselect,
39
+ xh-reasoning,
33
40
  xh-select,
34
41
  xh-side-nav,
35
42
  xh-steps,
36
43
  xh-time-picker,
44
+ xh-time-range-picker,
45
+ xh-tool-call,
37
46
  xh-tooltip,
38
47
  xh-tour,
39
48
  xh-tree-select
@@ -1,3 +1,10 @@
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
+ /* 定义 virtualizer 样式。 */
7
+
1
8
  @layer xihan.components {
2
9
  /* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
3
10
  [data-scope='virtualizer'] {
@@ -34,9 +41,8 @@
34
41
  这两条是本文件里仅有的物理属性,换成逻辑写法会在多数浏览器上直接失效 */
35
42
  overflow-x: auto;
36
43
  overflow-y: auto;
37
- /* 滚到尽头时不把剩余的滚动传给外层:长列表嵌在页面里时,
38
- 滚到底还继续带着整页走会让人找不着北 */
39
- overscroll-behavior: contain;
44
+ /* 页内结构容器,滚到尽头把剩余的滚动交给外层(overscroll-behavior 保持 auto):
45
+ contain 只给浮层、模态 body 与粘底视口(§6.6)。滚动条走 reset 层的原生细条 */
40
46
  }
41
47
 
42
48
  /* 单向列表把另一条轴关掉:那一向既没有内容也没有位移,能滚就成了滚不回来的暗格 */
@@ -48,13 +54,6 @@
48
54
  overflow-y: hidden;
49
55
  }
50
56
 
51
- /* 视口带 tabindex=0(长列表里可能一个可聚焦元素都没有),因此要有焦点环。
52
- 偏移取负:环画在视口内侧,否则会被 root 的 overflow:hidden 裁掉半圈 */
53
- [data-scope='virtualizer'][data-part='viewport']:focus-visible {
54
- outline: var(--xh-ring-width) solid var(--xh-ring-focus);
55
- outline-offset: calc(-1 * var(--xh-ring-width));
56
- }
57
-
58
57
  /* 撑出总长的那层,同时是条目的定位上下文——条目是绝对定位的,
59
58
  没有它就会以最近的定位祖先(多半是页面某处)为参照,整列飘走。 */
60
59
  [data-scope='virtualizer'][data-part='content'] {
@@ -1,3 +1,10 @@
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
+ /* 定义 visually hidden 样式。 */
7
+
1
8
  @layer xihan.components {
2
9
  .xh-visually-hidden {
3
10
  position: absolute;
package/css/watermark.css CHANGED
@@ -1,3 +1,10 @@
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
+ /* 定义 watermark 样式。 */
7
+
1
8
  @layer xihan.components {
2
9
  /* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
3
10
  [data-scope='watermark'] {