@rotki/ui-library 2.21.0 → 2.22.1

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 (324) hide show
  1. package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js +1 -1
  2. package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
  3. package/dist/components/accordions/accordions/RuiAccordions.vue_vue_type_script_setup_true_lang.js +2 -2
  4. package/dist/components/accordions/accordions/RuiAccordions.vue_vue_type_script_setup_true_lang.js.map +1 -1
  5. package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js +1 -1
  6. package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js.map +1 -1
  7. package/dist/components/avatars/RuiAvatar.vue_vue_type_script_setup_true_lang.js +1 -1
  8. package/dist/components/avatars/RuiAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  9. package/dist/components/avatars/RuiAvatarGroup.vue_vue_type_script_setup_true_lang.js +1 -1
  10. package/dist/components/avatars/RuiAvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  11. package/dist/components/avatars/avatar-props.js +1 -1
  12. package/dist/components/avatars/avatar-props.js.map +1 -1
  13. package/dist/components/avatars/use-avatar-group.js.map +1 -1
  14. package/dist/components/buttons/button/RuiButton.js.map +1 -1
  15. package/dist/components/buttons/button/RuiButton.vue.d.ts +2 -2
  16. package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js +3 -3
  17. package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  18. package/dist/components/buttons/button/button-props.js.map +1 -1
  19. package/dist/components/buttons/button/button-styles.js.map +1 -1
  20. package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js +2 -2
  21. package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  22. package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js +3 -3
  23. package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  24. package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js +2 -2
  25. package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js +3 -3
  27. package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  28. package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js +3 -3
  29. package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  30. package/dist/components/calendar/state.js.map +1 -1
  31. package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js +1 -1
  32. package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js +1 -1
  34. package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  35. package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js +1 -1
  36. package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/components/chips/chip-props.js.map +1 -1
  38. package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js +1 -1
  39. package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  40. package/dist/components/color-picker/RuiColorDisplay.vue_vue_type_script_setup_true_lang.js +1 -1
  41. package/dist/components/color-picker/RuiColorDisplay.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js +1 -1
  43. package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js.map +1 -1
  44. package/dist/components/color-picker/RuiColorInput.vue_vue_type_script_setup_true_lang.js +1 -1
  45. package/dist/components/color-picker/RuiColorInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  46. package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js +1 -1
  47. package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/components/color-picker/utils.js.map +1 -1
  49. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js +2 -2
  50. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  51. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js +3 -3
  52. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  53. package/dist/components/date-time-picker/RuiTimezoneSelect.vue_vue_type_script_setup_true_lang.js +2 -2
  54. package/dist/components/date-time-picker/RuiTimezoneSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  55. package/dist/components/date-time-picker/date-time-picker-styles.js.map +1 -1
  56. package/dist/components/date-time-picker/dayjs-setup.js.map +1 -1
  57. package/dist/components/date-time-picker/segment-config.js.map +1 -1
  58. package/dist/components/date-time-picker/segment-utils.js.map +1 -1
  59. package/dist/components/date-time-picker/timezones.js.map +1 -1
  60. package/dist/components/date-time-picker/types.js +1 -1
  61. package/dist/components/date-time-picker/types.js.map +1 -1
  62. package/dist/components/date-time-picker/use-date-time-selection.js +2 -2
  63. package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -1
  64. package/dist/components/date-time-picker/use-input-handler.js.map +1 -1
  65. package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
  66. package/dist/components/date-time-picker/utils.js.map +1 -1
  67. package/dist/components/divider/RuiDivider.vue_vue_type_script_setup_true_lang.js +1 -1
  68. package/dist/components/divider/RuiDivider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  69. package/dist/components/forms/auto-complete/RuiAutoComplete.js.map +1 -1
  70. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +14 -1
  71. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js +15 -5
  72. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  73. package/dist/components/forms/auto-complete/auto-complete-styles.js.map +1 -1
  74. package/dist/components/forms/category-picker/RuiCategoryPicker.js +7 -0
  75. package/dist/components/forms/category-picker/RuiCategoryPicker.js.map +1 -0
  76. package/dist/components/forms/category-picker/RuiCategoryPicker.vue.d.ts +134 -0
  77. package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js +567 -0
  78. package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  79. package/dist/components/forms/category-picker/category-picker-styles.d.ts +432 -0
  80. package/dist/components/forms/category-picker/category-picker-styles.js +59 -0
  81. package/dist/components/forms/category-picker/category-picker-styles.js.map +1 -0
  82. package/dist/components/forms/check-control-styles.js.map +1 -1
  83. package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js +2 -2
  84. package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  85. package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue_vue_type_script_setup_true_lang.js +2 -2
  86. package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  87. package/dist/components/forms/checkbox/checkbox-group/context.js.map +1 -1
  88. package/dist/components/forms/file-upload/RuiFileUpload.js.map +1 -1
  89. package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js +5 -5
  90. package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -1
  91. package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js +2 -2
  92. package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js.map +1 -1
  93. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js +2 -2
  94. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  95. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js +2 -2
  96. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  97. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js +2 -2
  98. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  99. package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js +2 -2
  100. package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  101. package/dist/components/forms/select/menu-select-styles.js.map +1 -1
  102. package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js +2 -2
  103. package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  104. package/dist/components/forms/slider/slider-styles.js.map +1 -1
  105. package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js +2 -2
  106. package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  107. package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js +3 -3
  108. package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  109. package/dist/components/forms/text-area/text-area-styles.js.map +1 -1
  110. package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js +3 -3
  111. package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  112. package/dist/components/forms/text-field/text-field-styles.js.map +1 -1
  113. package/dist/components/forms/text-input-styles.js.map +1 -1
  114. package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js +1 -1
  115. package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js.map +1 -1
  116. package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  117. package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  118. package/dist/components/index.d.ts +3 -2
  119. package/dist/components/index.js +3 -2
  120. package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js +1 -1
  121. package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js.map +1 -1
  122. package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js +1 -1
  123. package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  124. package/dist/components/loaders/skeleton-type.js.map +1 -1
  125. package/dist/components/logos/RuiLogo.vue_vue_type_script_setup_true_lang.js +1 -1
  126. package/dist/components/logos/RuiLogo.vue_vue_type_script_setup_true_lang.js.map +1 -1
  127. package/dist/components/logos/use-logo-sources.js.map +1 -1
  128. package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js +1 -1
  129. package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js.map +1 -1
  130. package/dist/components/overlays/badge/badge-props.js.map +1 -1
  131. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue_vue_type_script_setup_true_lang.js +2 -2
  132. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue_vue_type_script_setup_true_lang.js.map +1 -1
  133. package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js +3 -3
  134. package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  135. package/dist/components/overlays/menu/RuiMenu.js.map +1 -1
  136. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +2 -0
  137. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js +3 -3
  138. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  139. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js +3 -3
  140. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  141. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js +2 -2
  142. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js.map +1 -1
  143. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js +1 -1
  144. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  145. package/dist/components/overlays/tooltip/tooltip-styles.js.map +1 -1
  146. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js +1 -1
  147. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js.map +1 -1
  148. package/dist/components/progress/progress-props.js.map +1 -1
  149. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js +2 -2
  150. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  151. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js +1 -1
  152. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  153. package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  154. package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  155. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  156. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  157. package/dist/components/steppers/footer-stepper-variant.js.map +1 -1
  158. package/dist/components/tables/RuiDataTable.js.map +1 -1
  159. package/dist/components/tables/RuiDataTable.vue.d.ts +23 -2
  160. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js +186 -217
  161. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  162. package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js +1 -1
  163. package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  164. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js +1 -1
  165. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  166. package/dist/components/tables/RuiTableHead.js.map +1 -1
  167. package/dist/components/tables/RuiTableHead.vue.d.ts +11 -1
  168. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js +1 -2
  169. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js.map +1 -1
  170. package/dist/components/tables/RuiTablePagination.js.map +1 -1
  171. package/dist/components/tables/RuiTablePagination.vue.d.ts +5 -0
  172. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js +24 -8
  173. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  174. package/dist/components/tables/data-table/RuiDataTableBody.js +7 -0
  175. package/dist/components/tables/data-table/RuiDataTableBody.js.map +1 -0
  176. package/dist/components/tables/data-table/RuiDataTableBody.vue.d.ts +55 -0
  177. package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js +78 -0
  178. package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js.map +1 -0
  179. package/dist/components/tables/data-table/RuiDataTableCell.js +7 -0
  180. package/dist/components/tables/data-table/RuiDataTableCell.js.map +1 -0
  181. package/dist/components/tables/data-table/RuiDataTableCell.vue.d.ts +30 -0
  182. package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js +54 -0
  183. package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
  184. package/dist/components/tables/data-table/RuiDataTableEmptyRow.js +7 -0
  185. package/dist/components/tables/data-table/RuiDataTableEmptyRow.js.map +1 -0
  186. package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue.d.ts +19 -0
  187. package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue_vue_type_script_setup_true_lang.js +43 -0
  188. package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  189. package/dist/components/tables/data-table/RuiDataTableExpandedRow.js +7 -0
  190. package/dist/components/tables/data-table/RuiDataTableExpandedRow.js.map +1 -0
  191. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue.d.ts +26 -0
  192. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js +31 -0
  193. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  194. package/dist/components/tables/data-table/RuiDataTableGroupRow.js +7 -0
  195. package/dist/components/tables/data-table/RuiDataTableGroupRow.js.map +1 -0
  196. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue.d.ts +32 -0
  197. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js +85 -0
  198. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  199. package/dist/components/tables/data-table/RuiDataTableLoadingRow.js +7 -0
  200. package/dist/components/tables/data-table/RuiDataTableLoadingRow.js.map +1 -0
  201. package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue.d.ts +3 -0
  202. package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue_vue_type_script_setup_true_lang.js +26 -0
  203. package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  204. package/dist/components/tables/data-table/RuiDataTableMobileSort.js +7 -0
  205. package/dist/components/tables/data-table/RuiDataTableMobileSort.js.map +1 -0
  206. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue.d.ts +33 -0
  207. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js +101 -0
  208. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js.map +1 -0
  209. package/dist/components/tables/data-table/RuiDataTableRow.js +7 -0
  210. package/dist/components/tables/data-table/RuiDataTableRow.js.map +1 -0
  211. package/dist/components/tables/data-table/RuiDataTableRow.vue.d.ts +31 -0
  212. package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js +142 -0
  213. package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  214. package/dist/components/tables/data-table/context.d.ts +73 -0
  215. package/dist/components/tables/data-table/context.js +100 -0
  216. package/dist/components/tables/data-table/context.js.map +1 -0
  217. package/dist/components/tables/data-table-styles.d.ts +30 -1
  218. package/dist/components/tables/data-table-styles.js +9 -2
  219. package/dist/components/tables/data-table-styles.js.map +1 -1
  220. package/dist/components/tables/table-props.d.ts +5 -0
  221. package/dist/components/tables/table-props.js +5 -1
  222. package/dist/components/tables/table-props.js.map +1 -1
  223. package/dist/components/tables/use-pagination-navigation.js.map +1 -1
  224. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js +1 -1
  225. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js.map +1 -1
  226. package/dist/components/tabs/tab/use-tab-link.js.map +1 -1
  227. package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js +1 -1
  228. package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  229. package/dist/components/tabs/tab-items/RuiTabItems.js.map +1 -1
  230. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js +2 -2
  231. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js.map +1 -1
  232. package/dist/components/tabs/tab-props.js.map +1 -1
  233. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js +2 -2
  234. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  235. package/dist/components/tabs/tabs/use-tab-routing.js +1 -1
  236. package/dist/components/tabs/tabs/use-tab-routing.js.map +1 -1
  237. package/dist/components/tabs/tabs/use-tab-scroll.js.map +1 -1
  238. package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js +2 -2
  239. package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  240. package/dist/components/time-picker/time-picker-styles.js.map +1 -1
  241. package/dist/composables/breakpoint.js.map +1 -1
  242. package/dist/composables/defaults/table.d.ts +12 -0
  243. package/dist/composables/defaults/table.js.map +1 -1
  244. package/dist/composables/dropdown-menu.js.map +1 -1
  245. package/dist/composables/floating.d.ts +11 -0
  246. package/dist/composables/floating.js +21 -2
  247. package/dist/composables/floating.js.map +1 -1
  248. package/dist/composables/forms/auto-complete/focus.js.map +1 -1
  249. package/dist/composables/forms/auto-complete/index.js +5 -4
  250. package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
  251. package/dist/composables/forms/auto-complete/search.d.ts +6 -1
  252. package/dist/composables/forms/auto-complete/search.js +12 -1
  253. package/dist/composables/forms/auto-complete/search.js.map +1 -1
  254. package/dist/composables/forms/auto-complete/value.js.map +1 -1
  255. package/dist/composables/forms/category-picker/use-category-picker.d.ts +76 -0
  256. package/dist/composables/forms/category-picker/use-category-picker.js +141 -0
  257. package/dist/composables/forms/category-picker/use-category-picker.js.map +1 -0
  258. package/dist/composables/forms/use-prepend-append-width.js.map +1 -1
  259. package/dist/composables/icons.js.map +1 -1
  260. package/dist/composables/popper.js.map +1 -1
  261. package/dist/composables/sticky-header.js.map +1 -1
  262. package/dist/composables/tables/data-table/columns.d.ts +7 -1
  263. package/dist/composables/tables/data-table/columns.js +18 -10
  264. package/dist/composables/tables/data-table/columns.js.map +1 -1
  265. package/dist/composables/tables/data-table/expansion.js.map +1 -1
  266. package/dist/composables/tables/data-table/grouping.d.ts +4 -6
  267. package/dist/composables/tables/data-table/grouping.js +38 -24
  268. package/dist/composables/tables/data-table/grouping.js.map +1 -1
  269. package/dist/composables/tables/data-table/pagination.d.ts +4 -4
  270. package/dist/composables/tables/data-table/pagination.js +63 -21
  271. package/dist/composables/tables/data-table/pagination.js.map +1 -1
  272. package/dist/composables/tables/data-table/selection.js +16 -6
  273. package/dist/composables/tables/data-table/selection.js.map +1 -1
  274. package/dist/composables/tables/data-table/sort.d.ts +4 -3
  275. package/dist/composables/tables/data-table/sort.js +78 -40
  276. package/dist/composables/tables/data-table/sort.js.map +1 -1
  277. package/dist/composables/tables/data-table/types.d.ts +3 -1
  278. package/dist/composables/tables/data-table/types.js +6 -2
  279. package/dist/composables/tables/data-table/types.js.map +1 -1
  280. package/dist/composables/theme.js.map +1 -1
  281. package/dist/composables/timeout-manager.js.map +1 -1
  282. package/dist/composables/use-rui-i18n.js.map +1 -1
  283. package/dist/consts/colors.js.map +1 -1
  284. package/dist/consts/time-accuracy.js.map +1 -1
  285. package/dist/i18n/keys.js.map +1 -1
  286. package/dist/icons/icons_1.d.ts +12 -12
  287. package/dist/icons/icons_1.js +140 -157
  288. package/dist/icons/icons_1.js.map +1 -1
  289. package/dist/icons/icons_2.d.ts +13 -13
  290. package/dist/icons/icons_2.js +128 -149
  291. package/dist/icons/icons_2.js.map +1 -1
  292. package/dist/icons/icons_3.d.ts +18 -18
  293. package/dist/icons/icons_3.js +244 -282
  294. package/dist/icons/icons_3.js.map +1 -1
  295. package/dist/icons/icons_4.d.ts +251 -6
  296. package/dist/icons/icons_4.js +3016 -75
  297. package/dist/icons/icons_4.js.map +1 -1
  298. package/dist/icons/icons_5.d.ts +20 -0
  299. package/dist/icons/icons_5.js +221 -0
  300. package/dist/icons/icons_5.js.map +1 -0
  301. package/dist/icons/index.d.ts +2 -1
  302. package/dist/icons/index.js +297 -32
  303. package/dist/icons/index.js.map +1 -1
  304. package/dist/index.js +8 -6
  305. package/dist/index.js.map +1 -1
  306. package/dist/library-icons.json +1 -0
  307. package/dist/style.css +157 -0
  308. package/dist/theme/index.js.map +1 -1
  309. package/dist/types/stepper.js.map +1 -1
  310. package/dist/types/theme.js.map +1 -1
  311. package/dist/utils/assert.js.map +1 -1
  312. package/dist/utils/blockie.js.map +1 -1
  313. package/dist/utils/form-text-detail.js.map +1 -1
  314. package/dist/utils/helpers.js.map +1 -1
  315. package/dist/utils/is-equal.js.map +1 -1
  316. package/dist/utils/tv.js.map +1 -1
  317. package/dist/vite-plugin/index.js +6 -5
  318. package/dist/vite-plugin/index.js.map +1 -1
  319. package/dist/vite-plugin/scanner.d.ts +1 -1
  320. package/dist/vite-plugin/scanner.js +10 -7
  321. package/dist/vite-plugin/scanner.js.map +1 -1
  322. package/dist/vite-plugin/types.d.ts +9 -0
  323. package/dist/web-types.json +2042 -1108
  324. package/package.json +35 -35
