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
@@ -0,0 +1,122 @@
1
+
2
+ .rs-auto-complete[data-v-a95db999] {
3
+ position: relative;
4
+ display: inline-flex;
5
+ align-items: center;
6
+ width: 100%;
7
+ max-width: 100%;
8
+ box-sizing: border-box;
9
+ vertical-align: middle;
10
+ color-scheme: inherit;
11
+ }
12
+ .rs-auto-complete__input[data-v-a95db999] {
13
+ box-sizing: border-box;
14
+ width: 100%;
15
+ height: var(--rs-control-height-md);
16
+ padding: 0 var(--rs-space-md);
17
+ border: 1px solid var(--rs-input-border, var(--rs-border));
18
+ border-radius: var(--rs-select-radius, var(--rs-radius-sm));
19
+ background: var(--rs-input-bg);
20
+ color: var(--rs-text);
21
+ font-family: inherit;
22
+ font-size: var(--rs-font-size-sm);
23
+ line-height: var(--rs-line-height-tight);
24
+ outline: none;
25
+ box-shadow: var(--rs-input-shadow, none);
26
+ transition:
27
+ border-color var(--rs-transition-fast),
28
+ box-shadow var(--rs-transition-fast),
29
+ background var(--rs-transition-fast);
30
+ }
31
+ .rs-auto-complete--ssm .rs-auto-complete__input[data-v-a95db999] {
32
+ height: var(--rs-control-height-ssm);
33
+ padding: 0 var(--rs-space-sm);
34
+ font-size: var(--rs-font-size-xs);
35
+ }
36
+ .rs-auto-complete--sm .rs-auto-complete__input[data-v-a95db999] {
37
+ height: var(--rs-control-height-sm);
38
+ padding: 0 var(--rs-space-sm);
39
+ font-size: var(--rs-font-size-xs);
40
+ }
41
+ .rs-auto-complete--lg .rs-auto-complete__input[data-v-a95db999] {
42
+ height: var(--rs-control-height-lg);
43
+ padding: 0 var(--rs-space-lg);
44
+ font-size: var(--rs-font-size-base);
45
+ }
46
+ .rs-auto-complete--clearable .rs-auto-complete__input[data-v-a95db999] {
47
+ padding-inline-end: calc(var(--rs-space-md) + 1.25rem);
48
+ }
49
+ .rs-auto-complete__input[data-v-a95db999]::placeholder {
50
+ color: var(--rs-placeholder);
51
+ }
52
+ .rs-auto-complete__input[data-v-a95db999]:hover:not(:disabled) {
53
+ border-color: var(--rs-input-border-hover, var(--rs-border));
54
+ }
55
+ .rs-auto-complete__input[data-v-a95db999]:focus {
56
+ border-color: var(--rs-focus-border, var(--rs-primary));
57
+ background: var(--rs-input-bg);
58
+ box-shadow:
59
+ var(--rs-input-shadow, none),
60
+ 0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
61
+ }
62
+ .rs-auto-complete__input[data-v-a95db999]:disabled {
63
+ opacity: 0.38;
64
+ cursor: not-allowed;
65
+ background: var(--rs-surface-hover);
66
+ }
67
+ .rs-auto-complete__clear[data-v-a95db999] {
68
+ position: absolute;
69
+ top: 50%;
70
+ inset-inline-end: var(--rs-space-sm);
71
+ display: inline-flex;
72
+ align-items: center;
73
+ justify-content: center;
74
+ width: 1.25rem;
75
+ height: 1.25rem;
76
+ padding: 0;
77
+ border: 0;
78
+ border-radius: var(--rs-radius-xs);
79
+ background: transparent;
80
+ color: var(--rs-muted);
81
+ transform: translateY(-50%);
82
+ cursor: pointer;
83
+ }
84
+ .rs-auto-complete__clear[data-v-a95db999]:hover {
85
+ color: var(--rs-text);
86
+ background: var(--rs-item-hover);
87
+ }
88
+ .rs-auto-complete__list[data-v-a95db999] {
89
+ appearance: none;
90
+ color-scheme: inherit;
91
+ z-index: calc(var(--rs-z-modal) + 2);
92
+ box-sizing: border-box;
93
+ min-width: 8rem;
94
+ max-width: min(24rem, calc(100vw - 1rem));
95
+ max-height: 16rem;
96
+ margin: 0;
97
+ padding: var(--rs-space-xs);
98
+ overflow: auto;
99
+ border: 1px solid var(--rs-dialog-border, var(--rs-border));
100
+ border-radius: var(--rs-radius);
101
+ background: var(--rs-surface-elevated);
102
+ box-shadow: var(--rs-shadow-lg);
103
+ color: var(--rs-text);
104
+ font: inherit;
105
+ font-size: var(--rs-font-size-sm);
106
+ line-height: var(--rs-line-height-tight);
107
+ outline: none;
108
+ }
109
+ .rs-auto-complete__item[data-v-a95db999] {
110
+ padding: var(--rs-space-sm) var(--rs-space-md);
111
+ border-radius: var(--rs-radius-sm);
112
+ color: var(--rs-text);
113
+ background: transparent;
114
+ }
115
+ .rs-auto-complete__item--active[data-v-a95db999],
116
+ .rs-auto-complete__list option[data-v-a95db999]:checked,
117
+ .rs-auto-complete__list option[data-v-a95db999]:hover:not(:disabled) {
118
+ background: var(--rs-item-hover);
119
+ }
120
+ .rs-auto-complete__list option[data-v-a95db999]:disabled {
121
+ color: var(--rs-muted);
122
+ }
@@ -1,39 +1,79 @@
1
1
  import type { RsComponentSize } from '../../../theme/types';
