@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
package/css/card.css CHANGED
@@ -1,129 +1,106 @@
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
+ /* 定义 card 样式。 */
7
+
1
8
  @layer xihan.components {
2
9
  /* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
3
10
  [data-scope='card'] {
4
11
  --xh-card-skin: 1;
5
12
  }
6
13
 
14
+ /* Card 是带统一内边距与节奏的内容面;布局方向可由作者在根上覆盖。
15
+ 边界由 --xh-border-default 描边承担,raised 落影只是抬起的加成(§5.3:Card 是唯一登记 raised 的静态面,
16
+ 且 raised 必带描边);内衬只走 --xh-surface-* 阶梯。 */
7
17
  [data-scope='card'][data-part='root'] {
18
+ position: relative;
8
19
  display: flex;
9
20
  flex-direction: column;
10
- /* 封面要被圆角裁住,所以根自己收边 */
11
- overflow: hidden;
12
- border: var(--xh-stroke-thin) solid transparent;
21
+ gap: var(--xh-card-gap, var(--xh-space-3));
22
+ min-inline-size: 0;
23
+ overflow: visible;
24
+ padding: var(--xh-card-p, var(--xh-surface-pad-lg));
25
+ border: var(--xh-stroke-thin) solid var(--xh-card-border, var(--xh-border-default));
13
26
  border-radius: var(--xh-card-radius, var(--xh-shape-surface));
14
27
  background: var(--xh-card-bg, var(--xh-bg-surface));
15
28
  color: var(--xh-card-fg, var(--xh-fg-default));
16
- /* 各段的内边距由根上这一个槽位统一给,换档只改这里 */
17
- --xh-_card-pad: var(--xh-space-4);
18
- }
19
-
20
- /* —— 形态 —— */
21
- [data-scope='card'][data-part='root'][data-variant='outline'] {
22
- border-color: var(--xh-card-border, var(--xh-border-default));
29
+ box-shadow: var(--xh-card-shadow, var(--xh-elevation-raised));
30
+ font-size: var(--xh-card-font-size, var(--xh-text-label-size));
31
+ line-height: var(--xh-card-leading, var(--xh-text-body-leading));
23
32
  }
24
33
 
34
+ /* 形态按根面三选一:outline 即基础规则(描边 + surface 底 + raised),subtle 淡底 + 透明占位边 + 无影
35
+ (淡底与阴影互斥),ghost 三件都不画(占位边保住 1px 边位,三档几何一致);不承诺悬停或尺寸等额外行为。 */
25
36
  [data-scope='card'][data-part='root'][data-variant='subtle'] {
37
+ border-color: transparent;
26
38
  background: var(--xh-card-bg, var(--xh-bg-subtle));
27
- }
28
-
29
- [data-scope='card'][data-part='root'][data-variant='elevated'] {
30
- box-shadow: var(--xh-card-shadow, var(--xh-elevation-raised));
39
+ box-shadow: var(--xh-card-shadow, none);
31
40
  }
32
41
 
33
42
  [data-scope='card'][data-part='root'][data-variant='ghost'] {
43
+ border-color: transparent;
34
44
  background: transparent;
35
- }
36
-
37
- /* —— 尺寸 —— */
38
- [data-scope='card'][data-part='root'][data-size='sm'] {
39
- --xh-_card-pad: var(--xh-space-3);
40
- }
41
-
42
- [data-scope='card'][data-part='root'][data-size='lg'] {
43
- --xh-_card-pad: var(--xh-space-6);
44
- }
45
-
46
- /* 悬停抬起:只在能用指针的设备上生效,触摸端不留一个按不掉的悬停态 */
47
- @media (hover: hover) {
48
- [data-scope='card'][data-part='root'][data-hoverable]:hover {
49
- border-color: var(--xh-card-border, var(--xh-border-strong));
50
- box-shadow: var(--xh-card-shadow, var(--xh-elevation-raised));
51
- }
52
- }
53
-
54
- [data-scope='card'][data-part='root'][data-hoverable] {
55
- transition:
56
- box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
57
- border-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
58
- }
59
-
60
- /* —— 各段 —— */
61
- /* 封面顶到根的边上,不吃内边距 */
62
- [data-scope='card'][data-part='cover'] {
63
- display: block;
64
- overflow: hidden;
45
+ box-shadow: var(--xh-card-shadow, none);
65
46
  }
66
47
 
67
48
  [data-scope='card'][data-part='header'] {
68
49
  display: flex;
69
50
  flex-direction: column;
70
- gap: var(--xh-card-header-gap, var(--xh-space-1));
71
- padding: var(--xh-_card-pad);
72
- /* 头下面若还有别的段,间距由那一段自己的内边距接上,这里不重复留白 */
73
- padding-block-end: var(--xh-card-header-pb, var(--xh-space-2));
74
51
  }
75
52
 
76
- [data-scope='card'][data-part='title'] {
77
- font-size: var(--xh-card-title-font-size, var(--xh-text-label-size));
78
- font-weight: var(--xh-font-weight-medium);
79
- line-height: var(--xh-leading-tight);
53
+ [data-scope='card'][data-part='title'],
54
+ [data-scope='card'][data-part='description'] {
55
+ margin: 0;
80
56
  }
81
57
 
82
- [data-scope='card'][data-part='root'][data-size='lg'] [data-part='title'] {
83
- font-size: var(--xh-card-title-font-size, var(--xh-control-font-lg));
58
+ [data-scope='card'][data-part='title'] {
59
+ color: var(--xh-card-title-fg, var(--xh-fg-default));
60
+ font-size: var(--xh-card-title-font-size, var(--xh-text-label-size));
61
+ font-weight: var(--xh-card-title-font-weight, var(--xh-font-weight-semibold));
62
+ line-height: var(--xh-card-title-leading, var(--xh-leading-relaxed));
84
63
  }
85
64
 
86
65
  [data-scope='card'][data-part='description'] {
87
- color: var(--xh-fg-muted);
88
- font-size: var(--xh-text-secondary-size);
89
- line-height: var(--xh-leading-normal);
66
+ color: var(--xh-card-description-fg, var(--xh-fg-muted));
67
+ font-size: var(--xh-card-description-font-size, var(--xh-text-secondary-size));
68
+ line-height: var(--xh-card-description-leading, var(--xh-leading-normal));
90
69
  }
91
70
 
92
- [data-scope='card'][data-part='body'] {
71
+ [data-scope='card'][data-part='content'] {
72
+ display: flex;
93
73
  flex: 1 1 auto;
94
- padding: var(--xh-_card-pad);
95
- }
96
-
97
- /* 头与身相邻时,头已经收窄了下边距,身不必再从顶上留一份 */
98
- [data-scope='card'][data-part='header'] + [data-part='body'] {
99
- padding-block-start: var(--xh-card-body-pt, var(--xh-space-2));
74
+ flex-direction: column;
75
+ gap: var(--xh-card-content-gap, var(--xh-space-1));
76
+ min-inline-size: 0;
100
77
  }
101
78
 
102
79
  [data-scope='card'][data-part='footer'] {
103
80
  display: flex;
81
+ flex-direction: row;
104
82
  align-items: center;
105
83
  gap: var(--xh-card-footer-gap, var(--xh-space-2));
106
- padding: var(--xh-_card-pad);
107
- padding-block-start: var(--xh-card-footer-pt, var(--xh-space-2));
108
84
  }
109
85
 
110
- /* —— 分段 —— */
111
- /* 分隔线画在下一段的上边,段与段之间才只有一条 */
112
- [data-scope='card'][data-part='root'][data-segmented] [data-part='body'],
113
- [data-scope='card'][data-part='root'][data-segmented] [data-part='footer'] {
114
- border-block-start: var(--xh-stroke-thin) solid var(--xh-card-divider, var(--xh-border-subtle));
115
- padding-block-start: var(--xh-_card-pad);
86
+ @media print {
87
+ [data-scope='card'][data-part='root'] {
88
+ border-color: currentColor;
89
+ box-shadow: none;
90
+ }
116
91
  }
117
92
 
118
- [data-scope='card'][data-part='root'][data-segmented] [data-part='header'] {
119
- padding-block-end: var(--xh-_card-pad);
93
+ @media (forced-colors: active) {
94
+ [data-scope='card'][data-part='root']:not([data-variant='ghost']) {
95
+ border-color: CanvasText;
96
+ box-shadow: none;
97
+ }
120
98
  }
121
99
 
122
- /* 声明过任何 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去。
123
- 写在文件末尾:兜底必须排在该部件所有 display 声明之后 */
100
+ /* 声明过 display 就盖掉 UA 的 [hidden]{display:none},各部件在文件末尾统一还原。 */
124
101
  [data-scope='card'][data-part='root'][hidden],
125
- [data-scope='card'][data-part='cover'][hidden],
126
102
  [data-scope='card'][data-part='header'][hidden],
103
+ [data-scope='card'][data-part='content'][hidden],
127
104
  [data-scope='card'][data-part='footer'][hidden] {
128
105
  display: none;
129
106
  }