@xihan-ui/styles 1.0.0-alpha.2 → 1.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 (122) hide show
  1. package/CHANGELOG.md +2177 -0
  2. package/README.md +1 -1
  3. package/css/accordion.css +80 -6
  4. package/css/alert.css +43 -14
  5. package/css/anchor.css +8 -8
  6. package/css/avatar-group.css +7 -3
  7. package/css/avatar.css +9 -3
  8. package/css/back-top.css +22 -1
  9. package/css/badge.css +104 -32
  10. package/css/breadcrumb.css +25 -5
  11. package/css/button-group.css +18 -13
  12. package/css/button.css +48 -11
  13. package/css/calendar.css +150 -7
  14. package/css/card.css +20 -11
  15. package/css/carousel.css +36 -5
  16. package/css/cascader.css +211 -124
  17. package/css/checkbox-group.css +72 -22
  18. package/css/checkbox.css +70 -13
  19. package/css/clipboard.css +2 -1
  20. package/css/code-block.css +12 -7
  21. package/css/collapsible.css +49 -3
  22. package/css/color-picker.css +132 -46
  23. package/css/combobox.css +132 -60
  24. package/css/composer.css +5 -3
  25. package/css/context-menu.css +113 -74
  26. package/css/date-field.css +93 -16
  27. package/css/date-picker.css +293 -72
  28. package/css/descriptions.css +11 -5
  29. package/css/dialog.css +47 -14
  30. package/css/download-trigger.css +76 -0
  31. package/css/drawer.css +57 -16
  32. package/css/dynamic-input.css +75 -17
  33. package/css/editable.css +12 -10
  34. package/css/ellipsis.css +7 -1
  35. package/css/empty-state.css +22 -12
  36. package/css/field.css +16 -6
  37. package/css/fieldset.css +69 -0
  38. package/css/file-upload.css +46 -8
  39. package/css/flex.css +13 -7
  40. package/css/float-button.css +23 -1
  41. package/css/floating-panel.css +316 -0
  42. package/css/form.css +4 -4
  43. package/css/grid.css +11 -5
  44. package/css/heatmap.css +411 -0
  45. package/css/highlight.css +2 -2
  46. package/css/hotkeys.css +90 -0
  47. package/css/hover-card.css +43 -45
  48. package/css/image-cropper.css +233 -0
  49. package/css/image-viewer.css +155 -17
  50. package/css/image.css +2 -2
  51. package/css/infinite-scroll.css +1 -1
  52. package/css/json-viewer.css +274 -0
  53. package/css/layout.css +19 -15
  54. package/css/list.css +22 -13
  55. package/css/listbox.css +24 -6
  56. package/css/loading-bar.css +12 -5
  57. package/css/log.css +7 -3
  58. package/css/marquee.css +9 -0
  59. package/css/masonry.css +63 -0
  60. package/css/mention.css +100 -36
  61. package/css/menu.css +127 -50
  62. package/css/menubar.css +155 -61
  63. package/css/navigation-menu.css +56 -31
  64. package/css/notification.css +377 -0
  65. package/css/number-animation.css +3 -3
  66. package/css/number-field.css +182 -19
  67. package/css/overlay-arrow.css +51 -0
  68. package/css/page-header.css +12 -5
  69. package/css/pagination.css +171 -14
  70. package/css/password-input.css +356 -0
  71. package/css/pin-input.css +15 -12
  72. package/css/popconfirm.css +55 -12
  73. package/css/popover.css +73 -45
  74. package/css/popselect.css +207 -57
  75. package/css/progress.css +54 -8
  76. package/css/qr-code.css +1 -1
  77. package/css/radio-group.css +27 -10
  78. package/css/rating.css +4 -4
  79. package/css/reset.css +17 -0
  80. package/css/result.css +21 -11
  81. package/css/scroll-area.css +61 -89
  82. package/css/scrollbar.css +170 -0
  83. package/css/segmented.css +215 -0
  84. package/css/select.css +298 -131
  85. package/css/separator.css +2 -2
  86. package/css/side-nav.css +127 -24
  87. package/css/signature-pad.css +144 -0
  88. package/css/skeleton.css +7 -1
  89. package/css/slider.css +14 -12
  90. package/css/space.css +117 -0
  91. package/css/spinner.css +22 -10
  92. package/css/statistic.css +9 -9
  93. package/css/steps.css +29 -12
  94. package/css/switch.css +57 -8
  95. package/css/table.css +146 -44
  96. package/css/tabs.css +13 -5
  97. package/css/tag.css +179 -0
  98. package/css/tags-input.css +80 -42
  99. package/css/text-field.css +151 -38
  100. package/css/thread.css +11 -3
  101. package/css/time-field.css +99 -18
  102. package/css/time-picker.css +261 -71
  103. package/css/timeline.css +15 -15
  104. package/css/timer.css +119 -0
  105. package/css/toast.css +129 -55
  106. package/css/toggle-group.css +30 -4
  107. package/css/toggle.css +12 -6
  108. package/css/tone.css +57 -22
  109. package/css/toolbar.css +1 -1
  110. package/css/tooltip.css +40 -31
  111. package/css/tour.css +112 -61
  112. package/css/transfer.css +98 -21
  113. package/css/tree-select.css +215 -89
  114. package/css/tree.css +131 -5
  115. package/css/typography.css +5 -5
  116. package/css/undefined.css +12 -1
  117. package/css/virtualizer.css +3 -1
  118. package/css/watermark.css +1 -2
  119. package/index.css +18 -1
  120. package/index.unlayered.css +10356 -3255
  121. package/package.json +20 -4
  122. package/css/toaster.css +0 -74