2
- import { type RsSelectFilterOption, type RsSelectOption } from '../../select/src/select-utils';
2
+ import { type RsAutoCompleteFilterOption, type RsAutoCompleteOption, type RsAutoCompleteOptionInput } from './auto-complete-utils';
3
+ /**
4
+ * RsAutoComplete 模板 ref 请用此类型。
5
+ * 不要写 `InstanceType<typeof RsAutoComplete>`:组件实例类型过深,vue-tsc 会报 Excessive stack depth。
6
+ */
7
+ export interface RsAutoCompleteExpose {
8
+ focus: () => void;
9
+ blur: () => void;
10
+ }
11
+ /** 模板 ref 实例:expose + 根节点 */
12
+ export type RsAutoCompleteInstance = RsAutoCompleteExpose & {
13
+ $el: HTMLElement;
14
+ };
15
+ export type { RsAutoCompleteFilterOption, RsAutoCompleteOption, RsAutoCompleteOptionInput };
3
16
  type __VLS_Props = {
4
- options?: ReadonlyArray<string | RsSelectOption>;
17
+ options?: ReadonlyArray<RsAutoCompleteOptionInput>;
5
18
  placeholder?: string;
6
19
  disabled?: boolean;
7
20
  size?: RsComponentSize;
8
21
  allowClear?: boolean;
9
- filterOption?: RsSelectFilterOption | boolean;
22
+ filterOption?: RsAutoCompleteFilterOption | boolean;
10
23
  debounce?: number;
11
24
  emptyText?: string;
25
+ /** 远程搜索进行中。列表空时显示 loadingText。 */
26
+ loading?: boolean;
27
+ loadingText?: string;
28
+ id?: string;
29
+ name?: string;
30
+ /** 无障碍名称。旁边已有可见 label 时可省略。 */
31
+ ariaLabel?: string;
12
32
  };
13
33
  type __VLS_ModelProps = {
14
34
  modelValue?: string;
15
35
  'open'?: boolean;
16
36
  };
17
37
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
18
- declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
38
+ declare var __VLS_12: {}, __VLS_14: {
39
+ option: import("../../select").RsSelectOption;
40
+ active: boolean;
41
+ };
42
+ type __VLS_Slots = {} & {
43
+ empty?: (props: typeof __VLS_12) => any;
44
+ } & {
45
+ option?: (props: typeof __VLS_14) => any;
46
+ };
47
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, RsAutoCompleteExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
19
48
  search: (query: string) => any;
20
49
  select: (value: string) => any;
50
+ blur: (event: FocusEvent) => any;
51
+ focus: (event: FocusEvent) => any;
21
52
  clear: () => any;
22
53
  "update:modelValue": (value: string) => any;
23
54
  "update:open": (value: boolean) => any;
24
55
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
25
56
  onSearch?: ((query: string) => any) | undefined;
26
57
  onSelect?: ((value: string) => any) | undefined;
58
+ onBlur?: ((event: FocusEvent) => any) | undefined;
59
+ onFocus?: ((event: FocusEvent) => any) | undefined;
27
60
  onClear?: (() => any) | undefined;
