@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
+ /* 定义 descriptions 样式。 */
7
+
1
8
  @layer xihan.components {
2
9
  /* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
3
10
  [data-scope='descriptions'] {
@@ -8,7 +15,8 @@
8
15
  /* 一个尺寸档只换这几个私有槽,每一格与格内两段都从根上继承它们,
9
16
  换档不必给每个部件各写一条选择器 */
10
17
  --xh-_descriptions-gap: var(--xh-space-3);
11
- --xh-_descriptions-pair-gap: var(--xh-space-1);
18
+ /* 标签是每一格的集合标题:叠着排时与取值隔 space-2(§6.4 集合标题与集合的间距) */
19
+ --xh-_descriptions-pair-gap: var(--xh-space-2);
12
20
  --xh-_descriptions-label-gap: var(--xh-space-2);
13
21
  --xh-_descriptions-py: var(--xh-space-2);
14
22
  --xh-_descriptions-px: var(--xh-space-3);
@@ -71,23 +79,19 @@
71
79
  }
72
80
 
73
81
  /* —— 每一格 —— */
74
- /* 一格自己也是网格:不写 placement 即标签一行、取值一行叠着排 */
82
+ /* 一格自己也是网格:不写 placement 即标签一行、取值一行叠着排。
83
+ 窄档每格横跨根上排定的所有列,一行只摆一组,作者写在格上的 span 这一档不认 */
75
84
  [data-scope='descriptions'][data-part='item'] {
85
+ /* 作者写在这一格上的跨列数,由连接层落成这个槽;没写即一列 */
86
+ --xh-_descriptions-item-span: 1;
87
+
76
88
  display: grid;
77
89
  grid-template-columns: minmax(0, 1fr);
90
+ grid-column: 1 / -1;
78
91
  align-content: start;
79
92
  gap: var(--xh-descriptions-pair-gap, var(--xh-_descriptions-pair-gap));
80
93
  }
81
94
 
82
- /* 标签在左:一格分成「标签列 + 取值列」,两段的首行文字对齐同一条基线。
83
- 只认自己的直接子格,套在取值里的另一份描述由它自己的根管 */
84
- [data-scope='descriptions'][data-part='root'][data-placement='left']
85
- > [data-scope='descriptions'][data-part='item'] {
86
- grid-template-columns: var(--xh-descriptions-label-w, var(--xh-_descriptions-label-w)) minmax(0, 1fr);
87
- align-items: baseline;
88
- column-gap: var(--xh-descriptions-label-gap, var(--xh-_descriptions-label-gap));
89
- }
90
-
91
95
  [data-scope='descriptions'][data-part='label'] {
92
96
  color: var(--xh-descriptions-label-fg, var(--xh-fg-muted));
93
97
  font-weight: var(--xh-descriptions-label-font-weight, var(--xh-text-label-weight));
@@ -101,8 +105,8 @@
101
105
  color: var(--xh-descriptions-value-fg, var(--xh-fg-default));
102
106
  }
103
107
 
104
- /* —— 外框与网格线 —— */
105
- [data-scope='descriptions'][data-part='root'][data-bordered] {
108
+ /* —— 形态:ghost 即基础规则,不画壳;outline 画外框与网格线 —— */
109
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'] {
106
110
  /* 网格线由每格自己的边线拼出来,格与格之间不能再留缝 */
107
111
  gap: 0;
108
112
  border: var(--xh-stroke-thin) solid var(--xh-descriptions-border, var(--xh-border-default));
@@ -113,7 +117,7 @@
113
117
  }
114
118
 
115
119
  /* 每格自带上边线与左边线,行首与首行那几格再各自抹掉,相邻两格之间就只剩一条 */
116
- [data-scope='descriptions'][data-part='root'][data-bordered]
120
+ [data-scope='descriptions'][data-part='root'][data-variant='outline']
117
121
  > [data-scope='descriptions'][data-part='item'] {
118
122
  padding-block: var(--xh-descriptions-item-py, var(--xh-_descriptions-py));
119
123
  padding-inline: var(--xh-descriptions-item-px, var(--xh-_descriptions-px));
@@ -122,85 +126,127 @@
122
126
  border-inline-start: 0 solid var(--xh-descriptions-divider, var(--xh-border-subtle));
123
127
  }
124
128
 
125
- [data-scope='descriptions'][data-part='root'][data-bordered]
129
+ [data-scope='descriptions'][data-part='root'][data-variant='outline']
126
130
  > [data-scope='descriptions'][data-part='item']:first-child {
127
131
  border-block-start-width: 0;
128
132
  }
