@rotki/ui-library 2.12.1 → 2.13.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 (287) hide show
  1. package/dist/components/accordions/accordion/RuiAccordion.vue.d.ts +6 -14
  2. package/dist/components/accordions/accordion/RuiAccordion.vue.js +3 -4
  3. package/dist/components/accordions/accordion/RuiAccordion.vue.js.map +1 -1
  4. package/dist/components/accordions/accordions/RuiAccordions.vue.d.ts +10 -9
  5. package/dist/components/accordions/accordions/RuiAccordions.vue.js +27 -26
  6. package/dist/components/accordions/accordions/RuiAccordions.vue.js.map +1 -1
  7. package/dist/components/alerts/RuiAlert.vue.d.ts +7 -17
  8. package/dist/components/alerts/RuiAlert.vue2.js +8 -16
  9. package/dist/components/alerts/RuiAlert.vue2.js.map +1 -1
  10. package/dist/components/buttons/button/RuiButton.vue.d.ts +5 -7
  11. package/dist/components/buttons/button/RuiButton.vue2.js +19 -20
  12. package/dist/components/buttons/button/RuiButton.vue2.js.map +1 -1
  13. package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +6 -5
  14. package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js +42 -41
  15. package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js.map +1 -1
  16. package/dist/components/calendar/RuiCalendar.vue.d.ts +1 -6
  17. package/dist/components/calendar/RuiCalendar.vue.js +7 -8
  18. package/dist/components/calendar/RuiCalendar.vue.js.map +1 -1
  19. package/dist/components/calendar/RuiCalendarGrid.vue.js +1 -1
  20. package/dist/components/calendar/RuiCalendarGrid.vue2.js +20 -18
  21. package/dist/components/calendar/RuiCalendarGrid.vue2.js.map +1 -1
  22. package/dist/components/calendar/RuiCalendarHeader.vue.js +1 -1
  23. package/dist/components/calendar/RuiCalendarHeader.vue2.js +3 -4
  24. package/dist/components/calendar/RuiCalendarHeader.vue2.js.map +1 -1
  25. package/dist/components/calendar/RuiCalendarMenu.vue.js +1 -1
  26. package/dist/components/calendar/RuiCalendarMenu.vue2.js +48 -40
  27. package/dist/components/calendar/RuiCalendarMenu.vue2.js.map +1 -1
  28. package/dist/components/cards/RuiCard.vue.d.ts +9 -24
  29. package/dist/components/cards/RuiCard.vue2.js +7 -7
  30. package/dist/components/cards/RuiCard.vue2.js.map +1 -1
  31. package/dist/components/cards/RuiCardHeader.vue.d.ts +5 -10
  32. package/dist/components/cards/RuiCardHeader.vue2.js +1 -1
  33. package/dist/components/cards/RuiCardHeader.vue2.js.map +1 -1
  34. package/dist/components/chips/RuiChip.vue.d.ts +7 -21
  35. package/dist/components/chips/RuiChip.vue2.js +16 -21
  36. package/dist/components/chips/RuiChip.vue2.js.map +1 -1
  37. package/dist/components/color-picker/RuiColorBoard.vue.d.ts +1 -1
  38. package/dist/components/color-picker/RuiColorBoard.vue2.js +19 -19
  39. package/dist/components/color-picker/RuiColorBoard.vue2.js.map +1 -1
  40. package/dist/components/color-picker/RuiColorDisplay.vue.js +3 -5
  41. package/dist/components/color-picker/RuiColorDisplay.vue.js.map +1 -1
  42. package/dist/components/color-picker/RuiColorHue.vue2.js +17 -14
  43. package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -1
  44. package/dist/components/color-picker/RuiColorInput.vue.js +9 -7
  45. package/dist/components/color-picker/RuiColorInput.vue.js.map +1 -1
  46. package/dist/components/color-picker/RuiColorPicker.vue.d.ts +7 -9
  47. package/dist/components/color-picker/RuiColorPicker.vue.js +23 -14
  48. package/dist/components/color-picker/RuiColorPicker.vue.js.map +1 -1
  49. package/dist/components/color-picker/utils.js +22 -5
  50. package/dist/components/color-picker/utils.js.map +1 -1
  51. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +2 -44
  52. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +75 -79
  53. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -1
  54. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js +1 -1
  55. package/dist/components/date-time-picker/dayjs-setup.d.ts +1 -0
  56. package/dist/components/date-time-picker/dayjs-setup.js +8 -0
  57. package/dist/components/date-time-picker/dayjs-setup.js.map +1 -0
  58. package/dist/components/date-time-picker/segment-config.d.ts +14 -0
  59. package/dist/components/date-time-picker/segment-config.js +23 -0
  60. package/dist/components/date-time-picker/segment-config.js.map +1 -0
  61. package/dist/components/date-time-picker/segment-utils.d.ts +5 -0
  62. package/dist/components/date-time-picker/segment-utils.js +36 -0
  63. package/dist/components/date-time-picker/segment-utils.js.map +1 -0
  64. package/dist/components/date-time-picker/use-date-time-selection.d.ts +1 -0
  65. package/dist/components/date-time-picker/use-date-time-selection.js +1 -0
  66. package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -1
  67. package/dist/components/date-time-picker/use-keyboard-handler.d.ts +4 -8
  68. package/dist/components/date-time-picker/use-keyboard-handler.js +9 -54
  69. package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
  70. package/dist/components/date-time-picker/utils.d.ts +1 -0
  71. package/dist/components/date-time-picker/utils.js +1 -0
  72. package/dist/components/date-time-picker/utils.js.map +1 -1
  73. package/dist/components/divider/RuiDivider.vue.d.ts +1 -3
  74. package/dist/components/divider/RuiDivider.vue.js +6 -3
  75. package/dist/components/divider/RuiDivider.vue.js.map +1 -1
  76. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +10 -1138
  77. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +153 -160
  78. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -1
  79. package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +15 -24
  80. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +32 -32
  81. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -1
  82. package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +2 -2
  83. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +19 -22
  84. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -1
  85. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +4 -2
  86. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +13 -16
  87. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +1 -1
  88. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +7 -13
  89. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +10 -9
  90. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -1
  91. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +10 -785
  92. package/dist/components/forms/select/RuiMenuSelect.vue2.js +60 -56
  93. package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -1
  94. package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +11 -10
  95. package/dist/components/forms/select/RuiSimpleSelect.vue2.js +21 -26
  96. package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +1 -1
  97. package/dist/components/forms/slider/RuiSlider.vue.d.ts +10 -26
  98. package/dist/components/forms/slider/RuiSlider.vue2.js +45 -48
  99. package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -1
  100. package/dist/components/forms/switch/RuiSwitch.vue.d.ts +12 -20
  101. package/dist/components/forms/switch/RuiSwitch.vue2.js +22 -21
  102. package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -1
  103. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +5 -30
  104. package/dist/components/forms/text-area/RuiTextArea.vue2.js +47 -83
  105. package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -1
  106. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +10 -30
  107. package/dist/components/forms/text-field/RuiTextField.vue2.js +36 -67
  108. package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -1
  109. package/dist/components/helpers/RuiFormTextDetail.vue.d.ts +1 -5
  110. package/dist/components/helpers/RuiFormTextDetail.vue.js +5 -9
  111. package/dist/components/helpers/RuiFormTextDetail.vue.js.map +1 -1
  112. package/dist/components/icons/LazyIcon.vue.d.ts +1 -3
  113. package/dist/components/icons/RuiIcon.vue.d.ts +1 -4
  114. package/dist/components/icons/RuiIcon.vue2.js +11 -14
  115. package/dist/components/icons/RuiIcon.vue2.js.map +1 -1
  116. package/dist/components/index.d.ts +4 -4
  117. package/dist/components/loaders/RuiSkeletonBase.vue.d.ts +1 -3
  118. package/dist/components/loaders/RuiSkeletonBase.vue2.js +2 -2
  119. package/dist/components/loaders/RuiSkeletonBase.vue2.js.map +1 -1
  120. package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +1 -4
  121. package/dist/components/loaders/RuiSkeletonLoader.vue2.js +2 -2
  122. package/dist/components/loaders/RuiSkeletonLoader.vue2.js.map +1 -1
  123. package/dist/components/logos/RuiLogo.vue.d.ts +1 -7
  124. package/dist/components/logos/RuiLogo.vue.js +13 -13
  125. package/dist/components/logos/RuiLogo.vue.js.map +1 -1
  126. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +5 -20
  127. package/dist/components/overlays/badge/RuiBadge.vue2.js +11 -13
  128. package/dist/components/overlays/badge/RuiBadge.vue2.js.map +1 -1
  129. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +10 -5
  130. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +18 -7
  131. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js.map +1 -1
  132. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +22 -27
  133. package/dist/components/overlays/dialog/RuiDialog.vue2.js +90 -67
  134. package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +1 -1
  135. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +24 -35
  136. package/dist/components/overlays/menu/RuiMenu.vue2.js +71 -78
  137. package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -1
  138. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +23 -30
  139. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +78 -49
  140. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +1 -1
  141. package/dist/components/overlays/notification/RuiNotification.vue.d.ts +12 -12
  142. package/dist/components/overlays/notification/RuiNotification.vue.js +27 -22
  143. package/dist/components/overlays/notification/RuiNotification.vue.js.map +1 -1
  144. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +7 -18
  145. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +16 -9
  146. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +1 -1
  147. package/dist/components/progress/RuiProgress.vue.d.ts +8 -10
  148. package/dist/components/progress/RuiProgress.vue2.js +18 -24
  149. package/dist/components/progress/RuiProgress.vue2.js.map +1 -1
  150. package/dist/components/steppers/RuiFooterStepper.vue.d.ts +10 -11
  151. package/dist/components/steppers/RuiFooterStepper.vue2.js +33 -26
  152. package/dist/components/steppers/RuiFooterStepper.vue2.js.map +1 -1
  153. package/dist/components/steppers/RuiStepper.vue.d.ts +6 -15
  154. package/dist/components/steppers/RuiStepper.vue2.js +39 -36
  155. package/dist/components/steppers/RuiStepper.vue2.js.map +1 -1
  156. package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +1 -3
  157. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +2 -2
  158. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js.map +1 -1
  159. package/dist/components/steppers/RuiStepperIcon.vue.d.ts +1 -3
  160. package/dist/components/steppers/RuiStepperIcon.vue2.js +2 -2
  161. package/dist/components/steppers/RuiStepperIcon.vue2.js.map +1 -1
  162. package/dist/components/tables/RuiDataTable.vue.d.ts +29 -81
  163. package/dist/components/tables/RuiDataTable.vue2.js +196 -601
  164. package/dist/components/tables/RuiDataTable.vue2.js.map +1 -1
  165. package/dist/components/tables/RuiDataTable.vue3.js +24 -27
  166. package/dist/components/tables/RuiDataTable.vue3.js.map +1 -1
  167. package/dist/components/tables/RuiExpandButton.vue.d.ts +3 -6
  168. package/dist/components/tables/RuiExpandButton.vue2.js +4 -2
  169. package/dist/components/tables/RuiExpandButton.vue2.js.map +1 -1
  170. package/dist/components/tables/RuiTableHead.vue.d.ts +4 -7
  171. package/dist/components/tables/RuiTableHead.vue2.js +20 -20
  172. package/dist/components/tables/RuiTableHead.vue2.js.map +1 -1
  173. package/dist/components/tables/RuiTablePagination.vue.d.ts +10 -10
  174. package/dist/components/tables/RuiTablePagination.vue2.js +27 -19
  175. package/dist/components/tables/RuiTablePagination.vue2.js.map +1 -1
  176. package/dist/components/tabs/tab/RuiTab.vue.d.ts +3 -18
  177. package/dist/components/tabs/tab/RuiTab.vue2.js +84 -52
  178. package/dist/components/tabs/tab/RuiTab.vue2.js.map +1 -1
  179. package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +3 -11
  180. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +3 -2
  181. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -1
  182. package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +2 -5
  183. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +18 -18
  184. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js.map +1 -1
  185. package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +10 -14
  186. package/dist/components/tabs/tabs/RuiTabs.vue2.js +101 -94
  187. package/dist/components/tabs/tabs/RuiTabs.vue2.js.map +1 -1
  188. package/dist/components/time-picker/RuiTimePicker.vue.d.ts +1 -4
  189. package/dist/components/time-picker/RuiTimePicker.vue2.js +88 -38
  190. package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -1
  191. package/dist/composables/breakpoint.js +8 -13
  192. package/dist/composables/breakpoint.js.map +1 -1
  193. package/dist/composables/dropdown-menu.d.ts +7 -4
  194. package/dist/composables/dropdown-menu.js +73 -50
  195. package/dist/composables/dropdown-menu.js.map +1 -1
  196. package/dist/composables/forms/auto-complete/focus.d.ts +7 -5
  197. package/dist/composables/forms/auto-complete/focus.js +28 -17
  198. package/dist/composables/forms/auto-complete/focus.js.map +1 -1
  199. package/dist/composables/forms/auto-complete/index.d.ts +0 -9
  200. package/dist/composables/forms/auto-complete/keyboard-navigation.d.ts +8 -3
  201. package/dist/composables/forms/auto-complete/keyboard-navigation.js +11 -5
  202. package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
  203. package/dist/composables/forms/auto-complete/search.d.ts +7 -0
  204. package/dist/composables/forms/auto-complete/search.js +10 -8
  205. package/dist/composables/forms/auto-complete/search.js.map +1 -1
  206. package/dist/composables/forms/auto-complete/value.d.ts +4 -0
  207. package/dist/composables/forms/auto-complete/value.js +24 -42
  208. package/dist/composables/forms/auto-complete/value.js.map +1 -1
  209. package/dist/composables/forms/use-label-with-quote.d.ts +2 -0
  210. package/dist/composables/forms/use-label-with-quote.js +14 -0
  211. package/dist/composables/forms/use-label-with-quote.js.map +1 -0
  212. package/dist/composables/forms/use-prepend-append-width.d.ts +6 -0
  213. package/dist/composables/forms/use-prepend-append-width.js +25 -0
  214. package/dist/composables/forms/use-prepend-append-width.js.map +1 -0
  215. package/dist/composables/icons.js +1 -1
  216. package/dist/composables/icons.js.map +1 -1
  217. package/dist/composables/popper.js +63 -49
  218. package/dist/composables/popper.js.map +1 -1
  219. package/dist/composables/sticky-header.d.ts +7 -5
  220. package/dist/composables/sticky-header.js +51 -41
  221. package/dist/composables/sticky-header.js.map +1 -1
  222. package/dist/composables/tables/data-table/columns.d.ts +25 -0
  223. package/dist/composables/tables/data-table/columns.js +54 -0
  224. package/dist/composables/tables/data-table/columns.js.map +1 -0
  225. package/dist/composables/tables/data-table/expansion.d.ts +17 -0
  226. package/dist/composables/tables/data-table/expansion.js +38 -0
  227. package/dist/composables/tables/data-table/expansion.js.map +1 -0
  228. package/dist/composables/tables/data-table/grouping.d.ts +29 -0
  229. package/dist/composables/tables/data-table/grouping.js +136 -0
  230. package/dist/composables/tables/data-table/grouping.js.map +1 -0
  231. package/dist/composables/tables/data-table/pagination.d.ts +33 -0
  232. package/dist/composables/tables/data-table/pagination.js +119 -0
  233. package/dist/composables/tables/data-table/pagination.js.map +1 -0
  234. package/dist/composables/tables/data-table/selection.d.ts +29 -0
  235. package/dist/composables/tables/data-table/selection.js +164 -0
  236. package/dist/composables/tables/data-table/selection.js.map +1 -0
  237. package/dist/composables/tables/data-table/sort.d.ts +32 -0
  238. package/dist/composables/tables/data-table/sort.js +136 -0
  239. package/dist/composables/tables/data-table/sort.js.map +1 -0
  240. package/dist/composables/tables/data-table/types.d.ts +14 -0
  241. package/dist/composables/tables/data-table/types.js +11 -0
  242. package/dist/composables/tables/data-table/types.js.map +1 -0
  243. package/dist/composables/theme.js +5 -21
  244. package/dist/composables/theme.js.map +1 -1
  245. package/dist/composables/timeout-manager.d.ts +4 -2
  246. package/dist/composables/timeout-manager.js +2 -1
  247. package/dist/composables/timeout-manager.js.map +1 -1
  248. package/dist/icons/icons_1.d.ts +15 -15
  249. package/dist/icons/icons_1.js +123 -123
  250. package/dist/icons/icons_1.js.map +1 -1
  251. package/dist/icons/icons_2.d.ts +46 -46
  252. package/dist/icons/icons_2.js +301 -301
  253. package/dist/icons/icons_2.js.map +1 -1
  254. package/dist/icons/icons_3.d.ts +43 -43
  255. package/dist/icons/icons_3.js +252 -252
  256. package/dist/icons/icons_3.js.map +1 -1
  257. package/dist/icons/icons_4.d.ts +72 -2
  258. package/dist/icons/icons_4.js +368 -18
  259. package/dist/icons/icons_4.js.map +1 -1
  260. package/dist/icons/index.d.ts +1 -1
  261. package/dist/icons/index.js +1 -1
  262. package/dist/icons/index.js.map +1 -1
  263. package/dist/index.js +105 -42
  264. package/dist/index.js.map +1 -1
  265. package/dist/style.css +189 -162
  266. package/dist/theme/index.js +15 -1
  267. package/dist/theme/index.js.map +1 -1
  268. package/dist/utils/assert.d.ts +1 -1
  269. package/dist/utils/assert.js.map +1 -1
  270. package/dist/utils/form-text-detail.d.ts +9 -8
  271. package/dist/utils/form-text-detail.js +1 -2
  272. package/dist/utils/form-text-detail.js.map +1 -1
  273. package/dist/utils/helpers.d.ts +4 -32
  274. package/dist/utils/helpers.js +8 -9
  275. package/dist/utils/helpers.js.map +1 -1
  276. package/dist/utils/is-equal.d.ts +1 -1
  277. package/dist/utils/is-equal.js +5 -3
  278. package/dist/utils/is-equal.js.map +1 -1
  279. package/dist/vite-plugin/index.js +4 -4
  280. package/dist/vite-plugin/index.js.map +1 -1
  281. package/dist/vite-plugin/scanner.js +3 -3
  282. package/dist/vite-plugin/scanner.js.map +1 -1
  283. package/dist/web-types.json +390 -371
  284. package/package.json +47 -44
  285. package/dist/utils/generate-id.d.ts +0 -5
  286. package/dist/utils/generate-id.js +0 -21
  287. package/dist/utils/generate-id.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { defineComponent, useSlots, toRefs, computed, ref, watch, onMounted, createElementBlock, openBlock, normalizeClass, createBlock, createCommentVNode, createElementVNode, unref, isRef, createVNode, createSlots, renderList, withCtx, renderSlot, normalizeProps, guardReactiveProps, Fragment, toDisplayString, createTextVNode, Transition } from "vue";
