@rotki/ui-library 2.23.5 → 2.25.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 (337) hide show
  1. package/README.md +1 -2
  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.map +1 -1
  4. package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js.map +1 -1
  5. package/dist/components/avatars/RuiAvatar.vue.d.ts +1 -1
  6. package/dist/components/avatars/RuiAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  7. package/dist/components/avatars/RuiAvatarGroup.js.map +1 -1
  8. package/dist/components/avatars/RuiAvatarGroup.vue.d.ts +1 -1
  9. package/dist/components/avatars/RuiAvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/components/avatars/use-avatar-group.d.ts +1 -1
  11. package/dist/components/buttons/button/RuiButton.vue.d.ts +1 -1
  12. package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  13. package/dist/components/buttons/button/button-styles.d.ts +40 -2
  14. package/dist/components/buttons/button/button-styles.js +38 -0
  15. package/dist/components/buttons/button/button-styles.js.map +1 -1
  16. package/dist/components/buttons/button-group/RuiButtonGroup.js.map +1 -1
  17. package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +1 -1
  18. package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js +26 -14
  19. package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  20. package/dist/components/calendar/RuiCalendar.js.map +1 -1
  21. package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  22. package/dist/components/calendar/RuiCalendarGrid.js.map +1 -1
  23. package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js +7 -0
  24. package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  25. package/dist/components/calendar/RuiCalendarHeader.vue.d.ts +1 -1
  26. package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  27. package/dist/components/calendar/RuiCalendarMenu.js.map +1 -1
  28. package/dist/components/calendar/RuiCalendarMenu.vue.d.ts +1 -1
  29. package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js +1 -0
  30. package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  31. package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  32. package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/components/chips/RuiChip.vue.d.ts +1 -1
  34. package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  35. package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  36. package/dist/components/color-picker/RuiColorDisplay.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js +2 -1
  38. package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js.map +1 -1
  39. package/dist/components/color-picker/RuiColorInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  40. package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  41. package/dist/components/date-time-picker/RuiDateTimePicker.js.map +1 -1
  42. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +18 -2
  43. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js +73 -28
  44. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  45. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.d.ts +2 -2
  46. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  47. package/dist/components/date-time-picker/RuiTimezoneSelect.vue.d.ts +3 -3
  48. package/dist/components/date-time-picker/RuiTimezoneSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  49. package/dist/components/date-time-picker/date-time-picker-styles.d.ts +48 -3
  50. package/dist/components/date-time-picker/partial-time.d.ts +35 -0
  51. package/dist/components/date-time-picker/partial-time.js +82 -0
  52. package/dist/components/date-time-picker/partial-time.js.map +1 -0
  53. package/dist/components/date-time-picker/segment-config.d.ts +1 -1
  54. package/dist/components/date-time-picker/segment-utils.d.ts +2 -2
  55. package/dist/components/date-time-picker/segment-utils.js +17 -5
  56. package/dist/components/date-time-picker/segment-utils.js.map +1 -1
  57. package/dist/components/date-time-picker/timezones.js.map +1 -1
  58. package/dist/components/date-time-picker/use-date-bounds.d.ts +28 -0
  59. package/dist/components/date-time-picker/use-date-bounds.js +60 -0
  60. package/dist/components/date-time-picker/use-date-bounds.js.map +1 -0
  61. package/dist/components/date-time-picker/use-date-time-selection.d.ts +16 -12
  62. package/dist/components/date-time-picker/use-date-time-selection.js +126 -115
  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.d.ts +1 -1
  65. package/dist/components/date-time-picker/use-keyboard-handler.d.ts +2 -2
  66. package/dist/components/date-time-picker/use-keyboard-handler.js +52 -13
  67. package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
  68. package/dist/components/date-time-picker/utils.d.ts +1 -1
  69. package/dist/components/date-time-picker/utils.js.map +1 -1
  70. package/dist/components/divider/RuiDivider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  71. package/dist/components/forms/auto-complete/RuiAutoComplete.js.map +1 -1
  72. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +2 -2
  73. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js +136 -158
  74. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  75. package/dist/components/forms/auto-complete/RuiAutoCompleteOption.js +7 -0
  76. package/dist/components/forms/auto-complete/RuiAutoCompleteOption.js.map +1 -0
  77. package/dist/components/forms/auto-complete/RuiAutoCompleteOption.vue.d.ts +45 -0
  78. package/dist/components/forms/auto-complete/RuiAutoCompleteOption.vue_vue_type_script_setup_true_lang.js +58 -0
  79. package/dist/components/forms/auto-complete/RuiAutoCompleteOption.vue_vue_type_script_setup_true_lang.js.map +1 -0
  80. package/dist/components/forms/auto-complete/RuiAutoCompleteOptionList.js +7 -0
  81. package/dist/components/forms/auto-complete/RuiAutoCompleteOptionList.js.map +1 -0
  82. package/dist/components/forms/auto-complete/RuiAutoCompleteOptionList.vue.d.ts +70 -0
  83. package/dist/components/forms/auto-complete/RuiAutoCompleteOptionList.vue_vue_type_script_setup_true_lang.js +140 -0
  84. package/dist/components/forms/auto-complete/RuiAutoCompleteOptionList.vue_vue_type_script_setup_true_lang.js.map +1 -0
  85. package/dist/components/forms/auto-complete/RuiAutoCompleteSelection.js +7 -0
  86. package/dist/components/forms/auto-complete/RuiAutoCompleteSelection.js.map +1 -0
  87. package/dist/components/forms/auto-complete/RuiAutoCompleteSelection.vue.d.ts +39 -0
  88. package/dist/components/forms/auto-complete/RuiAutoCompleteSelection.vue_vue_type_script_setup_true_lang.js +56 -0
  89. package/dist/components/forms/auto-complete/RuiAutoCompleteSelection.vue_vue_type_script_setup_true_lang.js.map +1 -0
  90. package/dist/components/forms/auto-complete/auto-complete-styles.d.ts +48 -3
  91. package/dist/components/forms/category-picker/RuiCategoryPicker.js.map +1 -1
  92. package/dist/components/forms/category-picker/RuiCategoryPicker.vue.d.ts +2 -2
  93. package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js +49 -5
  94. package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  95. package/dist/components/forms/category-picker/category-picker-styles.d.ts +69 -5
  96. package/dist/components/forms/category-picker/category-picker-styles.js +19 -0
  97. package/dist/components/forms/category-picker/category-picker-styles.js.map +1 -1
  98. package/dist/components/forms/check-control-styles.d.ts +2 -2
  99. package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  100. package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  101. package/dist/components/forms/file-upload/RuiFileUpload.js.map +1 -1
  102. package/dist/components/forms/file-upload/RuiFileUpload.vue.d.ts +1 -1
  103. package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -1
  104. package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js.map +1 -1
  105. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.js.map +1 -1
  106. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  107. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +1 -1
  108. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  109. package/dist/components/forms/select/RuiMenuSelect.js.map +1 -1
  110. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +2 -2
  111. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js +10 -8
  112. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  113. package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  114. package/dist/components/forms/select/menu-select-styles.d.ts +48 -3
  115. package/dist/components/forms/slider/RuiSlider.js.map +1 -1
  116. package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js +22 -12
  117. package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  118. package/dist/components/forms/slider/RuiSliderTicks.js +7 -0
  119. package/dist/components/forms/slider/RuiSliderTicks.js.map +1 -0
  120. package/dist/components/forms/slider/RuiSliderTicks.vue.d.ts +15 -0
  121. package/dist/components/forms/slider/RuiSliderTicks.vue_vue_type_script_setup_true_lang.js +59 -0
  122. package/dist/components/forms/slider/RuiSliderTicks.vue_vue_type_script_setup_true_lang.js.map +1 -0
  123. package/dist/components/forms/slider/slider-styles.d.ts +2 -2
  124. package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  125. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +1 -1
  126. package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  127. package/dist/components/forms/text-area/text-area-styles.d.ts +3 -3
  128. package/dist/components/forms/text-area/text-area-styles.js.map +1 -1
  129. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +3 -3
  130. package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  131. package/dist/components/forms/text-field/text-field-styles.d.ts +37 -4
  132. package/dist/components/forms/text-field/text-field-styles.js +34 -1
  133. package/dist/components/forms/text-field/text-field-styles.js.map +1 -1
  134. package/dist/components/forms/text-input-styles.d.ts +20 -5
  135. package/dist/components/forms/text-input-styles.js +16 -1
  136. package/dist/components/forms/text-input-styles.js.map +1 -1
  137. package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js.map +1 -1
  138. package/dist/components/icons/RuiIcon.js.map +1 -1
  139. package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js +26 -0
  140. package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  141. package/dist/components/index.d.ts +57 -53
  142. package/dist/components/index.js +5 -1
  143. package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js.map +1 -1
  144. package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +2 -2
  145. package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  146. package/dist/components/logos/RuiLogo.vue_vue_type_script_setup_true_lang.js.map +1 -1
  147. package/dist/components/logos/use-logo-sources.d.ts +1 -1
  148. package/dist/components/logos/use-logo-sources.js +6 -1
  149. package/dist/components/logos/use-logo-sources.js.map +1 -1
  150. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +1 -1
  151. package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js.map +1 -1
  152. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.js.map +1 -1
  153. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +1 -0
  154. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue_vue_type_script_setup_true_lang.js.map +1 -1
  155. package/dist/components/overlays/dialog/RuiDialog.js.map +1 -1
  156. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +2 -0
  157. package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js +15 -1
  158. package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  159. package/dist/components/overlays/menu/RuiMenu.js.map +1 -1
  160. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js +20 -0
  161. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  162. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.js.map +1 -1
  163. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  164. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js.map +1 -1
  165. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  166. package/dist/components/overlays/tooltip/tooltip-styles.d.ts +2 -2
  167. package/dist/components/progress/RuiProgress.js.map +1 -1
  168. package/dist/components/progress/RuiProgress.vue.d.ts +3 -3
  169. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js.map +1 -1
  170. package/dist/components/steppers/RuiFooterStepper.vue.d.ts +1 -1
  171. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  172. package/dist/components/steppers/RuiStepper.js.map +1 -1
  173. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js +8 -0
  174. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  175. package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  176. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  177. package/dist/components/tables/RuiDataTable.js.map +1 -1
  178. package/dist/components/tables/RuiDataTable.vue.d.ts +5 -6
  179. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js +42 -22
  180. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  181. package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  182. package/dist/components/tables/RuiTable.js +7 -0
  183. package/dist/components/tables/RuiTable.js.map +1 -0
  184. package/dist/components/tables/RuiTable.vue.d.ts +40 -0
  185. package/dist/components/tables/RuiTable.vue_vue_type_script_setup_true_lang.js +95 -0
  186. package/dist/components/tables/RuiTable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  187. package/dist/components/tables/RuiTableEmptyState.js.map +1 -1
  188. package/dist/components/tables/RuiTableEmptyState.vue.d.ts +5 -0
  189. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js +25 -10
  190. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  191. package/dist/components/tables/RuiTableErrorState.js +7 -0
  192. package/dist/components/tables/RuiTableErrorState.js.map +1 -0
  193. package/dist/components/tables/RuiTableErrorState.vue.d.ts +28 -0
  194. package/dist/components/tables/RuiTableErrorState.vue_vue_type_script_setup_true_lang.js +44 -0
  195. package/dist/components/tables/RuiTableErrorState.vue_vue_type_script_setup_true_lang.js.map +1 -0
  196. package/dist/components/tables/RuiTableHead.js.map +1 -1
  197. package/dist/components/tables/RuiTableHead.vue.d.ts +5 -9
  198. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js.map +1 -1
  199. package/dist/components/tables/RuiTableLoadingState.js +7 -0
  200. package/dist/components/tables/RuiTableLoadingState.js.map +1 -0
  201. package/dist/components/tables/RuiTableLoadingState.vue.d.ts +13 -0
  202. package/dist/components/tables/RuiTableLoadingState.vue_vue_type_script_setup_true_lang.js +40 -0
  203. package/dist/components/tables/RuiTableLoadingState.vue_vue_type_script_setup_true_lang.js.map +1 -0
  204. package/dist/components/tables/RuiTablePagination.vue.d.ts +1 -1
  205. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js +2 -1
  206. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  207. package/dist/components/tables/data-table/RuiDataTableBody.vue.d.ts +1 -1
  208. package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
  209. package/dist/components/tables/data-table/RuiDataTableCell.js.map +1 -1
  210. package/dist/components/tables/data-table/RuiDataTableCell.vue.d.ts +1 -1
  211. package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js +6 -0
  212. package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  213. package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  214. package/dist/components/tables/data-table/RuiDataTableExpandedRow.js.map +1 -1
  215. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js +6 -0
  216. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  217. package/dist/components/tables/data-table/RuiDataTableGroupRow.js.map +1 -1
  218. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js +5 -0
  219. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  220. package/dist/components/tables/data-table/RuiDataTableLoadingRow.js.map +1 -1
  221. package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue_vue_type_script_setup_true_lang.js +2 -6
  222. package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  223. package/dist/components/tables/data-table/RuiDataTableMobileSort.js.map +1 -1
  224. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue.d.ts +2 -2
  225. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js +4 -0
  226. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js.map +1 -1
  227. package/dist/components/tables/data-table/RuiDataTableRow.js.map +1 -1
  228. package/dist/components/tables/data-table/RuiDataTableRow.vue.d.ts +1 -1
  229. package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js +25 -0
  230. package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  231. package/dist/components/tables/data-table/context.d.ts +2 -3
  232. package/dist/components/tables/data-table/context.js.map +1 -1
  233. package/dist/components/tables/data-table-styles.d.ts +2 -5
  234. package/dist/components/tables/data-table-styles.js +1 -2
  235. package/dist/components/tables/data-table-styles.js.map +1 -1
  236. package/dist/components/tabs/tab/RuiTab.js.map +1 -1
  237. package/dist/components/tabs/tab/RuiTab.vue.d.ts +1 -1
  238. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js.map +1 -1
  239. package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  240. package/dist/components/tabs/tab-items/RuiTabItems.js.map +1 -1
  241. package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +9 -0
  242. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js +16 -0
  243. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js.map +1 -1
  244. package/dist/components/tabs/tabs/RuiTabs.js.map +1 -1
  245. package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +6 -1
  246. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js +12 -0
  247. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  248. package/dist/components/tabs/tabs/use-tab-routing.d.ts +1 -1
  249. package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  250. package/dist/components/time-picker/time-picker-styles.d.ts +2 -2
  251. package/dist/composables/colors/index.d.ts +3 -3
  252. package/dist/composables/dropdown-menu.d.ts +2 -2
  253. package/dist/composables/dropdown-menu.js +26 -23
  254. package/dist/composables/dropdown-menu.js.map +1 -1
  255. package/dist/composables/floating.d.ts +7 -8
  256. package/dist/composables/floating.js +19 -14
  257. package/dist/composables/floating.js.map +1 -1
  258. package/dist/composables/forms/auto-complete/focus.js +5 -0
  259. package/dist/composables/forms/auto-complete/focus.js.map +1 -1
  260. package/dist/composables/forms/auto-complete/keyboard-navigation.js +12 -5
  261. package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
  262. package/dist/composables/forms/auto-complete/search.d.ts +1 -1
  263. package/dist/composables/forms/auto-complete/search.js +5 -0
  264. package/dist/composables/forms/auto-complete/search.js.map +1 -1
  265. package/dist/composables/forms/auto-complete/value.js.map +1 -1
  266. package/dist/composables/forms/category-picker/use-category-picker.d.ts +1 -1
  267. package/dist/composables/forms/category-picker/use-category-picker.js +1 -0
  268. package/dist/composables/forms/category-picker/use-category-picker.js.map +1 -1
  269. package/dist/composables/forms/use-prepend-append-width.d.ts +18 -3
  270. package/dist/composables/forms/use-prepend-append-width.js +18 -3
  271. package/dist/composables/forms/use-prepend-append-width.js.map +1 -1
  272. package/dist/composables/index.d.ts +4 -3
  273. package/dist/composables/index.js +2 -1
  274. package/dist/composables/overlay-stack.d.ts +52 -0
  275. package/dist/composables/overlay-stack.js +93 -0
  276. package/dist/composables/overlay-stack.js.map +1 -0
  277. package/dist/composables/sticky-header.js.map +1 -1
  278. package/dist/composables/tables/data-table/expansion.js +7 -0
  279. package/dist/composables/tables/data-table/expansion.js.map +1 -1
  280. package/dist/composables/tables/data-table/grouping.d.ts +1 -1
  281. package/dist/composables/tables/data-table/pagination.d.ts +2 -2
  282. package/dist/composables/tables/data-table/selection.d.ts +1 -1
  283. package/dist/composables/tables/data-table/selection.js +37 -34
  284. package/dist/composables/tables/data-table/selection.js.map +1 -1
  285. package/dist/composables/theme.d.ts +4 -2
  286. package/dist/composables/theme.js +18 -24
  287. package/dist/composables/theme.js.map +1 -1
  288. package/dist/i18n/keys.d.ts +1 -1
  289. package/dist/i18n/keys.js +1 -1
  290. package/dist/i18n/keys.js.map +1 -1
  291. package/dist/icons/icons_1.d.ts +8 -8
  292. package/dist/icons/icons_1.js +246 -223
  293. package/dist/icons/icons_1.js.map +1 -1
  294. package/dist/icons/icons_2.d.ts +26 -26
  295. package/dist/icons/icons_2.js +320 -400
  296. package/dist/icons/icons_2.js.map +1 -1
  297. package/dist/icons/icons_3.d.ts +46 -46
  298. package/dist/icons/icons_3.js +661 -706
  299. package/dist/icons/icons_3.js.map +1 -1
  300. package/dist/icons/icons_4.d.ts +63 -63
  301. package/dist/icons/icons_4.js +4347 -4480
  302. package/dist/icons/icons_4.js.map +1 -1
  303. package/dist/icons/icons_5.d.ts +60 -1
  304. package/dist/icons/icons_5.js +774 -31
  305. package/dist/icons/icons_5.js.map +1 -1
  306. package/dist/icons/index.d.ts +1 -1
  307. package/dist/icons/index.js +84 -25
  308. package/dist/icons/index.js.map +1 -1
  309. package/dist/index.js +11 -6
  310. package/dist/index.js.map +1 -1
  311. package/dist/style.css +83 -10
  312. package/dist/theme/index.js +1 -0
  313. package/dist/theme/index.js.map +1 -1
  314. package/dist/types/theme.d.ts +1 -1
  315. package/dist/utils/assert.js +2 -2
  316. package/dist/utils/assert.js.map +1 -1
  317. package/dist/utils/blockie.d.ts +4 -0
  318. package/dist/utils/blockie.js +8 -0
  319. package/dist/utils/blockie.js.map +1 -1
  320. package/dist/utils/helpers.d.ts +24 -18
  321. package/dist/utils/helpers.js +28 -21
  322. package/dist/utils/helpers.js.map +1 -1
  323. package/dist/utils/is-equal.d.ts +9 -0
  324. package/dist/utils/is-equal.js +22 -15
  325. package/dist/utils/is-equal.js.map +1 -1
  326. package/dist/utils/tv.d.ts +6 -2
  327. package/dist/utils/tv.js +30 -14
  328. package/dist/utils/tv.js.map +1 -1
  329. package/dist/vite-plugin/client.d.ts +1 -1
  330. package/dist/vite-plugin/index.js +29 -21
  331. package/dist/vite-plugin/index.js.map +1 -1
  332. package/dist/vite-plugin/scanner.d.ts +5 -2
  333. package/dist/vite-plugin/scanner.js +5 -2
  334. package/dist/vite-plugin/scanner.js.map +1 -1
  335. package/dist/vite-plugin/types.d.ts +4 -8
  336. package/dist/web-types.json +872 -50
  337. package/package.json +32 -33
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiTableErrorState.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tables/RuiTableErrorState.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport RuiAlert from '@/components/alerts/RuiAlert.vue';\nimport { tv } from '@/utils/tv';\n\nexport interface TableErrorStateProps {\n /** Heading for the failure, such as which read it was. */\n title?: string;\n /** What went wrong, in the words the caller got back. */\n message?: string;\n /**\n * Label for the retry control. The library ships no translations, so a\n * caller that wants the control has to name it; leaving this empty renders\n * the reason on its own.\n */\n actionText?: string;\n}\n\ndefineOptions({\n name: 'RuiTableErrorState',\n});\n\nconst { title = '', message = '', actionText = '' } = defineProps<TableErrorStateProps>();\n\nconst emit = defineEmits<{\n action: [];\n}>();\n\ndefineSlots<{\n default?: () => any;\n}>();\n\n/**\n * Centred and capped, like the loading and empty states beside it. Left to\n * span the table, a wide one puts the reason hard left and the retry hard\n * right, with the whole width between them.\n */\nconst errorStyles = tv({\n slots: {\n root: 'flex justify-center p-4',\n alert: 'w-full max-w-2xl',\n },\n});\n\nconst ui = errorStyles();\n</script>\n\n<template>\n <div\n :class=\"ui.root()\"\n data-id=\"table-error\"\n >\n <RuiAlert\n :action-text=\"actionText\"\n :class=\"ui.alert()\"\n :title=\"title\"\n type=\"error\"\n @action=\"emit('action')\"\n >\n <slot>\n {{ message }}\n </slot>\n </RuiAlert>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAuBA,MAAM,OAAO;EAoBb,MAAM,KAPc,GAAG,EACrB,OAAO;GACL,MAAM;GACN,OAAO;EACT,EACF,CAEW,CAAA,CAAY;;GAIrB,OAAA,UAAA,GAAA,mBAeM,OAAA;IAdH,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,KAAI,CAAA;IACf,WAAQ;GAER,GAAA,CAAA,YAUW,kBAAA;IATR,eAAa,QAAA;IACb,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,MAAK,CAAA;IACf,OAAO,QAAA;IACR,MAAK;IACJ,UAAM,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,QAAA;;IAEb,SAAA,cAEO,CAFP,WAEO,KAAA,QAAA,WAAA,CAAA,SAAA,CADF,gBAAA,gBAAA,QAAA,OAAO,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTableHead.js","names":[],"sources":["../../../src/components/tables/RuiTableHead.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object, K extends keyof T = keyof T\">\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiCheckbox from '@/components/forms/checkbox/RuiCheckbox.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiBadge from '@/components/overlays/badge/RuiBadge.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { getAlignClass, getSortButtonAlignClass, SortDirection, TableAlign } from '@/components/tables/table-props';\nimport { tv } from '@/utils/tv';\n\n/**\n * Represents a sortable column name for a given type.\n * The column name must be a key of the passed data object type.\n * @template T - The type of the data in the column.\n */\nexport type TableRowKey<T> = keyof T extends string ? keyof T : never;\n\nexport interface BaseTableColumn<T> {\n key: TableRowKey<T> | string;\n sortable?: boolean;\n direction?: SortDirection;\n align?: TableAlign;\n class?: string;\n cellClass?: string;\n tdClass?: string;\n colspan?: string | number;\n rowspan?: string | number;\n /**\n * hide this column when the table is rendered in its stacked mobile layout\n */\n mobileHidden?: boolean;\n /**\n * pin this column to the card header (top row) in the stacked mobile layout\n * instead of rendering it as a label/value pair. Intended for action columns\n * such as an overflow menu. Ignored on non-mobile layouts.\n */\n mobileHeader?: boolean;\n\n [key: string]: any;\n}\n\n/**\n * Represents a sortable table column.\n * This is used to ensure that when using sortable with a true value,\n * the key matches to an actual property of the object passed.\n *\n * @template T - The type of data in the table column.\n */\nexport interface SortableTableColumn<T> extends BaseTableColumn<T> {\n sortable: true;\n}\n\n/**\n * An interface representing a column in a table that cannot be sorted.\n * This can be mapped to an actual property of the object or to a virtual column.\n *\n * @typeparam T - The type of data in the table.\n */\nexport interface NoneSortableTableColumn<T> extends BaseTableColumn<T> {\n sortable?: false;\n}\n\nexport type TableColumn<T> = SortableTableColumn<T> | NoneSortableTableColumn<T>;\n\nexport interface SortColumn<T> {\n column?: TableRowKey<T>;\n direction: SortDirection;\n}\n\nexport type TableSortData<T> = SortColumn<T> | SortColumn<T>[] | undefined;\n\nexport type TableRowKeyData<T> = TableRowKey<T> | TableRowKey<T>[] | undefined;\n\nexport interface GroupData<T> {\n key: string;\n value?: Partial<T>;\n}\n\nexport type GroupKey<T> = TableColumn<T>['key'];\n\nexport type GroupKeys<T> = GroupKey<T> | GroupKey<T>[] | undefined;\n\nexport interface Props<T> {\n loading?: boolean;\n stickyHeader?: boolean;\n stick?: boolean;\n selectable?: boolean;\n disableCheckAll?: boolean;\n colspan?: number;\n columns?: TableColumn<T>[];\n capitalizeHeaders?: boolean;\n isAllSelected?: boolean;\n indeterminate?: boolean;\n dense?: boolean;\n sortedMap?: Partial<Record<TableRowKey<T>, SortColumn<T>>>;\n sortData?: TableSortData<T>;\n columnAttr?: keyof TableColumn<T>;\n dataId?: string;\n}\n\nconst {\n loading = false,\n stickyHeader = false,\n stick = false,\n selectable = false,\n disableCheckAll = false,\n colspan = 0,\n columns,\n capitalizeHeaders = false,\n isAllSelected = false,\n indeterminate = false,\n dense = false,\n sortedMap = {} as Partial<Record<TableRowKey<T>, SortColumn<T>>>,\n columnAttr = 'label',\n sortData,\n dataId = 'head-main',\n} = defineProps<Props<T>>();\n\nconst emit = defineEmits<{\n 'select:all': [value: boolean];\n 'sort': [value: { key: TableRowKey<T>; direction?: SortDirection }];\n}>();\n\nconst tableHeadStyles = tv({\n slots: {\n thead: 'divide-y divide-black/[0.12] dark:divide-white/[0.12]',\n checkbox: 'px-2 w-[3.625rem] max-w-[3.625rem] [&_label]:ml-0',\n th: 'p-4',\n columnText: 'text-rui-text dark:text-white font-medium text-[0.875rem] leading-6',\n sortButton: 'inline-flex group/sort',\n sortIcon: 'transition opacity-0 rotate-180 group-hover/sort:opacity-60',\n loaderRow: 'border-none',\n progress: 'p-0 h-0',\n progressWrapper: 'h-0 -mt-1',\n },\n variants: {\n position: {\n default: {},\n sticky: { thead: 'top-0 z-10 absolute' },\n fixed: {\n thead: 'top-0 z-10 fixed',\n th: 'bg-white dark:bg-[#121212] border-b border-b-black/[0.12] dark:border-b-white/[0.12]',\n },\n },\n dense: {\n true: { th: 'py-[0.38rem]' },\n },\n },\n defaultVariants: {\n position: 'default',\n },\n});\n\nconst headerPosition = computed<'default' | 'sticky' | 'fixed'>(() => {\n if (stickyHeader && stick)\n return 'fixed';\n if (stickyHeader)\n return 'sticky';\n return 'default';\n});\n\nconst ui = computed<ReturnType<typeof tableHeadStyles>>(() => tableHeadStyles({\n position: get(headerPosition),\n dense,\n}));\n\nfunction getSortIconClass(key: TableColumn<T>['key']): string | undefined {\n if (!isSortedBy(key))\n return undefined;\n const direction = getSortDirection(key);\n return `!opacity-100 ${direction === SortDirection.asc ? '!rotate-180' : '!rotate-0'}`;\n}\n\nfunction onSort({ key, direction }: TableColumn<T>): void {\n return emit('sort', {\n key: key as TableRowKey<T>,\n direction: direction ?? SortDirection.asc,\n });\n}\n\nfunction onToggleAll(checked: boolean) {\n return emit('select:all', checked);\n}\n\nfunction isSortedBy(key: TableColumn<T>['key']): boolean {\n return key in sortedMap;\n}\n\nfunction getSortIndex(key: TableColumn<T>['key']): number {\n if (!sortData || !Array.isArray(sortData) || !isSortedBy(key))\n return -1;\n\n return sortData.findIndex(sort => sort.column === key);\n}\n\nfunction getSortDirection(key: TableColumn<T>['key']): SortDirection | undefined {\n return sortedMap[key]?.direction;\n}\n</script>\n\n<template>\n <thead\n :data-id=\"dataId\"\n :class=\"ui.thead()\"\n >\n <tr>\n <th\n v-if=\"selectable\"\n :class=\"ui.checkbox()\"\n scope=\"col\"\n colspan=\"1\"\n rowspan=\"1\"\n >\n <RuiCheckbox\n :disabled=\"disableCheckAll\"\n :indeterminate=\"indeterminate\"\n :model-value=\"isAllSelected\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n data-id=\"table-toggle-check-all\"\n hide-details\n @update:model-value=\"onToggleAll($event)\"\n />\n </th>\n\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n :class=\"[\n ui.th({ class: getAlignClass(column.align, column.sortable) }),\n column.class,\n { capitalize: !capitalizeHeaders },\n ]\"\n scope=\"col\"\n :colspan=\"column.colspan ?? 1\"\n :rowspan=\"column.rowspan ?? 1\"\n :data-id=\"column.sortable ? 'column-sortable' : undefined\"\n >\n <slot\n :column=\"column\"\n :name=\"`header.${column.key.toString()}`\"\n >\n <RuiBadge\n v-if=\"column.sortable\"\n :model-value=\"getSortIndex(column.key) >= 0\"\n :text=\"`${getSortIndex(column.key) + 1}`\"\n :offset-y=\"dense ? 8 : 0\"\n color=\"secondary\"\n size=\"sm\"\n >\n <RuiButton\n :class=\"ui.sortButton({ class: getSortButtonAlignClass(column.align) })\"\n :data-sorted=\"isSortedBy(column.key) || undefined\"\n :data-direction=\"getSortDirection(column.key)\"\n size=\"sm\"\n variant=\"text\"\n @click=\"onSort(column)\"\n >\n <span\n :class=\"ui.columnText()\"\n data-id=\"column-text\"\n >\n <slot\n :name=\"`header.text.${column.key.toString()}`\"\n :column=\"column\"\n >\n {{ column[columnAttr] }}\n </slot>\n </span>\n\n <template\n v-if=\"column.align === TableAlign.end\"\n #prepend\n >\n <RuiIcon\n :class=\"ui.sortIcon({ class: getSortIconClass(column.key) })\"\n name=\"lu-arrow-down\"\n size=\"18\"\n />\n </template>\n\n <template #append>\n <RuiIcon\n v-if=\"column.align !== TableAlign.end\"\n :class=\"ui.sortIcon({ class: getSortIconClass(column.key) })\"\n name=\"lu-arrow-down\"\n size=\"18\"\n />\n </template>\n </RuiButton>\n </RuiBadge>\n <span\n v-else\n :class=\"ui.columnText()\"\n data-id=\"column-text\"\n >\n <slot\n :name=\"`header.text.${column.key.toString()}`\"\n :column=\"column\"\n >\n {{ column[columnAttr] }}\n </slot>\n </span>\n </slot>\n </th>\n </tr>\n <tr\n v-if=\"loading\"\n :class=\"ui.loaderRow()\"\n data-id=\"thead-loader\"\n >\n <th\n :class=\"ui.progress()\"\n :colspan=\"colspan\"\n scope=\"col\"\n >\n <div :class=\"ui.progressWrapper()\">\n <RuiProgress\n color=\"primary\"\n variant=\"indeterminate\"\n />\n </div>\n </th>\n </tr>\n </thead>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RuiTableHead.js","names":[],"sources":["../../../src/components/tables/RuiTableHead.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object, K extends keyof T = keyof T\">\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiCheckbox from '@/components/forms/checkbox/RuiCheckbox.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiBadge from '@/components/overlays/badge/RuiBadge.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { getAlignClass, getSortButtonAlignClass, SortDirection, TableAlign } from '@/components/tables/table-props';\nimport { tv } from '@/utils/tv';\n\n/**\n * A sortable column name for `T`, the type of the data in the column: the name\n * must be a key of that object type.\n */\nexport type TableRowKey<T> = keyof T extends string ? keyof T : never;\n\nexport interface BaseTableColumn<T> {\n key: TableRowKey<T> | string;\n sortable?: boolean;\n direction?: SortDirection;\n align?: TableAlign;\n class?: string;\n cellClass?: string;\n tdClass?: string;\n colspan?: string | number;\n rowspan?: string | number;\n /**\n * hide this column when the table is rendered in its stacked mobile layout\n */\n mobileHidden?: boolean;\n /**\n * pin this column to the card header (top row) in the stacked mobile layout\n * instead of rendering it as a label/value pair. Intended for action columns\n * such as an overflow menu. Ignored on non-mobile layouts.\n */\n mobileHeader?: boolean;\n\n [key: string]: any;\n}\n\n/**\n * A sortable table column, which ties `sortable: true` to a key that is a real\n * property of `T`, the type of data in the table.\n */\nexport interface SortableTableColumn<T> extends BaseTableColumn<T> {\n sortable: true;\n}\n\n/**\n * An interface representing a column in a table that cannot be sorted.\n * This can be mapped to an actual property of the object or to a virtual column.\n *\n * @typeparam T - The type of data in the table.\n */\nexport interface NoneSortableTableColumn<T> extends BaseTableColumn<T> {\n sortable?: false;\n}\n\nexport type TableColumn<T> = SortableTableColumn<T> | NoneSortableTableColumn<T>;\n\nexport interface SortColumn<T> {\n column?: TableRowKey<T>;\n direction: SortDirection;\n}\n\nexport type TableSortData<T> = SortColumn<T> | SortColumn<T>[] | undefined;\n\nexport type TableRowKeyData<T> = TableRowKey<T> | TableRowKey<T>[] | undefined;\n\nexport interface GroupData<T> {\n key: string;\n value?: Partial<T>;\n}\n\nexport type GroupKey<T> = TableColumn<T>['key'];\n\nexport type GroupKeys<T> = GroupKey<T> | GroupKey<T>[] | undefined;\n\nexport interface Props<T> {\n loading?: boolean;\n stickyHeader?: boolean;\n stick?: boolean;\n selectable?: boolean;\n disableCheckAll?: boolean;\n colspan?: number;\n columns?: TableColumn<T>[];\n capitalizeHeaders?: boolean;\n isAllSelected?: boolean;\n indeterminate?: boolean;\n dense?: boolean;\n sortedMap?: Partial<Record<TableRowKey<T>, SortColumn<T>>>;\n sortData?: TableSortData<T>;\n columnAttr?: keyof TableColumn<T>;\n dataId?: string;\n}\n\nconst {\n loading = false,\n stickyHeader = false,\n stick = false,\n selectable = false,\n disableCheckAll = false,\n colspan = 0,\n columns,\n capitalizeHeaders = false,\n isAllSelected = false,\n indeterminate = false,\n dense = false,\n sortedMap = {} as Partial<Record<TableRowKey<T>, SortColumn<T>>>,\n columnAttr = 'label',\n sortData,\n dataId = 'head-main',\n} = defineProps<Props<T>>();\n\nconst emit = defineEmits<{\n 'select:all': [value: boolean];\n 'sort': [value: { key: TableRowKey<T>; direction?: SortDirection }];\n}>();\n\nconst tableHeadStyles = tv({\n slots: {\n thead: 'divide-y divide-black/[0.12] dark:divide-white/[0.12]',\n checkbox: 'px-2 w-[3.625rem] max-w-[3.625rem] [&_label]:ml-0',\n th: 'p-4',\n columnText: 'text-rui-text dark:text-white font-medium text-[0.875rem] leading-6',\n sortButton: 'inline-flex group/sort',\n sortIcon: 'transition opacity-0 rotate-180 group-hover/sort:opacity-60',\n loaderRow: 'border-none',\n progress: 'p-0 h-0',\n progressWrapper: 'h-0 -mt-1',\n },\n variants: {\n position: {\n default: {},\n sticky: { thead: 'top-0 z-10 absolute' },\n fixed: {\n thead: 'top-0 z-10 fixed',\n th: 'bg-white dark:bg-[#121212] border-b border-b-black/[0.12] dark:border-b-white/[0.12]',\n },\n },\n dense: {\n true: { th: 'py-[0.38rem]' },\n },\n },\n defaultVariants: {\n position: 'default',\n },\n});\n\nconst headerPosition = computed<'default' | 'sticky' | 'fixed'>(() => {\n if (stickyHeader && stick)\n return 'fixed';\n if (stickyHeader)\n return 'sticky';\n return 'default';\n});\n\nconst ui = computed<ReturnType<typeof tableHeadStyles>>(() => tableHeadStyles({\n position: get(headerPosition),\n dense,\n}));\n\nfunction getSortIconClass(key: TableColumn<T>['key']): string | undefined {\n if (!isSortedBy(key))\n return undefined;\n const direction = getSortDirection(key);\n return `!opacity-100 ${direction === SortDirection.asc ? '!rotate-180' : '!rotate-0'}`;\n}\n\nfunction onSort({ key, direction }: TableColumn<T>): void {\n return emit('sort', {\n key: key as TableRowKey<T>,\n direction: direction ?? SortDirection.asc,\n });\n}\n\nfunction onToggleAll(checked: boolean) {\n return emit('select:all', checked);\n}\n\nfunction isSortedBy(key: TableColumn<T>['key']): boolean {\n return key in sortedMap;\n}\n\nfunction getSortIndex(key: TableColumn<T>['key']): number {\n if (!sortData || !Array.isArray(sortData) || !isSortedBy(key))\n return -1;\n\n return sortData.findIndex(sort => sort.column === key);\n}\n\nfunction getSortDirection(key: TableColumn<T>['key']): SortDirection | undefined {\n return sortedMap[key]?.direction;\n}\n</script>\n\n<template>\n <thead\n :data-id=\"dataId\"\n :class=\"ui.thead()\"\n >\n <tr>\n <th\n v-if=\"selectable\"\n :class=\"ui.checkbox()\"\n scope=\"col\"\n colspan=\"1\"\n rowspan=\"1\"\n >\n <RuiCheckbox\n :disabled=\"disableCheckAll\"\n :indeterminate=\"indeterminate\"\n :model-value=\"isAllSelected\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n data-id=\"table-toggle-check-all\"\n hide-details\n @update:model-value=\"onToggleAll($event)\"\n />\n </th>\n\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n :class=\"[\n ui.th({ class: getAlignClass(column.align, column.sortable) }),\n column.class,\n { capitalize: !capitalizeHeaders },\n ]\"\n scope=\"col\"\n :colspan=\"column.colspan ?? 1\"\n :rowspan=\"column.rowspan ?? 1\"\n :data-id=\"column.sortable ? 'column-sortable' : undefined\"\n >\n <slot\n :column=\"column\"\n :name=\"`header.${column.key.toString()}`\"\n >\n <RuiBadge\n v-if=\"column.sortable\"\n :model-value=\"getSortIndex(column.key) >= 0\"\n :text=\"`${getSortIndex(column.key) + 1}`\"\n :offset-y=\"dense ? 8 : 0\"\n color=\"secondary\"\n size=\"sm\"\n >\n <RuiButton\n :class=\"ui.sortButton({ class: getSortButtonAlignClass(column.align) })\"\n :data-sorted=\"isSortedBy(column.key) || undefined\"\n :data-direction=\"getSortDirection(column.key)\"\n size=\"sm\"\n variant=\"text\"\n @click=\"onSort(column)\"\n >\n <span\n :class=\"ui.columnText()\"\n data-id=\"column-text\"\n >\n <slot\n :name=\"`header.text.${column.key.toString()}`\"\n :column=\"column\"\n >\n {{ column[columnAttr] }}\n </slot>\n </span>\n\n <template\n v-if=\"column.align === TableAlign.end\"\n #prepend\n >\n <RuiIcon\n :class=\"ui.sortIcon({ class: getSortIconClass(column.key) })\"\n name=\"lu-arrow-down\"\n size=\"18\"\n />\n </template>\n\n <template #append>\n <RuiIcon\n v-if=\"column.align !== TableAlign.end\"\n :class=\"ui.sortIcon({ class: getSortIconClass(column.key) })\"\n name=\"lu-arrow-down\"\n size=\"18\"\n />\n </template>\n </RuiButton>\n </RuiBadge>\n <span\n v-else\n :class=\"ui.columnText()\"\n data-id=\"column-text\"\n >\n <slot\n :name=\"`header.text.${column.key.toString()}`\"\n :column=\"column\"\n >\n {{ column[columnAttr] }}\n </slot>\n </span>\n </slot>\n </th>\n </tr>\n <tr\n v-if=\"loading\"\n :class=\"ui.loaderRow()\"\n data-id=\"thead-loader\"\n >\n <th\n :class=\"ui.progress()\"\n :colspan=\"colspan\"\n scope=\"col\"\n >\n <div :class=\"ui.progressWrapper()\">\n <RuiProgress\n color=\"primary\"\n variant=\"indeterminate\"\n />\n </div>\n </th>\n </tr>\n </thead>\n</template>\n"],"mappings":""}
@@ -1,8 +1,7 @@
1
- import { SortDirection, TableAlign } from '../../components/tables/table-props.js';
1
+ import { SortDirection, TableAlign } from './table-props.js';
2
2
  /**
3
- * Represents a sortable column name for a given type.
4
- * The column name must be a key of the passed data object type.
5
- * @template T - The type of the data in the column.
3
+ * A sortable column name for `T`, the type of the data in the column: the name
4
+ * must be a key of that object type.
6
5
  */
