niuma-ui 2.0.2 → 2.0.4

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 (242) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +2 -0
  3. package/README.zh-CN.md +2 -0
  4. package/dist/components/_shared/src/reka.d.ts +1 -1
  5. package/dist/components/_shared/src/reka.js +2 -2
  6. package/dist/components/anchor/index.d.ts +1 -1
  7. package/dist/components/anchor/src/RsAnchor.css +63 -32
  8. package/dist/components/anchor/src/RsAnchor.d.ts +29 -2
  9. package/dist/components/anchor/src/RsAnchor.impl.js +199 -81
  10. package/dist/components/anchor/src/RsAnchor.js +1 -1
  11. package/dist/components/anchor/src/anchor-utils.d.ts +36 -4
  12. package/dist/components/anchor/src/anchor-utils.js +81 -19
  13. package/dist/components/auto-complete/index.d.ts +2 -0
  14. package/dist/components/auto-complete/src/RsAutoComplete.css +122 -0
  15. package/dist/components/auto-complete/src/RsAutoComplete.d.ts +47 -7
  16. package/dist/components/auto-complete/src/RsAutoComplete.impl.js +180 -72
  17. package/dist/components/auto-complete/src/RsAutoComplete.js +4 -1
  18. package/dist/components/auto-complete/src/auto-complete-utils.d.ts +7 -0
  19. package/dist/components/auto-complete/src/auto-complete-utils.js +17 -0
  20. package/dist/components/avatar/index.d.ts +1 -0
  21. package/dist/components/avatar/src/RsAvatar.css +36 -19
  22. package/dist/components/avatar/src/RsAvatar.d.ts +9 -3
  23. package/dist/components/avatar/src/RsAvatar.impl.js +57 -33
  24. package/dist/components/avatar/src/RsAvatar.js +2 -1
  25. package/dist/components/avatar/src/avatar-utils.d.ts +16 -7
  26. package/dist/components/avatar/src/avatar-utils.js +41 -3
  27. package/dist/components/badge/index.d.ts +1 -0
  28. package/dist/components/badge/src/RsBadge.css +61 -8
  29. package/dist/components/badge/src/RsBadge.d.ts +19 -3
  30. package/dist/components/badge/src/RsBadge.impl.js +46 -3
  31. package/dist/components/badge/src/RsBadge.js +1 -1
  32. package/dist/components/badge/src/badge-utils.d.ts +11 -0
  33. package/dist/components/badge/src/badge-utils.js +32 -0
  34. package/dist/components/breadcrumb/index.d.ts +1 -1
  35. package/dist/components/breadcrumb/src/RsBreadcrumb.css +50 -17
  36. package/dist/components/breadcrumb/src/RsBreadcrumb.d.ts +45 -6
  37. package/dist/components/breadcrumb/src/RsBreadcrumb.impl.js +111 -12
  38. package/dist/components/breadcrumb/src/RsBreadcrumb.js +2 -1
  39. package/dist/components/breadcrumb/src/breadcrumb-utils.d.ts +37 -5
  40. package/dist/components/breadcrumb/src/breadcrumb-utils.js +70 -9
  41. package/dist/components/button/src/RsButton.css +87 -71
  42. package/dist/components/button/src/RsButton.d.ts +7 -3
  43. package/dist/components/button/src/RsButton.impl.js +43 -31
  44. package/dist/components/button/src/RsButton.js +1 -1
  45. package/dist/components/button/src/button-utils.d.ts +17 -0
  46. package/dist/components/button/src/button-utils.js +14 -1
  47. package/dist/components/calendar-grid/index.d.ts +2 -0
  48. package/dist/components/calendar-grid/src/RsCalendarGrid.css +105 -45
  49. package/dist/components/calendar-grid/src/RsCalendarGrid.d.ts +62 -2
  50. package/dist/components/calendar-grid/src/RsCalendarGrid.impl.js +265 -94
  51. package/dist/components/calendar-grid/src/RsCalendarGrid.js +1 -1
  52. package/dist/components/calendar-grid/src/calendar-grid-utils.d.ts +72 -0
  53. package/dist/components/calendar-grid/src/calendar-grid-utils.js +122 -0
  54. package/dist/components/card/index.d.ts +1 -1
  55. package/dist/components/card/src/RsCard.css +108 -98
  56. package/dist/components/card/src/RsCard.d.ts +3 -12
  57. package/dist/components/card/src/RsCard.impl.js +29 -25
  58. package/dist/components/card/src/RsCard.js +2 -1
  59. package/dist/components/card/src/card-utils.d.ts +25 -0
  60. package/dist/components/card/src/card-utils.js +10 -0
  61. package/dist/components/cascader/index.d.ts +1 -0
  62. package/dist/components/cascader/src/RsCascader.css +175 -30
  63. package/dist/components/cascader/src/RsCascader.d.ts +14 -2
  64. package/dist/components/cascader/src/RsCascader.impl.js +277 -48
  65. package/dist/components/cascader/src/RsCascader.js +1 -1
  66. package/dist/components/cascader/src/cascader-utils.d.ts +2 -0
  67. package/dist/components/cascader/src/cascader-utils.js +8 -1
  68. package/dist/components/checkbox/index.d.ts +1 -0
  69. package/dist/components/checkbox/src/RsCheckbox.css +46 -23
  70. package/dist/components/checkbox/src/RsCheckbox.d.ts +11 -1
  71. package/dist/components/checkbox/src/RsCheckbox.impl.js +37 -9
  72. package/dist/components/checkbox/src/RsCheckbox.js +2 -1
  73. package/dist/components/checkbox/src/checkbox-utils.d.ts +4 -0
  74. package/dist/components/checkbox/src/checkbox-utils.js +12 -0
  75. package/dist/components/container/index.d.ts +1 -1
  76. package/dist/components/container/src/RsContainer.css +11 -11
  77. package/dist/components/container/src/RsContainer.d.ts +2 -12
  78. package/dist/components/container/src/RsContainer.impl.js +10 -57
  79. package/dist/components/container/src/RsContainer.js +1 -1
  80. package/dist/components/container/src/container-utils.d.ts +23 -0
  81. package/dist/components/container/src/container-utils.js +51 -0
  82. package/dist/components/date-picker/index.d.ts +4 -2
  83. package/dist/components/date-picker/src/RsDatePicker.css +42 -22
  84. package/dist/components/date-picker/src/RsDatePicker.d.ts +44 -20
  85. package/dist/components/date-picker/src/RsDatePicker.impl.js +484 -222
  86. package/dist/components/date-picker/src/RsDatePicker.js +1 -3
  87. package/dist/components/date-picker/src/RsDateTimePicker.d.ts +33 -6
  88. package/dist/components/date-picker/src/RsDateTimePicker.impl.js +47 -6
  89. package/dist/components/date-picker/src/date-picker-utils.d.ts +19 -0
  90. package/dist/components/date-picker/src/date-picker-utils.js +33 -10
  91. package/dist/components/divider/index.d.ts +1 -0
  92. package/dist/components/divider/src/RsDivider.css +37 -22
  93. package/dist/components/divider/src/RsDivider.d.ts +4 -2
  94. package/dist/components/divider/src/RsDivider.impl.js +26 -12
  95. package/dist/components/divider/src/RsDivider.js +1 -1
  96. package/dist/components/divider/src/divider-utils.d.ts +4 -0
  97. package/dist/components/dynamic-tags/index.d.ts +1 -1
  98. package/dist/components/dynamic-tags/src/RsDynamicTags.css +115 -38
  99. package/dist/components/dynamic-tags/src/RsDynamicTags.d.ts +59 -18
  100. package/dist/components/dynamic-tags/src/RsDynamicTags.impl.js +269 -106
  101. package/dist/components/dynamic-tags/src/RsDynamicTags.js +1 -1
  102. package/dist/components/dynamic-tags/src/dynamic-tags-utils.d.ts +19 -0
  103. package/dist/components/dynamic-tags/src/dynamic-tags-utils.js +60 -0
  104. package/dist/components/fieldset/src/RsFieldset.css +71 -41
  105. package/dist/components/fieldset/src/RsFieldset.d.ts +21 -2
  106. package/dist/components/fieldset/src/RsFieldset.impl.js +93 -26
  107. package/dist/components/fieldset/src/RsFieldset.js +1 -1
  108. package/dist/components/fieldset/src/fieldset-utils.d.ts +4 -0
  109. package/dist/components/fieldset/src/fieldset-utils.js +9 -1
  110. package/dist/components/form/index.d.ts +1 -0
  111. package/dist/components/form/src/RsForm.css +15 -12
  112. package/dist/components/form/src/RsForm.d.ts +20 -22
  113. package/dist/components/form/src/RsForm.impl.js +33 -20
  114. package/dist/components/form/src/RsForm.js +1 -1
  115. package/dist/components/form/src/form-utils.d.ts +7 -0
  116. package/dist/components/form/src/form-utils.js +28 -1
  117. package/dist/components/icon/src/RsIcon.css +9 -4
  118. package/dist/components/icon/src/RsIcon.d.ts +4 -3
  119. package/dist/components/icon/src/RsIcon.impl.js +9 -32
  120. package/dist/components/icon/src/RsIcon.js +1 -1
  121. package/dist/components/icon/src/icon-utils.d.ts +17 -0
  122. package/dist/components/icon/src/icon-utils.js +39 -0
  123. package/dist/components/input/index.d.ts +1 -1
  124. package/dist/components/input/src/RsInput.css +78 -260
  125. package/dist/components/input/src/RsInput.d.ts +5 -3
  126. package/dist/components/input/src/RsInput.impl.js +8 -16
  127. package/dist/components/input/src/RsInput.js +1 -1
  128. package/dist/components/input/src/input-utils.d.ts +11 -0
  129. package/dist/components/input/src/input-utils.js +22 -0
  130. package/dist/components/input-number/index.d.ts +1 -0
  131. package/dist/components/input-number/src/RsInputNumber.css +31 -31
  132. package/dist/components/input-number/src/RsInputNumber.d.ts +15 -13
  133. package/dist/components/input-number/src/RsInputNumber.impl.js +17 -4
  134. package/dist/components/input-number/src/RsInputNumber.js +1 -1
  135. package/dist/components/label/src/RsLabel.css +30 -11
  136. package/dist/components/label/src/RsLabel.d.ts +18 -1
  137. package/dist/components/label/src/RsLabel.impl.js +63 -10
  138. package/dist/components/label/src/RsLabel.js +1 -1
  139. package/dist/components/label/src/label-utils.d.ts +6 -0
  140. package/dist/components/label/src/label-utils.js +16 -0
  141. package/dist/components/link/index.d.ts +1 -0
  142. package/dist/components/link/src/RsLink.css +58 -17
  143. package/dist/components/link/src/RsLink.d.ts +12 -4
  144. package/dist/components/link/src/RsLink.impl.js +26 -25
  145. package/dist/components/link/src/RsLink.js +2 -1
  146. package/dist/components/link/src/link-utils.d.ts +9 -0
  147. package/dist/components/link/src/link-utils.js +15 -0
  148. package/dist/components/loading/src/RsLoading.d.ts +2 -2
  149. package/dist/components/mentions/index.d.ts +2 -1
  150. package/dist/components/mentions/src/RsMentions.css +119 -3
  151. package/dist/components/mentions/src/RsMentions.d.ts +56 -4
  152. package/dist/components/mentions/src/RsMentions.impl.js +298 -79
  153. package/dist/components/mentions/src/RsMentions.js +1 -3
  154. package/dist/components/mentions/src/mentions-utils.d.ts +5 -1
  155. package/dist/components/mentions/src/mentions-utils.js +28 -9
  156. package/dist/components/popover/src/RsPopover.d.ts +1 -1
  157. package/dist/components/radio/index.d.ts +1 -1
  158. package/dist/components/radio/src/RsRadio.css +7 -6
  159. package/dist/components/radio/src/RsRadio.d.ts +8 -5
  160. package/dist/components/radio/src/RsRadio.impl.js +34 -24
  161. package/dist/components/radio/src/RsRadio.js +2 -1
  162. package/dist/components/radio/src/RsRadioItem.css +61 -44
  163. package/dist/components/radio/src/RsRadioItem.d.ts +2 -2
  164. package/dist/components/radio/src/RsRadioItem.impl.js +53 -20
  165. package/dist/components/radio/src/RsRadioItem.js +2 -1
  166. package/dist/components/radio/src/radio-utils.d.ts +12 -1
  167. package/dist/components/radio/src/radio-utils.js +15 -1
  168. package/dist/components/scrollbar/src/RsScrollbar.css +71 -24
  169. package/dist/components/scrollbar/src/RsScrollbar.d.ts +9 -5
  170. package/dist/components/scrollbar/src/RsScrollbar.impl.js +372 -47
  171. package/dist/components/scrollbar/src/RsScrollbar.js +2 -1
  172. package/dist/components/scrollbar/src/scrollbar-utils.d.ts +34 -2
  173. package/dist/components/scrollbar/src/scrollbar-utils.js +64 -1
  174. package/dist/components/select/index.d.ts +1 -0
  175. package/dist/components/select/src/RsSelect.css +54 -42
  176. package/dist/components/select/src/RsSelect.d.ts +19 -2
  177. package/dist/components/select/src/RsSelect.impl.js +727 -312
  178. package/dist/components/select/src/RsSelect.js +1 -1
  179. package/dist/components/select/src/select-utils.d.ts +4 -2
  180. package/dist/components/select/src/select-utils.js +8 -3
  181. package/dist/components/select/src/use-rs-select.d.ts +1 -0
  182. package/dist/components/select/src/use-rs-select.js +23 -17
  183. package/dist/components/switch/index.d.ts +2 -1
  184. package/dist/components/switch/src/RsSwitch.css +36 -18
  185. package/dist/components/switch/src/RsSwitch.d.ts +18 -5
  186. package/dist/components/switch/src/RsSwitch.impl.js +61 -29
  187. package/dist/components/switch/src/RsSwitch.js +2 -1
  188. package/dist/components/switch/src/switch-utils.d.ts +4 -0
  189. package/dist/components/switch/src/switch-utils.js +9 -0
  190. package/dist/components/tag/index.d.ts +1 -1
  191. package/dist/components/tag/src/RsTag.css +42 -38
  192. package/dist/components/tag/src/RsTag.d.ts +3 -2
  193. package/dist/components/tag/src/RsTag.impl.js +18 -9
  194. package/dist/components/tag/src/RsTag.js +1 -1
  195. package/dist/components/tag/src/tag-utils.d.ts +8 -0
  196. package/dist/components/terminal/src/RsTerminal.d.ts +1 -1
  197. package/dist/components/textarea/src/RsTextarea.css +23 -23
  198. package/dist/components/textarea/src/RsTextarea.d.ts +6 -12
  199. package/dist/components/textarea/src/RsTextarea.impl.js +37 -46
  200. package/dist/components/textarea/src/RsTextarea.js +1 -1
  201. package/dist/components/textarea/src/textarea-utils.d.ts +27 -0
  202. package/dist/components/textarea/src/textarea-utils.js +61 -0
  203. package/dist/components/time-picker/index.d.ts +3 -2
  204. package/dist/components/time-picker/src/RsTimePicker.css +41 -24
  205. package/dist/components/time-picker/src/RsTimePicker.d.ts +52 -7
  206. package/dist/components/time-picker/src/RsTimePicker.impl.js +520 -156
  207. package/dist/components/time-picker/src/RsTimePicker.js +1 -3
  208. package/dist/components/time-picker/src/RsTimePickerColumns.css +26 -18
  209. package/dist/components/time-picker/src/RsTimePickerColumns.d.ts +3 -1
  210. package/dist/components/time-picker/src/RsTimePickerColumns.impl.js +62 -9
  211. package/dist/components/time-picker/src/RsTimePickerColumns.js +1 -1
  212. package/dist/components/time-picker/src/time-picker-utils.d.ts +38 -0
  213. package/dist/components/time-picker/src/time-picker-utils.js +97 -5
  214. package/dist/components/toaster/src/RsToaster.d.ts +1 -1
  215. package/dist/components/tooltip/src/RsTooltip.d.ts +1 -1
  216. package/dist/components/tree/src/RsTree.d.ts +3 -3
  217. package/dist/components/tree-select/index.d.ts +2 -0
  218. package/dist/components/tree-select/src/RsTreeSelect.css +100 -25
  219. package/dist/components/tree-select/src/RsTreeSelect.d.ts +91 -7
  220. package/dist/components/tree-select/src/RsTreeSelect.impl.js +464 -79
  221. package/dist/components/tree-select/src/RsTreeSelect.js +1 -1
  222. package/dist/components/tree-select/src/tree-select-utils.d.ts +20 -0
  223. package/dist/components/tree-select/src/tree-select-utils.js +60 -0
  224. package/dist/components/upload/index.d.ts +2 -1
  225. package/dist/components/upload/src/RsUpload.css +223 -75
  226. package/dist/components/upload/src/RsUpload.d.ts +77 -1
  227. package/dist/components/upload/src/RsUpload.impl.js +404 -90
  228. package/dist/components/upload/src/RsUpload.js +1 -1
  229. package/dist/components/upload/src/upload-utils.d.ts +21 -2
  230. package/dist/components/upload/src/upload-utils.js +139 -9
  231. package/dist/index.d.ts +24 -11
  232. package/dist/index.js +6 -0
  233. package/dist/locale/messages.js +46 -2
  234. package/dist/styles.css +518 -154
  235. package/dist/theme/brand.example.css +1 -1
  236. package/package.json +9 -8
  237. package/dist/components/breadcrumb/src/RsBreadcrumbItems.d.ts +0 -8
  238. package/dist/components/breadcrumb/src/RsBreadcrumbItems.impl.js +0 -40
  239. package/dist/components/breadcrumb/src/RsBreadcrumbItems.js +0 -5
  240. package/dist/components/date-picker/src/RsDatePicker-1.css +0 -157
  241. package/dist/components/mentions/src/RsMentions-1.css +0 -29
  242. package/dist/components/time-picker/src/RsTimePicker-1.css +0 -98
