@rotki/ui-library 2.20.2 → 2.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/dist/__test__/options.d.ts +7 -0
  2. package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js +1 -1
  3. package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
  4. package/dist/components/accordions/accordions/RuiAccordions.vue_vue_type_script_setup_true_lang.js +2 -2
  5. package/dist/components/accordions/accordions/RuiAccordions.vue_vue_type_script_setup_true_lang.js.map +1 -1
  6. package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js +1 -1
  7. package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js.map +1 -1
  8. package/dist/components/avatars/RuiAvatar.vue_vue_type_script_setup_true_lang.js +1 -1
  9. package/dist/components/avatars/RuiAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/components/avatars/RuiAvatarGroup.vue_vue_type_script_setup_true_lang.js +1 -1
  11. package/dist/components/avatars/RuiAvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  12. package/dist/components/avatars/avatar-props.js +1 -1
  13. package/dist/components/avatars/avatar-props.js.map +1 -1
  14. package/dist/components/avatars/use-avatar-group.js.map +1 -1
  15. package/dist/components/buttons/button/RuiButton.js.map +1 -1
  16. package/dist/components/buttons/button/RuiButton.vue.d.ts +2 -2
  17. package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js +3 -3
  18. package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/components/buttons/button/button-props.js.map +1 -1
  20. package/dist/components/buttons/button/button-styles.js.map +1 -1
  21. package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js +2 -2
  22. package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  23. package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js +3 -3
  24. package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  25. package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js +2 -2
  26. package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  27. package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js +3 -3
  28. package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  29. package/dist/components/calendar/RuiCalendarMenu.js.map +1 -1
  30. package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js +6 -4
  31. package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  32. package/dist/components/calendar/state.js.map +1 -1
  33. package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js +1 -1
  34. package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  35. package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js +1 -1
  36. package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js +1 -1
  38. package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  39. package/dist/components/chips/chip-props.js.map +1 -1
  40. package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js +1 -1
  41. package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/components/color-picker/RuiColorDisplay.vue_vue_type_script_setup_true_lang.js +1 -1
  43. package/dist/components/color-picker/RuiColorDisplay.vue_vue_type_script_setup_true_lang.js.map +1 -1
  44. package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js +1 -1
  45. package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js.map +1 -1
  46. package/dist/components/color-picker/RuiColorInput.vue_vue_type_script_setup_true_lang.js +1 -1
  47. package/dist/components/color-picker/RuiColorInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js +1 -1
  49. package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  50. package/dist/components/color-picker/utils.js.map +1 -1
  51. package/dist/components/date-time-picker/RuiDateTimePicker.js.map +1 -1
  52. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js +5 -3
  53. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  54. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js +3 -3
  55. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  56. package/dist/components/date-time-picker/RuiTimezoneSelect.vue_vue_type_script_setup_true_lang.js +2 -2
  57. package/dist/components/date-time-picker/RuiTimezoneSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  58. package/dist/components/date-time-picker/date-time-picker-styles.js.map +1 -1
  59. package/dist/components/date-time-picker/dayjs-setup.js.map +1 -1
  60. package/dist/components/date-time-picker/segment-config.js.map +1 -1
  61. package/dist/components/date-time-picker/segment-utils.js.map +1 -1
  62. package/dist/components/date-time-picker/timezones.js.map +1 -1
  63. package/dist/components/date-time-picker/types.js +1 -1
  64. package/dist/components/date-time-picker/types.js.map +1 -1
  65. package/dist/components/date-time-picker/use-date-time-selection.js +2 -2
  66. package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -1
  67. package/dist/components/date-time-picker/use-input-handler.js.map +1 -1
  68. package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
  69. package/dist/components/date-time-picker/utils.js.map +1 -1
  70. package/dist/components/divider/RuiDivider.vue_vue_type_script_setup_true_lang.js +1 -1
  71. package/dist/components/divider/RuiDivider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  72. package/dist/components/forms/auto-complete/RuiAutoComplete.js.map +1 -1
  73. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +26 -2
  74. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js +150 -54
  75. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  76. package/dist/components/forms/auto-complete/auto-complete-styles.js.map +1 -1
  77. package/dist/components/forms/category-picker/RuiCategoryPicker.js +7 -0
  78. package/dist/components/forms/category-picker/RuiCategoryPicker.js.map +1 -0
  79. package/dist/components/forms/category-picker/RuiCategoryPicker.vue.d.ts +134 -0
  80. package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js +561 -0
  81. package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  82. package/dist/components/forms/category-picker/category-picker-styles.d.ts +432 -0
  83. package/dist/components/forms/category-picker/category-picker-styles.js +59 -0
  84. package/dist/components/forms/category-picker/category-picker-styles.js.map +1 -0
  85. package/dist/components/forms/check-control-styles.js.map +1 -1
  86. package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js +2 -2
  87. package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  88. package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue_vue_type_script_setup_true_lang.js +2 -2
  89. package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  90. package/dist/components/forms/checkbox/checkbox-group/context.js.map +1 -1
  91. package/dist/components/forms/file-upload/RuiFileUpload.js +7 -0
  92. package/dist/components/forms/file-upload/RuiFileUpload.js.map +1 -0
  93. package/dist/components/forms/file-upload/RuiFileUpload.vue.d.ts +61 -0
  94. package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js +269 -0
  95. package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -0
  96. package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js +2 -2
  97. package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js.map +1 -1
  98. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js +2 -2
  99. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  100. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js +2 -2
  101. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  102. package/dist/components/forms/select/RuiMenuSelect.js.map +1 -1
  103. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js +9 -3
  104. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  105. package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js +2 -2
  106. package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  107. package/dist/components/forms/select/menu-select-styles.js.map +1 -1
  108. package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js +2 -2
  109. package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  110. package/dist/components/forms/slider/slider-styles.js.map +1 -1
  111. package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js +2 -2
  112. package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  113. package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js +3 -3
  114. package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  115. package/dist/components/forms/text-area/text-area-styles.js.map +1 -1
  116. package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js +3 -3
  117. package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  118. package/dist/components/forms/text-field/text-field-styles.js.map +1 -1
  119. package/dist/components/forms/text-input-styles.js.map +1 -1
  120. package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js +1 -1
  121. package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js.map +1 -1
  122. package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  123. package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  124. package/dist/components/index.d.ts +4 -2
  125. package/dist/components/index.js +4 -2
  126. package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js +1 -1
  127. package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js.map +1 -1
  128. package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js +1 -1
  129. package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  130. package/dist/components/loaders/skeleton-type.js.map +1 -1
  131. package/dist/components/logos/RuiLogo.vue_vue_type_script_setup_true_lang.js +1 -1
  132. package/dist/components/logos/RuiLogo.vue_vue_type_script_setup_true_lang.js.map +1 -1
  133. package/dist/components/logos/use-logo-sources.js.map +1 -1
  134. package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js +1 -1
  135. package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js.map +1 -1
  136. package/dist/components/overlays/badge/badge-props.js.map +1 -1
  137. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue_vue_type_script_setup_true_lang.js +2 -2
  138. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue_vue_type_script_setup_true_lang.js.map +1 -1
  139. package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js +3 -3
  140. package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  141. package/dist/components/overlays/menu/RuiMenu.js.map +1 -1
  142. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +6 -0
  143. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js +5 -4
  144. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  145. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js +3 -3
  146. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  147. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js +2 -2
  148. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js.map +1 -1
  149. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js +1 -1
  150. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  151. package/dist/components/overlays/tooltip/tooltip-styles.js.map +1 -1
  152. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js +1 -1
  153. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js.map +1 -1
  154. package/dist/components/progress/progress-props.js.map +1 -1
  155. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js +2 -2
  156. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  157. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js +1 -1
  158. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  159. package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  160. package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  161. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  162. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  163. package/dist/components/steppers/footer-stepper-variant.js.map +1 -1
  164. package/dist/components/tables/RuiDataTable.js.map +1 -1
  165. package/dist/components/tables/RuiDataTable.vue.d.ts +23 -2
  166. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js +186 -217
  167. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  168. package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js +1 -1
  169. package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  170. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js +1 -1
  171. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  172. package/dist/components/tables/RuiTableHead.js.map +1 -1
  173. package/dist/components/tables/RuiTableHead.vue.d.ts +11 -1
  174. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js +1 -2
  175. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js.map +1 -1
  176. package/dist/components/tables/RuiTablePagination.js.map +1 -1
  177. package/dist/components/tables/RuiTablePagination.vue.d.ts +5 -0
  178. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js +24 -8
  179. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  180. package/dist/components/tables/data-table/RuiDataTableBody.js +7 -0
  181. package/dist/components/tables/data-table/RuiDataTableBody.js.map +1 -0
  182. package/dist/components/tables/data-table/RuiDataTableBody.vue.d.ts +55 -0
  183. package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js +78 -0
  184. package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js.map +1 -0
  185. package/dist/components/tables/data-table/RuiDataTableCell.js +7 -0
  186. package/dist/components/tables/data-table/RuiDataTableCell.js.map +1 -0
  187. package/dist/components/tables/data-table/RuiDataTableCell.vue.d.ts +30 -0
  188. package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js +54 -0
  189. package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
  190. package/dist/components/tables/data-table/RuiDataTableEmptyRow.js +7 -0
  191. package/dist/components/tables/data-table/RuiDataTableEmptyRow.js.map +1 -0
  192. package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue.d.ts +19 -0
  193. package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue_vue_type_script_setup_true_lang.js +43 -0
  194. package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  195. package/dist/components/tables/data-table/RuiDataTableExpandedRow.js +7 -0
  196. package/dist/components/tables/data-table/RuiDataTableExpandedRow.js.map +1 -0
  197. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue.d.ts +26 -0
  198. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js +31 -0
  199. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  200. package/dist/components/tables/data-table/RuiDataTableGroupRow.js +7 -0
  201. package/dist/components/tables/data-table/RuiDataTableGroupRow.js.map +1 -0
  202. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue.d.ts +32 -0
  203. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js +85 -0
  204. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  205. package/dist/components/tables/data-table/RuiDataTableLoadingRow.js +7 -0
  206. package/dist/components/tables/data-table/RuiDataTableLoadingRow.js.map +1 -0
  207. package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue.d.ts +3 -0
  208. package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue_vue_type_script_setup_true_lang.js +26 -0
  209. package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  210. package/dist/components/tables/data-table/RuiDataTableMobileSort.js +7 -0
  211. package/dist/components/tables/data-table/RuiDataTableMobileSort.js.map +1 -0
  212. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue.d.ts +33 -0
  213. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js +101 -0
  214. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js.map +1 -0
  215. package/dist/components/tables/data-table/RuiDataTableRow.js +7 -0
  216. package/dist/components/tables/data-table/RuiDataTableRow.js.map +1 -0
  217. package/dist/components/tables/data-table/RuiDataTableRow.vue.d.ts +31 -0
  218. package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js +142 -0
  219. package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  220. package/dist/components/tables/data-table/context.d.ts +73 -0
  221. package/dist/components/tables/data-table/context.js +100 -0
  222. package/dist/components/tables/data-table/context.js.map +1 -0
  223. package/dist/components/tables/data-table-styles.d.ts +30 -1
  224. package/dist/components/tables/data-table-styles.js +9 -2
  225. package/dist/components/tables/data-table-styles.js.map +1 -1
  226. package/dist/components/tables/table-props.d.ts +5 -0
  227. package/dist/components/tables/table-props.js +5 -1
  228. package/dist/components/tables/table-props.js.map +1 -1
  229. package/dist/components/tables/use-pagination-navigation.js.map +1 -1
  230. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js +1 -1
  231. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js.map +1 -1
  232. package/dist/components/tabs/tab/use-tab-link.js.map +1 -1
  233. package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js +1 -1
  234. package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  235. package/dist/components/tabs/tab-items/RuiTabItems.js.map +1 -1
  236. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js +2 -2
  237. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js.map +1 -1
  238. package/dist/components/tabs/tab-props.js.map +1 -1
  239. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js +2 -2
  240. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  241. package/dist/components/tabs/tabs/use-tab-routing.js +1 -1
  242. package/dist/components/tabs/tabs/use-tab-routing.js.map +1 -1
  243. package/dist/components/tabs/tabs/use-tab-scroll.js.map +1 -1
  244. package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js +2 -2
  245. package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  246. package/dist/components/time-picker/time-picker-styles.js.map +1 -1
  247. package/dist/composables/breakpoint.js.map +1 -1
  248. package/dist/composables/defaults/table.d.ts +12 -0
  249. package/dist/composables/defaults/table.js.map +1 -1
  250. package/dist/composables/dropdown-menu.d.ts +12 -1
  251. package/dist/composables/dropdown-menu.js +46 -7
  252. package/dist/composables/dropdown-menu.js.map +1 -1
  253. package/dist/composables/floating.js +1 -1
  254. package/dist/composables/floating.js.map +1 -1
  255. package/dist/composables/forms/auto-complete/focus.js.map +1 -1
  256. package/dist/composables/forms/auto-complete/index.js +5 -4
  257. package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
  258. package/dist/composables/forms/auto-complete/search.d.ts +6 -1
  259. package/dist/composables/forms/auto-complete/search.js +12 -1
  260. package/dist/composables/forms/auto-complete/search.js.map +1 -1
  261. package/dist/composables/forms/auto-complete/value.js.map +1 -1
  262. package/dist/composables/forms/category-picker/use-category-picker.d.ts +76 -0
  263. package/dist/composables/forms/category-picker/use-category-picker.js +141 -0
  264. package/dist/composables/forms/category-picker/use-category-picker.js.map +1 -0
  265. package/dist/composables/forms/use-prepend-append-width.js.map +1 -1
  266. package/dist/composables/icons.js.map +1 -1
  267. package/dist/composables/popper.js.map +1 -1
  268. package/dist/composables/sticky-header.js.map +1 -1
  269. package/dist/composables/tables/data-table/columns.d.ts +7 -1
  270. package/dist/composables/tables/data-table/columns.js +18 -10
  271. package/dist/composables/tables/data-table/columns.js.map +1 -1
  272. package/dist/composables/tables/data-table/expansion.js.map +1 -1
  273. package/dist/composables/tables/data-table/grouping.d.ts +4 -6
  274. package/dist/composables/tables/data-table/grouping.js +38 -24
  275. package/dist/composables/tables/data-table/grouping.js.map +1 -1
  276. package/dist/composables/tables/data-table/pagination.d.ts +4 -4
  277. package/dist/composables/tables/data-table/pagination.js +63 -21
  278. package/dist/composables/tables/data-table/pagination.js.map +1 -1
  279. package/dist/composables/tables/data-table/selection.js +16 -6
  280. package/dist/composables/tables/data-table/selection.js.map +1 -1
  281. package/dist/composables/tables/data-table/sort.d.ts +4 -3
  282. package/dist/composables/tables/data-table/sort.js +78 -40
  283. package/dist/composables/tables/data-table/sort.js.map +1 -1
  284. package/dist/composables/tables/data-table/types.d.ts +3 -1
  285. package/dist/composables/tables/data-table/types.js +6 -2
  286. package/dist/composables/tables/data-table/types.js.map +1 -1
  287. package/dist/composables/theme.js.map +1 -1
  288. package/dist/composables/timeout-manager.js.map +1 -1
  289. package/dist/composables/use-rui-i18n.js.map +1 -1
  290. package/dist/consts/colors.js.map +1 -1
  291. package/dist/consts/time-accuracy.js.map +1 -1
  292. package/dist/i18n/keys.js.map +1 -1
  293. package/dist/icons/icons_1.d.ts +12 -12
  294. package/dist/icons/icons_1.js +140 -157
  295. package/dist/icons/icons_1.js.map +1 -1
  296. package/dist/icons/icons_2.d.ts +13 -13
  297. package/dist/icons/icons_2.js +128 -149
  298. package/dist/icons/icons_2.js.map +1 -1
  299. package/dist/icons/icons_3.d.ts +18 -18
  300. package/dist/icons/icons_3.js +244 -282
  301. package/dist/icons/icons_3.js.map +1 -1
  302. package/dist/icons/icons_4.d.ts +251 -6
  303. package/dist/icons/icons_4.js +3016 -75
  304. package/dist/icons/icons_4.js.map +1 -1
  305. package/dist/icons/icons_5.d.ts +20 -0
  306. package/dist/icons/icons_5.js +221 -0
  307. package/dist/icons/icons_5.js.map +1 -0
  308. package/dist/icons/index.d.ts +2 -1
  309. package/dist/icons/index.js +297 -32
  310. package/dist/icons/index.js.map +1 -1
  311. package/dist/index.js +9 -6
  312. package/dist/index.js.map +1 -1
  313. package/dist/library-icons.json +3 -0
  314. package/dist/style.css +200 -0
  315. package/dist/theme/index.js.map +1 -1
  316. package/dist/types/stepper.js.map +1 -1
  317. package/dist/types/theme.js.map +1 -1
  318. package/dist/utils/assert.js.map +1 -1
  319. package/dist/utils/blockie.js.map +1 -1
  320. package/dist/utils/form-text-detail.js.map +1 -1
  321. package/dist/utils/helpers.d.ts +4 -0
  322. package/dist/utils/helpers.js +21 -1
  323. package/dist/utils/helpers.js.map +1 -1
  324. package/dist/utils/is-equal.js.map +1 -1
  325. package/dist/utils/tv.js.map +1 -1
  326. package/dist/vite-plugin/index.js +6 -5
  327. package/dist/vite-plugin/index.js.map +1 -1
  328. package/dist/vite-plugin/scanner.d.ts +1 -1
  329. package/dist/vite-plugin/scanner.js +10 -7
  330. package/dist/vite-plugin/scanner.js.map +1 -1
  331. package/dist/vite-plugin/types.d.ts +9 -0
  332. package/dist/web-types.json +2283 -1088
  333. package/package.json +35 -35