1
+ import { defineComponent, useModel, useSlots, computed, useTemplateRef, toRef, watch, onMounted, openBlock, createElementBlock, normalizeClass, unref, createBlock, isRef, createCommentVNode, createElementVNode, createVNode, createSlots, renderList, withCtx, renderSlot, normalizeProps, guardReactiveProps, Fragment, toDisplayString, createTextVNode, Transition, mergeModels } from "vue";
2
2
  import RuiButton from "../buttons/button/RuiButton.vue.js";
3
3
  import RuiCheckbox from "../forms/checkbox/RuiCheckbox.vue.js";
4
4
  import RuiIcon from "../icons/RuiIcon.vue.js";
@@ -9,37 +9,38 @@ import RuiTableHead from "./RuiTableHead.vue.js";
9
9
  import RuiTablePagination from "./RuiTablePagination.vue.js";
10
10
  import noDataPlaceholder from "./table_no_data_placeholder.svg.js";
11
11
  import noDataPlaceholderDark from "./table_no_data_placeholder_dark.svg.js";
12
- import { assert } from "../../utils/assert.js";
13
12
  import { useTable } from "../../composables/defaults/table.js";
14
- import { watchImmediate, isDefined } from "@vueuse/core";
15
- import "scule";
16
- import { get, set } from "@vueuse/shared";
17
- import { useRotkiTheme } from "../../composables/theme.js";
18
13
  import { useStickyTableHeader } from "../../composables/sticky-header.js";
