@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
@@ -136,6 +136,14 @@ var RuiDataTable_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
136
136
  const globalBasis = tableDefaults.mobileBreakpointBasis;
137
137
  return globalBasis === void 0 ? "viewport" : get$1(globalBasis);
138
138
  });
139
+ /**
140
+ * Whether the stacked card layout is showing.
141
+ *
142
+ * Vue coerces an absent Boolean prop to `false`, so `mobile` cannot say
143
+ * "unset": with no breakpoint configured it is the manual switch, defaulting
144
+ * to desktop, and with one configured the breakpoint drives the layout while
145
+ * `mobile === true` can still force the stacked layout on.
146
+ */
139
147
  const isMobile = computed(() => {
140
148
  const breakpoint = get$1(resolvedMobileBreakpoint);
141
149
  if (breakpoint === void 0) return __props.mobile;
@@ -143,8 +151,16 @@ var RuiDataTable_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
143
151
  return (get$1(resolvedMobileBasis) === "container" ? get$1(containerWidth) || get$1(windowWidth) : get$1(windowWidth)) < breakpoint;
144
152
  });
145
153
  const stickyHeaderOffset = computed(() => __props.stickyOffset !== void 0 ? __props.stickyOffset : get$1(tableDefaults.stickyOffset));
154
+ /**
155
+ * A table rendered inside an expanded row must not pin its own toolbar: only
156
+ * the outermost table sticks, otherwise the bars stack and collide.
157
+ */
146
158
  const isNestedTable = useDataTableNested();
147
159
  provideDataTableNested();
160
+ /**
161
+ * On mobile there is no column header to pin, so `stickyHeader` pins the
162
+ * pagination and sort toolbar instead while the card list scrolls.
163
+ */
148
164
  const stickyMobileToolbar = computed(() => __props.stickyHeader && get$1(isMobile) && !isNestedTable);
149
165
  const table = useTemplateRef("table");
150
166
  const tableScroller = useTemplateRef("tableScroller");
@@ -186,6 +202,13 @@ var RuiDataTable_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
186
202
  tableDefaults
187
203
  });
188
204
  const noData = computed(() => get$1(filtered).length === 0);
205
+ const ui = computed(() => dataTableStyles({
206
+ outlined: __props.outlined,
207
+ rounded: __props.rounded,
208
+ dense: __props.dense,
209
+ striped: __props.striped,
210
+ mobile: get$1(isMobile)
211
+ }));
189
212
  const { columns, colspan, headerSlots, cellValue } = useTableColumns({
190
213
  cols: () => __props.cols,
191
214
  columnAttr: __props.columnAttr,
@@ -207,6 +230,10 @@ var RuiDataTable_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
207
230
  selectedData,
208
231
  filtered
209
232
  });