@@ -0,0 +1,567 @@
1
+ import { cn } from "../../../utils/tv.js";
2
+ import RuiIcon_default from "../../icons/RuiIcon.js";
3
+ import RuiProgress_default from "../../progress/RuiProgress.js";
4
+ import RuiButton_default from "../../buttons/button/RuiButton.js";
5
+ import { useFormTextDetail } from "../../../utils/form-text-detail.js";
6
+ import RuiFormTextDetail_default from "../../helpers/RuiFormTextDetail.js";
7
+ import { Placement } from "../../../composables/floating.js";
8
+ import RuiMenu_default from "../../overlays/menu/RuiMenu.js";
9
+ import RuiTextField_default from "../text-field/RuiTextField.js";
10
+ import { categoryPickerActivatorStyles, categoryPickerStyles } from "./category-picker-styles.js";
11
+ import RuiDialog_default from "../../overlays/dialog/RuiDialog.js";
12
+ import { useCategoryPicker } from "../../../composables/forms/category-picker/use-category-picker.js";
13
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, guardReactiveProps, isRef, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, useId, useModel, useTemplateRef, vShow, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
14
+ import { breakpointsTailwind, useBreakpoints, useFocus } from "@vueuse/core";
15
+ import { get as get$1, set as set$1 } from "@vueuse/shared";
16
+ //#region src/components/forms/category-picker/RuiCategoryPicker.vue?vue&type=script&setup=true&lang.ts
17
+ var _hoisted_1 = [
18
+ "aria-controls",
19
+ "aria-expanded",
20
+ "aria-disabled",
21
+ "aria-readonly",
22
+ "aria-required",
23
+ "aria-invalid",
24
+ "aria-busy"
25
+ ];
26
+ var _hoisted_2 = [
27
+ "value",
28
+ "placeholder",
29
+ "readonly",
30
+ "disabled",
31
+ "aria-invalid"
32
+ ];
33
+ var _hoisted_3 = ["id"];
34
+ var _hoisted_4 = ["aria-label", "aria-activedescendant"];
35
+ var _hoisted_5 = { class: "truncate" };
36
+ var _hoisted_6 = ["aria-label", "aria-activedescendant"];
37
+ var RuiCategoryPicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
38
+ name: "RuiCategoryPicker",
39
+ inheritAttrs: false,
40
+ __name: "RuiCategoryPicker",
41
+ props: /*@__PURE__*/ mergeModels({
42
+ items: {},
43
+ categoryOf: {
44
+ type: Function,
45
+ default: void 0
46
+ },
47
+ categoryAttr: { default: () => void 0 },
48
+ keyAttr: { default: () => void 0 },
49
+ textAttr: { default: () => void 0 },
50
+ label: { default: "Select" },
51
+ placeholder: { default: "Search" },
52
+ searchable: {
53
+ type: Boolean,
54
+ default: true
55
+ },
56
+ filter: {
57
+ type: Function,
58
+ default: void 0
59
+ },
60
+ showAll: {
61
+ type: Boolean,
62
+ default: true
63
+ },
64
+ allLabel: { default: "All" },
65
+ emptyText: { default: "No results" },
66
+ disabled: {
67
+ type: Boolean,
68
+ default: false
69
+ },
70
+ readOnly: {
71
+ type: Boolean,
72
+ default: false
73
+ },
74
+ dense: {
75
+ type: Boolean,
76
+ default: false
77
+ },
78
+ clearable: {
79
+ type: Boolean,
80
+ default: false
81
+ },
82
+ loading: {
83
+ type: Boolean,
84
+ default: false
85
+ },
86
+ variant: { default: "outlined" },
87
+ required: {
88
+ type: Boolean,
89
+ default: false
90
+ },
91
+ errorMessages: { default: () => [] },
92
+ successMessages: { default: () => [] },
93
+ hint: { default: "" },
94
+ hideDetails: {
95
+ type: Boolean,
96
+ default: false
97
+ },
98
+ mobileBreakpoint: { default: "md" },
99
+ dialogOptions: { default: () => void 0 },
100
+ classNames: { default: () => void 0 }
101
+ }, {
102
+ "modelValue": {},
103
+ "modelModifiers": {},
104
+ "search": { default: "" },
105
+ "searchModifiers": {}
106
+ }),
107
+ emits: /*@__PURE__*/ mergeModels(["select"], ["update:modelValue", "update:search"]),
108
+ setup(__props, { emit: __emit }) {
109
+ const modelValue = useModel(__props, "modelValue");
110
+ const searchInput = useModel(__props, "search");
111
+ const emit = __emit;
112
+ const isOpen = ref(false);
113
+ const focusedPane = ref("rail");
114
+ const highlightedItemIndex = ref(0);
115
+ const drillStep = ref("category");
116
+ const railRef = useTemplateRef("railRef");
117
+ const detailRef = useTemplateRef("detailRef");
118
+ const activatorRef = useTemplateRef("activatorRef");
119
+ const fieldRef = useTemplateRef("fieldRef");
120
+ const isHovered = ref(false);
121
+ const { focused } = useFocus(activatorRef);
122
+ const { hasError, hasSuccess } = useFormTextDetail(() => __props.errorMessages, () => __props.successMessages);
123
+ const baseId = useId();
124
+ const breakpoints = useBreakpoints(breakpointsTailwind);
125
+ function resolveCategory(item) {
126
+ if (__props.categoryOf) return __props.categoryOf(item);
127
+ if (__props.categoryAttr !== void 0) return String(item[__props.categoryAttr] ?? "");
128
+ return "";
129
+ }
130
+ const { activeCategory, detailItems, detailRows, getIdentifier, getText, isEmpty, isSelected, railEntries, setActiveCategory, syncActiveToSelection } = useCategoryPicker({
131
+ allLabel: () => __props.allLabel,
132
+ categoryOf: resolveCategory,
133
+ filter: () => __props.filter,
134
+ items: () => __props.items,
135
+ keyAttr: __props.keyAttr,
136
+ modelValue,
137
+ search: searchInput,
138
+ searchable: () => __props.searchable,
139
+ showAll: () => __props.showAll,
140
+ textAttr: __props.textAttr
141
+ });
142
+ const isMobile = computed(() => get$1(breakpoints.smaller(__props.mobileBreakpoint)));
143
+ const mode = computed(() => get$1(isMobile) ? "drill" : "twoPane");
144
+ const shell = computed(() => get$1(isMobile) ? RuiDialog_default : RuiMenu_default);
145
+ const shellProps = computed(() => {
146
+ if (get$1(isMobile)) return {
147
+ ariaLabel: __props.dialogOptions?.ariaLabel ?? __props.label,
148
+ bottomSheet: __props.dialogOptions?.bottomSheet ?? true,
149
+ maxWidth: __props.dialogOptions?.maxWidth,
150
+ persistent: __props.dialogOptions?.persistent,
151
+ width: __props.dialogOptions?.width ?? "100%"
152
+ };
153
+ return {
154
+ anchorEl: get$1(fieldRef) ?? void 0,
155
+ classNames: {
156
+ content: "py-0",
157
+ menu: "z-[9999]"
158
+ },
159
+ closeOnContentClick: false,
160
+ disableAutoFocus: true,
161
+ fullWidth: true,
162
+ options: {
163
+ placement: Placement.bottomStart,
164
+ size: true
165
+ },
166
+ persistent: __props.dialogOptions?.persistent,
167
+ persistOnActivatorClick: true
168
+ };
169
+ });
170
+ const ui = computed(() => categoryPickerStyles({
171
+ dense: __props.dense,
172
+ mode: get$1(mode)
173
+ }));
174
+ const selectedItem = computed(() => {
175
+ const value = get$1(modelValue);
176
+ if (value === void 0) return void 0;
177
+ return __props.items.find((item) => getIdentifier(item) === value);
178
+ });
179
+ const selectedText = computed(() => {
180
+ const selected = get$1(selectedItem);
181
+ return selected ? getText(selected) : void 0;
182
+ });
183
+ const outlined = computed(() => __props.variant === "outlined");
184
+ const canType = computed(() => __props.searchable && !get$1(isMobile) && !__props.readOnly && !__props.disabled);
185
+ const isTyping = computed(() => get$1(isOpen) && get$1(canType));
186
+ const float = computed(() => (get$1(isOpen) || get$1(selectedItem) !== void 0 || get$1(focused)) && get$1(outlined));
187
+ const legendText = computed(() => {
188
+ if (!get$1(float) || !__props.label) return "";
189
+ return __props.required ? `${__props.label} ﹡` : __props.label;
190
+ });
191
+ const activatorUi = computed(() => categoryPickerActivatorStyles({
192
+ dense: __props.dense,
193
+ disabled: __props.disabled,
194
+ filled: __props.variant === "filled",
195
+ float: get$1(float),
196
+ hasError: get$1(hasError),
197
+ hasSuccess: get$1(hasSuccess) && !get$1(hasError),
198
+ hovered: get$1(isHovered),
199
+ opened: get$1(isOpen),
200
+ outlined: get$1(outlined),
201
+ readonly: __props.readOnly
202
+ }));
203
+ const activeRailIndex = computed(() => get$1(railEntries).findIndex((entry) => entry.category === get$1(activeCategory)));
204
+ const showRail = computed(() => get$1(mode) === "twoPane" || get$1(drillStep) === "category");
205
+ const showDetail = computed(() => get$1(mode) === "twoPane" || get$1(drillStep) === "detail");
206
+ function clamp(value, max) {
207
+ if (value < 0) return 0;
208
+ if (value > max) return max;
209
+ return value;
210
+ }
211
+ function open() {
212
+ if (__props.disabled) return;
213
+ set$1(isOpen, true);
214
+ }
215
+ function close() {
216
+ set$1(isOpen, false);
217
+ }
218
+ function onInput(event) {
219
+ const target = event.target;
220
+ if (!(target instanceof HTMLInputElement)) return;
221
+ set$1(searchInput, target.value);
222
+ if (!get$1(isOpen)) open();
223
+ }
224
+ function selectItem(item) {
225
+ if (__props.readOnly) return;
226
+ set$1(modelValue, getIdentifier(item));
227
+ emit("select", item);
228
+ close();
229
+ }
230
+ function clearSelection() {
231
+ set$1(modelValue, void 0);
232
+ }
233
+ function onCategoryClick(category) {
234
+ setActiveCategory(category);
235
+ if (get$1(mode) === "drill") set$1(drillStep, "detail");
236
+ else focusPane("detail");
237
+ }
238
+ function focusPane(pane) {
239
+ set$1(focusedPane, pane);
240
+ nextTick(() => {
241
+ (pane === "rail" ? get$1(railRef) : get$1(detailRef))?.focus({ preventScroll: true });
242
+ });
243
+ }
244
+ function moveRail(direction) {
245
+ const entries = get$1(railEntries);
246
+ if (entries.length === 0) return;
247
+ setActiveCategory(entries[clamp(get$1(activeRailIndex) + direction, entries.length - 1)]?.category ?? null);
248
+ }
249
+ function moveItem(direction) {
250
+ const total = get$1(detailItems).length;
251
+ if (total === 0) return;
252
+ set$1(highlightedItemIndex, clamp(get$1(highlightedItemIndex) + direction, total - 1));
253
+ }
254
+ function enterDetail() {
255
+ if (get$1(detailItems).length === 0) return;
256
+ resetHighlightToSelection();
257
+ if (get$1(mode) === "drill") set$1(drillStep, "detail");
258
+ focusPane("detail");
259
+ }
260
+ function selectHighlighted() {
261
+ const item = get$1(detailItems)[get$1(highlightedItemIndex)];
262
+ if (item !== void 0) selectItem(item);
263
+ }
264
+ function selectTopResult() {
265
+ if (!get$1(searchInput).trim()) return;
266
+ const item = get$1(detailItems)[0];
267
+ if (item !== void 0) selectItem(item);
268
+ }
269
+ function resetHighlightToSelection() {
270
+ const index = get$1(detailItems).findIndex((item) => isSelected(item));
271
+ set$1(highlightedItemIndex, index >= 0 ? index : 0);
272
+ }
273
+ function backToRail() {
274
+ if (get$1(mode) === "drill") set$1(drillStep, "category");
275
+ else focusPane("rail");
276
+ }
277
+ function scrollActiveDescendantIntoView(container, id) {
278
+ if (!container) return;
279
+ nextTick(() => {
280
+ container.querySelector(`#${id}`)?.scrollIntoView({ block: "nearest" });
281
+ });
282
+ }
283
+ watch(activeCategory, () => {
284
+ resetHighlightToSelection();
285
+ });
286
+ watch(highlightedItemIndex, (index) => {
287
+ scrollActiveDescendantIntoView(get$1(detailRef), `${baseId}-opt-${index}`);
288
+ });
289
+ watch(activeRailIndex, (index) => {
290
+ if (index >= 0) scrollActiveDescendantIntoView(get$1(railRef), `${baseId}-cat-${index}`);
291
+ });
292
+ watch(isOpen, (value) => {
293
+ if (value) {
294
+ syncActiveToSelection();
295
+ set$1(focusedPane, "rail");
296
+ set$1(drillStep, "category");
297
+ resetHighlightToSelection();
298
+ nextTick(() => (get$1(canType) ? get$1(activatorRef) : get$1(railRef))?.focus({ preventScroll: true }));
299
+ } else {
300
+ set$1(searchInput, "");
301
+ nextTick(() => get$1(activatorRef)?.focus({ preventScroll: true }));
302
+ }
303
+ });
304
+ return (_ctx, _cache) => {
305
+ return openBlock(), createBlock(resolveDynamicComponent(unref(shell)), mergeProps({
306
+ modelValue: unref(isOpen),
307
+ "onUpdate:modelValue": _cache[24] || (_cache[24] = ($event) => isRef(isOpen) ? isOpen.value = $event : null)
308
+ }, {
309
+ ..._ctx.$attrs,
310
+ ...unref(shellProps)
311
+ }), {
312
+ activator: withCtx(({ attrs }) => [renderSlot(_ctx.$slots, "activator", normalizeProps(guardReactiveProps({
313
+ attrs,
314
+ isOpen: unref(isOpen),
315
+ item: unref(selectedItem),
316
+ open,
317
+ text: unref(selectedText)
318
+ })), () => [createElementVNode("div", { class: normalizeClass(unref(activatorUi).wrapper()) }, [createElementVNode("div", mergeProps({
319
+ ref_key: "fieldRef",
320
+ ref: fieldRef,
321
+ role: "combobox",
322
+ "data-id": "activator",
323
+ class: unref(activatorUi).activator(),
324
+ "aria-haspopup": "dialog",
325
+ "aria-controls": unref(isOpen) ? `${unref(baseId)}-panel` : void 0,
326
+ "aria-expanded": unref(isOpen),
327
+ "aria-disabled": __props.disabled || void 0,
328
+ "aria-readonly": __props.readOnly || !unref(canType) || void 0,
329
+ "aria-required": __props.required || void 0,
330
+ "aria-invalid": unref(hasError) || void 0,
331
+ "aria-busy": __props.loading || void 0
332
+ }, __props.readOnly ? {} : attrs, {
333
+ onMouseenter: _cache[5] || (_cache[5] = ($event) => isHovered.value = true),
334
+ onMouseleave: _cache[6] || (_cache[6] = ($event) => isHovered.value = false)
335
+ }), [
336
+ unref(outlined) || !unref(selectedItem) && !unref(isTyping) ? (openBlock(), createElementBlock("span", {
337
+ key: 0,
338
+ class: normalizeClass(unref(activatorUi).label())
339
+ }, [renderSlot(_ctx.$slots, "activator.label", normalizeProps(guardReactiveProps({ item: unref(selectedItem) })), () => [createTextVNode(toDisplayString(__props.label), 1)]), __props.required ? (openBlock(), createElementBlock("span", {
340
+ key: 0,
341
+ class: normalizeClass(unref(activatorUi).required())
342
+ }, " ﹡ ", 2)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true),
343
+ unref(selectedItem) && !unref(isTyping) && _ctx.$slots.selection ? (openBlock(), createElementBlock("span", {
344
+ key: 1,
345
+ class: normalizeClass(["absolute inset-y-0 left-4 right-8 flex items-center gap-2 pointer-events-none", [unref(activatorUi).value()]])
346
+ }, [renderSlot(_ctx.$slots, "selection.prepend", normalizeProps(guardReactiveProps({ item: unref(selectedItem) }))), renderSlot(_ctx.$slots, "selection", normalizeProps(guardReactiveProps({ item: unref(selectedItem) })))], 2)) : createCommentVNode("", true),
347
+ createElementVNode("input", {
348
+ ref_key: "activatorRef",
349
+ ref: activatorRef,
350
+ "data-id": "search-input",
351
+ value: unref(isTyping) ? searchInput.value : _ctx.$slots.selection && unref(selectedItem) ? "" : unref(selectedText) ?? "",
352
+ placeholder: unref(isTyping) ? __props.placeholder : "",
353
+ readonly: !unref(canType),
354
+ disabled: __props.disabled,
355
+ "aria-invalid": unref(hasError) || void 0,
356
+ class: normalizeClass(["bg-transparent outline-none", [unref(activatorUi).value(), !unref(canType) && "cursor-pointer"]]),
357
+ onInput: _cache[0] || (_cache[0] = ($event) => onInput($event)),
358
+ onKeydown: [
359
+ _cache[1] || (_cache[1] = withKeys(withModifiers(($event) => focusPane("rail"), ["prevent"]), ["down"])),
360
+ _cache[2] || (_cache[2] = withKeys(withModifiers(($event) => selectTopResult(), ["prevent"]), ["enter"])),
361
+ _cache[3] || (_cache[3] = withKeys(($event) => close(), ["esc"]))
362
+ ]
363
+ }, null, 42, _hoisted_2),
364
+ __props.clearable && unref(selectedItem) && !__props.disabled && !__props.readOnly ? (openBlock(), createElementBlock("span", {
365
+ key: 2,
366
+ "data-id": "clear",
367
+ class: normalizeClass([unref(activatorUi).clear(), unref(focused) && "!visible"]),
368
+ onClick: _cache[4] || (_cache[4] = withModifiers(($event) => clearSelection(), ["stop", "prevent"]))
369
+ }, [createVNode(RuiIcon_default, {
370
+ color: "error",
371
+ name: "lu-x",
372
+ size: "18"
373
+ })], 2)) : createCommentVNode("", true),
374
+ createElementVNode("span", { class: normalizeClass(unref(activatorUi).iconWrapper()) }, [createVNode(RuiIcon_default, {
375
+ class: normalizeClass(unref(activatorUi).icon()),
376
+ size: __props.dense ? 16 : 24,
377
+ name: "lu-chevron-down"
378
+ }, null, 8, ["class", "size"])], 2),
379
+ __props.loading ? (openBlock(), createBlock(RuiProgress_default, {
380
+ key: 3,
381
+ class: normalizeClass(unref(activatorUi).progress()),
382
+ color: "primary",
383
+ thickness: "3",
384
+ variant: "indeterminate"
385
+ }, null, 8, ["class"])) : createCommentVNode("", true),
386
+ unref(outlined) ? (openBlock(), createElementBlock("fieldset", {
387
+ key: 4,
388
+ class: normalizeClass(unref(activatorUi).fieldset())
389
+ }, [createElementVNode("legend", { class: normalizeClass(unref(activatorUi).legend()) }, toDisplayString(unref(legendText)), 3)], 2)) : createCommentVNode("", true)
390
+ ], 16, _hoisted_1), !__props.hideDetails ? (openBlock(), createBlock(RuiFormTextDetail_default, {
391
+ key: 0,
392
+ class: "px-3 pt-1",
393
+ "error-messages": __props.errorMessages,
394
+ "success-messages": __props.successMessages,
395
+ hint: __props.hint
396
+ }, null, 8, [
397
+ "error-messages",
398
+ "success-messages",
399
+ "hint"
400
+ ])) : createCommentVNode("", true)], 2)])]),
401
+ default: withCtx(() => [createElementVNode("div", {
402
+ id: `${unref(baseId)}-panel`,
403
+ class: normalizeClass(unref(ui).root({ class: unref(cn)(__props.classNames?.root) })),
404
+ "data-id": "panel"
405
+ }, [
406
+ unref(isMobile) || _ctx.$slots.header ? (openBlock(), createElementBlock("div", {
407
+ key: 0,
408
+ class: normalizeClass(unref(ui).header())
409
+ }, [renderSlot(_ctx.$slots, "header", {}, () => [createElementVNode("div", { class: normalizeClass(unref(ui).title()) }, toDisplayString(__props.label), 3)]), __props.searchable && unref(isMobile) ? (openBlock(), createBlock(RuiTextField_default, {
410
+ key: 0,
411
+ modelValue: searchInput.value,
412
+ "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => searchInput.value = $event),
413
+ class: normalizeClass(unref(cn)(__props.classNames?.search)),
414
+ placeholder: __props.placeholder,
415
+ dense: __props.dense,
416
+ variant: "outlined",
417
+ "prepend-icon": "lu-search",
418
+ "hide-details": "",
419
+ clearable: "",
420
+ "data-id": "search"
421
+ }, null, 8, [
422
+ "modelValue",
423
+ "class",
424
+ "placeholder",
425
+ "dense"
426
+ ])) : createCommentVNode("", true)], 2)) : createCommentVNode("", true),
427
+ createElementVNode("div", { class: normalizeClass(unref(ui).body()) }, [withDirectives(createElementVNode("div", {
428
+ ref_key: "railRef",
429
+ ref: railRef,
430
+ class: normalizeClass(unref(ui).rail({ class: unref(cn)(__props.classNames?.rail) })),
431
+ role: "tablist",
432
+ "aria-orientation": "vertical",
433
+ "aria-label": __props.label,
434
+ "aria-activedescendant": unref(focusedPane) === "rail" && unref(activeRailIndex) >= 0 ? `${unref(baseId)}-cat-${unref(activeRailIndex)}` : void 0,
435
+ tabindex: "0",
436
+ "data-id": "rail",
437
+ onFocus: _cache[8] || (_cache[8] = ($event) => focusedPane.value = "rail"),
438
+ onKeydown: [
439
+ _cache[9] || (_cache[9] = withKeys(withModifiers(($event) => moveRail(1), ["prevent"]), ["down"])),
440
+ _cache[10] || (_cache[10] = withKeys(withModifiers(($event) => moveRail(-1), ["prevent"]), ["up"])),
441
+ _cache[11] || (_cache[11] = withKeys(withModifiers(($event) => enterDetail(), ["prevent"]), ["right"])),
442
+ _cache[12] || (_cache[12] = withKeys(withModifiers(($event) => enterDetail(), ["prevent"]), ["enter"])),
443
+ _cache[13] || (_cache[13] = withKeys(withModifiers(($event) => unref(setActiveCategory)(unref(railEntries)[0]?.category ?? null), ["prevent"]), ["home"])),
444
+ _cache[14] || (_cache[14] = withKeys(withModifiers(($event) => unref(setActiveCategory)(unref(railEntries)[unref(railEntries).length - 1]?.category ?? null), ["prevent"]), ["end"]))
445
+ ]
446
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(railEntries), (entry, index) => {
447
+ return openBlock(), createBlock(RuiButton_default, {
448
+ id: `${unref(baseId)}-cat-${index}`,
449
+ key: entry.category ?? "__all__",
450
+ role: "tab",
451
+ variant: "list",
452
+ size: __props.dense ? "sm" : void 0,
453
+ active: entry.category === unref(activeCategory),
454
+ "aria-selected": entry.category === unref(activeCategory),
455
+ tabindex: "-1",
456
+ "data-highlighted": unref(focusedPane) === "rail" && index === unref(activeRailIndex),
457
+ "data-category": entry.category ?? "__all__",
458
+ onClick: ($event) => onCategoryClick(entry.category)
459
+ }, {
460
+ default: withCtx(() => [renderSlot(_ctx.$slots, "category", mergeProps({ ref_for: true }, {
461
+ active: entry.category === unref(activeCategory),
462
+ category: entry.category,
463
+ count: entry.count,
464
+ label: entry.label
465
+ }), () => [createElementVNode("span", _hoisted_5, toDisplayString(entry.label), 1), createElementVNode("span", { class: normalizeClass(unref(ui).railCount()) }, toDisplayString(entry.count), 3)])]),
466
+ _: 2
467
+ }, 1032, [
468
+ "id",
469
+ "size",
470
+ "active",
471
+ "aria-selected",
472
+ "data-highlighted",
473
+ "data-category",
474
+ "onClick"
475
+ ]);
476
+ }), 128))], 42, _hoisted_4), [[vShow, unref(showRail)]]), withDirectives(createElementVNode("div", {
477
+ ref_key: "detailRef",
478
+ ref: detailRef,
479
+ class: normalizeClass(unref(ui).detail({ class: unref(cn)(__props.classNames?.detail) })),
480
+ role: "listbox",
481
+ "aria-label": unref(activeCategory) ?? __props.allLabel,
482
+ "aria-activedescendant": unref(focusedPane) === "detail" && !unref(isEmpty) ? `${unref(baseId)}-opt-${unref(highlightedItemIndex)}` : void 0,
483
+ tabindex: "0",
484
+ "data-id": "detail",
485
+ onFocus: _cache[16] || (_cache[16] = ($event) => focusedPane.value = "detail"),
486
+ onKeydown: [
487
+ _cache[17] || (_cache[17] = withKeys(withModifiers(($event) => moveItem(1), ["prevent"]), ["down"])),
488
+ _cache[18] || (_cache[18] = withKeys(withModifiers(($event) => moveItem(-1), ["prevent"]), ["up"])),
489
+ _cache[19] || (_cache[19] = withKeys(withModifiers(($event) => backToRail(), ["prevent"]), ["left"])),
490
+ _cache[20] || (_cache[20] = withKeys(withModifiers(($event) => highlightedItemIndex.value = 0, ["prevent"]), ["home"])),
491
+ _cache[21] || (_cache[21] = withKeys(withModifiers(($event) => highlightedItemIndex.value = unref(detailItems).length - 1, ["prevent"]), ["end"])),
492
+ _cache[22] || (_cache[22] = withKeys(withModifiers(($event) => selectHighlighted(), ["prevent"]), ["enter"])),
493
+ _cache[23] || (_cache[23] = withKeys(withModifiers(($event) => selectHighlighted(), ["prevent"]), ["space"]))
494
+ ]
495
+ }, [unref(mode) === "drill" && unref(showDetail) ? (openBlock(), createElementBlock("button", {
496
+ key: 0,
497
+ type: "button",
498
+ class: normalizeClass(unref(ui).backButton()),
499
+ "data-id": "back",
500
+ onClick: _cache[15] || (_cache[15] = ($event) => backToRail())
501
+ }, [createVNode(RuiIcon_default, {
502
+ name: "lu-chevron-left",
503
+ size: "18"
504
+ }), createElementVNode("span", null, toDisplayString(unref(activeCategory) ?? __props.allLabel), 1)], 2)) : createCommentVNode("", true), unref(isEmpty) ? renderSlot(_ctx.$slots, "empty", { key: 1 }, () => [createElementVNode("div", { class: normalizeClass(unref(ui).empty()) }, toDisplayString(__props.emptyText), 3)]) : (openBlock(true), createElementBlock(Fragment, { key: 2 }, renderList(unref(detailRows), (row) => {
505
+ return openBlock(), createElementBlock(Fragment, { key: row.type === "header" ? `h-${row.category}` : `i-${row.index}` }, [row.type === "header" ? (openBlock(), createElementBlock("div", {
506
+ key: 0,
507
+ class: normalizeClass(unref(ui).subheader()),
508
+ role: "presentation"
509
+ }, toDisplayString(row.category), 3)) : (openBlock(), createBlock(RuiButton_default, {
510
+ key: 1,
511
+ id: `${unref(baseId)}-opt-${row.index}`,
512
+ role: "option",
513
+ variant: "list",
514
+ size: __props.dense ? "sm" : void 0,
515
+ active: unref(isSelected)(row.item),
516
+ "aria-selected": unref(isSelected)(row.item),
517
+ tabindex: "-1",
518
+ "data-highlighted": unref(focusedPane) === "detail" && row.index === unref(highlightedItemIndex),
519
+ class: normalizeClass({ [unref(ui).highlighted()]: unref(focusedPane) === "detail" && row.index === unref(highlightedItemIndex) && !unref(isSelected)(row.item) }),
520
+ onClick: ($event) => selectItem(row.item)
521
+ }, createSlots({
522
+ default: withCtx(() => [renderSlot(_ctx.$slots, "item", mergeProps({ ref_for: true }, {
523
+ active: row.index === unref(highlightedItemIndex),
524
+ item: row.item,
525
+ selected: unref(isSelected)(row.item)
526
+ }), () => [createTextVNode(toDisplayString(unref(getText)(row.item)), 1)])]),
527
+ _: 2
528
+ }, [_ctx.$slots["item.prepend"] ? {
529
+ name: "prepend",
530
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "item.prepend", mergeProps({ ref_for: true }, {
531
+ active: row.index === unref(highlightedItemIndex),
532
+ item: row.item,
533
+ selected: unref(isSelected)(row.item)
534
+ }))]),
535
+ key: "0"
536
+ } : void 0, _ctx.$slots["item.append"] ? {
537
+ name: "append",
538
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "item.append", mergeProps({ ref_for: true }, {
539
+ active: row.index === unref(highlightedItemIndex),
540
+ item: row.item,
541
+ selected: unref(isSelected)(row.item)
542
+ }))]),
543
+ key: "1"
544
+ } : void 0]), 1032, [
545
+ "id",
546
+ "size",
547
+ "active",
548
+ "aria-selected",
549
+ "data-highlighted",
550
+ "class",
551
+ "onClick"
552
+ ]))], 64);
553
+ }), 128))], 42, _hoisted_6), [[vShow, unref(showDetail)]])], 2),
554
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", {
555
+ key: 1,
556
+ class: normalizeClass(unref(ui).footer())
557
+ }, [renderSlot(_ctx.$slots, "footer", normalizeProps(guardReactiveProps({ close })))], 2)) : createCommentVNode("", true)
558
+ ], 10, _hoisted_3)]),
559
+ _: 3
560
+ }, 16, ["modelValue"]);
561
+ };
562
+ }
563
+ });
564
+ //#endregion
565
+ export { RuiCategoryPicker_vue_vue_type_script_setup_true_lang_default as default };
566
+
567
+ //# sourceMappingURL=RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../../src/components/forms/category-picker/RuiCategoryPicker.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TValue, TItem\">\nimport type { KeyOfType } from '@/composables/dropdown-menu';\nimport type { VueClassValue } from '@/types/class-value';\nimport { breakpointsTailwind, useBreakpoints } from '@vueuse/core';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport { categoryPickerActivatorStyles, categoryPickerStyles, type CategoryPickerVariant } from '@/components/forms/category-picker/category-picker-styles';\nimport RuiTextField from '@/components/forms/text-field/RuiTextField.vue';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiDialog, { type DialogProps } from '@/components/overlays/dialog/RuiDialog.vue';\nimport RuiMenu from '@/components/overlays/menu/RuiMenu.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { Placement } from '@/composables/floating';\nimport { useCategoryPicker } from '@/composables/forms/category-picker/use-category-picker';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { cn } from '@/utils/tv';\n\nexport interface RuiCategoryPickerClassNames {\n root?: VueClassValue;\n rail?: VueClassValue;\n detail?: VueClassValue;\n search?: VueClassValue;\n}\n\nexport type CategoryPickerBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nexport interface RuiCategoryPickerProps<TValue, TItem> {\n /** The full catalogue of selectable items. */\n items: TItem[];\n /** Resolve an item's category label. Takes precedence over `categoryAttr`. */\n categoryOf?: (item: TItem) => string;\n /** Resolve an item's category from one of its own properties. */\n categoryAttr?: keyof TItem;\n /** Property whose value becomes the model value. Omit to use the item itself. */\n keyAttr?: KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>;\n /** Property that produces an item's display text. */\n textAttr?: keyof TItem;\n /** Field label, and the title of the mobile sheet. */\n label?: string;\n /** Placeholder shown in the field while it is empty or being searched. */\n placeholder?: string;\n /** Allow filtering: type in the field (desktop) or the sheet's search box (mobile). */\n searchable?: boolean;\n /**\n * Custom predicate. Receives the resolved category label as the third\n * argument, matching the `RuiAutoComplete` filter signature.\n */\n filter?: (item: TItem, query: string, category: string) => boolean;\n /** Show the synthetic \"All\" pseudo-category as the first rail entry. */\n showAll?: boolean;\n /** Label for the \"All\" pseudo-category. */\n allLabel?: string;\n /** Text shown when no item matches the current search. */\n emptyText?: string;\n disabled?: boolean;\n readOnly?: boolean;\n dense?: boolean;\n clearable?: boolean;\n loading?: boolean;\n /** Trigger field style: underline (`default`), `outlined`, or `filled`. */\n variant?: CategoryPickerVariant;\n /** Marks the trigger field as required (renders the asterisk). */\n required?: boolean;\n /** Validation errors rendered under the trigger field. */\n errorMessages?: string | string[];\n /** Success messages rendered under the trigger field. */\n successMessages?: string | string[];\n /** Hint rendered under the trigger field. */\n hint?: string;\n /** Hide the details row (errors/success/hint) under the trigger field. */\n hideDetails?: boolean;\n /** Below this breakpoint the picker collapses to a single-pane drill-in. */\n mobileBreakpoint?: CategoryPickerBreakpoint;\n /** Forwarded to the mobile bottom-sheet (`RuiDialog`). */\n dialogOptions?: DialogProps;\n classNames?: RuiCategoryPickerClassNames;\n}\n\ndefineOptions({\n name: 'RuiCategoryPicker',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<TValue>();\nconst searchInput = defineModel<string>('search', { default: '' });\n\nconst {\n items,\n categoryOf = undefined,\n categoryAttr = undefined,\n keyAttr = undefined,\n textAttr = undefined,\n label = 'Select',\n placeholder = 'Search',\n searchable = true,\n filter = undefined,\n showAll = true,\n allLabel = 'All',\n emptyText = 'No results',\n disabled = false,\n readOnly = false,\n dense = false,\n clearable = false,\n loading = false,\n variant = 'outlined',\n required = false,\n errorMessages = [],\n successMessages = [],\n hint = '',\n hideDetails = false,\n mobileBreakpoint = 'md',\n dialogOptions = undefined,\n classNames = undefined,\n} = defineProps<RuiCategoryPickerProps<TValue, TItem>>();\n\nconst emit = defineEmits<{\n select: [item: TItem];\n}>();\n\ndefineSlots<{\n 'activator'?: (props: { attrs: { onClick?: () => void; onMouseover?: () => void; onMouseleave?: () => void }; isOpen: boolean; open: () => void; item: TItem | undefined; text: string | undefined }) => any;\n 'activator.label'?: (props: { item: TItem | undefined }) => any;\n 'selection'?: (props: { item: TItem }) => any;\n 'selection.prepend'?: (props: { item: TItem }) => any;\n 'category'?: (props: { category: string | null; label: string; active: boolean; count: number }) => any;\n 'item'?: (props: { item: TItem; active: boolean; selected: boolean }) => any;\n 'item.prepend'?: (props: { item: TItem; active: boolean; selected: boolean }) => any;\n 'item.append'?: (props: { item: TItem; active: boolean; selected: boolean }) => any;\n 'empty'?: () => any;\n 'header'?: () => any;\n 'footer'?: (props: { close: () => void }) => any;\n}>();\n\nconst isOpen = ref<boolean>(false);\nconst focusedPane = ref<'rail' | 'detail'>('rail');\nconst highlightedItemIndex = ref<number>(0);\nconst drillStep = ref<'category' | 'detail'>('category');\n\nconst railRef = useTemplateRef<HTMLDivElement>('railRef');\nconst detailRef = useTemplateRef<HTMLDivElement>('detailRef');\nconst activatorRef = useTemplateRef<HTMLInputElement>('activatorRef');\nconst fieldRef = useTemplateRef<HTMLElement>('fieldRef');\nconst isHovered = ref<boolean>(false);\n\nconst { focused } = useFocus(activatorRef);\nconst { hasError, hasSuccess } = useFormTextDetail(() => errorMessages, () => successMessages);\n\nconst baseId = useId();\nconst breakpoints = useBreakpoints(breakpointsTailwind);\n\nfunction resolveCategory(item: TItem): string {\n if (categoryOf)\n return categoryOf(item);\n if (categoryAttr !== undefined)\n return String(item[categoryAttr] ?? '');\n return '';\n}\n\nconst {\n activeCategory,\n detailItems,\n detailRows,\n getIdentifier,\n getText,\n isEmpty,\n isSelected,\n railEntries,\n setActiveCategory,\n syncActiveToSelection,\n} = useCategoryPicker<TValue, TItem>({\n allLabel: () => allLabel,\n categoryOf: resolveCategory,\n filter: () => filter,\n items: () => items,\n keyAttr,\n modelValue,\n search: searchInput,\n searchable: () => searchable,\n showAll: () => showAll,\n textAttr,\n});\n\nconst isMobile = computed<boolean>(() => get(breakpoints.smaller(mobileBreakpoint)));\n\nconst mode = computed<'twoPane' | 'drill'>(() => (get(isMobile) ? 'drill' : 'twoPane'));\n\n// Desktop anchors an outside-click popover under the field (RuiMenu); narrow\n// width shows a full-width bottom sheet (RuiDialog). Each branch returns only\n// its own shell's props so the other component's props never leak as attrs.\nconst shell = computed<typeof RuiMenu | typeof RuiDialog>(() => (get(isMobile) ? RuiDialog : RuiMenu));\n\nconst shellProps = computed<Record<string, unknown>>(() => {\n if (get(isMobile)) {\n return {\n ariaLabel: dialogOptions?.ariaLabel ?? label,\n bottomSheet: dialogOptions?.bottomSheet ?? true,\n maxWidth: dialogOptions?.maxWidth,\n persistent: dialogOptions?.persistent,\n width: dialogOptions?.width ?? '100%',\n };\n }\n return {\n // Anchor to the field box, not the wrapper, so the popover sits directly\n // under the input instead of below the reserved details row.\n anchorEl: get(fieldRef) ?? undefined,\n // Drop the menu's default vertical padding so the popover box equals our\n // panel: the size middleware caps the panel to the available height, and\n // any extra chrome padding would push the popover past the viewport edge.\n classNames: { content: 'py-0', menu: 'z-[9999]' },\n closeOnContentClick: false,\n disableAutoFocus: true,\n fullWidth: true,\n options: { placement: Placement.bottomStart, size: true },\n persistent: dialogOptions?.persistent,\n persistOnActivatorClick: true,\n };\n});\n\nconst ui = computed<ReturnType<typeof categoryPickerStyles>>(() => categoryPickerStyles({\n dense,\n mode: get(mode),\n}));\n\nconst selectedItem = computed<TItem | undefined>(() => {\n const value = get(modelValue);\n if (value === undefined)\n return undefined;\n return items.find(item => getIdentifier(item) === value);\n});\n\nconst selectedText = computed<string | undefined>(() => {\n const selected = get(selectedItem);\n return selected ? getText(selected) : undefined;\n});\n\nconst outlined = computed<boolean>(() => variant === 'outlined');\n\n// Desktop lets the user type in the field itself (no separate search box);\n// narrow width keeps a read-only trigger that opens the sheet's own search.\nconst canType = computed<boolean>(() => searchable && !get(isMobile) && !readOnly && !disabled);\n\nconst isTyping = computed<boolean>(() => get(isOpen) && get(canType));\n\nconst float = computed<boolean>(() => (get(isOpen) || get(selectedItem) !== undefined || get(focused)) && get(outlined));\n\nconst legendText = computed<string>(() => {\n if (!get(float) || !label)\n return '';\n return required ? `${label} ﹡` : label;\n});\n\nconst activatorUi = computed<ReturnType<typeof categoryPickerActivatorStyles>>(() => categoryPickerActivatorStyles({\n dense,\n disabled,\n filled: variant === 'filled',\n float: get(float),\n hasError: get(hasError),\n hasSuccess: get(hasSuccess) && !get(hasError),\n hovered: get(isHovered),\n opened: get(isOpen),\n outlined: get(outlined),\n readonly: readOnly,\n}));\n\nconst activeRailIndex = computed<number>(() =>\n get(railEntries).findIndex(entry => entry.category === get(activeCategory)));\n\nconst showRail = computed<boolean>(() => get(mode) === 'twoPane' || get(drillStep) === 'category');\nconst showDetail = computed<boolean>(() => get(mode) === 'twoPane' || get(drillStep) === 'detail');\n\nfunction clamp(value: number, max: number): number {\n if (value < 0)\n return 0;\n if (value > max)\n return max;\n return value;\n}\n\nfunction open(): void {\n if (disabled)\n return;\n set(isOpen, true);\n}\n\nfunction close(): void {\n set(isOpen, false);\n}\n\nfunction onInput(event: Event): void {\n const target = event.target;\n if (!(target instanceof HTMLInputElement))\n return;\n set(searchInput, target.value);\n if (!get(isOpen))\n open();\n}\n\nfunction selectItem(item: TItem): void {\n if (readOnly)\n return;\n set(modelValue, getIdentifier(item));\n emit('select', item);\n close();\n}\n\nfunction clearSelection(): void {\n set(modelValue, undefined);\n}\n\nfunction onCategoryClick(category: string | null): void {\n setActiveCategory(category);\n if (get(mode) === 'drill')\n set(drillStep, 'detail');\n else\n focusPane('detail');\n}\n\nfunction focusPane(pane: 'rail' | 'detail'): void {\n set(focusedPane, pane);\n nextTick(() => {\n // preventScroll: focus moves between panes inside a teleported popover;\n // without it the browser scrolls the page behind to reveal the pane.\n (pane === 'rail' ? get(railRef) : get(detailRef))?.focus({ preventScroll: true });\n });\n}\n\nfunction moveRail(direction: 1 | -1): void {\n const entries = get(railEntries);\n if (entries.length === 0)\n return;\n const next = clamp(get(activeRailIndex) + direction, entries.length - 1);\n setActiveCategory(entries[next]?.category ?? null);\n}\n\nfunction moveItem(direction: 1 | -1): void {\n const total = get(detailItems).length;\n if (total === 0)\n return;\n set(highlightedItemIndex, clamp(get(highlightedItemIndex) + direction, total - 1));\n}\n\nfunction enterDetail(): void {\n if (get(detailItems).length === 0)\n return;\n resetHighlightToSelection();\n if (get(mode) === 'drill')\n set(drillStep, 'detail');\n focusPane('detail');\n}\n\nfunction selectHighlighted(): void {\n const item = get(detailItems)[get(highlightedItemIndex)];\n if (item !== undefined)\n selectItem(item);\n}\n\n// Enter from the field commits the best match for the current query, so a\n// type-to-pick flow (type a few letters, press Enter) works without leaving the\n// input. Does nothing when the field is empty.\nfunction selectTopResult(): void {\n if (!get(searchInput).trim())\n return;\n const item = get(detailItems)[0];\n if (item !== undefined)\n selectItem(item);\n}\n\nfunction resetHighlightToSelection(): void {\n const index = get(detailItems).findIndex(item => isSelected(item));\n set(highlightedItemIndex, index >= 0 ? index : 0);\n}\n\nfunction backToRail(): void {\n if (get(mode) === 'drill')\n set(drillStep, 'category');\n else\n focusPane('rail');\n}\n\nfunction scrollActiveDescendantIntoView(container: HTMLElement | null, id: string): void {\n if (!container)\n return;\n nextTick(() => {\n container.querySelector(`#${id}`)?.scrollIntoView({ block: 'nearest' });\n });\n}\n\n// Reset the item highlight whenever the active category changes.\nwatch(activeCategory, () => {\n resetHighlightToSelection();\n});\n\nwatch(highlightedItemIndex, (index) => {\n scrollActiveDescendantIntoView(get(detailRef), `${baseId}-opt-${index}`);\n});\n\nwatch(activeRailIndex, (index) => {\n if (index >= 0)\n scrollActiveDescendantIntoView(get(railRef), `${baseId}-cat-${index}`);\n});\n\nwatch(isOpen, (value) => {\n if (value) {\n syncActiveToSelection();\n set(focusedPane, 'rail');\n set(drillStep, 'category');\n resetHighlightToSelection();\n // Desktop is a combobox: keep focus in the field so the user can type\n // straight away (ArrowDown moves into the panes). The mobile sheet has no\n // typing field, so focus the rail instead.\n nextTick(() => (get(canType) ? get(activatorRef) : get(railRef))?.focus({ preventScroll: true }));\n }\n else {\n // Reset the query so the field shows the selection again next time, and\n // return focus to the trigger (APG dialog contract).\n set(searchInput, '');\n nextTick(() => get(activatorRef)?.focus({ preventScroll: true }));\n }\n});\n</script>\n\n<template>\n <component\n :is=\"shell\"\n v-model=\"isOpen\"\n v-bind=\"{ ...$attrs, ...shellProps }\"\n >\n <template #activator=\"{ attrs }\">\n <slot\n name=\"activator\"\n v-bind=\"{ attrs, isOpen, item: selectedItem, open, text: selectedText }\"\n >\n <div :class=\"activatorUi.wrapper()\">\n <div\n ref=\"fieldRef\"\n role=\"combobox\"\n data-id=\"activator\"\n :class=\"activatorUi.activator()\"\n aria-haspopup=\"dialog\"\n :aria-controls=\"isOpen ? `${baseId}-panel` : undefined\"\n :aria-expanded=\"isOpen\"\n :aria-disabled=\"disabled || undefined\"\n :aria-readonly=\"(readOnly || !canType) || undefined\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"hasError || undefined\"\n :aria-busy=\"loading || undefined\"\n v-bind=\"readOnly ? {} : attrs\"\n @mouseenter=\"isHovered = true\"\n @mouseleave=\"isHovered = false\"\n >\n <span\n v-if=\"outlined || (!selectedItem && !isTyping)\"\n :class=\"activatorUi.label()\"\n >\n <slot\n name=\"activator.label\"\n v-bind=\"{ item: selectedItem }\"\n >\n {{ label }}\n </slot>\n <span\n v-if=\"required\"\n :class=\"activatorUi.required()\"\n >\n ﹡\n </span>\n </span>\n <span\n v-if=\"selectedItem && !isTyping && $slots.selection\"\n class=\"absolute inset-y-0 left-4 right-8 flex items-center gap-2 pointer-events-none\"\n :class=\"[activatorUi.value()]\"\n >\n <slot\n name=\"selection.prepend\"\n v-bind=\"{ item: selectedItem }\"\n />\n <slot\n name=\"selection\"\n v-bind=\"{ item: selectedItem }\"\n />\n </span>\n <input\n ref=\"activatorRef\"\n data-id=\"search-input\"\n :value=\"isTyping ? searchInput : (($slots.selection && selectedItem) ? '' : (selectedText ?? ''))\"\n :placeholder=\"isTyping ? placeholder : ''\"\n :readonly=\"!canType\"\n :disabled=\"disabled\"\n :aria-invalid=\"hasError || undefined\"\n class=\"bg-transparent outline-none\"\n :class=\"[activatorUi.value(), !canType && 'cursor-pointer']\"\n @input=\"onInput($event)\"\n @keydown.down.prevent=\"focusPane('rail')\"\n @keydown.enter.prevent=\"selectTopResult()\"\n @keydown.esc=\"close()\"\n />\n <span\n v-if=\"clearable && selectedItem && !disabled && !readOnly\"\n data-id=\"clear\"\n :class=\"[activatorUi.clear(), focused && '!visible']\"\n @click.stop.prevent=\"clearSelection()\"\n >\n <RuiIcon\n color=\"error\"\n name=\"lu-x\"\n size=\"18\"\n />\n </span>\n <span :class=\"activatorUi.iconWrapper()\">\n <RuiIcon\n :class=\"activatorUi.icon()\"\n :size=\"dense ? 16 : 24\"\n name=\"lu-chevron-down\"\n />\n </span>\n <RuiProgress\n v-if=\"loading\"\n :class=\"activatorUi.progress()\"\n color=\"primary\"\n thickness=\"3\"\n variant=\"indeterminate\"\n />\n <fieldset\n v-if=\"outlined\"\n :class=\"activatorUi.fieldset()\"\n >\n <legend :class=\"activatorUi.legend()\">\n {{ legendText }}\n </legend>\n </fieldset>\n </div>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n class=\"px-3 pt-1\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n </slot>\n </template>\n\n <div\n :id=\"`${baseId}-panel`\"\n :class=\"ui.root({ class: cn(classNames?.root) })\"\n data-id=\"panel\"\n >\n <!-- On desktop the field itself is the search input, so the panel only\n needs its own search box in the mobile sheet. -->\n <div\n v-if=\"isMobile || $slots.header\"\n :class=\"ui.header()\"\n >\n <slot name=\"header\">\n <div :class=\"ui.title()\">\n {{ label }}\n </div>\n </slot>\n <RuiTextField\n v-if=\"searchable && isMobile\"\n v-model=\"searchInput\"\n :class=\"cn(classNames?.search)\"\n :placeholder=\"placeholder\"\n :dense=\"dense\"\n variant=\"outlined\"\n prepend-icon=\"lu-search\"\n hide-details\n clearable\n data-id=\"search\"\n />\n </div>\n\n <div :class=\"ui.body()\">\n <!-- Category rail (master) -->\n <div\n v-show=\"showRail\"\n ref=\"railRef\"\n :class=\"ui.rail({ class: cn(classNames?.rail) })\"\n role=\"tablist\"\n aria-orientation=\"vertical\"\n :aria-label=\"label\"\n :aria-activedescendant=\"focusedPane === 'rail' && activeRailIndex >= 0 ? `${baseId}-cat-${activeRailIndex}` : undefined\"\n tabindex=\"0\"\n data-id=\"rail\"\n @focus=\"focusedPane = 'rail'\"\n @keydown.down.prevent=\"moveRail(1)\"\n @keydown.up.prevent=\"moveRail(-1)\"\n @keydown.right.prevent=\"enterDetail()\"\n @keydown.enter.prevent=\"enterDetail()\"\n @keydown.home.prevent=\"setActiveCategory(railEntries[0]?.category ?? null)\"\n @keydown.end.prevent=\"setActiveCategory(railEntries[railEntries.length - 1]?.category ?? null)\"\n >\n <RuiButton\n v-for=\"(entry, index) in railEntries\"\n :id=\"`${baseId}-cat-${index}`\"\n :key=\"entry.category ?? '__all__'\"\n role=\"tab\"\n variant=\"list\"\n :size=\"dense ? 'sm' : undefined\"\n :active=\"entry.category === activeCategory\"\n :aria-selected=\"entry.category === activeCategory\"\n tabindex=\"-1\"\n :data-highlighted=\"focusedPane === 'rail' && index === activeRailIndex\"\n :data-category=\"entry.category ?? '__all__'\"\n @click=\"onCategoryClick(entry.category)\"\n >\n <slot\n name=\"category\"\n v-bind=\"{ active: entry.category === activeCategory, category: entry.category, count: entry.count, label: entry.label }\"\n >\n <span class=\"truncate\">{{ entry.label }}</span>\n <span :class=\"ui.railCount()\">{{ entry.count }}</span>\n </slot>\n </RuiButton>\n </div>\n\n <!-- Detail pane -->\n <div\n v-show=\"showDetail\"\n ref=\"detailRef\"\n :class=\"ui.detail({ class: cn(classNames?.detail) })\"\n role=\"listbox\"\n :aria-label=\"activeCategory ?? allLabel\"\n :aria-activedescendant=\"focusedPane === 'detail' && !isEmpty ? `${baseId}-opt-${highlightedItemIndex}` : undefined\"\n tabindex=\"0\"\n data-id=\"detail\"\n @focus=\"focusedPane = 'detail'\"\n @keydown.down.prevent=\"moveItem(1)\"\n @keydown.up.prevent=\"moveItem(-1)\"\n @keydown.left.prevent=\"backToRail()\"\n @keydown.home.prevent=\"highlightedItemIndex = 0\"\n @keydown.end.prevent=\"highlightedItemIndex = detailItems.length - 1\"\n @keydown.enter.prevent=\"selectHighlighted()\"\n @keydown.space.prevent=\"selectHighlighted()\"\n >\n <template v-if=\"mode === 'drill' && showDetail\">\n <button\n type=\"button\"\n :class=\"ui.backButton()\"\n data-id=\"back\"\n @click=\"backToRail()\"\n >\n <RuiIcon\n name=\"lu-chevron-left\"\n size=\"18\"\n />\n <span>{{ activeCategory ?? allLabel }}</span>\n </button>\n </template>\n\n <slot\n v-if=\"isEmpty\"\n name=\"empty\"\n >\n <div :class=\"ui.empty()\">\n {{ emptyText }}\n </div>\n </slot>\n\n <template\n v-for=\"row in detailRows\"\n v-else\n :key=\"row.type === 'header' ? `h-${row.category}` : `i-${row.index}`\"\n >\n <div\n v-if=\"row.type === 'header'\"\n :class=\"ui.subheader()\"\n role=\"presentation\"\n >\n {{ row.category }}\n </div>\n <RuiButton\n v-else\n :id=\"`${baseId}-opt-${row.index}`\"\n role=\"option\"\n variant=\"list\"\n :size=\"dense ? 'sm' : undefined\"\n :active=\"isSelected(row.item)\"\n :aria-selected=\"isSelected(row.item)\"\n tabindex=\"-1\"\n :data-highlighted=\"focusedPane === 'detail' && row.index === highlightedItemIndex\"\n :class=\"{ [ui.highlighted()]: focusedPane === 'detail' && row.index === highlightedItemIndex && !isSelected(row.item) }\"\n @click=\"selectItem(row.item)\"\n >\n <template\n v-if=\"$slots['item.prepend']\"\n #prepend\n >\n <slot\n name=\"item.prepend\"\n v-bind=\"{ active: row.index === highlightedItemIndex, item: row.item, selected: isSelected(row.item) }\"\n />\n </template>\n <slot\n name=\"item\"\n v-bind=\"{ active: row.index === highlightedItemIndex, item: row.item, selected: isSelected(row.item) }\"\n >\n {{ getText(row.item) }}\n </slot>\n <template\n v-if=\"$slots['item.append']\"\n #append\n >\n <slot\n name=\"item.append\"\n v-bind=\"{ active: row.index === highlightedItemIndex, item: row.item, selected: isSelected(row.item) }\"\n />\n </template>\n </RuiButton>\n </template>\n </div>\n </div>\n\n <div\n v-if=\"$slots.footer\"\n :class=\"ui.footer()\"\n >\n <slot\n name=\"footer\"\n v-bind=\"{ close }\"\n />\n </div>\n </div>\n </component>\n</template>\n"],"mappings":"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"}