129
133
 
130
- /* 二到六列:左边线一律补上,再抹掉每行第一格的左边线与首行那几格的上边线 */
131
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='2']
132
- > [data-scope='descriptions'][data-part='item'] {
133
- border-inline-start-width: var(--xh-stroke-thin);
134
- }
135
-
136
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='2']
137
- > [data-scope='descriptions'][data-part='item']:nth-child(2n + 1) {
138
- border-inline-start-width: 0;
139
- }
140
-
141
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='2']
142
- > [data-scope='descriptions'][data-part='item']:nth-child(-n + 2) {
143
- border-block-start-width: 0;
144
- }
145
-
146
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='3']
147
- > [data-scope='descriptions'][data-part='item'] {
148
- border-inline-start-width: var(--xh-stroke-thin);
149
- }
150
-
151
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='3']
152
- > [data-scope='descriptions'][data-part='item']:nth-child(3n + 1) {
153
- border-inline-start-width: 0;
154
- }
155
-
156
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='3']
157
- > [data-scope='descriptions'][data-part='item']:nth-child(-n + 3) {
158
- border-block-start-width: 0;
159
- }
160
-
161
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='4']
162
- > [data-scope='descriptions'][data-part='item'] {
163
- border-inline-start-width: var(--xh-stroke-thin);
164
- }
165
-
166
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='4']
167
- > [data-scope='descriptions'][data-part='item']:nth-child(4n + 1) {
168
- border-inline-start-width: 0;
169
- }
170
-
171
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='4']
172
- > [data-scope='descriptions'][data-part='item']:nth-child(-n + 4) {
173
- border-block-start-width: 0;
174
- }
175
-
176
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='5']
177
- > [data-scope='descriptions'][data-part='item'] {
178
- border-inline-start-width: var(--xh-stroke-thin);
179
- }
180
-
181
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='5']
182
- > [data-scope='descriptions'][data-part='item']:nth-child(5n + 1) {
183
- border-inline-start-width: 0;
184
- }
185
-
186
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='5']
187
- > [data-scope='descriptions'][data-part='item']:nth-child(-n + 5) {
188
- border-block-start-width: 0;
189
- }
190
-
191
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='6']
192
- > [data-scope='descriptions'][data-part='item'] {
193
- border-inline-start-width: var(--xh-stroke-thin);
194
- }
195
-
196
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='6']
197
- > [data-scope='descriptions'][data-part='item']:nth-child(6n + 1) {
198
- border-inline-start-width: 0;
134
+ /* 淡底档:不补网格线,surface 圆角 + subtle 底;描边留一圈透明边位,与 outline 同一几何 */
135
+ [data-scope='descriptions'][data-part='root'][data-variant='subtle'] {
136
+ border: var(--xh-stroke-thin) solid transparent;
137
+ border-radius: var(--xh-descriptions-radius, var(--xh-shape-surface));
138
+ background: var(--xh-descriptions-bg, var(--xh-bg-subtle));
139
+ overflow: hidden;
199
140
  }
200
141
 
201
- [data-scope='descriptions'][data-part='root'][data-bordered][data-columns='6']
202
- > [data-scope='descriptions'][data-part='item']:nth-child(-n + 6) {
203
- border-block-start-width: 0;
142
+ /* —— 逐档的列数与边线 ——
143
+ 窄档一行只摆一组:每格的上边线就是行与行之间那条线,左边线用不上——
144
+ 上面那两条默认规则就是这一档的写法。
145
+ 宽起来以后逐档恢复:每一档写两件事,一是这一档一行摆几格(跨列数),
146
+ 二是这一档的边线:不在行首的格补上左边线,首行那几格抹掉上边线。
147
+ 两组集合逐档只增不减,宽档不必回收窄档写下的边线。 */
148
+ @media (min-width: 768px) {
149
+ /* 标签左置从这一档起生效:窄档一律标签在上,取值拿满整格的宽。
150
+ 只认自己的直接子格,套在取值里的另一份描述由它自己的根管 */
151
+ [data-scope='descriptions'][data-part='root'][data-placement='left']
152
+ > [data-scope='descriptions'][data-part='item'] {
153
+ grid-template-columns: var(--xh-descriptions-label-w, var(--xh-_descriptions-label-w)) minmax(0, 1fr);
154
+ align-items: baseline;
155
+ column-gap: var(--xh-descriptions-label-gap, var(--xh-_descriptions-label-gap));
156
+ }
157
+
158
+ /* 二列与三列在这一档按作者写的列数摆,作者写在格上的 span 从这一档起认 */
159
+ [data-scope='descriptions'][data-part='root'][data-columns='2']
160
+ > [data-scope='descriptions'][data-part='item'],
161
+ [data-scope='descriptions'][data-part='root'][data-columns='3']
162
+ > [data-scope='descriptions'][data-part='item'] {
163
+ grid-column: span var(--xh-_descriptions-item-span);
164
+ }
165
+
166
+ /* 四列与六列在这一档摆两列:一格横跨一半的轨道,作者写的 span 这一档同样不认——
167
+ 一行只有两格时,认了 span 的那格反而比邻居窄。
168
+ 五列没有能摆成两列等宽的跨列数,留在一列,到宽档再按作者的五列摆 */
169
+ [data-scope='descriptions'][data-part='root'][data-columns='4']
170
+ > [data-scope='descriptions'][data-part='item'] {
171
+ grid-column: span 2;
172
+ }
173
+
174
+ [data-scope='descriptions'][data-part='root'][data-columns='6']
175
+ > [data-scope='descriptions'][data-part='item'] {
176
+ grid-column: span 3;
177
+ }
178
+
179
+ /* 一行两格:二、四、六列在这一档共用这套边线 */
180
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='2']
181
+ > [data-scope='descriptions'][data-part='item']:not(:nth-child(2n + 1)),
182
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='4']
183
+ > [data-scope='descriptions'][data-part='item']:not(:nth-child(2n + 1)),
184
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='6']
185
+ > [data-scope='descriptions'][data-part='item']:not(:nth-child(2n + 1)) {
186
+ border-inline-start-width: var(--xh-stroke-thin);
187
+ }
188
+
189
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='2']
190
+ > [data-scope='descriptions'][data-part='item']:nth-child(-n + 2),
191
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='4']
192
+ > [data-scope='descriptions'][data-part='item']:nth-child(-n + 2),
193
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='6']
194
+ > [data-scope='descriptions'][data-part='item']:nth-child(-n + 2) {
195
+ border-block-start-width: 0;
196
+ }
197
+
198
+ /* 一行三格 */
199
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='3']
200
+ > [data-scope='descriptions'][data-part='item']:not(:nth-child(3n + 1)) {
201
+ border-inline-start-width: var(--xh-stroke-thin);
202
+ }
203
+
204
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='3']
205
+ > [data-scope='descriptions'][data-part='item']:nth-child(-n + 3) {
206
+ border-block-start-width: 0;
207
+ }
208
+ }
209
+
210
+ @media (min-width: 1024px) {
211
+ /* 四、五、六列到这一档按作者写的列数摆,作者写在格上的 span 从这一档起认 */
212
+ [data-scope='descriptions'][data-part='root'][data-columns='4']
213
+ > [data-scope='descriptions'][data-part='item'],
214
+ [data-scope='descriptions'][data-part='root'][data-columns='5']
215
+ > [data-scope='descriptions'][data-part='item'],
216
+ [data-scope='descriptions'][data-part='root'][data-columns='6']
217
+ > [data-scope='descriptions'][data-part='item'] {
218
+ grid-column: span var(--xh-_descriptions-item-span);
219
+ }
220
+
221
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='4']
222
+ > [data-scope='descriptions'][data-part='item']:not(:nth-child(4n + 1)) {
223
+ border-inline-start-width: var(--xh-stroke-thin);
224
+ }
225
+
226
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='4']
227
+ > [data-scope='descriptions'][data-part='item']:nth-child(-n + 4) {
228
+ border-block-start-width: 0;
229
+ }
230
+
231
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='5']
232
+ > [data-scope='descriptions'][data-part='item']:not(:nth-child(5n + 1)) {
233
+ border-inline-start-width: var(--xh-stroke-thin);
234
+ }
235
+
236
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='5']
237
+ > [data-scope='descriptions'][data-part='item']:nth-child(-n + 5) {
238
+ border-block-start-width: 0;
239
+ }
240
+
241
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='6']
242
+ > [data-scope='descriptions'][data-part='item']:not(:nth-child(6n + 1)) {
243
+ border-inline-start-width: var(--xh-stroke-thin);
244
+ }
245
+
246
+ [data-scope='descriptions'][data-part='root'][data-variant='outline'][data-columns='6']
247
+ > [data-scope='descriptions'][data-part='item']:nth-child(-n + 6) {
248
+ border-block-start-width: 0;
249
+ }
204
250
  }
205
251
 
206
252
  /* 声明过任何 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去。