@@ -0,0 +1,61 @@
1
+ export interface FileUploadProps {
2
+ /** File type filter (HTML accept attribute syntax). e.g. '.csv', 'image/*', '.png,.jpg' */
3
+ accept?: string;
4
+ /** Allow multiple file selection. */
5
+ multiple?: boolean;
6
+ disabled?: boolean;
7
+ /** Shows a loading overlay (consumer-driven, e.g. while uploading). */
8
+ loading?: boolean;
9
+ /** Upload progress 0-100. When provided alongside `loading`, the overlay shows a determinate progress bar with percentage. */
10
+ progress?: number;
11
+ /** Renders the success state border/icon. Consumer toggles back to false. */
12
+ uploaded?: boolean;
13
+ /** Optional max size per file in bytes; failures emit `error` and set internal error state. */
14
+ maxSize?: number;
15
+ /** External error messages (e.g. from Vuelidate). Shown via the standard form detail block. */
16
+ errorMessages?: string | string[];
17
+ /** Hint text below the dropzone. */
18
+ hint?: string;
19
+ /** Disable drag-and-drop; the dropzone becomes click-only (matches rotki.com use case). */
20
+ noDrop?: boolean;
21
+ /** Replace the default "Drag and drop or {button}" copy. */
22
+ uploadText?: string;
23
+ /** Label shown on the inline button when no file is selected. */
24
+ clickToUploadText?: string;
25
+ /** Label shown on the inline button when one or more files are already selected. */
26
+ replaceText?: string;
27
+ /** Hide the bottom hint/error details strip. */
28
+ hideDetails?: boolean;
29
+ }
30
+ type __VLS_Props = FileUploadProps;
31
+ type __VLS_Slots = {
32
+ preview?: (props: {
33
+ files: File[];
34
+ remove: () => void;
35
+ }) => any;
36
+ icon?: () => any;
37
+ description?: () => any;
38
+ };
39
+ declare function openPicker(): void;
40
+ type __VLS_ModelProps = {
41
+ modelValue: File | File[] | undefined;
42
+ };
43
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
44
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
45
+ removeFile: () => void;
46
+ openPicker: typeof openPicker;
47
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
48
+ error: (message: string) => any;
49
+ "update:modelValue": (value: File | File[] | undefined) => any;
50
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
51
+ onError?: ((message: string) => any) | undefined;
52
+ "onUpdate:modelValue"?: ((value: File | File[] | undefined) => any) | undefined;
53
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
54
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
55
+ declare const _default: typeof __VLS_export;
56
+ export default _default;
57
+ type __VLS_WithSlots<T, S> = T & {
58
+ new (): {
59
+ $slots: S;
60
+ };
61
+ };
@@ -0,0 +1,269 @@
1
+ import RuiIcon_default from "../../icons/RuiIcon.js";
2
+ import RuiProgress_default from "../../progress/RuiProgress.js";
3
+ import { useFormTextDetail } from "../../../utils/form-text-detail.js";
4
+ import RuiFormTextDetail_default from "../../helpers/RuiFormTextDetail.js";
5
+ import { formatFileSize, getNonRootAttrs, getRootAttrs } from "../../../utils/helpers.js";
6
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, guardReactiveProps, mergeModels, mergeProps, normalizeClass, normalizeProps, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useModel, useTemplateRef, watch } from "vue";
7
+ import { useDropZone } from "@vueuse/core";
8
+ import { get as get$1, set as set$1 } from "@vueuse/shared";
9
+ //#region src/components/forms/file-upload/RuiFileUpload.vue?vue&type=script&setup=true&lang.ts
10
+ var _hoisted_1 = [
11
+ "data-disabled",
12
+ "data-uploaded",
13
+ "data-error",
14
+ "data-drop-active"
15
+ ];
16
+ var _hoisted_2 = {
17
+ key: 0,
18
+ class: "flex flex-col gap-1 w-full",
19
+ "data-id": "file-list"
20
+ };
21
+ var _hoisted_3 = { class: "flex-1 overflow-hidden min-w-0" };
22
+ var _hoisted_4 = ["title"];
23
+ var _hoisted_5 = { class: "text-rui-text-secondary text-xs leading-3" };
24
+ var _hoisted_6 = [
25
+ "disabled",
26
+ "aria-label",
27
+ "onClick"
28
+ ];
29
+ var _hoisted_7 = { class: "text-center text-sm" };
30
+ var _hoisted_8 = { class: "flex items-center justify-center gap-1 flex-wrap" };
31
+ var _hoisted_9 = ["disabled"];
32
+ var _hoisted_10 = [
33
+ "accept",
34
+ "multiple",
35
+ "disabled"
36
+ ];
37
+ var _hoisted_11 = {
38
+ key: 0,
39
+ class: "flex flex-col items-center justify-center absolute h-full w-full top-0 left-0 gap-2",
40
+ "data-id": "loading"
41
+ };
42
+ var _hoisted_12 = ["textContent"];
43
+ var RuiFileUpload_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
44
+ name: "RuiFileUpload",
45
+ inheritAttrs: false,
46
+ __name: "RuiFileUpload",
47
+ props: /*@__PURE__*/ mergeModels({
48
+ accept: { default: "*" },
49
+ multiple: {
50
+ type: Boolean,
51
+ default: false
52
+ },
53
+ disabled: {
54
+ type: Boolean,
55
+ default: false
56
+ },
57
+ loading: {
58
+ type: Boolean,
59
+ default: false
60
+ },
61
+ progress: { default: () => void 0 },
62
+ uploaded: {
63
+ type: Boolean,
64
+ default: false
65
+ },
66
+ maxSize: { default: () => void 0 },
67
+ errorMessages: { default: () => [] },
68
+ hint: { default: "" },
69
+ noDrop: {
70
+ type: Boolean,
71
+ default: false
72
+ },
73
+ uploadText: { default: "Drag and drop or" },
74
+ clickToUploadText: { default: "click to upload" },
75
+ replaceText: { default: "replace file" },
76
+ hideDetails: {
77
+ type: Boolean,
78
+ default: false
79
+ }
80
+ }, {
81
+ "modelValue": { required: true },
82
+ "modelModifiers": {}
83
+ }),
84
+ emits: /*@__PURE__*/ mergeModels(["error"], ["update:modelValue"]),
85
+ setup(__props, { expose: __expose, emit: __emit }) {
86
+ const modelValue = useModel(__props, "modelValue");
87
+ const emit = __emit;
88
+ const wrapper = useTemplateRef("wrapper");
89
+ const input = useTemplateRef("input");
90
+ const internalError = ref("");
91
+ const files = computed(() => {
92
+ const value = get$1(modelValue);
93
+ if (!value) return [];
94
+ return Array.isArray(value) ? value : [value];
95
+ });
96
+ const hasFiles = computed(() => get$1(files).length > 0);
97
+ const progressLabel = computed(() => {
98
+ const value = __props.progress;
99
+ return value === void 0 ? void 0 : `${Math.round(value)}%`;
100
+ });
101
+ const combinedErrorMessages = computed(() => {
102
+ const external = Array.isArray(__props.errorMessages) ? __props.errorMessages : [__props.errorMessages];
103
+ const internal = get$1(internalError);
104
+ return [...external.filter(Boolean), ...internal ? [internal] : []];
105
+ });
106
+ const { hasError } = useFormTextDetail(combinedErrorMessages, () => []);
107
+ function matchesAccept(file, acceptString) {
108
+ if (!acceptString || acceptString === "*" || acceptString === "*/*") return true;
109
+ const fileName = file.name.toLowerCase();
110
+ const fileExtension = fileName.includes(".") ? fileName.slice(fileName.lastIndexOf(".")) : "";
111
+ const fileType = file.type.toLowerCase();
112
+ return acceptString.split(",").map((value) => value.trim().toLowerCase()).filter(Boolean).some((type) => {
113
+ if (type.startsWith(".")) return type === fileExtension;
114
+ if (type.endsWith("/*")) return fileType.startsWith(type.slice(0, -1));
115
+ return type === fileType;
116
+ });
117
+ }
118
+ function reportError(message) {
119
+ set$1(internalError, message);
120
+ emit("error", message);
121
+ }
122
+ function clearInternalError() {
123
+ set$1(internalError, "");
124
+ }
125
+ function validate(candidates) {
126
+ if (candidates.length === 0) return void 0;
127
+ if (!__props.multiple && candidates.length > 1) {
128
+ reportError("Only one file can be uploaded");
129
+ return;
130
+ }
131
+ for (const file of candidates) {
132
+ if (!matchesAccept(file, __props.accept)) {
133
+ reportError(`Only ${__props.accept} files are allowed`);
134
+ return;
135
+ }
136
+ if (__props.maxSize !== void 0 && file.size > __props.maxSize) {
137
+ reportError(`${file.name} exceeds the maximum size of ${formatFileSize(__props.maxSize)}`);
138
+ return;
139
+ }
140
+ }
141
+ return candidates;
142
+ }
143
+ function setFiles(candidates) {
144
+ const validated = validate(candidates);
145
+ if (!validated) return;
146
+ clearInternalError();
147
+ set$1(modelValue, __props.multiple ? validated : validated[0]);
148
+ }
149
+ function removeFile(target) {
150
+ clearInternalError();
151
+ const inputEl = get$1(input);
152
+ if (inputEl) inputEl.value = "";
153
+ if (!target || !__props.multiple) {
154
+ set$1(modelValue, __props.multiple ? [] : void 0);
155
+ return;
156
+ }
157
+ set$1(modelValue, get$1(files).filter((file) => file !== target));
158
+ }
159
+ function onSelect(event) {
160
+ const target = event.target;
161
+ if (!target?.files) return;
162
+ setFiles(Array.from(target.files));
163
+ }
164
+ function onDrop(dropped) {
165
+ if (__props.disabled || __props.noDrop || !dropped || dropped.length === 0) return;
166
+ setFiles(dropped);
167
+ }
168
+ const { isOverDropZone } = useDropZone(wrapper, { onDrop });
169
+ function openPicker() {
170
+ if (__props.disabled) return;
171
+ get$1(input)?.click();
172
+ }
173
+ watch(() => __props.errorMessages, () => clearInternalError());
174
+ __expose({
175
+ removeFile: () => removeFile(),
176
+ openPicker
177
+ });
178
+ return (_ctx, _cache) => {
179
+ return openBlock(), createElementBlock("div", normalizeProps(guardReactiveProps(unref(getRootAttrs)(_ctx.$attrs))), [createElementVNode("div", {
180
+ ref_key: "wrapper",
181
+ ref: wrapper,
182
+ class: normalizeClass(["p-4 border border-rui-grey-300 dark:border-rui-grey-800 rounded-md w-full relative border-dashed transition", {
183
+ "!border-rui-primary bg-rui-primary/[0.08]": unref(isOverDropZone) && !__props.disabled && !__props.noDrop,
184
+ "!border-rui-error !border-solid bg-rui-error/[0.08]": unref(hasError),
185
+ "!border-rui-success !border-solid bg-rui-success/[0.08]": __props.uploaded,
186
+ "opacity-60 pointer-events-none": __props.disabled
187
+ }]),
188
+ "data-disabled": __props.disabled || void 0,
189
+ "data-uploaded": __props.uploaded || void 0,
190
+ "data-error": unref(hasError) ? "" : void 0,
191
+ "data-drop-active": unref(isOverDropZone) || void 0
192
+ }, [createElementVNode("div", { class: normalizeClass(["flex flex-col items-center justify-center gap-3", { "opacity-0": __props.loading }]) }, [
193
+ renderSlot(_ctx.$slots, "preview", {
194
+ files: unref(files),
195
+ remove: () => removeFile()
196
+ }, () => [unref(hasFiles) ? (openBlock(), createElementBlock("div", _hoisted_2, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(files), (file) => {
197
+ return openBlock(), createElementBlock("div", {
198
+ key: `${file.name}-${file.lastModified}`,
199
+ class: "flex items-center gap-2 bg-rui-primary/[0.08] rounded-full pl-3 pr-1 py-1",
200
+ "data-id": "file-item"
201
+ }, [
202
+ createVNode(RuiIcon_default, {
203
+ name: "lu-file",
204
+ color: "primary",
205
+ size: "20"
206
+ }),
207
+ createElementVNode("div", _hoisted_3, [createElementVNode("div", {
208
+ class: "text-sm leading-5 truncate",
209
+ title: file.name
210
+ }, toDisplayString(file.name), 9, _hoisted_4), createElementVNode("div", _hoisted_5, toDisplayString(unref(formatFileSize)(file.size)), 1)]),
211
+ createElementVNode("button", {
212
+ type: "button",
213
+ class: "p-1 rounded-full hover:bg-rui-primary/[0.16] transition",
214
+ disabled: __props.disabled,
215
+ "aria-label": `Remove ${file.name}`,
216
+ "data-id": "remove-file",
217
+ onClick: ($event) => removeFile(file)
218
+ }, [createVNode(RuiIcon_default, {
219
+ name: "lu-x",
220
+ size: "16"
221
+ })], 8, _hoisted_6)
222
+ ]);
223
+ }), 128))])) : (openBlock(), createElementBlock("div", {
224
+ key: 1,
225
+ class: normalizeClass(["h-10 w-10 rounded-full flex items-center justify-center", __props.uploaded ? "bg-rui-success/[0.12]" : "bg-rui-primary/[0.12]"])
226
+ }, [renderSlot(_ctx.$slots, "icon", {}, () => [createVNode(RuiIcon_default, {
227
+ name: __props.uploaded ? "lu-circle-check" : "lu-file-up",
228
+ color: __props.uploaded ? "success" : "primary"
229
+ }, null, 8, ["name", "color"])])], 2))]),
230
+ createElementVNode("div", _hoisted_7, [renderSlot(_ctx.$slots, "description", {}, () => [createElementVNode("div", _hoisted_8, [createElementVNode("span", null, toDisplayString(__props.uploadText), 1), createElementVNode("button", {
231
+ type: "button",
232
+ class: "text-rui-primary underline disabled:no-underline disabled:text-rui-text-disabled",
233
+ disabled: __props.disabled,
234
+ "data-id": "open-picker",
235
+ onClick: _cache[0] || (_cache[0] = ($event) => openPicker())
236
+ }, toDisplayString(unref(hasFiles) ? __props.replaceText : __props.clickToUploadText), 9, _hoisted_9)])])]),
237
+ createElementVNode("input", mergeProps({
238
+ ref_key: "input",
239
+ ref: input,
240
+ type: "file",
241
+ accept: __props.accept,
242
+ multiple: __props.multiple,
243
+ disabled: __props.disabled,
244
+ hidden: "",
245
+ "data-id": "file-input"
246
+ }, unref(getNonRootAttrs)(_ctx.$attrs, ["class", "onChange"]), { onChange: _cache[1] || (_cache[1] = ($event) => onSelect($event)) }), null, 16, _hoisted_10)
247
+ ], 2), __props.loading ? (openBlock(), createElementBlock("div", _hoisted_11, [createVNode(RuiProgress_default, {
248
+ circular: "",
249
+ variant: __props.progress === void 0 ? "indeterminate" : "determinate",
250
+ value: __props.progress,
251
+ color: "primary",
252
+ size: "40"
253
+ }, null, 8, ["variant", "value"]), unref(progressLabel) ? (openBlock(), createElementBlock("div", {
254
+ key: 0,
255
+ class: "text-xs text-rui-text-secondary",
256
+ "data-id": "progress-label",
257
+ textContent: toDisplayString(unref(progressLabel))
258
+ }, null, 8, _hoisted_12)) : createCommentVNode("", true)])) : createCommentVNode("", true)], 10, _hoisted_1), !__props.hideDetails ? (openBlock(), createBlock(RuiFormTextDetail_default, {
259
+ key: 0,
260
+ "error-messages": unref(combinedErrorMessages),
261
+ hint: __props.hint
262
+ }, null, 8, ["error-messages", "hint"])) : createCommentVNode("", true)], 16);
263
+ };
264
+ }
265
+ });
266
+ //#endregion
267
+ export { RuiFileUpload_vue_vue_type_script_setup_true_lang_default as default };
268
+
269
+ //# sourceMappingURL=RuiFileUpload.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiFileUpload.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../../src/components/forms/file-upload/RuiFileUpload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { formatFileSize, getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\n\nexport interface FileUploadProps {\n /** File type filter (HTML accept attribute syntax). e.g. '.csv', 'image/*', '.png,.jpg' */\n accept?: string;\n /** Allow multiple file selection. */\n multiple?: boolean;\n disabled?: boolean;\n /** Shows a loading overlay (consumer-driven, e.g. while uploading). */\n loading?: boolean;\n /** Upload progress 0-100. When provided alongside `loading`, the overlay shows a determinate progress bar with percentage. */\n progress?: number;\n /** Renders the success state border/icon. Consumer toggles back to false. */\n uploaded?: boolean;\n /** Optional max size per file in bytes; failures emit `error` and set internal error state. */\n maxSize?: number;\n /** External error messages (e.g. from Vuelidate). Shown via the standard form detail block. */\n errorMessages?: string | string[];\n /** Hint text below the dropzone. */\n hint?: string;\n /** Disable drag-and-drop; the dropzone becomes click-only (matches rotki.com use case). */\n noDrop?: boolean;\n /** Replace the default \"Drag and drop or {button}\" copy. */\n uploadText?: string;\n /** Label shown on the inline button when no file is selected. */\n clickToUploadText?: string;\n /** Label shown on the inline button when one or more files are already selected. */\n replaceText?: string;\n /** Hide the bottom hint/error details strip. */\n hideDetails?: boolean;\n}\n\ndefineOptions({\n name: 'RuiFileUpload',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<File | File[] | undefined>({ required: true });\n\nconst {\n accept = '*',\n multiple = false,\n disabled = false,\n loading = false,\n progress = undefined,\n uploaded = false,\n maxSize = undefined,\n errorMessages = [],\n hint = '',\n noDrop = false,\n uploadText = 'Drag and drop or',\n clickToUploadText = 'click to upload',\n replaceText = 'replace file',\n hideDetails = false,\n} = defineProps<FileUploadProps>();\n\nconst emit = defineEmits<{\n error: [message: string];\n}>();\n\ndefineSlots<{\n preview?: (props: { files: File[]; remove: () => void }) => any;\n icon?: () => any;\n description?: () => any;\n}>();\n\nconst wrapper = useTemplateRef<HTMLDivElement>('wrapper');\nconst input = useTemplateRef<HTMLInputElement>('input');\nconst internalError = ref<string>('');\n\nconst files = computed<File[]>(() => {\n const value = get(modelValue);\n if (!value)\n return [];\n return Array.isArray(value) ? value : [value];\n});\n\nconst hasFiles = computed<boolean>(() => get(files).length > 0);\n\nconst progressLabel = computed<string | undefined>(() => {\n const value = progress;\n return value === undefined ? undefined : `${Math.round(value)}%`;\n});\n\nconst combinedErrorMessages = computed<string[]>(() => {\n const external = Array.isArray(errorMessages) ? errorMessages : [errorMessages];\n const internal = get(internalError);\n return [...external.filter(Boolean), ...(internal ? [internal] : [])];\n});\n\nconst { hasError } = useFormTextDetail(combinedErrorMessages, () => []);\n\nfunction matchesAccept(file: File, acceptString: string): boolean {\n if (!acceptString || acceptString === '*' || acceptString === '*/*')\n return true;\n\n const fileName = file.name.toLowerCase();\n const fileExtension = fileName.includes('.') ? fileName.slice(fileName.lastIndexOf('.')) : '';\n const fileType = file.type.toLowerCase();\n const acceptTypes = acceptString.split(',').map(value => value.trim().toLowerCase()).filter(Boolean);\n\n return acceptTypes.some((type) => {\n if (type.startsWith('.'))\n return type === fileExtension;\n if (type.endsWith('/*'))\n return fileType.startsWith(type.slice(0, -1));\n return type === fileType;\n });\n}\n\nfunction reportError(message: string): void {\n set(internalError, message);\n emit('error', message);\n}\n\nfunction clearInternalError(): void {\n set(internalError, '');\n}\n\nfunction validate(candidates: File[]): File[] | undefined {\n if (candidates.length === 0)\n return undefined;\n\n if (!multiple && candidates.length > 1) {\n reportError('Only one file can be uploaded');\n return undefined;\n }\n\n for (const file of candidates) {\n if (!matchesAccept(file, accept)) {\n reportError(`Only ${accept} files are allowed`);\n return undefined;\n }\n if (maxSize !== undefined && file.size > maxSize) {\n reportError(`${file.name} exceeds the maximum size of ${formatFileSize(maxSize)}`);\n return undefined;\n }\n }\n\n return candidates;\n}\n\nfunction setFiles(candidates: File[]): void {\n const validated = validate(candidates);\n if (!validated)\n return;\n clearInternalError();\n set(modelValue, multiple ? validated : validated[0]);\n}\n\nfunction removeFile(target?: File): void {\n clearInternalError();\n const inputEl = get(input);\n if (inputEl)\n inputEl.value = '';\n\n if (!target || !multiple) {\n set(modelValue, multiple ? [] : undefined);\n return;\n }\n\n const remaining = get(files).filter(file => file !== target);\n set(modelValue, remaining);\n}\n\nfunction onSelect(event: Event): void {\n const target = event.target as HTMLInputElement;\n if (!target?.files)\n return;\n setFiles(Array.from(target.files));\n}\n\nfunction onDrop(dropped: File[] | null): void {\n if (disabled || noDrop || !dropped || dropped.length === 0)\n return;\n setFiles(dropped);\n}\n\nconst { isOverDropZone } = useDropZone(wrapper, {\n onDrop,\n});\n\nfunction openPicker(): void {\n if (disabled)\n return;\n get(input)?.click();\n}\n\nwatch(() => errorMessages, () => clearInternalError());\n\ndefineExpose({\n removeFile: () => removeFile(),\n openPicker,\n});\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <div\n ref=\"wrapper\"\n class=\"p-4 border border-rui-grey-300 dark:border-rui-grey-800 rounded-md w-full relative border-dashed transition\"\n :class=\"{\n '!border-rui-primary bg-rui-primary/[0.08]': isOverDropZone && !disabled && !noDrop,\n '!border-rui-error !border-solid bg-rui-error/[0.08]': hasError,\n '!border-rui-success !border-solid bg-rui-success/[0.08]': uploaded,\n 'opacity-60 pointer-events-none': disabled,\n }\"\n :data-disabled=\"disabled || undefined\"\n :data-uploaded=\"uploaded || undefined\"\n :data-error=\"hasError ? '' : undefined\"\n :data-drop-active=\"isOverDropZone || undefined\"\n >\n <div\n class=\"flex flex-col items-center justify-center gap-3\"\n :class=\"{ 'opacity-0': loading }\"\n >\n <slot\n name=\"preview\"\n :files=\"files\"\n :remove=\"() => removeFile()\"\n >\n <div\n v-if=\"hasFiles\"\n class=\"flex flex-col gap-1 w-full\"\n data-id=\"file-list\"\n >\n <div\n v-for=\"file in files\"\n :key=\"`${file.name}-${file.lastModified}`\"\n class=\"flex items-center gap-2 bg-rui-primary/[0.08] rounded-full pl-3 pr-1 py-1\"\n data-id=\"file-item\"\n >\n <RuiIcon\n name=\"lu-file\"\n color=\"primary\"\n size=\"20\"\n />\n <div class=\"flex-1 overflow-hidden min-w-0\">\n <div\n class=\"text-sm leading-5 truncate\"\n :title=\"file.name\"\n >\n {{ file.name }}\n </div>\n <div class=\"text-rui-text-secondary text-xs leading-3\">\n {{ formatFileSize(file.size) }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"p-1 rounded-full hover:bg-rui-primary/[0.16] transition\"\n :disabled=\"disabled\"\n :aria-label=\"`Remove ${file.name}`\"\n data-id=\"remove-file\"\n @click=\"removeFile(file)\"\n >\n <RuiIcon\n name=\"lu-x\"\n size=\"16\"\n />\n </button>\n </div>\n </div>\n <div\n v-else\n class=\"h-10 w-10 rounded-full flex items-center justify-center\"\n :class=\"uploaded ? 'bg-rui-success/[0.12]' : 'bg-rui-primary/[0.12]'\"\n >\n <slot name=\"icon\">\n <RuiIcon\n :name=\"uploaded ? 'lu-circle-check' : 'lu-file-up'\"\n :color=\"uploaded ? 'success' : 'primary'\"\n />\n </slot>\n </div>\n </slot>\n\n <div class=\"text-center text-sm\">\n <slot name=\"description\">\n <div class=\"flex items-center justify-center gap-1 flex-wrap\">\n <span>{{ uploadText }}</span>\n <button\n type=\"button\"\n class=\"text-rui-primary underline disabled:no-underline disabled:text-rui-text-disabled\"\n :disabled=\"disabled\"\n data-id=\"open-picker\"\n @click=\"openPicker()\"\n >\n {{ hasFiles ? replaceText : clickToUploadText }}\n </button>\n </div>\n </slot>\n </div>\n\n <input\n ref=\"input\"\n type=\"file\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n hidden\n data-id=\"file-input\"\n v-bind=\"getNonRootAttrs($attrs, ['class', 'onChange'])\"\n @change=\"onSelect($event)\"\n />\n </div>\n\n <div\n v-if=\"loading\"\n class=\"flex flex-col items-center justify-center absolute h-full w-full top-0 left-0 gap-2\"\n data-id=\"loading\"\n >\n <RuiProgress\n circular\n :variant=\"progress === undefined ? 'indeterminate' : 'determinate'\"\n :value=\"progress\"\n color=\"primary\"\n size=\"40\"\n />\n <div\n v-if=\"progressLabel\"\n class=\"text-xs text-rui-text-secondary\"\n data-id=\"progress-label\"\n v-text=\"progressLabel\"\n />\n </div>\n </div>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n :error-messages=\"combinedErrorMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":"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"}
@@ -21,11 +21,11 @@ var _hoisted_3 = {
21
21
  key: 0,
22
22
  class: "text-rui-error"
23
23
  };