@@ -0,0 +1,316 @@
1
+ @layer xihan.components {
2
+ /* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
3
+ [data-scope='floating-panel'] {
4
+ --xh-floating-panel-skin: 1;
5
+ }
6
+
7
+ /* 分工:**面板的落位与尺寸**由连接层每帧写进 positioner 的内联样式
8
+ (position / left / top / width / height)。这份皮肤一条都不碰那五个属性——
9
+ 内联优先级高于样式表,写了不但是死声明,还会在切换形态的那一帧跟连接层抢位置。
10
+ 皮肤只管层级、配色、圆角、阴影、把手的摆放与状态表现。 */
11
+
12
+ [data-scope='floating-panel'][data-part='root'] {
13
+ /* 作者塞进指示符槽的图标跟着字号走,与皮肤画的兜底字形同一把尺 */
14
+ --xh-icon-size: var(--xh-floating-panel-icon-size, var(--xh-glyph-size-text));
15
+
16
+ /* 面板本身是 fixed 定位,root 只是作者那棵树里的容器,不参与排布 */
17
+ display: contents;
18
+ }
19
+
20
+ /* 浮层被搬到 portal 落点,继承不到 root 上的槽:这把尺在被搬走的那一侧再声明一次,
21
+ 关闭钮与条目里作者塞的图标才和皮肤画的兜底字形一样大 */
22
+ [data-scope='floating-panel'][data-part='content'] {
23
+ --xh-icon-size: var(--xh-floating-panel-icon-size, var(--xh-glyph-size-text));
24
+ }
25
+
26
+ [data-scope='floating-panel'][data-part='root'][hidden] {
27
+ display: none;
28
+ }
29
+
30
+ [data-scope='floating-panel'][data-part='trigger'] {
31
+ display: inline-flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ block-size: var(--xh-floating-panel-trigger-h, var(--xh-control-h-md));
35
+ padding-inline: var(--xh-floating-panel-trigger-px, var(--xh-control-px-md));
36
+ border: var(--xh-stroke-thin) solid var(--xh-floating-panel-trigger-border, var(--xh-border-control));
37
+ border-radius: var(--xh-floating-panel-trigger-radius, var(--xh-shape-control));
38
+ background: var(--xh-floating-panel-trigger-bg, var(--xh-bg-surface));
39
+ color: var(--xh-floating-panel-trigger-fg, var(--xh-fg-default));
40
+ font-size: var(--xh-text-label-size);
41
+ cursor: pointer;
42
+ }
43
+
44
+ [data-scope='floating-panel'][data-part='trigger'][hidden] {
45
+ display: none;
46
+ }
47
+
48
+ [data-scope='floating-panel'][data-part='trigger']:focus-visible {
49
+ outline: var(--xh-ring-width) solid var(--xh-ring-focus);
50
+ outline-offset: var(--xh-ring-offset);
51
+ }
52
+
53
+ /* 把手的粗细:八个把手共用这两档,声明在这里往下继承。 */
54
+ [data-scope='floating-panel'][data-part='positioner'] {
55
+ --xh-_floating-panel-handle: var(--xh-floating-panel-handle-size, var(--xh-space-2));
56
+ --xh-_floating-panel-corner: var(--xh-floating-panel-corner-size, var(--xh-space-4));
57
+
58
+ position: fixed;
59
+ /* 与抽屉同一档:面板要盖住吸顶栏,又该被随后打开的弹窗与浮层压住 */
60
+ z-index: var(--xh-floating-panel-layer, var(--xh-layer-drawer));
61
+ display: block;
62
+ }
63
+
64
+ [data-scope='floating-panel'][data-part='positioner'][hidden] {
65
+ display: none;
66
+ }
67
+
68
+ [data-scope='floating-panel'][data-part='content'] {
69
+ position: relative;
70
+ block-size: 100%;
71
+ display: flex;
72
+ flex-direction: column;
73
+ overflow: hidden;
74
+ /* 面板底下没有遮罩,压着的是任意页面内容:这条描边是它与背景之间唯一的边界,
75
+ 取 border-default 与同样无遮罩的气泡卡片一档,别退到更淡的 border-subtle */
76
+ border: var(--xh-stroke-thin) solid var(--xh-floating-panel-border, var(--xh-border-default));
77
+ border-radius: var(--xh-floating-panel-radius, var(--xh-shape-surface));
78
+ background: var(--xh-floating-panel-bg, var(--xh-bg-surface));
79
+ color: var(--xh-floating-panel-fg, var(--xh-fg-default));
80
+ box-shadow: var(--xh-floating-panel-shadow, var(--xh-elevation-sheet));
81
+ }
82
+
83
+ [data-scope='floating-panel'][data-part='content'][hidden] {
84
+ display: none;
85
+ }
86
+
87
+ /* 面板本体不接收焦点,只是键盘事件的收口点,画环反而像是选中了整块 */
88
+ [data-scope='floating-panel'][data-part='content']:focus-visible {
89
+ outline: none;
90
+ }
91
+
92
+ /* 跟手期间整块不许选中文字:手在标题栏上来回蹭时会顺带把正文刷成高亮 */
93
+ [data-scope='floating-panel'][data-part='content'][data-dragging],
94
+ [data-scope='floating-panel'][data-part='content'][data-resizing] {
95
+ user-select: none;
96
+ }
97
+
98
+ [data-scope='floating-panel'][data-part='header'] {
99
+ display: flex;
100
+ align-items: center;
101
+ gap: var(--xh-floating-panel-header-gap, var(--xh-control-gap-sm));
102
+ padding-block: var(--xh-floating-panel-header-py, var(--xh-space-2));
103
+ padding-inline: var(--xh-floating-panel-header-px, var(--xh-space-3));
104
+ border-block-end: var(--xh-stroke-thin) solid var(--xh-floating-panel-header-border, var(--xh-border-subtle));
105
+ background: var(--xh-floating-panel-header-bg, var(--xh-bg-subtle));
106
+ }
107
+
108
+ [data-scope='floating-panel'][data-part='header'][hidden] {
109
+ display: none;
110
+ }
111
+
112
+ [data-scope='floating-panel'][data-part='title'] {
113
+ margin: 0;
114
+ flex: 1 1 auto;
115
+ overflow: hidden;
116
+ font-size: var(--xh-floating-panel-title-font-size, var(--xh-text-label-size));
117
+ font-weight: var(--xh-floating-panel-title-font-weight, var(--xh-text-label-weight));
118
+ line-height: var(--xh-leading-tight);
119
+ white-space: nowrap;
120
+ text-overflow: ellipsis;
121
+ color: var(--xh-floating-panel-title-fg, var(--xh-fg-default));
122
+ }
123
+
124
+ /* 拖拽把手铺满标题栏剩下的横向空间:只给一小块纹理的话很难抓住 */
125
+ [data-scope='floating-panel'][data-part='drag-trigger'] {
126
+ flex: 1 1 auto;
127
+ align-self: stretch;
128
+ min-inline-size: var(--xh-space-6);
129
+ border: 0;
130
+ padding: 0;
131
+ background: transparent;
132
+ cursor: grab;
133
+ }
134
+
135
+ [data-scope='floating-panel'][data-part='drag-trigger'][data-dragging] {
136
+ cursor: grabbing;
137
+ }
138
+
139
+ [data-scope='floating-panel'][data-part='drag-trigger'][data-disabled] {
140
+ cursor: default;
141
+ }
142
+
143
+ [data-scope='floating-panel'][data-part='drag-trigger']:focus-visible {
144
+ outline: var(--xh-ring-width) solid var(--xh-ring-focus);
145
+ outline-offset: calc(-1 * var(--xh-ring-offset));
146
+ }
147
+
148
+ /* —— 改尺把手 ——
149
+ 这一段刻意用物理的 inset / width / height:面板的坐标是屏幕坐标(连接层写的是
150
+ left/top),指针位移与方向键推动的也是屏幕方向。改成逻辑属性后,RTL 下 inset-inline-start
151
+ 会翻到另一侧,守着「西边」的把手会长在东边,手往右拖却从左边收——把手与它推的那条边脱钩。 */
152
+ [data-scope='floating-panel'][data-part='resize-trigger'] {
153
+ position: absolute;
154
+ border: 0;
155
+ padding: 0;
156
+ /* 把手是透明的命中区:看不见但要摸得着,嫌小就调 --xh-floating-panel-handle-size */
157
+ background: transparent;
158
+ }
159
+
160
+ /* 只换指针形状,不摘 pointer-events:点击守卫在连接层,摘掉会让"键盘还在、指针没了"
161
+ 这两套禁用语义对不上 */
162
+ [data-scope='floating-panel'][data-part='resize-trigger'][data-disabled] {
163
+ cursor: default;
164
+ }
165
+
166
+ [data-scope='floating-panel'][data-part='resize-trigger']:focus-visible {
167
+ outline: var(--xh-ring-width) solid var(--xh-ring-focus);
168
+ outline-offset: calc(-1 * var(--xh-ring-offset));
169
+ }
170
+
171
+ [data-scope='floating-panel'][data-part='resize-trigger'][data-edge='n'] {
172
+ inset: 0 0 auto 0;
173
+ height: var(--xh-_floating-panel-handle);
174
+ cursor: ns-resize;
175
+ }
176
+
177
+ [data-scope='floating-panel'][data-part='resize-trigger'][data-edge='s'] {
178
+ inset: auto 0 0 0;
179
+ height: var(--xh-_floating-panel-handle);
180
+ cursor: ns-resize;
181
+ }
182
+
183
+ [data-scope='floating-panel'][data-part='resize-trigger'][data-edge='w'] {
184
+ inset: 0 auto 0 0;
185
+ width: var(--xh-_floating-panel-handle);
186
+ cursor: ew-resize;
187
+ }
188
+
189
+ [data-scope='floating-panel'][data-part='resize-trigger'][data-edge='e'] {
190
+ inset: 0 0 0 auto;
191
+ width: var(--xh-_floating-panel-handle);
192
+ cursor: ew-resize;
193
+ }
194
+
195
+ /* 四个角排在四条边之后,命中区大一圈:角上要同时抓住两条边 */
196
+ [data-scope='floating-panel'][data-part='resize-trigger'][data-edge='nw'] {
197
+ inset: 0 auto auto 0;
198
+ width: var(--xh-_floating-panel-corner);
199
+ height: var(--xh-_floating-panel-corner);
200
+ cursor: nwse-resize;
201
+ }
202
+
203
+ [data-scope='floating-panel'][data-part='resize-trigger'][data-edge='ne'] {
204
+ inset: 0 0 auto auto;
205
+ width: var(--xh-_floating-panel-corner);
206
+ height: var(--xh-_floating-panel-corner);
207
+ cursor: nesw-resize;
208
+ }
209
+
210
+ [data-scope='floating-panel'][data-part='resize-trigger'][data-edge='se'] {
211
+ inset: auto 0 0 auto;
212
+ width: var(--xh-_floating-panel-corner);
213
+ height: var(--xh-_floating-panel-corner);
214
+ cursor: nwse-resize;
215
+ }
216
+
217
+ [data-scope='floating-panel'][data-part='resize-trigger'][data-edge='sw'] {
218
+ inset: auto auto 0 0;
219
+ width: var(--xh-_floating-panel-corner);
220
+ height: var(--xh-_floating-panel-corner);
221
+ cursor: nesw-resize;
222
+ }
223
+
224
+ /* —— 标题栏上的按钮 —— */
225
+ [data-scope='floating-panel'][data-part='stage-trigger'],
226
+ [data-scope='floating-panel'][data-part='close-trigger'] {
227
+ flex: 0 0 auto;
228
+ display: inline-flex;
229
+ align-items: center;
230
+ justify-content: center;
231
+ border: 0;
232
+ background: transparent;
233
+ color: var(--xh-floating-panel-action-fg, var(--xh-fg-muted));
234
+ cursor: pointer;
235
+ transition:
236
+ background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
237
+ color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
238
+ scale var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
239
+ }
240
+
241
+ /* 两颗钮同高同圆角,尺寸与圆角槽按各自角色命名 */
242
+ [data-scope='floating-panel'][data-part='stage-trigger'] {
243
+ inline-size: var(--xh-floating-panel-action-size, var(--xh-control-h-sm));
244
+ block-size: var(--xh-floating-panel-action-size, var(--xh-control-h-sm));
245
+ border-radius: var(--xh-floating-panel-action-radius, var(--xh-shape-control));
246
+ }
247
+
248
+ [data-scope='floating-panel'][data-part='close-trigger'] {
249
+ inline-size: var(--xh-floating-panel-close-size, var(--xh-control-h-sm));
250
+ block-size: var(--xh-floating-panel-close-size, var(--xh-control-h-sm));
251
+ border-radius: var(--xh-floating-panel-close-radius, var(--xh-shape-control));
252
+ }
253
+
254
+ [data-scope='floating-panel'][data-part='stage-trigger'][hidden],
255
+ [data-scope='floating-panel'][data-part='close-trigger'][hidden] {
256
+ display: none;
257
+ }
258
+
259
+ [data-scope='floating-panel'][data-part='stage-trigger']:hover,
260
+ [data-scope='floating-panel'][data-part='close-trigger']:hover {
261
+ background: var(--xh-floating-panel-action-bg-hover, var(--xh-bg-subtle-hover));
262
+ color: var(--xh-floating-panel-action-fg-hover, var(--xh-fg-default));
263
+ }
264
+
265
+ [data-scope='floating-panel'][data-part='stage-trigger']:active,
266
+ [data-scope='floating-panel'][data-part='close-trigger']:active {
267
+ background: var(--xh-floating-panel-action-bg-active, var(--xh-bg-subtle-active));
268
+ scale: var(--xh-motion-scale-press);
269
+ }
270
+
271
+ /* 当前形态的那个按钮压着不放,用户一眼看得出面板正处于哪一档。
272
+ 按下态的前景取 fg-default 而不是品牌色:品牌色压在这块底上只有 3.4:1(深色皮肤 2.9:1),
273
+ 按钮里通常就一个字形,够不着文字该有的对比度。 */
274
+ [data-scope='floating-panel'][data-part='stage-trigger'][data-state='on'] {
275
+ background: var(--xh-floating-panel-action-bg-active, var(--xh-bg-subtle-active));
276
+ color: var(--xh-floating-panel-action-fg-active, var(--xh-fg-default));
277
+ }
278
+
279
+ /* 只换前景不叠 opacity:叠了之后禁用文字的对比度会掉到读不出来 */
280
+ [data-scope='floating-panel'][data-part='stage-trigger'][data-disabled] {
281
+ background: transparent;
282
+ color: var(--xh-fg-disabled);
283
+ cursor: not-allowed;
284
+ }
285
+
286
+ [data-scope='floating-panel'][data-part='stage-trigger']:focus-visible,
287
+ [data-scope='floating-panel'][data-part='close-trigger']:focus-visible {
288
+ outline: var(--xh-ring-width) solid var(--xh-ring-focus);
289
+ outline-offset: var(--xh-ring-offset);
290
+ }
291
+
292
+ [data-scope='floating-panel'][data-part='body'] {
293
+ flex: 1 1 auto;
294
+ display: block;
295
+ overflow: auto;
296
+ padding-block: var(--xh-floating-panel-body-py, var(--xh-surface-py-sm));
297
+ padding-inline: var(--xh-floating-panel-body-px, var(--xh-surface-px-sm));
298
+ }
299
+
300
+ /* 收拢时连接层给正文打 hidden,这里把 UA 的 [hidden] 还回来(上面那条 display 盖掉了它) */
301
+ [data-scope='floating-panel'][data-part='body'][hidden] {
302
+ display: none;
303
+ }
304
+
305
+ /* 没写内容就由皮肤画兜底字形;作者往部件里塞了自己的图形,这几条即不命中 */
306
+ [data-scope='floating-panel'][data-part='close-trigger']:empty::before {
307
+ content: '';
308
+ display: inline-block;
309
+ inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
310
+ block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
311
+ vertical-align: var(--xh-glyph-baseline-shift);
312
+ background-color: currentColor;
313
+ -webkit-mask: var(--xh-glyph-mark-close) center / contain no-repeat;
314
+ mask: var(--xh-glyph-mark-close) center / contain no-repeat;
315
+ }
316
+ }
package/css/form.css CHANGED
@@ -44,7 +44,7 @@
44
44
  用逻辑属性,RTL 下自动换到右侧 */