7
6
  export type TableRowKey<T> = keyof T extends string ? keyof T : never;
8
7
  export interface BaseTableColumn<T> {
@@ -28,11 +27,8 @@ export interface BaseTableColumn<T> {
28
27
  [key: string]: any;
29
28
  }
30
29
  /**
31
- * Represents a sortable table column.
32
- * This is used to ensure that when using sortable with a true value,
33
- * the key matches to an actual property of the object passed.
34
- *
35
- * @template T - The type of data in the table column.
30
+ * A sortable table column, which ties `sortable: true` to a key that is a real
31
+ * property of `T`, the type of data in the table.
36
32
  */
37
33
  export interface SortableTableColumn<T> extends BaseTableColumn<T> {
38
34
  sortable: true;
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTableHead.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tables/RuiTableHead.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object, K extends keyof T = keyof T\">\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiCheckbox from '@/components/forms/checkbox/RuiCheckbox.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiBadge from '@/components/overlays/badge/RuiBadge.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { getAlignClass, getSortButtonAlignClass, SortDirection, TableAlign } from '@/components/tables/table-props';\nimport { tv } from '@/utils/tv';\n\n/**\n * Represents a sortable column name for a given type.\n * The column name must be a key of the passed data object type.\n * @template T - The type of the data in the column.\n */\nexport type TableRowKey<T> = keyof T extends string ? keyof T : never;\n\nexport interface BaseTableColumn<T> {\n key: TableRowKey<T> | string;\n sortable?: boolean;\n direction?: SortDirection;\n align?: TableAlign;\n class?: string;\n cellClass?: string;\n tdClass?: string;\n colspan?: string | number;\n rowspan?: string | number;\n /**\n * hide this column when the table is rendered in its stacked mobile layout\n */\n mobileHidden?: boolean;\n /**\n * pin this column to the card header (top row) in the stacked mobile layout\n * instead of rendering it as a label/value pair. Intended for action columns\n * such as an overflow menu. Ignored on non-mobile layouts.\n */\n mobileHeader?: boolean;\n\n [key: string]: any;\n}\n\n/**\n * Represents a sortable table column.\n * This is used to ensure that when using sortable with a true value,\n * the key matches to an actual property of the object passed.\n *\n * @template T - The type of data in the table column.\n */\nexport interface SortableTableColumn<T> extends BaseTableColumn<T> {\n sortable: true;\n}\n\n/**\n * An interface representing a column in a table that cannot be sorted.\n * This can be mapped to an actual property of the object or to a virtual column.\n *\n * @typeparam T - The type of data in the table.\n */\nexport interface NoneSortableTableColumn<T> extends BaseTableColumn<T> {\n sortable?: false;\n}\n\nexport type TableColumn<T> = SortableTableColumn<T> | NoneSortableTableColumn<T>;\n\nexport interface SortColumn<T> {\n column?: TableRowKey<T>;\n direction: SortDirection;\n}\n\nexport type TableSortData<T> = SortColumn<T> | SortColumn<T>[] | undefined;\n\nexport type TableRowKeyData<T> = TableRowKey<T> | TableRowKey<T>[] | undefined;\n\nexport interface GroupData<T> {\n key: string;\n value?: Partial<T>;\n}\n\nexport type GroupKey<T> = TableColumn<T>['key'];\n\nexport type GroupKeys<T> = GroupKey<T> | GroupKey<T>[] | undefined;\n\nexport interface Props<T> {\n loading?: boolean;\n stickyHeader?: boolean;\n stick?: boolean;\n selectable?: boolean;\n disableCheckAll?: boolean;\n colspan?: number;\n columns?: TableColumn<T>[];\n capitalizeHeaders?: boolean;\n isAllSelected?: boolean;\n indeterminate?: boolean;\n dense?: boolean;\n sortedMap?: Partial<Record<TableRowKey<T>, SortColumn<T>>>;\n sortData?: TableSortData<T>;\n columnAttr?: keyof TableColumn<T>;\n dataId?: string;\n}\n\nconst {\n loading = false,\n stickyHeader = false,\n stick = false,\n selectable = false,\n disableCheckAll = false,\n colspan = 0,\n columns,\n capitalizeHeaders = false,\n isAllSelected = false,\n indeterminate = false,\n dense = false,\n sortedMap = {} as Partial<Record<TableRowKey<T>, SortColumn<T>>>,\n columnAttr = 'label',\n sortData,\n dataId = 'head-main',\n} = defineProps<Props<T>>();\n\nconst emit = defineEmits<{\n 'select:all': [value: boolean];\n 'sort': [value: { key: TableRowKey<T>; direction?: SortDirection }];\n}>();\n\nconst tableHeadStyles = tv({\n slots: {\n thead: 'divide-y divide-black/[0.12] dark:divide-white/[0.12]',\n checkbox: 'px-2 w-[3.625rem] max-w-[3.625rem] [&_label]:ml-0',\n th: 'p-4',\n columnText: 'text-rui-text dark:text-white font-medium text-[0.875rem] leading-6',\n sortButton: 'inline-flex group/sort',\n sortIcon: 'transition opacity-0 rotate-180 group-hover/sort:opacity-60',\n loaderRow: 'border-none',\n progress: 'p-0 h-0',\n progressWrapper: 'h-0 -mt-1',\n },\n variants: {\n position: {\n default: {},\n sticky: { thead: 'top-0 z-10 absolute' },\n fixed: {\n thead: 'top-0 z-10 fixed',\n th: 'bg-white dark:bg-[#121212] border-b border-b-black/[0.12] dark:border-b-white/[0.12]',\n },\n },\n dense: {\n true: { th: 'py-[0.38rem]' },\n },\n },\n defaultVariants: {\n position: 'default',\n },\n});\n\nconst headerPosition = computed<'default' | 'sticky' | 'fixed'>(() => {\n if (stickyHeader && stick)\n return 'fixed';\n if (stickyHeader)\n return 'sticky';\n return 'default';\n});\n\nconst ui = computed<ReturnType<typeof tableHeadStyles>>(() => tableHeadStyles({\n position: get(headerPosition),\n dense,\n}));\n\nfunction getSortIconClass(key: TableColumn<T>['key']): string | undefined {\n if (!isSortedBy(key))\n return undefined;\n const direction = getSortDirection(key);\n return `!opacity-100 ${direction === SortDirection.asc ? '!rotate-180' : '!rotate-0'}`;\n}\n\nfunction onSort({ key, direction }: TableColumn<T>): void {\n return emit('sort', {\n key: key as TableRowKey<T>,\n direction: direction ?? SortDirection.asc,\n });\n}\n\nfunction onToggleAll(checked: boolean) {\n return emit('select:all', checked);\n}\n\nfunction isSortedBy(key: TableColumn<T>['key']): boolean {\n return key in sortedMap;\n}\n\nfunction getSortIndex(key: TableColumn<T>['key']): number {\n if (!sortData || !Array.isArray(sortData) || !isSortedBy(key))\n return -1;\n\n return sortData.findIndex(sort => sort.column === key);\n}\n\nfunction getSortDirection(key: TableColumn<T>['key']): SortDirection | undefined {\n return sortedMap[key]?.direction;\n}\n</script>\n\n<template>\n <thead\n :data-id=\"dataId\"\n :class=\"ui.thead()\"\n >\n <tr>\n <th\n v-if=\"selectable\"\n :class=\"ui.checkbox()\"\n scope=\"col\"\n colspan=\"1\"\n rowspan=\"1\"\n >\n <RuiCheckbox\n :disabled=\"disableCheckAll\"\n :indeterminate=\"indeterminate\"\n :model-value=\"isAllSelected\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n data-id=\"table-toggle-check-all\"\n hide-details\n @update:model-value=\"onToggleAll($event)\"\n />\n </th>\n\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n :class=\"[\n ui.th({ class: getAlignClass(column.align, column.sortable) }),\n column.class,\n { capitalize: !capitalizeHeaders },\n ]\"\n scope=\"col\"\n :colspan=\"column.colspan ?? 1\"\n :rowspan=\"column.rowspan ?? 1\"\n :data-id=\"column.sortable ? 'column-sortable' : undefined\"\n >\n <slot\n :column=\"column\"\n :name=\"`header.${column.key.toString()}`\"\n >\n <RuiBadge\n v-if=\"column.sortable\"\n :model-value=\"getSortIndex(column.key) >= 0\"\n :text=\"`${getSortIndex(column.key) + 1}`\"\n :offset-y=\"dense ? 8 : 0\"\n color=\"secondary\"\n size=\"sm\"\n >\n <RuiButton\n :class=\"ui.sortButton({ class: getSortButtonAlignClass(column.align) })\"\n :data-sorted=\"isSortedBy(column.key) || undefined\"\n :data-direction=\"getSortDirection(column.key)\"\n size=\"sm\"\n variant=\"text\"\n @click=\"onSort(column)\"\n >\n <span\n :class=\"ui.columnText()\"\n data-id=\"column-text\"\n >\n <slot\n :name=\"`header.text.${column.key.toString()}`\"\n :column=\"column\"\n >\n {{ column[columnAttr] }}\n </slot>\n </span>\n\n <template\n v-if=\"column.align === TableAlign.end\"\n #prepend\n >\n <RuiIcon\n :class=\"ui.sortIcon({ class: getSortIconClass(column.key) })\"\n name=\"lu-arrow-down\"\n size=\"18\"\n />\n </template>\n\n <template #append>\n <RuiIcon\n v-if=\"column.align !== TableAlign.end\"\n :class=\"ui.sortIcon({ class: getSortIconClass(column.key) })\"\n name=\"lu-arrow-down\"\n size=\"18\"\n />\n </template>\n </RuiButton>\n </RuiBadge>\n <span\n v-else\n :class=\"ui.columnText()\"\n data-id=\"column-text\"\n >\n <slot\n :name=\"`header.text.${column.key.toString()}`\"\n :column=\"column\"\n >\n {{ column[columnAttr] }}\n </slot>\n </span>\n </slot>\n </th>\n </tr>\n <tr\n v-if=\"loading\"\n :class=\"ui.loaderRow()\"\n data-id=\"thead-loader\"\n >\n <th\n :class=\"ui.progress()\"\n :colspan=\"colspan\"\n scope=\"col\"\n >\n <div :class=\"ui.progressWrapper()\">\n <RuiProgress\n color=\"primary\"\n variant=\"indeterminate\"\n />\n </div>\n </th>\n </tr>\n </thead>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"RuiTableHead.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tables/RuiTableHead.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object, K extends keyof T = keyof T\">\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiCheckbox from '@/components/forms/checkbox/RuiCheckbox.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiBadge from '@/components/overlays/badge/RuiBadge.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { getAlignClass, getSortButtonAlignClass, SortDirection, TableAlign } from '@/components/tables/table-props';\nimport { tv } from '@/utils/tv';\n\n/**\n * A sortable column name for `T`, the type of the data in the column: the name\n * must be a key of that object type.\n */\nexport type TableRowKey<T> = keyof T extends string ? keyof T : never;\n\nexport interface BaseTableColumn<T> {\n key: TableRowKey<T> | string;\n sortable?: boolean;\n direction?: SortDirection;\n align?: TableAlign;\n class?: string;\n cellClass?: string;\n tdClass?: string;\n colspan?: string | number;\n rowspan?: string | number;\n /**\n * hide this column when the table is rendered in its stacked mobile layout\n */\n mobileHidden?: boolean;\n /**\n * pin this column to the card header (top row) in the stacked mobile layout\n * instead of rendering it as a label/value pair. Intended for action columns\n * such as an overflow menu. Ignored on non-mobile layouts.\n */\n mobileHeader?: boolean;\n\n [key: string]: any;\n}\n\n/**\n * A sortable table column, which ties `sortable: true` to a key that is a real\n * property of `T`, the type of data in the table.\n */\nexport interface SortableTableColumn<T> extends BaseTableColumn<T> {\n sortable: true;\n}\n\n/**\n * An interface representing a column in a table that cannot be sorted.\n * This can be mapped to an actual property of the object or to a virtual column.\n *\n * @typeparam T - The type of data in the table.\n */\nexport interface NoneSortableTableColumn<T> extends BaseTableColumn<T> {\n sortable?: false;\n}\n\nexport type TableColumn<T> = SortableTableColumn<T> | NoneSortableTableColumn<T>;\n\nexport interface SortColumn<T> {\n column?: TableRowKey<T>;\n direction: SortDirection;\n}\n\nexport type TableSortData<T> = SortColumn<T> | SortColumn<T>[] | undefined;\n\nexport type TableRowKeyData<T> = TableRowKey<T> | TableRowKey<T>[] | undefined;\n\nexport interface GroupData<T> {\n key: string;\n value?: Partial<T>;\n}\n\nexport type GroupKey<T> = TableColumn<T>['key'];\n\nexport type GroupKeys<T> = GroupKey<T> | GroupKey<T>[] | undefined;\n\nexport interface Props<T> {\n loading?: boolean;\n stickyHeader?: boolean;\n stick?: boolean;\n selectable?: boolean;\n disableCheckAll?: boolean;\n colspan?: number;\n columns?: TableColumn<T>[];\n capitalizeHeaders?: boolean;\n isAllSelected?: boolean;\n indeterminate?: boolean;\n dense?: boolean;\n sortedMap?: Partial<Record<TableRowKey<T>, SortColumn<T>>>;\n sortData?: TableSortData<T>;\n columnAttr?: keyof TableColumn<T>;\n dataId?: string;\n}\n\nconst {\n loading = false,\n stickyHeader = false,\n stick = false,\n selectable = false,\n disableCheckAll = false,\n colspan = 0,\n columns,\n capitalizeHeaders = false,\n isAllSelected = false,\n indeterminate = false,\n dense = false,\n sortedMap = {} as Partial<Record<TableRowKey<T>, SortColumn<T>>>,\n columnAttr = 'label',\n sortData,\n dataId = 'head-main',\n} = defineProps<Props<T>>();\n\nconst emit = defineEmits<{\n 'select:all': [value: boolean];\n 'sort': [value: { key: TableRowKey<T>; direction?: SortDirection }];\n}>();\n\nconst tableHeadStyles = tv({\n slots: {\n thead: 'divide-y divide-black/[0.12] dark:divide-white/[0.12]',\n checkbox: 'px-2 w-[3.625rem] max-w-[3.625rem] [&_label]:ml-0',\n th: 'p-4',\n columnText: 'text-rui-text dark:text-white font-medium text-[0.875rem] leading-6',\n sortButton: 'inline-flex group/sort',\n sortIcon: 'transition opacity-0 rotate-180 group-hover/sort:opacity-60',\n loaderRow: 'border-none',\n progress: 'p-0 h-0',\n progressWrapper: 'h-0 -mt-1',\n },\n variants: {\n position: {\n default: {},\n sticky: { thead: 'top-0 z-10 absolute' },\n fixed: {\n thead: 'top-0 z-10 fixed',\n th: 'bg-white dark:bg-[#121212] border-b border-b-black/[0.12] dark:border-b-white/[0.12]',\n },\n },\n dense: {\n true: { th: 'py-[0.38rem]' },\n },\n },\n defaultVariants: {\n position: 'default',\n },\n});\n\nconst headerPosition = computed<'default' | 'sticky' | 'fixed'>(() => {\n if (stickyHeader && stick)\n return 'fixed';\n if (stickyHeader)\n return 'sticky';\n return 'default';\n});\n\nconst ui = computed<ReturnType<typeof tableHeadStyles>>(() => tableHeadStyles({\n position: get(headerPosition),\n dense,\n}));\n\nfunction getSortIconClass(key: TableColumn<T>['key']): string | undefined {\n if (!isSortedBy(key))\n return undefined;\n const direction = getSortDirection(key);\n return `!opacity-100 ${direction === SortDirection.asc ? '!rotate-180' : '!rotate-0'}`;\n}\n\nfunction onSort({ key, direction }: TableColumn<T>): void {\n return emit('sort', {\n key: key as TableRowKey<T>,\n direction: direction ?? SortDirection.asc,\n });\n}\n\nfunction onToggleAll(checked: boolean) {\n return emit('select:all', checked);\n}\n\nfunction isSortedBy(key: TableColumn<T>['key']): boolean {\n return key in sortedMap;\n}\n\nfunction getSortIndex(key: TableColumn<T>['key']): number {\n if (!sortData || !Array.isArray(sortData) || !isSortedBy(key))\n return -1;\n\n return sortData.findIndex(sort => sort.column === key);\n}\n\nfunction getSortDirection(key: TableColumn<T>['key']): SortDirection | undefined {\n return sortedMap[key]?.direction;\n}\n</script>\n\n<template>\n <thead\n :data-id=\"dataId\"\n :class=\"ui.thead()\"\n >\n <tr>\n <th\n v-if=\"selectable\"\n :class=\"ui.checkbox()\"\n scope=\"col\"\n colspan=\"1\"\n rowspan=\"1\"\n >\n <RuiCheckbox\n :disabled=\"disableCheckAll\"\n :indeterminate=\"indeterminate\"\n :model-value=\"isAllSelected\"\n :size=\"dense ? 'sm' : undefined\"\n color=\"primary\"\n data-id=\"table-toggle-check-all\"\n hide-details\n @update:model-value=\"onToggleAll($event)\"\n />\n </th>\n\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n :class=\"[\n ui.th({ class: getAlignClass(column.align, column.sortable) }),\n column.class,\n { capitalize: !capitalizeHeaders },\n ]\"\n scope=\"col\"\n :colspan=\"column.colspan ?? 1\"\n :rowspan=\"column.rowspan ?? 1\"\n :data-id=\"column.sortable ? 'column-sortable' : undefined\"\n >\n <slot\n :column=\"column\"\n :name=\"`header.${column.key.toString()}`\"\n >\n <RuiBadge\n v-if=\"column.sortable\"\n :model-value=\"getSortIndex(column.key) >= 0\"\n :text=\"`${getSortIndex(column.key) + 1}`\"\n :offset-y=\"dense ? 8 : 0\"\n color=\"secondary\"\n size=\"sm\"\n >\n <RuiButton\n :class=\"ui.sortButton({ class: getSortButtonAlignClass(column.align) })\"\n :data-sorted=\"isSortedBy(column.key) || undefined\"\n :data-direction=\"getSortDirection(column.key)\"\n size=\"sm\"\n variant=\"text\"\n @click=\"onSort(column)\"\n >\n <span\n :class=\"ui.columnText()\"\n data-id=\"column-text\"\n >\n <slot\n :name=\"`header.text.${column.key.toString()}`\"\n :column=\"column\"\n >\n {{ column[columnAttr] }}\n </slot>\n </span>\n\n <template\n v-if=\"column.align === TableAlign.end\"\n #prepend\n >\n <RuiIcon\n :class=\"ui.sortIcon({ class: getSortIconClass(column.key) })\"\n name=\"lu-arrow-down\"\n size=\"18\"\n />\n </template>\n\n <template #append>\n <RuiIcon\n v-if=\"column.align !== TableAlign.end\"\n :class=\"ui.sortIcon({ class: getSortIconClass(column.key) })\"\n name=\"lu-arrow-down\"\n size=\"18\"\n />\n </template>\n </RuiButton>\n </RuiBadge>\n <span\n v-else\n :class=\"ui.columnText()\"\n data-id=\"column-text\"\n >\n <slot\n :name=\"`header.text.${column.key.toString()}`\"\n :column=\"column\"\n >\n {{ column[columnAttr] }}\n </slot>\n </span>\n </slot>\n </th>\n </tr>\n <tr\n v-if=\"loading\"\n :class=\"ui.loaderRow()\"\n data-id=\"thead-loader\"\n >\n <th\n :class=\"ui.progress()\"\n :colspan=\"colspan\"\n scope=\"col\"\n >\n <div :class=\"ui.progressWrapper()\">\n <RuiProgress\n color=\"primary\"\n variant=\"indeterminate\"\n />\n </div>\n </th>\n </tr>\n </thead>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import RuiTableLoadingState_vue_vue_type_script_setup_true_lang_default from "./RuiTableLoadingState.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/tables/RuiTableLoadingState.vue
3
+ var RuiTableLoadingState_default = RuiTableLoadingState_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { RuiTableLoadingState_default as default };
6
+
7
+ //# sourceMappingURL=RuiTableLoadingState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiTableLoadingState.js","names":[],"sources":["../../../src/components/tables/RuiTableLoadingState.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { tv } from '@/utils/tv';\n\nexport interface TableLoadingStateProps {\n /** Diameter of the spinner, in pixels. */\n size?: number | string;\n /**\n * Drops the reserved height, for a table that only has room to say a read is\n * in flight. Matches the same flag on RuiTableEmptyState, so the two states\n * do not resize the table as they swap.\n */\n compact?: boolean;\n}\n\ndefineOptions({\n name: 'RuiTableLoadingState',\n});\n\nconst { size = 40, compact = false } = defineProps<TableLoadingStateProps>();\n\nconst loadingStyles = tv({\n slots: {\n root: 'flex items-center justify-center',\n },\n variants: {\n compact: {\n true: { root: 'py-6' },\n false: { root: 'min-h-56 py-8' },\n },\n },\n});\n\nconst ui = computed<ReturnType<typeof loadingStyles>>(() => loadingStyles({ compact }));\n</script>\n\n<template>\n <div\n :class=\"ui.root()\"\n data-id=\"table-loading\"\n >\n <RuiProgress\n circular\n color=\"primary\"\n :size=\"size\"\n variant=\"indeterminate\"\n />\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,13 @@
1
+ export interface TableLoadingStateProps {
2
+ /** Diameter of the spinner, in pixels. */
3
+ size?: number | string;
4
+ /**
5
+ * Drops the reserved height, for a table that only has room to say a read is
6
+ * in flight. Matches the same flag on RuiTableEmptyState, so the two states
7
+ * do not resize the table as they swap.
8
+ */
9
+ compact?: boolean;
10
+ }
11
+ declare const __VLS_export: import("vue").DefineComponent<TableLoadingStateProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<TableLoadingStateProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
12
+ declare const _default: typeof __VLS_export;
13
+ export default _default;
@@ -0,0 +1,40 @@
1
+ import { tv } from "../../utils/tv.js";
2
+ import RuiProgress_default from "../progress/RuiProgress.js";
3
+ import { computed, createElementBlock, createVNode, defineComponent, normalizeClass, openBlock } from "vue";
4
+ //#region src/components/tables/RuiTableLoadingState.vue?vue&type=script&setup=true&lang.ts
5
+ var RuiTableLoadingState_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
+ name: "RuiTableLoadingState",
7
+ __name: "RuiTableLoadingState",
8
+ props: {
9
+ size: { default: 40 },
10
+ compact: {
11
+ type: Boolean,
12
+ default: false
13
+ }
14
+ },
15
+ setup(__props) {
16
+ const loadingStyles = tv({
17
+ slots: { root: "flex items-center justify-center" },
18
+ variants: { compact: {
19
+ true: { root: "py-6" },
20
+ false: { root: "min-h-56 py-8" }
21
+ } }
22
+ });
23
+ const ui = computed(() => loadingStyles({ compact: __props.compact }));
24
+ return (_ctx, _cache) => {
25
+ return openBlock(), createElementBlock("div", {
26
+ class: normalizeClass(ui.value.root()),
27
+ "data-id": "table-loading"
28
+ }, [createVNode(RuiProgress_default, {
29
+ circular: "",
30
+ color: "primary",
31
+ size: __props.size,
32
+ variant: "indeterminate"
33
+ }, null, 8, ["size"])], 2);
34
+ };
35
+ }
36
+ });
37
+ //#endregion
38
+ export { RuiTableLoadingState_vue_vue_type_script_setup_true_lang_default as default };
39
+
40
+ //# sourceMappingURL=RuiTableLoadingState.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiTableLoadingState.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tables/RuiTableLoadingState.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { tv } from '@/utils/tv';\n\nexport interface TableLoadingStateProps {\n /** Diameter of the spinner, in pixels. */\n size?: number | string;\n /**\n * Drops the reserved height, for a table that only has room to say a read is\n * in flight. Matches the same flag on RuiTableEmptyState, so the two states\n * do not resize the table as they swap.\n */\n compact?: boolean;\n}\n\ndefineOptions({\n name: 'RuiTableLoadingState',\n});\n\nconst { size = 40, compact = false } = defineProps<TableLoadingStateProps>();\n\nconst loadingStyles = tv({\n slots: {\n root: 'flex items-center justify-center',\n },\n variants: {\n compact: {\n true: { root: 'py-6' },\n false: { root: 'min-h-56 py-8' },\n },\n },\n});\n\nconst ui = computed<ReturnType<typeof loadingStyles>>(() => loadingStyles({ compact }));\n</script>\n\n<template>\n <div\n :class=\"ui.root()\"\n data-id=\"table-loading\"\n >\n <RuiProgress\n circular\n color=\"primary\"\n :size=\"size\"\n variant=\"indeterminate\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;EAsBA,MAAM,gBAAgB,GAAG;GACvB,OAAO,EACL,MAAM,mCACR;GACA,UAAU,EACR,SAAS;IACP,MAAM,EAAE,MAAM,OAAO;IACrB,OAAO,EAAE,MAAM,gBAAgB;GACjC,EACF;EACF,CAAC;EAED,MAAM,KAAK,eAAiD,cAAc,EAAE,SAAM,QAAA,QAAE,CAAC,CAAC;;GAIpF,OAAA,UAAA,GAAA,mBAUM,OAAA;IATH,OAAK,eAAE,GAAA,MAAG,KAAI,CAAA;IACf,WAAQ;GAER,GAAA,CAAA,YAKE,qBAAA;IAJA,UAAA;IACA,OAAM;IACL,MAAM,QAAA;IACP,SAAQ"}
@@ -1,4 +1,4 @@
1
- import { type TablePaginationData } from '../../components/tables/use-pagination-navigation.js';
1
+ import { type TablePaginationData } from './use-pagination-navigation.js';
2
2
  export type { TablePaginationData };
