@rotki/ui-library 2.21.0 → 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 (321) 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 +561 -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.vue_vue_type_script_setup_true_lang.js +2 -2
  136. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  137. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js +3 -3
  138. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  139. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js +2 -2
  140. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js.map +1 -1
  141. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js +1 -1
  142. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  143. package/dist/components/overlays/tooltip/tooltip-styles.js.map +1 -1
  144. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js +1 -1
  145. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js.map +1 -1
  146. package/dist/components/progress/progress-props.js.map +1 -1
  147. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js +2 -2
  148. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  149. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js +1 -1
  150. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  151. package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  152. package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  153. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  154. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  155. package/dist/components/steppers/footer-stepper-variant.js.map +1 -1
  156. package/dist/components/tables/RuiDataTable.js.map +1 -1
  157. package/dist/components/tables/RuiDataTable.vue.d.ts +23 -2
  158. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js +186 -217
  159. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  160. package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js +1 -1
  161. package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  162. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js +1 -1
  163. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  164. package/dist/components/tables/RuiTableHead.js.map +1 -1
  165. package/dist/components/tables/RuiTableHead.vue.d.ts +11 -1
  166. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js +1 -2
  167. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js.map +1 -1
  168. package/dist/components/tables/RuiTablePagination.js.map +1 -1
  169. package/dist/components/tables/RuiTablePagination.vue.d.ts +5 -0
  170. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js +24 -8
  171. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  172. package/dist/components/tables/data-table/RuiDataTableBody.js +7 -0
  173. package/dist/components/tables/data-table/RuiDataTableBody.js.map +1 -0
  174. package/dist/components/tables/data-table/RuiDataTableBody.vue.d.ts +55 -0
  175. package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js +78 -0
  176. package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js.map +1 -0
  177. package/dist/components/tables/data-table/RuiDataTableCell.js +7 -0
  178. package/dist/components/tables/data-table/RuiDataTableCell.js.map +1 -0
  179. package/dist/components/tables/data-table/RuiDataTableCell.vue.d.ts +30 -0
  180. package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js +54 -0
  181. package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
  182. package/dist/components/tables/data-table/RuiDataTableEmptyRow.js +7 -0
  183. package/dist/components/tables/data-table/RuiDataTableEmptyRow.js.map +1 -0
  184. package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue.d.ts +19 -0
  185. package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue_vue_type_script_setup_true_lang.js +43 -0
  186. package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  187. package/dist/components/tables/data-table/RuiDataTableExpandedRow.js +7 -0
  188. package/dist/components/tables/data-table/RuiDataTableExpandedRow.js.map +1 -0
  189. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue.d.ts +26 -0
  190. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js +31 -0
  191. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  192. package/dist/components/tables/data-table/RuiDataTableGroupRow.js +7 -0
  193. package/dist/components/tables/data-table/RuiDataTableGroupRow.js.map +1 -0
  194. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue.d.ts +32 -0
  195. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js +85 -0
  196. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  197. package/dist/components/tables/data-table/RuiDataTableLoadingRow.js +7 -0
  198. package/dist/components/tables/data-table/RuiDataTableLoadingRow.js.map +1 -0
  199. package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue.d.ts +3 -0
  200. package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue_vue_type_script_setup_true_lang.js +26 -0
  201. package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  202. package/dist/components/tables/data-table/RuiDataTableMobileSort.js +7 -0
  203. package/dist/components/tables/data-table/RuiDataTableMobileSort.js.map +1 -0
  204. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue.d.ts +33 -0
  205. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js +101 -0
  206. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js.map +1 -0
  207. package/dist/components/tables/data-table/RuiDataTableRow.js +7 -0
  208. package/dist/components/tables/data-table/RuiDataTableRow.js.map +1 -0
  209. package/dist/components/tables/data-table/RuiDataTableRow.vue.d.ts +31 -0
  210. package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js +142 -0
  211. package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  212. package/dist/components/tables/data-table/context.d.ts +73 -0
  213. package/dist/components/tables/data-table/context.js +100 -0
  214. package/dist/components/tables/data-table/context.js.map +1 -0
  215. package/dist/components/tables/data-table-styles.d.ts +30 -1
  216. package/dist/components/tables/data-table-styles.js +9 -2
  217. package/dist/components/tables/data-table-styles.js.map +1 -1
  218. package/dist/components/tables/table-props.d.ts +5 -0
  219. package/dist/components/tables/table-props.js +5 -1
  220. package/dist/components/tables/table-props.js.map +1 -1
  221. package/dist/components/tables/use-pagination-navigation.js.map +1 -1
  222. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js +1 -1
  223. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js.map +1 -1
  224. package/dist/components/tabs/tab/use-tab-link.js.map +1 -1
  225. package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js +1 -1
  226. package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  227. package/dist/components/tabs/tab-items/RuiTabItems.js.map +1 -1
  228. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js +2 -2
  229. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js.map +1 -1
  230. package/dist/components/tabs/tab-props.js.map +1 -1
  231. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js +2 -2
  232. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  233. package/dist/components/tabs/tabs/use-tab-routing.js +1 -1
  234. package/dist/components/tabs/tabs/use-tab-routing.js.map +1 -1
  235. package/dist/components/tabs/tabs/use-tab-scroll.js.map +1 -1
  236. package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js +2 -2
  237. package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  238. package/dist/components/time-picker/time-picker-styles.js.map +1 -1
  239. package/dist/composables/breakpoint.js.map +1 -1
  240. package/dist/composables/defaults/table.d.ts +12 -0
  241. package/dist/composables/defaults/table.js.map +1 -1
  242. package/dist/composables/dropdown-menu.js.map +1 -1
  243. package/dist/composables/floating.js +1 -1
  244. package/dist/composables/floating.js.map +1 -1
  245. package/dist/composables/forms/auto-complete/focus.js.map +1 -1
  246. package/dist/composables/forms/auto-complete/index.js +5 -4
  247. package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
  248. package/dist/composables/forms/auto-complete/search.d.ts +6 -1
  249. package/dist/composables/forms/auto-complete/search.js +12 -1
  250. package/dist/composables/forms/auto-complete/search.js.map +1 -1
  251. package/dist/composables/forms/auto-complete/value.js.map +1 -1
  252. package/dist/composables/forms/category-picker/use-category-picker.d.ts +76 -0
  253. package/dist/composables/forms/category-picker/use-category-picker.js +141 -0
  254. package/dist/composables/forms/category-picker/use-category-picker.js.map +1 -0
  255. package/dist/composables/forms/use-prepend-append-width.js.map +1 -1
  256. package/dist/composables/icons.js.map +1 -1
  257. package/dist/composables/popper.js.map +1 -1
  258. package/dist/composables/sticky-header.js.map +1 -1
  259. package/dist/composables/tables/data-table/columns.d.ts +7 -1
  260. package/dist/composables/tables/data-table/columns.js +18 -10
  261. package/dist/composables/tables/data-table/columns.js.map +1 -1
  262. package/dist/composables/tables/data-table/expansion.js.map +1 -1
  263. package/dist/composables/tables/data-table/grouping.d.ts +4 -6
  264. package/dist/composables/tables/data-table/grouping.js +38 -24
  265. package/dist/composables/tables/data-table/grouping.js.map +1 -1
  266. package/dist/composables/tables/data-table/pagination.d.ts +4 -4
  267. package/dist/composables/tables/data-table/pagination.js +63 -21
  268. package/dist/composables/tables/data-table/pagination.js.map +1 -1
  269. package/dist/composables/tables/data-table/selection.js +16 -6
  270. package/dist/composables/tables/data-table/selection.js.map +1 -1
  271. package/dist/composables/tables/data-table/sort.d.ts +4 -3
  272. package/dist/composables/tables/data-table/sort.js +78 -40
  273. package/dist/composables/tables/data-table/sort.js.map +1 -1
  274. package/dist/composables/tables/data-table/types.d.ts +3 -1
  275. package/dist/composables/tables/data-table/types.js +6 -2
  276. package/dist/composables/tables/data-table/types.js.map +1 -1
  277. package/dist/composables/theme.js.map +1 -1
  278. package/dist/composables/timeout-manager.js.map +1 -1
  279. package/dist/composables/use-rui-i18n.js.map +1 -1
  280. package/dist/consts/colors.js.map +1 -1
  281. package/dist/consts/time-accuracy.js.map +1 -1
  282. package/dist/i18n/keys.js.map +1 -1
  283. package/dist/icons/icons_1.d.ts +12 -12
  284. package/dist/icons/icons_1.js +140 -157
  285. package/dist/icons/icons_1.js.map +1 -1
  286. package/dist/icons/icons_2.d.ts +13 -13
  287. package/dist/icons/icons_2.js +128 -149
  288. package/dist/icons/icons_2.js.map +1 -1
  289. package/dist/icons/icons_3.d.ts +18 -18
  290. package/dist/icons/icons_3.js +244 -282
  291. package/dist/icons/icons_3.js.map +1 -1
  292. package/dist/icons/icons_4.d.ts +251 -6
  293. package/dist/icons/icons_4.js +3016 -75
  294. package/dist/icons/icons_4.js.map +1 -1
  295. package/dist/icons/icons_5.d.ts +20 -0
  296. package/dist/icons/icons_5.js +221 -0
  297. package/dist/icons/icons_5.js.map +1 -0
  298. package/dist/icons/index.d.ts +2 -1
  299. package/dist/icons/index.js +297 -32
  300. package/dist/icons/index.js.map +1 -1
  301. package/dist/index.js +8 -6
  302. package/dist/index.js.map +1 -1
  303. package/dist/library-icons.json +1 -0
  304. package/dist/style.css +152 -0
  305. package/dist/theme/index.js.map +1 -1
  306. package/dist/types/stepper.js.map +1 -1
  307. package/dist/types/theme.js.map +1 -1
  308. package/dist/utils/assert.js.map +1 -1
  309. package/dist/utils/blockie.js.map +1 -1
  310. package/dist/utils/form-text-detail.js.map +1 -1
  311. package/dist/utils/helpers.js.map +1 -1
  312. package/dist/utils/is-equal.js.map +1 -1
  313. package/dist/utils/tv.js.map +1 -1
  314. package/dist/vite-plugin/index.js +6 -5
  315. package/dist/vite-plugin/index.js.map +1 -1
  316. package/dist/vite-plugin/scanner.d.ts +1 -1
  317. package/dist/vite-plugin/scanner.js +10 -7
  318. package/dist/vite-plugin/scanner.js.map +1 -1
  319. package/dist/vite-plugin/types.d.ts +9 -0
  320. package/dist/web-types.json +2042 -1108
  321. package/package.json +35 -35