19
- const _hoisted_1 = ["colspan"];
20
- const _hoisted_2 = { class: "flex items-center gap-2" };
21
- const _hoisted_3 = ["colspan", "rowspan"];
22
- const _hoisted_4 = ["colspan"];
23
- const _hoisted_5 = { key: 1 };
14
+ import { useTableColumns } from "../../composables/tables/data-table/columns.js";
15
+ import { useTableExpansion } from "../../composables/tables/data-table/expansion.js";
16
+ import { useTableGrouping } from "../../composables/tables/data-table/grouping.js";
17
+ import { useTablePagination } from "../../composables/tables/data-table/pagination.js";
18
+ import { useTableSelection } from "../../composables/tables/data-table/selection.js";
19
+ import { useTableSort } from "../../composables/tables/data-table/sort.js";
20
+ import { isRow } from "../../composables/tables/data-table/types.js";
21
+ import { useRotkiTheme } from "../../composables/theme.js";
22
+ import { get, set } from "@vueuse/shared";
23
+ const _hoisted_1 = ["aria-busy"];
24
+ const _hoisted_2 = ["colspan"];
25
+ const _hoisted_3 = { class: "flex items-center gap-2" };
26
+ const _hoisted_4 = ["aria-selected"];
27
+ const _hoisted_5 = ["colspan", "rowspan"];
24
28
  const _hoisted_6 = ["colspan"];