3
3
  export interface Props {
4
4
  dense?: boolean;
@@ -58,7 +58,8 @@ var RuiTablePagination_vue_vue_type_script_setup_true_lang_default = /*@__PURE__
58
58
  dense: __props.dense,
59
59
  mobile: __props.mobile
60
60
  }));
61
- const { limits, currentLimit, pages, ranges, indicatorText, currentRange, useInputJump, hasPrev, hasNext, onPrev, onNext, onFirst, onLast } = usePaginationNavigation(modelValue, useTable(), () => __props.rangesThreshold);
61
+ const tableDefaults = useTable();
62
+ const { limits, currentLimit, pages, ranges, indicatorText, currentRange, useInputJump, hasPrev, hasNext, onPrev, onNext, onFirst, onLast } = usePaginationNavigation(modelValue, tableDefaults, () => __props.rangesThreshold);
62
63
  const pageDraft = ref(String(get(currentRange)));
63
64
  watch(currentRange, (value) => {
64
65
  set(pageDraft, String(value));
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTablePagination.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tables/RuiTablePagination.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiMenuSelect from '@/components/forms/select/RuiMenuSelect.vue';\nimport RuiTextField from '@/components/forms/text-field/RuiTextField.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { type TablePaginationData, usePaginationNavigation } from '@/components/tables/use-pagination-navigation';\nimport { useTable } from '@/composables/defaults/table';\nimport { tv } from '@/utils/tv';\n\nexport type { TablePaginationData };\n\nexport interface Props {\n dense?: boolean;\n disablePerPage?: boolean;\n loading?: boolean;\n /**\n * Render a compact, touch-friendly layout: the sections spread across the\n * full width and the first/last jump buttons are dropped to save space.\n */\n mobile?: boolean;\n /**\n * Maximum number of pages before the jump-to-page dropdown is replaced\n * with a numeric input. Set to `0` to always use the input, or a very\n * large number to always use the dropdown. Defaults to `500` — past that\n * materialising the full range list stalls the main thread.\n */\n rangesThreshold?: number;\n}\n\nconst modelValue = defineModel<TablePaginationData>({ required: true });\n\nconst {\n dense = false,\n loading = false,\n disablePerPage = false,\n rangesThreshold = 500,\n mobile = false,\n} = defineProps<Props>();\n\nconst paginationStyles = tv({\n slots: {\n wrapper: 'relative flex flex-wrap items-center justify-end gap-x-4 gap-y-0',\n limit: 'flex items-center space-x-2 text-caption',\n ranges: 'flex items-center space-x-2 text-caption pr-2',\n pageInput: 'w-14 [&_input]:text-center',\n sectionLabel: 'text-rui-text-secondary whitespace-nowrap py-3',\n indicator: 'text-rui-text text-caption whitespace-nowrap',\n navigation: 'flex items-center',\n },\n variants: {\n dense: {\n true: {\n wrapper: 'gap-x-2',\n },\n },\n mobile: {\n true: {\n wrapper: 'flex-nowrap justify-between gap-x-2 gap-y-0',\n ranges: 'pr-0',\n sectionLabel: 'hidden',\n },\n },\n },\n});\n\nconst ui = computed<ReturnType<typeof paginationStyles>>(() => paginationStyles({ dense, mobile }));\n\nconst tableDefaults = useTable();\n\nconst {\n limits,\n currentLimit,\n pages,\n ranges,\n indicatorText,\n currentRange,\n useInputJump,\n hasPrev,\n hasNext,\n onPrev,\n onNext,\n onFirst,\n onLast,\n} = usePaginationNavigation(modelValue, tableDefaults, () => rangesThreshold);\n\nconst pageDraft = ref<string>(String(get(currentRange)));\n\nwatch(currentRange, (value) => {\n set(pageDraft, String(value));\n});\n\nfunction commitPageInput(): void {\n const parsed = Number.parseInt(get(pageDraft), 10);\n const maxPage = get(pages);\n if (!Number.isFinite(parsed) || maxPage === 0) {\n set(pageDraft, String(get(currentRange)));\n return;\n }\n const clamped = Math.min(Math.max(parsed, 1), maxPage);\n if (clamped !== get(currentRange))\n set(currentRange, clamped);\n set(pageDraft, String(clamped));\n}\n</script>\n\n<template>\n <div :class=\"ui.wrapper()\">\n <div\n :class=\"ui.limit()\"\n data-id=\"table-pagination-limit-section\"\n >\n <span :class=\"ui.sectionLabel()\">Rows per page:</span>\n <RuiMenuSelect\n v-model=\"currentLimit\"\n :options=\"limits\"\n :disabled=\"loading || disablePerPage\"\n label-class=\"!text-xs !min-h-8\"\n name=\"limit\"\n key-attr=\"limit\"\n text-attr=\"limit\"\n hide-details\n dense\n data-id=\"table-pagination-limit\"\n />\n </div>\n <div\n :class=\"ui.ranges()\"\n data-id=\"table-pagination-ranges-section\"\n >\n <span :class=\"ui.sectionLabel()\">{{ useInputJump ? 'Page' : 'Items #' }}</span>\n <RuiTextField\n v-if=\"useInputJump\"\n v-model=\"pageDraft\"\n :disabled=\"loading\"\n :class=\"[ui.pageInput()]\"\n class=\"[&_input]:!pr-0\"\n type=\"number\"\n min=\"1\"\n :max=\"pages\"\n inputmode=\"numeric\"\n hide-details\n dense\n data-id=\"table-pagination-ranges-input\"\n @blur=\"commitPageInput()\"\n @keydown.enter=\"commitPageInput()\"\n />\n <RuiMenuSelect\n v-else-if=\"ranges.length > 0\"\n v-model=\"currentRange\"\n :options=\"ranges\"\n :disabled=\"loading\"\n label-class=\"!text-xs !min-h-8\"\n name=\"ranges\"\n key-attr=\"page\"\n text-attr=\"text\"\n hide-details\n dense\n data-id=\"table-pagination-ranges\"\n />\n <span :class=\"ui.indicator()\">\n {{ indicatorText }}\n </span>\n </div>\n <div\n :class=\"ui.navigation()\"\n data-id=\"table-pagination-navigation\"\n >\n <RuiButton\n v-if=\"!mobile\"\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasPrev || loading\"\n variant=\"text\"\n icon\n data-id=\"table-pagination-first\"\n @click=\"onFirst()\"\n >\n <RuiIcon name=\"lu-chevrons-left\" />\n </RuiButton>\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasPrev || loading\"\n variant=\"text\"\n icon\n data-id=\"table-pagination-prev\"\n @click=\"onPrev()\"\n >\n <RuiIcon name=\"lu-chevron-left\" />\n </RuiButton>\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasNext || loading\"\n variant=\"text\"\n icon\n data-id=\"table-pagination-next\"\n @click=\"onNext()\"\n >\n <RuiIcon name=\"lu-chevron-right\" />\n </RuiButton>\n <RuiButton\n v-if=\"!mobile\"\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasNext || loading\"\n variant=\"text\"\n icon\n data-id=\"table-pagination-last\"\n @click=\"onLast()\"\n >\n <RuiIcon name=\"lu-chevrons-right\" />\n </RuiButton>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"RuiTablePagination.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tables/RuiTablePagination.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiMenuSelect from '@/components/forms/select/RuiMenuSelect.vue';\nimport RuiTextField from '@/components/forms/text-field/RuiTextField.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { type TablePaginationData, usePaginationNavigation } from '@/components/tables/use-pagination-navigation';\nimport { useTable } from '@/composables/defaults/table';\nimport { tv } from '@/utils/tv';\n\nexport type { TablePaginationData };\n\nexport interface Props {\n dense?: boolean;\n disablePerPage?: boolean;\n loading?: boolean;\n /**\n * Render a compact, touch-friendly layout: the sections spread across the\n * full width and the first/last jump buttons are dropped to save space.\n */\n mobile?: boolean;\n /**\n * Maximum number of pages before the jump-to-page dropdown is replaced\n * with a numeric input. Set to `0` to always use the input, or a very\n * large number to always use the dropdown. Defaults to `500` — past that\n * materialising the full range list stalls the main thread.\n */\n rangesThreshold?: number;\n}\n\nconst modelValue = defineModel<TablePaginationData>({ required: true });\n\nconst {\n dense = false,\n loading = false,\n disablePerPage = false,\n rangesThreshold = 500,\n mobile = false,\n} = defineProps<Props>();\n\nconst paginationStyles = tv({\n slots: {\n wrapper: 'relative flex flex-wrap items-center justify-end gap-x-4 gap-y-0',\n limit: 'flex items-center space-x-2 text-caption',\n ranges: 'flex items-center space-x-2 text-caption pr-2',\n pageInput: 'w-14 [&_input]:text-center',\n sectionLabel: 'text-rui-text-secondary whitespace-nowrap py-3',\n indicator: 'text-rui-text text-caption whitespace-nowrap',\n navigation: 'flex items-center',\n },\n variants: {\n dense: {\n true: {\n wrapper: 'gap-x-2',\n },\n },\n mobile: {\n true: {\n wrapper: 'flex-nowrap justify-between gap-x-2 gap-y-0',\n ranges: 'pr-0',\n sectionLabel: 'hidden',\n },\n },\n },\n});\n\nconst ui = computed<ReturnType<typeof paginationStyles>>(() => paginationStyles({ dense, mobile }));\n\nconst tableDefaults = useTable();\n\nconst {\n limits,\n currentLimit,\n pages,\n ranges,\n indicatorText,\n currentRange,\n useInputJump,\n hasPrev,\n hasNext,\n onPrev,\n onNext,\n onFirst,\n onLast,\n} = usePaginationNavigation(modelValue, tableDefaults, () => rangesThreshold);\n\nconst pageDraft = ref<string>(String(get(currentRange)));\n\nwatch(currentRange, (value) => {\n set(pageDraft, String(value));\n});\n\nfunction commitPageInput(): void {\n const parsed = Number.parseInt(get(pageDraft), 10);\n const maxPage = get(pages);\n if (!Number.isFinite(parsed) || maxPage === 0) {\n set(pageDraft, String(get(currentRange)));\n return;\n }\n const clamped = Math.min(Math.max(parsed, 1), maxPage);\n if (clamped !== get(currentRange))\n set(currentRange, clamped);\n set(pageDraft, String(clamped));\n}\n</script>\n\n<template>\n <div :class=\"ui.wrapper()\">\n <div\n :class=\"ui.limit()\"\n data-id=\"table-pagination-limit-section\"\n >\n <span :class=\"ui.sectionLabel()\">Rows per page:</span>\n <RuiMenuSelect\n v-model=\"currentLimit\"\n :options=\"limits\"\n :disabled=\"loading || disablePerPage\"\n label-class=\"!text-xs !min-h-8\"\n name=\"limit\"\n key-attr=\"limit\"\n text-attr=\"limit\"\n hide-details\n dense\n data-id=\"table-pagination-limit\"\n />\n </div>\n <div\n :class=\"ui.ranges()\"\n data-id=\"table-pagination-ranges-section\"\n >\n <span :class=\"ui.sectionLabel()\">{{ useInputJump ? 'Page' : 'Items #' }}</span>\n <RuiTextField\n v-if=\"useInputJump\"\n v-model=\"pageDraft\"\n :disabled=\"loading\"\n :class=\"[ui.pageInput()]\"\n class=\"[&_input]:!pr-0\"\n type=\"number\"\n min=\"1\"\n :max=\"pages\"\n inputmode=\"numeric\"\n hide-details\n dense\n data-id=\"table-pagination-ranges-input\"\n @blur=\"commitPageInput()\"\n @keydown.enter=\"commitPageInput()\"\n />\n <RuiMenuSelect\n v-else-if=\"ranges.length > 0\"\n v-model=\"currentRange\"\n :options=\"ranges\"\n :disabled=\"loading\"\n label-class=\"!text-xs !min-h-8\"\n name=\"ranges\"\n key-attr=\"page\"\n text-attr=\"text\"\n hide-details\n dense\n data-id=\"table-pagination-ranges\"\n />\n <span :class=\"ui.indicator()\">\n {{ indicatorText }}\n </span>\n </div>\n <div\n :class=\"ui.navigation()\"\n data-id=\"table-pagination-navigation\"\n >\n <RuiButton\n v-if=\"!mobile\"\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasPrev || loading\"\n variant=\"text\"\n icon\n data-id=\"table-pagination-first\"\n @click=\"onFirst()\"\n >\n <RuiIcon name=\"lu-chevrons-left\" />\n </RuiButton>\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasPrev || loading\"\n variant=\"text\"\n icon\n data-id=\"table-pagination-prev\"\n @click=\"onPrev()\"\n >\n <RuiIcon name=\"lu-chevron-left\" />\n </RuiButton>\n <RuiButton\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasNext || loading\"\n variant=\"text\"\n icon\n data-id=\"table-pagination-next\"\n @click=\"onNext()\"\n >\n <RuiIcon name=\"lu-chevron-right\" />\n </RuiButton>\n <RuiButton\n v-if=\"!mobile\"\n :size=\"dense ? 'sm' : undefined\"\n :disabled=\"!hasNext || loading\"\n variant=\"text\"\n icon\n data-id=\"table-pagination-last\"\n @click=\"onLast()\"\n >\n <RuiIcon name=\"lu-chevrons-right\" />\n </RuiButton>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { TableColumn } from '../../../components/tables/RuiTableHead.vue';
1
+ import type { TableColumn } from '../RuiTableHead.vue';
2
2
  import { type GroupHeader } from '../../../composables/tables/data-table/types.js';