45
45
  [data-scope='form'][data-part='field-group'][data-invalid] {
46
46
  padding-inline-start: var(--xh-form-field-invalid-px, var(--xh-space-2));
47
- border-inline-start: var(--xh-stroke-thick) solid var(--xh-form-field-invalid-border, var(--xh-color-danger-500));
47
+ border-inline-start: var(--xh-stroke-thick) solid var(--xh-form-field-invalid-border, var(--xh-border-invalid));
48
48
  }
49
49
 
50
50
  /* 容器带着 tabindex=-1:控件全禁用时焦点会落在它自己身上,
@@ -61,13 +61,13 @@
61
61
  gap: var(--xh-form-summary-gap, var(--xh-space-1_5));
62
62
  padding-block: var(--xh-form-summary-py, var(--xh-space-3));
63
63
  padding-inline: var(--xh-form-summary-px, var(--xh-control-px-md));
64
- border: var(--xh-stroke-thin) solid var(--xh-form-summary-border, var(--xh-color-danger-500));
64
+ border: var(--xh-stroke-thin) solid var(--xh-form-summary-border, var(--xh-border-invalid));
65
65
  border-radius: var(--xh-form-summary-radius, var(--xh-shape-surface));
66
66
  background: var(--xh-form-summary-bg, var(--xh-bg-surface));
67
67
  color: var(--xh-form-summary-fg, var(--xh-fg-danger));
68
68
  font-size: var(--xh-form-summary-font-size, var(--xh-text-body-size));
69
69
  line-height: var(--xh-leading-normal);
70
- box-shadow: var(--xh-form-summary-shadow, var(--xh-elevation-1));
70
+ box-shadow: var(--xh-form-summary-shadow, var(--xh-elevation-raised));
71
71
  }
72
72
 
73
73
  /* 漏了这条,摘要一旦出现过就再也撤不下去(上面那条 display 盖掉了 UA 的 [hidden] 规则) */