233
+ /**
234
+ * Sorting clears the selection. That lives here rather than in either
235
+ * composable, which would make sort and selection depend on each other.
236
+ */
210
237
  function onSort(payload) {
211
238
  applySort(payload);
212
239
  if (!__props.multiPageSelect) onToggleAll(false);
@@ -229,29 +256,22 @@ var RuiDataTable_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
229
256
  onMounted(() => {
230
257
  setInternalTotal(get$1(sorted));
231
258
  });
232
- const ui = computed(() => dataTableStyles({
233
- outlined: __props.outlined,
234
- rounded: __props.rounded,
235
- dense: __props.dense,
236
- striped: __props.striped,
237
- mobile: get$1(isMobile)
238
- }));
259
+ const classes = computed(() => {
260
+ const s = get$1(ui);
261
+ return {
262
+ td: s.td(),
263
+ tr: s.tr(),
264
+ trSelected: s.tr({ rowVariant: "selected" }),
265
+ trExpandable: s.tr({ rowVariant: "expandable" }),
266
+ trGroup: s.tr({ rowVariant: "group" }),
267
+ trEmpty: s.tr({ rowVariant: "empty" }),
268
+ checkbox: s.checkbox(),
269
+ tbody: s.tbody(),
270
+ tbodyLoader: s.tbodyLoader()
271
+ };
272
+ });
239
273
  provideDataTableContext({
240
- classes: computed(() => {
241
- const s = get$1(ui);
242
- return {
243
- td: s.td(),
244
- tr: s.tr(),
245
- trSelected: s.tr({ rowVariant: "selected" }),
246
- trExpandable: s.tr({ rowVariant: "expandable" }),
247
- trGroup: s.tr({ rowVariant: "group" }),
248
- trEmpty: s.tr({ rowVariant: "empty" }),
249
- checkbox: s.checkbox(),
250
- tbody: s.tbody(),
251
- tbodyLoader: s.tbodyLoader(),
252
- tbodyLoaderContent: s.tbodyLoaderContent()
253
- };
254
- }),
274
+ classes,
255
275
  columns,
256
276
  colspan,
257
277
  expandable,
@@ -1 +1 @@
1
- {"version":3,"file":"RuiDataTable.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tables/RuiDataTable.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object, IdType extends keyof T = keyof T\">\nimport type { GroupHeader } from '@/composables/tables/data-table/types';\nimport { dataTableStyles } from '@/components/tables/data-table-styles';\nimport { type DataTableClasses, provideDataTableContext, provideDataTableNested, useDataTableNested } from '@/components/tables/data-table/context';\nimport RuiDataTableBody from '@/components/tables/data-table/RuiDataTableBody.vue';\nimport RuiDataTableMobileSort from '@/components/tables/data-table/RuiDataTableMobileSort.vue';\nimport RuiTableHead, {\n type GroupData,\n type TableColumn,\n type TableRowKeyData,\n type TableSortData,\n} from '@/components/tables/RuiTableHead.vue';\nimport RuiTablePagination, {\n type TablePaginationData,\n} from '@/components/tables/RuiTablePagination.vue';\nimport { GroupExpandButtonPosition } from '@/components/tables/table-props';\nimport { useTable } from '@/composables/defaults/table';\nimport { useStickyTableHeader } from '@/composables/sticky-header';\nimport { useTableColumns } from '@/composables/tables/data-table/columns';\nimport { useTableExpansion } from '@/composables/tables/data-table/expansion';\nimport { useTableGrouping } from '@/composables/tables/data-table/grouping';\nimport { useTablePagination } from '@/composables/tables/data-table/pagination';\nimport { useTableSelection } from '@/composables/tables/data-table/selection';\nimport { useTableSort } from '@/composables/tables/data-table/sort';\n\nexport type { GroupedTableRow, GroupHeader, TableOptions } from '@/composables/tables/data-table/types';\n\nexport interface Props<T, K extends keyof T> {\n /**\n * list of items for each row\n */\n rows: readonly T[];\n /**\n * the attribute used to identify each row uniquely for selection, usually `id`\n */\n rowAttr: K;\n /**\n * model for internal searching\n */\n search?: string;\n /**\n * model for items per page\n * will be used if the `pagination` model isn't specified\n */\n itemsPerPage?: number;\n /**\n * list of column definitions\n */\n cols?: TableColumn<T>[];\n /**\n * attribute to use from column definitions to display column titles\n */\n columnAttr?: keyof TableColumn<T>;\n /**\n * flag to show a more or less spacious table\n */\n dense?: boolean;\n /**\n * flag to outline the flag with a border\n */\n outlined?: boolean;\n /**\n * should add zebra-striping to the table row\n */\n striped?: boolean;\n /**\n * flag to show loading state of the table\n * triggers indefinite progress at the bottom of the table header\n */\n loading?: boolean;\n disablePerPage?: boolean;\n /**\n * Maximum number of pages before the jump-to-page dropdown is replaced with\n * a numeric input. Defaults to `500`. Forwarded to `RuiTablePagination`.\n */\n rangesThreshold?: number;\n /**\n * data to display for empty state\n * text and icon\n * @example :empty=\"{ icon: 'transactions-line', label: 'No transactions found' }\"\n */\n empty?: {\n label?: string;\n description?: string;\n };\n /**\n * should hide the header navigation\n */\n hideDefaultHeader?: boolean;\n /**\n * should hide the footer navigation\n */\n hideDefaultFooter?: boolean;\n\n rounded?: 'sm' | 'md' | 'lg';\n /**\n * make expansion work like accordion\n */\n singleExpand?: boolean;\n /**\n * make table head stick to top on scroll\n */\n stickyHeader?: boolean;\n stickyOffset?: number;\n /**\n * Affects how the items per page work across the app.\n * When true, changing the items per page setting in one table will affect other tables.\n */\n globalItemsPerPage?: boolean;\n groupExpandButtonPosition?: GroupExpandButtonPosition;\n disabledRows?: readonly T[];\n multiPageSelect?: boolean;\n itemClass?: ((item: T) => string) | string;\n /**\n * Render each row as a stacked card instead of a table row once the measured\n * width is narrower than this width (in pixels). Columns flagged with\n * `mobileHidden` are dropped in this layout. Falls back to the global\n * `mobileBreakpoint` table default; leave both unset to keep the default table\n * layout at every width.\n */\n mobileBreakpoint?: number;\n /**\n * What the `mobileBreakpoint` is measured against: the browser `viewport`\n * (default) or this table's own `container` width. Use `container` when the\n * table lives in a narrow region of a wider window. Falls back to the global\n * `mobileBreakpointBasis` table default.\n */\n mobileBreakpointBasis?: 'viewport' | 'container';\n /**\n * Force the stacked mobile card layout on (`true`) or off (`false`),\n * regardless of `mobileBreakpoint`. Leave unset to derive it from the width.\n */\n mobile?: boolean;\n}\n\ndefineOptions({\n name: 'RuiDataTable',\n});\n\nconst selectedData = defineModel<T[IdType][]>();\n\nconst expanded = defineModel<T[]>('expanded');\n\nconst [pagination, paginationModifiers] = defineModel<TablePaginationData, 'external'>('pagination');\n\nconst [sort, sortModifiers] = defineModel<TableSortData<T>, 'external'>('sort');\n\nconst group = defineModel<TableRowKeyData<T>>('group');\n\nconst collapsed = defineModel<T[]>('collapsed');\n\nconst {\n rows,\n rowAttr,\n search = '',\n itemsPerPage = 10,\n cols,\n columnAttr = 'label',\n dense = false,\n outlined = false,\n striped = false,\n loading = false,\n disablePerPage = false,\n rangesThreshold = 500,\n empty = { label: 'No item found' },\n hideDefaultHeader = false,\n hideDefaultFooter = false,\n rounded = 'md',\n singleExpand = false,\n stickyHeader = false,\n stickyOffset,\n globalItemsPerPage = undefined,\n groupExpandButtonPosition = GroupExpandButtonPosition.start,\n disabledRows,\n multiPageSelect = false,\n itemClass = '',\n mobileBreakpoint,\n mobileBreakpointBasis,\n mobile,\n} = defineProps<Props<T, IdType>>();\n\nconst emit = defineEmits<{\n 'update:options': [value: { pagination?: TablePaginationData; sort?: TableSortData<T> }];\n 'copy:group': [value: GroupData<T>];\n}>();\n\nconst slots = defineSlots<Partial<\n Record<`header.${string}`, (props: { column: TableColumn<T> }) => any> &\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 'tfoot': () => any;\n }\n>>();\n\nconst tableDefaults = useTable();\n\nconst tableWrapper = useTemplateRef<HTMLElement>('tableWrapper');\nconst { width: windowWidth } = useWindowSize();\nconst { width: containerWidth } = useElementSize(tableWrapper);\n\n// Per-table props win, then the global table defaults.\nconst resolvedMobileBreakpoint = computed<number | undefined>(() => {\n if (mobileBreakpoint !== undefined)\n return mobileBreakpoint;\n const globalBreakpoint = tableDefaults.mobileBreakpoint;\n return globalBreakpoint === undefined ? undefined : get(globalBreakpoint);\n});\nconst resolvedMobileBasis = computed<'viewport' | 'container'>(() => {\n if (mobileBreakpointBasis !== undefined)\n return mobileBreakpointBasis;\n const globalBasis = tableDefaults.mobileBreakpointBasis;\n return globalBasis === undefined ? 'viewport' : get(globalBasis);\n});\n\nconst isMobile = computed<boolean>(() => {\n const breakpoint = get(resolvedMobileBreakpoint);\n // Vue coerces an absent Boolean prop to `false`, so `mobile` cannot be used to\n // detect \"unset\". When no breakpoint is configured, `mobile` is the manual\n // switch (defaulting to desktop). When a breakpoint is configured it drives\n // the layout, and `mobile === true` can still force the stacked layout on.\n if (breakpoint === undefined)\n return mobile;\n if (mobile)\n return true;\n // Before the container is measured, `containerWidth` is 0; fall back to the\n // viewport so the layout does not flash to mobile on first paint.\n const width = get(resolvedMobileBasis) === 'container'\n ? (get(containerWidth) || get(windowWidth))\n : get(windowWidth);\n return width < breakpoint;\n});\n\nconst stickyHeaderOffset = computed<number | undefined>(() =>\n stickyOffset !== undefined ? stickyOffset : get(tableDefaults.stickyOffset),\n);\n\n// Nested tables (e.g. rendered inside an expanded row) must not pin their own\n// toolbar: only the outermost table sticks, otherwise the bars stack and\n// collide. Detect nesting via inject, then mark descendants as nested.\nconst isNestedTable = useDataTableNested();\nprovideDataTableNested();\n\n// On mobile there is no column header to pin, so `stickyHeader` instead keeps\n// the pagination + sort toolbar pinned to the top while the card list scrolls.\nconst stickyMobileToolbar = computed<boolean>(() => stickyHeader && get(isMobile) && !isNestedTable);\n\nconst table = useTemplateRef<HTMLTableElement>('table');\nconst tableScroller = useTemplateRef<HTMLElement>('tableScroller');\n\nconst { stick } = useStickyTableHeader(\n () => stickyHeader,\n stickyHeaderOffset,\n { table, tableScroller },\n);\n\nconst { expandable, isExpanded, onToggleExpand } = useTableExpansion<T, IdType>(\n { rowAttr, singleExpand },\n { expanded },\n);\n\nfunction emitUpdateOptions(opts: { sort?: TableSortData<T>; pagination?: TablePaginationData }): void {\n emit('update:options', opts);\n}\n\nconst {\n sortData,\n sortedMap,\n sorted,\n onSort: applySort,\n} = useTableSort<T>(\n { rows: () => rows, search: () => search, sortModifiersExternal: sortModifiers.external },\n {\n sort,\n pagination,\n emitUpdateOptions,\n },\n);\n\nconst {\n groupKeys,\n groupKey,\n grouped,\n isExpandedGroup,\n isHiddenRow,\n onToggleExpandGroup,\n onUngroup,\n} = useTableGrouping<T, IdType>(\n { rowAttr },\n {\n group,\n collapsed,\n sorted,\n },\n);\n\nconst {\n paginationData,\n filtered,\n setInternalTotal,\n resetPagination,\n} = useTablePagination<T>(\n {\n itemsPerPage,\n paginationModifiersExternal: paginationModifiers.external,\n globalItemsPerPage,\n },\n {\n pagination,\n grouped,\n isHiddenRow,\n sort,\n emitUpdateOptions,\n tableDefaults,\n },\n);\n\nconst noData = computed<boolean>(() => get(filtered).length === 0);\n\nconst { columns, colspan, headerSlots, cellValue } = useTableColumns<T, IdType>({\n cols: () => cols,\n columnAttr,\n rows: () => rows,\n expandable,\n groupKeys,\n selectedData,\n slots,\n isMobile,\n tdResolver: options => get(ui).td(options),\n});\n\nconst showMobileSort = computed<boolean>(() =>\n get(isMobile) && !!get(sortData) && get(columns).some(column => column.sortable),\n);\n\nconst ITEM_SLOT_PREFIX = 'item.';\n\n// Slot keys are static for the component lifetime — no reactivity needed\nconst itemSlotKeys: Set<string> = new Set(\n Object.keys(slots)\n .filter((key): key is `item.${string}` => key.startsWith(ITEM_SLOT_PREFIX))\n .map(key => key.slice(ITEM_SLOT_PREFIX.length)),\n);\n\nconst {\n isAllSelected,\n indeterminate,\n isSelected,\n isDisabledRow,\n onToggleAll,\n onSelect,\n onCheckboxClick,\n deselectRemovedRows,\n resetCheckboxShiftState,\n} = useTableSelection<T, IdType>(\n { rowAttr, multiPageSelect, disabledRows: () => disabledRows },\n { selectedData, filtered },\n);\n\n// Sort triggers selection reset — handled here to avoid circular dependency between sort and selection\nfunction onSort(payload: Parameters<typeof applySort>[0]): void {\n applySort(payload);\n if (!multiPageSelect)\n onToggleAll(false);\n resetCheckboxShiftState();\n}\n\nfunction onPaginate(): void {\n if ((get(expanded)?.length ?? 0) > 0)\n set(expanded, []);\n if (!multiPageSelect)\n onToggleAll(false);\n resetCheckboxShiftState();\n}\n\n// Reset pagination page to 1 on search query change\nwatch(() => search, () => {\n resetPagination();\n onToggleAll(false);\n resetCheckboxShiftState();\n});\n\nwatch(sorted, (items) => {\n if (!multiPageSelect)\n deselectRemovedRows();\n setInternalTotal(items);\n});\n\nonMounted(() => {\n setInternalTotal(get(sorted));\n});\n\nconst ui = computed<ReturnType<typeof dataTableStyles>>(() => dataTableStyles({\n outlined,\n rounded,\n dense,\n striped,\n mobile: get(isMobile),\n}));\n\nconst classes = computed<DataTableClasses>(() => {\n const s = get(ui);\n return {\n td: s.td(),\n tr: s.tr(),\n trSelected: s.tr({ rowVariant: 'selected' }),\n trExpandable: s.tr({ rowVariant: 'expandable' }),\n trGroup: s.tr({ rowVariant: 'group' }),\n trEmpty: s.tr({ rowVariant: 'empty' }),\n checkbox: s.checkbox(),\n tbody: s.tbody(),\n tbodyLoader: s.tbodyLoader(),\n tbodyLoaderContent: s.tbodyLoaderContent(),\n };\n});\n\nprovideDataTableContext<T, IdType>({\n // Reactive (ComputedRef/Ref) — destructuring preserves reactivity via Vue template auto-unwrap\n classes,\n columns,\n colspan,\n expandable,\n groupKey,\n isMobile,\n selectedData,\n // Static values\n cellValue,\n columnAttr,\n dense,\n getRowId: (row: T) => row[rowAttr],\n itemSlotKeys,\n groupExpandButtonPosition,\n isDisabledRow,\n isExpanded,\n isExpandedGroup,\n isSelected,\n itemClass,\n onCheckboxClick,\n onCopyGroup: (header: GroupHeader<T>) => emit('copy:group', { key: get(groupKey) ?? '', value: header.group }),\n onSelect,\n onToggleExpand,\n onToggleExpandGroup,\n onUngroup,\n});\n</script>\n\n<template>\n <div\n ref=\"tableWrapper\"\n :class=\"ui.wrapper()\"\n data-id=\"table-wrapper\"\n >\n <div\n :class=\"stickyMobileToolbar ? 'sticky z-10 bg-white dark:bg-[#121212] pt-2' : 'contents'\"\n :style=\"stickyMobileToolbar ? { top: `${stickyHeaderOffset ?? 0}px` } : undefined\"\n data-id=\"table-mobile-toolbar-sticky\"\n >\n <RuiTablePagination\n v-if=\"paginationData && !hideDefaultHeader\"\n v-model=\"paginationData\"\n :dense=\"dense\"\n :loading=\"loading\"\n :mobile=\"isMobile\"\n :disable-per-page=\"disablePerPage\"\n :ranges-threshold=\"rangesThreshold\"\n data-id=\"table-pagination\"\n @update:model-value=\"onPaginate()\"\n />\n <div\n v-if=\"showMobileSort\"\n class=\"flex justify-end p-2\"\n data-id=\"table-mobile-toolbar\"\n >\n <RuiDataTableMobileSort\n :columns=\"columns\"\n :column-attr=\"columnAttr\"\n :sorted-map=\"sortedMap\"\n :dense=\"dense\"\n @sort=\"onSort($event)\"\n />\n </div>\n </div>\n <div\n ref=\"tableScroller\"\n :class=\"[ui.scroller(), isMobile && !showMobileSort ? 'pt-2' : '']\"\n data-id=\"table-scroller\"\n >\n <table\n ref=\"table\"\n :class=\"ui.table()\"\n :aria-busy=\"loading\"\n >\n <RuiTableHead\n v-if=\"!isMobile\"\n :loading=\"loading\"\n :indeterminate=\"indeterminate\"\n :capitalize-headers=\"!cols\"\n :colspan=\"colspan\"\n :column-attr=\"columnAttr\"\n :columns=\"columns\"\n :dense=\"dense\"\n :disable-check-all=\"!filtered?.length\"\n :is-all-selected=\"isAllSelected\"\n :selectable=\"!!selectedData\"\n :sort-data=\"sortData\"\n :sorted-map=\"sortedMap\"\n :stick=\"stick\"\n :sticky-header=\"stickyHeader\"\n @sort=\"onSort($event)\"\n @select:all=\"onToggleAll($event)\"\n >\n <template\n v-for=\"headerSlot in headerSlots\"\n #[headerSlot]=\"slotData\"\n >\n <slot\n :name=\"headerSlot\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiTableHead>\n <RuiTableHead\n v-if=\"stickyHeader && !isMobile\"\n :loading=\"loading\"\n :capitalize-headers=\"!cols\"\n :colspan=\"colspan\"\n :column-attr=\"columnAttr\"\n :columns=\"columns\"\n :dense=\"dense\"\n :selectable=\"!!selectedData\"\n :sort-data=\"sortData\"\n :sorted-map=\"sortedMap\"\n data-id=\"head-clone\"\n class=\"opacity-0 invisible\"\n >\n <template\n v-for=\"headerSlot in headerSlots\"\n #[headerSlot]=\"slotData\"\n >\n <slot\n :name=\"headerSlot\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiTableHead>\n <RuiDataTableBody\n :filtered=\"filtered\"\n :loading=\"loading\"\n :no-data=\"noData\"\n :empty=\"empty\"\n >\n <template\n v-if=\"slots['body.prepend']\"\n #body.prepend=\"slotData\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"body.prepend\"\n v-bind=\"slotData\"\n />\n </template>\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 <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 <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 <template\n v-if=\"slots['body.append']\"\n #body.append=\"slotData\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"body.append\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiDataTableBody>\n <tfoot>\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot name=\"tfoot\" />\n </tfoot>\n </table>\n </div>\n <RuiTablePagination\n v-if=\"paginationData && !hideDefaultFooter\"\n v-model=\"paginationData\"\n :dense=\"dense\"\n :loading=\"loading\"\n :mobile=\"isMobile\"\n :disable-per-page=\"disablePerPage\"\n :ranges-threshold=\"rangesThreshold\"\n data-id=\"table-pagination\"\n @update:model-value=\"onPaginate()\"\n />\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"RuiDataTable.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tables/RuiDataTable.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends object, IdType extends keyof T = keyof T\">\nimport type { GroupHeader } from '@/composables/tables/data-table/types';\nimport { dataTableStyles } from '@/components/tables/data-table-styles';\nimport { type DataTableClasses, provideDataTableContext, provideDataTableNested, useDataTableNested } from '@/components/tables/data-table/context';\nimport RuiDataTableBody from '@/components/tables/data-table/RuiDataTableBody.vue';\nimport RuiDataTableMobileSort from '@/components/tables/data-table/RuiDataTableMobileSort.vue';\nimport RuiTableHead, {\n type GroupData,\n type TableColumn,\n type TableRowKeyData,\n type TableSortData,\n} from '@/components/tables/RuiTableHead.vue';\nimport RuiTablePagination, {\n type TablePaginationData,\n} from '@/components/tables/RuiTablePagination.vue';\nimport { GroupExpandButtonPosition } from '@/components/tables/table-props';\nimport { useTable } from '@/composables/defaults/table';\nimport { useStickyTableHeader } from '@/composables/sticky-header';\nimport { useTableColumns } from '@/composables/tables/data-table/columns';\nimport { useTableExpansion } from '@/composables/tables/data-table/expansion';\nimport { useTableGrouping } from '@/composables/tables/data-table/grouping';\nimport { useTablePagination } from '@/composables/tables/data-table/pagination';\nimport { useTableSelection } from '@/composables/tables/data-table/selection';\nimport { useTableSort } from '@/composables/tables/data-table/sort';\n\nexport type { GroupedTableRow, GroupHeader, TableOptions } from '@/composables/tables/data-table/types';\n\nexport interface Props<T, K extends keyof T> {\n /**\n * list of items for each row\n */\n rows: readonly T[];\n /**\n * the attribute used to identify each row uniquely for selection, usually `id`\n */\n rowAttr: K;\n /**\n * model for internal searching\n */\n search?: string;\n /**\n * model for items per page\n * will be used if the `pagination` model isn't specified\n */\n itemsPerPage?: number;\n /**\n * list of column definitions\n */\n cols?: TableColumn<T>[];\n /**\n * attribute to use from column definitions to display column titles\n */\n columnAttr?: keyof TableColumn<T>;\n /**\n * flag to show a more or less spacious table\n */\n dense?: boolean;\n /**\n * flag to outline the flag with a border\n */\n outlined?: boolean;\n /**\n * should add zebra-striping to the table row\n */\n striped?: boolean;\n /**\n * flag to show loading state of the table\n * triggers indefinite progress at the bottom of the table header\n */\n loading?: boolean;\n disablePerPage?: boolean;\n /**\n * Maximum number of pages before the jump-to-page dropdown is replaced with\n * a numeric input. Defaults to `500`. Forwarded to `RuiTablePagination`.\n */\n rangesThreshold?: number;\n /**\n * The text and icon shown when there are no rows, e.g.\n * `:empty=\"\\{ icon: 'transactions-line', label: 'No transactions found' \\}\"`\n */\n empty?: {\n label?: string;\n description?: string;\n };\n /**\n * should hide the header navigation\n */\n hideDefaultHeader?: boolean;\n /**\n * should hide the footer navigation\n */\n hideDefaultFooter?: boolean;\n\n rounded?: 'sm' | 'md' | 'lg';\n /**\n * make expansion work like accordion\n */\n singleExpand?: boolean;\n /**\n * make table head stick to top on scroll\n */\n stickyHeader?: boolean;\n stickyOffset?: number;\n /**\n * Affects how the items per page work across the app.\n * When true, changing the items per page setting in one table will affect other tables.\n */\n globalItemsPerPage?: boolean;\n groupExpandButtonPosition?: GroupExpandButtonPosition;\n disabledRows?: readonly T[];\n multiPageSelect?: boolean;\n itemClass?: ((item: T) => string) | string;\n /**\n * Render each row as a stacked card instead of a table row once the measured\n * width is narrower than this width (in pixels). Columns flagged with\n * `mobileHidden` are dropped in this layout. Falls back to the global\n * `mobileBreakpoint` table default; leave both unset to keep the default table\n * layout at every width.\n */\n mobileBreakpoint?: number;\n /**\n * What the `mobileBreakpoint` is measured against: the browser `viewport`\n * (default) or this table's own `container` width. Use `container` when the\n * table lives in a narrow region of a wider window. Falls back to the global\n * `mobileBreakpointBasis` table default.\n */\n mobileBreakpointBasis?: 'viewport' | 'container';\n /**\n * Force the stacked mobile card layout on (`true`) or off (`false`),\n * regardless of `mobileBreakpoint`. Leave unset to derive it from the width.\n */\n mobile?: boolean;\n}\n\ndefineOptions({\n name: 'RuiDataTable',\n});\n\nconst selectedData = defineModel<T[IdType][]>();\n\nconst expanded = defineModel<T[]>('expanded');\n\nconst [pagination, paginationModifiers] = defineModel<TablePaginationData, 'external'>('pagination');\n\nconst [sort, sortModifiers] = defineModel<TableSortData<T>, 'external'>('sort');\n\nconst group = defineModel<TableRowKeyData<T>>('group');\n\nconst collapsed = defineModel<T[]>('collapsed');\n\nconst {\n rows,\n rowAttr,\n search = '',\n itemsPerPage = 10,\n cols,\n columnAttr = 'label',\n dense = false,\n outlined = false,\n striped = false,\n loading = false,\n disablePerPage = false,\n rangesThreshold = 500,\n empty = { label: 'No item found' },\n hideDefaultHeader = false,\n hideDefaultFooter = false,\n rounded = 'md',\n singleExpand = false,\n stickyHeader = false,\n stickyOffset,\n globalItemsPerPage = undefined,\n groupExpandButtonPosition = GroupExpandButtonPosition.start,\n disabledRows,\n multiPageSelect = false,\n itemClass = '',\n mobileBreakpoint,\n mobileBreakpointBasis,\n mobile,\n} = defineProps<Props<T, IdType>>();\n\nconst emit = defineEmits<{\n 'update:options': [value: { pagination?: TablePaginationData; sort?: TableSortData<T> }];\n 'copy:group': [value: GroupData<T>];\n}>();\n\nconst slots = defineSlots<Partial<\n Record<`header.${string}`, (props: { column: TableColumn<T> }) => any> &\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 'tfoot': () => any;\n }\n>>();\n\nconst tableDefaults = useTable();\n\nconst tableWrapper = useTemplateRef<HTMLElement>('tableWrapper');\nconst { width: windowWidth } = useWindowSize();\nconst { width: containerWidth } = useElementSize(tableWrapper);\n\n// Per-table props win, then the global table defaults.\nconst resolvedMobileBreakpoint = computed<number | undefined>(() => {\n if (mobileBreakpoint !== undefined)\n return mobileBreakpoint;\n const globalBreakpoint = tableDefaults.mobileBreakpoint;\n return globalBreakpoint === undefined ? undefined : get(globalBreakpoint);\n});\nconst resolvedMobileBasis = computed<'viewport' | 'container'>(() => {\n if (mobileBreakpointBasis !== undefined)\n return mobileBreakpointBasis;\n const globalBasis = tableDefaults.mobileBreakpointBasis;\n return globalBasis === undefined ? 'viewport' : get(globalBasis);\n});\n\n/**\n * Whether the stacked card layout is showing.\n *\n * Vue coerces an absent Boolean prop to `false`, so `mobile` cannot say\n * \"unset\": with no breakpoint configured it is the manual switch, defaulting\n * to desktop, and with one configured the breakpoint drives the layout while\n * `mobile === true` can still force the stacked layout on.\n */\nconst isMobile = computed<boolean>(() => {\n const breakpoint = get(resolvedMobileBreakpoint);\n if (breakpoint === undefined)\n return mobile;\n if (mobile)\n return true;\n // `containerWidth` is 0 until measured; the viewport keeps the first paint off mobile\n const width = get(resolvedMobileBasis) === 'container'\n ? (get(containerWidth) || get(windowWidth))\n : get(windowWidth);\n return width < breakpoint;\n});\n\nconst stickyHeaderOffset = computed<number | undefined>(() =>\n stickyOffset !== undefined ? stickyOffset : get(tableDefaults.stickyOffset),\n);\n\n/**\n * A table rendered inside an expanded row must not pin its own toolbar: only\n * the outermost table sticks, otherwise the bars stack and collide.\n */\nconst isNestedTable = useDataTableNested();\nprovideDataTableNested();\n\n/**\n * On mobile there is no column header to pin, so `stickyHeader` pins the\n * pagination and sort toolbar instead while the card list scrolls.\n */\nconst stickyMobileToolbar = computed<boolean>(() => stickyHeader && get(isMobile) && !isNestedTable);\n\nconst table = useTemplateRef<HTMLTableElement>('table');\nconst tableScroller = useTemplateRef<HTMLElement>('tableScroller');\n\nconst { stick } = useStickyTableHeader(\n () => stickyHeader,\n stickyHeaderOffset,\n { table, tableScroller },\n);\n\nconst { expandable, isExpanded, onToggleExpand } = useTableExpansion<T, IdType>(\n { rowAttr, singleExpand },\n { expanded },\n);\n\nfunction emitUpdateOptions(opts: { sort?: TableSortData<T>; pagination?: TablePaginationData }): void {\n emit('update:options', opts);\n}\n\nconst {\n sortData,\n sortedMap,\n sorted,\n onSort: applySort,\n} = useTableSort<T>(\n { rows: () => rows, search: () => search, sortModifiersExternal: sortModifiers.external },\n {\n sort,\n pagination,\n emitUpdateOptions,\n },\n);\n\nconst {\n groupKeys,\n groupKey,\n grouped,\n isExpandedGroup,\n isHiddenRow,\n onToggleExpandGroup,\n onUngroup,\n} = useTableGrouping<T, IdType>(\n { rowAttr },\n {\n group,\n collapsed,\n sorted,\n },\n);\n\nconst {\n paginationData,\n filtered,\n setInternalTotal,\n resetPagination,\n} = useTablePagination<T>(\n {\n itemsPerPage,\n paginationModifiersExternal: paginationModifiers.external,\n globalItemsPerPage,\n },\n {\n pagination,\n grouped,\n isHiddenRow,\n sort,\n emitUpdateOptions,\n tableDefaults,\n },\n);\n\nconst noData = computed<boolean>(() => get(filtered).length === 0);\n\nconst ui = computed<ReturnType<typeof dataTableStyles>>(() => dataTableStyles({\n outlined,\n rounded,\n dense,\n striped,\n mobile: get(isMobile),\n}));\n\nconst { columns, colspan, headerSlots, cellValue } = useTableColumns<T, IdType>({\n cols: () => cols,\n columnAttr,\n rows: () => rows,\n expandable,\n groupKeys,\n selectedData,\n slots,\n isMobile,\n tdResolver: options => get(ui).td(options),\n});\n\nconst showMobileSort = computed<boolean>(() =>\n get(isMobile) && !!get(sortData) && get(columns).some(column => column.sortable),\n);\n\nconst ITEM_SLOT_PREFIX = 'item.';\n\n// Slot keys are static for the component lifetime — no reactivity needed\nconst itemSlotKeys: Set<string> = new Set(\n Object.keys(slots)\n .filter((key): key is `item.${string}` => key.startsWith(ITEM_SLOT_PREFIX))\n .map(key => key.slice(ITEM_SLOT_PREFIX.length)),\n);\n\nconst {\n isAllSelected,\n indeterminate,\n isSelected,\n isDisabledRow,\n onToggleAll,\n onSelect,\n onCheckboxClick,\n deselectRemovedRows,\n resetCheckboxShiftState,\n} = useTableSelection<T, IdType>(\n { rowAttr, multiPageSelect, disabledRows: () => disabledRows },\n { selectedData, filtered },\n);\n\n/**\n * Sorting clears the selection. That lives here rather than in either\n * composable, which would make sort and selection depend on each other.\n */\nfunction onSort(payload: Parameters<typeof applySort>[0]): void {\n applySort(payload);\n if (!multiPageSelect)\n onToggleAll(false);\n resetCheckboxShiftState();\n}\n\nfunction onPaginate(): void {\n if ((get(expanded)?.length ?? 0) > 0)\n set(expanded, []);\n if (!multiPageSelect)\n onToggleAll(false);\n resetCheckboxShiftState();\n}\n\n// Reset pagination page to 1 on search query change\nwatch(() => search, () => {\n resetPagination();\n onToggleAll(false);\n resetCheckboxShiftState();\n});\n\nwatch(sorted, (items) => {\n if (!multiPageSelect)\n deselectRemovedRows();\n setInternalTotal(items);\n});\n\nonMounted(() => {\n setInternalTotal(get(sorted));\n});\n\nconst classes = computed<DataTableClasses>(() => {\n const s = get(ui);\n return {\n td: s.td(),\n tr: s.tr(),\n trSelected: s.tr({ rowVariant: 'selected' }),\n trExpandable: s.tr({ rowVariant: 'expandable' }),\n trGroup: s.tr({ rowVariant: 'group' }),\n trEmpty: s.tr({ rowVariant: 'empty' }),\n checkbox: s.checkbox(),\n tbody: s.tbody(),\n tbodyLoader: s.tbodyLoader(),\n };\n});\n\nprovideDataTableContext<T, IdType>({\n // Reactive (ComputedRef/Ref) — destructuring preserves reactivity via Vue template auto-unwrap\n classes,\n columns,\n colspan,\n expandable,\n groupKey,\n isMobile,\n selectedData,\n // Static values\n cellValue,\n columnAttr,\n dense,\n getRowId: (row: T) => row[rowAttr],\n itemSlotKeys,\n groupExpandButtonPosition,\n isDisabledRow,\n isExpanded,\n isExpandedGroup,\n isSelected,\n itemClass,\n onCheckboxClick,\n onCopyGroup: (header: GroupHeader<T>) => emit('copy:group', { key: get(groupKey) ?? '', value: header.group }),\n onSelect,\n onToggleExpand,\n onToggleExpandGroup,\n onUngroup,\n});\n</script>\n\n<template>\n <div\n ref=\"tableWrapper\"\n :class=\"ui.wrapper()\"\n data-id=\"table-wrapper\"\n >\n <div\n :class=\"stickyMobileToolbar ? 'sticky z-10 bg-white dark:bg-[#121212] pt-2' : 'contents'\"\n :style=\"stickyMobileToolbar ? { top: `${stickyHeaderOffset ?? 0}px` } : undefined\"\n data-id=\"table-mobile-toolbar-sticky\"\n >\n <RuiTablePagination\n v-if=\"paginationData && !hideDefaultHeader\"\n v-model=\"paginationData\"\n :dense=\"dense\"\n :loading=\"loading\"\n :mobile=\"isMobile\"\n :disable-per-page=\"disablePerPage\"\n :ranges-threshold=\"rangesThreshold\"\n data-id=\"table-pagination\"\n @update:model-value=\"onPaginate()\"\n />\n <div\n v-if=\"showMobileSort\"\n class=\"flex justify-end p-2\"\n data-id=\"table-mobile-toolbar\"\n >\n <RuiDataTableMobileSort\n :columns=\"columns\"\n :column-attr=\"columnAttr\"\n :sorted-map=\"sortedMap\"\n :dense=\"dense\"\n @sort=\"onSort($event)\"\n />\n </div>\n </div>\n <div\n ref=\"tableScroller\"\n :class=\"[ui.scroller(), isMobile && !showMobileSort ? 'pt-2' : '']\"\n data-id=\"table-scroller\"\n >\n <table\n ref=\"table\"\n :class=\"ui.table()\"\n :aria-busy=\"loading\"\n >\n <RuiTableHead\n v-if=\"!isMobile\"\n :loading=\"loading\"\n :indeterminate=\"indeterminate\"\n :capitalize-headers=\"!cols\"\n :colspan=\"colspan\"\n :column-attr=\"columnAttr\"\n :columns=\"columns\"\n :dense=\"dense\"\n :disable-check-all=\"!filtered?.length\"\n :is-all-selected=\"isAllSelected\"\n :selectable=\"!!selectedData\"\n :sort-data=\"sortData\"\n :sorted-map=\"sortedMap\"\n :stick=\"stick\"\n :sticky-header=\"stickyHeader\"\n @sort=\"onSort($event)\"\n @select:all=\"onToggleAll($event)\"\n >\n <template\n v-for=\"headerSlot in headerSlots\"\n #[headerSlot]=\"slotData\"\n >\n <slot\n :name=\"headerSlot\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiTableHead>\n <RuiTableHead\n v-if=\"stickyHeader && !isMobile\"\n :loading=\"loading\"\n :capitalize-headers=\"!cols\"\n :colspan=\"colspan\"\n :column-attr=\"columnAttr\"\n :columns=\"columns\"\n :dense=\"dense\"\n :selectable=\"!!selectedData\"\n :sort-data=\"sortData\"\n :sorted-map=\"sortedMap\"\n data-id=\"head-clone\"\n class=\"opacity-0 invisible\"\n >\n <template\n v-for=\"headerSlot in headerSlots\"\n #[headerSlot]=\"slotData\"\n >\n <slot\n :name=\"headerSlot\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiTableHead>\n <RuiDataTableBody\n :filtered=\"filtered\"\n :loading=\"loading\"\n :no-data=\"noData\"\n :empty=\"empty\"\n >\n <template\n v-if=\"slots['body.prepend']\"\n #body.prepend=\"slotData\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"body.prepend\"\n v-bind=\"slotData\"\n />\n </template>\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 <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 <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 <template\n v-if=\"slots['body.append']\"\n #body.append=\"slotData\"\n >\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot\n name=\"body.append\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiDataTableBody>\n <tfoot>\n <!-- eslint-disable-next-line vue/require-explicit-slots -- defined via Partial<Record<...>> in defineSlots -->\n <slot name=\"tfoot\" />\n </tfoot>\n </table>\n </div>\n <RuiTablePagination\n v-if=\"paginationData && !hideDefaultFooter\"\n v-model=\"paginationData\"\n :dense=\"dense\"\n :loading=\"loading\"\n :mobile=\"isMobile\"\n :disable-per-page=\"disablePerPage\"\n :ranges-threshold=\"rangesThreshold\"\n data-id=\"table-pagination\"\n @update:model-value=\"onPaginate()\"\n />\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiExpandButton.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../src/components/tables/RuiExpandButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { RuiIcons } from '@/icons';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\n\nexport interface Props {\n expanded: boolean;\n icon?: RuiIcons;\n}\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst { expanded, icon = 'lu-chevron-down' } = defineProps<Props>();\n\ndefineSlots<{\n default?: () => any;\n}>();\n</script>\n\n<template>\n <RuiButton\n class=\"relative\"\n :aria-expanded=\"expanded\"\n data-id=\"expand-button\"\n icon\n size=\"sm\"\n variant=\"text\"\n v-bind=\"$attrs\"\n >\n <slot>\n <RuiIcon\n class=\"transition\"\n :class=\"{ 'rotate-180': expanded }\"\n :name=\"icon\"\n />\n </slot>\n </RuiButton>\n</template>\n"],"mappings":";;;;;;;;;;;;;uBAsBE,YAgBY,mBAhBZ,WAgBY;IAfV,OAAM;IACL,iBAAe,QAAA;IAChB,WAAQ;IACR,MAAA;IACA,MAAK;IACL,SAAQ;MACAA,KAAAA,MAAM,GAAA;2BAQP,CANP,WAMO,KAAA,QAAA,WAAA,CAAA,SAAA,CALL,YAIE,iBAAA;KAHA,OAAK,eAAA,CAAC,cAAY,EAAA,cACM,QAAA,SAAQ,CAAA,CAAA;KAC/B,MAAM,QAAA"}
1
+ {"version":3,"file":"RuiExpandButton.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../src/components/tables/RuiExpandButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { RuiIcons } from '@/icons';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\n\nexport interface Props {\n expanded: boolean;\n icon?: RuiIcons;\n}\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst { expanded, icon = 'lu-chevron-down' } = defineProps<Props>();\n\ndefineSlots<{\n default?: () => any;\n}>();\n</script>\n\n<template>\n <RuiButton\n class=\"relative\"\n :aria-expanded=\"expanded\"\n data-id=\"expand-button\"\n icon\n size=\"sm\"\n variant=\"text\"\n v-bind=\"$attrs\"\n >\n <slot>\n <RuiIcon\n class=\"transition\"\n :class=\"{ 'rotate-180': expanded }\"\n :name=\"icon\"\n />\n </slot>\n </RuiButton>\n</template>\n"],"mappings":";;;;;;;;;;;;;GAsBE,OAAA,UAAA,GAAA,YAgBY,mBAhBZ,WAgBY;IAfV,OAAM;IACL,iBAAe,QAAA;IAChB,WAAQ;IACR,MAAA;IACA,MAAK;IACL,SAAQ;GACAA,GAAAA,KAAAA,MAAM,GAAA;IAEd,SAAA,cAMO,CANP,WAMO,KAAA,QAAA,WAAA,CAAA,SAAA,CALL,YAIE,iBAAA;KAHA,OAAK,eAAA,CAAC,cAAY,EAAA,cACM,QAAA,SAAQ,CAAA,CAAA;KAC/B,MAAM,QAAA"}
@@ -0,0 +1,7 @@
1
+ import RuiTable_vue_vue_type_script_setup_true_lang_default from "./RuiTable.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/tables/RuiTable.vue
3
+ var RuiTable_default = RuiTable_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { RuiTable_default as default };
6
+
7
+ //# sourceMappingURL=RuiTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiTable.js","names":[],"sources":["../../../src/components/tables/RuiTable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport RuiTableEmptyState from '@/components/tables/RuiTableEmptyState.vue';\nimport RuiTableErrorState from '@/components/tables/RuiTableErrorState.vue';\nimport RuiTableLoadingState from '@/components/tables/RuiTableLoadingState.vue';\nimport { tv } from '@/utils/tv';\n\nexport interface TableEmpty {\n label?: string;\n description?: string;\n}\n\nexport interface Props {\n variant?: 'default' | 'outlined';\n dense?: boolean;\n /** Shows a spinner under the header while a read is in flight. */\n loading?: boolean;\n /** Why the last read failed, which takes precedence over `empty`. */\n error?: string;\n /** Heading for that failure. */\n errorTitle?: string;\n /** Label for the retry control; without one, no control is offered. */\n retryText?: string;\n /**\n * Says the table is knowingly empty. A table whose rows simply have not\n * arrived should stay `loading` instead, so the two never read alike.\n */\n empty?: TableEmpty | boolean;\n}\n\ndefineOptions({\n name: 'RuiTable',\n inheritAttrs: false,\n});\n\nconst {\n variant = 'outlined',\n dense = false,\n loading = false,\n error = '',\n errorTitle = '',\n retryText = '',\n empty = false,\n} = defineProps<Props>();\n\nconst emit = defineEmits<{\n retry: [];\n}>();\n\ndefineSlots<{\n default: () => any;\n loading?: () => any;\n error?: () => any;\n empty?: () => any;\n}>();\n\n/**\n * The three states are mutually exclusive, and a failed read outranks an empty\n * one: rows that did not arrive are not rows that are not there.\n */\nconst state = computed<'loading' | 'error' | 'empty' | undefined>(() => {\n if (loading)\n return 'loading';\n\n if (error)\n return 'error';\n\n if (empty)\n return 'empty';\n\n return undefined;\n});\n\nconst emptyProps = computed<TableEmpty>(() => (typeof empty === 'object' ? empty : {}));\n\n/**\n * Every rule that lands on a `th` or a `td` wraps the `&` in `:where()`, which\n * compiles to `:where(.generated-class) th` and so carries the specificity of\n * the element alone. A consumer writing `class=\"p-0\"` on one cell is a single\n * class, which outranks that, so a one-off override needs no `!important` the\n * way a plain `[&_th]:` rule would.\n */\nconst tableStyles = tv({\n slots: {\n root: 'w-full overflow-y-auto',\n table: [\n 'w-full',\n '[:where(&)_thead]:border-b [:where(&)_thead]:border-rui-grey-200 dark:[:where(&)_thead]:border-rui-grey-800',\n '[:where(&)_thead_th]:font-medium [:where(&)_thead_th]:text-rui-text-secondary [:where(&)_thead_th]:text-start',\n '[:where(&)_tbody_td]:border-b-0',\n ],\n },\n variants: {\n variant: {\n default: {},\n outlined: {\n root: 'border rounded-md border-rui-grey-200 dark:border-rui-grey-800',\n },\n },\n dense: {\n true: {\n table: '[:where(&)_th]:py-1 [:where(&)_th]:px-2 [:where(&)_td]:py-1 [:where(&)_td]:px-2 [:where(&)_thead_th]:text-xs',\n },\n false: {\n table: '[:where(&)_th]:py-2 [:where(&)_th]:px-4 [:where(&)_td]:py-2 [:where(&)_td]:px-4 [:where(&)_thead_th]:text-sm',\n },\n },\n },\n});\n\nconst ui = computed<ReturnType<typeof tableStyles>>(() => tableStyles({ dense, variant }));\n</script>\n\n<template>\n <div\n :class=\"ui.root()\"\n v-bind=\"$attrs\"\n >\n <table :class=\"ui.table()\">\n <slot />\n </table>\n\n <slot\n v-if=\"state === 'loading'\"\n name=\"loading\"\n >\n <RuiTableLoadingState compact />\n </slot>\n\n <slot\n v-else-if=\"state === 'error'\"\n name=\"error\"\n >\n <RuiTableErrorState\n :action-text=\"retryText\"\n :message=\"error\"\n :title=\"errorTitle\"\n @action=\"emit('retry')\"\n />\n </slot>\n\n <slot\n v-else-if=\"state === 'empty'\"\n name=\"empty\"\n >\n <RuiTableEmptyState\n compact\n :description=\"emptyProps.description\"\n :label=\"emptyProps.label\"\n />\n </slot>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,40 @@
1
+ export interface TableEmpty {
2
+ label?: string;
3
+ description?: string;
4
+ }
5
+ export interface Props {
6
+ variant?: 'default' | 'outlined';
7
+ dense?: boolean;
8
+ /** Shows a spinner under the header while a read is in flight. */
9
+ loading?: boolean;
10
+ /** Why the last read failed, which takes precedence over `empty`. */
11
+ error?: string;
12
+ /** Heading for that failure. */
13
+ errorTitle?: string;
14
+ /** Label for the retry control; without one, no control is offered. */
15
+ retryText?: string;
16
+ /**
17
+ * Says the table is knowingly empty. A table whose rows simply have not
18
+ * arrived should stay `loading` instead, so the two never read alike.
19
+ */
20
+ empty?: TableEmpty | boolean;
21
+ }
22
+ type __VLS_Slots = {
23
+ default: () => any;
24
+ loading?: () => any;
25
+ error?: () => any;
26
+ empty?: () => any;
27
+ };
28
+ declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
29
+ retry: () => any;
30
+ }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
31
+ onRetry?: (() => any) | undefined;
32
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
33
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
34
+ declare const _default: typeof __VLS_export;
35
+ export default _default;
36
+ type __VLS_WithSlots<T, S> = T & {
37
+ new (): {
38
+ $slots: S;
39
+ };
40
+ };
@@ -0,0 +1,95 @@
1
+ import { tv } from "../../utils/tv.js";
2
+ import RuiTableEmptyState_default from "./RuiTableEmptyState.js";
3
+ import RuiTableLoadingState_default from "./RuiTableLoadingState.js";
4
+ import RuiTableErrorState_default from "./RuiTableErrorState.js";
5
+ import { computed, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, openBlock, renderSlot } from "vue";
6
+ //#region src/components/tables/RuiTable.vue?vue&type=script&setup=true&lang.ts
7
+ var RuiTable_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
+ name: "RuiTable",
9
+ inheritAttrs: false,
10
+ __name: "RuiTable",
11
+ props: {
12
+ variant: { default: "outlined" },
13
+ dense: {
14
+ type: Boolean,
15
+ default: false
16
+ },
17
+ loading: {
18
+ type: Boolean,
19
+ default: false
20
+ },
21
+ error: { default: "" },
22
+ errorTitle: { default: "" },
23
+ retryText: { default: "" },
24
+ empty: {
25
+ type: [Object, Boolean],
26
+ default: false
27
+ }
28
+ },
29
+ emits: ["retry"],
30
+ setup(__props, { emit: __emit }) {
31
+ const emit = __emit;
32
+ /**
33
+ * The three states are mutually exclusive, and a failed read outranks an empty
34
+ * one: rows that did not arrive are not rows that are not there.
35
+ */
36
+ const state = computed(() => {
37
+ if (__props.loading) return "loading";
38
+ if (__props.error) return "error";
39
+ if (__props.empty) return "empty";
40
+ });
41
+ const emptyProps = computed(() => typeof __props.empty === "object" ? __props.empty : {});
42
+ /**
43
+ * Every rule that lands on a `th` or a `td` wraps the `&` in `:where()`, which
44
+ * compiles to `:where(.generated-class) th` and so carries the specificity of
45
+ * the element alone. A consumer writing `class="p-0"` on one cell is a single
46
+ * class, which outranks that, so a one-off override needs no `!important` the
47
+ * way a plain `[&_th]:` rule would.
48
+ */
49
+ const tableStyles = tv({
50
+ slots: {
51
+ root: "w-full overflow-y-auto",
52
+ table: [
53
+ "w-full",
54
+ "[:where(&)_thead]:border-b [:where(&)_thead]:border-rui-grey-200 dark:[:where(&)_thead]:border-rui-grey-800",
55
+ "[:where(&)_thead_th]:font-medium [:where(&)_thead_th]:text-rui-text-secondary [:where(&)_thead_th]:text-start",
56
+ "[:where(&)_tbody_td]:border-b-0"
57
+ ]
58
+ },
59
+ variants: {
60
+ variant: {
61
+ default: {},
62
+ outlined: { root: "border rounded-md border-rui-grey-200 dark:border-rui-grey-800" }
63
+ },
64
+ dense: {
65
+ true: { table: "[:where(&)_th]:py-1 [:where(&)_th]:px-2 [:where(&)_td]:py-1 [:where(&)_td]:px-2 [:where(&)_thead_th]:text-xs" },
66
+ false: { table: "[:where(&)_th]:py-2 [:where(&)_th]:px-4 [:where(&)_td]:py-2 [:where(&)_td]:px-4 [:where(&)_thead_th]:text-sm" }
67
+ }
68
+ }
69
+ });
70
+ const ui = computed(() => tableStyles({
71
+ dense: __props.dense,
72
+ variant: __props.variant
73
+ }));
74
+ return (_ctx, _cache) => {
75
+ return openBlock(), createElementBlock("div", mergeProps({ class: ui.value.root() }, _ctx.$attrs), [createElementVNode("table", { class: normalizeClass(ui.value.table()) }, [renderSlot(_ctx.$slots, "default")], 2), state.value === "loading" ? renderSlot(_ctx.$slots, "loading", {}, () => [createVNode(RuiTableLoadingState_default, { compact: "" })], void 0, 0) : state.value === "error" ? renderSlot(_ctx.$slots, "error", {}, () => [createVNode(RuiTableErrorState_default, {
76
+ "action-text": __props.retryText,
77
+ message: __props.error,
78
+ title: __props.errorTitle,
79
+ onAction: _cache[0] || (_cache[0] = ($event) => emit("retry"))
80
+ }, null, 8, [
81
+ "action-text",
82
+ "message",
83
+ "title"
84
+ ])], void 0, 1) : state.value === "empty" ? renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(RuiTableEmptyState_default, {
85
+ compact: "",
86
+ description: emptyProps.value.description,
87
+ label: emptyProps.value.label
88
+ }, null, 8, ["description", "label"])], void 0, 2) : createCommentVNode("", true)], 16);
89
+ };
90
+ }
91
+ });
92
+ //#endregion
93
+ export { RuiTable_vue_vue_type_script_setup_true_lang_default as default };
94
+
95
+ //# sourceMappingURL=RuiTable.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiTable.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../src/components/tables/RuiTable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport RuiTableEmptyState from '@/components/tables/RuiTableEmptyState.vue';\nimport RuiTableErrorState from '@/components/tables/RuiTableErrorState.vue';\nimport RuiTableLoadingState from '@/components/tables/RuiTableLoadingState.vue';\nimport { tv } from '@/utils/tv';\n\nexport interface TableEmpty {\n label?: string;\n description?: string;\n}\n\nexport interface Props {\n variant?: 'default' | 'outlined';\n dense?: boolean;\n /** Shows a spinner under the header while a read is in flight. */\n loading?: boolean;\n /** Why the last read failed, which takes precedence over `empty`. */\n error?: string;\n /** Heading for that failure. */\n errorTitle?: string;\n /** Label for the retry control; without one, no control is offered. */\n retryText?: string;\n /**\n * Says the table is knowingly empty. A table whose rows simply have not\n * arrived should stay `loading` instead, so the two never read alike.\n */\n empty?: TableEmpty | boolean;\n}\n\ndefineOptions({\n name: 'RuiTable',\n inheritAttrs: false,\n});\n\nconst {\n variant = 'outlined',\n dense = false,\n loading = false,\n error = '',\n errorTitle = '',\n retryText = '',\n empty = false,\n} = defineProps<Props>();\n\nconst emit = defineEmits<{\n retry: [];\n}>();\n\ndefineSlots<{\n default: () => any;\n loading?: () => any;\n error?: () => any;\n empty?: () => any;\n}>();\n\n/**\n * The three states are mutually exclusive, and a failed read outranks an empty\n * one: rows that did not arrive are not rows that are not there.\n */\nconst state = computed<'loading' | 'error' | 'empty' | undefined>(() => {\n if (loading)\n return 'loading';\n\n if (error)\n return 'error';\n\n if (empty)\n return 'empty';\n\n return undefined;\n});\n\nconst emptyProps = computed<TableEmpty>(() => (typeof empty === 'object' ? empty : {}));\n\n/**\n * Every rule that lands on a `th` or a `td` wraps the `&` in `:where()`, which\n * compiles to `:where(.generated-class) th` and so carries the specificity of\n * the element alone. A consumer writing `class=\"p-0\"` on one cell is a single\n * class, which outranks that, so a one-off override needs no `!important` the\n * way a plain `[&_th]:` rule would.\n */\nconst tableStyles = tv({\n slots: {\n root: 'w-full overflow-y-auto',\n table: [\n 'w-full',\n '[:where(&)_thead]:border-b [:where(&)_thead]:border-rui-grey-200 dark:[:where(&)_thead]:border-rui-grey-800',\n '[:where(&)_thead_th]:font-medium [:where(&)_thead_th]:text-rui-text-secondary [:where(&)_thead_th]:text-start',\n '[:where(&)_tbody_td]:border-b-0',\n ],\n },\n variants: {\n variant: {\n default: {},\n outlined: {\n root: 'border rounded-md border-rui-grey-200 dark:border-rui-grey-800',\n },\n },\n dense: {\n true: {\n table: '[:where(&)_th]:py-1 [:where(&)_th]:px-2 [:where(&)_td]:py-1 [:where(&)_td]:px-2 [:where(&)_thead_th]:text-xs',\n },\n false: {\n table: '[:where(&)_th]:py-2 [:where(&)_th]:px-4 [:where(&)_td]:py-2 [:where(&)_td]:px-4 [:where(&)_thead_th]:text-sm',\n },\n },\n },\n});\n\nconst ui = computed<ReturnType<typeof tableStyles>>(() => tableStyles({ dense, variant }));\n</script>\n\n<template>\n <div\n :class=\"ui.root()\"\n v-bind=\"$attrs\"\n >\n <table :class=\"ui.table()\">\n <slot />\n </table>\n\n <slot\n v-if=\"state === 'loading'\"\n name=\"loading\"\n >\n <RuiTableLoadingState compact />\n </slot>\n\n <slot\n v-else-if=\"state === 'error'\"\n name=\"error\"\n >\n <RuiTableErrorState\n :action-text=\"retryText\"\n :message=\"error\"\n :title=\"errorTitle\"\n @action=\"emit('retry')\"\n />\n </slot>\n\n <slot\n v-else-if=\"state === 'empty'\"\n name=\"empty\"\n >\n <RuiTableEmptyState\n compact\n :description=\"emptyProps.description\"\n :label=\"emptyProps.label\"\n />\n </slot>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CA,MAAM,OAAO;;;;;EAeb,MAAM,QAAQ,eAA0D;GACtE,IAAI,QAAA,SACF,OAAO;GAET,IAAI,QAAA,OACF,OAAO;GAET,IAAI,QAAA,OACF,OAAO;EAGX,CAAC;EAED,MAAM,aAAa,eAA4B,OAAO,QAAA,UAAU,WAAW,QAAA,QAAQ,CAAC,CAAE;;;;;;;;EAStF,MAAM,cAAc,GAAG;GACrB,OAAO;IACL,MAAM;IACN,OAAO;KACL;KACA;KACA;KACA;IACF;GACF;GACA,UAAU;IACR,SAAS;KACP,SAAS,CAAC;KACV,UAAU,EACR,MAAM,iEACR;IACF;IACA,OAAO;KACL,MAAM,EACJ,OAAO,+GACT;KACA,OAAO,EACL,OAAO,+GACT;IACF;GACF;EACF,CAAC;EAED,MAAM,KAAK,eAA+C,YAAY;GAAE,OAAI,QAAA;GAAG,SAAM,QAAA;EAAE,CAAC,CAAC;;GAIvF,OAAA,UAAA,GAAA,mBAqCM,OArCN,WAqCM,EApCH,OAAO,GAAA,MAAG,KAAI,EACPA,GAAAA,KAAAA,MAAM,GAAA,CAEd,mBAEQ,SAAA,EAFA,OAAK,eAAE,GAAA,MAAG,MAAK,CAAA,EAAA,GAAA,CACrB,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,GAIF,MAAA,UAAK,YADb,WAKO,KAAA,QAAA,WAAA,CAAA,SAAA,CADL,YAAgC,8BAAA,EAAV,SAAA,GAAO,CAAA,CAAA,GAAA,KAAA,GAAA,CAAA,IAIlB,MAAA,UAAK,UADlB,WAUO,KAAA,QAAA,SAAA,CAAA,SAAA,CANL,YAKE,4BAAA;IAJC,eAAa,QAAA;IACb,SAAS,QAAA;IACT,OAAO,QAAA;IACP,UAAM,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,OAAA;;;;;GAKJ,CAAA,CAAA,GAAA,KAAA,GAAA,CAAA,IAAA,MAAA,UAAK,UADlB,WASO,KAAA,QAAA,SAAA,CAAA,SAAA,CALL,YAIE,4BAAA;IAHA,SAAA;IACC,aAAa,WAAA,MAAW;IACxB,OAAO,WAAA,MAAW"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTableEmptyState.js","names":[],"sources":["../../../src/components/tables/RuiTableEmptyState.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useRotkiTheme } from '@/composables/theme';\nimport { tv } from '@/utils/tv';\nimport noDataPlaceholder from './table_no_data_placeholder.svg';\nimport noDataPlaceholderDark from './table_no_data_placeholder_dark.svg';\n\nexport interface TableEmptyStateProps {\n label?: string;\n description?: string;\n}\n\ndefineOptions({\n name: 'RuiTableEmptyState',\n});\n\nconst { label, description } = defineProps<TableEmptyStateProps>();\n\ndefineSlots<{\n description?: () => any;\n}>();\n\nconst { isDark } = useRotkiTheme();\n\nconst emptyStyles = tv({\n slots: {\n root: 'flex flex-col gap-3 items-center justify-center flex-1 min-h-56 my-4',\n title: 'text-body-1 leading-none font-bold text-center text-current pb-0 mb-0',\n subtitle: 'text-body-2 text-center text-rui-text-secondary pb-0 mb-0',\n },\n});\n\nconst ui = emptyStyles();\n</script>\n\n<template>\n <div :class=\"ui.root()\">\n <img\n :src=\"isDark ? noDataPlaceholderDark : noDataPlaceholder\"\n :alt=\"label\"\n class=\"h-32\"\n />\n <p\n v-if=\"label\"\n :class=\"ui.title()\"\n data-id=\"empty-label\"\n >\n {{ label }}\n </p>\n <slot name=\"description\">\n <p\n v-if=\"description\"\n :class=\"ui.subtitle()\"\n data-id=\"empty-description\"\n >\n {{ description }}\n </p>\n </slot>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RuiTableEmptyState.js","names":[],"sources":["../../../src/components/tables/RuiTableEmptyState.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useRotkiTheme } from '@/composables/theme';\nimport { tv } from '@/utils/tv';\nimport noDataPlaceholder from './table_no_data_placeholder.svg';\nimport noDataPlaceholderDark from './table_no_data_placeholder_dark.svg';\n\nexport interface TableEmptyStateProps {\n label?: string;\n description?: string;\n /**\n * Drops the illustration and the reserved height, for a table that only has\n * room to say the row count is zero.\n */\n compact?: boolean;\n}\n\ndefineOptions({\n name: 'RuiTableEmptyState',\n});\n\nconst { label, description, compact = false } = defineProps<TableEmptyStateProps>();\n\ndefineSlots<{\n description?: () => any;\n}>();\n\nconst { isDark } = useRotkiTheme();\n\nconst emptyStyles = tv({\n slots: {\n root: 'flex flex-col items-center justify-center flex-1',\n title: 'text-body-1 leading-none font-bold text-center text-current pb-0 mb-0',\n subtitle: 'text-body-2 text-center text-rui-text-secondary pb-0 mb-0',\n },\n variants: {\n compact: {\n true: {\n root: 'gap-1 py-6',\n title: 'font-normal text-rui-text-secondary',\n },\n false: {\n root: 'gap-3 min-h-56 my-4',\n },\n },\n },\n});\n\nconst ui = computed<ReturnType<typeof emptyStyles>>(() => emptyStyles({ compact }));\n</script>\n\n<template>\n <div :class=\"ui.root()\">\n <img\n v-if=\"!compact\"\n :src=\"isDark ? noDataPlaceholderDark : noDataPlaceholder\"\n :alt=\"label\"\n class=\"h-32\"\n />\n <p\n v-if=\"label\"\n :class=\"ui.title()\"\n data-id=\"empty-label\"\n >\n {{ label }}\n </p>\n <slot name=\"description\">\n <p\n v-if=\"description\"\n :class=\"ui.subtitle()\"\n data-id=\"empty-description\"\n >\n {{ description }}\n </p>\n </slot>\n </div>\n</template>\n"],"mappings":""}
@@ -1,6 +1,11 @@
1
1
  export interface TableEmptyStateProps {
2
2
  label?: string;
3
3
  description?: string;
4
+ /**
5
+ * Drops the illustration and the reserved height, for a table that only has
6
+ * room to say the row count is zero.
7
+ */
8
+ compact?: boolean;
4
9
  }