3
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
4
  props: import("vue").PublicProps & __VLS_PrettifyLocal<{
@@ -1 +1 @@
1
- {"version":3,"file":"RuiDataTableBody.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../../src/components/tables/data-table/RuiDataTableBody.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { TableColumn } from '@/components/tables/RuiTableHead.vue';\nimport { useDataTableColumns, useDataTableRowIdentity, useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiDataTableEmptyRow from '@/components/tables/data-table/RuiDataTableEmptyRow.vue';\nimport RuiDataTableGroupRow from '@/components/tables/data-table/RuiDataTableGroupRow.vue';\nimport RuiDataTableLoadingRow from '@/components/tables/data-table/RuiDataTableLoadingRow.vue';\nimport RuiDataTableRow from '@/components/tables/data-table/RuiDataTableRow.vue';\nimport { type GroupHeader, isRow } from '@/composables/tables/data-table/types';\n\ndefineProps<{\n filtered: (T | GroupHeader<T>)[];\n loading: boolean;\n noData: boolean;\n empty: { label?: string; description?: string };\n}>();\n\ndefineSlots<Partial<\n Record<`item.${string}`, (props: { column: TableColumn<T>; row: T; index: number }) => any> & {\n 'body.prepend'?: (props: { colspan: number }) => any;\n 'body.append'?: (props: { colspan: number }) => any;\n 'group.header'?: (props: {\n colspan: number;\n header: GroupHeader<T>;\n isOpen: boolean;\n toggle: () => void;\n }) => any;\n 'group.header.content'?: (props: { header: GroupHeader<T>; groupKey: string }) => any;\n 'expanded-item'?: (props: { row: T; index: number }) => any;\n 'no-data'?: () => any;\n 'empty-description'?: () => any;\n }\n>>();\n\nconst { classes, colspan } = useDataTableStyling();\nconst { itemSlotKeys } = useDataTableColumns<T>();\nconst { getRowId } = useDataTableRowIdentity<T>();\n</script>\n\n<template>\n <tbody :class=\"classes.tbody\">\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n v-if=\"$slots['body.prepend']\"\n :colspan=\"colspan\"\n name=\"body.prepend\"\n />\n <template v-for=\"(row, index) in filtered\">\n <RuiDataTableGroupRow\n v-if=\"!isRow(row)\"\n :key=\"`group-${row.identifier}`\"\n :row=\"row\"\n >\n <template\n v-if=\"$slots['group.header']\"\n #group.header=\"slotData\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"group.header\"\n v-bind=\"slotData\"\n />\n </template>\n <template\n v-if=\"$slots['group.header.content']\"\n #group.header.content=\"slotData\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"group.header.content\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiDataTableGroupRow>\n <RuiDataTableRow\n v-else\n :key=\"`row-${getRowId(row)}`\"\n :row=\"row\"\n :index=\"index\"\n >\n <template\n v-for=\"key in itemSlotKeys\"\n #[`item.${key}`]=\"slotData\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n :name=\"`item.${key}`\"\n v-bind=\"slotData\"\n />\n </template>\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 </RuiDataTableRow>\n </template>\n <RuiDataTableLoadingRow v-if=\"loading && noData\" />\n <RuiDataTableEmptyRow\n v-if=\"noData && empty && !loading\"\n :empty=\"empty\"\n >\n <template\n v-if=\"$slots['no-data']\"\n #no-data\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot name=\"no-data\" />\n </template>\n <template\n v-if=\"$slots['empty-description']\"\n #empty-description\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot name=\"empty-description\" />\n </template>\n </RuiDataTableEmptyRow>\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n v-if=\"$slots['body.append']\"\n :colspan=\"colspan\"\n name=\"body.append\"\n />\n </tbody>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;EAiCA,MAAM,EAAE,SAAS,YAAY,oBAAoB;EACjD,MAAM,EAAE,iBAAiB,oBAAuB;EAChD,MAAM,EAAE,aAAa,wBAA2B;;uBAI9C,mBAwFQ,SAAA,EAxFA,OAAK,eAAE,MAAA,OAAA,CAAO,CAAC,KAAK,EAAA,GAAA;IAGlBA,KAAAA,OAAM,kBADd,WAIE,KAAA,QAAA,gBAAA,EAFC,SAAS,MAAA,OAAA,EAAO,GAAA,KAAA,GAAA,KAAA,GAAA,CAAA,IAAA,mBAAA,IAAA,IAAA;sBAGnB,mBAsDW,UAAA,MAAA,WAtDsB,QAAA,WAAf,KAAK,UAAK;8DAEjB,MAAA,KAAA,CAAK,CAAC,GAAG,KAAA,UAAA,GADlB,YAyBuB,8BAAA;MAvBpB,KAAG,SAAW,IAAI;MACb;+BAGEA,KAAAA,OAAM,kBAAA;YACX;mBAAc,aAAQ,CAGvB,WAGE,KAAA,QAAA,gBAHF,WAGE,EAAA,SAAA,KAAA,GADQ,QAAQ,CAAA,CAAA,CAAA;;iBAIZA,KAAAA,OAAM,0BAAA;YACX;mBAAsB,aAAQ,CAG/B,WAGE,KAAA,QAAA,wBAHF,WAGE,EAAA,SAAA,KAAA,GADQ,QAAQ,CAAA,CAAA,CAAA;;mDAItB,YA0BkB,yBAAA;MAxBf,KAAG,OAAS,MAAA,QAAA,CAAQ,CAAC,GAAG;MACnB;MACE;0CAGQ,MAAA,YAAA,IAAP,QAAG;;qBACD;oBAAS,aAAQ,CAG1B,WAGE,KAAA,QAAA,QAFe,OADjB,WAGE,EAAA,SAAA,KAAA,GADQ,QAAQ,CAAA,CAAA,CAAA;;SAIZA,KAAAA,OAAM,mBAAA;YACX;mBAAe,aAAQ,CAGxB,WAGE,KAAA,QAAA,iBAHF,WAGE,EAAA,SAAA,KAAA,GADQ,QAAQ,CAAA,CAAA,CAAA;;;;IAKM,QAAA,WAAW,QAAA,UAAA,UAAA,GAAzC,YAAmD,gCAAA,EAAA,KAAA,EAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;IAE3C,QAAA,UAAU,QAAA,SAAK,CAAK,QAAA,WAAA,UAAA,GAD5B,YAkBuB,8BAAA;;KAhBpB,OAAO,QAAA;8BAGAA,KAAAA,OAAM,aAAA;WACX;uBAGsB,CAAvB,WAAuB,KAAA,QAAA,SAAA,CAAA,CAAA;;gBAGjBA,KAAAA,OAAM,uBAAA;WACX;uBAGgC,CAAjC,WAAiC,KAAA,QAAA,mBAAA,CAAA,CAAA;;;IAK7BA,KAAAA,OAAM,iBADd,WAIE,KAAA,QAAA,eAAA,EAFC,SAAS,MAAA,OAAA,EAAO,GAAA,KAAA,GAAA,KAAA,GAAA,CAAA,IAAA,mBAAA,IAAA,IAAA"}
1
+ {"version":3,"file":"RuiDataTableBody.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../../src/components/tables/data-table/RuiDataTableBody.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { TableColumn } from '@/components/tables/RuiTableHead.vue';\nimport { useDataTableColumns, useDataTableRowIdentity, useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiDataTableEmptyRow from '@/components/tables/data-table/RuiDataTableEmptyRow.vue';\nimport RuiDataTableGroupRow from '@/components/tables/data-table/RuiDataTableGroupRow.vue';\nimport RuiDataTableLoadingRow from '@/components/tables/data-table/RuiDataTableLoadingRow.vue';\nimport RuiDataTableRow from '@/components/tables/data-table/RuiDataTableRow.vue';\nimport { type GroupHeader, isRow } from '@/composables/tables/data-table/types';\n\ndefineProps<{\n filtered: (T | GroupHeader<T>)[];\n loading: boolean;\n noData: boolean;\n empty: { label?: string; description?: string };\n}>();\n\ndefineSlots<Partial<\n Record<`item.${string}`, (props: { column: TableColumn<T>; row: T; index: number }) => any> & {\n 'body.prepend'?: (props: { colspan: number }) => any;\n 'body.append'?: (props: { colspan: number }) => any;\n 'group.header'?: (props: {\n colspan: number;\n header: GroupHeader<T>;\n isOpen: boolean;\n toggle: () => void;\n }) => any;\n 'group.header.content'?: (props: { header: GroupHeader<T>; groupKey: string }) => any;\n 'expanded-item'?: (props: { row: T; index: number }) => any;\n 'no-data'?: () => any;\n 'empty-description'?: () => any;\n }\n>>();\n\nconst { classes, colspan } = useDataTableStyling();\nconst { itemSlotKeys } = useDataTableColumns<T>();\nconst { getRowId } = useDataTableRowIdentity<T>();\n</script>\n\n<template>\n <tbody :class=\"classes.tbody\">\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n v-if=\"$slots['body.prepend']\"\n :colspan=\"colspan\"\n name=\"body.prepend\"\n />\n <template v-for=\"(row, index) in filtered\">\n <RuiDataTableGroupRow\n v-if=\"!isRow(row)\"\n :key=\"`group-${row.identifier}`\"\n :row=\"row\"\n >\n <template\n v-if=\"$slots['group.header']\"\n #group.header=\"slotData\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"group.header\"\n v-bind=\"slotData\"\n />\n </template>\n <template\n v-if=\"$slots['group.header.content']\"\n #group.header.content=\"slotData\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"group.header.content\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiDataTableGroupRow>\n <RuiDataTableRow\n v-else\n :key=\"`row-${getRowId(row)}`\"\n :row=\"row\"\n :index=\"index\"\n >\n <template\n v-for=\"key in itemSlotKeys\"\n #[`item.${key}`]=\"slotData\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n :name=\"`item.${key}`\"\n v-bind=\"slotData\"\n />\n </template>\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 </RuiDataTableRow>\n </template>\n <RuiDataTableLoadingRow v-if=\"loading && noData\" />\n <RuiDataTableEmptyRow\n v-if=\"noData && empty && !loading\"\n :empty=\"empty\"\n >\n <template\n v-if=\"$slots['no-data']\"\n #no-data\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot name=\"no-data\" />\n </template>\n <template\n v-if=\"$slots['empty-description']\"\n #empty-description\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot name=\"empty-description\" />\n </template>\n </RuiDataTableEmptyRow>\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n v-if=\"$slots['body.append']\"\n :colspan=\"colspan\"\n name=\"body.append\"\n />\n </tbody>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;EAiCA,MAAM,EAAE,SAAS,YAAY,oBAAoB;EACjD,MAAM,EAAE,iBAAiB,oBAAuB;EAChD,MAAM,EAAE,aAAa,wBAA2B;;GAI9C,OAAA,UAAA,GAAA,mBAwFQ,SAAA,EAxFA,OAAK,eAAE,MAAA,OAAA,CAAO,CAAC,KAAK,EAAA,GAAA;IAGlBA,KAAAA,OAAM,kBADd,WAIE,KAAA,QAAA,gBAAA,EAFC,SAAS,MAAA,OAAA,EAAO,GAAA,KAAA,GAAA,KAAA,GAAA,CAAA,IAAA,mBAAA,IAAA,IAAA;KAGnB,UAAA,IAAA,GAAA,mBAsDW,UAAA,MAAA,WAtDsB,QAAA,WAAf,KAAK,UAAK;KAEjB,OAAA,UAAA,GAAA,mBAAA,UAAA,MAAA,CAAA,CAAA,MAAA,KAAA,CAAK,CAAC,GAAG,KADlB,UAAA,GAAA,YAyBuB,8BAAA;MAvBpB,KAAG,SAAW,IAAI;MACb;KAGEA,GAAAA,YAAAA,EAAAA,GAAAA,EAAAA,GAAAA,CAAAA,KAAAA,OAAM,kBAAA;MACX,MAAA;MAGD,IAAA,SAHe,aAAQ,CAGvB,WAGE,KAAA,QAAA,gBAHF,WAGE,EAAA,SAAA,KAAA,GADQ,QAAQ,CAAA,CAAA,CAAA;;KAIZA,IAAAA,KAAAA,GAAAA,KAAAA,OAAM,0BAAA;MACX,MAAA;MAGD,IAAA,SAHuB,aAAQ,CAG/B,WAGE,KAAA,QAAA,wBAHF,WAGE,EAAA,SAAA,KAAA,GADQ,QAAQ,CAAA,CAAA,CAAA;;KAItB,IAAA,KAAA,CAAA,CAAA,GAAA,MAAA,CAAA,KAAA,CAAA,MAAA,UAAA,GAAA,YA0BkB,yBAAA;MAxBf,KAAG,OAAS,MAAA,QAAA,CAAQ,CAAC,GAAG;MACnB;MACE;KAGQ,GAAA,YAAA,EAAA,GAAA,EAAA,GAAA,CAAA,WAAA,MAAA,YAAA,IAAP,QAAG;;OACD,MAAA,QAAA;OAGT,IAAA,SAHkB,aAAQ,CAG1B,WAGE,KAAA,QAAA,QAFe,OADjB,WAGE,EAAA,SAAA,KAAA,GADQ,QAAQ,CAAA,CAAA,CAAA;;KAIZA,CAAAA,GAAAA,KAAAA,OAAM,mBAAA;MACX,MAAA;MAGD,IAAA,SAHgB,aAAQ,CAGxB,WAGE,KAAA,QAAA,iBAHF,WAGE,EAAA,SAAA,KAAA,GADQ,QAAQ,CAAA,CAAA,CAAA;;;;IAKM,QAAA,WAAW,QAAA,UAAzC,UAAA,GAAA,YAAmD,gCAAA,EAAA,KAAA,EAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;IAE3C,QAAA,UAAU,QAAA,SAAK,CAAK,QAAA,WAD5B,UAAA,GAAA,YAkBuB,8BAAA;;KAhBpB,OAAO,QAAA;IAGAA,GAAAA,YAAAA,EAAAA,GAAAA,EAAAA,GAAAA,CAAAA,KAAAA,OAAM,aAAA;KACX,MAAA;KAGD,IAAA,cAAuB,CAAvB,WAAuB,KAAA,QAAA,SAAA,CAAA,CAAA;;IAGjBA,IAAAA,KAAAA,GAAAA,KAAAA,OAAM,uBAAA;KACX,MAAA;KAGD,IAAA,cAAiC,CAAjC,WAAiC,KAAA,QAAA,mBAAA,CAAA,CAAA;;;IAK7BA,KAAAA,OAAM,iBADd,WAIE,KAAA,QAAA,eAAA,EAFC,SAAS,MAAA,OAAA,EAAO,GAAA,KAAA,GAAA,KAAA,GAAA,CAAA,IAAA,mBAAA,IAAA,IAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiDataTableCell.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableCell.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { TableColumn } from '@/components/tables/RuiTableHead.vue';\nimport { useDataTableColumns, useDataTableExpansion, useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\n\nconst { column } = defineProps<{\n column: TableColumn<T>;\n row: T;\n index: number;\n rowId?: T[keyof T];\n}>();\n\ndefineSlots<{\n default?: (props: { column: TableColumn<T>; row: T; index: number }) => any;\n}>();\n\nconst { cellValue, columnAttr, itemSlotKeys } = useDataTableColumns<T>();\nconst { isExpanded, onToggleExpand } = useDataTableExpansion<T>();\nconst { isMobile } = useDataTableStyling();\n\n// The built-in toggle is only a fallback for consumers that do not drive the\n// expand column themselves. A consumer that provides `#item.expand` owns the\n// decision per row, including rendering nothing for a row that cannot expand,\n// so slot emptiness must not fall back to a toggle they deliberately withheld.\nconst ownsExpandColumn = computed<boolean>(() => itemSlotKeys.has('expand'));\n\nconst mobileLabel = computed<string>(() => {\n const label = column[columnAttr];\n return label === undefined || label === null ? '' : String(label);\n});\nconst showMobileLabel = computed<boolean>(() => get(isMobile) && column.key !== 'expand' && get(mobileLabel).length > 0);\n</script>\n\n<template>\n <td\n :class=\"[\n column.tdClass,\n column.cellClass,\n isMobile ? 'flex items-start justify-between gap-4 text-right' : '',\n ]\"\n :colspan=\"column.colspan ?? 1\"\n :rowspan=\"column.rowspan ?? 1\"\n >\n <span\n v-if=\"showMobileLabel\"\n aria-hidden=\"true\"\n class=\"shrink-0 text-left font-medium text-rui-text-secondary\"\n data-id=\"cell-label\"\n >\n {{ mobileLabel }}\n </span>\n <div :class=\"isMobile ? 'min-w-0 ml-auto' : 'contents'\">\n <slot\n :column=\"column\"\n :row=\"row\"\n :index=\"index\"\n >\n <RuiExpandButton\n v-if=\"column.key === 'expand' && !ownsExpandColumn\"\n :expanded=\"rowId !== undefined && isExpanded(rowId)\"\n @click=\"onToggleExpand(row)\"\n />\n <template v-else-if=\"column.key !== 'expand'\">\n {{ cellValue(row, column.key) }}\n </template>\n </slot>\n </div>\n </td>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RuiDataTableCell.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableCell.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { TableColumn } from '@/components/tables/RuiTableHead.vue';\nimport { useDataTableColumns, useDataTableExpansion, useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\n\nconst { column } = defineProps<{\n column: TableColumn<T>;\n row: T;\n index: number;\n rowId?: T[keyof T];\n}>();\n\ndefineSlots<{\n default?: (props: { column: TableColumn<T>; row: T; index: number }) => any;\n}>();\n\nconst { cellValue, columnAttr, itemSlotKeys } = useDataTableColumns<T>();\nconst { isExpanded, onToggleExpand } = useDataTableExpansion<T>();\nconst { isMobile } = useDataTableStyling();\n\n/**\n * The built-in toggle is only a fallback for a consumer that does not drive\n * the expand column itself. One that provides `#item.expand` owns the decision\n * per row, rendering nothing for a row that cannot expand among them, so an\n * empty slot must not fall back to a toggle they deliberately withheld.\n */\nconst ownsExpandColumn = computed<boolean>(() => itemSlotKeys.has('expand'));\n\nconst mobileLabel = computed<string>(() => {\n const label = column[columnAttr];\n return label === undefined || label === null ? '' : String(label);\n});\nconst showMobileLabel = computed<boolean>(() => get(isMobile) && column.key !== 'expand' && get(mobileLabel).length > 0);\n</script>\n\n<template>\n <td\n :class=\"[\n column.tdClass,\n column.cellClass,\n isMobile ? 'flex items-start justify-between gap-4 text-right' : '',\n ]\"\n :colspan=\"column.colspan ?? 1\"\n :rowspan=\"column.rowspan ?? 1\"\n >\n <span\n v-if=\"showMobileLabel\"\n aria-hidden=\"true\"\n class=\"shrink-0 text-left font-medium text-rui-text-secondary\"\n data-id=\"cell-label\"\n >\n {{ mobileLabel }}\n </span>\n <div :class=\"isMobile ? 'min-w-0 ml-auto' : 'contents'\">\n <slot\n :column=\"column\"\n :row=\"row\"\n :index=\"index\"\n >\n <RuiExpandButton\n v-if=\"column.key === 'expand' && !ownsExpandColumn\"\n :expanded=\"rowId !== undefined && isExpanded(rowId)\"\n @click=\"onToggleExpand(row)\"\n />\n <template v-else-if=\"column.key !== 'expand'\">\n {{ cellValue(row, column.key) }}\n </template>\n </slot>\n </div>\n </td>\n</template>\n"],"mappings":""}
@@ -1,4 +1,4 @@
1
- import type { TableColumn } from '../../../components/tables/RuiTableHead.vue';
1
+ import type { TableColumn } from '../RuiTableHead.vue';
2
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
3
  props: import("vue").PublicProps & __VLS_PrettifyLocal<{
4
4
  column: TableColumn<T>;
@@ -22,6 +22,12 @@ var RuiDataTableCell_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
22
22
  const { cellValue, columnAttr, itemSlotKeys } = useDataTableColumns();
23
23
  const { isExpanded, onToggleExpand } = useDataTableExpansion();
24
24
  const { isMobile } = useDataTableStyling();
25
+ /**
26
+ * The built-in toggle is only a fallback for a consumer that does not drive
27
+ * the expand column itself. One that provides `#item.expand` owns the decision
28
+ * per row, rendering nothing for a row that cannot expand among them, so an
29
+ * empty slot must not fall back to a toggle they deliberately withheld.
30
+ */
25
31
  const ownsExpandColumn = computed(() => itemSlotKeys.has("expand"));
26
32
  const mobileLabel = computed(() => {
27
33
  const label = __props.column[columnAttr];
@@ -1 +1 @@
1
- {"version":3,"file":"RuiDataTableCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableCell.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { TableColumn } from '@/components/tables/RuiTableHead.vue';\nimport { useDataTableColumns, useDataTableExpansion, useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\n\nconst { column } = defineProps<{\n column: TableColumn<T>;\n row: T;\n index: number;\n rowId?: T[keyof T];\n}>();\n\ndefineSlots<{\n default?: (props: { column: TableColumn<T>; row: T; index: number }) => any;\n}>();\n\nconst { cellValue, columnAttr, itemSlotKeys } = useDataTableColumns<T>();\nconst { isExpanded, onToggleExpand } = useDataTableExpansion<T>();\nconst { isMobile } = useDataTableStyling();\n\n// The built-in toggle is only a fallback for consumers that do not drive the\n// expand column themselves. A consumer that provides `#item.expand` owns the\n// decision per row, including rendering nothing for a row that cannot expand,\n// so slot emptiness must not fall back to a toggle they deliberately withheld.\nconst ownsExpandColumn = computed<boolean>(() => itemSlotKeys.has('expand'));\n\nconst mobileLabel = computed<string>(() => {\n const label = column[columnAttr];\n return label === undefined || label === null ? '' : String(label);\n});\nconst showMobileLabel = computed<boolean>(() => get(isMobile) && column.key !== 'expand' && get(mobileLabel).length > 0);\n</script>\n\n<template>\n <td\n :class=\"[\n column.tdClass,\n column.cellClass,\n isMobile ? 'flex items-start justify-between gap-4 text-right' : '',\n ]\"\n :colspan=\"column.colspan ?? 1\"\n :rowspan=\"column.rowspan ?? 1\"\n >\n <span\n v-if=\"showMobileLabel\"\n aria-hidden=\"true\"\n class=\"shrink-0 text-left font-medium text-rui-text-secondary\"\n data-id=\"cell-label\"\n >\n {{ mobileLabel }}\n </span>\n <div :class=\"isMobile ? 'min-w-0 ml-auto' : 'contents'\">\n <slot\n :column=\"column\"\n :row=\"row\"\n :index=\"index\"\n >\n <RuiExpandButton\n v-if=\"column.key === 'expand' && !ownsExpandColumn\"\n :expanded=\"rowId !== undefined && isExpanded(rowId)\"\n @click=\"onToggleExpand(row)\"\n />\n <template v-else-if=\"column.key !== 'expand'\">\n {{ cellValue(row, column.key) }}\n </template>\n </slot>\n </div>\n </td>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAgBA,MAAM,EAAE,WAAW,YAAY,iBAAiB,oBAAuB;EACvE,MAAM,EAAE,YAAY,mBAAmB,sBAAyB;EAChE,MAAM,EAAE,aAAa,oBAAoB;EAMzC,MAAM,mBAAmB,eAAwB,aAAa,IAAI,QAAQ,CAAC;EAE3E,MAAM,cAAc,eAAuB;GACzC,MAAM,QAAQ,QAAA,OAAO;GACrB,OAAO,UAAU,KAAA,KAAa,UAAU,OAAO,KAAK,OAAO,KAAK;EAClE,CAAC;EACD,MAAM,kBAAkB,eAAwB,IAAI,QAAQ,KAAK,QAAA,OAAO,QAAQ,YAAY,IAAI,WAAW,CAAC,CAAC,SAAS,CAAC;;uBAIrH,mBAiCK,MAAA;IAhCF,OAAK,eAAA;KAAU,QAAA,OAAO;KAAe,QAAA,OAAO;KAAiB,MAAA,QAAA,IAAQ,sDAAA;;IAKrE,SAAS,QAAA,OAAO,WAAO;IACvB,SAAS,QAAA,OAAO,WAAO;OAGhB,MAAA,eAAA,KAAA,UAAA,GADR,mBAOO,QAPP,YAOO,gBADF,MAAA,WAAA,CAAW,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,GAEhB,mBAeM,OAAA,EAfA,OAAK,eAAE,MAAA,QAAA,IAAQ,oBAAA,UAAA,EAAA,GAAA,CACnB,WAaO,KAAA,QAAA,WAAA;IAZJ,QAAQ,QAAA;IACR,KAAK,QAAA;IACL,OAAO,QAAA;YAUH,CAPG,QAAA,OAAO,QAAG,YAAA,CAAkB,MAAA,gBAAA,KAAA,UAAA,GADpC,YAIE,yBAAA;;IAFC,UAAU,QAAA,UAAU,KAAA,KAAa,MAAA,UAAA,CAAU,CAAC,QAAA,KAAK;IACjD,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,cAAA,CAAc,CAAC,QAAA,GAAG;gCAEP,QAAA,OAAO,QAAG,YAAA,UAAA,GAA/B,mBAEW,UAAA,EAAA,KAAA,EAAA,GAAA,CAAA,gBAAA,gBADN,MAAA,SAAA,CAAS,CAAC,QAAA,KAAK,QAAA,OAAO,GAAG,CAAA,GAAA,CAAA,CAAA,GAAA,EAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAA,UAAA"}
1
+ {"version":3,"file":"RuiDataTableCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableCell.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { TableColumn } from '@/components/tables/RuiTableHead.vue';\nimport { useDataTableColumns, useDataTableExpansion, useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\n\nconst { column } = defineProps<{\n column: TableColumn<T>;\n row: T;\n index: number;\n rowId?: T[keyof T];\n}>();\n\ndefineSlots<{\n default?: (props: { column: TableColumn<T>; row: T; index: number }) => any;\n}>();\n\nconst { cellValue, columnAttr, itemSlotKeys } = useDataTableColumns<T>();\nconst { isExpanded, onToggleExpand } = useDataTableExpansion<T>();\nconst { isMobile } = useDataTableStyling();\n\n/**\n * The built-in toggle is only a fallback for a consumer that does not drive\n * the expand column itself. One that provides `#item.expand` owns the decision\n * per row, rendering nothing for a row that cannot expand among them, so an\n * empty slot must not fall back to a toggle they deliberately withheld.\n */\nconst ownsExpandColumn = computed<boolean>(() => itemSlotKeys.has('expand'));\n\nconst mobileLabel = computed<string>(() => {\n const label = column[columnAttr];\n return label === undefined || label === null ? '' : String(label);\n});\nconst showMobileLabel = computed<boolean>(() => get(isMobile) && column.key !== 'expand' && get(mobileLabel).length > 0);\n</script>\n\n<template>\n <td\n :class=\"[\n column.tdClass,\n column.cellClass,\n isMobile ? 'flex items-start justify-between gap-4 text-right' : '',\n ]\"\n :colspan=\"column.colspan ?? 1\"\n :rowspan=\"column.rowspan ?? 1\"\n >\n <span\n v-if=\"showMobileLabel\"\n aria-hidden=\"true\"\n class=\"shrink-0 text-left font-medium text-rui-text-secondary\"\n data-id=\"cell-label\"\n >\n {{ mobileLabel }}\n </span>\n <div :class=\"isMobile ? 'min-w-0 ml-auto' : 'contents'\">\n <slot\n :column=\"column\"\n :row=\"row\"\n :index=\"index\"\n >\n <RuiExpandButton\n v-if=\"column.key === 'expand' && !ownsExpandColumn\"\n :expanded=\"rowId !== undefined && isExpanded(rowId)\"\n @click=\"onToggleExpand(row)\"\n />\n <template v-else-if=\"column.key !== 'expand'\">\n {{ cellValue(row, column.key) }}\n </template>\n </slot>\n </div>\n </td>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAgBA,MAAM,EAAE,WAAW,YAAY,iBAAiB,oBAAuB;EACvE,MAAM,EAAE,YAAY,mBAAmB,sBAAyB;EAChE,MAAM,EAAE,aAAa,oBAAoB;;;;;;;EAQzC,MAAM,mBAAmB,eAAwB,aAAa,IAAI,QAAQ,CAAC;EAE3E,MAAM,cAAc,eAAuB;GACzC,MAAM,QAAQ,QAAA,OAAO;GACrB,OAAO,UAAU,KAAA,KAAa,UAAU,OAAO,KAAK,OAAO,KAAK;EAClE,CAAC;EACD,MAAM,kBAAkB,eAAwB,IAAI,QAAQ,KAAK,QAAA,OAAO,QAAQ,YAAY,IAAI,WAAW,CAAC,CAAC,SAAS,CAAC;;GAIrH,OAAA,UAAA,GAAA,mBAiCK,MAAA;IAhCF,OAAK,eAAA;KAAU,QAAA,OAAO;KAAe,QAAA,OAAO;KAAiB,MAAA,QAAA,IAAQ,sDAAA;;IAKrE,SAAS,QAAA,OAAO,WAAO;IACvB,SAAS,QAAA,OAAO,WAAO;GAGhB,GAAA,CAAA,MAAA,eAAA,KADR,UAAA,GAAA,mBAOO,QAPP,YAOO,gBADF,MAAA,WAAA,CAAW,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,GAEhB,mBAeM,OAAA,EAfA,OAAK,eAAE,MAAA,QAAA,IAAQ,oBAAA,UAAA,EAAA,GAAA,CACnB,WAaO,KAAA,QAAA,WAAA;IAZJ,QAAQ,QAAA;IACR,KAAK,QAAA;IACL,OAAO,QAAA;GAHV,SAaO,CAPG,QAAA,OAAO,QAAG,YAAA,CAAkB,MAAA,gBAAA,KADpC,UAAA,GAAA,YAIE,yBAAA;;IAFC,UAAU,QAAA,UAAU,KAAA,KAAa,MAAA,UAAA,CAAU,CAAC,QAAA,KAAK;IACjD,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,cAAA,CAAc,CAAC,QAAA,GAAG;GAEP,GAAA,MAAA,GAAA,CAAA,UAAA,CAAA,KAAA,QAAA,OAAO,QAAG,YAA/B,UAAA,GAAA,mBAEW,UAAA,EAAA,KAAA,EAAA,GAAA,CADN,gBAAA,gBAAA,MAAA,SAAA,CAAS,CAAC,QAAA,KAAK,QAAA,OAAO,GAAG,CAAA,GAAA,CAAA,CAAA,GAAA,EAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAA,UAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiDataTableEmptyRow.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../../src/components/tables/data-table/RuiDataTableEmptyRow.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiTableEmptyState from '@/components/tables/RuiTableEmptyState.vue';\n\ndefineProps<{\n empty: { label?: string; description?: string };\n}>();\n\ndefineSlots<{\n 'no-data'?: () => any;\n 'empty-description'?: () => any;\n}>();\n\nconst { classes, colspan } = useDataTableStyling();\n</script>\n\n<template>\n <tr\n :class=\"classes.trEmpty\"\n data-id=\"row-empty\"\n >\n <Transition\n appear\n enter-active-class=\"transition ease-out duration-200 delay-200\"\n enter-from-class=\"opacity-0 translate-y-1\"\n enter-to-class=\"opacity-100 translate-y-0\"\n leave-active-class=\"transition ease-in duration-150\"\n leave-from-class=\"opacity-100 translate-y-0\"\n leave-to-class=\"opacity-0 translate-y-1\"\n >\n <td\n :class=\"classes.td\"\n :colspan=\"colspan\"\n >\n <slot name=\"no-data\">\n <RuiTableEmptyState\n :label=\"empty.label\"\n :description=\"empty.description\"\n >\n <template\n v-if=\"$slots['empty-description']\"\n #description\n >\n <slot name=\"empty-description\" />\n </template>\n </RuiTableEmptyState>\n </slot>\n </td>\n </Transition>\n </tr>\n</template>\n"],"mappings":";;;;;;;;;EAaA,MAAM,EAAE,SAAS,YAAY,oBAAoB;;uBAI/C,mBAgCK,MAAA;IA/BF,OAAK,eAAE,MAAA,OAAA,CAAO,CAAC,OAAO;IACvB,WAAQ;OAER,YA2Ba,YAAA;IA1BX,QAAA;IACA,sBAAmB;IACnB,oBAAiB;IACjB,kBAAe;IACf,sBAAmB;IACnB,oBAAiB;IACjB,kBAAe;;2BAmBV,CAjBL,mBAiBK,MAAA;KAhBF,OAAK,eAAE,MAAA,OAAA,CAAO,CAAC,EAAE;KACjB,SAAS,MAAA,OAAA;QAEV,WAYO,KAAA,QAAA,WAAA,CAAA,SAAA,CAXL,YAUqB,4BAAA;KATlB,OAAO,QAAA,MAAM;KACb,aAAa,QAAA,MAAM;8BAGZA,KAAAA,OAAM,uBAAA;WACX;uBAEgC,CAAjC,WAAiC,KAAA,QAAA,mBAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"RuiDataTableEmptyRow.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../../src/components/tables/data-table/RuiDataTableEmptyRow.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiTableEmptyState from '@/components/tables/RuiTableEmptyState.vue';\n\ndefineProps<{\n empty: { label?: string; description?: string };\n}>();\n\ndefineSlots<{\n 'no-data'?: () => any;\n 'empty-description'?: () => any;\n}>();\n\nconst { classes, colspan } = useDataTableStyling();\n</script>\n\n<template>\n <tr\n :class=\"classes.trEmpty\"\n data-id=\"row-empty\"\n >\n <Transition\n appear\n enter-active-class=\"transition ease-out duration-200 delay-200\"\n enter-from-class=\"opacity-0 translate-y-1\"\n enter-to-class=\"opacity-100 translate-y-0\"\n leave-active-class=\"transition ease-in duration-150\"\n leave-from-class=\"opacity-100 translate-y-0\"\n leave-to-class=\"opacity-0 translate-y-1\"\n >\n <td\n :class=\"classes.td\"\n :colspan=\"colspan\"\n >\n <slot name=\"no-data\">\n <RuiTableEmptyState\n :label=\"empty.label\"\n :description=\"empty.description\"\n >\n <template\n v-if=\"$slots['empty-description']\"\n #description\n >\n <slot name=\"empty-description\" />\n </template>\n </RuiTableEmptyState>\n </slot>\n </td>\n </Transition>\n </tr>\n</template>\n"],"mappings":";;;;;;;;;EAaA,MAAM,EAAE,SAAS,YAAY,oBAAoB;;GAI/C,OAAA,UAAA,GAAA,mBAgCK,MAAA;IA/BF,OAAK,eAAE,MAAA,OAAA,CAAO,CAAC,OAAO;IACvB,WAAQ;GAER,GAAA,CAAA,YA2Ba,YAAA;IA1BX,QAAA;IACA,sBAAmB;IACnB,oBAAiB;IACjB,kBAAe;IACf,sBAAmB;IACnB,oBAAiB;IACjB,kBAAe;;IAEf,SAAA,cAiBK,CAjBL,mBAiBK,MAAA;KAhBF,OAAK,eAAE,MAAA,OAAA,CAAO,CAAC,EAAE;KACjB,SAAS,MAAA,OAAA;IAEV,GAAA,CAAA,WAYO,KAAA,QAAA,WAAA,CAAA,SAAA,CAXL,YAUqB,4BAAA;KATlB,OAAO,QAAA,MAAM;KACb,aAAa,QAAA,MAAM;IAGZA,GAAAA,YAAAA,EAAAA,GAAAA,EAAAA,GAAAA,CAAAA,KAAAA,OAAM,uBAAA;KACX,MAAA;KAED,IAAA,cAAiC,CAAjC,WAAiC,KAAA,QAAA,mBAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiDataTableExpandedRow.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableExpandedRow.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport { useDataTableStyling } from '@/components/tables/data-table/context';\n\ndefineProps<{\n row: T;\n index: number;\n}>();\n\ndefineSlots<{\n 'expanded-item': (props: { row: T; index: number }) => any;\n}>();\n\nconst { classes, colspan, isMobile } = useDataTableStyling();\n\n// On mobile the expanded content attaches beneath its card: matching side\n// borders and a rounded, bordered bottom edge. The top border is intentionally\n// left off — the parent card's flattened bottom edge acts as the divider.\n// `!border-b` defeats the `divide-y-0` on the mobile tbody.\nconst mobileExpandedClass = 'block border-x !border-b border-black/[0.12] dark:border-white/[0.12] rounded-b-lg mb-3 overflow-hidden';\n</script>\n\n<template>\n <tr\n :class=\"[classes.trExpandable, isMobile ? mobileExpandedClass : '']\"\n data-id=\"row-expanded\"\n >\n <td\n :colspan=\"colspan\"\n :class=\"classes.td\"\n >\n <slot\n name=\"expanded-item\"\n :row=\"row\"\n :index=\"index\"\n />\n </td>\n </tr>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RuiDataTableExpandedRow.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableExpandedRow.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport { useDataTableStyling } from '@/components/tables/data-table/context';\n\ndefineProps<{\n row: T;\n index: number;\n}>();\n\ndefineSlots<{\n 'expanded-item': (props: { row: T; index: number }) => any;\n}>();\n\nconst { classes, colspan, isMobile } = useDataTableStyling();\n\n/**\n * On mobile the expanded content attaches beneath its card: matching side\n * borders and a rounded, bordered bottom edge. It carries no top border, since\n * the parent card's flattened bottom edge is the divider, and `!border-b`\n * defeats the `divide-y-0` on the mobile tbody.\n */\nconst mobileExpandedClass = 'block border-x !border-b border-black/[0.12] dark:border-white/[0.12] rounded-b-lg mb-3 overflow-hidden';\n</script>\n\n<template>\n <tr\n :class=\"[classes.trExpandable, isMobile ? mobileExpandedClass : '']\"\n data-id=\"row-expanded\"\n >\n <td\n :colspan=\"colspan\"\n :class=\"classes.td\"\n >\n <slot\n name=\"expanded-item\"\n :row=\"row\"\n :index=\"index\"\n />\n </td>\n </tr>\n</template>\n"],"mappings":""}
@@ -11,6 +11,12 @@ var RuiDataTableExpandedRow_vue_vue_type_script_setup_true_lang_default = /*@__P
11
11
  },
12
12
  setup(__props) {
13
13
  const { classes, colspan, isMobile } = useDataTableStyling();
14
+ /**
15
+ * On mobile the expanded content attaches beneath its card: matching side
16
+ * borders and a rounded, bordered bottom edge. It carries no top border, since
17
+ * the parent card's flattened bottom edge is the divider, and `!border-b`
18
+ * defeats the `divide-y-0` on the mobile tbody.
19
+ */
14
20
  return (_ctx, _cache) => {
15
21
  return openBlock(), createElementBlock("tr", {
16
22
  class: normalizeClass([unref(classes).trExpandable, unref(isMobile) ? mobileExpandedClass : ""]),
@@ -1 +1 @@
1
- {"version":3,"file":"RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableExpandedRow.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport { useDataTableStyling } from '@/components/tables/data-table/context';\n\ndefineProps<{\n row: T;\n index: number;\n}>();\n\ndefineSlots<{\n 'expanded-item': (props: { row: T; index: number }) => any;\n}>();\n\nconst { classes, colspan, isMobile } = useDataTableStyling();\n\n// On mobile the expanded content attaches beneath its card: matching side\n// borders and a rounded, bordered bottom edge. The top border is intentionally\n// left off — the parent card's flattened bottom edge acts as the divider.\n// `!border-b` defeats the `divide-y-0` on the mobile tbody.\nconst mobileExpandedClass = 'block border-x !border-b border-black/[0.12] dark:border-white/[0.12] rounded-b-lg mb-3 overflow-hidden';\n</script>\n\n<template>\n <tr\n :class=\"[classes.trExpandable, isMobile ? mobileExpandedClass : '']\"\n data-id=\"row-expanded\"\n >\n <td\n :colspan=\"colspan\"\n :class=\"classes.td\"\n >\n <slot\n name=\"expanded-item\"\n :row=\"row\"\n :index=\"index\"\n />\n </td>\n </tr>\n</template>\n"],"mappings":";;;;AAkBA,IAAM,sBAAsB;;;;;;;;EAN5B,MAAM,EAAE,SAAS,SAAS,aAAa,oBAAoB;;uBAUzD,mBAcK,MAAA;IAbF,OAAK,eAAA,CAAG,MAAA,OAAA,CAAO,CAAC,cAAc,MAAA,QAAA,IAAW,sBAAmB,EAAA,CAAA;IAC7D,WAAQ;OAER,mBASK,MAAA;IARF,SAAS,MAAA,OAAA;IACT,OAAK,eAAE,MAAA,OAAA,CAAO,CAAC,EAAE;OAElB,WAIE,KAAA,QAAA,iBAAA;IAFC,KAAK,QAAA;IACL,OAAO,QAAA"}
1
+ {"version":3,"file":"RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableExpandedRow.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport { useDataTableStyling } from '@/components/tables/data-table/context';\n\ndefineProps<{\n row: T;\n index: number;\n}>();\n\ndefineSlots<{\n 'expanded-item': (props: { row: T; index: number }) => any;\n}>();\n\nconst { classes, colspan, isMobile } = useDataTableStyling();\n\n/**\n * On mobile the expanded content attaches beneath its card: matching side\n * borders and a rounded, bordered bottom edge. It carries no top border, since\n * the parent card's flattened bottom edge is the divider, and `!border-b`\n * defeats the `divide-y-0` on the mobile tbody.\n */\nconst mobileExpandedClass = 'block border-x !border-b border-black/[0.12] dark:border-white/[0.12] rounded-b-lg mb-3 overflow-hidden';\n</script>\n\n<template>\n <tr\n :class=\"[classes.trExpandable, isMobile ? mobileExpandedClass : '']\"\n data-id=\"row-expanded\"\n >\n <td\n :colspan=\"colspan\"\n :class=\"classes.td\"\n >\n <slot\n name=\"expanded-item\"\n :row=\"row\"\n :index=\"index\"\n />\n </td>\n </tr>\n</template>\n"],"mappings":";;;;AAoBA,IAAM,sBAAsB;;;;;;;;EAR5B,MAAM,EAAE,SAAS,SAAS,aAAa,oBAAoB;;;;;;;;GAYzD,OAAA,UAAA,GAAA,mBAcK,MAAA;IAbF,OAAK,eAAA,CAAG,MAAA,OAAA,CAAO,CAAC,cAAc,MAAA,QAAA,IAAW,sBAAmB,EAAA,CAAA;IAC7D,WAAQ;GAER,GAAA,CAAA,mBASK,MAAA;IARF,SAAS,MAAA,OAAA;IACT,OAAK,eAAE,MAAA,OAAA,CAAO,CAAC,EAAE;GAElB,GAAA,CAAA,WAIE,KAAA,QAAA,iBAAA;IAFC,KAAK,QAAA;IACL,OAAO,QAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiDataTableGroupRow.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableGroupRow.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { GroupHeader } from '@/composables/tables/data-table/types';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiTooltip from '@/components/overlays/tooltip/RuiTooltip.vue';\nimport { useDataTableGrouping, useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\nimport { GroupExpandButtonPosition } from '@/components/tables/table-props';\n\nconst { row } = defineProps<{\n row: GroupHeader<T>;\n}>();\n\ndefineSlots<{\n 'group.header'?: (props: {\n colspan: number;\n header: GroupHeader<T>;\n isOpen: boolean;\n toggle: () => void;\n }) => any;\n 'group.header.content'?: (props: { header: GroupHeader<T>; groupKey: string }) => any;\n}>();\n\nconst { classes, colspan, isMobile } = useDataTableStyling();\n\n// On mobile the group header reads as a rounded section label: separated from\n// the previous group's cards above and its own cards below, aligned to the\n// card content padding.\nconst mobileGroupClass = 'mt-6 first:mt-0 mb-2 rounded-lg';\nconst {\n groupExpandButtonPosition,\n groupKey,\n isExpandedGroup,\n onCopyGroup,\n onToggleExpandGroup,\n onUngroup,\n} = useDataTableGrouping<T>();\n\nconst isOpen = computed<boolean>(() => isExpandedGroup(row.group));\n</script>\n\n<template>\n <tr\n :class=\"[classes.trGroup, isMobile ? mobileGroupClass : '']\"\n data-id=\"row-group\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"group.header\"\n :colspan=\"colspan\"\n :header=\"row\"\n :is-open=\"isOpen\"\n :toggle=\"() => onToggleExpandGroup(row.group, row.identifier)\"\n >\n <td\n :class=\"[classes.td, isMobile ? '!px-4 !py-2' : '!p-2']\"\n :colspan=\"colspan\"\n >\n <div class=\"flex items-center gap-2\">\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === GroupExpandButtonPosition.start\"\n :expanded=\"isOpen\"\n @click=\"onToggleExpandGroup(row.group, row.identifier)\"\n />\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n :group-key=\"groupKey ?? ''\"\n name=\"group.header.content\"\n :header=\"row\"\n >\n <span>{{ groupKey }}: {{ row.identifier }}</span>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n data-id=\"group-copy-button\"\n @click=\"onCopyGroup(row)\"\n >\n <RuiIcon\n name=\"lu-copy\"\n size=\"16\"\n />\n </RuiButton>\n </slot>\n <RuiTooltip\n :options=\"{ placement: 'top' }\"\n class=\"ml-auto mr-2\"\n >\n <template #activator>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n data-id=\"group-ungroup-button\"\n @click=\"onUngroup()\"\n >\n <RuiIcon\n name=\"lu-trash-2\"\n size=\"14\"\n />\n </RuiButton>\n </template>\n Ungroup\n </RuiTooltip>\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === GroupExpandButtonPosition.end\"\n :expanded=\"isOpen\"\n @click=\"onToggleExpandGroup(row.group, row.identifier)\"\n />\n </div>\n </td>\n </slot>\n </tr>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RuiDataTableGroupRow.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableGroupRow.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { GroupHeader } from '@/composables/tables/data-table/types';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiTooltip from '@/components/overlays/tooltip/RuiTooltip.vue';\nimport { useDataTableGrouping, useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\nimport { GroupExpandButtonPosition } from '@/components/tables/table-props';\n\nconst { row } = defineProps<{\n row: GroupHeader<T>;\n}>();\n\ndefineSlots<{\n 'group.header'?: (props: {\n colspan: number;\n header: GroupHeader<T>;\n isOpen: boolean;\n toggle: () => void;\n }) => any;\n 'group.header.content'?: (props: { header: GroupHeader<T>; groupKey: string }) => any;\n}>();\n\nconst { classes, colspan, isMobile } = useDataTableStyling();\n\n/**\n * On mobile the group header reads as a rounded section label, separated from\n * the previous group's cards above and its own below, aligned to the card\n * content padding.\n */\nconst mobileGroupClass = 'mt-6 first:mt-0 mb-2 rounded-lg';\nconst {\n groupExpandButtonPosition,\n groupKey,\n isExpandedGroup,\n onCopyGroup,\n onToggleExpandGroup,\n onUngroup,\n} = useDataTableGrouping<T>();\n\nconst isOpen = computed<boolean>(() => isExpandedGroup(row.group));\n</script>\n\n<template>\n <tr\n :class=\"[classes.trGroup, isMobile ? mobileGroupClass : '']\"\n data-id=\"row-group\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"group.header\"\n :colspan=\"colspan\"\n :header=\"row\"\n :is-open=\"isOpen\"\n :toggle=\"() => onToggleExpandGroup(row.group, row.identifier)\"\n >\n <td\n :class=\"[classes.td, isMobile ? '!px-4 !py-2' : '!p-2']\"\n :colspan=\"colspan\"\n >\n <div class=\"flex items-center gap-2\">\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === GroupExpandButtonPosition.start\"\n :expanded=\"isOpen\"\n @click=\"onToggleExpandGroup(row.group, row.identifier)\"\n />\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n :group-key=\"groupKey ?? ''\"\n name=\"group.header.content\"\n :header=\"row\"\n >\n <span>{{ groupKey }}: {{ row.identifier }}</span>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n data-id=\"group-copy-button\"\n @click=\"onCopyGroup(row)\"\n >\n <RuiIcon\n name=\"lu-copy\"\n size=\"16\"\n />\n </RuiButton>\n </slot>\n <RuiTooltip\n :options=\"{ placement: 'top' }\"\n class=\"ml-auto mr-2\"\n >\n <template #activator>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n data-id=\"group-ungroup-button\"\n @click=\"onUngroup()\"\n >\n <RuiIcon\n name=\"lu-trash-2\"\n size=\"14\"\n />\n </RuiButton>\n </template>\n Ungroup\n </RuiTooltip>\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === GroupExpandButtonPosition.end\"\n :expanded=\"isOpen\"\n @click=\"onToggleExpandGroup(row.group, row.identifier)\"\n />\n </div>\n </td>\n </slot>\n </tr>\n</template>\n"],"mappings":""}
@@ -14,6 +14,11 @@ var RuiDataTableGroupRow_vue_vue_type_script_setup_true_lang_default = /*@__PURE
14
14
  props: { row: {} },
15
15
  setup(__props) {
16
16
  const { classes, colspan, isMobile } = useDataTableStyling();
17
+ /**
18
+ * On mobile the group header reads as a rounded section label, separated from
19
+ * the previous group's cards above and its own below, aligned to the card
20
+ * content padding.
21
+ */
17
22
  const { groupExpandButtonPosition, groupKey, isExpandedGroup, onCopyGroup, onToggleExpandGroup, onUngroup } = useDataTableGrouping();