24
- var RuiRadio_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
24
+ var RuiRadio_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
25
25
  name: "RuiRadio",
26
26
  inheritAttrs: false,
27
27
  __name: "RuiRadio",
28
- props: /* @__PURE__ */ mergeModels({
28
+ props: /*@__PURE__*/ mergeModels({
29
29
  value: {},
30
30
  disabled: {
31
31
  type: Boolean,
@@ -1 +1 @@
1
- {"version":3,"file":"RuiRadio.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../../../src/components/forms/radio-button/radio/RuiRadio.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TValue\">\nimport type { ContextColorsType } from '@/consts/colors';\nimport { checkControlStyles, getCheckControlIconSize } from '@/components/forms/check-control-styles';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\n\nexport interface RadioProps<TValue> {\n value: TValue;\n disabled?: boolean;\n color?: ContextColorsType;\n size?: 'sm' | 'lg';\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiRadio',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<TValue>({ required: false });\n\nconst {\n value,\n disabled = false,\n color,\n size,\n label = '',\n hint = '',\n errorMessages = [],\n successMessages = [],\n hideDetails = false,\n required = false,\n} = defineProps<RadioProps<TValue>>();\n\ndefineSlots<{\n default?: () => any;\n}>();\n\nconst { hasError, validation } = useFormTextDetail(\n () => errorMessages,\n () => successMessages,\n);\n\nconst selected = computed<boolean>(() => get(modelValue) === value);\n\nconst ui = computed<ReturnType<typeof checkControlStyles>>(() => checkControlStyles({\n size,\n disabled,\n checked: get(selected),\n validation: get(validation),\n color,\n}));\n\nconst iconSize = computed<number>(() => getCheckControlIconSize(size));\n\nfunction input(event: Event): void {\n const target = event.target;\n if (target instanceof HTMLInputElement && target.checked)\n set(modelValue, value);\n}\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <label\n :class=\"ui.wrapper()\"\n :data-disabled=\"disabled || undefined\"\n :data-checked=\"selected || undefined\"\n :data-error=\"hasError ? '' : undefined\"\n >\n <input\n :checked=\"selected\"\n type=\"radio\"\n :class=\"ui.input()\"\n :disabled=\"disabled\"\n :aria-invalid=\"hasError\"\n v-bind=\"getNonRootAttrs($attrs)\"\n :value=\"value\"\n @input=\"input($event)\"\n />\n <div :class=\"ui.control()\">\n <RuiIcon\n v-if=\"selected\"\n name=\"lu-radio-button-fill\"\n :size=\"iconSize\"\n />\n <RuiIcon\n v-else\n name=\"lu-checkbox-blank-circle\"\n :size=\"iconSize\"\n />\n </div>\n <div\n v-if=\"label || $slots.default\"\n :class=\"ui.label()\"\n >\n <slot>{{ label }}</slot>\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </div>\n </label>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BA,MAAM,aAAa,SAAmB,SAAA,aAAqB;EAmB3D,MAAM,EAAE,UAAU,eAAe,wBACzB,QAAA,qBACA,QAAA,gBACP;EAED,MAAM,WAAW,eAAwB,IAAI,WAAW,KAAK,QAAA,MAAM;EAEnE,MAAM,KAAK,eAAsD,mBAAmB;GAClF,MAAG,QAAA;GACH,UAAO,QAAA;GACP,SAAS,IAAI,SAAS;GACtB,YAAY,IAAI,WAAW;GAC3B,OAAI,QAAA;GACL,CAAC,CAAC;EAEH,MAAM,WAAW,eAAuB,wBAAwB,QAAA,KAAK,CAAC;EAEtE,SAAS,MAAM,OAAoB;GACjC,MAAM,SAAS,MAAM;AACrB,OAAI,kBAAkB,oBAAoB,OAAO,QAC/C,KAAI,YAAY,QAAA,MAAM;;;uBAKxB,mBAgDM,OAAA,eAAA,mBAhDO,MAAA,aAAY,CAACA,KAAAA,OAAM,CAAA,CAAA,EAAA,CAC9B,mBAwCQ,SAAA;IAvCL,OAAK,eAAE,MAAA,GAAE,CAAC,SAAO,CAAA;IACjB,iBAAe,QAAA,YAAY,KAAA;IAC3B,gBAAc,MAAA,SAAQ,IAAI,KAAA;IAC1B,cAAY,MAAA,SAAQ,GAAA,KAAQ,KAAA;;IAE7B,mBASE,SATF,WASE;KARC,SAAS,MAAA,SAAQ;KAClB,MAAK;KACJ,OAAO,MAAA,GAAE,CAAC,OAAK;KACf,UAAU,QAAA;KACV,gBAAc,MAAA,SAAA;OACP,MAAA,gBAAe,CAACA,KAAAA,OAAM,EAAA;KAC7B,OAAO,QAAA;KACP,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAM,OAAM;;IAEtB,mBAWM,OAAA,EAXA,OAAK,eAAE,MAAA,GAAE,CAAC,SAAO,CAAA,EAAA,EAAA,CAEb,MAAA,SAAQ,IAAA,WAAA,EADhB,YAIE,iBAAA;;KAFA,MAAK;KACJ,MAAM,MAAA,SAAA;2CAET,YAIE,iBAAA;;KAFA,MAAK;KACJ,MAAM,MAAA,SAAA;;IAIH,QAAA,SAASC,KAAAA,OAAO,WAAA,WAAA,EADxB,mBAWM,OAAA;;KATH,OAAK,eAAE,MAAA,GAAE,CAAC,OAAK,CAAA;QAEhB,WAAwB,KAAA,QAAA,WAAA,EAAA,QAAA,CAAA,gBAAA,gBAAf,QAAA,MAAK,EAAA,EAAA,CAAA,CAAA,EAEN,QAAA,YAAA,WAAA,EADR,mBAKO,QALP,YAGC,MAED,IAAA,mBAAA,IAAA,KAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;wBAIK,QAAA,eAAA,WAAA,EADT,YAKE,2BAAA;;IAHC,kBAAgB,QAAA;IAChB,oBAAkB,QAAA;IAClB,MAAM,QAAA"}
1
+ {"version":3,"file":"RuiRadio.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../../../src/components/forms/radio-button/radio/RuiRadio.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TValue\">\nimport type { ContextColorsType } from '@/consts/colors';\nimport { checkControlStyles, getCheckControlIconSize } from '@/components/forms/check-control-styles';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\n\nexport interface RadioProps<TValue> {\n value: TValue;\n disabled?: boolean;\n color?: ContextColorsType;\n size?: 'sm' | 'lg';\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiRadio',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<TValue>({ required: false });\n\nconst {\n value,\n disabled = false,\n color,\n size,\n label = '',\n hint = '',\n errorMessages = [],\n successMessages = [],\n hideDetails = false,\n required = false,\n} = defineProps<RadioProps<TValue>>();\n\ndefineSlots<{\n default?: () => any;\n}>();\n\nconst { hasError, validation } = useFormTextDetail(\n () => errorMessages,\n () => successMessages,\n);\n\nconst selected = computed<boolean>(() => get(modelValue) === value);\n\nconst ui = computed<ReturnType<typeof checkControlStyles>>(() => checkControlStyles({\n size,\n disabled,\n checked: get(selected),\n validation: get(validation),\n color,\n}));\n\nconst iconSize = computed<number>(() => getCheckControlIconSize(size));\n\nfunction input(event: Event): void {\n const target = event.target;\n if (target instanceof HTMLInputElement && target.checked)\n set(modelValue, value);\n}\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <label\n :class=\"ui.wrapper()\"\n :data-disabled=\"disabled || undefined\"\n :data-checked=\"selected || undefined\"\n :data-error=\"hasError ? '' : undefined\"\n >\n <input\n :checked=\"selected\"\n type=\"radio\"\n :class=\"ui.input()\"\n :disabled=\"disabled\"\n :aria-invalid=\"hasError\"\n v-bind=\"getNonRootAttrs($attrs)\"\n :value=\"value\"\n @input=\"input($event)\"\n />\n <div :class=\"ui.control()\">\n <RuiIcon\n v-if=\"selected\"\n name=\"lu-radio-button-fill\"\n :size=\"iconSize\"\n />\n <RuiIcon\n v-else\n name=\"lu-checkbox-blank-circle\"\n :size=\"iconSize\"\n />\n </div>\n <div\n v-if=\"label || $slots.default\"\n :class=\"ui.label()\"\n >\n <slot>{{ label }}</slot>\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </div>\n </label>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BA,MAAM,aAAa,SAAmB,SAAA,YAAoB;EAmB1D,MAAM,EAAE,UAAU,eAAe,wBACzB,QAAA,qBACA,QAAA,eACR;EAEA,MAAM,WAAW,eAAwB,IAAI,UAAU,MAAM,QAAA,KAAK;EAElE,MAAM,KAAK,eAAsD,mBAAmB;GAClF,MAAG,QAAA;GACH,UAAO,QAAA;GACP,SAAS,IAAI,QAAQ;GACrB,YAAY,IAAI,UAAU;GAC1B,OAAI,QAAA;EACN,CAAC,CAAC;EAEF,MAAM,WAAW,eAAuB,wBAAwB,QAAA,IAAI,CAAC;EAErE,SAAS,MAAM,OAAoB;GACjC,MAAM,SAAS,MAAM;GACrB,IAAI,kBAAkB,oBAAoB,OAAO,SAC/C,IAAI,YAAY,QAAA,KAAK;EACzB;;uBAIE,mBAgDM,OAAA,eAAA,mBAhDO,MAAA,YAAA,CAAY,CAACA,KAAAA,MAAM,CAAA,CAAA,GAAA,CAC9B,mBAwCQ,SAAA;IAvCL,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,QAAO,CAAA;IACjB,iBAAe,QAAA,YAAY,KAAA;IAC3B,gBAAc,MAAA,QAAA,KAAY,KAAA;IAC1B,cAAY,MAAA,QAAA,IAAQ,KAAQ,KAAA;;IAE7B,mBASE,SATF,WASE;KARC,SAAS,MAAA,QAAA;KACV,MAAK;KACJ,OAAO,MAAA,EAAA,CAAE,CAAC,MAAK;KACf,UAAU,QAAA;KACV,gBAAc,MAAA,QAAA;OACP,MAAA,eAAA,CAAe,CAACA,KAAAA,MAAM,GAAA;KAC7B,OAAO,QAAA;KACP,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAM,MAAM;;IAEtB,mBAWM,OAAA,EAXA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,QAAO,CAAA,EAAA,GAAA,CAEb,MAAA,QAAA,KAAA,UAAA,GADR,YAIE,iBAAA;;KAFA,MAAK;KACJ,MAAM,MAAA,QAAA;2CAET,YAIE,iBAAA;;KAFA,MAAK;KACJ,MAAM,MAAA,QAAA;;IAIH,QAAA,SAASC,KAAAA,OAAO,WAAA,UAAA,GADxB,mBAWM,OAAA;;KATH,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,MAAK,CAAA;QAEhB,WAAwB,KAAA,QAAA,WAAA,CAAA,SAAA,CAAA,gBAAA,gBAAf,QAAA,KAAK,GAAA,CAAA,CAAA,CAAA,GAEN,QAAA,YAAA,UAAA,GADR,mBAKO,QALP,YAGC,KAED,KAAA,mBAAA,IAAA,IAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;wBAIK,QAAA,eAAA,UAAA,GADT,YAKE,2BAAA;;IAHC,kBAAgB,QAAA;IAChB,oBAAkB,QAAA;IAClB,MAAM,QAAA"}
@@ -10,11 +10,11 @@ var _hoisted_2 = {
10
10
  key: 0,
11
11
  class: "text-rui-error"
12
12
  };
13
- var RuiRadioGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
13
+ var RuiRadioGroup_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
14
14
  name: "RuiRadioGroup",
15
15
  inheritAttrs: false,
16
16
  __name: "RuiRadioGroup",
17
- props: /* @__PURE__ */ mergeModels({
17
+ props: /*@__PURE__*/ mergeModels({
18
18
  inline: {
19
19
  type: Boolean,
20
20
  default: false
@@ -1 +1 @@
1
- {"version":3,"file":"RuiRadioGroup.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../../../src/components/forms/radio-button/radio-group/RuiRadioGroup.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TValue\">\nimport type { ContextColorsType } from '@/consts/colors';\nimport { Fragment, isVNode } from 'vue';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport { assert } from '@/utils/assert';\n\nexport interface Props {\n inline?: boolean;\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n disabled?: boolean;\n color?: ContextColorsType;\n size?: 'sm' | 'lg';\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiRadioGroup',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<TValue>({ required: false });\n\nconst {\n inline = false,\n label = '',\n hint = '',\n errorMessages = [],\n successMessages = [],\n hideDetails = false,\n disabled = false,\n color,\n size,\n required = false,\n} = defineProps<Props>();\n\nconst slots = defineSlots<{\n default?: () => any;\n}>();\n\nconst radioGroupName = useId();\n\nconst children = computed<VNode[]>(() => {\n const slotContent = slots.default?.() ?? [];\n\n // When using dynamic content with v-for the slot content is a single fragment\n // containing the children components.\n if (slotContent.length === 1) {\n const firstChild = slotContent[0];\n assert(firstChild);\n if (firstChild.type === Fragment) {\n return Array.isArray(firstChild.children) ? firstChild.children.filter(isVNode) : [];\n }\n }\n return slotContent;\n});\n</script>\n\n<template>\n <div\n role=\"radiogroup\"\n v-bind=\"$attrs\"\n >\n <div\n v-if=\"label\"\n class=\"text-rui-text-secondary text-body-1\"\n >\n {{ label }}\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </div>\n <div :class=\"{ 'flex space-x-6': inline }\">\n <Component\n :is=\"child\"\n v-for=\"(child, i) in children\"\n :key=\"i\"\n v-model=\"modelValue\"\n :disabled=\"disabled\"\n :color=\"color\"\n :size=\"size\"\n hide-details\n :name=\"radioGroupName\"\n />\n </div>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBA,MAAM,aAAa,SAAmB,SAAA,aAAqB;EAe3D,MAAM,QAAQ,UAEV;EAEJ,MAAM,iBAAiB,OAAO;EAE9B,MAAM,WAAW,eAAwB;GACvC,MAAM,cAAc,MAAM,WAAW,IAAI,EAAE;AAI3C,OAAI,YAAY,WAAW,GAAG;IAC5B,MAAM,aAAa,YAAY;AAC/B,WAAO,WAAW;AAClB,QAAI,WAAW,SAAS,SACtB,QAAO,MAAM,QAAQ,WAAW,SAAS,GAAG,WAAW,SAAS,OAAO,QAAQ,GAAG,EAAE;;AAGxF,UAAO;IACP;;uBAIA,mBAmCM,OAnCN,WAmCM,EAlCJ,MAAK,cAAY,EACTA,KAAAA,OAAM,EAAA;IAGN,QAAA,SAAA,WAAA,EADR,mBAWM,OAXN,YAWM,CAAA,gBAAA,gBAPD,QAAA,MAAK,GAAG,KACX,EAAA,EACQ,QAAA,YAAA,WAAA,EADR,mBAKO,QALP,YAGC,MAED,IAAA,mBAAA,IAAA,KAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;IAEF,mBAYM,OAAA,EAZA,OAAK,eAAA,EAAA,kBAAsB,QAAA,QAAM,CAAA,EAAA,EAAA,EAAA,UAAA,KAAA,EACrC,mBAUE,UAAA,MAAA,WARqB,MAAA,SAAQ,GAArB,OAAO,MAAC;yBAFlB,YAUE,wBATK,MAAK,EAAA;MAET,KAAK;kBACG,WAAA;8EAAU,QAAA;MAClB,UAAU,QAAA;MACV,OAAO,QAAA;MACP,MAAM,QAAA;MACP,gBAAA;MACC,MAAM,MAAA,eAAA;;;;;;;;;KAIF,QAAA,eAAA,WAAA,EADT,YAKE,2BAAA;;KAHC,kBAAgB,QAAA;KAChB,oBAAkB,QAAA;KAClB,MAAM,QAAA"}
1
+ {"version":3,"file":"RuiRadioGroup.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../../../src/components/forms/radio-button/radio-group/RuiRadioGroup.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TValue\">\nimport type { ContextColorsType } from '@/consts/colors';\nimport { Fragment, isVNode } from 'vue';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport { assert } from '@/utils/assert';\n\nexport interface Props {\n inline?: boolean;\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n disabled?: boolean;\n color?: ContextColorsType;\n size?: 'sm' | 'lg';\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiRadioGroup',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<TValue>({ required: false });\n\nconst {\n inline = false,\n label = '',\n hint = '',\n errorMessages = [],\n successMessages = [],\n hideDetails = false,\n disabled = false,\n color,\n size,\n required = false,\n} = defineProps<Props>();\n\nconst slots = defineSlots<{\n default?: () => any;\n}>();\n\nconst radioGroupName = useId();\n\nconst children = computed<VNode[]>(() => {\n const slotContent = slots.default?.() ?? [];\n\n // When using dynamic content with v-for the slot content is a single fragment\n // containing the children components.\n if (slotContent.length === 1) {\n const firstChild = slotContent[0];\n assert(firstChild);\n if (firstChild.type === Fragment) {\n return Array.isArray(firstChild.children) ? firstChild.children.filter(isVNode) : [];\n }\n }\n return slotContent;\n});\n</script>\n\n<template>\n <div\n role=\"radiogroup\"\n v-bind=\"$attrs\"\n >\n <div\n v-if=\"label\"\n class=\"text-rui-text-secondary text-body-1\"\n >\n {{ label }}\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </div>\n <div :class=\"{ 'flex space-x-6': inline }\">\n <Component\n :is=\"child\"\n v-for=\"(child, i) in children\"\n :key=\"i\"\n v-model=\"modelValue\"\n :disabled=\"disabled\"\n :color=\"color\"\n :size=\"size\"\n hide-details\n :name=\"radioGroupName\"\n />\n </div>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBA,MAAM,aAAa,SAAmB,SAAA,YAAoB;EAe1D,MAAM,QAAQ,SAAA;EAId,MAAM,iBAAiB,MAAM;EAE7B,MAAM,WAAW,eAAwB;GACvC,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;GAI1C,IAAI,YAAY,WAAW,GAAG;IAC5B,MAAM,aAAa,YAAY;IAC/B,OAAO,UAAU;IACjB,IAAI,WAAW,SAAS,UACtB,OAAO,MAAM,QAAQ,WAAW,QAAQ,IAAI,WAAW,SAAS,OAAO,OAAO,IAAI,CAAC;GAEvF;GACA,OAAO;EACT,CAAC;;uBAIC,mBAmCM,OAnCN,WAmCM,EAlCJ,MAAK,aAAY,GACTA,KAAAA,MAAM,GAAA;IAGN,QAAA,SAAA,UAAA,GADR,mBAWM,OAXN,YAWM,CAAA,gBAAA,gBAPD,QAAA,KAAK,IAAG,KACX,CAAA,GACQ,QAAA,YAAA,UAAA,GADR,mBAKO,QALP,YAGC,KAED,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;IAEF,mBAYM,OAAA,EAZA,OAAK,eAAA,EAAA,kBAAsB,QAAA,OAAM,CAAA,EAAA,GAAA,EAAA,UAAA,IAAA,GACrC,mBAUE,UAAA,MAAA,WARqB,MAAA,QAAA,IAAb,OAAO,MAAC;yBAFlB,YAUE,wBATK,KAAK,GAAA;MAET,KAAK;kBACG,WAAA;8EAAU,QAAA;MAClB,UAAU,QAAA;MACV,OAAO,QAAA;MACP,MAAM,QAAA;MACP,gBAAA;MACC,MAAM,MAAA,cAAA;;;;;;;;;KAIF,QAAA,eAAA,UAAA,GADT,YAKE,2BAAA;;KAHC,kBAAgB,QAAA;KAChB,oBAAkB,QAAA;KAClB,MAAM,QAAA"}
@@ -4,11 +4,11 @@ import RuiTextField_default from "../text-field/RuiTextField.js";
4
4
  import { createBlock, createElementVNode, createSlots, createVNode, defineComponent, mergeModels, mergeProps, openBlock, ref, renderSlot, unref, useModel, withCtx } from "vue";
5
5
  //#region src/components/forms/revealable-text-field/RuiRevealableTextField.vue?vue&type=script&setup=true&lang.ts
6
6
  var _hoisted_1 = { class: "flex items-center" };
7
- var RuiRevealableTextField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
+ var RuiRevealableTextField_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
8
  name: "RuiRevealableTextField",
9
9
  inheritAttrs: false,
10
10
  __name: "RuiRevealableTextField",
11
- props: /* @__PURE__ */ mergeModels({
11
+ props: /*@__PURE__*/ mergeModels({
12
12
  label: { default: "" },
13
13
  placeholder: { default: "" },
14
14
  disabled: {
@@ -1 +1 @@
1
- {"version":3,"file":"RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../../src/components/forms/revealable-text-field/RuiRevealableTextField.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiTextField, { type TextFieldProps } from '@/components/forms/text-field/RuiTextField.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\n\nexport interface Props extends TextFieldProps {}\n\ndefineOptions({\n name: 'RuiRevealableTextField',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<string>({ required: true });\n\nconst {\n label = '',\n placeholder = '',\n disabled = false,\n variant = 'default',\n dense = false,\n hint = '',\n errorMessages = [],\n successMessages = [],\n hideDetails = false,\n readonly = false,\n clearable = false,\n required = false,\n} = defineProps<Props>();\n\ndefineSlots<{\n prepend?: () => any;\n append?: () => any;\n}>();\n\nconst hidden = ref<boolean>(true);\n</script>\n\n<template>\n <RuiTextField\n v-bind=\"$attrs\"\n v-model=\"modelValue\"\n :label=\"label\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :variant=\"variant\"\n :dense=\"dense\"\n :hint=\"hint\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hide-details=\"hideDetails\"\n :readonly=\"readonly\"\n :clearable=\"clearable\"\n :required=\"required\"\n :type=\"hidden ? 'password' : 'text'\"\n >\n <template\n v-if=\"$slots.prepend\"\n #prepend\n >\n <slot name=\"prepend\" />\n </template>\n <template #append>\n <div class=\"flex items-center\">\n <RuiButton\n :disabled=\"disabled\"\n :aria-label=\"hidden ? 'Show password' : 'Hide password'\"\n tabindex=\"-1\"\n variant=\"text\"\n type=\"button\"\n icon\n data-id=\"toggle-visibility\"\n class=\"-mr-1 !p-2\"\n @click=\"hidden = !hidden\"\n >\n <RuiIcon\n class=\"text-black/[.54] dark:text-white/[.56]\"\n size=\"20\"\n :name=\"hidden ? 'lu-eye-off' : 'lu-eye'\"\n />\n </RuiButton>\n\n <slot name=\"append\" />\n </div>\n </template>\n </RuiTextField>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYA,MAAM,aAAa,SAAmB,SAAA,aAAoB;EAsB1D,MAAM,SAAS,IAAa,KAAK;;uBAI/B,YA8Ce,sBA9Cf,WACUA,KA6CK,QA7CC;gBACL,WAAA;4EAAU,QAAA;IAClB,OAAO,QAAA;IACP,aAAa,QAAA;IACb,UAAU,QAAA;IACV,SAAS,QAAA;IACT,OAAO,QAAA;IACP,MAAM,QAAA;IACN,kBAAgB,QAAA;IAChB,oBAAkB,QAAA;IAClB,gBAAc,QAAA;IACd,UAAU,QAAA;IACV,WAAW,QAAA;IACX,UAAU,QAAA;IACV,MAAM,MAAA,OAAM,GAAA,aAAA;;IAQF,QAAM,cAqBT,CApBN,mBAoBM,OApBN,YAoBM,CAnBJ,YAgBY,mBAAA;KAfT,UAAU,QAAA;KACV,cAAY,MAAA,OAAM,GAAA,kBAAA;KACnB,UAAS;KACT,SAAQ;KACR,MAAK;KACL,MAAA;KACA,WAAQ;KACR,OAAM;KACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,QAAM,CAAI,MAAA,OAAM;;4BAMtB,CAJF,YAIE,iBAAA;MAHA,OAAM;MACN,MAAK;MACJ,MAAM,MAAA,OAAM,GAAA,eAAA;;;uCAIjB,WAAsB,KAAA,QAAA,SAAA,CAAA,CAAA,CAAA,CAAA;;OAzBlBC,KAAAA,OAAO,UAAA;UACZ;sBAEsB,CAAvB,WAAuB,KAAA,QAAA,UAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../../src/components/forms/revealable-text-field/RuiRevealableTextField.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiTextField, { type TextFieldProps } from '@/components/forms/text-field/RuiTextField.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\n\nexport interface Props extends TextFieldProps {}\n\ndefineOptions({\n name: 'RuiRevealableTextField',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<string>({ required: true });\n\nconst {\n label = '',\n placeholder = '',\n disabled = false,\n variant = 'default',\n dense = false,\n hint = '',\n errorMessages = [],\n successMessages = [],\n hideDetails = false,\n readonly = false,\n clearable = false,\n required = false,\n} = defineProps<Props>();\n\ndefineSlots<{\n prepend?: () => any;\n append?: () => any;\n}>();\n\nconst hidden = ref<boolean>(true);\n</script>\n\n<template>\n <RuiTextField\n v-bind=\"$attrs\"\n v-model=\"modelValue\"\n :label=\"label\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :variant=\"variant\"\n :dense=\"dense\"\n :hint=\"hint\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hide-details=\"hideDetails\"\n :readonly=\"readonly\"\n :clearable=\"clearable\"\n :required=\"required\"\n :type=\"hidden ? 'password' : 'text'\"\n >\n <template\n v-if=\"$slots.prepend\"\n #prepend\n >\n <slot name=\"prepend\" />\n </template>\n <template #append>\n <div class=\"flex items-center\">\n <RuiButton\n :disabled=\"disabled\"\n :aria-label=\"hidden ? 'Show password' : 'Hide password'\"\n tabindex=\"-1\"\n variant=\"text\"\n type=\"button\"\n icon\n data-id=\"toggle-visibility\"\n class=\"-mr-1 !p-2\"\n @click=\"hidden = !hidden\"\n >\n <RuiIcon\n class=\"text-black/[.54] dark:text-white/[.56]\"\n size=\"20\"\n :name=\"hidden ? 'lu-eye-off' : 'lu-eye'\"\n />\n </RuiButton>\n\n <slot name=\"append\" />\n </div>\n </template>\n </RuiTextField>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYA,MAAM,aAAa,SAAmB,SAAA,YAAmB;EAsBzD,MAAM,SAAS,IAAa,IAAI;;uBAI9B,YA8Ce,sBA9Cf,WACUA,KA6CK,QA7CC;gBACL,WAAA;4EAAU,QAAA;IAClB,OAAO,QAAA;IACP,aAAa,QAAA;IACb,UAAU,QAAA;IACV,SAAS,QAAA;IACT,OAAO,QAAA;IACP,MAAM,QAAA;IACN,kBAAgB,QAAA;IAChB,oBAAkB,QAAA;IAClB,gBAAc,QAAA;IACd,UAAU,QAAA;IACV,WAAW,QAAA;IACX,UAAU,QAAA;IACV,MAAM,MAAA,MAAA,IAAM,aAAA;;IAQF,QAAM,cAqBT,CApBN,mBAoBM,OApBN,YAoBM,CAnBJ,YAgBY,mBAAA;KAfT,UAAU,QAAA;KACV,cAAY,MAAA,MAAA,IAAM,kBAAA;KACnB,UAAS;KACT,SAAQ;KACR,MAAK;KACL,MAAA;KACA,WAAQ;KACR,OAAM;KACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,QAAM,CAAI,MAAA,MAAA;;4BAMhB,CAJF,YAIE,iBAAA;MAHA,OAAM;MACN,MAAK;MACJ,MAAM,MAAA,MAAA,IAAM,eAAA;;;uCAIjB,WAAsB,KAAA,QAAA,QAAA,CAAA,CAAA,CAAA,CAAA;;OAzBlBC,KAAAA,OAAO,UAAA;UACZ;sBAEsB,CAAvB,WAAuB,KAAA,QAAA,SAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiMenuSelect.js","names":[],"sources":["../../../../src/components/forms/select/RuiMenuSelect.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TValue, TItem\">\nimport type { VueClassValue } from '@/types/class-value';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport { menuSelectStyles, type MenuSelectVariant } from '@/components/forms/select/menu-select-styles';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiMenu, { type MenuProps } from '@/components/overlays/menu/RuiMenu.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { type KeyOfType, useDropdownMenu } from '@/composables/dropdown-menu';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\nimport { cn } from '@/utils/tv';\n\nexport interface RuiMenuSelectClassNames {\n root?: VueClassValue;\n label?: VueClassValue;\n menu?: VueClassValue;\n option?: VueClassValue;\n}\n\nexport interface MenuSelectProps<TValue, TItem> {\n options: TItem[];\n keyAttr?: KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>;\n textAttr?: keyof TItem;\n disabled?: boolean;\n loading?: boolean;\n readOnly?: boolean;\n dense?: boolean;\n clearable?: boolean;\n label?: string;\n menuOptions?: MenuProps;\n classNames?: RuiMenuSelectClassNames;\n /** @deprecated Use `classNames.label` instead */\n labelClass?: string;\n /** @deprecated Use `classNames.menu` instead */\n menuClass?: string;\n /** @deprecated Use `classNames.option` instead */\n optionClass?: string;\n prependWidth?: number;\n appendWidth?: number;\n itemHeight?: number;\n variant?: MenuSelectVariant;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n autoSelectFirst?: boolean;\n hideNoData?: boolean;\n noDataText?: string;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiMenuSelect',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<TValue | undefined>({ required: true });\n\nconst {\n options,\n disabled = false,\n loading = false,\n readOnly = false,\n dense = false,\n clearable = false,\n hideDetails = false,\n label = 'Select',\n menuOptions,\n classNames,\n labelClass,\n menuClass,\n variant = 'default',\n hint,\n keyAttr,\n textAttr,\n itemHeight,\n errorMessages = [],\n successMessages = [],\n autoSelectFirst = false,\n hideNoData = false,\n noDataText = 'No data available',\n required = false,\n} = defineProps<MenuSelectProps<TValue, TItem>>();\n\ndefineSlots<{\n 'activator'?: (props: {\n disabled: boolean;\n value: TItem | undefined;\n variant: string;\n readOnly: boolean;\n attrs: Record<string, unknown>;\n open: boolean;\n hasError: boolean;\n hasSuccess: boolean;\n }) => any;\n 'activator.label'?: (props: { value: TItem | undefined }) => any;\n 'selection.prepend'?: (props: { item: TItem }) => any;\n 'selection'?: (props: { item: TItem }) => any;\n 'item.prepend'?: (props: { disabled: boolean; item: TItem; active: boolean }) => any;\n 'item'?: (props: { disabled: boolean; item: TItem; active: boolean }) => any;\n 'item.append'?: (props: { disabled: boolean; item: TItem; active: boolean }) => any;\n 'no-data'?: () => any;\n}>();\n\nconst menuRef = useTemplateRef<HTMLDivElement>('menuRef');\nconst activator = useTemplateRef<HTMLDivElement>('activator');\nconst { focused } = useFocus(activator);\nconst isHovered = ref<boolean>(false);\n\nconst { hasError, hasSuccess } = useFormTextDetail(\n () => errorMessages,\n () => successMessages,\n);\n\nconst value = computed<TItem | undefined>({\n get: () => {\n const value = get(modelValue);\n if (keyAttr)\n return options.find(option => option[keyAttr] === value);\n return value as unknown as TItem;\n },\n set: (selected?: TItem) => {\n const selection = keyAttr && selected ? selected[keyAttr] : selected;\n set(modelValue, selection as TValue);\n },\n});\n\nfunction setValue(val: TItem): void {\n set(value, val);\n set(focused, true);\n}\n\nconst {\n containerProps,\n wrapperProps,\n renderedData,\n isOpen,\n menuWidth,\n getText,\n getIdentifier,\n isActiveItem,\n highlightedIndex,\n moveHighlight,\n applyHighlighted,\n valueKey,\n} = useDropdownMenu<TValue, TItem>({\n itemHeight: itemHeight ?? (dense ? 30 : 48),\n keyAttr,\n textAttr,\n options: () => options,\n dense: () => dense,\n value,\n menuRef,\n disabled: () => disabled,\n autoSelectFirst,\n setValue,\n});\n\nconst outlined = computed<boolean>(() => variant === 'outlined');\nconst float = computed<boolean>(() => (get(isOpen) || !!get(value)) && get(outlined));\n\nconst legendText = computed<string>(() => {\n if (!get(float) || !label)\n return '';\n return required ? `${label} ﹡` : label;\n});\n\nconst ui = computed<ReturnType<typeof menuSelectStyles>>(() => menuSelectStyles({\n filled: variant === 'filled',\n outlined: get(outlined),\n float: get(float),\n opened: get(isOpen),\n hovered: get(isHovered),\n dense,\n disabled,\n readonly: readOnly,\n hasError: get(hasError),\n hasSuccess: get(hasSuccess) && !get(hasError),\n}));\n\nconst highlightedClass = menuSelectStyles({}).highlighted();\n\nfunction clear(): void {\n set(modelValue, undefined);\n}\n</script>\n\n<template>\n <RuiMenu\n v-model=\"isOpen\"\n v-bind=\"{ ...getRootAttrs($attrs, []), ...menuOptions }\"\n :class=\"ui.wrapper({ class: cn($attrs.class) })\"\n placement=\"bottom-start\"\n :close-on-content-click=\"true\"\n :full-width=\"true\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n :dense=\"dense\"\n :show-details=\"!hideDetails\"\n :disabled=\"disabled\"\n disable-auto-focus\n >\n <template #activator=\"{ attrs, open, hasError: slotHasError, hasSuccess: slotHasSuccess }\">\n <slot\n name=\"activator\"\n v-bind=\"{ disabled, value, variant, readOnly, attrs, open, hasError: slotHasError, hasSuccess: slotHasSuccess }\"\n >\n <button\n ref=\"activator\"\n :disabled=\"disabled\"\n :aria-disabled=\"disabled\"\n :aria-expanded=\"isOpen\"\n :aria-readonly=\"readOnly || undefined\"\n :aria-required=\"required || undefined\"\n :aria-busy=\"loading || undefined\"\n type=\"button\"\n :tabindex=\"disabled || readOnly ? -1 : 0\"\n :class=\"ui.activator({ class: cn(classNames?.label) ?? labelClass })\"\n v-bind=\"{\n ...getNonRootAttrs($attrs),\n ...(readOnly ? {} : attrs),\n }\"\n data-id=\"activator\"\n :aria-invalid=\"hasError\"\n @mouseenter=\"isHovered = true\"\n @mouseleave=\"isHovered = false\"\n @keydown.up.prevent=\"moveHighlight(true)\"\n @keydown.down.prevent=\"moveHighlight(false)\"\n @keydown.enter.prevent=\"applyHighlighted()\"\n @keydown.space.prevent=\"applyHighlighted()\"\n @keydown.home.prevent=\"highlightedIndex = 0\"\n @keydown.end.prevent=\"highlightedIndex = options.length - 1\"\n >\n <span\n v-if=\"outlined || !value\"\n :class=\"[\n ui.label(),\n { 'pr-2': !value && !open && outlined },\n ]\"\n >\n <slot\n name=\"activator.label\"\n v-bind=\"{ value }\"\n >\n {{ label }}\n </slot>\n <span\n v-if=\"required\"\n :class=\"ui.required()\"\n >\n ﹡\n </span>\n </span>\n <span\n v-if=\"value\"\n :class=\"ui.value()\"\n >\n <slot\n name=\"selection.prepend\"\n v-bind=\"{ item: value }\"\n />\n <slot\n name=\"selection\"\n v-bind=\"{ item: value }\"\n >\n {{ getText(value) }}\n </slot>\n </span>\n\n <span\n v-if=\"clearable && value && !disabled\"\n data-id=\"clear\"\n :class=\"[ui.clear(), focused && '!visible']\"\n @click.stop.prevent=\"clear()\"\n >\n <RuiIcon\n color=\"error\"\n name=\"lu-x\"\n size=\"18\"\n />\n </span>\n\n <span :class=\"ui.iconWrapper()\">\n <RuiIcon\n :class=\"ui.icon()\"\n :size=\"dense ? 16 : 24\"\n name=\"lu-chevron-down\"\n />\n </span>\n\n <RuiProgress\n v-if=\"loading\"\n :class=\"ui.progress()\"\n color=\"primary\"\n thickness=\"3\"\n variant=\"indeterminate\"\n />\n </button>\n <fieldset\n v-if=\"outlined\"\n :class=\"ui.fieldset()\"\n >\n <legend :class=\"ui.legend()\">\n {{ legendText }}\n </legend>\n </fieldset>\n </slot>\n <input\n :value=\"valueKey\"\n class=\"hidden\"\n type=\"hidden\"\n />\n </template>\n <template #default=\"{ width }\">\n <div\n v-if=\"options.length > 0\"\n :ref=\"containerProps.ref\"\n :class=\"ui.menu({ class: cn(classNames?.menu) ?? menuClass })\"\n :style=\"[containerProps.style, { width: `${width}px`, minWidth: menuWidth }]\"\n @scroll=\"containerProps.onScroll\"\n @keydown.up.prevent=\"moveHighlight(true)\"\n @keydown.down.prevent=\"moveHighlight(false)\"\n >\n <div\n v-bind=\"wrapperProps\"\n ref=\"menuRef\"\n >\n <RuiButton\n v-for=\"{ item, _index } in renderedData\"\n :key=\"getIdentifier(item)\"\n :active=\"isActiveItem(item)\"\n :aria-selected=\"isActiveItem(item)\"\n :size=\"dense ? 'sm' : undefined\"\n variant=\"list\"\n :data-highlighted=\"highlightedIndex === _index\"\n :class=\"{\n [highlightedClass]: !isActiveItem(item) && highlightedIndex === _index,\n }\"\n @click=\"setValue(item)\"\n >\n <template #prepend>\n <slot\n name=\"item.prepend\"\n v-bind=\"{ disabled, item, active: isActiveItem(item) }\"\n />\n </template>\n <slot\n name=\"item\"\n v-bind=\"{ disabled, item, active: isActiveItem(item) }\"\n >\n {{ getText(item) }}\n </slot>\n <template #append>\n <slot\n name=\"item.append\"\n v-bind=\"{ disabled, item, active: isActiveItem(item) }\"\n />\n </template>\n </RuiButton>\n </div>\n </div>\n\n <div\n v-else-if=\"!hideNoData\"\n data-id=\"no-data\"\n :style=\"{ width: `${width}px`, minWidth: menuWidth }\"\n :class=\"classNames?.menu ?? menuClass\"\n >\n <slot name=\"no-data\">\n <div class=\"p-4\">\n {{ noDataText }}\n </div>\n </slot>\n </div>\n </template>\n </RuiMenu>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RuiMenuSelect.js","names":[],"sources":["../../../../src/components/forms/select/RuiMenuSelect.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TValue, TItem\">\nimport type { VueClassValue } from '@/types/class-value';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport { menuSelectStyles, type MenuSelectVariant } from '@/components/forms/select/menu-select-styles';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiMenu, { type MenuProps } from '@/components/overlays/menu/RuiMenu.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { type KeyOfType, useDropdownMenu } from '@/composables/dropdown-menu';\nimport { type FloatingOptions, Placement } from '@/composables/floating';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\nimport { cn } from '@/utils/tv';\n\nexport interface RuiMenuSelectClassNames {\n root?: VueClassValue;\n label?: VueClassValue;\n menu?: VueClassValue;\n option?: VueClassValue;\n}\n\nexport interface MenuSelectProps<TValue, TItem> {\n options: TItem[];\n keyAttr?: KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>;\n textAttr?: keyof TItem;\n disabled?: boolean;\n loading?: boolean;\n readOnly?: boolean;\n dense?: boolean;\n clearable?: boolean;\n label?: string;\n menuOptions?: MenuProps;\n classNames?: RuiMenuSelectClassNames;\n /** @deprecated Use `classNames.label` instead */\n labelClass?: string;\n /** @deprecated Use `classNames.menu` instead */\n menuClass?: string;\n /** @deprecated Use `classNames.option` instead */\n optionClass?: string;\n prependWidth?: number;\n appendWidth?: number;\n itemHeight?: number;\n variant?: MenuSelectVariant;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n autoSelectFirst?: boolean;\n hideNoData?: boolean;\n noDataText?: string;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiMenuSelect',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<TValue | undefined>({ required: true });\n\nconst {\n options,\n disabled = false,\n loading = false,\n readOnly = false,\n dense = false,\n clearable = false,\n hideDetails = false,\n label = 'Select',\n menuOptions,\n classNames,\n labelClass,\n menuClass,\n variant = 'default',\n hint,\n keyAttr,\n textAttr,\n itemHeight,\n errorMessages = [],\n successMessages = [],\n autoSelectFirst = false,\n hideNoData = false,\n noDataText = 'No data available',\n required = false,\n} = defineProps<MenuSelectProps<TValue, TItem>>();\n\ndefineSlots<{\n 'activator'?: (props: {\n disabled: boolean;\n value: TItem | undefined;\n variant: string;\n readOnly: boolean;\n attrs: Record<string, unknown>;\n open: boolean;\n hasError: boolean;\n hasSuccess: boolean;\n }) => any;\n 'activator.label'?: (props: { value: TItem | undefined }) => any;\n 'selection.prepend'?: (props: { item: TItem }) => any;\n 'selection'?: (props: { item: TItem }) => any;\n 'item.prepend'?: (props: { disabled: boolean; item: TItem; active: boolean }) => any;\n 'item'?: (props: { disabled: boolean; item: TItem; active: boolean }) => any;\n 'item.append'?: (props: { disabled: boolean; item: TItem; active: boolean }) => any;\n 'no-data'?: () => any;\n}>();\n\nconst menuRef = useTemplateRef<HTMLDivElement>('menuRef');\nconst activator = useTemplateRef<HTMLDivElement>('activator');\nconst { focused } = useFocus(activator);\nconst isHovered = ref<boolean>(false);\n\nconst { hasError, hasSuccess } = useFormTextDetail(\n () => errorMessages,\n () => successMessages,\n);\n\nconst value = computed<TItem | undefined>({\n get: () => {\n const value = get(modelValue);\n if (keyAttr)\n return options.find(option => option[keyAttr] === value);\n return value as unknown as TItem;\n },\n set: (selected?: TItem) => {\n const selection = keyAttr && selected ? selected[keyAttr] : selected;\n set(modelValue, selection as TValue);\n },\n});\n\nfunction setValue(val: TItem): void {\n set(value, val);\n set(focused, true);\n}\n\nconst {\n containerProps,\n wrapperProps,\n renderedData,\n isOpen,\n menuWidth,\n getText,\n getIdentifier,\n isActiveItem,\n highlightedIndex,\n moveHighlight,\n applyHighlighted,\n valueKey,\n} = useDropdownMenu<TValue, TItem>({\n itemHeight: itemHeight ?? (dense ? 30 : 48),\n keyAttr,\n textAttr,\n options: () => options,\n dense: () => dense,\n value,\n menuRef,\n disabled: () => disabled,\n autoSelectFirst,\n setValue,\n});\n\nconst outlined = computed<boolean>(() => variant === 'outlined');\nconst float = computed<boolean>(() => (get(isOpen) || !!get(value)) && get(outlined));\n\nconst legendText = computed<string>(() => {\n if (!get(float) || !label)\n return '';\n return required ? `${label} ﹡` : label;\n});\n\nconst ui = computed<ReturnType<typeof menuSelectStyles>>(() => menuSelectStyles({\n filled: variant === 'filled',\n outlined: get(outlined),\n float: get(float),\n opened: get(isOpen),\n hovered: get(isHovered),\n dense,\n disabled,\n readonly: readOnly,\n hasError: get(hasError),\n hasSuccess: get(hasSuccess) && !get(hasError),\n}));\n\nconst highlightedClass = menuSelectStyles({}).highlighted();\n\nfunction clear(): void {\n set(modelValue, undefined);\n}\n\nconst menuFloatingOptions = computed<FloatingOptions>(() => ({\n placement: Placement.bottomStart,\n ...menuOptions?.options,\n}));\n</script>\n\n<template>\n <RuiMenu\n v-model=\"isOpen\"\n v-bind=\"{ ...getRootAttrs($attrs, []), ...menuOptions }\"\n :class=\"ui.wrapper({ class: cn($attrs.class) })\"\n :options=\"menuFloatingOptions\"\n :close-on-content-click=\"true\"\n :full-width=\"true\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n :dense=\"dense\"\n :show-details=\"!hideDetails\"\n :disabled=\"disabled\"\n disable-auto-focus\n >\n <template #activator=\"{ attrs, open, hasError: slotHasError, hasSuccess: slotHasSuccess }\">\n <slot\n name=\"activator\"\n v-bind=\"{ disabled, value, variant, readOnly, attrs, open, hasError: slotHasError, hasSuccess: slotHasSuccess }\"\n >\n <button\n ref=\"activator\"\n :disabled=\"disabled\"\n :aria-disabled=\"disabled\"\n :aria-expanded=\"isOpen\"\n :aria-readonly=\"readOnly || undefined\"\n :aria-required=\"required || undefined\"\n :aria-busy=\"loading || undefined\"\n type=\"button\"\n :tabindex=\"disabled || readOnly ? -1 : 0\"\n :class=\"ui.activator({ class: cn(classNames?.label) ?? labelClass })\"\n v-bind=\"{\n ...getNonRootAttrs($attrs),\n ...(readOnly ? {} : attrs),\n }\"\n data-id=\"activator\"\n :aria-invalid=\"hasError\"\n @mouseenter=\"isHovered = true\"\n @mouseleave=\"isHovered = false\"\n @keydown.up.prevent=\"moveHighlight(true)\"\n @keydown.down.prevent=\"moveHighlight(false)\"\n @keydown.enter.prevent=\"applyHighlighted()\"\n @keydown.space.prevent=\"applyHighlighted()\"\n @keydown.home.prevent=\"highlightedIndex = 0\"\n @keydown.end.prevent=\"highlightedIndex = options.length - 1\"\n >\n <span\n v-if=\"outlined || !value\"\n :class=\"[\n ui.label(),\n { 'pr-2': !value && !open && outlined },\n ]\"\n >\n <slot\n name=\"activator.label\"\n v-bind=\"{ value }\"\n >\n {{ label }}\n </slot>\n <span\n v-if=\"required\"\n :class=\"ui.required()\"\n >\n ﹡\n </span>\n </span>\n <span\n v-if=\"value\"\n :class=\"ui.value()\"\n >\n <slot\n name=\"selection.prepend\"\n v-bind=\"{ item: value }\"\n />\n <slot\n name=\"selection\"\n v-bind=\"{ item: value }\"\n >\n {{ getText(value) }}\n </slot>\n </span>\n\n <span\n v-if=\"clearable && value && !disabled\"\n data-id=\"clear\"\n :class=\"[ui.clear(), focused && '!visible']\"\n @click.stop.prevent=\"clear()\"\n >\n <RuiIcon\n color=\"error\"\n name=\"lu-x\"\n size=\"18\"\n />\n </span>\n\n <span :class=\"ui.iconWrapper()\">\n <RuiIcon\n :class=\"ui.icon()\"\n :size=\"dense ? 16 : 24\"\n name=\"lu-chevron-down\"\n />\n </span>\n\n <RuiProgress\n v-if=\"loading\"\n :class=\"ui.progress()\"\n color=\"primary\"\n thickness=\"3\"\n variant=\"indeterminate\"\n />\n </button>\n <fieldset\n v-if=\"outlined\"\n :class=\"ui.fieldset()\"\n >\n <legend :class=\"ui.legend()\">\n {{ legendText }}\n </legend>\n </fieldset>\n </slot>\n <input\n :value=\"valueKey\"\n class=\"hidden\"\n type=\"hidden\"\n />\n </template>\n <template #default=\"{ width }\">\n <div\n v-if=\"options.length > 0\"\n :ref=\"containerProps.ref\"\n :class=\"ui.menu({ class: cn(classNames?.menu) ?? menuClass })\"\n :style=\"[containerProps.style, { width: `${width}px`, minWidth: menuWidth }]\"\n @scroll=\"containerProps.onScroll\"\n @keydown.up.prevent=\"moveHighlight(true)\"\n @keydown.down.prevent=\"moveHighlight(false)\"\n >\n <div\n v-bind=\"wrapperProps\"\n ref=\"menuRef\"\n >\n <RuiButton\n v-for=\"{ item, _index } in renderedData\"\n :key=\"getIdentifier(item)\"\n :active=\"isActiveItem(item)\"\n :aria-selected=\"isActiveItem(item)\"\n :size=\"dense ? 'sm' : undefined\"\n variant=\"list\"\n :data-highlighted=\"highlightedIndex === _index\"\n :class=\"{\n [highlightedClass]: !isActiveItem(item) && highlightedIndex === _index,\n }\"\n @click=\"setValue(item)\"\n >\n <template #prepend>\n <slot\n name=\"item.prepend\"\n v-bind=\"{ disabled, item, active: isActiveItem(item) }\"\n />\n </template>\n <slot\n name=\"item\"\n v-bind=\"{ disabled, item, active: isActiveItem(item) }\"\n >\n {{ getText(item) }}\n </slot>\n <template #append>\n <slot\n name=\"item.append\"\n v-bind=\"{ disabled, item, active: isActiveItem(item) }\"\n />\n </template>\n </RuiButton>\n </div>\n </div>\n\n <div\n v-else-if=\"!hideNoData\"\n data-id=\"no-data\"\n :style=\"{ width: `${width}px`, minWidth: menuWidth }\"\n :class=\"classNames?.menu ?? menuClass\"\n >\n <slot name=\"no-data\">\n <div class=\"p-4\">\n {{ noDataText }}\n </div>\n </slot>\n </div>\n </template>\n </RuiMenu>\n</template>\n"],"mappings":""}
@@ -3,6 +3,7 @@ import RuiIcon_default from "../../icons/RuiIcon.js";
3
3
  import RuiProgress_default from "../../progress/RuiProgress.js";
4
4
  import RuiButton_default from "../../buttons/button/RuiButton.js";
5
5
  import { useFormTextDetail } from "../../../utils/form-text-detail.js";
6
+ import { Placement } from "../../../composables/floating.js";
6
7
  import RuiMenu_default from "../../overlays/menu/RuiMenu.js";
7
8
  import { getNonRootAttrs, getRootAttrs } from "../../../utils/helpers.js";
8
9
  import { useDropdownMenu } from "../../../composables/dropdown-menu.js";
@@ -23,11 +24,11 @@ var _hoisted_1 = [
23
24
  ];
24
25
  var _hoisted_2 = ["value"];
25
26
  var _hoisted_3 = { class: "p-4" };
26
- var RuiMenuSelect_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
27
+ var RuiMenuSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
27
28
  name: "RuiMenuSelect",
28
29
  inheritAttrs: false,
29
30
  __name: "RuiMenuSelect",
30
- props: /* @__PURE__ */ mergeModels({
31
+ props: /*@__PURE__*/ mergeModels({
31
32
  options: {},
32
33
  keyAttr: {},
33
34
  textAttr: {},
@@ -141,6 +142,10 @@ var RuiMenuSelect_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
141
142
  function clear() {
142
143
  set$1(modelValue, void 0);
143
144
  }
145
+ const menuFloatingOptions = computed(() => ({
146
+ placement: Placement.bottomStart,
147
+ ...__props.menuOptions?.options
148
+ }));
144
149
  return (_ctx, _cache) => {
145
150
  return openBlock(), createBlock(RuiMenu_default, mergeProps({
146
151
  modelValue: unref(isOpen),
@@ -150,7 +155,7 @@ var RuiMenuSelect_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
150
155
  ...__props.menuOptions
151
156
  }, {
152
157
  class: unref(ui).wrapper({ class: unref(cn)(_ctx.$attrs.class) }),
153
- placement: "bottom-start",
158
+ options: unref(menuFloatingOptions),
154
159
  "close-on-content-click": true,
155
160
  "full-width": true,
156
161
  "error-messages": __props.errorMessages,
@@ -301,6 +306,7 @@ var RuiMenuSelect_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
301
306
  }, 16, [
302
307
  "modelValue",
303
308
  "class",
309
+ "options",
304
310
  "error-messages",
305
311
  "success-messages",
306
312
  "hint",