@xihan-ui/styles 1.0.0-alpha.2 → 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 (118) hide show
  1. package/CHANGELOG.md +447 -0
  2. package/README.md +1 -1
  3. package/css/accordion.css +56 -5
  4. package/css/alert.css +30 -5
  5. package/css/anchor.css +7 -7
  6. package/css/avatar-group.css +3 -3
  7. package/css/avatar.css +3 -3
  8. package/css/back-top.css +16 -1
  9. package/css/badge.css +16 -2
  10. package/css/breadcrumb.css +24 -4
  11. package/css/button-group.css +14 -13
  12. package/css/button.css +42 -11
  13. package/css/calendar.css +119 -2
  14. package/css/card.css +5 -5
  15. package/css/carousel.css +36 -5
  16. package/css/cascader.css +183 -102
  17. package/css/checkbox-group.css +41 -19
  18. package/css/checkbox.css +54 -8
  19. package/css/clipboard.css +2 -1
  20. package/css/code-block.css +12 -7
  21. package/css/collapsible.css +42 -2
  22. package/css/color-picker.css +111 -45
  23. package/css/combobox.css +114 -53
  24. package/css/composer.css +5 -3
  25. package/css/context-menu.css +97 -69
  26. package/css/date-field.css +91 -14
  27. package/css/date-picker.css +276 -65
  28. package/css/descriptions.css +2 -2
  29. package/css/dialog.css +40 -13
  30. package/css/download-trigger.css +76 -0
  31. package/css/drawer.css +45 -14
  32. package/css/dynamic-input.css +68 -17
  33. package/css/editable.css +12 -10
  34. package/css/ellipsis.css +1 -1
  35. package/css/empty-state.css +7 -7
  36. package/css/field.css +9 -6
  37. package/css/fieldset.css +69 -0
  38. package/css/file-upload.css +45 -7
  39. package/css/float-button.css +16 -1
  40. package/css/floating-panel.css +310 -0
  41. package/css/form.css +4 -4
  42. package/css/heatmap.css +410 -0
  43. package/css/highlight.css +1 -1
  44. package/css/hotkeys.css +90 -0
  45. package/css/hover-card.css +40 -45
  46. package/css/image-cropper.css +231 -0
  47. package/css/image-viewer.css +137 -12
  48. package/css/image.css +2 -2
  49. package/css/infinite-scroll.css +1 -1
  50. package/css/json-viewer.css +241 -0
  51. package/css/layout.css +6 -10
  52. package/css/list.css +8 -8
  53. package/css/listbox.css +20 -4
  54. package/css/loading-bar.css +7 -1
  55. package/css/log.css +1 -1
  56. package/css/marquee.css +9 -0
  57. package/css/masonry.css +63 -0
  58. package/css/mention.css +87 -33
  59. package/css/menu.css +113 -47
  60. package/css/menubar.css +146 -60
  61. package/css/navigation-menu.css +54 -29
  62. package/css/number-animation.css +3 -3
  63. package/css/number-field.css +173 -16
  64. package/css/overlay-arrow.css +51 -0
  65. package/css/page-header.css +5 -5
  66. package/css/pagination.css +13 -13
  67. package/css/password-input.css +356 -0
  68. package/css/pin-input.css +13 -10
  69. package/css/popconfirm.css +46 -10
  70. package/css/popover.css +70 -45
  71. package/css/popselect.css +183 -53
  72. package/css/progress.css +47 -7
  73. package/css/qr-code.css +1 -1
  74. package/css/radio-group.css +14 -8
  75. package/css/rating.css +2 -2
  76. package/css/reset.css +17 -0
  77. package/css/result.css +6 -6
  78. package/css/scroll-area.css +61 -89
  79. package/css/scrollbar.css +167 -0
  80. package/css/segmented.css +215 -0
  81. package/css/select.css +274 -125
  82. package/css/separator.css +2 -2
  83. package/css/side-nav.css +111 -19
  84. package/css/signature-pad.css +144 -0
  85. package/css/skeleton.css +7 -1
  86. package/css/slider.css +10 -10
  87. package/css/space.css +117 -0
  88. package/css/spinner.css +22 -10
  89. package/css/statistic.css +9 -9
  90. package/css/steps.css +25 -8
  91. package/css/switch.css +48 -6
  92. package/css/table.css +131 -37
  93. package/css/tabs.css +4 -4
  94. package/css/tag.css +177 -0
  95. package/css/tags-input.css +78 -40
  96. package/css/text-field.css +149 -36
  97. package/css/thread.css +1 -1
  98. package/css/time-field.css +97 -16
  99. package/css/time-picker.css +259 -69
  100. package/css/timeline.css +10 -10
  101. package/css/timer.css +119 -0
  102. package/css/toast.css +34 -10
  103. package/css/toaster.css +1 -1
  104. package/css/toggle.css +6 -6
  105. package/css/tone.css +10 -5
  106. package/css/toolbar.css +1 -1
  107. package/css/tooltip.css +36 -33
  108. package/css/tour.css +103 -58
  109. package/css/transfer.css +68 -17
  110. package/css/tree-select.css +185 -84
  111. package/css/tree.css +85 -1
  112. package/css/typography.css +4 -4
  113. package/css/undefined.css +11 -1
  114. package/css/virtualizer.css +3 -1
  115. package/css/watermark.css +1 -2
  116. package/index.css +17 -0
  117. package/index.unlayered.css +8659 -2799
  118. package/package.json +19 -3
