@rotki/ui-library 2.8.1 → 2.8.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 (465) hide show
  1. package/dist/README.md +276 -0
  2. package/dist/_virtual/_plugin-vue_export-helper.js +11 -0
  3. package/dist/_virtual/_plugin-vue_export-helper.js.map +1 -0
  4. package/dist/components/accordions/accordion/RuiAccordion.vue.js +11 -0
  5. package/dist/components/accordions/accordion/RuiAccordion.vue.js.map +1 -0
  6. package/dist/components/accordions/accordion/RuiAccordion.vue2.js +66 -0
  7. package/dist/components/accordions/accordion/RuiAccordion.vue2.js.map +1 -0
  8. package/dist/components/accordions/accordion/RuiAccordion.vue3.js +18 -0
  9. package/dist/components/accordions/accordion/RuiAccordion.vue3.js.map +1 -0
  10. package/dist/components/accordions/accordions/RuiAccordions.vue.js +78 -0
  11. package/dist/components/accordions/accordions/RuiAccordions.vue.js.map +1 -0
  12. package/dist/components/accordions/accordions/RuiAccordions.vue2.js +5 -0
  13. package/dist/components/accordions/accordions/RuiAccordions.vue2.js.map +1 -0
  14. package/dist/components/alerts/RuiAlert.vue.d.ts +2 -2
  15. package/dist/components/alerts/RuiAlert.vue.js +11 -0
  16. package/dist/components/alerts/RuiAlert.vue.js.map +1 -0
  17. package/dist/components/alerts/RuiAlert.vue2.js +123 -0
  18. package/dist/components/alerts/RuiAlert.vue2.js.map +1 -0
  19. package/dist/components/alerts/RuiAlert.vue3.js +50 -0
  20. package/dist/components/alerts/RuiAlert.vue3.js.map +1 -0
  21. package/dist/components/buttons/button/RuiButton.vue.d.ts +1 -1
  22. package/dist/components/buttons/button/RuiButton.vue.js +11 -0
  23. package/dist/components/buttons/button/RuiButton.vue.js.map +1 -0
  24. package/dist/components/buttons/button/RuiButton.vue2.js +94 -0
  25. package/dist/components/buttons/button/RuiButton.vue2.js.map +1 -0
  26. package/dist/components/buttons/button/RuiButton.vue3.js +74 -0
  27. package/dist/components/buttons/button/RuiButton.vue3.js.map +1 -0
  28. package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +1 -1
  29. package/dist/components/buttons/button-group/RuiButtonGroup.vue.js +11 -0
  30. package/dist/components/buttons/button-group/RuiButtonGroup.vue.js.map +1 -0
  31. package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js +112 -0
  32. package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js.map +1 -0
  33. package/dist/components/buttons/button-group/RuiButtonGroup.vue3.js +58 -0
  34. package/dist/components/buttons/button-group/RuiButtonGroup.vue3.js.map +1 -0
  35. package/dist/components/calendar/RuiCalendar.vue.js +128 -0
  36. package/dist/components/calendar/RuiCalendar.vue.js.map +1 -0
  37. package/dist/components/calendar/RuiCalendar.vue3.js +6 -0
  38. package/dist/components/calendar/RuiCalendar.vue3.js.map +1 -0
  39. package/dist/components/calendar/RuiCalendarGrid.vue.js +8 -0
  40. package/dist/components/calendar/RuiCalendarGrid.vue.js.map +1 -0
  41. package/dist/components/calendar/RuiCalendarGrid.vue2.js +149 -0
  42. package/dist/components/calendar/RuiCalendarGrid.vue2.js.map +1 -0
  43. package/dist/components/calendar/RuiCalendarHeader.vue.d.ts +1 -1
  44. package/dist/components/calendar/RuiCalendarHeader.vue.js +8 -0
  45. package/dist/components/calendar/RuiCalendarHeader.vue.js.map +1 -0
  46. package/dist/components/calendar/RuiCalendarHeader.vue2.js +112 -0
  47. package/dist/components/calendar/RuiCalendarHeader.vue2.js.map +1 -0
  48. package/dist/components/calendar/RuiCalendarMenu.vue.d.ts +1 -1
  49. package/dist/components/calendar/RuiCalendarMenu.vue.js +8 -0
  50. package/dist/components/calendar/RuiCalendarMenu.vue.js.map +1 -0
  51. package/dist/components/calendar/RuiCalendarMenu.vue2.js +261 -0
  52. package/dist/components/calendar/RuiCalendarMenu.vue2.js.map +1 -0
  53. package/dist/components/calendar/state.js +25 -0
  54. package/dist/components/calendar/state.js.map +1 -0
  55. package/dist/components/cards/RuiCard.vue.js +11 -0
  56. package/dist/components/cards/RuiCard.vue.js.map +1 -0
  57. package/dist/components/cards/RuiCard.vue2.js +88 -0
  58. package/dist/components/cards/RuiCard.vue2.js.map +1 -0
  59. package/dist/components/cards/RuiCard.vue3.js +40 -0
  60. package/dist/components/cards/RuiCard.vue3.js.map +1 -0
  61. package/dist/components/cards/RuiCardHeader.vue.js +11 -0
  62. package/dist/components/cards/RuiCardHeader.vue.js.map +1 -0
  63. package/dist/components/cards/RuiCardHeader.vue2.js +51 -0
  64. package/dist/components/cards/RuiCardHeader.vue2.js.map +1 -0
  65. package/dist/components/cards/RuiCardHeader.vue3.js +27 -0
  66. package/dist/components/cards/RuiCardHeader.vue3.js.map +1 -0
  67. package/dist/components/chips/RuiChip.vue.d.ts +2 -2
  68. package/dist/components/chips/RuiChip.vue.js +11 -0
  69. package/dist/components/chips/RuiChip.vue.js.map +1 -0
  70. package/dist/components/chips/RuiChip.vue2.js +95 -0
  71. package/dist/components/chips/RuiChip.vue2.js.map +1 -0
  72. package/dist/components/chips/RuiChip.vue3.js +88 -0
  73. package/dist/components/chips/RuiChip.vue3.js.map +1 -0
  74. package/dist/components/color-picker/RuiColorBoard.vue.d.ts +1 -1
  75. package/dist/components/color-picker/RuiColorBoard.vue.js +11 -0
  76. package/dist/components/color-picker/RuiColorBoard.vue.js.map +1 -0
  77. package/dist/components/color-picker/RuiColorBoard.vue2.js +102 -0
  78. package/dist/components/color-picker/RuiColorBoard.vue2.js.map +1 -0
  79. package/dist/components/color-picker/RuiColorBoard.vue3.js +18 -0
  80. package/dist/components/color-picker/RuiColorBoard.vue3.js.map +1 -0
  81. package/dist/components/color-picker/RuiColorDisplay.vue.js +49 -0
  82. package/dist/components/color-picker/RuiColorDisplay.vue.js.map +1 -0
  83. package/dist/components/color-picker/RuiColorDisplay.vue2.js +5 -0
  84. package/dist/components/color-picker/RuiColorDisplay.vue2.js.map +1 -0
  85. package/dist/components/color-picker/RuiColorHue.vue.js +11 -0
  86. package/dist/components/color-picker/RuiColorHue.vue.js.map +1 -0
  87. package/dist/components/color-picker/RuiColorHue.vue2.js +89 -0
  88. package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -0
  89. package/dist/components/color-picker/RuiColorHue.vue3.js +12 -0
  90. package/dist/components/color-picker/RuiColorHue.vue3.js.map +1 -0
  91. package/dist/components/color-picker/RuiColorInput.vue.d.ts +1 -1
  92. package/dist/components/color-picker/RuiColorInput.vue.js +139 -0
  93. package/dist/components/color-picker/RuiColorInput.vue.js.map +1 -0
  94. package/dist/components/color-picker/RuiColorInput.vue2.js +5 -0
  95. package/dist/components/color-picker/RuiColorInput.vue2.js.map +1 -0
  96. package/dist/components/color-picker/RuiColorPicker.vue.js +72 -0
  97. package/dist/components/color-picker/RuiColorPicker.vue.js.map +1 -0
  98. package/dist/components/color-picker/RuiColorPicker.vue2.js +5 -0
  99. package/dist/components/color-picker/RuiColorPicker.vue2.js.map +1 -0
  100. package/dist/components/color-picker/utils.js +182 -0
  101. package/dist/components/color-picker/utils.js.map +1 -0
  102. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +1 -1
  103. package/dist/components/date-time-picker/RuiDateTimePicker.vue.js +11 -0
  104. package/dist/components/date-time-picker/RuiDateTimePicker.vue.js.map +1 -0
  105. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +570 -0
  106. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -0
  107. package/dist/components/date-time-picker/RuiDateTimePicker.vue3.js +66 -0
  108. package/dist/components/date-time-picker/RuiDateTimePicker.vue3.js.map +1 -0
  109. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.d.ts +2 -2
  110. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js +120 -0
  111. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js.map +1 -0
  112. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue2.js +5 -0
  113. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue2.js.map +1 -0
  114. package/dist/components/date-time-picker/timezones.js +601 -0
  115. package/dist/components/date-time-picker/timezones.js.map +1 -0
  116. package/dist/components/date-time-picker/types.js +17 -0
  117. package/dist/components/date-time-picker/types.js.map +1 -0
  118. package/dist/components/date-time-picker/use-input-handler.d.ts +2 -2
  119. package/dist/components/date-time-picker/use-input-handler.js +31 -0
  120. package/dist/components/date-time-picker/use-input-handler.js.map +1 -0
  121. package/dist/components/date-time-picker/use-keyboard-handler.d.ts +2 -2
  122. package/dist/components/date-time-picker/use-keyboard-handler.js +308 -0
  123. package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -0
  124. package/dist/components/date-time-picker/utils.d.ts +1 -1
  125. package/dist/components/date-time-picker/utils.js +19 -0
  126. package/dist/components/date-time-picker/utils.js.map +1 -0
  127. package/dist/components/divider/RuiDivider.vue.js +22 -0
  128. package/dist/components/divider/RuiDivider.vue.js.map +1 -0
  129. package/dist/components/divider/RuiDivider.vue2.js +5 -0
  130. package/dist/components/divider/RuiDivider.vue2.js.map +1 -0
  131. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +2 -2
  132. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.js +11 -0
  133. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.js.map +1 -0
  134. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +585 -0
  135. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -0
  136. package/dist/components/forms/auto-complete/RuiAutoComplete.vue3.js +60 -0
  137. package/dist/components/forms/auto-complete/RuiAutoComplete.vue3.js.map +1 -0
  138. package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +1 -1
  139. package/dist/components/forms/checkbox/RuiCheckbox.vue.js +11 -0
  140. package/dist/components/forms/checkbox/RuiCheckbox.vue.js.map +1 -0
  141. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +137 -0
  142. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -0
  143. package/dist/components/forms/checkbox/RuiCheckbox.vue3.js +54 -0
  144. package/dist/components/forms/checkbox/RuiCheckbox.vue3.js.map +1 -0
  145. package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +1 -1
  146. package/dist/components/forms/radio-button/radio/RuiRadio.vue.js +11 -0
  147. package/dist/components/forms/radio-button/radio/RuiRadio.vue.js.map +1 -0
  148. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +115 -0
  149. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -0
  150. package/dist/components/forms/radio-button/radio/RuiRadio.vue3.js +54 -0
  151. package/dist/components/forms/radio-button/radio/RuiRadio.vue3.js.map +1 -0
  152. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +1 -1
  153. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.js +11 -0
  154. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.js.map +1 -0
  155. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +78 -0
  156. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +1 -0
  157. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue3.js +9 -0
  158. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue3.js.map +1 -0
  159. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +5 -5
  160. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +82 -0
  161. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -0
  162. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue2.js +5 -0
  163. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue2.js.map +1 -0
  164. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +2 -2
  165. package/dist/components/forms/select/RuiMenuSelect.vue.js +11 -0
  166. package/dist/components/forms/select/RuiMenuSelect.vue.js.map +1 -0
  167. package/dist/components/forms/select/RuiMenuSelect.vue2.js +297 -0
  168. package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -0
  169. package/dist/components/forms/select/RuiMenuSelect.vue3.js +60 -0
  170. package/dist/components/forms/select/RuiMenuSelect.vue3.js.map +1 -0
  171. package/dist/components/forms/select/RuiSimpleSelect.vue.js +11 -0
  172. package/dist/components/forms/select/RuiSimpleSelect.vue.js.map +1 -0
  173. package/dist/components/forms/select/RuiSimpleSelect.vue2.js +67 -0
  174. package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +1 -0
  175. package/dist/components/forms/select/RuiSimpleSelect.vue3.js +21 -0
  176. package/dist/components/forms/select/RuiSimpleSelect.vue3.js.map +1 -0
  177. package/dist/components/forms/slider/RuiSlider.vue.d.ts +1 -1
  178. package/dist/components/forms/slider/RuiSlider.vue.js +11 -0
  179. package/dist/components/forms/slider/RuiSlider.vue.js.map +1 -0
  180. package/dist/components/forms/slider/RuiSlider.vue2.js +165 -0
  181. package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -0
  182. package/dist/components/forms/slider/RuiSlider.vue3.js +80 -0
  183. package/dist/components/forms/slider/RuiSlider.vue3.js.map +1 -0
  184. package/dist/components/forms/switch/RuiSwitch.vue.d.ts +1 -1
  185. package/dist/components/forms/switch/RuiSwitch.vue.js +11 -0
  186. package/dist/components/forms/switch/RuiSwitch.vue.js.map +1 -0
  187. package/dist/components/forms/switch/RuiSwitch.vue2.js +89 -0
  188. package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -0
  189. package/dist/components/forms/switch/RuiSwitch.vue3.js +54 -0
  190. package/dist/components/forms/switch/RuiSwitch.vue3.js.map +1 -0
  191. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +2 -2
  192. package/dist/components/forms/text-area/RuiTextArea.vue.js +11 -0
  193. package/dist/components/forms/text-area/RuiTextArea.vue.js.map +1 -0
  194. package/dist/components/forms/text-area/RuiTextArea.vue2.js +252 -0
  195. package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -0
  196. package/dist/components/forms/text-area/RuiTextArea.vue3.js +92 -0
  197. package/dist/components/forms/text-area/RuiTextArea.vue3.js.map +1 -0
  198. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +2 -2
  199. package/dist/components/forms/text-field/RuiTextField.vue.js +11 -0
  200. package/dist/components/forms/text-field/RuiTextField.vue.js.map +1 -0
  201. package/dist/components/forms/text-field/RuiTextField.vue2.js +220 -0
  202. package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -0
  203. package/dist/components/forms/text-field/RuiTextField.vue3.js +89 -0
  204. package/dist/components/forms/text-field/RuiTextField.vue3.js.map +1 -0
  205. package/dist/components/helpers/RuiFormTextDetail.vue.js +54 -0
  206. package/dist/components/helpers/RuiFormTextDetail.vue.js.map +1 -0
  207. package/dist/components/helpers/RuiFormTextDetail.vue2.js +5 -0
  208. package/dist/components/helpers/RuiFormTextDetail.vue2.js.map +1 -0
  209. package/dist/components/icons/RuiIcon.vue.d.ts +2 -2
  210. package/dist/components/icons/RuiIcon.vue.js +11 -0
  211. package/dist/components/icons/RuiIcon.vue.js.map +1 -0
  212. package/dist/components/icons/RuiIcon.vue2.js +60 -0
  213. package/dist/components/icons/RuiIcon.vue2.js.map +1 -0
  214. package/dist/components/icons/RuiIcon.vue3.js +29 -0
  215. package/dist/components/icons/RuiIcon.vue3.js.map +1 -0
  216. package/dist/components/index.d.ts +45 -45
  217. package/dist/components/index.js +92 -0
  218. package/dist/components/index.js.map +1 -0
  219. package/dist/components/loaders/RuiSkeletonBase.vue.js +11 -0
  220. package/dist/components/loaders/RuiSkeletonBase.vue.js.map +1 -0
  221. package/dist/components/loaders/RuiSkeletonBase.vue2.js +22 -0
  222. package/dist/components/loaders/RuiSkeletonBase.vue2.js.map +1 -0
  223. package/dist/components/loaders/RuiSkeletonBase.vue3.js +12 -0
  224. package/dist/components/loaders/RuiSkeletonBase.vue3.js.map +1 -0
  225. package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +1 -1
  226. package/dist/components/loaders/RuiSkeletonLoader.vue.js +11 -0
  227. package/dist/components/loaders/RuiSkeletonLoader.vue.js.map +1 -0
  228. package/dist/components/loaders/RuiSkeletonLoader.vue2.js +47 -0
  229. package/dist/components/loaders/RuiSkeletonLoader.vue2.js.map +1 -0
  230. package/dist/components/loaders/RuiSkeletonLoader.vue3.js +33 -0
  231. package/dist/components/loaders/RuiSkeletonLoader.vue3.js.map +1 -0
  232. package/dist/components/logos/RuiLogo.vue.js +114 -0
  233. package/dist/components/logos/RuiLogo.vue.js.map +1 -0
  234. package/dist/components/logos/RuiLogo.vue2.js +5 -0
  235. package/dist/components/logos/RuiLogo.vue2.js.map +1 -0
  236. package/dist/components/logos/logo.svg.js +5 -0
  237. package/dist/components/logos/logo.svg.js.map +1 -0
  238. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +2 -2
  239. package/dist/components/overlays/badge/RuiBadge.vue.js +11 -0
  240. package/dist/components/overlays/badge/RuiBadge.vue.js.map +1 -0
  241. package/dist/components/overlays/badge/RuiBadge.vue2.js +95 -0
  242. package/dist/components/overlays/badge/RuiBadge.vue2.js.map +1 -0
  243. package/dist/components/overlays/badge/RuiBadge.vue3.js +77 -0
  244. package/dist/components/overlays/badge/RuiBadge.vue3.js.map +1 -0
  245. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +34 -0
  246. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js.map +1 -0
  247. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue2.js +5 -0
  248. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue2.js.map +1 -0
  249. package/dist/components/overlays/dialog/RuiDialog.vue.js +11 -0
  250. package/dist/components/overlays/dialog/RuiDialog.vue.js.map +1 -0
  251. package/dist/components/overlays/dialog/RuiDialog.vue2.js +172 -0
  252. package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +1 -0
  253. package/dist/components/overlays/dialog/RuiDialog.vue3.js +18 -0
  254. package/dist/components/overlays/dialog/RuiDialog.vue3.js.map +1 -0
  255. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +1 -1
  256. package/dist/components/overlays/menu/RuiMenu.vue.js +11 -0
  257. package/dist/components/overlays/menu/RuiMenu.vue.js.map +1 -0
  258. package/dist/components/overlays/menu/RuiMenu.vue2.js +221 -0
  259. package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -0
  260. package/dist/components/overlays/menu/RuiMenu.vue3.js +21 -0
  261. package/dist/components/overlays/menu/RuiMenu.vue3.js.map +1 -0
  262. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.js +11 -0
  263. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.js.map +1 -0
  264. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +112 -0
  265. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +1 -0
  266. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue3.js +28 -0
  267. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue3.js.map +1 -0
  268. package/dist/components/overlays/notification/RuiNotification.vue.js +74 -0
  269. package/dist/components/overlays/notification/RuiNotification.vue.js.map +1 -0
  270. package/dist/components/overlays/notification/RuiNotification.vue2.js +5 -0
  271. package/dist/components/overlays/notification/RuiNotification.vue2.js.map +1 -0
  272. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +1 -1
  273. package/dist/components/overlays/tooltip/RuiTooltip.vue.js +11 -0
  274. package/dist/components/overlays/tooltip/RuiTooltip.vue.js.map +1 -0
  275. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +105 -0
  276. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +1 -0
  277. package/dist/components/overlays/tooltip/RuiTooltip.vue3.js +27 -0
  278. package/dist/components/overlays/tooltip/RuiTooltip.vue3.js.map +1 -0
  279. package/dist/components/progress/RuiProgress.vue.d.ts +1 -1
  280. package/dist/components/progress/RuiProgress.vue.js +11 -0
  281. package/dist/components/progress/RuiProgress.vue.js.map +1 -0
  282. package/dist/components/progress/RuiProgress.vue2.js +98 -0
  283. package/dist/components/progress/RuiProgress.vue2.js.map +1 -0
  284. package/dist/components/progress/RuiProgress.vue3.js +48 -0
  285. package/dist/components/progress/RuiProgress.vue3.js.map +1 -0
  286. package/dist/components/steppers/RuiFooterStepper.vue.js +11 -0
  287. package/dist/components/steppers/RuiFooterStepper.vue.js.map +1 -0
  288. package/dist/components/steppers/RuiFooterStepper.vue2.js +143 -0
  289. package/dist/components/steppers/RuiFooterStepper.vue2.js.map +1 -0
  290. package/dist/components/steppers/RuiFooterStepper.vue3.js +31 -0
  291. package/dist/components/steppers/RuiFooterStepper.vue3.js.map +1 -0
  292. package/dist/components/steppers/RuiStepper.vue.d.ts +1 -1
  293. package/dist/components/steppers/RuiStepper.vue.js +11 -0
  294. package/dist/components/steppers/RuiStepper.vue.js.map +1 -0
  295. package/dist/components/steppers/RuiStepper.vue2.js +130 -0
  296. package/dist/components/steppers/RuiStepper.vue2.js.map +1 -0
  297. package/dist/components/steppers/RuiStepper.vue3.js +58 -0
  298. package/dist/components/steppers/RuiStepper.vue3.js.map +1 -0
  299. package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +1 -1
  300. package/dist/components/steppers/RuiStepperCustomIcon.vue.js +11 -0
  301. package/dist/components/steppers/RuiStepperCustomIcon.vue.js.map +1 -0
  302. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +38 -0
  303. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js.map +1 -0
  304. package/dist/components/steppers/RuiStepperCustomIcon.vue3.js +15 -0
  305. package/dist/components/steppers/RuiStepperCustomIcon.vue3.js.map +1 -0
  306. package/dist/components/steppers/RuiStepperIcon.vue.d.ts +1 -1
  307. package/dist/components/steppers/RuiStepperIcon.vue.js +11 -0
  308. package/dist/components/steppers/RuiStepperIcon.vue.js.map +1 -0
  309. package/dist/components/steppers/RuiStepperIcon.vue2.js +43 -0
  310. package/dist/components/steppers/RuiStepperIcon.vue2.js.map +1 -0
  311. package/dist/components/steppers/RuiStepperIcon.vue3.js +21 -0
  312. package/dist/components/steppers/RuiStepperIcon.vue3.js.map +1 -0
  313. package/dist/components/tables/RuiDataTable.vue.d.ts +2 -2
  314. package/dist/components/tables/RuiDataTable.vue.js +11 -0
  315. package/dist/components/tables/RuiDataTable.vue.js.map +1 -0
  316. package/dist/components/tables/RuiDataTable.vue2.js +943 -0
  317. package/dist/components/tables/RuiDataTable.vue2.js.map +1 -0
  318. package/dist/components/tables/RuiDataTable.vue3.js +79 -0
  319. package/dist/components/tables/RuiDataTable.vue3.js.map +1 -0
  320. package/dist/components/tables/RuiExpandButton.vue.d.ts +1 -1
  321. package/dist/components/tables/RuiExpandButton.vue.js +11 -0
  322. package/dist/components/tables/RuiExpandButton.vue.js.map +1 -0
  323. package/dist/components/tables/RuiExpandButton.vue2.js +42 -0
  324. package/dist/components/tables/RuiExpandButton.vue2.js.map +1 -0
  325. package/dist/components/tables/RuiExpandButton.vue3.js +15 -0
  326. package/dist/components/tables/RuiExpandButton.vue3.js.map +1 -0
  327. package/dist/components/tables/RuiTableHead.vue.js +11 -0
  328. package/dist/components/tables/RuiTableHead.vue.js.map +1 -0
  329. package/dist/components/tables/RuiTableHead.vue2.js +195 -0
  330. package/dist/components/tables/RuiTableHead.vue2.js.map +1 -0
  331. package/dist/components/tables/RuiTableHead.vue3.js +69 -0
  332. package/dist/components/tables/RuiTableHead.vue3.js.map +1 -0
  333. package/dist/components/tables/RuiTablePagination.vue.js +11 -0
  334. package/dist/components/tables/RuiTablePagination.vue.js.map +1 -0
  335. package/dist/components/tables/RuiTablePagination.vue2.js +196 -0
  336. package/dist/components/tables/RuiTablePagination.vue2.js.map +1 -0
  337. package/dist/components/tables/RuiTablePagination.vue3.js +28 -0
  338. package/dist/components/tables/RuiTablePagination.vue3.js.map +1 -0
  339. package/dist/components/tables/table_no_data_placeholder.svg.js +5 -0
  340. package/dist/components/tables/table_no_data_placeholder.svg.js.map +1 -0
  341. package/dist/components/tables/table_no_data_placeholder_dark.svg.js +5 -0
  342. package/dist/components/tables/table_no_data_placeholder_dark.svg.js.map +1 -0
  343. package/dist/components/tabs/tab/RuiTab.vue.d.ts +1 -1
  344. package/dist/components/tabs/tab/RuiTab.vue.js +11 -0
  345. package/dist/components/tabs/tab/RuiTab.vue.js.map +1 -0
  346. package/dist/components/tabs/tab/RuiTab.vue2.js +135 -0
  347. package/dist/components/tabs/tab/RuiTab.vue2.js.map +1 -0
  348. package/dist/components/tabs/tab/RuiTab.vue3.js +17 -0
  349. package/dist/components/tabs/tab/RuiTab.vue3.js.map +1 -0
  350. package/dist/components/tabs/tab-item/RuiTabItem.vue.js +11 -0
  351. package/dist/components/tabs/tab-item/RuiTabItem.vue.js.map +1 -0
  352. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +51 -0
  353. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -0
  354. package/dist/components/tabs/tab-item/RuiTabItem.vue3.js +9 -0
  355. package/dist/components/tabs/tab-item/RuiTabItem.vue3.js.map +1 -0
  356. package/dist/components/tabs/tab-items/RuiTabItems.vue.js +11 -0
  357. package/dist/components/tabs/tab-items/RuiTabItems.vue.js.map +1 -0
  358. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +90 -0
  359. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js.map +1 -0
  360. package/dist/components/tabs/tab-items/RuiTabItems.vue3.js +9 -0
  361. package/dist/components/tabs/tab-items/RuiTabItems.vue3.js.map +1 -0
  362. package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +1 -1
  363. package/dist/components/tabs/tabs/RuiTabs.vue.js +11 -0
  364. package/dist/components/tabs/tabs/RuiTabs.vue.js.map +1 -0
  365. package/dist/components/tabs/tabs/RuiTabs.vue2.js +281 -0
  366. package/dist/components/tabs/tabs/RuiTabs.vue2.js.map +1 -0
  367. package/dist/components/tabs/tabs/RuiTabs.vue3.js +20 -0
  368. package/dist/components/tabs/tabs/RuiTabs.vue3.js.map +1 -0
  369. package/dist/components/time-picker/RuiTimePicker.vue.d.ts +1 -1
  370. package/dist/components/time-picker/RuiTimePicker.vue.js +11 -0
  371. package/dist/components/time-picker/RuiTimePicker.vue.js.map +1 -0
  372. package/dist/components/time-picker/RuiTimePicker.vue2.js +414 -0
  373. package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -0
  374. package/dist/components/time-picker/RuiTimePicker.vue3.js +21 -0
  375. package/dist/components/time-picker/RuiTimePicker.vue3.js.map +1 -0
  376. package/dist/composables/breakpoint.js +49 -0
  377. package/dist/composables/breakpoint.js.map +1 -0
  378. package/dist/composables/defaults/table.js +23 -0
  379. package/dist/composables/defaults/table.js.map +1 -0
  380. package/dist/composables/dropdown-menu.js +218 -0
  381. package/dist/composables/dropdown-menu.js.map +1 -0
  382. package/dist/composables/forms/auto-complete/focus.js +71 -0
  383. package/dist/composables/forms/auto-complete/focus.js.map +1 -0
  384. package/dist/composables/forms/auto-complete/index.d.ts +4 -4
  385. package/dist/composables/forms/auto-complete/keyboard-navigation.js +133 -0
  386. package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -0
  387. package/dist/composables/forms/auto-complete/search.js +93 -0
  388. package/dist/composables/forms/auto-complete/search.js.map +1 -0
  389. package/dist/composables/forms/auto-complete/value.js +129 -0
  390. package/dist/composables/forms/auto-complete/value.js.map +1 -0
  391. package/dist/composables/icons.js +60 -0
  392. package/dist/composables/icons.js.map +1 -0
  393. package/dist/composables/index.d.ts +3 -3
  394. package/dist/composables/index.js +9 -0
  395. package/dist/composables/index.js.map +1 -0
  396. package/dist/composables/popper.js +164 -0
  397. package/dist/composables/popper.js.map +1 -0
  398. package/dist/composables/sticky-header.js +105 -0
  399. package/dist/composables/sticky-header.js.map +1 -0
  400. package/dist/composables/theme.d.ts +1 -1
  401. package/dist/composables/theme.js +75 -0
  402. package/dist/composables/theme.js.map +1 -0
  403. package/dist/composables/timeout-manager.js +21 -0
  404. package/dist/composables/timeout-manager.js.map +1 -0
  405. package/dist/composables/use-rui-i18n.js +24 -0
  406. package/dist/composables/use-rui-i18n.js.map +1 -0
  407. package/dist/consts/colors.js +50 -0
  408. package/dist/consts/colors.js.map +1 -0
  409. package/dist/consts/time-accuracy.js +9 -0
  410. package/dist/consts/time-accuracy.js.map +1 -0
  411. package/dist/i18n/keys.js +20 -0
  412. package/dist/i18n/keys.js.map +1 -0
  413. package/dist/icons/icons_1.js +2503 -0
  414. package/dist/icons/icons_1.js.map +1 -0
  415. package/dist/icons/icons_2.js +2503 -0
  416. package/dist/icons/icons_2.js.map +1 -0
  417. package/dist/icons/icons_3.js +2503 -0
  418. package/dist/icons/icons_3.js.map +1 -0
  419. package/dist/icons/icons_4.js +923 -0
  420. package/dist/icons/icons_4.js.map +1 -0
  421. package/dist/icons/index.d.ts +4 -4
  422. package/dist/icons/index.js +9 -0
  423. package/dist/icons/index.js.map +1 -0
  424. package/dist/index.d.ts +11 -11
  425. package/dist/index.js +1852 -0
  426. package/dist/index.js.map +1 -0
  427. package/dist/style.css +12852 -1
  428. package/dist/theme/index.js +185 -0
  429. package/dist/theme/index.js.map +1 -0
  430. package/dist/types/stepper.js +17 -0
  431. package/dist/types/stepper.js.map +1 -0
  432. package/dist/types/theme.js +27 -0
  433. package/dist/types/theme.js.map +1 -0
  434. package/dist/utils/assert.js +14 -0
  435. package/dist/utils/assert.js.map +1 -0
  436. package/dist/utils/blockie.js +79 -0
  437. package/dist/utils/blockie.js.map +1 -0
  438. package/dist/utils/form-text-detail.js +31 -0
  439. package/dist/utils/form-text-detail.js.map +1 -0
  440. package/dist/utils/generate-id.js +21 -0
  441. package/dist/utils/generate-id.js.map +1 -0
  442. package/dist/utils/helpers.js +51 -0
  443. package/dist/utils/helpers.js.map +1 -0
  444. package/dist/utils/is-equal.js +33 -0
  445. package/dist/utils/is-equal.js.map +1 -0
  446. package/dist/web-types.json +1 -1
  447. package/package.json +16 -14
  448. package/dist/components/index.es.js +0 -8030
  449. package/dist/composables/index-CC7A7CEh.js +0 -737
  450. package/dist/composables/index.es.js +0 -7
  451. package/dist/consts/colors-D563Ic3q.js +0 -48
  452. package/dist/consts/forms/auto-complete/index-l0sNRNKZ.js +0 -2
  453. package/dist/consts/time-accuracy-BnKA5GyT.js +0 -9
  454. package/dist/i18n/keys-CNGXWOJX.js +0 -20
  455. package/dist/icons/icons_1.es.js +0 -2004
  456. package/dist/icons/icons_2.es.js +0 -2004
  457. package/dist/icons/icons_3.es.js +0 -2004
  458. package/dist/icons/icons_4.es.js +0 -740
  459. package/dist/icons/index.es.js +0 -1697
  460. package/dist/index-D7l4d7N2.js +0 -54
  461. package/dist/index.es.js +0 -1757
  462. package/dist/theme/index.es.js +0 -177
  463. package/dist/types/index-CN6Ip1GL.js +0 -39
  464. package/dist/utils/index-DJ-ueLCs.js +0 -158
  465. package/dist/vendor-Hqbg5uCG.js +0 -1931