5
10
  type __VLS_Slots = {
6
11
  description?: () => any;
@@ -2,7 +2,7 @@ import { useRotkiTheme } from "../../composables/theme.js";
2
2
  import { tv } from "../../utils/tv.js";
3
3
  import table_no_data_placeholder_default from "./table_no_data_placeholder.js";
4
4
  import table_no_data_placeholder_dark_default from "./table_no_data_placeholder_dark.js";
5
- import { createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, renderSlot, toDisplayString, unref } from "vue";
5
+ import { computed, createCommentVNode, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, toDisplayString, unref } from "vue";
6
6
  //#region src/components/tables/RuiTableEmptyState.vue?vue&type=script&setup=true&lang.ts
7
7
  var _hoisted_1 = ["src", "alt"];
8
8
  var RuiTableEmptyState_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
@@ -10,24 +10,39 @@ var RuiTableEmptyState_vue_vue_type_script_setup_true_lang_default = /*@__PURE__
10
10
  __name: "RuiTableEmptyState",
11
11
  props: {
12
12
  label: {},
13
- description: {}
13
+ description: {},
14
+ compact: {
15
+ type: Boolean,
16
+ default: false
17
+ }
14
18
  },
15
19
  setup(__props) {
16
20
  const { isDark } = useRotkiTheme();
17
- const ui = tv({ slots: {
18
- root: "flex flex-col gap-3 items-center justify-center flex-1 min-h-56 my-4",
19
- title: "text-body-1 leading-none font-bold text-center text-current pb-0 mb-0",
20
- subtitle: "text-body-2 text-center text-rui-text-secondary pb-0 mb-0"
21
- } })();
21
+ const emptyStyles = tv({
22
+ slots: {
23
+ root: "flex flex-col items-center justify-center flex-1",
24
+ title: "text-body-1 leading-none font-bold text-center text-current pb-0 mb-0",
25
+ subtitle: "text-body-2 text-center text-rui-text-secondary pb-0 mb-0"
26
+ },
27
+ variants: { compact: {
28
+ true: {
29
+ root: "gap-1 py-6",
30
+ title: "font-normal text-rui-text-secondary"
31
+ },
32
+ false: { root: "gap-3 min-h-56 my-4" }
33
+ } }
34
+ });
35
+ const ui = computed(() => emptyStyles({ compact: __props.compact }));
22
36
  return (_ctx, _cache) => {
23
37
  return openBlock(), createElementBlock("div", { class: normalizeClass(unref(ui).root()) }, [
24
- createElementVNode("img", {
38
+ !__props.compact ? (openBlock(), createElementBlock("img", {
39
+ key: 0,
25
40
  src: unref(isDark) ? unref(table_no_data_placeholder_dark_default) : unref(table_no_data_placeholder_default),
26
41
  alt: __props.label,
27
42
  class: "h-32"
28
- }, null, 8, _hoisted_1),
43
+ }, null, 8, _hoisted_1)) : createCommentVNode("", true),
29
44
  __props.label ? (openBlock(), createElementBlock("p", {
30
- key: 0,
45
+ key: 1,
31
46
  class: normalizeClass(unref(ui).title()),
32
47
  "data-id": "empty-label"
33
48
  }, toDisplayString(__props.label), 3)) : createCommentVNode("", true),
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tables/RuiTableEmptyState.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useRotkiTheme } from '@/composables/theme';\nimport { tv } from '@/utils/tv';\nimport noDataPlaceholder from './table_no_data_placeholder.svg';\nimport noDataPlaceholderDark from './table_no_data_placeholder_dark.svg';\n\nexport interface TableEmptyStateProps {\n label?: string;\n description?: string;\n}\n\ndefineOptions({\n name: 'RuiTableEmptyState',\n});\n\nconst { label, description } = defineProps<TableEmptyStateProps>();\n\ndefineSlots<{\n description?: () => any;\n}>();\n\nconst { isDark } = useRotkiTheme();\n\nconst emptyStyles = tv({\n slots: {\n root: 'flex flex-col gap-3 items-center justify-center flex-1 min-h-56 my-4',\n title: 'text-body-1 leading-none font-bold text-center text-current pb-0 mb-0',\n subtitle: 'text-body-2 text-center text-rui-text-secondary pb-0 mb-0',\n },\n});\n\nconst ui = emptyStyles();\n</script>\n\n<template>\n <div :class=\"ui.root()\">\n <img\n :src=\"isDark ? noDataPlaceholderDark : noDataPlaceholder\"\n :alt=\"label\"\n class=\"h-32\"\n />\n <p\n v-if=\"label\"\n :class=\"ui.title()\"\n data-id=\"empty-label\"\n >\n {{ label }}\n </p>\n <slot name=\"description\">\n <p\n v-if=\"description\"\n :class=\"ui.subtitle()\"\n data-id=\"empty-description\"\n >\n {{ description }}\n </p>\n </slot>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;EAqBA,MAAM,EAAE,WAAW,cAAc;EAUjC,MAAM,KARc,GAAG,EACrB,OAAO;GACL,MAAM;GACN,OAAO;GACP,UAAU;EACZ,EACF,CAEW,CAAA,CAAY;;uBAIrB,mBAsBM,OAAA,EAtBA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,KAAI,CAAA,EAAA,GAAA;IAClB,mBAIE,OAAA;KAHC,KAAK,MAAA,MAAA,IAAS,MAAA,sCAAA,IAAwB,MAAA,iCAAA;KACtC,KAAK,QAAA;KACN,OAAM;;IAGA,QAAA,SAAA,UAAA,GADR,mBAMI,KAAA;;KAJD,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,MAAK,CAAA;KAChB,WAAQ;uBAEL,QAAA,KAAK,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;IAEV,WAQO,KAAA,QAAA,eAAA,CAAA,SAAA,CANG,QAAA,eAAA,UAAA,GADR,mBAMI,KAAA;;KAJD,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,SAAQ,CAAA;KACnB,WAAQ;uBAEL,QAAA,WAAW,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tables/RuiTableEmptyState.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useRotkiTheme } from '@/composables/theme';\nimport { tv } from '@/utils/tv';\nimport noDataPlaceholder from './table_no_data_placeholder.svg';\nimport noDataPlaceholderDark from './table_no_data_placeholder_dark.svg';\n\nexport interface TableEmptyStateProps {\n label?: string;\n description?: string;\n /**\n * Drops the illustration and the reserved height, for a table that only has\n * room to say the row count is zero.\n */\n compact?: boolean;\n}\n\ndefineOptions({\n name: 'RuiTableEmptyState',\n});\n\nconst { label, description, compact = false } = defineProps<TableEmptyStateProps>();\n\ndefineSlots<{\n description?: () => any;\n}>();\n\nconst { isDark } = useRotkiTheme();\n\nconst emptyStyles = tv({\n slots: {\n root: 'flex flex-col items-center justify-center flex-1',\n title: 'text-body-1 leading-none font-bold text-center text-current pb-0 mb-0',\n subtitle: 'text-body-2 text-center text-rui-text-secondary pb-0 mb-0',\n },\n variants: {\n compact: {\n true: {\n root: 'gap-1 py-6',\n title: 'font-normal text-rui-text-secondary',\n },\n false: {\n root: 'gap-3 min-h-56 my-4',\n },\n },\n },\n});\n\nconst ui = computed<ReturnType<typeof emptyStyles>>(() => emptyStyles({ compact }));\n</script>\n\n<template>\n <div :class=\"ui.root()\">\n <img\n v-if=\"!compact\"\n :src=\"isDark ? noDataPlaceholderDark : noDataPlaceholder\"\n :alt=\"label\"\n class=\"h-32\"\n />\n <p\n v-if=\"label\"\n :class=\"ui.title()\"\n data-id=\"empty-label\"\n >\n {{ label }}\n </p>\n <slot name=\"description\">\n <p\n v-if=\"description\"\n :class=\"ui.subtitle()\"\n data-id=\"empty-description\"\n >\n {{ description }}\n </p>\n </slot>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EA0BA,MAAM,EAAE,WAAW,cAAc;EAEjC,MAAM,cAAc,GAAG;GACrB,OAAO;IACL,MAAM;IACN,OAAO;IACP,UAAU;GACZ;GACA,UAAU,EACR,SAAS;IACP,MAAM;KACJ,MAAM;KACN,OAAO;IACT;IACA,OAAO,EACL,MAAM,sBACR;GACF,EACF;EACF,CAAC;EAED,MAAM,KAAK,eAA+C,YAAY,EAAE,SAAM,QAAA,QAAE,CAAC,CAAC;;GAIhF,OAAA,UAAA,GAAA,mBAuBM,OAAA,EAvBA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,KAAI,CAAA,EAAA,GAAA;IAET,CAAA,QAAA,WADT,UAAA,GAAA,mBAKE,OAAA;;KAHC,KAAK,MAAA,MAAA,IAAS,MAAA,sCAAA,IAAwB,MAAA,iCAAA;KACtC,KAAK,QAAA;KACN,OAAM;;IAGA,QAAA,SADR,UAAA,GAAA,mBAMI,KAAA;;KAJD,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,MAAK,CAAA;KAChB,WAAQ;IAEL,GAAA,gBAAA,QAAA,KAAK,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;IAEV,WAQO,KAAA,QAAA,eAAA,CAAA,SAAA,CANG,QAAA,eADR,UAAA,GAAA,mBAMI,KAAA;;KAJD,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,SAAQ,CAAA;KACnB,WAAQ;IAEL,GAAA,gBAAA,QAAA,WAAW,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA"}
@@ -0,0 +1,7 @@
1
+ import RuiTableErrorState_vue_vue_type_script_setup_true_lang_default from "./RuiTableErrorState.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/tables/RuiTableErrorState.vue
3
+ var RuiTableErrorState_default = RuiTableErrorState_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { RuiTableErrorState_default as default };
6
+
7
+ //# sourceMappingURL=RuiTableErrorState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiTableErrorState.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":""}
@@ -0,0 +1,28 @@
1
+ export interface TableErrorStateProps {
2
+ /** Heading for the failure, such as which read it was. */
3
+ title?: string;
4
+ /** What went wrong, in the words the caller got back. */
5
+ message?: string;
6
+ /**
7
+ * Label for the retry control. The library ships no translations, so a
8
+ * caller that wants the control has to name it; leaving this empty renders
9
+ * the reason on its own.
10
+ */
11
+ actionText?: string;
12
+ }
13
+ type __VLS_Slots = {
14
+ default?: () => any;
15
+ };
16
+ declare const __VLS_base: import("vue").DefineComponent<TableErrorStateProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
17
+ action: () => any;
18
+ }, string, import("vue").PublicProps, Readonly<TableErrorStateProps> & Readonly<{
19
+ onAction?: (() => any) | undefined;
20
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
21
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
22
+ declare const _default: typeof __VLS_export;
23
+ export default _default;
24
+ type __VLS_WithSlots<T, S> = T & {
25
+ new (): {
26
+ $slots: S;
27
+ };
28
+ };
@@ -0,0 +1,44 @@
1
+ import { tv } from "../../utils/tv.js";
2
+ import RuiAlert_default from "../alerts/RuiAlert.js";
3
+ import { createElementBlock, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, renderSlot, toDisplayString, unref, withCtx } from "vue";
4
+ //#region src/components/tables/RuiTableErrorState.vue?vue&type=script&setup=true&lang.ts
5
+ var RuiTableErrorState_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
+ name: "RuiTableErrorState",
7
+ __name: "RuiTableErrorState",
8
+ props: {
9
+ title: { default: "" },
10
+ message: { default: "" },
11
+ actionText: { default: "" }
12
+ },
13
+ emits: ["action"],
14
+ setup(__props, { emit: __emit }) {
15
+ const emit = __emit;
16
+ const ui = tv({ slots: {
17
+ root: "flex justify-center p-4",
18
+ alert: "w-full max-w-2xl"
19
+ } })();
20
+ return (_ctx, _cache) => {
21
+ return openBlock(), createElementBlock("div", {
22
+ class: normalizeClass(unref(ui).root()),
23
+ "data-id": "table-error"
24
+ }, [createVNode(RuiAlert_default, {
25
+ "action-text": __props.actionText,
26
+ class: normalizeClass(unref(ui).alert()),
27
+ title: __props.title,
28
+ type: "error",
29
+ onAction: _cache[0] || (_cache[0] = ($event) => emit("action"))
30
+ }, {
31
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.message), 1)])]),
32
+ _: 3
33
+ }, 8, [
34
+ "action-text",
35
+ "class",
36
+ "title"
37
+ ])], 2);
38
+ };
39
+ }
40
+ });
41
+ //#endregion
42
+ export { RuiTableErrorState_vue_vue_type_script_setup_true_lang_default as default };
43
+
44
+ //# sourceMappingURL=RuiTableErrorState.vue_vue_type_script_setup_true_lang.js.map