28
61
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
29
62
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
30
63
  }>, {
31
64
  disabled: boolean;
32
- options: ReadonlyArray<string | RsSelectOption>;
65
+ loading: boolean;
66
+ allowClear: boolean;
67
+ options: ReadonlyArray<RsAutoCompleteOptionInput>;
33
68
  emptyText: string;
34
- filterOption: RsSelectFilterOption | boolean;
69
+ filterOption: RsAutoCompleteFilterOption | boolean;
35
70
  debounce: number;
36
- allowClear: boolean;
37
71
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
72
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
38
73
  declare const _default: typeof __VLS_export;
39
74
  export default _default;
75
+ type __VLS_WithSlots<T, S> = T & {
76
+ new (): {
77
+ $slots: S;
78
+ };
79
+ };
@@ -1,13 +1,18 @@
1
+ import { RS_COMPONENT_SIZE_ICON_PX } from "../../../theme/types.js";
1
2
  import { useRsI18n } from "../../../composables/useRsI18n.js";
2
3
  import RsIcon_default from "../../icon/src/RsIcon.js";
4
+ import { useRsFormContext, useRsFormField } from "../../form/src/form-utils.js";
3
5
  import { useResolvedRsComponentSize } from "../../_shared/src/resolve-size.js";
4
- import { filterSelectOptions, splitSelectLabelHighlight } from "../../select/src/select-utils.js";
5
6
  import { placeAnchoredPopup, stepEnabledIndex } from "../../_shared/src/overlay-utils.js";
6
- import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, nextTick, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, ref, renderList, toDisplayString, unref, useId, useModel, vModelText, watch, withDirectives, withModifiers } from "vue";
7
+ import { filterRsAutoCompleteOptions, normalizeRsAutoCompleteOptions } from "./auto-complete-utils.js";
8
+ import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeClass, normalizeStyle, onUnmounted, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useAttrs, useId, useModel, vModelDynamic, watch, withDirectives, withModifiers } from "vue";
7
9
  //#region src/components/auto-complete/src/RsAutoComplete.vue?vue&type=script&setup=true&lang.ts