@@ -0,0 +1,218 @@
1
+ import { computed, ref, watch, nextTick } from "vue";
2
+ import { get, set } from "@vueuse/shared";
3
+ import { useVirtualList, useArrayMap, watchOnce } from "@vueuse/core";
4
+ function useDropdownOptionProperty({
5
+ keyAttr,
6
+ textAttr
7
+ }) {
8
+ function getText(item) {
9
+ if (textAttr) {
10
+ if (typeof textAttr === "function")
11
+ return textAttr(item);
12
+ else
13
+ return item[textAttr]?.toString();
14
+ }
15
+ return item?.toString();
16
+ }
17
+ function getIdentifier(item) {
18
+ if (keyAttr)
19
+ return item[keyAttr];
20
+ return item;
21
+ }
22
+ return {
23
+ getIdentifier,
24
+ getText
25
+ };
26
+ }
27
+ function useDropdownMenu({
28
+ appendWidth,
29
+ autoFocus,
30
+ autoSelectFirst,
31
+ dense,
32
+ disabled = ref(false),
33
+ hideSelected,
34
+ itemHeight = 48,
35
+ keyAttr,
36
+ menuRef,
37
+ options: allOptions,
38
+ overscan = 5,
39
+ prependWidth,
40
+ setValue,
41
+ textAttr,
42
+ value
43
+ }) {
44
+ const options = computed(() => {
45
+ const options2 = get(allOptions);
46
+ if (!hideSelected)
47
+ return options2;
48
+ return options2.filter((item) => !isActiveItem(item));
49
+ });
50
+ const { getIdentifier, getText } = useDropdownOptionProperty({
51
+ keyAttr,
52
+ textAttr
53
+ });
54
+ const { containerProps, list, scrollTo, wrapperProps } = useVirtualList(
55
+ options,
56
+ {
57
+ itemHeight,
58
+ overscan
59
+ }
60
+ );
61
+ const renderedData = useArrayMap(list, ({ data, index: _index }) => ({ _index, item: data }));
62
+ const isOpen = ref(false);
63
+ const valueKey = computed(() => {
64
+ const selected = get(value);
65
+ if (!keyAttr || !selected)
66
+ return selected;
67
+ return Array.isArray(selected) ? selected.map((item) => item[keyAttr]) : selected[keyAttr];
68
+ });
69
+ const highlightedIndex = ref(get(autoSelectFirst) ? 0 : -1);
70
+ const menuWidth = computed(() => {
71
+ const widths = { max: 0, min: 0 };
72
+ const maxWidth = 30;
73
+ const paddingX = 1.5;
74
+ const fontMultiplier = get(dense) ? 12 : 13;
75
+ get(options).forEach((option) => {
76
+ const length = getText(option)?.toString()?.length ?? 0;
77
+ if (widths.min === 0 && widths.max === 0) {
78
+ widths.min = length;
79
+ widths.max = length;
80
+ } else if (length < widths.min) {
81
+ widths.min = length;
82
+ } else if (length > widths.max) {
83
+ widths.max = length;
84
+ }
85
+ });
86
+ const difference = widths.max - widths.min;
87
+ function computeValue(width) {
88
+ const additionalWidths = (prependWidth ? prependWidth + 0.5 : 0) + (appendWidth ? appendWidth + 0.5 : 0);
89
+ return `${Math.min(width * fontMultiplier / 16 + paddingX + additionalWidths, maxWidth)}rem`;
90
+ }
91
+ if (difference <= 5)
92
+ return computeValue(widths.max);
93
+ return computeValue(widths.min + difference / 2);
94
+ });
95
+ function toggle(state = false) {
96
+ set(isOpen, state);
97
+ }
98
+ function itemIndexInValue(item) {
99
+ const val = get(value);
100
+ const selected = Array.isArray(val) ? val : val ? [val] : [];
101
+ if (selected.length === 0)
102
+ return -1;
103
+ return selected.findIndex((selectedItem) => {
104
+ if (keyAttr)
105
+ return selectedItem[keyAttr] === item[keyAttr];
106
+ return selectedItem === item;
107
+ });
108
+ }
109
+ function isActiveItem(item) {
110
+ return itemIndexInValue(item) !== -1;
111
+ }
112
+ async function adjustScrollByHighlightedIndex(smooth = false) {
113
+ const index = get(highlightedIndex);
114
+ if (index > -1) {
115
+ await nextTick(() => {
116
+ const container = get(menuRef)?.parentElement;
117
+ if (container) {
118
+ const highlightedElem = get(menuRef).getElementsByClassName("highlighted")[0];
119
+ if (highlightedElem) {
120
+ highlightedElem.scrollIntoView?.({ behavior: smooth ? "smooth" : "auto", block: "nearest" });
121
+ if (get(autoFocus) && "focus" in highlightedElem && typeof highlightedElem.focus === "function")
122
+ highlightedElem?.focus();
123
+ } else {
124
+ scrollTo(index);
125
+ if (get(autoFocus)) {
126
+ const elem = get(menuRef).getElementsByClassName("highlighted")[0];
127
+ if (elem && "focus" in elem && typeof elem.focus === "function")
128
+ elem.focus();
129
+ }
130
+ }
131
+ }
132
+ });
133
+ }
134
+ }
135
+ async function updateOpen(open) {
136
+ await nextTick(() => {
137
+ if (open) {
138
+ const val = get(value);
139
+ if (Array.isArray(val) && val.length > 0 || !!val) {
140
+ const index = get(options).findIndex(isActiveItem);
141
+ if (index > -1)
142
+ set(highlightedIndex, index);
143
+ }
144
+ watchOnce(list, async () => {
145
+ await adjustScrollByHighlightedIndex();
146
+ });
147
+ }
148
+ });
149
+ }
150
+ watch([isOpen, disabled], async ([open, _]) => {
151
+ await updateOpen(open);
152
+ });
153
+ watch(highlightedIndex, async (curr, prev) => {
154
+ if (curr !== prev)
155
+ await adjustScrollByHighlightedIndex(true);
156
+ });
157
+ watch(options, async () => {
158
+ if (get(highlightedIndex) !== -1) {
159
+ if (get(autoSelectFirst)) {
160
+ set(highlightedIndex, 0);
161
+ await adjustScrollByHighlightedIndex();
162
+ } else {
163
+ set(highlightedIndex, -1);
164
+ scrollTo(0);
165
+ }
166
+ } else {
167
+ scrollTo(0);
168
+ }
169
+ });
170
+ const moveHighlight = (up) => {
171
+ if (!get(isOpen)) {
172
+ toggle(true);
173
+ return;
174
+ }
175
+ let position = get(highlightedIndex);
176
+ const move = up ? -1 : 1;
177
+ position += move;
178
+ const total = get(options).length;
179
+ if (position >= total)
180
+ set(highlightedIndex, 0);
181
+ else if (position < 0)
182
+ set(highlightedIndex, total - 1);
183
+ else
184
+ set(highlightedIndex, position);
185
+ };
186
+ const applyHighlighted = () => {
187
+ if (!setValue || !get(isOpen))
188
+ return;
189
+ const highlightedIndexVal = get(highlightedIndex);
190
+ if (highlightedIndexVal === -1)
191
+ return;
192
+ const entry = get(options).find((_data, index) => highlightedIndexVal === index);
193
+ if (entry)
194
+ setValue(entry);
195
+ };
196
+ return {
197
+ applyHighlighted,
198
+ containerProps,
199
+ getIdentifier,
200
+ getText,
201
+ highlightedIndex,
202
+ isActiveItem,
203
+ isOpen,
204
+ itemIndexInValue,
205
+ menuWidth,
206
+ moveHighlight,
207
+ optionsWithSelectedHidden: options,
208
+ renderedData,
209
+ toggle,
210
+ valueKey,
211
+ wrapperProps
212
+ };
213
+ }
214
+ export {
215
+ useDropdownMenu,
216
+ useDropdownOptionProperty
217
+ };
218
+ //# sourceMappingURL=dropdown-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.js","sources":["../../src/composables/dropdown-menu.ts"],"sourcesContent":["import type { Ref } from 'vue';\n\nexport type KeyOfType<T, V> = T extends string | number | boolean | symbol | null | undefined\n ? never\n : V extends object\n ? keyof T\n : keyof {\n [P in keyof T as T[P] extends V\n ? P\n : V extends T[P]\n ? P\n : never]: any\n };\n\nexport interface DropdownItemAttr<TValue, TItem> {\n keyAttr?: KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>;\n textAttr?: keyof TItem | ((item: TItem) => string);\n}\n\nexport interface DropdownOptions<TValue, TItem> {\n options: Ref<TItem[]>;\n dense?: Ref<boolean>;\n disabled?: Ref<boolean>;\n value: Ref<TItem | TItem[] | undefined>;\n menuRef: Ref<HTMLElement>;\n keyAttr?: KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>;\n textAttr?: keyof TItem | ((item: TItem) => string);\n appendWidth?: number;\n prependWidth?: number;\n itemHeight?: number;\n overscan?: number;\n autoSelectFirst?: boolean;\n autoFocus?: boolean;\n setValue?: (val: TItem) => void;\n hideSelected?: boolean;\n}\n\nexport function useDropdownOptionProperty<TValue, TItem>({\n keyAttr,\n textAttr,\n}: DropdownItemAttr<TValue, TItem>) {\n function getText(item: TItem): string | undefined {\n if (textAttr) {\n if (typeof textAttr === 'function')\n return textAttr(item);\n\n else\n return item[textAttr]?.toString();\n }\n\n return item?.toString();\n }\n\n function getIdentifier(item: TItem): TItem | TItem[KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>] {\n if (keyAttr)\n return item[keyAttr];\n\n return item;\n }\n\n return {\n getIdentifier,\n getText,\n };\n}\n\nexport function useDropdownMenu<TValue, TItem>({\n appendWidth,\n autoFocus,\n autoSelectFirst,\n dense,\n disabled = ref(false),\n hideSelected,\n itemHeight = 48,\n keyAttr,\n menuRef,\n options: allOptions,\n overscan = 5,\n prependWidth,\n setValue,\n textAttr,\n value,\n}: DropdownOptions<TValue, TItem>) {\n const options = computed(() => {\n const options = get(allOptions);\n if (!hideSelected)\n return options;\n\n return options.filter(item => !isActiveItem(item));\n });\n\n const { getIdentifier, getText } = useDropdownOptionProperty({\n keyAttr,\n textAttr,\n });\n\n const { containerProps, list, scrollTo, wrapperProps } = useVirtualList<TItem>(\n options,\n {\n itemHeight,\n overscan,\n },\n );\n\n const renderedData = useArrayMap(list, ({ data, index: _index }) => ({ _index, item: data }));\n\n const isOpen = ref(false);\n\n const valueKey = computed(() => {\n const selected = get(value);\n if (!keyAttr || !selected)\n return selected;\n return Array.isArray(selected) ? selected.map(item => item[keyAttr]) : selected[keyAttr];\n });\n\n const highlightedIndex: Ref<number> = ref(get(autoSelectFirst) ? 0 : -1);\n\n const menuWidth = computed(() => {\n const widths = { max: 0, min: 0 };\n const maxWidth = 30;\n const paddingX = 1.5;\n const fontMultiplier = get(dense) ? 12 : 13;\n\n get(options).forEach((option) => {\n const length = getText(option)?.toString()?.length ?? 0;\n if (widths.min === 0 && widths.max === 0) {\n widths.min = length;\n widths.max = length;\n }\n else if (length < widths.min) {\n widths.min = length;\n }\n else if (length > widths.max) {\n widths.max = length;\n }\n });\n\n const difference = widths.max - widths.min;\n\n function computeValue(width: number) {\n const additionalWidths = (prependWidth ? prependWidth + 0.5 : 0) + (appendWidth ? appendWidth + 0.5 : 0);\n return `${Math.min((width * fontMultiplier) / 16 + paddingX + additionalWidths, maxWidth)}rem`;\n }\n\n if (difference <= 5)\n return computeValue(widths.max);\n\n return computeValue(widths.min + difference / 2);\n });\n\n function toggle(state: boolean = false) {\n set(isOpen, state);\n }\n\n function itemIndexInValue(item: TItem): number {\n const val = get(value);\n const selected: TItem[] = Array.isArray(val) ? val : (val ? [val] : []);\n\n if (selected.length === 0)\n return -1;\n\n return selected.findIndex((selectedItem) => {\n if (keyAttr)\n return selectedItem[keyAttr] === item[keyAttr];\n return selectedItem === item;\n });\n }\n\n function isActiveItem(item: TItem): boolean {\n return itemIndexInValue(item) !== -1;\n }\n\n async function adjustScrollByHighlightedIndex(smooth: boolean = false) {\n const index = get(highlightedIndex);\n if (index > -1) {\n await nextTick(() => {\n const container = get(menuRef)?.parentElement;\n if (container) {\n const highlightedElem = get(menuRef).getElementsByClassName('highlighted')[0];\n\n if (highlightedElem) {\n highlightedElem.scrollIntoView?.({ behavior: smooth ? 'smooth' : 'auto', block: 'nearest' });\n if (get(autoFocus) && 'focus' in highlightedElem && typeof highlightedElem.focus === 'function')\n highlightedElem?.focus();\n }\n else {\n scrollTo(index);\n if (get(autoFocus)) {\n const elem = get(menuRef).getElementsByClassName('highlighted')[0];\n if (elem && 'focus' in elem && typeof elem.focus === 'function')\n elem.focus();\n }\n }\n }\n });\n }\n }\n\n async function updateOpen(open: boolean) {\n await nextTick(() => {\n if (open) {\n const val = get(value);\n\n // set highlighted index to active item\n if ((Array.isArray(val) && val.length > 0) || !!val) {\n const index = get(options).findIndex(isActiveItem);\n if (index > -1)\n set(highlightedIndex, index);\n }\n\n watchOnce(list, async () => {\n await adjustScrollByHighlightedIndex();\n });\n }\n });\n }\n\n watch([isOpen, disabled], async ([open, _]) => {\n await updateOpen(open);\n });\n\n watch(highlightedIndex, async (curr, prev) => {\n if (curr !== prev)\n await adjustScrollByHighlightedIndex(true);\n });\n\n watch(options, async () => {\n if (get(highlightedIndex) !== -1) {\n if (get(autoSelectFirst)) {\n set(highlightedIndex, 0);\n await adjustScrollByHighlightedIndex();\n }\n else {\n set(highlightedIndex, -1);\n scrollTo(0);\n }\n }\n else {\n scrollTo(0);\n }\n });\n\n const moveHighlight = (up: boolean) => {\n if (!get(isOpen)) {\n toggle(true);\n return;\n }\n\n let position = get(highlightedIndex);\n const move = up ? -1 : 1;\n\n position += move;\n\n const total = get(options).length;\n\n if (position >= total)\n set(highlightedIndex, 0);\n else if (position < 0)\n set(highlightedIndex, total - 1);\n else\n set(highlightedIndex, position);\n };\n\n const applyHighlighted = () => {\n if (!setValue || !get(isOpen))\n return;\n\n const highlightedIndexVal = get(highlightedIndex);\n if (highlightedIndexVal === -1)\n return;\n\n const entry = get(options).find((_data, index) => highlightedIndexVal === index);\n if (entry)\n setValue(entry);\n };\n\n return {\n applyHighlighted,\n containerProps,\n getIdentifier,\n getText,\n highlightedIndex,\n isActiveItem,\n isOpen,\n itemIndexInValue,\n menuWidth,\n moveHighlight,\n optionsWithSelectedHidden: options,\n renderedData,\n toggle,\n valueKey,\n wrapperProps,\n };\n}\n"],"names":["options"],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { computed, nextTick } from "vue";
2
+ import { get, set } from "@vueuse/shared";
3
+ import { watchDebounced } from "@vueuse/core";
4
+ function useAutoCompleteFocus(options, deps) {
5
+ const anyFocused = computed(
6
+ () => get(deps.activatorFocusedWithin) || get(deps.menuWrapperFocusedWithin)
7
+ );
8
+ const inputClass = computed(() => {
9
+ const isFocused = get(anyFocused);
10
+ const isDisabled = get(options.disabled);
11
+ const shouldApply = get(options.shouldApplyValueAsSearch);
12
+ const hasSearch = get(deps.internalSearch);
13
+ if ((!isFocused || isDisabled) && !shouldApply)
14
+ return "w-0 h-0";
15
+ if (hasSearch)
16
+ return "flex-1 min-w-[4rem]";
17
+ return "flex-1 min-w-0";
18
+ });
19
+ async function setInputFocus() {
20
+ await nextTick(() => {
21
+ set(deps.searchInputFocused, true);
22
+ });
23
+ }
24
+ async function onActivatorFocused() {
25
+ await nextTick(() => {
26
+ if (!get(deps.activatorFocused)) {
27
+ set(deps.searchInputFocused, true);
28
+ }
29
+ });
30
+ }
31
+ function onInputFocused() {
32
+ set(deps.focusedValueIndex, -1);
33
+ const shouldApply = get(options.shouldApplyValueAsSearch);
34
+ if (shouldApply) {
35
+ const textInput = get(deps.textInput);
36
+ textInput?.select();
37
+ }
38
+ if (!get(deps.isOpen)) {
39
+ set(deps.justOpened, true);
40
+ }
41
+ }
42
+ watchDebounced(anyFocused, (focused) => {
43
+ if (!focused) {
44
+ set(deps.isOpen, false);
45
+ const customValue = get(options.customValue);
46
+ const filteredOptions = get(deps.filteredOptions);
47
+ const internalSearch = get(deps.internalSearch);
48
+ if (customValue && filteredOptions.length === 0 && internalSearch) {
49
+ deps.setSearchAsValue();
50
+ }
51
+ const shouldApply = get(options.shouldApplyValueAsSearch);
52
+ if (!shouldApply) {
53
+ deps.updateInternalSearch();
54
+ }
55
+ }
56
+ }, {
57
+ debounce: 200,
58
+ maxWait: 400
59
+ });
60
+ return {
61
+ anyFocused,
62
+ inputClass,
63
+ onActivatorFocused,
64
+ onInputFocused,
65
+ setInputFocus
66
+ };
67
+ }
68
+ export {
69
+ useAutoCompleteFocus
70
+ };
71
+ //# sourceMappingURL=focus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus.js","sources":["../../../../src/composables/forms/auto-complete/focus.ts"],"sourcesContent":["import type { ComputedRef, MaybeRef, Ref } from 'vue';\n\nexport interface UseAutoCompleteFocusOptions {\n customValue: MaybeRef<boolean>;\n shouldApplyValueAsSearch: MaybeRef<boolean>;\n disabled: MaybeRef<boolean>;\n}\n\nexport interface UseAutoCompleteFocusDeps<TItem> {\n activatorFocused: Ref<boolean>;\n activatorFocusedWithin: Ref<boolean>;\n focusedValueIndex: Ref<number>;\n filteredOptions: Ref<TItem[]>;\n internalSearch: Ref<string>;\n isOpen: Ref<boolean>;\n justOpened: Ref<boolean>;\n menuWrapperFocusedWithin: Ref<boolean>;\n searchInputFocused: Ref<boolean>;\n textInput: Ref<HTMLInputElement | undefined>;\n setSearchAsValue: () => void;\n updateInternalSearch: (value?: string) => void;\n}\n\nexport interface UseAutoCompleteFocusReturn {\n anyFocused: ComputedRef<boolean>;\n inputClass: ComputedRef<string>;\n onActivatorFocused: () => Promise<void>;\n onInputFocused: () => void;\n setInputFocus: () => Promise<void>;\n}\n\nexport function useAutoCompleteFocus<TItem>(\n options: UseAutoCompleteFocusOptions,\n deps: UseAutoCompleteFocusDeps<TItem>,\n): UseAutoCompleteFocusReturn {\n const anyFocused = computed<boolean>(() =>\n get(deps.activatorFocusedWithin) || get(deps.menuWrapperFocusedWithin),\n );\n\n const inputClass = computed<string>(() => {\n const isFocused = get(anyFocused);\n const isDisabled = get(options.disabled);\n const shouldApply = get(options.shouldApplyValueAsSearch);\n const hasSearch = get(deps.internalSearch);\n\n if ((!isFocused || isDisabled) && !shouldApply)\n return 'w-0 h-0';\n if (hasSearch)\n return 'flex-1 min-w-[4rem]';\n return 'flex-1 min-w-0';\n });\n\n async function setInputFocus(): Promise<void> {\n await nextTick(() => {\n set(deps.searchInputFocused, true);\n });\n }\n\n async function onActivatorFocused(): Promise<void> {\n await nextTick(() => {\n if (!get(deps.activatorFocused)) {\n set(deps.searchInputFocused, true);\n }\n });\n }\n\n function onInputFocused(): void {\n set(deps.focusedValueIndex, -1);\n\n const shouldApply = get(options.shouldApplyValueAsSearch);\n if (shouldApply) {\n const textInput = get(deps.textInput);\n textInput?.select();\n }\n\n if (!get(deps.isOpen)) {\n set(deps.justOpened, true);\n }\n }\n\n // Close menu if the activator is not focused anymore\n // Using debounced to avoid the menu closing momentarily while focus switches.\n watchDebounced(anyFocused, (focused) => {\n if (!focused) {\n set(deps.isOpen, false);\n\n const customValue = get(options.customValue);\n const filteredOptions = get(deps.filteredOptions);\n const internalSearch = get(deps.internalSearch);\n\n if (customValue && filteredOptions.length === 0 && internalSearch) {\n deps.setSearchAsValue();\n }\n\n const shouldApply = get(options.shouldApplyValueAsSearch);\n if (!shouldApply) {\n deps.updateInternalSearch();\n }\n }\n }, {\n debounce: 200,\n maxWait: 400,\n });\n\n return {\n anyFocused,\n inputClass,\n onActivatorFocused,\n onInputFocused,\n setInputFocus,\n };\n}\n"],"names":[],"mappings":";;;AA+BO,SAAS,qBACd,SACA,MAC4B;AAC5B,QAAM,aAAa;AAAA,IAAkB,MACnC,IAAI,KAAK,sBAAsB,KAAK,IAAI,KAAK,wBAAwB;AAAA,EAAA;AAGvE,QAAM,aAAa,SAAiB,MAAM;AACxC,UAAM,YAAY,IAAI,UAAU;AAChC,UAAM,aAAa,IAAI,QAAQ,QAAQ;AACvC,UAAM,cAAc,IAAI,QAAQ,wBAAwB;AACxD,UAAM,YAAY,IAAI,KAAK,cAAc;AAEzC,SAAK,CAAC,aAAa,eAAe,CAAC;AACjC,aAAO;AACT,QAAI;AACF,aAAO;AACT,WAAO;AAAA,EACT,CAAC;AAED,iBAAe,gBAA+B;AAC5C,UAAM,SAAS,MAAM;AACnB,UAAI,KAAK,oBAAoB,IAAI;AAAA,IACnC,CAAC;AAAA,EACH;AAEA,iBAAe,qBAAoC;AACjD,UAAM,SAAS,MAAM;AACnB,UAAI,CAAC,IAAI,KAAK,gBAAgB,GAAG;AAC/B,YAAI,KAAK,oBAAoB,IAAI;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,iBAAuB;AAC9B,QAAI,KAAK,mBAAmB,EAAE;AAE9B,UAAM,cAAc,IAAI,QAAQ,wBAAwB;AACxD,QAAI,aAAa;AACf,YAAM,YAAY,IAAI,KAAK,SAAS;AACpC,iBAAW,OAAA;AAAA,IACb;AAEA,QAAI,CAAC,IAAI,KAAK,MAAM,GAAG;AACrB,UAAI,KAAK,YAAY,IAAI;AAAA,IAC3B;AAAA,EACF;AAIA,iBAAe,YAAY,CAAC,YAAY;AACtC,QAAI,CAAC,SAAS;AACZ,UAAI,KAAK,QAAQ,KAAK;AAEtB,YAAM,cAAc,IAAI,QAAQ,WAAW;AAC3C,YAAM,kBAAkB,IAAI,KAAK,eAAe;AAChD,YAAM,iBAAiB,IAAI,KAAK,cAAc;AAE9C,UAAI,eAAe,gBAAgB,WAAW,KAAK,gBAAgB;AACjE,aAAK,iBAAA;AAAA,MACP;AAEA,YAAM,cAAc,IAAI,QAAQ,wBAAwB;AACxD,UAAI,CAAC,aAAa;AAChB,aAAK,qBAAA;AAAA,MACP;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD,UAAU;AAAA,IACV,SAAS;AAAA,EAAA,CACV;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
@@ -7,7 +7,7 @@ export declare function useAutoCompleteProps<T extends object>(props: {
7
7
  getTextValue: (item: T) => string | undefined;
8
8
  isItemDisabled: (item: T) => boolean;
9
9
  };
10
- export * from './focus';
11
- export * from './keyboard-navigation';
12
- export * from './search';
13
- export * from './value';
10
+ export * from './focus.js';
11
+ export * from './keyboard-navigation.js';
12
+ export * from './search.js';
13
+ export * from './value.js';
@@ -0,0 +1,133 @@
1
+ import { get, set } from "@vueuse/shared";
2
+ import { ref, watch, nextTick } from "vue";
3
+ function useAutoCompleteKeyboardNavigation(options, deps) {
4
+ const focusedValueIndex = ref(-1);
5
+ const chipElementsCache = ref(/* @__PURE__ */ new Map());
6
+ function setValueFocus(index) {
7
+ set(focusedValueIndex, index);
8
+ }
9
+ function moveSelectedValueHighlight(event, next) {
10
+ const multiple = get(options.multiple);
11
+ const internalSearchValue = get(deps.internalSearch);
12
+ if (!multiple || internalSearchValue.length > 0)
13
+ return;
14
+ event.preventDefault();
15
+ const total = get(deps.value).length;
16
+ let current = get(focusedValueIndex);
17
+ if (current === -1) {
18
+ set(focusedValueIndex, next ? 0 : total - 1);
19
+ return;
20
+ }
21
+ const move = next ? 1 : -1;
22
+ current += move;
23
+ if (current < 0 || current >= total) {
24
+ set(focusedValueIndex, -1);
25
+ set(deps.searchInputFocused, true);
26
+ } else {
27
+ set(focusedValueIndex, current);
28
+ }
29
+ }
30
+ function onEnter(event) {
31
+ const filteredOptions = get(deps.filteredOptions);
32
+ const highlightedIndex = get(deps.highlightedIndex);
33
+ const isOpen = get(deps.isOpen);
34
+ const customValue = get(options.customValue);
35
+ const multiple = get(options.multiple);
36
+ const value = get(deps.value);
37
+ const internalSearch = get(deps.internalSearch);
38
+ if (customValue && internalSearch && isOpen) {
39
+ let hasExactMatch = false;
40
+ if (highlightedIndex > -1 && highlightedIndex < filteredOptions.length) {
41
+ const highlightedOption = filteredOptions[highlightedIndex];
42
+ if (typeof highlightedOption === "string") {
43
+ hasExactMatch = highlightedOption === internalSearch;
44
+ } else if (highlightedOption && typeof highlightedOption === "object") {
45
+ const label = highlightedOption.label || highlightedOption.value || "";
46
+ hasExactMatch = label === internalSearch;
47
+ }
48
+ }
49
+ if (!hasExactMatch) {
50
+ deps.setSearchAsValue();
51
+ if (!multiple)
52
+ set(deps.isOpen, false);
53
+ event.preventDefault();
54
+ return;
55
+ }
56
+ }
57
+ if (filteredOptions.length > 0 && highlightedIndex > -1 && isOpen) {
58
+ deps.applyHighlighted();
59
+ event.preventDefault();
60
+ } else if (filteredOptions.length === 0 && customValue && internalSearch) {
61
+ deps.setSearchAsValue();
62
+ if (!multiple)
63
+ set(deps.isOpen, false);
64
+ event.preventDefault();
65
+ } else if (!isOpen && value.length === 0) {
66
+ set(deps.isOpen, true);
67
+ event.preventDefault();
68
+ } else {
69
+ const activator = get(deps.activator);
70
+ const form = activator?.closest("form");
71
+ if (form) {
72
+ form.dispatchEvent(new Event("submit"));
73
+ }
74
+ }
75
+ }
76
+ function onTab(event) {
77
+ const isOpen = get(deps.isOpen);
78
+ const filteredOptions = get(deps.filteredOptions);
79
+ const highlightedIndex = get(deps.highlightedIndex);
80
+ const multiple = get(options.multiple);
81
+ if (isOpen && filteredOptions.length > 0 && highlightedIndex > -1 && !multiple) {
82
+ deps.applyHighlighted();
83
+ event.preventDefault();
84
+ }
85
+ }
86
+ function onInputDeletePressed() {
87
+ const internalSearch = get(deps.internalSearch);
88
+ const value = get(deps.value);
89
+ const total = value.length;
90
+ const multiple = get(options.multiple);
91
+ if (!internalSearch && total > 0) {
92
+ if (multiple)
93
+ set(focusedValueIndex, total - 1);
94
+ else
95
+ deps.clear();
96
+ }
97
+ }
98
+ watch(deps.value, () => {
99
+ setValueFocus(-1);
100
+ get(chipElementsCache).clear();
101
+ });
102
+ watch(focusedValueIndex, async (index) => {
103
+ const multiple = get(options.multiple);
104
+ if (index === -1 || !multiple)
105
+ return;
106
+ await nextTick(() => {
107
+ const cache = get(chipElementsCache);
108
+ let activeChip = cache.get(index);
109
+ if (!activeChip) {
110
+ const activator = get(deps.activator);
111
+ const element = activator?.querySelector(`[data-index="${index}"]`);
112
+ if (element) {
113
+ activeChip = element;
114
+ cache.set(index, element);
115
+ }
116
+ }
117
+ if (activeChip && "focus" in activeChip && typeof activeChip.focus === "function")
118
+ activeChip.focus();
119
+ });
120
+ });
121
+ return {
122
+ focusedValueIndex,
123
+ moveSelectedValueHighlight,
124
+ onEnter,
125
+ onInputDeletePressed,
126
+ onTab,
127
+ setValueFocus
128
+ };
129
+ }
130
+ export {
131
+ useAutoCompleteKeyboardNavigation
132
+ };
133
+ //# sourceMappingURL=keyboard-navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard-navigation.js","sources":["../../../../src/composables/forms/auto-complete/keyboard-navigation.ts"],"sourcesContent":["import type { MaybeRef, Ref } from 'vue';\nimport { get, set } from '@vueuse/shared';\n\nexport interface UseAutoCompleteKeyboardNavigationOptions {\n multiple: MaybeRef<boolean>;\n customValue: MaybeRef<boolean>;\n}\n\nexport interface UseAutoCompleteKeyboardNavigationDeps<TItem> {\n internalSearch: Ref<string>;\n value: Ref<TItem[]>;\n filteredOptions: Ref<TItem[]>;\n options: Ref<TItem[]>;\n isOpen: Ref<boolean>;\n highlightedIndex: Ref<number>;\n searchInputFocused: Ref<boolean>;\n applyHighlighted: () => void;\n clear: () => void;\n setSearchAsValue: () => void;\n activator: Ref<HTMLElement | undefined>;\n}\n\nexport interface UseAutoCompleteKeyboardNavigationReturn {\n focusedValueIndex: Ref<number>;\n moveSelectedValueHighlight: (event: KeyboardEvent, next: boolean) => void;\n onEnter: (event: KeyboardEvent) => void;\n onTab: (event: KeyboardEvent) => void;\n onInputDeletePressed: () => void;\n setValueFocus: (index: number) => void;\n}\n\nexport function useAutoCompleteKeyboardNavigation<TItem>(\n options: UseAutoCompleteKeyboardNavigationOptions,\n deps: UseAutoCompleteKeyboardNavigationDeps<TItem>,\n): UseAutoCompleteKeyboardNavigationReturn {\n const focusedValueIndex = ref<number>(-1);\n const chipElementsCache = ref<Map<number, HTMLElement>>(new Map());\n\n function setValueFocus(index: number): void {\n set(focusedValueIndex, index);\n }\n\n function moveSelectedValueHighlight(event: KeyboardEvent, next: boolean): void {\n const multiple = get(options.multiple);\n const internalSearchValue = get(deps.internalSearch);\n\n if (!multiple || internalSearchValue.length > 0)\n return;\n\n event.preventDefault();\n const total = get(deps.value).length;\n\n let current = get(focusedValueIndex);\n\n if (current === -1) {\n set(focusedValueIndex, next ? 0 : total - 1);\n return;\n }\n\n const move = next ? 1 : -1;\n current += move;\n\n if (current < 0 || current >= total) {\n set(focusedValueIndex, -1);\n set(deps.searchInputFocused, true);\n }\n else {\n set(focusedValueIndex, current);\n }\n }\n\n function onEnter(event: KeyboardEvent): void {\n const filteredOptions = get(deps.filteredOptions);\n const highlightedIndex = get(deps.highlightedIndex);\n const isOpen = get(deps.isOpen);\n const customValue = get(options.customValue);\n const multiple = get(options.multiple);\n const value = get(deps.value);\n const internalSearch = get(deps.internalSearch);\n\n // Check if we should use custom value\n if (customValue && internalSearch && isOpen) {\n // Check if any option exactly matches the search term\n let hasExactMatch = false;\n\n if (highlightedIndex > -1 && highlightedIndex < filteredOptions.length) {\n const highlightedOption = filteredOptions[highlightedIndex];\n if (typeof highlightedOption === 'string') {\n hasExactMatch = highlightedOption === internalSearch;\n }\n else if (highlightedOption && typeof highlightedOption === 'object') {\n const label = (highlightedOption as any).label || (highlightedOption as any).value || '';\n hasExactMatch = label === internalSearch;\n }\n }\n\n // If no exact match with highlighted option, use custom value\n if (!hasExactMatch) {\n deps.setSearchAsValue();\n if (!multiple)\n set(deps.isOpen, false);\n event.preventDefault();\n return;\n }\n }\n\n if (filteredOptions.length > 0 && highlightedIndex > -1 && isOpen) {\n deps.applyHighlighted();\n event.preventDefault();\n }\n else if (filteredOptions.length === 0 && customValue && internalSearch) {\n deps.setSearchAsValue();\n if (!multiple)\n set(deps.isOpen, false);\n event.preventDefault();\n }\n else if (!isOpen && value.length === 0) {\n set(deps.isOpen, true);\n event.preventDefault();\n }\n else {\n const activator = get(deps.activator);\n const form = activator?.closest('form');\n if (form) {\n form.dispatchEvent(new Event('submit'));\n }\n }\n }\n\n function onTab(event: KeyboardEvent): void {\n const isOpen = get(deps.isOpen);\n const filteredOptions = get(deps.filteredOptions);\n const highlightedIndex = get(deps.highlightedIndex);\n const multiple = get(options.multiple);\n\n if (isOpen && filteredOptions.length > 0 && highlightedIndex > -1 && !multiple) {\n deps.applyHighlighted();\n event.preventDefault();\n }\n }\n\n function onInputDeletePressed(): void {\n const internalSearch = get(deps.internalSearch);\n const value = get(deps.value);\n const total = value.length;\n const multiple = get(options.multiple);\n\n if (!internalSearch && total > 0) {\n if (multiple)\n set(focusedValueIndex, total - 1);\n else\n deps.clear();\n }\n }\n\n // Watch value changes to reset focused index and clear cache\n watch(deps.value, () => {\n setValueFocus(-1);\n get(chipElementsCache).clear();\n });\n\n // Watch focused value index to handle chip focus\n watch(focusedValueIndex, async (index) => {\n const multiple = get(options.multiple);\n if (index === -1 || !multiple)\n return;\n\n await nextTick(() => {\n const cache = get(chipElementsCache);\n let activeChip = cache.get(index);\n\n if (!activeChip) {\n const activator = get(deps.activator);\n const element = activator?.querySelector(`[data-index=\"${index}\"]`) as HTMLElement | null;\n if (element) {\n activeChip = element;\n cache.set(index, element);\n }\n }\n\n if (activeChip && 'focus' in activeChip && typeof activeChip.focus === 'function')\n activeChip.focus();\n });\n });\n\n return {\n focusedValueIndex,\n moveSelectedValueHighlight,\n onEnter,\n onInputDeletePressed,\n onTab,\n setValueFocus,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { get, set } from "@vueuse/shared";
2
+ import { getTextToken } from "../../../utils/helpers.js";
3
+ import { ref, computed, watch, onUnmounted } from "vue";
4
+ import { refDebounced } from "@vueuse/core";
5
+ function useAutoCompleteSearch(options, searchModel, opts) {
6
+ const internalSearch = ref("");
7
+ const debouncedInternalSearch = refDebounced(internalSearch, 50);
8
+ const justOpened = ref(false);
9
+ const tokenCache = /* @__PURE__ */ new Map();
10
+ const getCachedTextToken = (text) => {
11
+ if (tokenCache.has(text)) {
12
+ return tokenCache.get(text);
13
+ }
14
+ const token = getTextToken(text);
15
+ tokenCache.set(text, token);
16
+ return token;
17
+ };
18
+ const filteredOptions = computed(() => {
19
+ const search = get(debouncedInternalSearch);
20
+ const optionsValue = get(options);
21
+ const noFilter = get(opts.noFilter);
22
+ if (noFilter || !search || get(justOpened))
23
+ return optionsValue;
24
+ const keyAttr = get(opts.keyAttr);
25
+ const textAttr = get(opts.textAttr);
26
+ const filter = get(opts.filter);
27
+ const searchToken = getCachedTextToken(search);
28
+ const usedFilter = filter || ((item) => {
29
+ if (!item)
30
+ return false;
31
+ const keywords = [keyAttr ? getCachedTextToken(item[keyAttr]) : item.toString()];
32
+ if (textAttr && typeof item === "object")
33
+ keywords.push(getCachedTextToken(item[textAttr]));
34
+ return keywords.some((keyword) => getCachedTextToken(keyword).includes(searchToken));
35
+ });
36
+ const filtered = optionsValue.filter((item) => usedFilter(item, search));
37
+ const customValue = get(opts.customValue);
38
+ const hideCustomValue = get(opts.hideCustomValue);
39
+ if (!customValue || hideCustomValue || !search) {
40
+ return filtered;
41
+ }
42
+ const isCustomValueIncluded = filtered.some((item) => {
43
+ if (!item) {
44
+ return false;
45
+ }
46
+ const val = textAttr ? item[textAttr] : item.toString();
47
+ return val === search;
48
+ });
49
+ if (isCustomValueIncluded) {
50
+ return filtered;
51
+ }
52
+ return [textValueToProperValue(search, {
53
+ keyAttr,
54
+ returnObject: get(opts.returnObject),
55
+ textAttr
56
+ }), ...filtered];
57
+ });
58
+ function textValueToProperValue(val, options2) {
59
+ const { keyAttr, returnObject, textAttr } = options2;
60
+ if (!keyAttr || returnObject)
61
+ return val;
62
+ return {
63
+ [keyAttr]: val,
64
+ ...textAttr ? { [textAttr]: val } : {}
65
+ };
66
+ }
67
+ function updateInternalSearch(value = "") {
68
+ set(searchModel, value);
69
+ set(internalSearch, value);
70
+ }
71
+ watch(searchModel, (search) => {
72
+ set(internalSearch, search);
73
+ }, { immediate: true });
74
+ onUnmounted(() => {
75
+ tokenCache.clear();
76
+ });
77
+ return {
78
+ debouncedInternalSearch,
79
+ filteredOptions,
80
+ internalSearch,
81
+ justOpened,
82
+ textValueToProperValue: (val, returnObjectOverride = false) => textValueToProperValue(val, {
83
+ keyAttr: get(opts.keyAttr),
84
+ returnObject: returnObjectOverride || get(opts.returnObject),
85
+ textAttr: get(opts.textAttr)
86
+ }),
87
+ updateInternalSearch
88
+ };
89
+ }
90
+ export {
91
+ useAutoCompleteSearch
92
+ };
93
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sources":["../../../../src/composables/forms/auto-complete/search.ts"],"sourcesContent":["import type { MaybeRef, Ref } from 'vue';\nimport { get, set } from '@vueuse/shared';\nimport { getTextToken } from '@/utils/helpers';\n\nexport interface UseAutoCompleteSearchOptions<TItem> {\n keyAttr?: MaybeRef<keyof TItem | undefined>;\n textAttr?: MaybeRef<keyof TItem | undefined>;\n noFilter?: MaybeRef<boolean>;\n filter?: MaybeRef<((item: TItem, queryText: string) => boolean) | undefined>;\n customValue?: MaybeRef<boolean>;\n hideCustomValue?: MaybeRef<boolean>;\n returnObject?: MaybeRef<boolean>;\n}\n\nexport interface UseAutoCompleteSearchReturn<TItem> {\n internalSearch: Ref<string>;\n debouncedInternalSearch: Readonly<Ref<string>>;\n filteredOptions: Readonly<Ref<TItem[]>>;\n justOpened: Ref<boolean>;\n updateInternalSearch: (value?: string) => void;\n textValueToProperValue: (val: any, returnObject?: boolean) => TItem;\n}\n\nexport function useAutoCompleteSearch<TItem>(\n options: MaybeRef<TItem[]>,\n searchModel: Ref<string>,\n opts: UseAutoCompleteSearchOptions<TItem>,\n): UseAutoCompleteSearchReturn<TItem> {\n const internalSearch = ref<string>('');\n const debouncedInternalSearch = refDebounced(internalSearch, 50);\n const justOpened = ref<boolean>(false);\n\n // Memoize token computation to avoid repeated string processing\n const tokenCache = new Map<string, string>();\n const getCachedTextToken = (text: string): string => {\n if (tokenCache.has(text)) {\n return tokenCache.get(text)!;\n }\n const token = getTextToken(text);\n tokenCache.set(text, token);\n return token;\n };\n\n const filteredOptions = computed<TItem[]>(() => {\n const search = get(debouncedInternalSearch);\n const optionsValue = get(options);\n\n const noFilter = get(opts.noFilter);\n if (noFilter || !search || get(justOpened))\n return optionsValue;\n\n const keyAttr = get(opts.keyAttr);\n const textAttr = get(opts.textAttr);\n const filter = get(opts.filter);\n\n // Cache the search token once\n const searchToken = getCachedTextToken(search);\n\n const usedFilter = filter || ((item) => {\n if (!item)\n return false;\n\n const keywords: string[] = [keyAttr ? getCachedTextToken((item as any)[keyAttr]) : item.toString()];\n\n if (textAttr && typeof item === 'object')\n keywords.push(getCachedTextToken((item as any)[textAttr]));\n\n return keywords.some(keyword => getCachedTextToken(keyword).includes(searchToken));\n });\n\n const filtered = optionsValue.filter(item => usedFilter(item, search));\n\n const customValue = get(opts.customValue);\n const hideCustomValue = get(opts.hideCustomValue);\n if (!customValue || hideCustomValue || !search) {\n return filtered;\n }\n\n // Use a more efficient check for custom value inclusion\n const isCustomValueIncluded = filtered.some((item) => {\n if (!item) {\n return false;\n }\n\n const val = textAttr ? (item as any)[textAttr] : item.toString();\n return val === search;\n });\n\n if (isCustomValueIncluded) {\n return filtered;\n }\n\n return [textValueToProperValue(search, {\n keyAttr,\n returnObject: get(opts.returnObject),\n textAttr,\n }), ...filtered];\n });\n\n function textValueToProperValue(val: any, options: { keyAttr?: keyof TItem; textAttr?: keyof TItem; returnObject?: boolean }): TItem {\n const { keyAttr, returnObject, textAttr } = options;\n if (!keyAttr || returnObject)\n return val;\n\n return {\n [keyAttr]: val,\n ...(\n textAttr\n ? { [textAttr]: val }\n : {}\n ),\n } as TItem;\n }\n\n function updateInternalSearch(value: string = ''): void {\n set(searchModel, value);\n set(internalSearch, value);\n }\n\n watch(searchModel, (search) => {\n set(internalSearch, search);\n }, { immediate: true });\n\n // Clear token cache when component unmounts to prevent memory leaks\n onUnmounted(() => {\n tokenCache.clear();\n });\n\n return {\n debouncedInternalSearch,\n filteredOptions,\n internalSearch,\n justOpened,\n textValueToProperValue: (val: any, returnObjectOverride: boolean = false) => textValueToProperValue(val, {\n keyAttr: get(opts.keyAttr),\n returnObject: returnObjectOverride || get(opts.returnObject),\n textAttr: get(opts.textAttr),\n }),\n updateInternalSearch,\n };\n}\n"],"names":["options"],"mappings":"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"}