@@ -1,5 +1,5 @@
1
1
 
2
- .rs-btn[data-v-cd44e899] {
2
+ .rs-btn[data-v-423f0a90] {
3
3
  position: relative;
4
4
  display: inline-flex;
5
5
  align-items: center;
@@ -23,124 +23,127 @@
23
23
  padding var(--rs-transition-normal),
24
24
  gap var(--rs-transition-normal);
25
25
  }
26
- .rs-btn--ssm[data-v-cd44e899] {
26
+ .rs-btn--ssm[data-v-423f0a90] {
27
27
  min-height: var(--rs-control-height-ssm);
28
28
  padding: 0 var(--rs-space-xs);
29
29
  font-size: var(--rs-font-size-xs);
30
30
  gap: var(--rs-space-xs);
31
31
  }
32
- .rs-btn--sm[data-v-cd44e899] {
32
+ .rs-btn--sm[data-v-423f0a90] {
33
33
  min-height: var(--rs-control-height-sm);
34
34
  padding: 0 var(--rs-space-sm);
35
35
  font-size: var(--rs-font-size-xs);
36
36
  gap: var(--rs-space-xs);
37
37
  }
38
- .rs-btn--lg[data-v-cd44e899] {
38
+ .rs-btn--lg[data-v-423f0a90] {
39
39
  min-height: var(--rs-control-height-lg);
40
40
  padding: 0 var(--rs-space-xl);
41
41
  font-size: var(--rs-font-size-base);
42
42
  }
43
- .rs-btn[data-v-cd44e899]:disabled {
43
+ .rs-btn[data-v-423f0a90]:disabled {
44
44
  opacity: 0.38;
45
45
  cursor: not-allowed;
46
46
  }
47
- .rs-btn--loading[data-v-cd44e899] {
47
+ .rs-btn--loading[data-v-423f0a90] {
48
48
  pointer-events: none;
49
49
  cursor: wait;
50
50
  transition: none;
51
51
  }
52
52
  /* loading 时不使用 disabled,避免部分浏览器暂停子元素 CSS 动画 */
53
- .rs-btn--loading[data-v-cd44e899]:disabled {
53
+ .rs-btn--loading[data-v-423f0a90]:disabled {
54
54
  opacity: 1;
55
55
  cursor: wait;
56
56
  }
57
- .rs-btn--loading.rs-btn--default[data-v-cd44e899] {
57
+ .rs-btn--loading.rs-btn--default[data-v-423f0a90] {
58
58
  color: var(--rs-text);
59
59
  border-color: var(--rs-border);
60
60
  background: var(--rs-surface);
61
61
  }
62
- .rs-btn--loading.rs-btn--default[data-v-cd44e899]:not(.rs-btn--tone-neutral) {
62
+ .rs-btn--loading.rs-btn--default[data-v-423f0a90]:not(.rs-btn--tone-neutral) {
63
63
  color: var(--rs-btn-tone-on-container);
64
64
  border-color: color-mix(in srgb, var(--rs-btn-tone) 42%, var(--rs-border));
65
65
  background: var(--rs-btn-tone-container);
66
66
  }
67
- .rs-btn--loading.rs-btn--ghost[data-v-cd44e899],
68
- .rs-btn--loading.rs-btn--text[data-v-cd44e899] {
67
+ .rs-btn--loading.rs-btn--ghost[data-v-423f0a90],
68
+ .rs-btn--loading.rs-btn--text[data-v-423f0a90] {
69
69
  color: var(--rs-btn-tone, var(--rs-text));
70
70
  background: var(--rs-surface-hover);
71
71
  }
72
- .rs-btn[data-v-cd44e899]:focus-visible {
72
+ .rs-btn[data-v-423f0a90]:focus-visible {
73
73
  outline: none;
74
74
  box-shadow: 0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
75
75
  }
76
- .rs-btn--icon-only[data-v-cd44e899] {
76
+ .rs-btn--icon-only[data-v-423f0a90] {
77
77
  padding: 0;
78
78
  min-width: var(--rs-control-height-md);
79
79
  }
80
- .rs-btn--icon-only.rs-btn--ssm[data-v-cd44e899] {
80
+ .rs-btn--icon-only.rs-btn--ssm[data-v-423f0a90] {
81
81
  min-width: var(--rs-control-height-ssm);
82
82
  }
83
- .rs-btn--icon-only.rs-btn--sm[data-v-cd44e899] {
83
+ .rs-btn--icon-only.rs-btn--sm[data-v-423f0a90] {
84
84
  min-width: var(--rs-control-height-sm);
85
85
  }
86
- .rs-btn--icon-only.rs-btn--lg[data-v-cd44e899] {
86
+ .rs-btn--icon-only.rs-btn--lg[data-v-423f0a90] {
87
87
  min-width: var(--rs-control-height-lg);
88
88
  }
89
- .rs-btn--primary[data-v-cd44e899] {
89
+ .rs-btn--primary[data-v-423f0a90] {
90
90
  background: var(--rs-primary);
91
91
  color: var(--rs-primary-foreground);
92
92
  box-shadow: var(--rs-shadow-sm);
93
93
  }
94
- .rs-btn--primary[data-v-cd44e899]:hover:not(:disabled) {
94
+ .rs-btn--primary[data-v-423f0a90]:hover:not(:disabled) {
95
95
  background: var(--rs-primary-hover);
96
96
  box-shadow: var(--rs-shadow);
97
97
  }
98
- .rs-btn--primary[data-v-cd44e899]:active:not(:disabled) {
98
+ .rs-btn--primary[data-v-423f0a90]:active:not(:disabled) {
99
99
  box-shadow: none;
100
100
  }
101
- .rs-btn--default[data-v-cd44e899] {
101
+ .rs-btn--default[data-v-423f0a90] {
102
102
  border: 1px solid var(--rs-btn-outline-border, var(--rs-border));
103
103
  background: var(--rs-btn-secondary-bg, var(--rs-surface-hover));
104
104
  color: var(--rs-text);
105
105
  box-shadow: none;
106
106
  }
107
- .rs-btn--default[data-v-cd44e899]:hover:not(:disabled) {
107
+ .rs-btn--default[data-v-423f0a90]:hover:not(:disabled) {
108
108
  color: var(--rs-primary);
109
109
  border-color: var(--rs-primary);
110
110
  background: var(--rs-btn-secondary-bg-hover, var(--rs-primary-container));
111
111
  }
112
- .rs-btn--default[data-v-cd44e899]:active:not(:disabled) {
112
+ .rs-btn--default[data-v-423f0a90]:active:not(:disabled) {
113
113
  color: var(--rs-primary-hover);
114
114
  border-color: var(--rs-primary-hover);
115
115
  background: var(--rs-btn-secondary-bg-active, var(--rs-primary-container));
116
116
  }
117
- .rs-btn--ghost[data-v-cd44e899] {
117
+ .rs-btn--ghost[data-v-423f0a90] {
118
118
  background: transparent;
119
119
  border: 1px solid var(--rs-btn-outline-border, var(--rs-border));
120
120
  color: var(--rs-btn-tone, var(--rs-text));
121
121
  }
122
- .rs-btn--ghost[data-v-cd44e899]:hover:not(:disabled) {
123
- background: color-mix(in srgb, var(--rs-btn-tone, var(--rs-text)) 8%, transparent);
122
+ .rs-btn--ghost[data-v-423f0a90]:hover:not(:disabled) {
123
+ background: var(--rs-surface-hover);
124
124
  border-color: var(--rs-btn-outline-border, var(--rs-border));
125
125
  color: var(--rs-btn-tone-hover, var(--rs-btn-tone, var(--rs-text)));
126
126
  }
127
- .rs-btn--borderless[data-v-cd44e899],
128
- .rs-btn--borderless[data-v-cd44e899]:hover:not(:disabled),
129
- .rs-btn--borderless[data-v-cd44e899]:active:not(:disabled) {
127
+ .rs-btn--ghost[data-v-423f0a90]:active:not(:disabled) {
128
+ background: color-mix(in srgb, var(--rs-btn-tone, var(--rs-text)) 12%, var(--rs-surface-hover));
129
+ }
130
+ .rs-btn--borderless[data-v-423f0a90],
131
+ .rs-btn--borderless[data-v-423f0a90]:hover:not(:disabled),
132
+ .rs-btn--borderless[data-v-423f0a90]:active:not(:disabled) {
130
133
  border-color: transparent;
131
134
  }
132
- .rs-btn--danger[data-v-cd44e899] {
135
+ .rs-btn--danger[data-v-423f0a90] {
133
136
  background: var(--rs-danger-container);
134
137
  border-color: color-mix(in srgb, var(--rs-danger) 30%, transparent);
135
138
  color: var(--rs-on-danger-container);
136
139
  }
137
- .rs-btn--danger[data-v-cd44e899]:hover:not(:disabled) {
140
+ .rs-btn--danger[data-v-423f0a90]:hover:not(:disabled) {
138
141
  border-color: var(--rs-danger);
139
142
  background: color-mix(in srgb, var(--rs-danger) 20%, var(--rs-danger-container));
140
143
  }
141
144
 
142
145
  /* 行内链接:可下划线;色调由 tone 控制(默认 primary) */
143
- .rs-btn--link[data-v-cd44e899] {
146
+ .rs-btn--link[data-v-423f0a90] {
144
147
  min-height: auto;
145
148
  padding: 0;
146
149
  border-color: transparent;
@@ -150,7 +153,7 @@
150
153
  box-shadow: none;
151
154
  font-weight: var(--rs-font-weight-medium);
152
155
  }
153
- .rs-btn--link[data-v-cd44e899]:hover:not(:disabled) {
156
+ .rs-btn--link[data-v-423f0a90]:hover:not(:disabled) {
154
157
  color: var(--rs-btn-tone-hover, var(--rs-primary-hover));
155
158
  text-decoration: underline;
156
159
  }
@@ -159,7 +162,7 @@
159
162
  * text:工具栏 / 表格操作 quaternary
160
163
  * 无底无边,靠 tone 着色;hover 使用同色浅底
161
164
  */
162
- .rs-btn--text[data-v-cd44e899] {
165
+ .rs-btn--text[data-v-423f0a90] {
163
166
  min-height: var(--rs-control-height-sm);
164
167
  padding: 0 var(--rs-space-sm);
165
168
  border-color: transparent;
@@ -168,103 +171,105 @@
168
171
  font-weight: var(--rs-font-weight-regular);
169
172
  color: var(--rs-btn-tone, var(--rs-text));
170
173
  }
171
- .rs-btn--text.rs-btn--ssm[data-v-cd44e899] {
174
+ .rs-btn--text.rs-btn--ssm[data-v-423f0a90] {
172
175
  min-height: var(--rs-control-height-ssm);
173
176
  }
174
- .rs-btn--text.rs-btn--md[data-v-cd44e899] {
177
+ .rs-btn--text.rs-btn--md[data-v-423f0a90] {
175
178
  min-height: var(--rs-control-height-md);
176
179
  }
177
- .rs-btn--text.rs-btn--lg[data-v-cd44e899] {
180
+ .rs-btn--text.rs-btn--lg[data-v-423f0a90] {
178
181
  min-height: var(--rs-control-height-lg);
179
182
  }
180
- .rs-btn--text[data-v-cd44e899]:hover:not(:disabled) {
183
+ .rs-btn--text[data-v-423f0a90]:hover:not(:disabled) {
181
184
  background: color-mix(in srgb, var(--rs-btn-tone, var(--rs-text)) 8%, transparent);
182
185
  border-color: transparent;
183
186
  color: var(--rs-btn-tone-hover, var(--rs-btn-tone, var(--rs-text)));
184
187
  }
185
- .rs-btn--text[data-v-cd44e899]:active:not(:disabled) {
188
+ .rs-btn--text[data-v-423f0a90]:active:not(:disabled) {
186
189
  background: color-mix(in srgb, var(--rs-btn-tone, var(--rs-text)) 12%, transparent);
187
190
  }
188
191
 
189
192
  /* tone:色相 token,供所有变体消费(形态 × 色相) */
190
- .rs-btn--tone-neutral[data-v-cd44e899] {
193
+ .rs-btn--tone-neutral[data-v-423f0a90] {
191
194
  --rs-btn-tone: var(--rs-text);
192
195
  --rs-btn-tone-hover: var(--rs-text);
193
196
  --rs-btn-tone-fg: var(--rs-text);
194
197
  --rs-btn-tone-container: var(--rs-btn-secondary-bg, var(--rs-surface-hover));
195
198
  --rs-btn-tone-on-container: var(--rs-text);
196
199
  }
197
- .rs-btn--tone-primary[data-v-cd44e899] {
200
+ .rs-btn--tone-primary[data-v-423f0a90] {
198
201
  --rs-btn-tone: var(--rs-primary);
199
202
  --rs-btn-tone-hover: var(--rs-primary-hover);
200
203
  --rs-btn-tone-fg: var(--rs-primary-foreground);
201
204
  --rs-btn-tone-container: var(--rs-primary-container);
202
205
  --rs-btn-tone-on-container: var(--rs-on-primary-container);
203
206
  }
204
- .rs-btn--tone-danger[data-v-cd44e899] {
207
+ .rs-btn--tone-danger[data-v-423f0a90] {
205
208
  --rs-btn-tone: var(--rs-danger);
206
209
  --rs-btn-tone-hover: var(--rs-danger);
207
- --rs-btn-tone-fg: #fff;
210
+ --rs-btn-tone-fg: var(--rs-text-inverse);
208
211
  --rs-btn-tone-container: var(--rs-danger-container);
209
212
  --rs-btn-tone-on-container: var(--rs-on-danger-container);
210
213
  }
211
- .rs-btn--tone-success[data-v-cd44e899] {
214
+ .rs-btn--tone-success[data-v-423f0a90] {
212
215
  --rs-btn-tone: var(--rs-success, #18a058);
213
216
  --rs-btn-tone-hover: var(--rs-success, #18a058);
214
- --rs-btn-tone-fg: #fff;
217
+ --rs-btn-tone-fg: var(--rs-text-inverse);
215
218
  --rs-btn-tone-container: var(--rs-success-container, color-mix(in srgb, var(--rs-success, #18a058) 14%, var(--rs-surface)));
216
219
  --rs-btn-tone-on-container: var(--rs-on-success-container, var(--rs-success, #18a058));
217
220
  }
218
- .rs-btn--tone-warning[data-v-cd44e899] {
221
+ .rs-btn--tone-warning[data-v-423f0a90] {
219
222
  --rs-btn-tone: var(--rs-warning, #f0a020);
220
223
  --rs-btn-tone-hover: var(--rs-warning, #f0a020);
221
- --rs-btn-tone-fg: #fff;
224
+ --rs-btn-tone-fg: var(--rs-text-inverse);
222
225
  --rs-btn-tone-container: var(--rs-warning-container, color-mix(in srgb, var(--rs-warning, #f0a020) 14%, var(--rs-surface)));
223
226
  --rs-btn-tone-on-container: var(--rs-on-warning-container, var(--rs-warning, #f0a020));
224
227
  }
225
- .rs-btn--tone-info[data-v-cd44e899] {
228
+ .rs-btn--tone-info[data-v-423f0a90] {
226
229
  --rs-btn-tone: var(--rs-info, #2080f0);
227
230
  --rs-btn-tone-hover: var(--rs-info, #2080f0);
228
- --rs-btn-tone-fg: #fff;
231
+ --rs-btn-tone-fg: var(--rs-text-inverse);
229
232
  --rs-btn-tone-container: var(--rs-info-container, color-mix(in srgb, var(--rs-info, #2080f0) 14%, var(--rs-surface)));
230
233
  --rs-btn-tone-on-container: var(--rs-on-info-container, var(--rs-info, #2080f0));
231
234
  }
232
235
 
233
236
  /* default + 语义色:轮廓 + 浅底(Ant outlined / Element plain) */
234
- .rs-btn--default[data-v-cd44e899]:not(.rs-btn--tone-neutral) {
237
+ .rs-btn--default[data-v-423f0a90]:not(.rs-btn--tone-neutral) {
235
238
  color: var(--rs-btn-tone-on-container);
236
239
  border-color: color-mix(in srgb, var(--rs-btn-tone) 42%, var(--rs-border));
237
240
  background: var(--rs-btn-tone-container);
238
241
  }
239
- .rs-btn--default[data-v-cd44e899]:not(.rs-btn--tone-neutral):hover:not(:disabled) {
242
+ .rs-btn--default[data-v-423f0a90]:not(.rs-btn--tone-neutral):hover:not(:disabled) {
240
243
  color: var(--rs-btn-tone);
241
244
  border-color: var(--rs-btn-tone);
242
245
  background: color-mix(in srgb, var(--rs-btn-tone) 14%, var(--rs-btn-tone-container));
243
246
  }
244
- .rs-btn--default[data-v-cd44e899]:not(.rs-btn--tone-neutral):active:not(:disabled) {
247
+ .rs-btn--default[data-v-423f0a90]:not(.rs-btn--tone-neutral):active:not(:disabled) {
245
248
  color: var(--rs-btn-tone-hover);
246
249
  border-color: var(--rs-btn-tone-hover);
247
250
  background: color-mix(in srgb, var(--rs-btn-tone) 20%, var(--rs-btn-tone-container));
248
251
  }
249
252
 
250
253
  /* primary + 非主色:实心语义色 */
251
- .rs-btn--primary[data-v-cd44e899]:not(.rs-btn--tone-primary) {
254
+ .rs-btn--primary[data-v-423f0a90]:not(.rs-btn--tone-primary) {
252
255
  background: var(--rs-btn-tone);
253
256
  color: var(--rs-btn-tone-fg);
254
257
  border-color: transparent;
255
258
  }
256
- .rs-btn--primary[data-v-cd44e899]:not(.rs-btn--tone-primary):hover:not(:disabled) {
259
+ .rs-btn--primary[data-v-423f0a90]:not(.rs-btn--tone-primary):hover:not(:disabled) {
257
260
  background: var(--rs-btn-tone-hover);
258
261
  }
259
262
 
260
263
  /* ghost + 语义色:描边跟色相 */
261
- .rs-btn--ghost[data-v-cd44e899]:not(.rs-btn--tone-neutral) {
264
+ .rs-btn--ghost[data-v-423f0a90]:not(.rs-btn--tone-neutral) {
262
265
  border-color: color-mix(in srgb, var(--rs-btn-tone) 45%, var(--rs-border));
263
266
  }
264
- .rs-btn--ghost[data-v-cd44e899]:not(.rs-btn--tone-neutral):hover:not(:disabled) {
267
+ .rs-btn--ghost[data-v-423f0a90]:not(.rs-btn--tone-neutral):hover:not(:disabled) {
265
268
  border-color: var(--rs-btn-tone);
269
+ background: color-mix(in srgb, var(--rs-btn-tone) 14%, var(--rs-surface));
270
+ color: var(--rs-btn-tone);
266
271
  }
267
- .rs-btn__spinner[data-v-cd44e899] {
272
+ .rs-btn__spinner[data-v-423f0a90] {
268
273
  display: inline-flex;
269
274
  align-items: center;
270
275
  justify-content: center;
@@ -273,7 +278,7 @@
273
278
  flex-shrink: 0;
274
279
  pointer-events: none;
275
280
  }
276
- .rs-btn__spinner-ring[data-v-cd44e899] {
281
+ .rs-btn__spinner-ring[data-v-423f0a90] {
277
282
  display: block;
278
283
  width: 100%;
279
284
  height: 100%;
@@ -281,27 +286,27 @@
281
286
  border-top-color: var(--rs-primary);
282
287
  border-radius: var(--rs-radius-full);
283
288
  transform-origin: center center;
284
- animation: rs-spin-cd44e899 0.75s linear infinite;
289
+ animation: rs-spin-423f0a90 0.75s linear infinite;
285
290
  }
286
- .rs-btn--default .rs-btn__spinner-ring[data-v-cd44e899],
287
- .rs-btn--ghost .rs-btn__spinner-ring[data-v-cd44e899] {
291
+ .rs-btn--default .rs-btn__spinner-ring[data-v-423f0a90],
292
+ .rs-btn--ghost .rs-btn__spinner-ring[data-v-423f0a90] {
288
293
  border-color: color-mix(in srgb, var(--rs-btn-tone, var(--rs-primary)) 28%, transparent);
289
294
  border-top-color: var(--rs-btn-tone, var(--rs-primary));
290
295
  }
291
- .rs-btn--text .rs-btn__spinner-ring[data-v-cd44e899],
292
- .rs-btn--link .rs-btn__spinner-ring[data-v-cd44e899] {
296
+ .rs-btn--text .rs-btn__spinner-ring[data-v-423f0a90],
297
+ .rs-btn--link .rs-btn__spinner-ring[data-v-423f0a90] {
293
298
  border-color: color-mix(in srgb, var(--rs-btn-tone, var(--rs-primary)) 28%, transparent);
294
299
  border-top-color: var(--rs-btn-tone, var(--rs-primary));
295
300
  }
296
- .rs-btn--primary .rs-btn__spinner-ring[data-v-cd44e899] {
301
+ .rs-btn--primary .rs-btn__spinner-ring[data-v-423f0a90] {
297
302
  border-color: color-mix(in srgb, currentcolor 35%, transparent);
298
303
  border-top-color: currentcolor;
299
304
  }
300
- .rs-btn--danger .rs-btn__spinner-ring[data-v-cd44e899] {
305
+ .rs-btn--danger .rs-btn__spinner-ring[data-v-423f0a90] {
301
306
  border-color: color-mix(in srgb, var(--rs-danger) 28%, transparent);
302
307
  border-top-color: var(--rs-danger);
303
308
  }
304
- .rs-btn__icon[data-v-cd44e899] {
309
+ .rs-btn__icon[data-v-423f0a90] {
305
310
  display: inline-flex;
306
311
  flex-shrink: 0;
307
312
  align-items: center;
@@ -310,7 +315,7 @@
310
315
  color: inherit;
311
316
  }
312
317
  /* 插槽内自定义图标+文案时也能水平对齐 */
313
- .rs-btn__label[data-v-cd44e899] {
318
+ .rs-btn__label[data-v-423f0a90] {
314
319
  display: inline-flex;
315
320
  align-items: center;
316
321
  gap: inherit;
@@ -318,7 +323,7 @@
318
323
  line-height: 1;
319
324
  white-space: nowrap;
320
325
  }
321
- .rs-btn__label--reveal[data-v-cd44e899] {
326
+ .rs-btn__label--reveal[data-v-423f0a90] {
322
327
  display: inline-block;
323
328
  max-width: 0;
324
329
  opacity: 0;
@@ -329,13 +334,14 @@
329
334
  max-width 0.2s ease,
330
335
  opacity 0.15s ease;
331
336
  }
332
- .rs-btn--reveal-label:hover:not(:disabled) .rs-btn__label--reveal[data-v-cd44e899],
333
- .rs-btn--reveal-label:focus-visible .rs-btn__label--reveal[data-v-cd44e899] {
337
+ .rs-btn--reveal-label:hover:not(:disabled) .rs-btn__label--reveal[data-v-423f0a90],
338
+ .rs-btn--reveal-label:focus-visible .rs-btn__label--reveal[data-v-423f0a90] {
334
339
  max-width: 12rem;
335
340
  opacity: 1;
336
341
  }
337
- .rs-btn__tooltip[data-v-cd44e899] {
342
+ .rs-btn__tooltip[data-v-423f0a90] {
338
343
  position: fixed;
344
+ /* Portal 挂 body,必须高于 Dialog/Drawer(100/101),与 RsTooltip 同一档 */
339
345
  z-index: calc(var(--rs-z-modal) + 2);
340
346
  padding: 0.25rem 0.5rem;
341
347
  border-radius: var(--rs-radius-sm);
@@ -349,8 +355,18 @@
349
355
  box-shadow: var(--rs-shadow-sm);
350
356
  pointer-events: none;
351
357
  }
352
- @keyframes rs-spin-cd44e899 {
358
+ @keyframes rs-spin-423f0a90 {
353
359
  to {
354
360
  transform: rotate(360deg);
355
361
  }
356
362
  }
363
+ @media (prefers-reduced-motion: reduce) {
364
+ .rs-btn[data-v-423f0a90],
365
+ .rs-btn__label--reveal[data-v-423f0a90] {
366
+ transition: none;
367
+ }
368
+ .rs-btn__spinner-ring[data-v-423f0a90] {
369
+ animation: none;
370
+ border-top-color: transparent;
371
+ }
372
+ }
@@ -15,7 +15,10 @@ type __VLS_Props = {
15
15
  type?: 'button' | 'submit' | 'reset';
16
16
  disabled?: boolean;
17
17
  loading?: boolean;
18
- /** 是否显示外边框;text 变体默认无边框 */
18
+ /**
19
+ * 是否显示外边框。未传时 text / link 无边,其余有边。
20
+ * 默认必须是 undefined:Vue 会把未传的 Boolean 收成 false。
21
+ */
19
22
  bordered?: boolean;
20
23
  /** 前缀图标(Lucide kebab-case 名称) */
21
24
  icon?: string;
@@ -23,8 +26,8 @@ type __VLS_Props = {
23
26
  /** 仅显示图标,文字通过 tooltip / slot 悬浮展示 */
24
27
  iconOnly?: boolean;
25
28
  /**
26
- * 悬浮提示。打开时 Teleport 到 `document.body`(对齐 WAI-ARIA APG Tooltip / Reka Portal)。
27
- * 仅图标按钮时作可视提示;无障碍名称仍走 `aria-label`,避免与 tip 重复朗读。
29
+ * 悬浮提示。Teleport 到 `document.body`,避免被 overflow 裁切。
30
+ * 仅图标时作可视提示;可访问名称走 `aria-label`,避免读两遍。
28
31
  */
29
32
  tooltip?: string;
30
33
  /** icon-only 时无障碍标签(与 tooltip 二选一,避免与外部 RsTooltip 重复) */
@@ -43,6 +46,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
43
46
  variant: RsButtonVariant;
44
47
  disabled: boolean;
45
48
  loading: boolean;
49
+ bordered: boolean;
46
50
  iconOnly: boolean;
47
51
  revealLabel: boolean;
48
52
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -1,6 +1,6 @@
1
1
  import { RS_COMPONENT_SIZE_ICON_PX } from "../../../theme/types.js";
2
2
  import RsIcon_default from "../../icon/src/RsIcon.js";
3
- import { resolveRsButtonTone, resolveRsButtonVariant } from "./button-utils.js";
3
+ import { placeRsButtonTip, resolveRsButtonTone, resolveRsButtonVariant } from "./button-utils.js";
4
4
  import { useResolvedRsComponentSize } from "../../_shared/src/resolve-size.js";
5
5
  import { rsRadiusCss, useResolvedRsRadius } from "../../_shared/src/resolve-radius.js";
6
6
  import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, nextTick, normalizeClass, normalizeStyle, onUnmounted, openBlock, ref, renderSlot, toDisplayString, unref, useId, useSlots, watch } from "vue";
@@ -21,6 +21,7 @@ var _hoisted_2 = {
21
21
  var _hoisted_3 = ["id"];
22
22
  var TOOLTIP_DELAY_MS = 300;
23
23
  var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
24
+ name: "RsButton",
24
25
  __name: "RsButton",
25
26
  props: {
26
27
  variant: { default: "primary" },
@@ -36,7 +37,10 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
36
37
  type: Boolean,
37
38
  default: false
38
39
  },
39
- bordered: { type: Boolean },
40
+ bordered: {
41
+ type: Boolean,
42
+ default: void 0
43
+ },
40
44
  icon: {},
41
45
  iconSize: {},
42
46
  iconOnly: {
@@ -82,8 +86,9 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
82
86
  if (!props.iconOnly) return void 0;
83
87
  return props.ariaLabel || props.tooltip || void 0;
84
88
  });
85
- /** 与 RsTooltipProvider 默认一致:避免路过按钮时闪一下 */
89
+ /** 避免路过按钮时闪一下 */
86
90
  const tipId = useId();
91
+ const tipRef = ref(null);
87
92
  const tipOpen = ref(false);
88
93
  const tipStyle = ref({});
89
94
  let openTimer = null;
@@ -97,24 +102,24 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
97
102
  }
98
103
  function updateTipPosition() {
99
104
  const el = btnRef.value;
100
- if (!el) return;
105
+ if (!el || typeof window === "undefined") return;
101
106
  const rect = el.getBoundingClientRect();
102
- const mid = rect.left + rect.width / 2;
103
- const vw = window.innerWidth;
104
- const gap = 6;
105
- let left = mid;
106
- let transform = "translateX(-50%)";
107
- if (mid > vw * .72) {
108
- left = rect.right;
109
- transform = "translateX(-100%)";
110
- } else if (mid < vw * .28) {
111
- left = rect.left;
112
- transform = "none";
113
- }
107
+ const tip = tipRef.value?.getBoundingClientRect();
108
+ const box = placeRsButtonTip({
109
+ top: rect.top,
110
+ left: rect.left,
111
+ width: rect.width,
112
+ height: rect.height
113
+ }, {
114
+ width: tip?.width ?? 96,
115
+ height: tip?.height ?? 28
116
+ }, {
117
+ width: window.innerWidth,
118
+ height: window.innerHeight
119
+ });
114
120
  tipStyle.value = {
115
- top: `${Math.round(rect.bottom + gap)}px`,
116
- left: `${Math.round(left)}px`,
117
- transform
121
+ top: `${box.top}px`,
122
+ left: `${box.left}px`
118
123
  };
119
124
  }
120
125
  function scheduleTipPosition() {
@@ -148,11 +153,16 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
148
153
  }
149
154
  function openTipNow() {
150
155
  if (!showFloatingText.value || props.disabled || props.loading) return;
151
- updateTipPosition();
152
156
  if (!tipOpen.value) {
153
157
  tipOpen.value = true;
154
158
  bindTipFollow(true);
155
159
  }
160
+ nextTick(() => updateTipPosition());
161
+ }
162
+ function onActivate(event) {
163
+ if (!props.loading) return;
164
+ event.preventDefault();
165
+ event.stopImmediatePropagation();
156
166
  }
157
167
  function scheduleOpenTip() {
158
168
  if (!showFloatingText.value || props.disabled || props.loading) return;
@@ -181,8 +191,9 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
181
191
  if (!el) return;
182
192
  if (loading) {
183
193
  await nextTick();
184
- const w = el.offsetWidth;
185
- if (w > 0) el.style.minWidth = `${w}px`;
194
+ if (!btnRef.value) return;
195
+ const w = btnRef.value.offsetWidth;
196
+ if (w > 0) btnRef.value.style.minWidth = `${w}px`;
186
197
  } else el.style.minWidth = "";
187
198
  });
188
199
  onUnmounted(() => {
@@ -200,6 +211,7 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
200
211
  "aria-disabled": __props.disabled || __props.loading || void 0,
201
212
  "aria-label": ariaLabel.value,
202
213
  "aria-describedby": tipDescribedBy.value,
214
+ onClickCapture: onActivate,
203
215
  onMouseenter: scheduleOpenTip,
204
216
  onMouseleave: closeTip,
205
217
  onFocus,
@@ -210,24 +222,24 @@ var RsButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
210
222
  key: 1,
211
223
  class: "rs-btn__icon",
212
224
  name: __props.icon,
213
- size: resolvedIconSize.value,
214
- label: __props.iconOnly && __props.tooltip ? __props.tooltip : void 0
215
- }, null, 8, [
216
- "name",
217
- "size",
218
- "label"
219
- ])) : createCommentVNode("", true),
225
+ size: resolvedIconSize.value
226
+ }, null, 8, ["name", "size"])) : createCommentVNode("", true),
220
227
  hasLabel.value && !__props.iconOnly ? (openBlock(), createElementBlock("span", {
221
228
  key: 2,
222
229
  class: normalizeClass(["rs-btn__label", { "rs-btn__label--reveal": __props.revealLabel && __props.icon }])
223
230
  }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 2)) : createCommentVNode("", true),
224
- (openBlock(), createBlock(Teleport, { to: "body" }, [tipOpen.value ? (openBlock(), createElementBlock("span", {
231
+ showFloatingText.value ? (openBlock(), createBlock(Teleport, {
232
+ key: 3,
233
+ to: "body"
234
+ }, [tipOpen.value ? (openBlock(), createElementBlock("span", {
225
235
  key: 0,
236
+ ref_key: "tipRef",
237
+ ref: tipRef,
226
238
  id: unref(tipId),
227
239
  class: "rs-btn__tooltip",
228
240
  style: normalizeStyle(tipStyle.value),
229
241
  role: "tooltip"
230
- }, [__props.tooltip ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(__props.tooltip), 1)], 64)) : __props.iconOnly ? renderSlot(_ctx.$slots, "default", {}, void 0, true, 1) : createCommentVNode("", true)], 12, _hoisted_3)) : createCommentVNode("", true)]))
242
+ }, [__props.tooltip ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(__props.tooltip), 1)], 64)) : __props.iconOnly ? renderSlot(_ctx.$slots, "default", {}, void 0, true, 1) : createCommentVNode("", true)], 12, _hoisted_3)) : createCommentVNode("", true)])) : createCommentVNode("", true)
231
243
  ], 46, _hoisted_1);
232
244
  };
233
245
  }
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
3
3
  import RsButton_vue_vue_type_script_setup_true_lang_default from "./RsButton.impl.js";
4
4
 
5
5
  //#region src/components/button/src/RsButton.vue
6
- var RsButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsButton_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-cd44e899"]]);
6
+ var RsButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsButton_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-423f0a90"]]);
7
7
  //#endregion
8
8
  export { RsButton_default as default };
@@ -24,3 +24,20 @@ export declare function resolveRsButtonTone(variant?: RsButtonVariant, tone?: Rs
24
24
  export declare function isRsButtonFilledVariant(variant: RsButtonVariant): boolean;
25
25
  /** 所有变体都可叠加 tone(形态 × 色相)。 */
26
26
  export declare function supportsRsButtonTone(_variant?: RsButtonVariant): boolean;
27
+ export interface RsButtonTipBox {
28
+ top: number;
29
+ left: number;
30
+ }
31
+ /** 把内置 tip 贴到按钮:优先下方,贴边时夹进视口。供测试与 SSR 无 window 调用。 */
32
+ export declare function placeRsButtonTip(anchor: {
33
+ top: number;
34
+ left: number;
35
+ width: number;
36
+ height: number;
37
+ }, popup: {
38
+ width: number;
39
+ height: number;
40
+ }, viewport: {
41
+ width: number;
42
+ height: number;
43
+ }, gap?: number): RsButtonTipBox;
@@ -24,5 +24,18 @@ function isRsButtonFilledVariant(variant) {
24
24
  function supportsRsButtonTone(_variant) {
25
25
  return true;
26
26
  }
27
+ /** 把内置 tip 贴到按钮:优先下方,贴边时夹进视口。供测试与 SSR 无 window 调用。 */
28
+ function placeRsButtonTip(anchor, popup, viewport, gap = 6) {
29
+ const below = anchor.top + anchor.height + gap;
30
+ const above = anchor.top - popup.height - gap;
31
+ const top = below + popup.height <= viewport.height || above < gap ? below : Math.max(gap, above);
32
+ const width = Math.min(popup.width, Math.max(0, viewport.width - gap * 2));
33
+ const preferred = anchor.left + anchor.width / 2 - width / 2;
34
+ const maxLeft = Math.max(gap, viewport.width - width - gap);
35
+ return {
36
+ top: Math.round(top),
37
+ left: Math.round(Math.min(Math.max(gap, preferred), maxLeft))
38
+ };
39
+ }
27
40
  //#endregion
28
- export { isRsButtonFilledVariant, resolveRsButtonTone, resolveRsButtonVariant, supportsRsButtonTone };
41
+ export { isRsButtonFilledVariant, placeRsButtonTip, resolveRsButtonTone, resolveRsButtonVariant, supportsRsButtonTone };
@@ -1 +1,3 @@
1
1
  export { default as RsCalendarGrid } from './src/RsCalendarGrid.js';
2
+ export type { RsCalendarGridExpose, RsCalendarGridInstance, } from './src/RsCalendarGrid.js';
3
+ export type { RsCalendarCell, RsCalendarGridCellSlot, } from './src/calendar-grid-utils';