8
10
  var _hoisted_1 = [
11
+ "id",
12
+ "name",
9
13
  "placeholder",
10
14
  "disabled",
15
+ "aria-label",
11
16
  "aria-expanded",
12
17
  "aria-controls",
13
18
  "aria-activedescendant"
@@ -15,25 +20,24 @@ var _hoisted_1 = [
15
20
  var _hoisted_2 = ["aria-label"];
16
21
  var _hoisted_3 = [
17
22
  "id",
23
+ "size",
18
24
  "aria-label",
19
- "data-placement"
25
+ "aria-busy",
26
+ "data-rs-theme",
27
+ "data-placement",
28
+ "value"
20
29
  ];
21
30
  var _hoisted_4 = {
22
31
  key: 0,
23
- class: "rs-auto-complete__empty",
24
- role: "presentation"
32
+ disabled: "",
33
+ value: ""
25
34
  };
26
35
  var _hoisted_5 = [
27
36
  "id",
28
- "aria-selected",
29
- "aria-disabled",
30
- "onMousedown"
37
+ "value",
38
+ "disabled",
39
+ "title"
31
40
  ];
32
- var _hoisted_6 = { class: "rs-auto-complete__label" };
33
- var _hoisted_7 = {
34
- key: 0,
35
- class: "rs-auto-complete__mark"
36
- };
37
41
  var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
38
42
  name: "RsAutoComplete",
39
43
  inheritAttrs: false,
@@ -55,7 +59,15 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
55
59
  default: true
56
60
  },
57
61
  debounce: { default: 0 },
58
- emptyText: { default: "" }
62
+ emptyText: { default: "" },
63
+ loading: {
64
+ type: Boolean,
65
+ default: false
66
+ },
67
+ loadingText: {},
68
+ id: {},
69
+ name: {},
70
+ ariaLabel: {}
59
71
  }, {
60
72
  "modelValue": { default: "" },
61
73
  "modelModifiers": {},
@@ -68,16 +80,22 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
68
80
  emits: /*@__PURE__*/ mergeModels([
69
81
  "search",
70
82
  "select",
71
- "clear"
83
+ "clear",
84
+ "focus",
85
+ "blur"
72
86
  ], ["update:modelValue", "update:open"]),
73
- setup(__props, { emit: __emit }) {
87
+ setup(__props, { expose: __expose, emit: __emit }) {
74
88
  const model = useModel(__props, "modelValue");
75
89
  const openModel = useModel(__props, "open");
76
90
  const props = __props;
77
91
  const emit = __emit;
78
92
  const { t } = useRsI18n();
93
+ const attrs = useAttrs();
94
+ const formContext = useRsFormContext();
79
95
  const resolvedSize = useResolvedRsComponentSize(() => props.size);
80
96
  const listId = useId();
97
+ const autoId = useId();
98
+ const inputId = computed(() => props.id || autoId);
81
99
  const inputRef = ref(null);
82
100
  const listRef = ref(null);
83
101
  const highlight = ref(0);
@@ -89,17 +107,43 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
89
107
  width: 0,
90
108
  placement: "bottom"
91
109
  });
92
- const normalized = computed(() => props.options.map((item) => typeof item === "string" ? {
93
- label: item,
94
- value: item
95
- } : item));
96
- const suggestions = computed(() => {
97
- if (props.filterOption === false) return normalized.value;
98
- return filterSelectOptions(normalized.value, model.value, (text, q) => text.toLowerCase().includes(q.toLowerCase()), props.filterOption);
110
+ /** 面板挂到 body 后仍跟输入框最近的 data-rs-theme(深色岛 / 混主题页)。 */
111
+ const panelTheme = ref();
112
+ function syncPanelTheme() {
113
+ const el = inputRef.value;
114
+ if (!el) {
115
+ panelTheme.value = void 0;
116
+ return;
117
+ }
118
+ const themed = el.closest("[data-rs-theme]");
119
+ panelTheme.value = themed instanceof HTMLElement ? themed.dataset.rsTheme : void 0;
120
+ }
121
+ const resolvedDisabled = computed(() => props.disabled || Boolean(formContext?.disabled.value));
122
+ const iconPx = computed(() => RS_COMPONENT_SIZE_ICON_PX[resolvedSize.value]);
123
+ const normalized = computed(() => normalizeRsAutoCompleteOptions(props.options));
124
+ const suggestions = computed(() => filterRsAutoCompleteOptions(normalized.value, model.value, props.filterOption));
125
+ const suggestionViews = computed(() => suggestions.value.map((option, index) => ({
126
+ option,
127
+ index,
128
+ optionId: `${listId}-${String(option.value)}`
129
+ })));
130
+ const listSize = computed(() => {
131
+ const count = suggestions.value.length;
132
+ if (count === 0) return 2;
133
+ return Math.min(8, Math.max(2, count));
99
134
  });
100
- const open = computed(() => Boolean(openModel.value && !props.disabled && !dismissed.value));
135
+ const open = computed(() => Boolean(openModel.value && !resolvedDisabled.value && !dismissed.value));
101
136
  const activeOption = computed(() => suggestions.value[highlight.value]);
102
- const activeOptionId = computed(() => open.value && activeOption.value ? `${listId}-${String(activeOption.value.value)}` : void 0);
137
+ const selectedValue = computed(() => activeOption.value ? String(activeOption.value.value) : "");
138
+ const activeOptionId = computed(() => {
139
+ if (!open.value || !activeOption.value) return void 0;
140
+ return `${listId}-${String(activeOption.value.value)}`;
141
+ });
142
+ const showClear = computed(() => Boolean(props.allowClear && model.value && !resolvedDisabled.value));
143
+ const listStatusText = computed(() => {
144
+ if (props.loading && !suggestions.value.length) return props.loadingText || t("select.loading");
145
+ return props.emptyText || t("select.empty");
146
+ });
103
147
  watch(model, (query) => {
104
148
  if (searchTimer.value) clearTimeout(searchTimer.value);
105
149
  const wait = props.debounce ?? 0;
@@ -128,15 +172,35 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
128
172
  });
129
173
  }
130
174
  let frame = 0;
175
+ let overlayBound = false;
131
176
  function requestPlace() {
132
- if (frame) return;
177
+ if (typeof window === "undefined" || frame) return;
133
178
  frame = window.requestAnimationFrame(() => {
134
179
  frame = 0;
135
180
  placePopup();
136
181
  });
137
182
  }
183
+ function onWindowChange() {
184
+ if (open.value) requestPlace();
185
+ }
186
+ function attachOverlay() {
187
+ if (overlayBound || typeof window === "undefined") return;
188
+ overlayBound = true;
189
+ window.addEventListener("resize", onWindowChange);
190
+ window.addEventListener("scroll", onWindowChange, true);
191
+ }
192
+ function detachOverlay() {
193
+ if (frame && typeof window !== "undefined") {
194
+ window.cancelAnimationFrame(frame);
195
+ frame = 0;
196
+ }
197
+ if (!overlayBound || typeof window === "undefined") return;
198
+ overlayBound = false;
199
+ window.removeEventListener("resize", onWindowChange);
200
+ window.removeEventListener("scroll", onWindowChange, true);
201
+ }
138
202
  function showList() {
139
- if (props.disabled) return;
203
+ if (resolvedDisabled.value) return;
140
204
  dismissed.value = false;
141
205
  openModel.value = true;
142
206
  requestPlace();
@@ -152,6 +216,11 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
152
216
  hideList();
153
217
  nextTick(() => inputRef.value?.focus());
154
218
  }
219
+ function onNativeSelect(event) {
220
+ const value = event.target.value;
221
+ const option = suggestions.value.find((item) => String(item.value) === value);
222
+ if (option) onPick(option);
223
+ }
155
224
  function onClear() {
156
225
  model.value = "";
157
226
  emit("clear");
@@ -202,48 +271,84 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
202
271
  function onInput() {
203
272
  showList();
204
273
  }
205
- function onFocus() {
274
+ function onFocus(event) {
275
+ emit("focus", event);
206
276
  showList();
207
277
  }
208
- function onBlur() {
209
- window.setTimeout(() => {
278
+ let blurTimer = 0;
279
+ function onBlur(event) {
280
+ emit("blur", event);
281
+ if (blurTimer) window.clearTimeout(blurTimer);
282
+ blurTimer = window.setTimeout(() => {
283
+ blurTimer = 0;
210
284
  if (document.activeElement === inputRef.value) return;
211
285
  hideList();
212
286
  }, 0);
213
287
  }
288
+ function scrollActiveIntoView() {
289
+ if (!open.value || !activeOptionId.value) return;
290
+ document.getElementById(activeOptionId.value)?.scrollIntoView({ block: "nearest" });
291
+ }
214
292
  watch(suggestions, (list) => {
215
293
  highlight.value = list.findIndex((item) => !item.disabled);
216
294
  if (highlight.value < 0) highlight.value = 0;
217
- requestPlace();
295
+ if (open.value) requestPlace();
296
+ });
297
+ watch(highlight, () => {
298
+ nextTick(scrollActiveIntoView);
218
299
  });
219
300
  watch(open, (isOpen) => {
220
- if (isOpen) nextTick(() => requestPlace());
221
- }, { immediate: true });
222
- function onWindowChange() {
223
- if (open.value) requestPlace();
301
+ if (isOpen) {
302
+ attachOverlay();
303
+ nextTick(() => {
304
+ syncPanelTheme();
305
+ requestPlace();
306
+ });
307
+ return;
308
+ }
309
+ detachOverlay();
310
+ });
311
+ function setFieldValue(value) {
312
+ model.value = value == null ? "" : String(value);
224
313
  }
225
- onMounted(() => {
226
- window.addEventListener("resize", onWindowChange);
227
- window.addEventListener("scroll", onWindowChange, true);
314
+ useRsFormField(() => ({
315
+ get name() {
316
+ return props.name;
317
+ },
318
+ getValue: () => model.value,
319
+ setValue: setFieldValue
320
+ }));
321
+ function focus() {
322
+ inputRef.value?.focus();
323
+ }
324
+ function blur() {
325
+ inputRef.value?.blur();
326
+ }
327
+ __expose({
328
+ focus,
329
+ blur
228
330
  });
229
331
  onUnmounted(() => {
230
- if (frame) window.cancelAnimationFrame(frame);
332
+ detachOverlay();
231
333
  if (searchTimer.value) clearTimeout(searchTimer.value);
232
- window.removeEventListener("resize", onWindowChange);
233
- window.removeEventListener("scroll", onWindowChange, true);
334
+ if (blurTimer) window.clearTimeout(blurTimer);
234
335
  });
235
- function parts(label) {
236
- return splitSelectLabelHighlight(label, model.value);
237
- }
238
336
  return (_ctx, _cache) => {
239
- return openBlock(), createElementBlock("div", { class: normalizeClass(["rs-auto-complete", [`rs-auto-complete--${unref(resolvedSize)}`, { "rs-auto-complete--clearable": __props.allowClear && model.value && !__props.disabled }]]) }, [
240
- withDirectives(createElementVNode("input", {
337
+ return openBlock(), createElementBlock("div", { class: normalizeClass(["rs-auto-complete", [`rs-auto-complete--${unref(resolvedSize)}`, {
338
+ "rs-auto-complete--clearable": showClear.value,
339
+ "rs-auto-complete--disabled": resolvedDisabled.value
340
+ }]]) }, [
341
+ withDirectives(createElementVNode("input", mergeProps({
342
+ id: inputId.value,
241
343
  ref_key: "inputRef",
242
- ref: inputRef,
344
+ ref: inputRef
345
+ }, unref(attrs), {
243
346
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
244
347
  class: "rs-auto-complete__input",
245
- placeholder: __props.placeholder ?? unref(t)("select.placeholder"),
246
- disabled: __props.disabled,
348
+ name: __props.name,
349
+ placeholder: __props.placeholder ?? unref(t)("autocomplete.placeholder"),
350
+ disabled: resolvedDisabled.value,
351
+ "aria-label": __props.ariaLabel,
247
352
  autocomplete: "off",
248
353
  role: "combobox",
249
354
  "aria-autocomplete": "list",
@@ -255,8 +360,8 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
255
360
  onInput,
256
361
  onFocus,
257
362
  onBlur
258
- }, null, 40, _hoisted_1), [[vModelText, model.value]]),
259
- __props.allowClear && model.value && !__props.disabled ? (openBlock(), createElementBlock("button", {
363
+ }), null, 16, _hoisted_1), [[vModelDynamic, model.value]]),
364
+ showClear.value ? (openBlock(), createElementBlock("button", {
260
365
  key: 0,
261
366
  type: "button",
262
367
  class: "rs-auto-complete__clear",
@@ -265,39 +370,42 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
265
370
  onClick: onClear
266
371
  }, [createVNode(RsIcon_default, {
267
372
  name: "x",
268
- size: 14
269
- })], 40, _hoisted_2)) : createCommentVNode("", true),
270
- (openBlock(), createBlock(Teleport, { to: "body" }, [open.value ? (openBlock(), createElementBlock("ul", {
373
+ size: iconPx.value
374
+ }, null, 8, ["size"])], 40, _hoisted_2)) : createCommentVNode("", true),
375
+ (openBlock(), createBlock(Teleport, { to: "body" }, [open.value ? (openBlock(), createElementBlock("select", {
271
376
  key: 0,
272
377
  id: unref(listId),
273
378
  ref_key: "listRef",
274
379
  ref: listRef,
275
380
  class: "rs-auto-complete__list",
276
- role: "listbox",
381
+ size: listSize.value,
382
+ tabindex: "-1",
277
383
  "aria-label": unref(t)("autocomplete.suggestions"),
384
+ "aria-busy": __props.loading ? "true" : void 0,
385
+ "data-rs-theme": panelTheme.value,
278
386
  "data-placement": popup.value.placement,
387
+ value: selectedValue.value,
279
388
  style: normalizeStyle({
280
389
  position: "fixed",
281
390
  top: `${popup.value.top}px`,
282
391
  left: `${popup.value.left}px`,
283
392
  width: `${popup.value.width}px`
284
- })
285
- }, [!suggestions.value.length ? (openBlock(), createElementBlock("li", _hoisted_4, toDisplayString(__props.emptyText || unref(t)("select.empty")), 1)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(suggestions.value, (opt, index) => {
286
- return openBlock(), createElementBlock("li", {
287
- id: `${unref(listId)}-${String(opt.value)}`,
288
- key: String(opt.value),
289
- role: "option",
290
- class: normalizeClass(["rs-auto-complete__item", {
291
- "rs-auto-complete__item--disabled": opt.disabled,
292
- "rs-auto-complete__item--active": index === highlight.value
293
- }]),
294
- "aria-selected": index === highlight.value,
295
- "aria-disabled": opt.disabled ? "true" : void 0,
296
- onMousedown: withModifiers(($event) => onPick(opt), ["prevent"])
297
- }, [createElementVNode("span", _hoisted_6, [(openBlock(true), createElementBlock(Fragment, null, renderList(parts(opt.label), (part, i) => {
298
- return openBlock(), createElementBlock(Fragment, { key: i }, [part.highlight ? (openBlock(), createElementBlock("span", _hoisted_7, toDisplayString(part.text), 1)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(part.text), 1)], 64))], 64);
299
- }), 128))])], 42, _hoisted_5);
300
- }), 128))], 12, _hoisted_3)) : createCommentVNode("", true)]))
393
+ }),
394
+ onMousedown: _cache[2] || (_cache[2] = withModifiers(() => {}, ["prevent"])),
395
+ onChange: onNativeSelect
396
+ }, [!suggestions.value.length ? (openBlock(), createElementBlock("option", _hoisted_4, [renderSlot(_ctx.$slots, "empty", {}, () => [createTextVNode(toDisplayString(listStatusText.value), 1)], true)])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(suggestionViews.value, (row) => {
397
+ return openBlock(), createElementBlock("option", {
398
+ id: row.optionId,
399
+ key: String(row.option.value),
400
+ class: normalizeClass(["rs-auto-complete__item", { "rs-auto-complete__item--active": row.index === highlight.value }]),
401
+ value: String(row.option.value),
402
+ disabled: row.option.disabled,
403
+ title: row.option.title
404
+ }, [renderSlot(_ctx.$slots, "option", {
405
+ option: row.option,
406
+ active: row.index === highlight.value
407
+ }, () => [createTextVNode(toDisplayString(row.option.label), 1)], true)], 10, _hoisted_5);
408
+ }), 128))], 44, _hoisted_3)) : createCommentVNode("", true)]))
301
409
  ], 2);
302
410
  };
303
411
  }