18
23
  const isOpen = computed(() => isExpandedGroup(__props.row.group));
19
24
  return (_ctx, _cache) => {
@@ -1 +1 @@
1
- {"version":3,"file":"RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableGroupRow.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { GroupHeader } from '@/composables/tables/data-table/types';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiTooltip from '@/components/overlays/tooltip/RuiTooltip.vue';\nimport { useDataTableGrouping, useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\nimport { GroupExpandButtonPosition } from '@/components/tables/table-props';\n\nconst { row } = defineProps<{\n row: GroupHeader<T>;\n}>();\n\ndefineSlots<{\n 'group.header'?: (props: {\n colspan: number;\n header: GroupHeader<T>;\n isOpen: boolean;\n toggle: () => void;\n }) => any;\n 'group.header.content'?: (props: { header: GroupHeader<T>; groupKey: string }) => any;\n}>();\n\nconst { classes, colspan, isMobile } = useDataTableStyling();\n\n// On mobile the group header reads as a rounded section label: separated from\n// the previous group's cards above and its own cards below, aligned to the\n// card content padding.\nconst mobileGroupClass = 'mt-6 first:mt-0 mb-2 rounded-lg';\nconst {\n groupExpandButtonPosition,\n groupKey,\n isExpandedGroup,\n onCopyGroup,\n onToggleExpandGroup,\n onUngroup,\n} = useDataTableGrouping<T>();\n\nconst isOpen = computed<boolean>(() => isExpandedGroup(row.group));\n</script>\n\n<template>\n <tr\n :class=\"[classes.trGroup, isMobile ? mobileGroupClass : '']\"\n data-id=\"row-group\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"group.header\"\n :colspan=\"colspan\"\n :header=\"row\"\n :is-open=\"isOpen\"\n :toggle=\"() => onToggleExpandGroup(row.group, row.identifier)\"\n >\n <td\n :class=\"[classes.td, isMobile ? '!px-4 !py-2' : '!p-2']\"\n :colspan=\"colspan\"\n >\n <div class=\"flex items-center gap-2\">\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === GroupExpandButtonPosition.start\"\n :expanded=\"isOpen\"\n @click=\"onToggleExpandGroup(row.group, row.identifier)\"\n />\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n :group-key=\"groupKey ?? ''\"\n name=\"group.header.content\"\n :header=\"row\"\n >\n <span>{{ groupKey }}: {{ row.identifier }}</span>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n data-id=\"group-copy-button\"\n @click=\"onCopyGroup(row)\"\n >\n <RuiIcon\n name=\"lu-copy\"\n size=\"16\"\n />\n </RuiButton>\n </slot>\n <RuiTooltip\n :options=\"{ placement: 'top' }\"\n class=\"ml-auto mr-2\"\n >\n <template #activator>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n data-id=\"group-ungroup-button\"\n @click=\"onUngroup()\"\n >\n <RuiIcon\n name=\"lu-trash-2\"\n size=\"14\"\n />\n </RuiButton>\n </template>\n Ungroup\n </RuiTooltip>\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === GroupExpandButtonPosition.end\"\n :expanded=\"isOpen\"\n @click=\"onToggleExpandGroup(row.group, row.identifier)\"\n />\n </div>\n </td>\n </slot>\n </tr>\n</template>\n"],"mappings":";;;;;;;;;;AA4BA,IAAM,mBAAmB;;;;;EALzB,MAAM,EAAE,SAAS,SAAS,aAAa,oBAAoB;EAM3D,MAAM,EACJ,2BACA,UACA,iBACA,aACA,qBACA,cACE,qBAAwB;EAE5B,MAAM,SAAS,eAAwB,gBAAgB,QAAA,IAAI,KAAK,CAAC;;uBAI/D,mBAsEK,MAAA;IArEF,OAAK,eAAA,CAAG,MAAA,OAAA,CAAO,CAAC,SAAS,MAAA,QAAA,IAAW,mBAAgB,EAAA,CAAA;IACrD,WAAQ;OAGR,WAgEO,KAAA,QAAA,gBAAA;IA9DJ,SAAS,MAAA,OAAA;IACT,QAAQ,QAAA;IACR,QAAS,MAAA,MAAA;IACT,cAAc,MAAA,mBAAA,CAAmB,CAAC,QAAA,IAAI,OAAO,QAAA,IAAI,UAAU;YA2DvD,CAzDL,mBAwDK,MAAA;IAvDF,OAAK,eAAA,CAAG,MAAA,OAAA,CAAO,CAAC,IAAI,MAAA,QAAA,IAAQ,gBAAA,MAAA,CAAA;IAC5B,SAAS,MAAA,OAAA;OAEV,mBAmDM,OAnDN,YAmDM;IAjDI,MAAA,yBAAA,MAA8B,MAAA,yBAAA,CAAyB,CAAC,SAAA,UAAA,GADhE,YAIE,yBAAA;;KAFC,UAAU,MAAA,MAAA;KACV,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,mBAAA,CAAmB,CAAC,QAAA,IAAI,OAAO,QAAA,IAAI,UAAU;;IAGvD,WAkBO,KAAA,QAAA,wBAAA;KAjBJ,UAAW,MAAA,QAAA,KAAQ;KAEnB,QAAQ,QAAA;aAeJ,CAbL,mBAAiD,QAAA,MAAA,gBAAxC,MAAA,QAAA,CAAQ,IAAG,OAAE,gBAAG,QAAA,IAAI,UAAU,GAAA,CAAA,GACvC,YAWY,mBAAA;KAVV,MAAK;KACL,SAAQ;KACR,MAAA;KACA,WAAQ;KACP,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,WAAA,CAAW,CAAC,QAAA,GAAG;;4BAKrB,CAHF,YAGE,iBAAA;MAFA,MAAK;MACL,MAAK;;;;IAIX,YAmBa,oBAAA;KAlBV,SAAS,EAAA,WAAA,MAAA;KACV,OAAM;;KAEK,WAAS,cAYN,CAXZ,YAWY,mBAAA;MAVV,MAAK;MACL,SAAQ;MACR,MAAA;MACA,WAAQ;MACP,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,SAAA,CAAS,CAAA;;6BAKf,CAHF,YAGE,iBAAA;OAFA,MAAK;OACL,MAAK;;;;4BAKb,CAAA,OAAA,OAAA,OAAA,KAAA,gBAFa,aAEb,EAAA,EAAA,CAAA;;;IAEQ,MAAA,yBAAA,MAA8B,MAAA,yBAAA,CAAyB,CAAC,OAAA,UAAA,GADhE,YAIE,yBAAA;;KAFC,UAAU,MAAA,MAAA;KACV,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,mBAAA,CAAmB,CAAC,QAAA,IAAI,OAAO,QAAA,IAAI,UAAU"}
1
+ {"version":3,"file":"RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableGroupRow.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object\">\nimport type { GroupHeader } from '@/composables/tables/data-table/types';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiTooltip from '@/components/overlays/tooltip/RuiTooltip.vue';\nimport { useDataTableGrouping, useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiExpandButton from '@/components/tables/RuiExpandButton.vue';\nimport { GroupExpandButtonPosition } from '@/components/tables/table-props';\n\nconst { row } = defineProps<{\n row: GroupHeader<T>;\n}>();\n\ndefineSlots<{\n 'group.header'?: (props: {\n colspan: number;\n header: GroupHeader<T>;\n isOpen: boolean;\n toggle: () => void;\n }) => any;\n 'group.header.content'?: (props: { header: GroupHeader<T>; groupKey: string }) => any;\n}>();\n\nconst { classes, colspan, isMobile } = useDataTableStyling();\n\n/**\n * On mobile the group header reads as a rounded section label, separated from\n * the previous group's cards above and its own below, aligned to the card\n * content padding.\n */\nconst mobileGroupClass = 'mt-6 first:mt-0 mb-2 rounded-lg';\nconst {\n groupExpandButtonPosition,\n groupKey,\n isExpandedGroup,\n onCopyGroup,\n onToggleExpandGroup,\n onUngroup,\n} = useDataTableGrouping<T>();\n\nconst isOpen = computed<boolean>(() => isExpandedGroup(row.group));\n</script>\n\n<template>\n <tr\n :class=\"[classes.trGroup, isMobile ? mobileGroupClass : '']\"\n data-id=\"row-group\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"group.header\"\n :colspan=\"colspan\"\n :header=\"row\"\n :is-open=\"isOpen\"\n :toggle=\"() => onToggleExpandGroup(row.group, row.identifier)\"\n >\n <td\n :class=\"[classes.td, isMobile ? '!px-4 !py-2' : '!p-2']\"\n :colspan=\"colspan\"\n >\n <div class=\"flex items-center gap-2\">\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === GroupExpandButtonPosition.start\"\n :expanded=\"isOpen\"\n @click=\"onToggleExpandGroup(row.group, row.identifier)\"\n />\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n :group-key=\"groupKey ?? ''\"\n name=\"group.header.content\"\n :header=\"row\"\n >\n <span>{{ groupKey }}: {{ row.identifier }}</span>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n data-id=\"group-copy-button\"\n @click=\"onCopyGroup(row)\"\n >\n <RuiIcon\n name=\"lu-copy\"\n size=\"16\"\n />\n </RuiButton>\n </slot>\n <RuiTooltip\n :options=\"{ placement: 'top' }\"\n class=\"ml-auto mr-2\"\n >\n <template #activator>\n <RuiButton\n size=\"sm\"\n variant=\"text\"\n icon\n data-id=\"group-ungroup-button\"\n @click=\"onUngroup()\"\n >\n <RuiIcon\n name=\"lu-trash-2\"\n size=\"14\"\n />\n </RuiButton>\n </template>\n Ungroup\n </RuiTooltip>\n <RuiExpandButton\n v-if=\"groupExpandButtonPosition === GroupExpandButtonPosition.end\"\n :expanded=\"isOpen\"\n @click=\"onToggleExpandGroup(row.group, row.identifier)\"\n />\n </div>\n </td>\n </slot>\n </tr>\n</template>\n"],"mappings":";;;;;;;;;;AA8BA,IAAM,mBAAmB;;;;;EAPzB,MAAM,EAAE,SAAS,SAAS,aAAa,oBAAoB;;;;;;EAQ3D,MAAM,EACJ,2BACA,UACA,iBACA,aACA,qBACA,cACE,qBAAwB;EAE5B,MAAM,SAAS,eAAwB,gBAAgB,QAAA,IAAI,KAAK,CAAC;;GAI/D,OAAA,UAAA,GAAA,mBAsEK,MAAA;IArEF,OAAK,eAAA,CAAG,MAAA,OAAA,CAAO,CAAC,SAAS,MAAA,QAAA,IAAW,mBAAgB,EAAA,CAAA;IACrD,WAAQ;GAGR,GAAA,CAAA,WAgEO,KAAA,QAAA,gBAAA;IA9DJ,SAAS,MAAA,OAAA;IACT,QAAQ,QAAA;IACR,QAAS,MAAA,MAAA;IACT,cAAc,MAAA,mBAAA,CAAmB,CAAC,QAAA,IAAI,OAAO,QAAA,IAAI,UAAU;GAL9D,SAgEO,CAzDL,mBAwDK,MAAA;IAvDF,OAAK,eAAA,CAAG,MAAA,OAAA,CAAO,CAAC,IAAI,MAAA,QAAA,IAAQ,gBAAA,MAAA,CAAA;IAC5B,SAAS,MAAA,OAAA;GAEV,GAAA,CAAA,mBAmDM,OAnDN,YAmDM;IAjDI,MAAA,yBAAA,MAA8B,MAAA,yBAAA,CAAyB,CAAC,SADhE,UAAA,GAAA,YAIE,yBAAA;;KAFC,UAAU,MAAA,MAAA;KACV,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,mBAAA,CAAmB,CAAC,QAAA,IAAI,OAAO,QAAA,IAAI,UAAU;;IAGvD,WAkBO,KAAA,QAAA,wBAAA;KAjBJ,UAAW,MAAA,QAAA,KAAQ;KAEnB,QAAQ,QAAA;IAHX,SAkBO,CAbL,mBAAiD,QAAA,MAAA,gBAAxC,MAAA,QAAA,CAAQ,IAAG,OAAE,gBAAG,QAAA,IAAI,UAAU,GAAA,CAAA,GACvC,YAWY,mBAAA;KAVV,MAAK;KACL,SAAQ;KACR,MAAA;KACA,WAAQ;KACP,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,WAAA,CAAW,CAAC,QAAA,GAAG;;KAEvB,SAAA,cAGE,CAHF,YAGE,iBAAA;MAFA,MAAK;MACL,MAAK;;;;IAIX,YAmBa,oBAAA;KAlBV,SAAS,EAAA,WAAA,MAAA;KACV,OAAM;;KAEK,WAAS,cAYN,CAXZ,YAWY,mBAAA;MAVV,MAAK;MACL,SAAQ;MACR,MAAA;MACA,WAAQ;MACP,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,SAAA,CAAS,CAAA;;MAEjB,SAAA,cAGE,CAHF,YAGE,iBAAA;OAFA,MAAK;OACL,MAAK;;;;KAGA,SAAA,cAEb,CAFa,OAAA,OAAA,OAAA,KAAA,gBAAA,aAEb,EAAA,EAAA,CAAA;;;IAEQ,MAAA,yBAAA,MAA8B,MAAA,yBAAA,CAAyB,CAAC,OADhE,UAAA,GAAA,YAIE,yBAAA;;KAFC,UAAU,MAAA,MAAA;KACV,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,mBAAA,CAAmB,CAAC,QAAA,IAAI,OAAO,QAAA,IAAI,UAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiDataTableLoadingRow.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":""}
1
+ {"version":3,"file":"RuiDataTableLoadingRow.js","names":[],"sources":["../../../../src/components/tables/data-table/RuiDataTableLoadingRow.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useDataTableStyling } from '@/components/tables/data-table/context';\nimport RuiTableLoadingState from '@/components/tables/RuiTableLoadingState.vue';\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 <RuiTableLoadingState />\n </td>\n </tr>\n</template>\n"],"mappings":""}