25
- const _hoisted_7 = ["colspan"];
26
- const _hoisted_8 = ["src", "alt"];
29
+ const _hoisted_7 = { key: 1 };
30
+ const _hoisted_8 = ["colspan"];
31
+ const _hoisted_9 = ["colspan"];
32
+ const _hoisted_10 = ["src", "alt"];
27
33
  const _sfc_main = /* @__PURE__ */ defineComponent({
28
34
  ...{
29
35
  name: "RuiDataTable"
30
36
  },
31
37
  __name: "RuiDataTable",
32
- props: {
38
+ props: /* @__PURE__ */ mergeModels({
33
39
  rows: {},
34
40
  rowAttr: {},
35
- modelValue: { default: void 0 },
36
41
  search: { default: "" },
37
42
  itemsPerPage: { default: 10 },
38
- pagination: { default: void 0 },
39
- paginationModifiers: { default: void 0 },
40
- sort: { default: void 0 },
41
- sortModifiers: { default: void 0 },
42
- cols: { default: void 0 },
43
+ cols: {},
43
44
  columnAttr: { default: "label" },
44
45
  dense: { type: Boolean, default: false },
45
46
  outlined: { type: Boolean, default: false },
@@ -50,579 +51,162 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
50
51
  hideDefaultHeader: { type: Boolean, default: false },
51
52
  hideDefaultFooter: { type: Boolean, default: false },
52
53
  rounded: { default: "md" },
53
- expanded: { default: void 0 },
54
54
  singleExpand: { type: Boolean, default: false },
55
55
  stickyHeader: { type: Boolean, default: false },
56
- stickyOffset: { default: void 0 },
57
- globalItemsPerPage: { type: Boolean, default: void 0 },
58
- group: { default: void 0 },
56
+ stickyOffset: {},
57
+ globalItemsPerPage: { type: Boolean, default: () => void 0 },
59
58
  groupExpandButtonPosition: { default: "start" },
60
- collapsed: { default: void 0 },
61
- disabledRows: { default: void 0 },
59
+ disabledRows: {},
62
60
  multiPageSelect: { type: Boolean, default: false },
63
- scroller: { default: void 0 },
64
61
  itemClass: { type: [Function, String], default: "" }
65
- },
66
- emits: ["update:model-value", "update:expanded", "update:pagination", "update:sort", "update:options", "update:group", "update:collapsed", "copy:group"],
62
+ }, {
63
+ "modelValue": {},
64
+ "modelModifiers": {},
65
+ "expanded": {},
66
+ "expandedModifiers": {},
67
+ "pagination": {},
68
+ "paginationModifiers": {},
69
+ "sort": {},
70
+ "sortModifiers": {},
71
+ "group": {},
72
+ "groupModifiers": {},
73
+ "collapsed": {},
74
+ "collapsedModifiers": {}
75
+ }),
76
+ emits: /* @__PURE__ */ mergeModels(["update:options", "copy:group"], ["update:modelValue", "update:expanded", "update:pagination", "update:sort", "update:group", "update:collapsed"]),
67
77
  setup(__props, { emit: __emit }) {
68
- const props = __props;
78
+ const selectedData = useModel(__props, "modelValue");
79
+ const expanded = useModel(__props, "expanded");
80
+ const [pagination, paginationModifiers] = useModel(__props, "pagination");
81
+ const [sort, sortModifiers] = useModel(__props, "sort");
82
+ const group = useModel(__props, "group");
83
+ const collapsed = useModel(__props, "collapsed");
69
84
  const emit = __emit;
70
85
  const slots = useSlots();
71
- const { stickyHeader, collapsed, modelValue, disabledRows } = toRefs(props);
72
86
  const tableDefaults = useTable();
73
87
  const { isDark } = useRotkiTheme();
74
- const stickyHeaderOffset = computed(() => props.stickyOffset !== void 0 ? props.stickyOffset : get(tableDefaults.stickyOffset));
75
- function isRow(item) {
76
- return !("__header__" in item);
77
- }
78
- function isHeaderSlot(slotName) {
79
- return slotName.startsWith("header.");
80
- }
81
- const { stick, table, tableScroller } = useStickyTableHeader(
82
- stickyHeader,
83
- get(stickyHeaderOffset)
88
+ const stickyHeaderOffset = computed(
89
+ () => __props.stickyOffset !== void 0 ? __props.stickyOffset : get(tableDefaults.stickyOffset)
84
90
  );
85
- const expandable = computed(() => props.expanded && slots["expanded-item"]);
86
- const headerSlots = computed(
87
- () => Object.keys(slots).filter(isHeaderSlot)
91
+ const table = useTemplateRef("table");
92
+ const tableScroller = useTemplateRef("tableScroller");
93
+ const { stick } = useStickyTableHeader(
94
+ toRef(() => __props.stickyHeader),
95
+ stickyHeaderOffset,
96
+ { table, tableScroller }
88
97
  );
89
- const globalItemsPerPageSettings = computed(() => {
90
- if (props.globalItemsPerPage !== void 0)
91
- return props.globalItemsPerPage;
92
- return get(tableDefaults.globalItemsPerPage);
93
- });
94
- const getKeys = (t) => Object.keys(t);
95
- const groupKeys = computed(() => {
96
- const groupBy = props.group;
97
- if (!groupBy) {
98
- return [];
99
- }
100
- if (!Array.isArray(groupBy)) {
101
- return [groupBy];
102
- }
103
- return groupBy;
104
- });
105
- const groupKey = computed(() => get(groupKeys).join(":"));
106
- const isGrouped = computed(() => !!get(groupKey));
107
- const columns = computed(() => {
108
- const data = props.cols ?? getKeys(props.rows[0] ?? {}).map(
109
- (key) => ({
110
- key,
111
- [props.columnAttr]: String(key)
112
- })
113
- );
114
- const hasExpandColumn = data.some((row) => row.key === "expand");
115
- if (get(expandable) && !hasExpandColumn) {
116
- return [
117
- ...data,
118
- {
119
- key: "expand",
120
- sortable: false,
121
- class: "w-16",
122
- cellClass: "!py-0 w-16",
123
- align: "end"
124
- }
125
- ];
126
- }
127
- const groupByKeys = get(groupKeys);
128
- if (groupByKeys.length === 0)
129
- return data;
130
- return data.filter(
131
- (column) => !groupByKeys.includes(column.key)
132
- );
133
- });
134
- const itemsLength = ref(0);
135
- const selectedData = computed({
136
- get() {
137
- return get(modelValue);
138
- },
139
- set(value) {
140
- emit("update:model-value", value);
98
+ const hasExpandedItemSlot = computed(() => !!slots["expanded-item"]);
99
+ const { expandable, isExpanded, onToggleExpand } = useTableExpansion(
100
+ { rowAttr: __props.rowAttr, singleExpand: __props.singleExpand },
101
+ { expanded, hasExpandedItemSlot }
102
+ );
103
+ function emitUpdateOptions(opts) {
104
+ emit("update:options", opts);
105
+ }
106
+ const {
107
+ sortData,
108
+ sortedMap,
109
+ sorted,
110
+ onSort: applySort
111
+ } = useTableSort(
112
+ { rows: () => __props.rows, search: () => __props.search, sortModifiersExternal: sortModifiers.external },
113
+ {
114
+ sort,
115
+ pagination,
116
+ emitUpdateOptions
141
117
  }
142
- });
143
- const internalSelectedData = ref([]);
144
- watchImmediate(modelValue, (modelValue2) => {
145
- set(internalSelectedData, modelValue2);
146
- });
147
- const rowIdentifier = computed(() => props.rowAttr);
148
- const internalPaginationState = ref();
149
- const collapsedRows = ref([]);
150
- const pagination = computed(() => props.pagination);
151
- watchImmediate(pagination, (pagination2) => {
152
- set(internalPaginationState, pagination2);
153
- });
154
- watchImmediate(collapsed, (value) => {
155
- set(collapsedRows, value ?? []);
156
- });
157
- const paginationData = computed({
158
- get() {
159
- const paginated = get(internalPaginationState);
160
- if (!paginated) {
161
- return {
162
- total: get(itemsLength),
163
- limit: props.itemsPerPage,
164
- page: 1
165
- };
166
- }
167
- if (props.paginationModifiers?.external)
168
- return paginated;
169
- return {
170
- total: get(itemsLength),
171
- limit: paginated.limit,
172
- page: paginated.page,
173
- limits: paginated.limits
174
- };
175
- },
176
- set(value) {
177
- set(internalPaginationState, value);
178
- emit("update:pagination", value);
179
- emit("update:options", {
180
- pagination: value,
181
- sort: props.sort
182
- });
118
+ );
119
+ const {
120
+ groupKeys,
121
+ groupKey,
122
+ grouped,
123
+ isExpandedGroup,
124
+ isHiddenRow,
125
+ onToggleExpandGroup,
126
+ onUngroup,
127
+ onCopyGroup
128
+ } = useTableGrouping(
129
+ { rowAttr: __props.rowAttr },
130
+ {
131
+ group,
132
+ collapsed,
133
+ sorted,
134
+ emitCopyGroup: (value) => emit("copy:group", value)
183
135
  }
184
- });
185
- const sortData = computed({
186
- get() {
187
- return props.sort;
136
+ );
137
+ const {
138
+ paginationData,
139
+ filtered,
140
+ setInternalTotal,
141
+ resetPagination
142
+ } = useTablePagination(
143
+ {
144
+ itemsPerPage: __props.itemsPerPage,
145
+ paginationModifiersExternal: paginationModifiers.external,
146
+ globalItemsPerPage: __props.globalItemsPerPage
188
147
  },
189
- set(value) {
190
- if (!props.multiPageSelect)
191
- onToggleAll(false);
192
- resetCheckboxShiftState();
193
- emit("update:sort", value);
194
- emit("update:options", {
195
- sort: value,
196
- pagination: get(pagination)
197
- });
148
+ {
149
+ pagination,
150
+ grouped,
151
+ isHiddenRow,
152
+ sort,
153
+ emitUpdateOptions,
154
+ tableDefaults
198
155
  }
199
- });
200
- const sortedMap = computed(() => {
201
- const mapped = {};
202
- const sortBy = get(sortData);
203
- if (!sortBy)
204
- return mapped;
205
- if (!Array.isArray(sortBy)) {
206
- if (sortBy.column)
207
- mapped[sortBy.column] = sortBy;
208
- return mapped;
209
- }
210
- return sortBy.reduce((acc, curr) => {
211
- if (!curr.column)
212
- return acc;
213
- return { ...acc, [curr.column]: curr };
214
- }, mapped);
215
- });
216
- const searchData = computed(() => {
217
- const query = props.search?.toLocaleLowerCase();
218
- if (!query)
219
- return props.rows;
220
- return props.rows.filter(
221
- (row) => getKeys(row).some(
222
- (key) => `${row[key]}`.toLocaleLowerCase().includes(query)
223
- )
224
- );
225
- });
226
- const sorted = computed(() => {
227
- const sortBy = get(sortData);
228
- const data = [...get(searchData)];
229
- if (!sortBy || props.sortModifiers?.external)
230
- return data;
231
- const sortOptions = { sensitivity: "accent", usage: "sort" };
232
- const sort = (by) => {
233
- data.sort((a, b) => {
234
- const column = by.column;
235
- if (!column)
236
- return 0;
237
- let [aValue, bValue] = [a[column], b[column]];
238
- if (by.direction === "desc")
239
- [aValue, bValue] = [bValue, aValue];
240
- const aNumber = Number(aValue);
241
- const bNumber = Number(bValue);
242
- if (!isNaN(aNumber) && !isNaN(bNumber))
243
- return aNumber - bNumber;
244
- return `${aValue}`.localeCompare(
245
- `${bValue}`,
246
- void 0,
247
- sortOptions
248
- );
249
- });
250
- };
251
- if (!Array.isArray(sortBy))
252
- sort(sortBy);
253
- else
254
- [...sortBy].reverse().forEach(sort);
255
- return data;
256
- });
257
- const mappedGroups = computed(() => {
258
- if (!get(isGrouped)) {
259
- return {};
260
- }
261
- const result = get(sorted);
262
- const identifier = props.rowAttr;
263
- return result.reduce((acc, row) => {
264
- if (!isDefined(row[identifier]) || row[identifier] === "")
265
- return acc;
266
- const group = getRowGroup(row);
267
- const groupVal = Object.values(group).filter(isDefined).join(",");
268
- if (!acc[groupVal]) {
269
- acc[groupVal] = [
270
- {
271
- __header__: true,
272
- group,
273
- identifier: groupVal
274
- }
275
- ];
276
- }
277
- acc[groupVal].push(row);
278
- return acc;
279
- }, {});
280
- });
281
- const grouped = computed(() => {
282
- const result = get(sorted);
283
- const groupByKey = get(groupKey);
284
- if (!groupByKey) {
285
- return result;
286
- }
287
- return Object.values(get(mappedGroups)).flatMap((grouped2) => grouped2);
288
- });
289
- const filtered = computed(() => {
290
- const result = get(grouped);
291
- const paginated = get(paginationData);
292
- const limit = paginated.limit;
293
- if (paginated && !props.paginationModifiers?.external) {
294
- const start = (paginated.page - 1) * limit;
295
- const end = start + limit;
296
- const preGroups = result.slice(0, start + 1).filter((item) => !isRow(item));
297
- const postGroups = result.slice(start + 1, end + preGroups.length).filter((item) => !isRow(item));
298
- const data = result.slice(start + preGroups.length, end + preGroups.length + postGroups.length);
299
- const nearestGroup = preGroups.at(-1);
300
- if (data.length > 0) {
301
- const firstItem = data[0];
302
- assert(firstItem);
303
- if (isRow(firstItem) && nearestGroup)
304
- data.unshift(nearestGroup);
305
- const lastItem = data.at(-1);
306
- if (lastItem && !isRow(lastItem))
307
- data.pop();
308
- }
309
- return data.filter((row) => !isHiddenRow(row));
310
- }
311
- return result.filter((row) => !isHiddenRow(row));
312
- });
313
- const visibleIdentifiers = computed(() => {
314
- const selectBy = props.rowAttr;
315
- if (!selectBy)
316
- return [];
317
- return get(filtered).filter(isRow).map((row) => row[selectBy]);
318
- });
319
- const isAllSelected = computed(() => {
320
- const selectedRows = get(selectedData);
321
- if (!selectedRows)
322
- return false;
323
- return selectedRows.length > 0 && get(visibleIdentifiers).every((id) => selectedRows.includes(id));
324
- });
325
- const indeterminate = computed(() => {
326
- const selectedRows = get(selectedData);
327
- if (!selectedRows)
328
- return false;
329
- return selectedRows.length > 0 && !get(isAllSelected);
330
- });
156
+ );
331
157
  const noData = computed(() => get(filtered).length === 0);
332
- const colspan = computed(() => {
333
- let columnLength = get(columns).length;
334
- if (get(selectedData))
335
- columnLength++;
336
- return columnLength;
158
+ const { columns, colspan, headerSlots, cellValue } = useTableColumns({
159
+ cols: () => __props.cols,
160
+ columnAttr: __props.columnAttr,
161
+ rows: () => __props.rows,
162
+ expandable,
163
+ groupKeys,
164
+ selectedData,
165
+ slots
337
166
  });
338
- const isSortedBy = (key) => key in get(sortedMap);
339
- function getSortIndex(key) {
340
- const sortBy = get(sortData);
341
- if (!sortBy || !Array.isArray(sortBy) || !isSortedBy(key))
342
- return -1;
343
- return sortBy.findIndex((sort) => sort.column === key) ?? -1;
344
- }
345
- function isSelected(identifier) {
346
- const selection = get(selectedData);
347
- if (!selection)
348
- return false;
349
- return selection.includes(identifier);
350
- }
351
- function isDisabledRow(rowKey) {
352
- const identifier = props.rowAttr;
353
- if (!identifier)
354
- return false;
355
- return !!get(disabledRows)?.some((disabledRow) => rowKey === disabledRow[identifier]);
356
- }
357
- function isExpanded(identifier) {
358
- const { expanded } = props;
359
- if (!expanded?.length)
360
- return false;
361
- return expanded.some((data) => data[props.rowAttr] === identifier);
362
- }
363
- function onToggleExpand(row) {
364
- const { expanded } = props;
365
- if (!expanded)
366
- return;
367
- const key = props.rowAttr;
368
- const rowExpanded = isExpanded(row[key]);
369
- if (props.singleExpand)
370
- return emit("update:expanded", rowExpanded ? [] : [row]);
371
- return emit(
372
- "update:expanded",
373
- rowExpanded ? expanded.filter((item) => item[key] !== row[key]) : [...expanded, row]
374
- );
375
- }
376
- function getRowGroup(row) {
377
- return get(groupKeys).reduce((acc, key) => ({ ...acc, [key]: row[key] }), {});
378
- }
379
- function getGroupRows(groupVal) {
380
- if (!get(isGrouped))
381
- return [];
382
- const groupRows = get(mappedGroups)[groupVal];
383
- assert(groupRows);
384
- return groupRows.filter(isRow);
385
- }
386
- function compareGroupsFn(a, b) {
387
- const group = get(groupKeys);
388
- if (group.length === 0)
389
- return false;
390
- return group.every((key) => a[key] === b[key]);
391
- }
392
- function isExpandedGroup(value) {
393
- return get(collapsedRows).every((row) => !compareGroupsFn(row, value));
394
- }
395
- function isHiddenRow(row) {
396
- const identifier = props.rowAttr;
397
- return get(isGrouped) && get(collapsedRows).some(
398
- (value) => isRow(row) && row[identifier] === value[identifier]
399
- );
400
- }
401
- function onToggleExpandGroup(group, value) {
402
- if (!value)
403
- return;
404
- const collapsed2 = get(collapsedRows);
405
- const groupExpanded = isExpandedGroup(group);
406
- const groupRows = getGroupRows(value);
407
- set(
408
- collapsedRows,
409
- groupExpanded ? [...collapsed2, ...groupRows] : collapsed2.filter((row) => !compareGroupsFn(row, group))
410
- );
411
- emit("update:collapsed", get(collapsedRows));
412
- }
413
- function onUngroup() {
414
- set(collapsedRows, []);
415
- emit("update:collapsed", []);
416
- emit("update:group", Array.isArray(props.group) ? [] : void 0);
417
- }
418
- function onCopyGroup(value) {
419
- emit("copy:group", value);
420
- }
421
- function onSort({
422
- key,
423
- direction
424
- }) {
425
- const sortBy = get(sortData);
426
- if (!sortBy)
427
- return;
428
- if (!Array.isArray(sortBy)) {
429
- if (isSortedBy(key)) {
430
- const newDirection = !direction || direction === "asc" ? "desc" : "asc";
431
- if (sortBy.direction === newDirection) {
432
- set(sortData, { ...sortBy, column: void 0, direction: "asc" });
433
- } else {
434
- set(sortData, {
435
- ...sortBy,
436
- direction: sortBy.direction === "asc" ? "desc" : "asc"
437
- });
438
- }
439
- } else {
440
- set(sortData, { column: key, direction: direction || "asc" });
441
- }
442
- return;
443
- }
444
- if (isSortedBy(key)) {
445
- const newDirection = !direction || direction === "asc" ? "desc" : "asc";
446
- const index = getSortIndex(key);
447
- const sortByCol = sortBy[index];
448
- assert(sortByCol);
449
- if (sortByCol.direction === newDirection)
450
- sortBy.splice(index, 1);
451
- else
452
- sortByCol.direction = sortByCol.direction === "asc" ? "desc" : "asc";
453
- set(sortData, sortBy);
454
- } else {
455
- set(sortData, [...sortBy, { column: key, direction: direction || "asc" }]);
456
- }
457
- }
458
- function isSelectable(rowKey) {
459
- return isSelected(rowKey) || !isDisabledRow(rowKey);
460
- }
461
- function mustSelect(rowKey) {
462
- return isSelected(rowKey) && isDisabledRow(rowKey);
463
- }
464
- function onToggleAll(checked) {
465
- const selectedRows = get(selectedData);
466
- if (!isDefined(selectedRows)) {
467
- return;
468
- }
469
- if (!props.multiPageSelect) {
470
- if (checked)
471
- set(selectedData, get(visibleIdentifiers).filter(isSelectable));
472
- else
473
- set(selectedData, get(visibleIdentifiers).filter(mustSelect));
474
- } else {
475
- if (checked) {
476
- set(
477
- selectedData,
478
- Array.from(/* @__PURE__ */ new Set(
479
- [
480
- ...selectedRows,
481
- ...get(visibleIdentifiers).filter(isSelectable)
482
- ]
483
- ))
484
- );
485
- } else {
486
- set(
487
- selectedData,
488
- selectedRows.filter((rowKey) => !get(visibleIdentifiers).includes(rowKey) || get(visibleIdentifiers).filter(mustSelect).includes(rowKey))
489
- );
490
- }
491
- }
492
- }
493
- const shiftClicked = ref(false);
494
- const lastSelectedIndex = ref(-1);
495
- function resetCheckboxShiftState() {
496
- set(shiftClicked, false);
497
- set(lastSelectedIndex, -1);
498
- }
499
- function onSelect(checked, value, userAction = false) {
500
- if (get(shiftClicked) && userAction)
501
- return;
502
- const selectedRows = get(internalSelectedData);
503
- if (!selectedRows)
504
- return false;
505
- const selected = isSelected(value);
506
- if (checked && !selected) {
507
- set(internalSelectedData, [...selectedRows, value]);
508
- } else if (!checked && selected) {
509
- set(
510
- internalSelectedData,
511
- [...selectedRows].filter((r) => r !== value)
512
- );
513
- }
514
- if (userAction)
515
- set(selectedData, get(internalSelectedData));
516
- }
517
- function onCheckboxClick(event, value, index) {
518
- const input = event.currentTarget.querySelector("input");
519
- const nodeName = event.target.nodeName;
520
- const shiftKey = event.shiftKey;
521
- set(shiftClicked, shiftKey);
522
- if (input && nodeName !== "INPUT") {
523
- if (shiftKey) {
524
- setTimeout(() => {
525
- let lastIndex = get(lastSelectedIndex);
526
- if (lastIndex === -1)
527
- lastIndex = index;
528
- const tableData = get(filtered);
529
- const lastSelectedData = tableData[lastIndex];
530
- assert(lastSelectedData);
531
- if (isRow(lastSelectedData)) {
532
- const id = get(rowIdentifier);
533
- const valueToApply = isSelected(lastSelectedData[id]);
534
- if (lastIndex === index) {
535
- onSelect(!valueToApply, value);
536
- } else {
537
- const from = Math.min(lastIndex, index);
538
- const to = Math.max(lastIndex, index);
539
- for (let i = from; i <= to; i++) {
540
- const currSelectedData = tableData[i];
541
- assert(currSelectedData);
542
- if (isRow(currSelectedData) && !isDisabledRow(currSelectedData[id]))
543
- onSelect(valueToApply, currSelectedData[id]);
544
- }
545
- }
546
- set(lastSelectedIndex, index);
547
- set(selectedData, get(internalSelectedData));
548
- }
549
- }, 1);
550
- } else {
551
- set(lastSelectedIndex, index);
552
- }
553
- }
554
- }
555
- const search = computed(() => props.search);
556
- function deselectRemovedRows() {
557
- get(selectedData)?.forEach((key) => {
558
- if (isSelected(key) && !get(visibleIdentifiers).includes(key))
559
- onSelect(false, key, true);
560
- });
167
+ const {
168
+ isAllSelected,
169
+ indeterminate,
170
+ isSelected,
171
+ isDisabledRow,
172
+ onToggleAll,
173
+ onSelect,
174
+ onCheckboxClick,
175
+ deselectRemovedRows,
176
+ resetCheckboxShiftState
177
+ } = useTableSelection(
178
+ { rowAttr: __props.rowAttr, multiPageSelect: __props.multiPageSelect, disabledRows: () => __props.disabledRows },
179
+ { selectedData, filtered }
180
+ );
181
+ function onSort(payload) {
182
+ applySort(payload);
183
+ if (!__props.multiPageSelect)
184
+ onToggleAll(false);
185
+ resetCheckboxShiftState();
561
186
  }
562
187
  function onPaginate() {
563
- emit("update:expanded", []);
564
- if (!props.multiPageSelect)
188
+ set(expanded, []);
189
+ if (!__props.multiPageSelect)
565
190
  onToggleAll(false);
566
191
  resetCheckboxShiftState();
567
192
  }
568
- function setInternalTotal(items) {
569
- if (!props.paginationModifiers?.external)
570
- set(itemsLength, items.filter(isRow).length);
571
- }
572
- function cellValue(row, key) {
573
- return row[key];
574
- }
575
- watch(internalPaginationState, (pagination2) => {
576
- if (pagination2?.limit && get(globalItemsPerPageSettings))
577
- set(tableDefaults.itemsPerPage, pagination2.limit);
578
- });
579
- watch(tableDefaults.itemsPerPage, (itemsPerPage) => {
580
- if (!get(globalItemsPerPageSettings))
581
- return;
582
- set(paginationData, {
583
- ...get(paginationData),
584
- limit: itemsPerPage
585
- });
586
- });
587
- watch(search, () => {
588
- set(paginationData, {
589
- ...get(paginationData),
590
- page: 1
591
- });
193
+ watch(() => __props.search, () => {
194
+ resetPagination();
592
195
  onToggleAll(false);
593
196
  resetCheckboxShiftState();
594
197
  });
595
198
  watch(sorted, (items) => {
596
- if (!props.multiPageSelect)
199
+ if (!__props.multiPageSelect)
597
200
  deselectRemovedRows();
598
201
  setInternalTotal(items);
599
202
  });
600
- watch(paginationData, (pagination2) => {
601
- const { total, limit, page } = pagination2;
602
- const maxPages = Math.ceil(total / limit);
603
- if (maxPages > 0 && page > maxPages) {
604
- set(paginationData, {
605
- ...pagination2,
606
- page: maxPages
607
- });
608
- }
609
- });
610
203
  onMounted(() => {
611
204
  setInternalTotal(get(sorted));
612
- if (!get(globalItemsPerPageSettings))
613
- return;
614
- set(paginationData, {
615
- ...get(paginationData),
616
- limit: get(tableDefaults.itemsPerPage)
617
- });
618
205
  });
619
206
  return (_ctx, _cache) => {
620
207
  return openBlock(), createElementBlock("div", {
621
- class: normalizeClass([
622
- _ctx.$style.wrapper,
623
- _ctx.$style[`rounded__${__props.rounded}`],
624
- { [_ctx.$style.outlined]: __props.outlined }
625
- ])
208
+ class: normalizeClass([_ctx.$style.wrapper, _ctx.$style[`rounded__${__props.rounded}`], { [_ctx.$style.outlined]: __props.outlined }]),
209
+ "data-id": "table-wrapper"
626
210
  }, [
627
211
  unref(paginationData) && !__props.hideDefaultHeader ? (openBlock(), createBlock(RuiTablePagination, {
628
212
  key: 0,
@@ -639,13 +223,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
639
223
  createElementVNode("div", {
640
224
  ref_key: "tableScroller",
641
225
  ref: tableScroller,
642
- class: normalizeClass(_ctx.$style.scroller)
226
+ class: normalizeClass(_ctx.$style.scroller),
227
+ "data-id": "table-scroller"
643
228
  }, [
644
229
  createElementVNode("table", {
645
230
  ref_key: "table",
646
231
  ref: table,
647
232
  class: normalizeClass([_ctx.$style.table, { [_ctx.$style.dense]: __props.dense }]),
648
- "aria-label": ""
233
+ "aria-busy": __props.loading
649
234
  }, [
650
235
  createVNode(RuiTableHead, {
651
236
  loading: __props.loading,
@@ -658,13 +243,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
658
243
  "disable-check-all": !unref(filtered)?.length,
659
244
  "is-all-selected": unref(isAllSelected),
660
245
  "no-data": unref(noData),
661
- selectable: !!unref(selectedData),
246
+ selectable: !!selectedData.value,
662
247
  "sort-data": unref(sortData),
663
248
  "sorted-map": unref(sortedMap),
664
249
  stick: unref(stick),
665
- "sticky-header": unref(stickyHeader),
250
+ "sticky-header": __props.stickyHeader,
666
251
  onSort: _cache[2] || (_cache[2] = ($event) => onSort($event)),
667
- "onSelect:all": _cache[3] || (_cache[3] = ($event) => onToggleAll($event))
252
+ "onSelect:all": _cache[3] || (_cache[3] = ($event) => unref(onToggleAll)($event))
668
253
  }, createSlots({ _: 2 }, [
669
254
  renderList(unref(headerSlots), (headerSlot) => {
670
255
  return {
@@ -675,7 +260,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
675
260
  };
676
261
  })
677
262
  ]), 1032, ["loading", "indeterminate", "capitalize-headers", "colspan", "column-attr", "columns", "dense", "disable-check-all", "is-all-selected", "no-data", "selectable", "sort-data", "sorted-map", "stick", "sticky-header"]),
678
- unref(stickyHeader) ? (openBlock(), createBlock(RuiTableHead, {
263
+ __props.stickyHeader ? (openBlock(), createBlock(RuiTableHead, {
679
264
  key: 0,
680
265
  loading: __props.loading,
681
266
  "capitalize-headers": !__props.cols,
@@ -684,7 +269,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
684
269
  columns: unref(columns),
685
270
  dense: __props.dense,
686
271
  "no-data": unref(noData),
687
- selectable: !!unref(selectedData),
272
+ selectable: !!selectedData.value,
688
273
  "sort-data": unref(sortData),
689
274
  "sorted-map": unref(sortedMap),
690
275
  "data-id": "head-clone",
@@ -708,25 +293,26 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
708
293
  }) : createCommentVNode("", true),
709
294
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(filtered), (row, index) => {
710
295
  return openBlock(), createElementBlock(Fragment, null, [
711
- !isRow(row) ? (openBlock(), createElementBlock("tr", {
296
+ !unref(isRow)(row) ? (openBlock(), createElementBlock("tr", {
712
297
  key: `row-${index}`,
713
- class: normalizeClass([_ctx.$style.tr, _ctx.$style.tr__group])
298
+ class: normalizeClass([_ctx.$style.tr, _ctx.$style.tr__group]),
299
+ "data-id": "row-group"
714
300
  }, [
715
301
  renderSlot(_ctx.$slots, "group.header", {
716
302
  colspan: unref(colspan),
717
303
  header: row,
718
- isOpen: isExpandedGroup(row.group),
719
- toggle: () => onToggleExpandGroup(row.group, row.identifier)
304
+ isOpen: unref(isExpandedGroup)(row.group),
305
+ toggle: () => unref(onToggleExpandGroup)(row.group, row.identifier)
720
306
  }, () => [
721
307
  createElementVNode("td", {
722
308
  class: normalizeClass([[_ctx.$style.td], "!p-2"]),
723
309
  colspan: unref(colspan)
724
310
  }, [
725
- createElementVNode("div", _hoisted_2, [
311
+ createElementVNode("div", _hoisted_3, [
726
312
  __props.groupExpandButtonPosition === "start" ? (openBlock(), createBlock(RuiExpandButton, {
727
313
  key: 0,
728
- expanded: isExpandedGroup(row.group),
729
- onClick: ($event) => onToggleExpandGroup(row.group, row.identifier)
314
+ expanded: unref(isExpandedGroup)(row.group),
315
+ onClick: ($event) => unref(onToggleExpandGroup)(row.group, row.identifier)
730
316
  }, null, 8, ["expanded", "onClick"])) : createCommentVNode("", true),
731
317
  renderSlot(_ctx.$slots, "group.header.content", {
732
318
  groupKey: unref(groupKey),
@@ -737,7 +323,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
737
323
  size: "sm",
738
324
  variant: "text",
739
325
  icon: "",
740
- onClick: ($event) => onCopyGroup({ key: unref(groupKey), value: row.group })
326
+ "data-cy": "group-copy-button",
327
+ onClick: ($event) => unref(onCopyGroup)({ key: unref(groupKey), value: row.group })
741
328
  }, {
742
329
  default: withCtx(() => [
743
330
  createVNode(RuiIcon, {
@@ -757,7 +344,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
757
344
  size: "sm",
758
345
  variant: "text",
759
346
  icon: "",
760
- onClick: _cache[4] || (_cache[4] = ($event) => onUngroup())
347
+ "data-cy": "group-ungroup-button",
348
+ onClick: _cache[4] || (_cache[4] = ($event) => unref(onUngroup)())
761
349
  }, {
762
350
  default: withCtx(() => [
763
351
  createVNode(RuiIcon, {
@@ -775,22 +363,24 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
775
363
  }),
776
364
  __props.groupExpandButtonPosition === "end" ? (openBlock(), createBlock(RuiExpandButton, {
777
365
  key: 1,
778
- expanded: isExpandedGroup(row.group),
779
- onClick: ($event) => onToggleExpandGroup(row.group, row.identifier)
366
+ expanded: unref(isExpandedGroup)(row.group),
367
+ onClick: ($event) => unref(onToggleExpandGroup)(row.group, row.identifier)
780
368
  }, null, 8, ["expanded", "onClick"])) : createCommentVNode("", true)
781
369
  ])
782
- ], 10, _hoisted_1)
370
+ ], 10, _hoisted_2)
783
371
  ])
784
372
  ], 2)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
785
373
  (openBlock(), createElementBlock("tr", {
786
374
  key: `row-${index}`,
787
375
  class: normalizeClass([
788
376
  _ctx.$style.tr,
789
- { [_ctx.$style.tr__selected ?? ""]: isSelected(row[unref(rowIdentifier)]) },
377
+ { [_ctx.$style.tr__selected ?? ""]: unref(isSelected)(row[__props.rowAttr]) },
790
378
  typeof __props.itemClass === "string" ? __props.itemClass : __props.itemClass(row)
791
- ])
379
+ ]),
380
+ "aria-selected": selectedData.value ? unref(isSelected)(row[__props.rowAttr]) : void 0,
381
+ "data-id": "row"
792
382
  }, [
793
- unref(selectedData) ? (openBlock(), createElementBlock("td", {
383
+ selectedData.value ? (openBlock(), createElementBlock("td", {
794
384
  key: 0,
795
385
  class: normalizeClass(_ctx.$style.checkbox),
796
386
  colspan: "1",
@@ -798,14 +388,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
798
388
  }, [
799
389
  createVNode(RuiCheckbox, {
800
390
  "data-cy": `table-toggle-check-${index}`,
801
- "model-value": isSelected(row[unref(rowIdentifier)]),
802
- disabled: isDisabledRow(row[unref(rowIdentifier)]),
391
+ "model-value": unref(isSelected)(row[__props.rowAttr]),
392
+ disabled: unref(isDisabledRow)(row[__props.rowAttr]),
803
393
  size: __props.dense ? "sm" : void 0,
804
394
  color: "primary",
805
395
  class: "select-none",
806
396
  "hide-details": "",
807
- "onUpdate:modelValue": ($event) => onSelect($event, row[unref(rowIdentifier)], true),
808
- onClick: ($event) => onCheckboxClick($event, row[unref(rowIdentifier)], index)
397
+ "onUpdate:modelValue": ($event) => unref(onSelect)($event, row[__props.rowAttr], true),
398
+ onClick: ($event) => unref(onCheckboxClick)($event, row[__props.rowAttr], index)
809
399
  }, null, 8, ["data-cy", "model-value", "disabled", "size", "onUpdate:modelValue", "onClick"])
810
400
  ], 2)) : createCommentVNode("", true),
811
401
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(columns), (column, subIndex) => {
@@ -827,8 +417,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
827
417
  }, () => [
828
418
  !slots["item.expand"] ? (openBlock(), createBlock(RuiExpandButton, {
829
419
  key: 0,
830
- expanded: isExpanded(row[unref(rowIdentifier)]),
831
- onClick: ($event) => onToggleExpand(row)
420
+ expanded: unref(isExpanded)(row[__props.rowAttr]),
421
+ onClick: ($event) => unref(onToggleExpand)(row)
832
422
  }, null, 8, ["expanded", "onClick"])) : createCommentVNode("", true)
833
423
  ]) : renderSlot(_ctx.$slots, `item.${column.key.toString()}`, {
834
424
  key: 1,
@@ -836,14 +426,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
836
426
  index,
837
427
  row
838
428
  }, () => [
839
- createTextVNode(toDisplayString(cellValue(row, column.key)), 1)
429
+ createTextVNode(toDisplayString(unref(cellValue)(row, column.key)), 1)
840
430
  ])
841
- ], 10, _hoisted_3);
431
+ ], 10, _hoisted_5);
842
432
  }), 128))
843
- ], 2)),
844
- unref(expandable) && isExpanded(row[unref(rowIdentifier)]) ? (openBlock(), createElementBlock("tr", {
433
+ ], 10, _hoisted_4)),
434
+ unref(expandable) && unref(isExpanded)(row[__props.rowAttr]) ? (openBlock(), createElementBlock("tr", {
845
435
  key: `row-expand-${index}`,
846
- class: normalizeClass([_ctx.$style.tr, _ctx.$style.tr__expandable])
436
+ class: normalizeClass([_ctx.$style.tr, _ctx.$style.tr__expandable]),
437
+ "data-id": "row-expanded"
847
438
  }, [
848
439
  createElementVNode("td", {
849
440
  colspan: unref(colspan),
@@ -853,26 +444,28 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
853
444
  row,
854
445
  index
855
446
  })
856
- ], 10, _hoisted_4)
447
+ ], 10, _hoisted_6)
857
448
  ], 2)) : createCommentVNode("", true)
858
449
  ], 64))
859
450
  ], 64);
860
451
  }), 256)),
861
- __props.loading && unref(noData) ? (openBlock(), createElementBlock("tr", _hoisted_5, [
452
+ __props.loading && unref(noData) ? (openBlock(), createElementBlock("tr", _hoisted_7, [
862
453
  createElementVNode("td", {
863
454
  class: normalizeClass(_ctx.$style.tbody__loader),
864
- colspan: unref(colspan)
455
+ colspan: unref(colspan),
456
+ "data-id": "tbody-loader"
865
457
  }, [
866
458
  createVNode(RuiProgress, {
867
459
  color: "primary",
868
460
  variant: "indeterminate",
869
461
  circular: ""
870
462
  })
871
- ], 10, _hoisted_6)
463
+ ], 10, _hoisted_8)
872
464
  ])) : createCommentVNode("", true),
873
465
  unref(noData) && __props.empty && !__props.loading ? (openBlock(), createElementBlock("tr", {
874
466
  key: 2,
875
- class: normalizeClass([_ctx.$style.tr, _ctx.$style.tr__empty])
467
+ class: normalizeClass([_ctx.$style.tr, _ctx.$style.tr__empty]),
468
+ "data-id": "row-empty"
876
469
  }, [
877
470
  createVNode(Transition, {
878
471
  appear: "",
@@ -896,20 +489,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
896
489
  src: unref(isDark) ? unref(noDataPlaceholderDark) : unref(noDataPlaceholder),
897
490
  alt: __props.empty.label,
898
491
  class: "h-32"
899
- }, null, 8, _hoisted_8),
492
+ }, null, 8, _hoisted_10),
900
493
  __props.empty.label ? (openBlock(), createElementBlock("p", {
901
494
  key: 0,
902
- class: normalizeClass(_ctx.$style.empty__label)
495
+ class: normalizeClass(_ctx.$style.empty__label),
496
+ "data-id": "empty-label"
903
497
  }, toDisplayString(__props.empty.label), 3)) : createCommentVNode("", true),
904
498
  renderSlot(_ctx.$slots, "empty-description", {}, () => [
905
499
  __props.empty.description ? (openBlock(), createElementBlock("p", {
906
500
  key: 0,
907
- class: normalizeClass(_ctx.$style.empty__description)
501
+ class: normalizeClass(_ctx.$style.empty__description),
502
+ "data-id": "empty-description"
908
503
  }, toDisplayString(__props.empty.description), 3)) : createCommentVNode("", true)
909
504
  ])
910
505
  ], 2)
911
506
  ])
912
- ], 10, _hoisted_7)
507
+ ], 10, _hoisted_9)
913
508
  ]),
914
509
  _: 3
915
510
  })
@@ -922,7 +517,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
922
517
  createElementVNode("tfoot", null, [
923
518
  renderSlot(_ctx.$slots, "tfoot")
924
519
  ])
925
- ], 2)
520
+ ], 10, _hoisted_1)
926
521
  ], 2),
927
522
  unref(paginationData) && !__props.hideDefaultFooter ? (openBlock(), createBlock(RuiTablePagination, {
928
523
  key: 1,