@@ -1,5 +1,8 @@
1
+ import './RsAutoComplete.css'
2
+ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.js";
1
3
  import RsAutoComplete_vue_vue_type_script_setup_true_lang_default from "./RsAutoComplete.impl.js";
4
+
2
5
  //#region src/components/auto-complete/src/RsAutoComplete.vue
3
- var RsAutoComplete_default = RsAutoComplete_vue_vue_type_script_setup_true_lang_default;
6
+ var RsAutoComplete_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsAutoComplete_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-a95db999"]]);
4
7
  //#endregion
5
8
  export { RsAutoComplete_default as default };
@@ -0,0 +1,7 @@
1
+ import { type RsSelectFilterOption, type RsSelectOption } from '../../select/src/select-utils';
2
+ export type RsAutoCompleteOption = RsSelectOption;
3
+ export type RsAutoCompleteFilterOption = RsSelectFilterOption;
4
+ export type RsAutoCompleteOptionInput = string | RsSelectOption;
5
+ export declare function normalizeRsAutoCompleteOptions(options: ReadonlyArray<RsAutoCompleteOptionInput> | undefined): RsAutoCompleteOption[];
6
+ /** filterOption === false 时不过滤,交给远程 @search。 */
7
+ export declare function filterRsAutoCompleteOptions(options: RsAutoCompleteOption[], query: string, filterOption?: RsAutoCompleteFilterOption | boolean): RsAutoCompleteOption[];
@@ -0,0 +1,17 @@
1
+ import { filterSelectOptions } from "../../select/src/select-utils.js";
2
+ //#region src/components/auto-complete/src/auto-complete-utils.ts
3
+ function normalizeRsAutoCompleteOptions(options) {
4
+ if (!options?.length) return [];
5
+ return options.map((item) => typeof item === "string" ? {
6
+ label: item,
7
+ value: item
8
+ } : item);
9
+ }
10
+ var containsIgnoreCase = (text, query) => text.toLowerCase().includes(query.toLowerCase());
11
+ /** filterOption === false 时不过滤,交给远程 @search。 */
12
+ function filterRsAutoCompleteOptions(options, query, filterOption) {
13
+ if (filterOption === false) return options;
14
+ return filterSelectOptions(options, query, containsIgnoreCase, filterOption);
15
+ }
16
+ //#endregion
17
+ export { filterRsAutoCompleteOptions, normalizeRsAutoCompleteOptions };
@@ -1 +1,2 @@
1
1
  export { default as RsAvatar } from './src/RsAvatar.js';
2
+ export type { RsAvatarShape, RsAvatarSize, RsAvatarTone } from './src/avatar-utils';