@@ -0,0 +1,26 @@
1
+ import RuiProgress_default from "../../progress/RuiProgress.js";
2
+ import { useDataTableStyling } from "./context.js";
3
+ import { createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, unref } from "vue";
4
+ //#region src/components/tables/data-table/RuiDataTableLoadingRow.vue?vue&type=script&setup=true&lang.ts
5
+ var _hoisted_1 = ["colspan"];
6
+ var RuiDataTableLoadingRow_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
+ __name: "RuiDataTableLoadingRow",
8
+ setup(__props) {
9
+ const { classes, colspan } = useDataTableStyling();
10
+ return (_ctx, _cache) => {
11
+ return openBlock(), createElementBlock("tr", null, [createElementVNode("td", {
12
+ class: normalizeClass(unref(classes).tbodyLoader),
13
+ colspan: unref(colspan),
14
+ "data-id": "tbody-loader"
15
+ }, [createElementVNode("div", { class: normalizeClass(unref(classes).tbodyLoaderContent) }, [createVNode(RuiProgress_default, {
16
+ color: "primary",
17
+ variant: "indeterminate",
18
+ circular: ""
19
+ })], 2)], 10, _hoisted_1)]);
20
+ };
21
+ }
22
+ });
23
+ //#endregion
24
+ export { RuiDataTableLoadingRow_vue_vue_type_script_setup_true_lang_default as default };
25
+
26
+ //# sourceMappingURL=RuiDataTableLoadingRow.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiDataTableLoadingRow.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableLoadingRow.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { useDataTableStyling } from '@/components/tables/data-table/context';\n\nconst { classes, colspan } = useDataTableStyling();\n</script>\n\n<template>\n <tr>\n <td\n :class=\"classes.tbodyLoader\"\n :colspan=\"colspan\"\n data-id=\"tbody-loader\"\n >\n <div :class=\"classes.tbodyLoaderContent\">\n <RuiProgress\n color=\"primary\"\n variant=\"indeterminate\"\n circular\n />\n </div>\n </td>\n </tr>\n</template>\n"],"mappings":";;;;;;;;EAIA,MAAM,EAAE,SAAS,YAAY,oBAAoB;;uBAI/C,mBAcK,MAAA,MAAA,CAbH,mBAYK,MAAA;IAXF,OAAK,eAAE,MAAA,OAAA,CAAO,CAAC,WAAW;IAC1B,SAAS,MAAA,OAAA;IACV,WAAQ;OAER,mBAMM,OAAA,EANA,OAAK,eAAE,MAAA,OAAA,CAAO,CAAC,kBAAkB,EAAA,GAAA,CACrC,YAIE,qBAAA;IAHA,OAAM;IACN,SAAQ;IACR,UAAA"}
@@ -0,0 +1,7 @@
1
+ import RuiDataTableMobileSort_vue_vue_type_script_setup_true_lang_default from "./RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/tables/data-table/RuiDataTableMobileSort.vue
3
+ var RuiDataTableMobileSort_default = RuiDataTableMobileSort_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { RuiDataTableMobileSort_default as default };
6
+
7
+ //# sourceMappingURL=RuiDataTableMobileSort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiDataTableMobileSort.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableMobileSort.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { SortColumn, TableColumn, TableRowKey } from '@/components/tables/RuiTableHead.vue';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiMenu from '@/components/overlays/menu/RuiMenu.vue';\nimport { SortDirection } from '@/components/tables/table-props';\n\nconst {\n columns,\n columnAttr = 'label',\n sortedMap,\n dense = false,\n} = defineProps<{\n columns: TableColumn<T>[];\n columnAttr?: keyof TableColumn<T>;\n sortedMap: Partial<Record<TableRowKey<T>, SortColumn<T>>>;\n dense?: boolean;\n}>();\n\nconst emit = defineEmits<{\n sort: [value: { key: TableRowKey<T>; direction?: SortDirection }];\n}>();\n\nconst sortableColumns = computed<TableColumn<T>[]>(() => columns.filter(column => column.sortable));\n\nfunction columnLabel(column: TableColumn<T>): string {\n const label = column[columnAttr];\n return label === undefined || label === null ? String(column.key) : String(label);\n}\n\nfunction sortDirection(key: TableColumn<T>['key']): SortDirection | undefined {\n return sortedMap[key as TableRowKey<T>]?.direction;\n}\n\nfunction isActive(key: TableColumn<T>['key']): boolean {\n return (key as TableRowKey<T>) in sortedMap;\n}\n\nconst activeLabel = computed<string>(() => {\n const active = get(sortableColumns).filter(column => isActive(column.key));\n if (active.length === 0)\n return 'Sort';\n if (active.length === 1)\n return columnLabel(active[0]!);\n return `${active.length} sorts`;\n});\n\n// Mirror RuiTableHead: emit the column's configured default direction so the\n// sort composable performs the same asc → desc → none cycle on repeat taps.\nfunction onSelect(column: TableColumn<T>): void {\n emit('sort', {\n key: column.key as TableRowKey<T>,\n direction: (column.direction as SortDirection | undefined) ?? SortDirection.asc,\n });\n}\n</script>\n\n<template>\n <RuiMenu\n :dense=\"dense\"\n :options=\"{ placement: 'bottom-end' }\"\n data-id=\"table-mobile-sort\"\n >\n <template #activator=\"{ attrs }\">\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n variant=\"outlined\"\n v-bind=\"attrs\"\n data-id=\"table-mobile-sort-activator\"\n >\n <template #prepend>\n <RuiIcon\n name=\"lu-arrow-up-down\"\n size=\"18\"\n />\n </template>\n {{ activeLabel }}\n </RuiButton>\n </template>\n <div class=\"py-1 min-w-40\">\n <RuiButton\n v-for=\"column in sortableColumns\"\n :key=\"column.key.toString()\"\n variant=\"text\"\n size=\"sm\"\n class=\"!justify-between w-full !rounded-none\"\n :data-id=\"`table-mobile-sort-option-${column.key}`\"\n :data-active=\"isActive(column.key)\"\n :data-direction=\"sortDirection(column.key)\"\n @click=\"onSelect(column)\"\n >\n {{ columnLabel(column) }}\n <template #append>\n <RuiIcon\n v-if=\"isActive(column.key)\"\n name=\"lu-arrow-down\"\n :class=\"sortDirection(column.key) === 'asc' ? 'rotate-180' : ''\"\n size=\"16\"\n />\n <span\n v-else\n class=\"w-4\"\n />\n </template>\n </RuiButton>\n </div>\n </RuiMenu>\n</template>\n"],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import type { SortColumn, TableColumn, TableRowKey } from '../../../components/tables/RuiTableHead.vue';
2
+ import { SortDirection } from '../../../components/tables/table-props.js';
3
+ declare const __VLS_export: <T extends object>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<{
5
+ columns: TableColumn<T>[];
6
+ columnAttr?: keyof TableColumn<T>;
7
+ sortedMap: Partial<Record<TableRowKey<T>, SortColumn<T>>>;
8
+ dense?: boolean;
9
+ } & {
10
+ onSort?: ((value: {
11
+ key: TableRowKey<T>;
12
+ direction?: SortDirection;
13
+ }) => any) | undefined;
14
+ }> & (typeof globalThis extends {
15
+ __VLS_PROPS_FALLBACK: infer P;
16
+ } ? P : {});
17
+ expose: (exposed: {}) => void;
18
+ attrs: any;
19
+ slots: {};
20
+ emit: (evt: "sort", value: {
21
+ key: TableRowKey<T>;
22
+ direction?: SortDirection;
23
+ }) => void;
24
+ }>) => import("vue").VNode & {
25
+ __ctx?: Awaited<typeof __VLS_setup>;
26
+ };
27
+ declare const _default: typeof __VLS_export;
28
+ export default _default;
29
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
30
+ [K in keyof T]: T[K];
31
+ } : {
32
+ [K in keyof T as K]: T[K];
33
+ }) & {};
@@ -0,0 +1,101 @@
1
+ import RuiIcon_default from "../../icons/RuiIcon.js";
2
+ import RuiButton_default from "../../buttons/button/RuiButton.js";
3
+ import RuiMenu_default from "../../overlays/menu/RuiMenu.js";
4
+ import { SortDirection } from "../table-props.js";
5
+ import { Fragment, computed, createBlock, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeProps, normalizeClass, openBlock, renderList, toDisplayString, unref, withCtx } from "vue";
6
+ import { get } from "@vueuse/shared";
7
+ //#region src/components/tables/data-table/RuiDataTableMobileSort.vue?vue&type=script&setup=true&lang.ts
8
+ var _hoisted_1 = { class: "py-1 min-w-40" };
9
+ var _hoisted_2 = {
10
+ key: 1,
11
+ class: "w-4"
12
+ };
13
+ var RuiDataTableMobileSort_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
14
+ __name: "RuiDataTableMobileSort",
15
+ props: {
16
+ columns: {},
17
+ columnAttr: { default: "label" },
18
+ sortedMap: {},
19
+ dense: {
20
+ type: Boolean,
21
+ default: false
22
+ }
23
+ },
24
+ emits: ["sort"],
25
+ setup(__props, { emit: __emit }) {
26
+ const emit = __emit;
27
+ const sortableColumns = computed(() => __props.columns.filter((column) => column.sortable));
28
+ function columnLabel(column) {
29
+ const label = column[__props.columnAttr];
30
+ return label === void 0 || label === null ? String(column.key) : String(label);
31
+ }
32
+ function sortDirection(key) {
33
+ return __props.sortedMap[key]?.direction;
34
+ }
35
+ function isActive(key) {
36
+ return key in __props.sortedMap;
37
+ }
38
+ const activeLabel = computed(() => {
39
+ const active = get(sortableColumns).filter((column) => isActive(column.key));
40
+ if (active.length === 0) return "Sort";
41
+ if (active.length === 1) return columnLabel(active[0]);
42
+ return `${active.length} sorts`;
43
+ });
44
+ function onSelect(column) {
45
+ emit("sort", {
46
+ key: column.key,
47
+ direction: column.direction ?? SortDirection.asc
48
+ });
49
+ }
50
+ return (_ctx, _cache) => {
51
+ return openBlock(), createBlock(RuiMenu_default, {
52
+ dense: __props.dense,
53
+ options: { placement: "bottom-end" },
54
+ "data-id": "table-mobile-sort"
55
+ }, {
56
+ activator: withCtx(({ attrs }) => [createVNode(RuiButton_default, mergeProps({
57
+ size: __props.dense ? "sm" : void 0,
58
+ variant: "outlined"
59
+ }, attrs, { "data-id": "table-mobile-sort-activator" }), {
60
+ prepend: withCtx(() => [createVNode(RuiIcon_default, {
61
+ name: "lu-arrow-up-down",
62
+ size: "18"
63
+ })]),
64
+ default: withCtx(() => [createTextVNode(" " + toDisplayString(unref(activeLabel)), 1)]),
65
+ _: 1
66
+ }, 16, ["size"])]),
67
+ default: withCtx(() => [createElementVNode("div", _hoisted_1, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(sortableColumns), (column) => {
68
+ return openBlock(), createBlock(RuiButton_default, {
69
+ key: column.key.toString(),
70
+ variant: "text",
71
+ size: "sm",
72
+ class: "!justify-between w-full !rounded-none",
73
+ "data-id": `table-mobile-sort-option-${column.key}`,
74
+ "data-active": isActive(column.key),
75
+ "data-direction": sortDirection(column.key),
76
+ onClick: ($event) => onSelect(column)
77
+ }, {
78
+ append: withCtx(() => [isActive(column.key) ? (openBlock(), createBlock(RuiIcon_default, {
79
+ key: 0,
80
+ name: "lu-arrow-down",
81
+ class: normalizeClass(sortDirection(column.key) === "asc" ? "rotate-180" : ""),
82
+ size: "16"
83
+ }, null, 8, ["class"])) : (openBlock(), createElementBlock("span", _hoisted_2))]),
84
+ default: withCtx(() => [createTextVNode(toDisplayString(columnLabel(column)) + " ", 1)]),
85
+ _: 2
86
+ }, 1032, [
87
+ "data-id",
88
+ "data-active",
89
+ "data-direction",
90
+ "onClick"
91
+ ]);
92
+ }), 128))])]),
93
+ _: 1
94
+ }, 8, ["dense"]);
95
+ };
96
+ }
97
+ });
98
+ //#endregion
99
+ export { RuiDataTableMobileSort_vue_vue_type_script_setup_true_lang_default as default };
100
+
101
+ //# sourceMappingURL=RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableMobileSort.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { SortColumn, TableColumn, TableRowKey } from '@/components/tables/RuiTableHead.vue';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiMenu from '@/components/overlays/menu/RuiMenu.vue';\nimport { SortDirection } from '@/components/tables/table-props';\n\nconst {\n columns,\n columnAttr = 'label',\n sortedMap,\n dense = false,\n} = defineProps<{\n columns: TableColumn<T>[];\n columnAttr?: keyof TableColumn<T>;\n sortedMap: Partial<Record<TableRowKey<T>, SortColumn<T>>>;\n dense?: boolean;\n}>();\n\nconst emit = defineEmits<{\n sort: [value: { key: TableRowKey<T>; direction?: SortDirection }];\n}>();\n\nconst sortableColumns = computed<TableColumn<T>[]>(() => columns.filter(column => column.sortable));\n\nfunction columnLabel(column: TableColumn<T>): string {\n const label = column[columnAttr];\n return label === undefined || label === null ? String(column.key) : String(label);\n}\n\nfunction sortDirection(key: TableColumn<T>['key']): SortDirection | undefined {\n return sortedMap[key as TableRowKey<T>]?.direction;\n}\n\nfunction isActive(key: TableColumn<T>['key']): boolean {\n return (key as TableRowKey<T>) in sortedMap;\n}\n\nconst activeLabel = computed<string>(() => {\n const active = get(sortableColumns).filter(column => isActive(column.key));\n if (active.length === 0)\n return 'Sort';\n if (active.length === 1)\n return columnLabel(active[0]!);\n return `${active.length} sorts`;\n});\n\n// Mirror RuiTableHead: emit the column's configured default direction so the\n// sort composable performs the same asc → desc → none cycle on repeat taps.\nfunction onSelect(column: TableColumn<T>): void {\n emit('sort', {\n key: column.key as TableRowKey<T>,\n direction: (column.direction as SortDirection | undefined) ?? SortDirection.asc,\n });\n}\n</script>\n\n<template>\n <RuiMenu\n :dense=\"dense\"\n :options=\"{ placement: 'bottom-end' }\"\n data-id=\"table-mobile-sort\"\n >\n <template #activator=\"{ attrs }\">\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n variant=\"outlined\"\n v-bind=\"attrs\"\n data-id=\"table-mobile-sort-activator\"\n >\n <template #prepend>\n <RuiIcon\n name=\"lu-arrow-up-down\"\n size=\"18\"\n />\n </template>\n {{ activeLabel }}\n </RuiButton>\n </template>\n <div class=\"py-1 min-w-40\">\n <RuiButton\n v-for=\"column in sortableColumns\"\n :key=\"column.key.toString()\"\n variant=\"text\"\n size=\"sm\"\n class=\"!justify-between w-full !rounded-none\"\n :data-id=\"`table-mobile-sort-option-${column.key}`\"\n :data-active=\"isActive(column.key)\"\n :data-direction=\"sortDirection(column.key)\"\n @click=\"onSelect(column)\"\n >\n {{ columnLabel(column) }}\n <template #append>\n <RuiIcon\n v-if=\"isActive(column.key)\"\n name=\"lu-arrow-down\"\n :class=\"sortDirection(column.key) === 'asc' ? 'rotate-180' : ''\"\n size=\"16\"\n />\n <span\n v-else\n class=\"w-4\"\n />\n </template>\n </RuiButton>\n </div>\n </RuiMenu>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAmBA,MAAM,OAAO;EAIb,MAAM,kBAAkB,eAAiC,QAAA,QAAQ,QAAO,WAAU,OAAO,QAAQ,CAAC;EAElG,SAAS,YAAY,QAAgC;GACnD,MAAM,QAAQ,OAAO,QAAA;GACrB,OAAO,UAAU,KAAA,KAAa,UAAU,OAAO,OAAO,OAAO,GAAG,IAAI,OAAO,KAAK;EAClF;EAEA,SAAS,cAAc,KAAuD;GAC5E,OAAO,QAAA,UAAU,IAAsB,EAAE;EAC3C;EAEA,SAAS,SAAS,KAAqC;GACrD,OAAQ,OAA0B,QAAA;EACpC;EAEA,MAAM,cAAc,eAAuB;GACzC,MAAM,SAAS,IAAI,eAAe,CAAC,CAAC,QAAO,WAAU,SAAS,OAAO,GAAG,CAAC;GACzE,IAAI,OAAO,WAAW,GACpB,OAAO;GACT,IAAI,OAAO,WAAW,GACpB,OAAO,YAAY,OAAO,EAAG;GAC/B,OAAO,GAAG,OAAO,OAAO;EAC1B,CAAC;EAID,SAAS,SAAS,QAA8B;GAC9C,KAAK,QAAQ;IACX,KAAK,OAAO;IACZ,WAAY,OAAO,aAA2C,cAAc;GAC9E,CAAC;EACH;;uBAIE,YAgDU,iBAAA;IA/CP,OAAO,QAAA;IACP,SAAS,EAAA,WAAA,aAAA;IACV,WAAQ;;IAEG,WAAS,SAcN,EAdU,YAAK,CAC3B,YAaY,mBAbZ,WAaY;KAZT,MAAM,QAAA,QAAK,OAAU,KAAA;KACtB,SAAQ;OACA,OAAK,EACb,WAAQ,8BAA6B,CAAA,GAAA;KAE1B,SAAO,cAId,CAHF,YAGE,iBAAA;MAFA,MAAK;MACL,MAAK;;4BAGT,CAAA,gBADW,MACX,gBAAG,MAAA,WAAA,CAAW,GAAA,CAAA,CAAA,CAAA;;;2BA6BZ,CA1BN,mBA0BM,OA1BN,YA0BM,EAAA,UAAA,IAAA,GAzBJ,mBAwBY,UAAA,MAAA,WAvBO,MAAA,eAAA,IAAV,WAAM;yBADf,YAwBY,mBAAA;MAtBT,KAAK,OAAO,IAAI,SAAQ;MACzB,SAAQ;MACR,MAAK;MACL,OAAM;MACL,WAAO,4BAA8B,OAAO;MAC5C,eAAa,SAAS,OAAO,GAAG;MAChC,kBAAgB,cAAc,OAAO,GAAG;MACxC,UAAK,WAAE,SAAS,MAAM;;MAGZ,QAAM,cAMb,CAJM,SAAS,OAAO,GAAG,KAAA,UAAA,GAD3B,YAKE,iBAAA;;OAHA,MAAK;OACJ,OAAK,eAAE,cAAc,OAAO,GAAG,MAAA,QAAA,eAAA,EAAA;OAChC,MAAK;8CAEP,mBAGE,QAHF,UAGE,EAAA,CAAA;6BAXqB,CAAA,gBAAA,gBAAtB,YAAY,MAAM,CAAA,IAAI,KACzB,CAAA,CAAA,CAAA"}
@@ -0,0 +1,7 @@
1
+ import RuiDataTableRow_vue_vue_type_script_setup_true_lang_default from "./RuiDataTableRow.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/tables/data-table/RuiDataTableRow.vue
3
+ var RuiDataTableRow_default = RuiDataTableRow_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { RuiDataTableRow_default as default };
6
+
7
+ //# sourceMappingURL=RuiDataTableRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiDataTableRow.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableRow.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { TableColumn } from '@/components/tables/RuiTableHead.vue';\nimport RuiCheckbox from '@/components/forms/checkbox/RuiCheckbox.vue';\nimport { useDataTableColumns, useDataTableExpansion, useDataTableRowIdentity, useDataTableSelection, useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiDataTableCell from '@/components/tables/data-table/RuiDataTableCell.vue';\nimport RuiDataTableExpandedRow from '@/components/tables/data-table/RuiDataTableExpandedRow.vue';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\n\nconst {\n row,\n index,\n} = defineProps<{\n row: T;\n index: number;\n}>();\n\nconst slots = defineSlots<Partial<\n Record<`item.${string}`, (props: { column: TableColumn<T>; row: T; index: number }) => any> & {\n 'expanded-item'?: (props: { row: T; index: number }) => any;\n }\n>>();\n\nconst { classes, dense, isMobile } = useDataTableStyling();\nconst { cellValue, columns, itemSlotKeys } = useDataTableColumns<T>();\nconst { isDisabledRow, isSelected, onCheckboxClick, onSelect, selectedData } = useDataTableSelection<T>();\nconst { expandable, isExpanded, onToggleExpand } = useDataTableExpansion<T>();\nconst { getRowId, itemClass } = useDataTableRowIdentity<T>();\n\nconst rowId = computed<T[keyof T]>(() => getRowId(row));\nconst selected = computed<boolean>(() => isSelected(get(rowId)));\nconst disabled = computed<boolean>(() => isDisabledRow(get(rowId)));\nconst expanded = computed<boolean>(() => get(expandable) && !!slots['expanded-item'] && isExpanded(get(rowId)));\nconst rowClass = computed<string>(() => typeof itemClass === 'string' ? itemClass : itemClass(row));\n\n// A column is pinned to the mobile card header when it is flagged `mobileHeader`\n// (typically an action column) or when it is the auto-generated expand column.\nfunction isMobileHeaderColumn(column: TableColumn<T>): boolean {\n return !!column.mobileHeader || column.key === 'expand';\n}\n\n// A pinned column only earns a spot in the header if it actually renders\n// something: the expand toggle, a provided item slot, or a non-empty cell value.\n// Without this, a pinned column with no content (e.g. an action column whose\n// `#item.action` slot is not provided in a nested table) would leave an empty\n// header bar with just its divider line.\nfunction mobileHeaderColumnHasContent(column: TableColumn<T>): boolean {\n if (column.key === 'expand')\n return true;\n if (itemSlotKeys.has(column.key.toString()))\n return true;\n const value = cellValue(row, column.key);\n return value !== undefined && value !== null && value !== '';\n}\n\n// In the stacked mobile layout, header columns render in the card header row\n// instead of as a label/value pair. Everything else stacks below in the body.\nconst mobileHeaderColumns = computed<TableColumn<T>[]>(() =>\n get(isMobile) ? get(columns).filter(column => isMobileHeaderColumn(column) && mobileHeaderColumnHasContent(column)) : [],\n);\nconst bodyColumns = computed<TableColumn<T>[]>(() =>\n get(isMobile) ? get(columns).filter(column => !isMobileHeaderColumn(column)) : get(columns),\n);\nconst showMobileHeader = computed<boolean>(() =>\n get(isMobile) && (!!get(selectedData) || get(mobileHeaderColumns).length > 0),\n);\n\n// `!border-y` defeats the `divide-y-0` on the mobile tbody, which otherwise\n// zeroes the top/bottom border on every card except the first one. When the\n// card is expanded, its bottom edge flattens so the expanded panel attaches\n// flush beneath it.\nconst mobileCardClass = computed<string>(() => {\n const shared = 'relative flex flex-col border !border-y border-black/[0.12] dark:border-white/[0.12] overflow-hidden';\n // These bindings are not run through tailwind-merge, so avoid emitting\n // conflicting utilities (mb-0 vs mb-3, rounded-b-none vs rounded-lg): pick the\n // right one per state instead.\n return get(expanded)\n ? `${shared} rounded-t-lg mb-0`\n : `${shared} rounded-lg mb-3 last:mb-0`;\n});\n</script>\n\n<template>\n <tr\n :class=\"[selected ? classes.trSelected : classes.tr, rowClass, isMobile ? mobileCardClass : '']\"\n :aria-selected=\"selectedData ? selected : undefined\"\n data-id=\"row\"\n >\n <!-- Mobile card header: checkbox on the left, pinned action columns on the right -->\n <td\n v-if=\"showMobileHeader\"\n class=\"flex items-center justify-between gap-2 px-4 py-2 border-b border-black/[0.12] dark:border-white/[0.12]\"\n data-id=\"mobile-card-header\"\n >\n <RuiCheckbox\n v-if=\"selectedData\"\n :data-id=\"`table-toggle-check-${index}`\"\n :model-value=\"selected\"\n :disabled=\"disabled\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n class=\"select-none\"\n hide-details\n @update:model-value=\"onSelect($event, rowId, true)\"\n @click=\"onCheckboxClick($event, rowId, index)\"\n />\n <span v-else />\n\n <div\n v-if=\"mobileHeaderColumns.length > 0\"\n class=\"flex items-center gap-1 min-w-0\"\n >\n <template\n v-for=\"(column, headerIndex) in mobileHeaderColumns\"\n :key=\"`header-${headerIndex}`\"\n >\n <RuiExpandButton\n v-if=\"column.key === 'expand'\"\n :expanded=\"isExpanded(rowId)\"\n @click=\"onToggleExpand(row)\"\n />\n <slot\n v-else-if=\"itemSlotKeys.has(column.key.toString())\"\n :name=\"`item.${column.key.toString()}`\"\n :column=\"column\"\n :row=\"row\"\n :index=\"index\"\n />\n <template v-else>\n {{ cellValue(row, column.key) }}\n </template>\n </template>\n </div>\n </td>\n\n <!-- Desktop checkbox cell -->\n <td\n v-else-if=\"selectedData && !isMobile\"\n :class=\"classes.checkbox\"\n colspan=\"1\"\n rowspan=\"1\"\n >\n <RuiCheckbox\n :data-id=\"`table-toggle-check-${index}`\"\n :model-value=\"selected\"\n :disabled=\"disabled\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n class=\"select-none\"\n hide-details\n @update:model-value=\"onSelect($event, rowId, true)\"\n @click=\"onCheckboxClick($event, rowId, index)\"\n />\n </td>\n\n <RuiDataTableCell\n v-for=\"(column, subIndex) in bodyColumns\"\n :key=\"subIndex\"\n :column=\"column\"\n :row=\"row\"\n :index=\"index\"\n :row-id=\"rowId\"\n >\n <template\n v-if=\"itemSlotKeys.has(column.key.toString())\"\n #default=\"slotData\"\n >\n <slot\n :name=\"`item.${column.key.toString()}`\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiDataTableCell>\n </tr>\n\n <RuiDataTableExpandedRow\n v-if=\"expanded\"\n :row=\"row\"\n :index=\"index\"\n >\n <template\n v-if=\"slots['expanded-item']\"\n #expanded-item=\"slotData\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"expanded-item\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiDataTableExpandedRow>\n</template>\n"],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import type { TableColumn } from '../../../components/tables/RuiTableHead.vue';
2
+ declare const __VLS_export: <T extends object>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
3
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<{
4
+ row: T;
5
+ index: number;
6
+ }> & (typeof globalThis extends {
7
+ __VLS_PROPS_FALLBACK: infer P;
8
+ } ? P : {});
9
+ expose: (exposed: {}) => void;
10
+ attrs: any;
11
+ slots: Partial<Record<`item.${string}`, (props: {
12
+ column: TableColumn<T>;
13
+ row: T;
14
+ index: number;
15
+ }) => any> & {
16
+ 'expanded-item'?: (props: {
17
+ row: T;
18
+ index: number;
19
+ }) => any;
20
+ }>;
21
+ emit: {};
22
+ }>) => import("vue").VNode & {
23
+ __ctx?: Awaited<typeof __VLS_setup>;
24
+ };
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
27
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
28
+ [K in keyof T]: T[K];
29
+ } : {
30
+ [K in keyof T as K]: T[K];
31
+ }) & {};
@@ -0,0 +1,142 @@
1
+ import RuiCheckbox_default from "../../forms/checkbox/RuiCheckbox.js";
2
+ import { useDataTableColumns, useDataTableExpansion, useDataTableRowIdentity, useDataTableSelection, useDataTableStyling } from "./context.js";
3
+ import RuiExpandButton_default from "../RuiExpandButton.js";
4
+ import RuiDataTableCell_default from "./RuiDataTableCell.js";
5
+ import RuiDataTableExpandedRow_default from "./RuiDataTableExpandedRow.js";
6
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, guardReactiveProps, mergeProps, normalizeClass, normalizeProps, openBlock, renderList, renderSlot, toDisplayString, unref, useSlots, withCtx } from "vue";
7
+ import { get } from "@vueuse/shared";
8
+ //#region src/components/tables/data-table/RuiDataTableRow.vue?vue&type=script&setup=true&lang.ts
9
+ var _hoisted_1 = ["aria-selected"];
10
+ var _hoisted_2 = {
11
+ key: 0,
12
+ class: "flex items-center justify-between gap-2 px-4 py-2 border-b border-black/[0.12] dark:border-white/[0.12]",
13
+ "data-id": "mobile-card-header"
14
+ };
15
+ var _hoisted_3 = { key: 1 };
16
+ var _hoisted_4 = {
17
+ key: 2,
18
+ class: "flex items-center gap-1 min-w-0"
19
+ };
20
+ var RuiDataTableRow_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
21
+ __name: "RuiDataTableRow",
22
+ props: {
23
+ row: {},
24
+ index: {}
25
+ },
26
+ setup(__props) {
27
+ const slots = useSlots();
28
+ const { classes, dense, isMobile } = useDataTableStyling();
29
+ const { cellValue, columns, itemSlotKeys } = useDataTableColumns();
30
+ const { isDisabledRow, isSelected, onCheckboxClick, onSelect, selectedData } = useDataTableSelection();
31
+ const { expandable, isExpanded, onToggleExpand } = useDataTableExpansion();
32
+ const { getRowId, itemClass } = useDataTableRowIdentity();
33
+ const rowId = computed(() => getRowId(__props.row));
34
+ const selected = computed(() => isSelected(get(rowId)));
35
+ const disabled = computed(() => isDisabledRow(get(rowId)));
36
+ const expanded = computed(() => get(expandable) && !!slots["expanded-item"] && isExpanded(get(rowId)));
37
+ const rowClass = computed(() => typeof itemClass === "string" ? itemClass : itemClass(__props.row));
38
+ function isMobileHeaderColumn(column) {
39
+ return !!column.mobileHeader || column.key === "expand";
40
+ }
41
+ function mobileHeaderColumnHasContent(column) {
42
+ if (column.key === "expand") return true;
43
+ if (itemSlotKeys.has(column.key.toString())) return true;
44
+ const value = cellValue(__props.row, column.key);
45
+ return value !== void 0 && value !== null && value !== "";
46
+ }
47
+ const mobileHeaderColumns = computed(() => get(isMobile) ? get(columns).filter((column) => isMobileHeaderColumn(column) && mobileHeaderColumnHasContent(column)) : []);
48
+ const bodyColumns = computed(() => get(isMobile) ? get(columns).filter((column) => !isMobileHeaderColumn(column)) : get(columns));
49
+ const showMobileHeader = computed(() => get(isMobile) && (!!get(selectedData) || get(mobileHeaderColumns).length > 0));
50
+ const mobileCardClass = computed(() => {
51
+ const shared = "relative flex flex-col border !border-y border-black/[0.12] dark:border-white/[0.12] overflow-hidden";
52
+ return get(expanded) ? `${shared} rounded-t-lg mb-0` : `${shared} rounded-lg mb-3 last:mb-0`;
53
+ });
54
+ return (_ctx, _cache) => {
55
+ return openBlock(), createElementBlock(Fragment, null, [createElementVNode("tr", {
56
+ class: normalizeClass([
57
+ unref(selected) ? unref(classes).trSelected : unref(classes).tr,
58
+ unref(rowClass),
59
+ unref(isMobile) ? unref(mobileCardClass) : ""
60
+ ]),
61
+ "aria-selected": unref(selectedData) ? unref(selected) : void 0,
62
+ "data-id": "row"
63
+ }, [unref(showMobileHeader) ? (openBlock(), createElementBlock("td", _hoisted_2, [unref(selectedData) ? (openBlock(), createBlock(RuiCheckbox_default, {
64
+ key: 0,
65
+ "data-id": `table-toggle-check-${__props.index}`,
66
+ "model-value": unref(selected),
67
+ disabled: unref(disabled),
68
+ size: unref(dense) ? "sm" : void 0,
69
+ color: "primary",
70
+ class: "select-none",
71
+ "hide-details": "",
72
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => unref(onSelect)($event, unref(rowId), true)),
73
+ onClick: _cache[1] || (_cache[1] = ($event) => unref(onCheckboxClick)($event, unref(rowId), __props.index))
74
+ }, null, 8, [
75
+ "data-id",
76
+ "model-value",
77
+ "disabled",
78
+ "size"
79
+ ])) : (openBlock(), createElementBlock("span", _hoisted_3)), unref(mobileHeaderColumns).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_4, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(mobileHeaderColumns), (column, headerIndex) => {
80
+ return openBlock(), createElementBlock(Fragment, { key: `header-${headerIndex}` }, [column.key === "expand" ? (openBlock(), createBlock(RuiExpandButton_default, {
81
+ key: 0,
82
+ expanded: unref(isExpanded)(unref(rowId)),
83
+ onClick: _cache[2] || (_cache[2] = ($event) => unref(onToggleExpand)(__props.row))
84
+ }, null, 8, ["expanded"])) : unref(itemSlotKeys).has(column.key.toString()) ? renderSlot(_ctx.$slots, `item.${column.key.toString()}`, {
85
+ key: 1,
86
+ column,
87
+ row: __props.row,
88
+ index: __props.index
89
+ }) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [createTextVNode(toDisplayString(unref(cellValue)(__props.row, column.key)), 1)], 64))], 64);
90
+ }), 128))])) : createCommentVNode("", true)])) : unref(selectedData) && !unref(isMobile) ? (openBlock(), createElementBlock("td", {
91
+ key: 1,
92
+ class: normalizeClass(unref(classes).checkbox),
93
+ colspan: "1",
94
+ rowspan: "1"
95
+ }, [createVNode(RuiCheckbox_default, {
96
+ "data-id": `table-toggle-check-${__props.index}`,
97
+ "model-value": unref(selected),
98
+ disabled: unref(disabled),
99
+ size: unref(dense) ? "sm" : void 0,
100
+ color: "primary",
101
+ class: "select-none",
102
+ "hide-details": "",
103
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => unref(onSelect)($event, unref(rowId), true)),
104
+ onClick: _cache[4] || (_cache[4] = ($event) => unref(onCheckboxClick)($event, unref(rowId), __props.index))
105
+ }, null, 8, [
106
+ "data-id",
107
+ "model-value",
108
+ "disabled",
109
+ "size"
110
+ ])], 2)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(bodyColumns), (column, subIndex) => {
111
+ return openBlock(), createBlock(RuiDataTableCell_default, {
112
+ key: subIndex,
113
+ column,
114
+ row: __props.row,
115
+ index: __props.index,
116
+ "row-id": unref(rowId)
117
+ }, createSlots({ _: 2 }, [unref(itemSlotKeys).has(column.key.toString()) ? {
118
+ name: "default",
119
+ fn: withCtx((slotData) => [renderSlot(_ctx.$slots, `item.${column.key.toString()}`, mergeProps({ ref_for: true }, slotData))]),
120
+ key: "0"
121
+ } : void 0]), 1032, [
122
+ "column",
123
+ "row",
124
+ "index",
125
+ "row-id"
126
+ ]);
127
+ }), 128))], 10, _hoisted_1), unref(expanded) ? (openBlock(), createBlock(RuiDataTableExpandedRow_default, {
128
+ key: 0,
129
+ row: __props.row,
130
+ index: __props.index
131
+ }, createSlots({ _: 2 }, [slots["expanded-item"] ? {
132
+ name: "expanded-item",
133
+ fn: withCtx((slotData) => [renderSlot(_ctx.$slots, "expanded-item", normalizeProps(guardReactiveProps(slotData)))]),
134
+ key: "0"
135
+ } : void 0]), 1032, ["row", "index"])) : createCommentVNode("", true)], 64);
136
+ };
137
+ }
138
+ });
139
+ //#endregion
140
+ export { RuiDataTableRow_vue_vue_type_script_setup_true_lang_default as default };
141
+
142
+ //# sourceMappingURL=RuiDataTableRow.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiDataTableRow.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableRow.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { TableColumn } from '@/components/tables/RuiTableHead.vue';\nimport RuiCheckbox from '@/components/forms/checkbox/RuiCheckbox.vue';\nimport { useDataTableColumns, useDataTableExpansion, useDataTableRowIdentity, useDataTableSelection, useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiDataTableCell from '@/components/tables/data-table/RuiDataTableCell.vue';\nimport RuiDataTableExpandedRow from '@/components/tables/data-table/RuiDataTableExpandedRow.vue';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\n\nconst {\n row,\n index,\n} = defineProps<{\n row: T;\n index: number;\n}>();\n\nconst slots = defineSlots<Partial<\n Record<`item.${string}`, (props: { column: TableColumn<T>; row: T; index: number }) => any> & {\n 'expanded-item'?: (props: { row: T; index: number }) => any;\n }\n>>();\n\nconst { classes, dense, isMobile } = useDataTableStyling();\nconst { cellValue, columns, itemSlotKeys } = useDataTableColumns<T>();\nconst { isDisabledRow, isSelected, onCheckboxClick, onSelect, selectedData } = useDataTableSelection<T>();\nconst { expandable, isExpanded, onToggleExpand } = useDataTableExpansion<T>();\nconst { getRowId, itemClass } = useDataTableRowIdentity<T>();\n\nconst rowId = computed<T[keyof T]>(() => getRowId(row));\nconst selected = computed<boolean>(() => isSelected(get(rowId)));\nconst disabled = computed<boolean>(() => isDisabledRow(get(rowId)));\nconst expanded = computed<boolean>(() => get(expandable) && !!slots['expanded-item'] && isExpanded(get(rowId)));\nconst rowClass = computed<string>(() => typeof itemClass === 'string' ? itemClass : itemClass(row));\n\n// A column is pinned to the mobile card header when it is flagged `mobileHeader`\n// (typically an action column) or when it is the auto-generated expand column.\nfunction isMobileHeaderColumn(column: TableColumn<T>): boolean {\n return !!column.mobileHeader || column.key === 'expand';\n}\n\n// A pinned column only earns a spot in the header if it actually renders\n// something: the expand toggle, a provided item slot, or a non-empty cell value.\n// Without this, a pinned column with no content (e.g. an action column whose\n// `#item.action` slot is not provided in a nested table) would leave an empty\n// header bar with just its divider line.\nfunction mobileHeaderColumnHasContent(column: TableColumn<T>): boolean {\n if (column.key === 'expand')\n return true;\n if (itemSlotKeys.has(column.key.toString()))\n return true;\n const value = cellValue(row, column.key);\n return value !== undefined && value !== null && value !== '';\n}\n\n// In the stacked mobile layout, header columns render in the card header row\n// instead of as a label/value pair. Everything else stacks below in the body.\nconst mobileHeaderColumns = computed<TableColumn<T>[]>(() =>\n get(isMobile) ? get(columns).filter(column => isMobileHeaderColumn(column) && mobileHeaderColumnHasContent(column)) : [],\n);\nconst bodyColumns = computed<TableColumn<T>[]>(() =>\n get(isMobile) ? get(columns).filter(column => !isMobileHeaderColumn(column)) : get(columns),\n);\nconst showMobileHeader = computed<boolean>(() =>\n get(isMobile) && (!!get(selectedData) || get(mobileHeaderColumns).length > 0),\n);\n\n// `!border-y` defeats the `divide-y-0` on the mobile tbody, which otherwise\n// zeroes the top/bottom border on every card except the first one. When the\n// card is expanded, its bottom edge flattens so the expanded panel attaches\n// flush beneath it.\nconst mobileCardClass = computed<string>(() => {\n const shared = 'relative flex flex-col border !border-y border-black/[0.12] dark:border-white/[0.12] overflow-hidden';\n // These bindings are not run through tailwind-merge, so avoid emitting\n // conflicting utilities (mb-0 vs mb-3, rounded-b-none vs rounded-lg): pick the\n // right one per state instead.\n return get(expanded)\n ? `${shared} rounded-t-lg mb-0`\n : `${shared} rounded-lg mb-3 last:mb-0`;\n});\n</script>\n\n<template>\n <tr\n :class=\"[selected ? classes.trSelected : classes.tr, rowClass, isMobile ? mobileCardClass : '']\"\n :aria-selected=\"selectedData ? selected : undefined\"\n data-id=\"row\"\n >\n <!-- Mobile card header: checkbox on the left, pinned action columns on the right -->\n <td\n v-if=\"showMobileHeader\"\n class=\"flex items-center justify-between gap-2 px-4 py-2 border-b border-black/[0.12] dark:border-white/[0.12]\"\n data-id=\"mobile-card-header\"\n >\n <RuiCheckbox\n v-if=\"selectedData\"\n :data-id=\"`table-toggle-check-${index}`\"\n :model-value=\"selected\"\n :disabled=\"disabled\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n class=\"select-none\"\n hide-details\n @update:model-value=\"onSelect($event, rowId, true)\"\n @click=\"onCheckboxClick($event, rowId, index)\"\n />\n <span v-else />\n\n <div\n v-if=\"mobileHeaderColumns.length > 0\"\n class=\"flex items-center gap-1 min-w-0\"\n >\n <template\n v-for=\"(column, headerIndex) in mobileHeaderColumns\"\n :key=\"`header-${headerIndex}`\"\n >\n <RuiExpandButton\n v-if=\"column.key === 'expand'\"\n :expanded=\"isExpanded(rowId)\"\n @click=\"onToggleExpand(row)\"\n />\n <slot\n v-else-if=\"itemSlotKeys.has(column.key.toString())\"\n :name=\"`item.${column.key.toString()}`\"\n :column=\"column\"\n :row=\"row\"\n :index=\"index\"\n />\n <template v-else>\n {{ cellValue(row, column.key) }}\n </template>\n </template>\n </div>\n </td>\n\n <!-- Desktop checkbox cell -->\n <td\n v-else-if=\"selectedData && !isMobile\"\n :class=\"classes.checkbox\"\n colspan=\"1\"\n rowspan=\"1\"\n >\n <RuiCheckbox\n :data-id=\"`table-toggle-check-${index}`\"\n :model-value=\"selected\"\n :disabled=\"disabled\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n class=\"select-none\"\n hide-details\n @update:model-value=\"onSelect($event, rowId, true)\"\n @click=\"onCheckboxClick($event, rowId, index)\"\n />\n </td>\n\n <RuiDataTableCell\n v-for=\"(column, subIndex) in bodyColumns\"\n :key=\"subIndex\"\n :column=\"column\"\n :row=\"row\"\n :index=\"index\"\n :row-id=\"rowId\"\n >\n <template\n v-if=\"itemSlotKeys.has(column.key.toString())\"\n #default=\"slotData\"\n >\n <slot\n :name=\"`item.${column.key.toString()}`\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiDataTableCell>\n </tr>\n\n <RuiDataTableExpandedRow\n v-if=\"expanded\"\n :row=\"row\"\n :index=\"index\"\n >\n <template\n v-if=\"slots['expanded-item']\"\n #expanded-item=\"slotData\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"expanded-item\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiDataTableExpandedRow>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;EAgBA,MAAM,QAAQ,SAAA;EAMd,MAAM,EAAE,SAAS,OAAO,aAAa,oBAAoB;EACzD,MAAM,EAAE,WAAW,SAAS,iBAAiB,oBAAuB;EACpE,MAAM,EAAE,eAAe,YAAY,iBAAiB,UAAU,iBAAiB,sBAAyB;EACxG,MAAM,EAAE,YAAY,YAAY,mBAAmB,sBAAyB;EAC5E,MAAM,EAAE,UAAU,cAAc,wBAA2B;EAE3D,MAAM,QAAQ,eAA2B,SAAS,QAAA,GAAG,CAAC;EACtD,MAAM,WAAW,eAAwB,WAAW,IAAI,KAAK,CAAC,CAAC;EAC/D,MAAM,WAAW,eAAwB,cAAc,IAAI,KAAK,CAAC,CAAC;EAClE,MAAM,WAAW,eAAwB,IAAI,UAAU,KAAK,CAAC,CAAC,MAAM,oBAAoB,WAAW,IAAI,KAAK,CAAC,CAAC;EAC9G,MAAM,WAAW,eAAuB,OAAO,cAAc,WAAW,YAAY,UAAU,QAAA,GAAG,CAAC;EAIlG,SAAS,qBAAqB,QAAiC;GAC7D,OAAO,CAAC,CAAC,OAAO,gBAAgB,OAAO,QAAQ;EACjD;EAOA,SAAS,6BAA6B,QAAiC;GACrE,IAAI,OAAO,QAAQ,UACjB,OAAO;GACT,IAAI,aAAa,IAAI,OAAO,IAAI,SAAS,CAAC,GACxC,OAAO;GACT,MAAM,QAAQ,UAAU,QAAA,KAAK,OAAO,GAAG;GACvC,OAAO,UAAU,KAAA,KAAa,UAAU,QAAQ,UAAU;EAC5D;EAIA,MAAM,sBAAsB,eAC1B,IAAI,QAAQ,IAAI,IAAI,OAAO,CAAC,CAAC,QAAO,WAAU,qBAAqB,MAAM,KAAK,6BAA6B,MAAM,CAAC,IAAI,CAAC,CACzH;EACA,MAAM,cAAc,eAClB,IAAI,QAAQ,IAAI,IAAI,OAAO,CAAC,CAAC,QAAO,WAAU,CAAC,qBAAqB,MAAM,CAAC,IAAI,IAAI,OAAO,CAC5F;EACA,MAAM,mBAAmB,eACvB,IAAI,QAAQ,MAAM,CAAC,CAAC,IAAI,YAAY,KAAK,IAAI,mBAAmB,CAAC,CAAC,SAAS,EAC7E;EAMA,MAAM,kBAAkB,eAAuB;GAC7C,MAAM,SAAS;GAIf,OAAO,IAAI,QAAQ,IACf,GAAG,OAAO,sBACV,GAAG,OAAO;EAChB,CAAC;;2DAIC,mBA0FK,MAAA;IAzFF,OAAK,eAAA;KAAG,MAAA,QAAA,IAAW,MAAA,OAAA,CAAO,CAAC,aAAa,MAAA,OAAA,CAAO,CAAC;KAAI,MAAA,QAAA;KAAU,MAAA,QAAA,IAAW,MAAA,eAAA,IAAe;IAAA,CAAA;IACxF,iBAAe,MAAA,YAAA,IAAe,MAAA,QAAA,IAAW,KAAA;IAC1C,WAAQ;OAIA,MAAA,gBAAA,KAAA,UAAA,GADR,mBA4CK,MA5CL,YA4CK,CAtCK,MAAA,YAAA,KAAA,UAAA,GADR,YAWE,qBAAA;;IATC,WAAO,sBAAwB,QAAA;IAC/B,eAAa,MAAA,QAAA;IACb,UAAU,MAAA,QAAA;IACV,MAAM,MAAA,KAAA,IAAK,OAAU,KAAA;IACtB,OAAM;IACN,OAAM;IACN,gBAAA;IACC,uBAAkB,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,QAAA,CAAQ,CAAC,QAAQ,MAAA,KAAA,GAAK,IAAA;IAC1C,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,eAAA,CAAe,CAAC,QAAQ,MAAA,KAAA,GAAO,QAAA,KAAK;;;;;;uBAE9C,mBAAe,QAAA,UAAA,IAGP,MAAA,mBAAA,CAAmB,CAAC,SAAM,KAAA,UAAA,GADlC,mBAwBM,OAxBN,YAwBM,EAAA,UAAA,IAAA,GApBJ,mBAmBW,UAAA,MAAA,WAlBuB,MAAA,mBAAA,IAAxB,QAAQ,gBAAW;sEACX,cAAA,GAAA,CAGR,OAAO,QAAG,YAAA,UAAA,GADlB,YAIE,yBAAA;;KAFC,UAAU,MAAA,UAAA,CAAU,CAAC,MAAA,KAAA,CAAK;KAC1B,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,cAAA,CAAc,CAAC,QAAA,GAAG;iCAGf,MAAA,YAAA,CAAY,CAAC,IAAI,OAAO,IAAI,SAAQ,CAAA,IADjD,WAME,KAAA,QAAA,QAJe,OAAO,IAAI,SAAQ,KAAA;;KACzB;KACR,KAAK,QAAA;KACL,OAAO,QAAA;uBAEV,mBAEW,UAAA,EAAA,KAAA,EAAA,GAAA,CAAA,gBAAA,gBADN,MAAA,SAAA,CAAS,CAAC,QAAA,KAAK,OAAO,GAAG,CAAA,GAAA,CAAA,CAAA,GAAA,EAAA,EAAA,GAAA,EAAA;oDAQvB,MAAA,YAAA,KAAY,CAAK,MAAA,QAAA,KAAA,UAAA,GAD9B,mBAiBK,MAAA;;IAfF,OAAK,eAAE,MAAA,OAAA,CAAO,CAAC,QAAQ;IACxB,SAAQ;IACR,SAAQ;OAER,YAUE,qBAAA;IATC,WAAO,sBAAwB,QAAA;IAC/B,eAAa,MAAA,QAAA;IACb,UAAU,MAAA,QAAA;IACV,MAAM,MAAA,KAAA,IAAK,OAAU,KAAA;IACtB,OAAM;IACN,OAAM;IACN,gBAAA;IACC,uBAAkB,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,QAAA,CAAQ,CAAC,QAAQ,MAAA,KAAA,GAAK,IAAA;IAC1C,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,eAAA,CAAe,CAAC,QAAQ,MAAA,KAAA,GAAO,QAAA,KAAK;;;;;;8DAIhD,mBAiBmB,UAAA,MAAA,WAhBY,MAAA,WAAA,IAArB,QAAQ,aAAQ;wBAD1B,YAiBmB,0BAAA;KAfhB,KAAK;KACG;KACR,KAAK,QAAA;KACL,OAAO,QAAA;KACP,UAAQ,MAAA,KAAA;8BAGD,MAAA,YAAA,CAAY,CAAC,IAAI,OAAO,IAAI,SAAQ,CAAA,IAAA;WACzC;kBAAS,aAAQ,CAElB,WAGE,KAAA,QAAA,QAFe,OAAO,IAAI,SAAQ,KADpC,WAGE,EAAA,SAAA,KAAA,GADQ,QAAQ,CAAA,CAAA,CAAA;;;;;;;;gCAOhB,MAAA,QAAA,KAAA,UAAA,GADR,YAe0B,iCAAA;;IAbvB,KAAK,QAAA;IACL,OAAO,QAAA;6BAGA,MAAK,mBAAA;UACV;iBAAe,aAAQ,CAGxB,WAGE,KAAA,QAAA,iBAAA,eAAA,mBADQ,QAAQ,CAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1,73 @@
1
+ import type { ComputedRef, Ref } from 'vue';
2
+ import type { TableColumn } from '../../../components/tables/RuiTableHead.vue';
3
+ import type { GroupExpandButtonPosition } from '../../../components/tables/table-props.js';
4
+ import type { GroupHeader } from '../../../composables/tables/data-table/types.js';
5
+ export interface DataTableClasses {
6
+ td: string;
7
+ tr: string;
8
+ trSelected: string;
9
+ trExpandable: string;
10
+ trGroup: string;
11
+ trEmpty: string;
12
+ checkbox: string;
13
+ tbody: string;
14
+ tbodyLoader: string;
15
+ tbodyLoaderContent: string;
16
+ }
17
+ export interface DataTableStylingContext {
18
+ classes: ComputedRef<DataTableClasses>;
19
+ colspan: ComputedRef<number>;
20
+ dense: boolean;
21
+ /** whether the table is currently rendered in its stacked mobile layout */
22
+ isMobile: ComputedRef<boolean>;
23
+ }
24
+ export interface DataTableColumnsContext<T extends object = any> {
25
+ columns: ComputedRef<TableColumn<T>[]>;
26
+ cellValue: (row: T, key: TableColumn<T>['key']) => T[keyof T];
27
+ itemSlotKeys: Set<string>;
28
+ /** the column definition attribute used as the visible label (e.g. `label`) */
29
+ columnAttr: keyof TableColumn<T>;
30
+ }
31
+ export interface DataTableSelectionContext<T extends object = any, IdType extends keyof T = keyof T> {
32
+ selectedData: Ref<T[IdType][] | undefined>;
33
+ isSelected: (id: T[IdType]) => boolean;
34
+ isDisabledRow: (id: T[IdType]) => boolean;
35
+ onSelect: (selected: boolean, id: T[IdType], userAction: boolean) => void;
36
+ onCheckboxClick: (event: MouseEvent, id: T[IdType], index: number) => void;
37
+ }
38
+ export interface DataTableExpansionContext<T extends object = any, IdType extends keyof T = keyof T> {
39
+ expandable: ComputedRef<boolean>;
40
+ isExpanded: (id: T[IdType]) => boolean;
41
+ onToggleExpand: (row: T) => void;
42
+ }
43
+ export interface DataTableGroupingContext<T extends object = any> {
44
+ groupExpandButtonPosition: GroupExpandButtonPosition;
45
+ groupKey: ComputedRef<string | undefined>;
46
+ isExpandedGroup: (group: Partial<T>) => boolean;
47
+ onToggleExpandGroup: (group: Partial<T>, identifier: string) => void;
48
+ onUngroup: () => void;
49
+ onCopyGroup: (header: GroupHeader<T>) => void;
50
+ }
51
+ export interface DataTableRowIdentityContext<T extends object = any, IdType extends keyof T = keyof T> {
52
+ getRowId: (row: T) => T[IdType];
53
+ itemClass: ((item: T) => string) | string;
54
+ }
55
+ export type DataTableContext<T extends object = any, IdType extends keyof T = keyof T> = DataTableStylingContext & DataTableColumnsContext<T> & DataTableSelectionContext<T, IdType> & DataTableExpansionContext<T, IdType> & DataTableGroupingContext<T> & DataTableRowIdentityContext<T, IdType>;
56
+ export declare function provideDataTableStyling(context: DataTableStylingContext): void;
57
+ export declare function useDataTableStyling(): DataTableStylingContext;
58
+ export declare function provideDataTableColumns<T extends object>(context: DataTableColumnsContext<T>): void;
59
+ export declare function useDataTableColumns<T extends object = any>(): DataTableColumnsContext<T>;
60
+ export declare function provideDataTableSelection<T extends object, IdType extends keyof T>(context: DataTableSelectionContext<T, IdType>): void;
61
+ export declare function useDataTableSelection<T extends object = any, IdType extends keyof T = keyof T>(): DataTableSelectionContext<T, IdType>;
62
+ export declare function provideDataTableExpansion<T extends object, IdType extends keyof T>(context: DataTableExpansionContext<T, IdType>): void;
63
+ export declare function useDataTableExpansion<T extends object = any, IdType extends keyof T = keyof T>(): DataTableExpansionContext<T, IdType>;
64
+ export declare function provideDataTableGrouping<T extends object>(context: DataTableGroupingContext<T>): void;
65
+ export declare function useDataTableGrouping<T extends object = any>(): DataTableGroupingContext<T>;
66
+ export declare function provideDataTableRowIdentity<T extends object, IdType extends keyof T>(context: DataTableRowIdentityContext<T, IdType>): void;
67
+ export declare function useDataTableRowIdentity<T extends object = any, IdType extends keyof T = keyof T>(): DataTableRowIdentityContext<T, IdType>;
68
+ /** Marks descendant data tables as nested (e.g. rendered inside an expanded row). */
69
+ export declare function provideDataTableNested(): void;
70
+ /** True when this data table is rendered inside another data table. */
71
+ export declare function useDataTableNested(): boolean;
72
+ export declare function provideDataTableContext<T extends object, IdType extends keyof T>(context: DataTableContext<T, IdType>): void;
73
+ export declare function useDataTableContext<T extends object, IdType extends keyof T = keyof T>(): DataTableContext<T, IdType>;
@@ -0,0 +1,100 @@
1
+ import { inject, provide } from "vue";
2
+ //#region src/components/tables/data-table/context.ts
3
+ var DATA_TABLE_STYLING = Symbol("data-table-styling");
4
+ var DATA_TABLE_COLUMNS = Symbol("data-table-columns");
5
+ var DATA_TABLE_SELECTION = Symbol("data-table-selection");
6
+ var DATA_TABLE_EXPANSION = Symbol("data-table-expansion");
7
+ var DATA_TABLE_GROUPING = Symbol("data-table-grouping");
8
+ var DATA_TABLE_ROW_IDENTITY = Symbol("data-table-row-identity");
9
+ var DATA_TABLE_NESTED = Symbol("data-table-nested");
10
+ function injectOrThrow(key, name) {
11
+ const context = inject(key);
12
+ if (context === void 0) throw new Error(`${name} must be used within a RuiDataTable`);
13
+ return context;
14
+ }
15
+ function provideDataTableStyling(context) {
16
+ provide(DATA_TABLE_STYLING, context);
17
+ }
18
+ function useDataTableStyling() {
19
+ return injectOrThrow(DATA_TABLE_STYLING, "useDataTableStyling");
20
+ }
21
+ function provideDataTableColumns(context) {
22
+ provide(DATA_TABLE_COLUMNS, context);
23
+ }
24
+ function useDataTableColumns() {
25
+ return injectOrThrow(DATA_TABLE_COLUMNS, "useDataTableColumns");
26
+ }
27
+ function provideDataTableSelection(context) {
28
+ provide(DATA_TABLE_SELECTION, context);
29
+ }
30
+ function useDataTableSelection() {
31
+ return injectOrThrow(DATA_TABLE_SELECTION, "useDataTableSelection");
32
+ }
33
+ function provideDataTableExpansion(context) {
34
+ provide(DATA_TABLE_EXPANSION, context);
35
+ }
36
+ function useDataTableExpansion() {
37
+ return injectOrThrow(DATA_TABLE_EXPANSION, "useDataTableExpansion");
38
+ }
39
+ function provideDataTableGrouping(context) {
40
+ provide(DATA_TABLE_GROUPING, context);
41
+ }
42
+ function useDataTableGrouping() {
43
+ return injectOrThrow(DATA_TABLE_GROUPING, "useDataTableGrouping");
44
+ }
45
+ function provideDataTableRowIdentity(context) {
46
+ provide(DATA_TABLE_ROW_IDENTITY, context);
47
+ }
48
+ function useDataTableRowIdentity() {
49
+ return injectOrThrow(DATA_TABLE_ROW_IDENTITY, "useDataTableRowIdentity");
50
+ }
51
+ /** Marks descendant data tables as nested (e.g. rendered inside an expanded row). */
52
+ function provideDataTableNested() {
53
+ provide(DATA_TABLE_NESTED, true);
54
+ }
55
+ /** True when this data table is rendered inside another data table. */
56
+ function useDataTableNested() {
57
+ return inject(DATA_TABLE_NESTED, false);
58
+ }
59
+ function provideDataTableContext(context) {
60
+ provideDataTableStyling({
61
+ classes: context.classes,
62
+ colspan: context.colspan,
63
+ dense: context.dense,
64
+ isMobile: context.isMobile
65
+ });
66
+ provideDataTableColumns({
67
+ columns: context.columns,
68
+ cellValue: context.cellValue,
69
+ itemSlotKeys: context.itemSlotKeys,
70
+ columnAttr: context.columnAttr
71
+ });
72
+ provideDataTableSelection({
73
+ selectedData: context.selectedData,
74
+ isSelected: context.isSelected,
75
+ isDisabledRow: context.isDisabledRow,
76
+ onSelect: context.onSelect,
77
+ onCheckboxClick: context.onCheckboxClick
78
+ });
79
+ provideDataTableExpansion({
80
+ expandable: context.expandable,
81
+ isExpanded: context.isExpanded,
82
+ onToggleExpand: context.onToggleExpand
83
+ });
84
+ provideDataTableGrouping({
85
+ groupExpandButtonPosition: context.groupExpandButtonPosition,
86
+ groupKey: context.groupKey,
87
+ isExpandedGroup: context.isExpandedGroup,
88
+ onToggleExpandGroup: context.onToggleExpandGroup,
89
+ onUngroup: context.onUngroup,
90
+ onCopyGroup: context.onCopyGroup
91
+ });
92
+ provideDataTableRowIdentity({
93
+ getRowId: context.getRowId,
94
+ itemClass: context.itemClass
95
+ });
96
+ }
97
+ //#endregion
98
+ export { provideDataTableColumns, provideDataTableContext, provideDataTableExpansion, provideDataTableGrouping, provideDataTableNested, provideDataTableRowIdentity, provideDataTableSelection, provideDataTableStyling, useDataTableColumns, useDataTableExpansion, useDataTableGrouping, useDataTableNested, useDataTableRowIdentity, useDataTableSelection, useDataTableStyling };
99
+
100
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../../src/components/tables/data-table/context.ts"],"sourcesContent":["import type { ComputedRef, Ref } from 'vue';\nimport type { TableColumn } from '@/components/tables/RuiTableHead.vue';\nimport type { GroupExpandButtonPosition } from '@/components/tables/table-props';\nimport type { GroupHeader } from '@/composables/tables/data-table/types';\n\nexport interface DataTableClasses {\n td: string;\n tr: string;\n trSelected: string;\n trExpandable: string;\n trGroup: string;\n trEmpty: string;\n checkbox: string;\n tbody: string;\n tbodyLoader: string;\n tbodyLoaderContent: string;\n}\n\n// --- Per-concern context interfaces ---\n\nexport interface DataTableStylingContext {\n classes: ComputedRef<DataTableClasses>;\n colspan: ComputedRef<number>;\n dense: boolean;\n /** whether the table is currently rendered in its stacked mobile layout */\n isMobile: ComputedRef<boolean>;\n}\n\nexport interface DataTableColumnsContext<T extends object = any> {\n columns: ComputedRef<TableColumn<T>[]>;\n cellValue: (row: T, key: TableColumn<T>['key']) => T[keyof T];\n itemSlotKeys: Set<string>;\n /** the column definition attribute used as the visible label (e.g. `label`) */\n columnAttr: keyof TableColumn<T>;\n}\n\nexport interface DataTableSelectionContext<T extends object = any, IdType extends keyof T = keyof T> {\n selectedData: Ref<T[IdType][] | undefined>;\n isSelected: (id: T[IdType]) => boolean;\n isDisabledRow: (id: T[IdType]) => boolean;\n onSelect: (selected: boolean, id: T[IdType], userAction: boolean) => void;\n onCheckboxClick: (event: MouseEvent, id: T[IdType], index: number) => void;\n}\n\nexport interface DataTableExpansionContext<T extends object = any, IdType extends keyof T = keyof T> {\n expandable: ComputedRef<boolean>;\n isExpanded: (id: T[IdType]) => boolean;\n onToggleExpand: (row: T) => void;\n}\n\nexport interface DataTableGroupingContext<T extends object = any> {\n groupExpandButtonPosition: GroupExpandButtonPosition;\n groupKey: ComputedRef<string | undefined>;\n isExpandedGroup: (group: Partial<T>) => boolean;\n onToggleExpandGroup: (group: Partial<T>, identifier: string) => void;\n onUngroup: () => void;\n onCopyGroup: (header: GroupHeader<T>) => void;\n}\n\nexport interface DataTableRowIdentityContext<T extends object = any, IdType extends keyof T = keyof T> {\n getRowId: (row: T) => T[IdType];\n itemClass: ((item: T) => string) | string;\n}\n\n// --- Backward-compatible merged type ---\n\nexport type DataTableContext<T extends object = any, IdType extends keyof T = keyof T> =\n DataTableStylingContext &\n DataTableColumnsContext<T> &\n DataTableSelectionContext<T, IdType> &\n DataTableExpansionContext<T, IdType> &\n DataTableGroupingContext<T> &\n DataTableRowIdentityContext<T, IdType>;\n\n// --- Per-concern symbols ---\n\nconst DATA_TABLE_STYLING = Symbol('data-table-styling');\nconst DATA_TABLE_COLUMNS = Symbol('data-table-columns');\nconst DATA_TABLE_SELECTION = Symbol('data-table-selection');\nconst DATA_TABLE_EXPANSION = Symbol('data-table-expansion');\nconst DATA_TABLE_GROUPING = Symbol('data-table-grouping');\nconst DATA_TABLE_ROW_IDENTITY = Symbol('data-table-row-identity');\nconst DATA_TABLE_NESTED = Symbol('data-table-nested');\n\n// --- Per-concern provide/use pairs ---\n\nfunction injectOrThrow<C>(key: symbol, name: string): C {\n const context = inject<C>(key);\n if (context === undefined)\n throw new Error(`${name} must be used within a RuiDataTable`);\n\n return context;\n}\n\nexport function provideDataTableStyling(context: DataTableStylingContext): void {\n provide(DATA_TABLE_STYLING, context);\n}\n\nexport function useDataTableStyling(): DataTableStylingContext {\n return injectOrThrow<DataTableStylingContext>(DATA_TABLE_STYLING, 'useDataTableStyling');\n}\n\nexport function provideDataTableColumns<T extends object>(context: DataTableColumnsContext<T>): void {\n provide(DATA_TABLE_COLUMNS, context);\n}\n\nexport function useDataTableColumns<T extends object = any>(): DataTableColumnsContext<T> {\n return injectOrThrow<DataTableColumnsContext<T>>(DATA_TABLE_COLUMNS, 'useDataTableColumns');\n}\n\nexport function provideDataTableSelection<T extends object, IdType extends keyof T>(context: DataTableSelectionContext<T, IdType>): void {\n provide(DATA_TABLE_SELECTION, context);\n}\n\nexport function useDataTableSelection<T extends object = any, IdType extends keyof T = keyof T>(): DataTableSelectionContext<T, IdType> {\n return injectOrThrow<DataTableSelectionContext<T, IdType>>(DATA_TABLE_SELECTION, 'useDataTableSelection');\n}\n\nexport function provideDataTableExpansion<T extends object, IdType extends keyof T>(context: DataTableExpansionContext<T, IdType>): void {\n provide(DATA_TABLE_EXPANSION, context);\n}\n\nexport function useDataTableExpansion<T extends object = any, IdType extends keyof T = keyof T>(): DataTableExpansionContext<T, IdType> {\n return injectOrThrow<DataTableExpansionContext<T, IdType>>(DATA_TABLE_EXPANSION, 'useDataTableExpansion');\n}\n\nexport function provideDataTableGrouping<T extends object>(context: DataTableGroupingContext<T>): void {\n provide(DATA_TABLE_GROUPING, context);\n}\n\nexport function useDataTableGrouping<T extends object = any>(): DataTableGroupingContext<T> {\n return injectOrThrow<DataTableGroupingContext<T>>(DATA_TABLE_GROUPING, 'useDataTableGrouping');\n}\n\nexport function provideDataTableRowIdentity<T extends object, IdType extends keyof T>(context: DataTableRowIdentityContext<T, IdType>): void {\n provide(DATA_TABLE_ROW_IDENTITY, context);\n}\n\nexport function useDataTableRowIdentity<T extends object = any, IdType extends keyof T = keyof T>(): DataTableRowIdentityContext<T, IdType> {\n return injectOrThrow<DataTableRowIdentityContext<T, IdType>>(DATA_TABLE_ROW_IDENTITY, 'useDataTableRowIdentity');\n}\n\n/** Marks descendant data tables as nested (e.g. rendered inside an expanded row). */\nexport function provideDataTableNested(): void {\n provide(DATA_TABLE_NESTED, true);\n}\n\n/** True when this data table is rendered inside another data table. */\nexport function useDataTableNested(): boolean {\n return inject<boolean>(DATA_TABLE_NESTED, false);\n}\n\n// --- Backward-compatible facade ---\n\nexport function provideDataTableContext<T extends object, IdType extends keyof T>(context: DataTableContext<T, IdType>): void {\n provideDataTableStyling({ classes: context.classes, colspan: context.colspan, dense: context.dense, isMobile: context.isMobile });\n provideDataTableColumns<T>({ columns: context.columns, cellValue: context.cellValue, itemSlotKeys: context.itemSlotKeys, columnAttr: context.columnAttr });\n provideDataTableSelection<T, IdType>({ selectedData: context.selectedData, isSelected: context.isSelected, isDisabledRow: context.isDisabledRow, onSelect: context.onSelect, onCheckboxClick: context.onCheckboxClick });\n provideDataTableExpansion<T, IdType>({ expandable: context.expandable, isExpanded: context.isExpanded, onToggleExpand: context.onToggleExpand });\n provideDataTableGrouping<T>({ groupExpandButtonPosition: context.groupExpandButtonPosition, groupKey: context.groupKey, isExpandedGroup: context.isExpandedGroup, onToggleExpandGroup: context.onToggleExpandGroup, onUngroup: context.onUngroup, onCopyGroup: context.onCopyGroup });\n provideDataTableRowIdentity<T, IdType>({ getRowId: context.getRowId, itemClass: context.itemClass });\n}\n\nexport function useDataTableContext<T extends object, IdType extends keyof T = keyof T>(): DataTableContext<T, IdType> {\n return {\n ...useDataTableStyling(),\n ...useDataTableColumns<T>(),\n ...useDataTableSelection<T, IdType>(),\n ...useDataTableExpansion<T, IdType>(),\n ...useDataTableGrouping<T>(),\n ...useDataTableRowIdentity<T, IdType>(),\n };\n}\n"],"mappings":";;AA4EA,IAAM,qBAAqB,OAAO,oBAAoB;AACtD,IAAM,qBAAqB,OAAO,oBAAoB;AACtD,IAAM,uBAAuB,OAAO,sBAAsB;AAC1D,IAAM,uBAAuB,OAAO,sBAAsB;AAC1D,IAAM,sBAAsB,OAAO,qBAAqB;AACxD,IAAM,0BAA0B,OAAO,yBAAyB;AAChE,IAAM,oBAAoB,OAAO,mBAAmB;AAIpD,SAAS,cAAiB,KAAa,MAAiB;CACtD,MAAM,UAAU,OAAU,GAAG;CAC7B,IAAI,YAAY,KAAA,GACd,MAAM,IAAI,MAAM,GAAG,KAAK,oCAAoC;CAE9D,OAAO;AACT;AAEA,SAAgB,wBAAwB,SAAwC;CAC9E,QAAQ,oBAAoB,OAAO;AACrC;AAEA,SAAgB,sBAA+C;CAC7D,OAAO,cAAuC,oBAAoB,qBAAqB;AACzF;AAEA,SAAgB,wBAA0C,SAA2C;CACnG,QAAQ,oBAAoB,OAAO;AACrC;AAEA,SAAgB,sBAA0E;CACxF,OAAO,cAA0C,oBAAoB,qBAAqB;AAC5F;AAEA,SAAgB,0BAAoE,SAAqD;CACvI,QAAQ,sBAAsB,OAAO;AACvC;AAEA,SAAgB,wBAAwH;CACtI,OAAO,cAAoD,sBAAsB,uBAAuB;AAC1G;AAEA,SAAgB,0BAAoE,SAAqD;CACvI,QAAQ,sBAAsB,OAAO;AACvC;AAEA,SAAgB,wBAAwH;CACtI,OAAO,cAAoD,sBAAsB,uBAAuB;AAC1G;AAEA,SAAgB,yBAA2C,SAA4C;CACrG,QAAQ,qBAAqB,OAAO;AACtC;AAEA,SAAgB,uBAA4E;CAC1F,OAAO,cAA2C,qBAAqB,sBAAsB;AAC/F;AAEA,SAAgB,4BAAsE,SAAuD;CAC3I,QAAQ,yBAAyB,OAAO;AAC1C;AAEA,SAAgB,0BAA4H;CAC1I,OAAO,cAAsD,yBAAyB,yBAAyB;AACjH;;AAGA,SAAgB,yBAA+B;CAC7C,QAAQ,mBAAmB,IAAI;AACjC;;AAGA,SAAgB,qBAA8B;CAC5C,OAAO,OAAgB,mBAAmB,KAAK;AACjD;AAIA,SAAgB,wBAAkE,SAA4C;CAC5H,wBAAwB;EAAE,SAAS,QAAQ;EAAS,SAAS,QAAQ;EAAS,OAAO,QAAQ;EAAO,UAAU,QAAQ;CAAS,CAAC;CAChI,wBAA2B;EAAE,SAAS,QAAQ;EAAS,WAAW,QAAQ;EAAW,cAAc,QAAQ;EAAc,YAAY,QAAQ;CAAW,CAAC;CACzJ,0BAAqC;EAAE,cAAc,QAAQ;EAAc,YAAY,QAAQ;EAAY,eAAe,QAAQ;EAAe,UAAU,QAAQ;EAAU,iBAAiB,QAAQ;CAAgB,CAAC;CACvN,0BAAqC;EAAE,YAAY,QAAQ;EAAY,YAAY,QAAQ;EAAY,gBAAgB,QAAQ;CAAe,CAAC;CAC/I,yBAA4B;EAAE,2BAA2B,QAAQ;EAA2B,UAAU,QAAQ;EAAU,iBAAiB,QAAQ;EAAiB,qBAAqB,QAAQ;EAAqB,WAAW,QAAQ;EAAW,aAAa,QAAQ;CAAY,CAAC;CACpR,4BAAuC;EAAE,UAAU,QAAQ;EAAU,WAAW,QAAQ;CAAU,CAAC;AACrG"}