@@ -6,9 +6,13 @@
6
6
 
7
7
  /* 与文本框、数字框同一套堆叠:标签一行、分段框一行 */
8
8
  [data-scope='date-field'][data-part='root'] {
9
+ /* 作者塞进来的图标跟着控件的尺寸档走;它自己写了 size 时仍以作者的为准 */
10
+ --xh-icon-size: var(--xh-date-field-icon-size, var(--xh-glyph-size-md));
11
+
9
12
  /* 尺寸档只换这四个私有槽,标题与分段框都从 root 继承它们,换档不必给每个部件各写一条选择器 */
10
13
  --xh-_date-field-control-h: var(--xh-control-h-md);
11
14
  --xh-_date-field-control-px: var(--xh-control-px-md);
15
+ --xh-_date-field-gap: var(--xh-control-gap-md);
12
16
  --xh-_date-field-font-size: var(--xh-text-body-size);
13
17
  --xh-_date-field-label-font-size: var(--xh-text-label-size);
14
18
  /* 形态档只换这三个私有槽:底色与两档描边 */
@@ -27,17 +31,21 @@
27
31
 
28
32
  /* —— 尺寸 —— */
29
33
  [data-scope='date-field'][data-part='root'][data-size='sm'] {
34
+ --xh-icon-size: var(--xh-date-field-icon-size, var(--xh-glyph-size-sm));
30
35
  --xh-_date-field-control-h: var(--xh-control-h-sm);
31
36
  --xh-_date-field-control-px: var(--xh-control-px-sm);
32
- --xh-_date-field-font-size: var(--xh-font-size-sm);
33
- --xh-_date-field-label-font-size: var(--xh-font-size-sm);
37
+ --xh-_date-field-gap: var(--xh-control-gap-sm);
38
+ --xh-_date-field-font-size: var(--xh-control-font-sm);
39
+ --xh-_date-field-label-font-size: var(--xh-control-font-sm);
34
40
  }
35
41
 
36
42
  [data-scope='date-field'][data-part='root'][data-size='lg'] {
43
+ --xh-icon-size: var(--xh-date-field-icon-size, var(--xh-glyph-size-lg));
37
44
  --xh-_date-field-control-h: var(--xh-control-h-lg);
38
45
  --xh-_date-field-control-px: var(--xh-control-px-lg);
39
- --xh-_date-field-font-size: var(--xh-font-size-lg);
40
- --xh-_date-field-label-font-size: var(--xh-font-size-lg);
46
+ --xh-_date-field-gap: var(--xh-control-gap-lg);
47
+ --xh-_date-field-font-size: var(--xh-control-font-lg);
48
+ --xh-_date-field-label-font-size: var(--xh-control-font-lg);
41
49
  }
42
50
 
43
51
  /* —— 形态 —— */
@@ -55,11 +63,11 @@
55
63
  --xh-_date-field-control-border-hover: var(--xh-_tone-border, var(--xh-border-control-hover));
56
64
  }
57
65
 
