@xihan-ui/styles 1.0.0-alpha.1 → 1.0.0-alpha.3

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