@@ -90,7 +90,7 @@
90
90
  [data-scope='form'][data-part='error-summary-item'] {
91
91
  display: block;
92
92
  color: inherit;
93
- font-size: var(--xh-form-summary-item-font-size, var(--xh-font-size-sm));
93
+ font-size: var(--xh-form-summary-item-font-size, var(--xh-text-secondary-size));
94
94
  text-decoration: underline;
95
95
  text-underline-offset: 2px;
96
96
  cursor: pointer;
package/css/grid.css CHANGED
@@ -269,23 +269,23 @@
269
269
  /* —— 间距档位 —— */
270
270
  /* 每一档指向一个间距令牌,行与行之间也吃这同一份间距 */
271
271
  [data-scope='grid'][data-part='root'][data-gap='xs'] {
272
- gap: var(--xh-grid-gap, var(--xh-space-1));
272
+ gap: var(--xh-grid-gap, var(--xh-layout-gap-xs));
273
273
  }
274
274
 
275
275
  [data-scope='grid'][data-part='root'][data-gap='sm'] {
276
- gap: var(--xh-grid-gap, var(--xh-space-2));
276
+ gap: var(--xh-grid-gap, var(--xh-layout-gap-sm));
277
277
  }
278
278
 
279
279
  [data-scope='grid'][data-part='root'][data-gap='md'] {
280
- gap: var(--xh-grid-gap, var(--xh-space-3));
280
+ gap: var(--xh-grid-gap, var(--xh-layout-gap-md));
281
281
  }
282
282
 
283
283
  [data-scope='grid'][data-part='root'][data-gap='lg'] {
284
- gap: var(--xh-grid-gap, var(--xh-space-4));
284
+ gap: var(--xh-grid-gap, var(--xh-layout-gap-lg));
285
285
  }
286
286
 
287
287
  [data-scope='grid'][data-part='root'][data-gap='xl'] {
288
- gap: var(--xh-grid-gap, var(--xh-space-6));
288
+ gap: var(--xh-grid-gap, var(--xh-layout-gap-xl));
289
289
  }
290
290
 
291
291
  /* —— 块向对齐 —— */
@@ -430,4 +430,10 @@
430
430
  [data-scope='grid'][data-part='item'][data-offset='11'] {
431
431
  --xh-_grid-start: 12;
432
432
  }
433
+
434
+ /* 声明过任何 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去。
435
+ 写在文件末尾:兜底必须排在该部件所有 display 声明之后 */
436
+ [data-scope='grid'][data-part='root'][hidden] {
437
+ display: none;
438
+ }
433
439
  }