58
- /* 无框式:底与边都让开,可见反馈只剩聚焦那一档 */
66
+ /* 无框:底与常态描边透明,悬停与聚焦浮出描边 */
59
67
  [data-scope='date-field'][data-part='root'][data-variant='ghost'] {
60
68
  --xh-_date-field-control-bg: transparent;
61
69
  --xh-_date-field-control-border: transparent;
62
- --xh-_date-field-control-border-hover: transparent;
70
+ --xh-_date-field-control-border-hover: var(--xh-_tone-border, var(--xh-border-control-hover));
63
71
  }
64
72
 
65
73
  /* 声明了 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去 */
@@ -72,8 +80,6 @@
72
80
  font-size: var(--xh-date-field-label-font-size, var(--xh-_date-field-label-font-size));
73
81
  font-weight: var(--xh-date-field-label-font-weight, var(--xh-text-label-weight));
74
82
  line-height: var(--xh-leading-none);
75
- /* 点标题会把焦点送进首段,指针得说明这件事 */
76
- cursor: default;
77
83
  }
78
84
 
79
85
  [data-scope='date-field'][data-part='label'][hidden] {
@@ -85,11 +91,12 @@
85
91
  cursor: not-allowed;
86
92
  }
87
93
 
88
- /* 分段框整体长得像一个输入框:边框与背景长在 control 上,各段只是里面的文字。
89
- 段与段之间的分隔符('/'、'年')由作者自己写在段之间,不在角色表里 */
94
+ /* 分段框整体长得像一个输入框:边框与背景长在 control 上,各段只是里面的文字 */
90
95
  [data-scope='date-field'][data-part='control'] {
91
96
  display: inline-flex;
97
+ min-inline-size: var(--xh-date-field-control-min-w, var(--xh-control-min-w));
92
98
  align-items: center;
99
+ gap: var(--xh-date-field-control-gap, var(--xh-_date-field-gap));
93
100
  block-size: var(--xh-date-field-control-h, var(--xh-_date-field-control-h));
94
101
  padding-inline: var(--xh-date-field-control-px, var(--xh-_date-field-control-px));
95
102
  padding-block: 0;
@@ -115,14 +122,17 @@
115
122
 
116
123
  /* 焦点落在某一段上,而边框长在 control 上:焦点环得由内向外借一层。
117
124
  control 自己不占 Tab 位,:focus-within 是它唯一能感知组内焦点的方式 */
118
- [data-scope='date-field'][data-part='control']:focus-within {
119
- border-color: var(--xh-date-field-control-border-focus, var(--xh-_date-field-ring));
125
+ [data-scope='date-field'][data-part='control']:focus-within:not([data-disabled]) {
126
+ border-color: var(--xh-date-field-control-border-focus, var(--xh-_tone, var(--xh-border-control-focus)));
120
127
  outline: var(--xh-ring-width) solid var(--xh-_date-field-ring);
121
128
  outline-offset: var(--xh-ring-offset);
122
129
  }
123
130
 
124
131
  [data-scope='date-field'][data-part='control'][data-invalid] {
125
- border-color: var(--xh-date-field-control-border-invalid, var(--xh-color-danger-500));
132
+ border-color: var(--xh-date-field-control-border-invalid, var(--xh-border-invalid));
133
+
134
+ /* 校验失败时环也跟着变红:两圈等宽相邻却一红一蓝,读的人不知道哪个才是当前状态 */
135
+ --xh-_date-field-ring: var(--xh-ring-invalid);
126
136
  }
127
137
 
128
138
  /* 只读仍可聚焦、可换段,不置灰,只把底色压下去表示"改不动" */
@@ -137,12 +147,25 @@
137
147
  cursor: not-allowed;
138
148
  }
139
149
 
150
+ /* 段位与作者写在段间的分隔符('/'、'年')都在这一层里:它占满盒里剩下的宽度,
151
+ 清空钮因此靠在框内末端 */
152
+ [data-scope='date-field'][data-part='segment-group'] {
153
+ display: inline-flex;
154
+ flex: 1 1 auto;
155
+ align-items: center;
156
+ min-inline-size: 0;
157
+ }
158
+
159
+ [data-scope='date-field'][data-part='segment-group'][hidden] {
160
+ display: none;
161
+ }
162
+
140
163
  /* 每一段是一块可聚焦的文字:宽度随内容走,两侧留一点让选中底色不贴着数字 */
141
164
  [data-scope='date-field'][data-part='segment'] {
142
165
  display: inline-block;
143
166
  padding-inline: var(--xh-date-field-segment-px, var(--xh-space-1));
144
167
  padding-block: var(--xh-date-field-segment-py, var(--xh-space-0));
145
- border-radius: var(--xh-date-field-segment-radius, var(--xh-radius-sm));
168
+ border-radius: var(--xh-date-field-segment-radius, var(--xh-shape-inset));
146
169
  color: inherit;
147
170
  font: inherit;
148
171
  /* 等宽数字:各位字宽不一时,上下键连按会让整行数字左右跳 */
@@ -187,6 +210,60 @@
187
210
  color: var(--xh-date-field-segment-fg-focus, var(--xh-_date-field-segment-fg));
188
211
  }
189
212
 
213
+ /* 清空钮排在段位之后、与框等高的一颗小方钮:没值或不可编辑时连接层给 hidden 收起 */
214
+ [data-scope='date-field'][data-part='clear-trigger'] {
215
+ display: inline-flex;
216
+ flex: none;
217
+ align-items: center;
218
+ justify-content: center;
219
+ inline-size: var(--xh-date-field-action-size, var(--xh-control-action-size));
220
+ block-size: var(--xh-date-field-action-size, var(--xh-control-action-size));
221
+ padding: 0;
222
+ border: 0;
223
+ border-radius: var(--xh-date-field-action-radius, var(--xh-shape-control));
224
+ background: var(--xh-date-field-action-bg, transparent);
225
+ color: var(--xh-date-field-action-fg, var(--xh-fg-muted));
226
+ font-family: inherit;
227
+ font-size: var(--xh-date-field-action-font-size, var(--xh-text-secondary-size));
228
+ line-height: var(--xh-leading-none);
229
+ cursor: pointer;
230
+ user-select: none;
231
+ transition: background var(--xh-motion-duration-micro) var(--xh-motion-ease-enter), scale var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
232
+ }
233
+
234
+ /* 上面给了 display,UA 的 [hidden]{display:none} 已被盖掉,这里补回来 */
235
+ [data-scope='date-field'][data-part='clear-trigger'][hidden] {
236
+ display: none;
237
+ }
238
+
239
+ [data-scope='date-field'][data-part='clear-trigger']:hover {
240
+ background: var(--xh-date-field-action-bg-hover, var(--xh-bg-subtle-hover));
241
+ color: var(--xh-date-field-action-fg-hover, var(--xh-fg-default));
242
+ }
243
+
244
+ [data-scope='date-field'][data-part='clear-trigger']:active {
245
+ background: var(--xh-date-field-action-bg-active, var(--xh-bg-subtle-active));
246
+ scale: var(--xh-motion-scale-press);
247
+ }
248
+
249
+ /* 按钮不占 Tab 位(tabindex=-1),留给程序化聚焦兜底,落焦时得看得见 */
250
+ [data-scope='date-field'][data-part='clear-trigger']:focus-visible {
251
+ outline: var(--xh-ring-width) solid var(--xh-_date-field-ring);
252
+ outline-offset: var(--xh-ring-offset);
253
+ }
254
+
255
+ /* 没写内容就由皮肤画兜底字形;作者往部件里塞了自己的图形,这条即不命中 */
256
+ [data-scope='date-field'][data-part='clear-trigger']:empty::before {
257
+ content: '';
258
+ display: inline-block;
259
+ inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
260
+ block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
261
+ vertical-align: var(--xh-glyph-baseline-shift);
262
+ background-color: currentColor;
263
+ -webkit-mask: var(--xh-glyph-mark-close) center / contain no-repeat;
264
+ mask: var(--xh-glyph-mark-close) center / contain no-repeat;
265
+ }
266
+
190
267
  /* 连接层把它写成 type=hidden,UA 自己就不渲染;这里的视觉隐藏是给元素升级前那一瞬兜底
191
268
  (作者手写的是一个普通 input,升级完成前它是可见的文本框)。
192
269
  刻意不写 display:写了反而会盖掉 UA 对 type=hidden 的收起,把它显出来 */